X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Frg_lmm.c;h=a5fa5f07fbba93c3dabf3e75f99213db0aae514c;hb=dfe84998d9dba8389ee232aa184bc3b5ae383db3;hp=51742fbe216aa27c9285742fa3e6befb2ccdf576;hpb=87c35884595a3166121854c3ae6e6e856f004ff4;p=o-du%2Fl2.git diff --git a/src/5gnrmac/rg_lmm.c b/src/5gnrmac/rg_lmm.c index 51742fbe2..a5fa5f07f 100755 --- a/src/5gnrmac/rg_lmm.c +++ b/src/5gnrmac/rg_lmm.c @@ -91,28 +91,12 @@ static uint16_t rgLMMSapCfg ARGS(( Elmnt sapType )); -static Void rgLMMShutdown ARGS(( - Inst inst -)); - static Void rgLMMFillCfmPst ARGS(( Pst *reqPst, Pst *cfmPst, RgMngmt *cfm )); -static Void rgLMMGenCntrl ARGS(( -RgMngmt *cntrl, -RgMngmt *cfm, -Pst *cfmPst -)); - -static Void rgLMMSapCntrl ARGS(( -RgMngmt *cntrl, -RgMngmt *cfm, -Pst *cfmPst -)); - /** * @brief Task Initiation callback function. @@ -446,203 +430,6 @@ RgMngmt *sts /* statistics structure */ }/*-- RgMiLrgStsReq --*/ -/** - * @brief Layer Manager Status request handler. - * - * @details - * - * Function : RgMiLrgStaReq - * - * This function handles the solicited status - * request received from the Layer Manager. - * -# Based on sta->hdr.elmId.elmnt, it retrieves the status of a - * particular SAP from the rgCb global control block. - * -# Invokes the RgMiLrgStaCfm to send back the confirmation to LM. - * - * @param[in] Pst *pst, the post structure - * @param[in] RgMngmt *sta, the status parameter's structure - * @return S16 - * -# ROK - **/ -S16 RgMiLrgStaReq -( -Pst *pst, /* post structure */ -RgMngmt *sta /* status structure */ -) -{ - Pst cfmPst; - RgMngmt cfm; - Inst inst ; - - - RG_IS_INST_VALID(pst->dstInst); - inst = pst->dstInst - RG_INST_START; - - - /* Fill the post structure for sending the confirmation */ - rgLMMFillCfmPst(pst, &cfmPst, sta); - - if (sta->t.ssta.s.sysId.ptNmb != NULLP) - { - MAC_FREE(sta->t.ssta.s.sysId.ptNmb, LRG_MAX_PT_NUM_SIZE); - } - - memset(&cfm, 0, sizeof(RgMngmt)); - cfm.hdr.elmId.elmnt = sta->hdr.elmId.elmnt; - -#ifdef LMINT3 - cfm.hdr.transId = sta->hdr.transId; -#endif - /* Check if General Config Done */ - if(rgCb[inst].rgInit.cfgDone != TRUE) - { - SGetDateTime(&cfm.t.ssta.dt); - MAC_ALLOC(cfm.t.ssta.s.sysId.ptNmb, LRG_MAX_PT_NUM_SIZE); - if(cfm.t.ssta.s.sysId.ptNmb == NULLP) - { - DU_LOG("\nERROR --> MAC : Memory Unavailable for Confirmation"); - return ROK; - } - memset((cfm.t.ssta.s.sysId.ptNmb), 0, LRG_MAX_PT_NUM_SIZE); - rgGetSId(&cfm.t.ssta.s.sysId); - cfm.cfm.status = LCM_PRIM_NOK; - cfm.cfm.reason = LCM_REASON_GENCFG_NOT_DONE; - cfm.hdr.elmId.elmnt = sta->hdr.elmId.elmnt; - RgMiLrgStaCfm(&cfmPst, &cfm); - DU_LOG("\nERROR --> MAC : Gen Cfg not done"); - return ROK; - } - - switch(sta->hdr.elmId.elmnt) - { - case STGEN: - SGetDateTime(&cfm.t.ssta.dt); - MAC_ALLOC(cfm.t.ssta.s.sysId.ptNmb, LRG_MAX_PT_NUM_SIZE); - if(cfm.t.ssta.s.sysId.ptNmb == NULLP) - { - DU_LOG("\nERROR --> MAC : Memory Unavailable for Confirmation"); - return ROK; - } - memset((cfm.t.ssta.s.sysId.ptNmb), 0, LRG_MAX_PT_NUM_SIZE); - rgGetSId(&cfm.t.ssta.s.sysId); - cfm.cfm.status = LCM_PRIM_OK; - cfm.cfm.reason = LCM_REASON_NOT_APPL; - RgMiLrgStaCfm(&cfmPst, &cfm); - break; - case STRGUSAP: - cfm.cfm.status = LCM_PRIM_OK; - cfm.cfm.reason = LCM_REASON_NOT_APPL; - SGetDateTime(&cfm.t.ssta.dt); - memcpy(&(cfm.t.ssta.s.rguSapSta), - &rgCb[inst].rguSap[sta->t.ssta.sapInst].sapSta, - sizeof(RgSapSta)); - RgMiLrgStaCfm(&cfmPst, &cfm); - break; - case STCRGSAP: - cfm.cfm.status = LCM_PRIM_OK; - cfm.cfm.reason = LCM_REASON_NOT_APPL; - SGetDateTime(&cfm.t.ssta.dt); - memcpy(&(cfm.t.ssta.s.crgSapSta), &rgCb[inst].crgSap.sapSta, - sizeof(RgSapSta)); - RgMiLrgStaCfm(&cfmPst, &cfm); - break; - case STTFUSAP: - cfm.cfm.status = LCM_PRIM_OK; - cfm.cfm.reason = LCM_REASON_NOT_APPL; - SGetDateTime(&cfm.t.ssta.dt); - memcpy(&(cfm.t.ssta.s.tfuSapSta), &rgCb[inst].tfuSap.sapSta, - sizeof(RgSapSta)); - RgMiLrgStaCfm(&cfmPst, &cfm); - break; - default: - cfm.cfm.status = LCM_PRIM_NOK; - cfm.cfm.reason = LCM_REASON_INVALID_ELMNT; - RgMiLrgStaCfm(&cfmPst, &cfm); - DU_LOG("\nERROR --> MAC : Invalid elmnt=%d",sta->hdr.elmId.elmnt); - break; - } - return ROK; -}/*-- RgMiLrgStaReq --*/ - - -/** - * @brief Layer Manager Control request handler. - * - * @details - * - * Function : RgMiLrgCntrlReq - * - * This function handles the control - * request received from the Layer Manager. - * -# Based on cntrl->hdr.elmId.elmnt, cntrl->t.cntrl.action - * and cntrl->t.cntrl.subAction, it performs the appropriate control action - * of SAP (enable/disable), Debug (enable/disable), Trace (enable/disable) - * and layer shutdown. - * -# Invokes the RgMiLrgCntrlCfm to send back the confirmation to LM. - * - * @param[in] Pst *pst, the post structure - * @param[in] RgMngmt *cntrl, the control parameter's structure - * @return S16 - * -# ROK - **/ -S16 RgMiLrgCntrlReq -( -Pst *pst, /* post structure */ -RgMngmt *cntrl /* control structure */ -) -{ - S16 ret = ROK; /* return value */ - Pst cfmPst; - RgMngmt cfm; - Inst inst; - /* Fill the post structure for sending the confirmation */ - - RG_IS_INST_VALID(pst->dstInst); - inst = pst->dstInst - RG_INST_START; - - rgLMMFillCfmPst(pst, &cfmPst, cntrl); - - memset(&cfm, 0, sizeof(RgMngmt)); -#ifdef LMINT3 - cfm.hdr.transId = cntrl->hdr.transId; -#endif - cfm.hdr.elmId.elmnt = cntrl->hdr.elmId.elmnt; - cfm.t.cntrl.action = cntrl->t.cntrl.action; - cfm.t.cntrl.subAction = cntrl->t.cntrl.subAction; - - /* Check if General Config Done*/ - if(rgCb[inst].rgInit.cfgDone != TRUE) - { - cfm.cfm.status = LCM_PRIM_NOK; - cfm.cfm.reason = LCM_REASON_GENCFG_NOT_DONE; - cfm.hdr.elmId.elmnt = cntrl->hdr.elmId.elmnt; - RgMiLrgCntrlCfm(&cfmPst, &cfm); - DU_LOG("\nERROR --> MAC : Gen Cfg not done"); - return ROK; - } - - /* General Config done, process the Control request */ - switch(cntrl->hdr.elmId.elmnt) - { - case STGEN: - rgLMMGenCntrl(cntrl, &cfm, &cfmPst); - break; - case STTFUSAP: - case STRGUSAP: - case STCRGSAP: - rgLMMSapCntrl(cntrl, &cfm, &cfmPst); - break; - default: - cfm.cfm.status = LCM_PRIM_NOK; - cfm.cfm.reason = LCM_REASON_INVALID_PAR_VAL; - RgMiLrgCntrlCfm(&cfmPst, &cfm); - DU_LOG("\nERROR --> MAC : invalid elmnt=%d",cntrl->hdr.elmId.elmnt); - break; - } - return (ret); -}/*-- RgMiLrgCntrlReq --*/ - - /** * @brief SAP Configuration Handler. * @@ -890,346 +677,6 @@ RgCfg *cfg /* Configuaration information */ } -/*********************************************************** - * - * Func : rgLMMShutdown - * - * - * Desc : Handles the MAC layer shutdown request. Calls - * rgCFGFreeCellCb(RgCellCb*) to handle each cellCb deallocation. - * - * - * Ret : Void - * - * Notes: - * - * File : rg_lmm.c - * - **********************************************************/ -static Void rgLMMShutdown(Inst inst) -{ - RgCellCb *cell = rgCb[inst].cell; - uint8_t idx; - - - /* Unbind the TFU Sap */ - if(rgCb[inst].tfuSap.sapSta.sapState == LRG_WAIT_BNDCFM) - { - //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, LRG_UNBND); - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap); - } - rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND; - } - if(rgCb[inst].tfuSap.sapSta.sapState == LRG_BND) - { - //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, LRG_UNBND); - rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND; - } - - - if(cell != NULLP) - { - for(idx=0;idx < RG_NUM_SUB_FRAMES; idx++) - { - rgTOMRlsSf(inst,&cell->subFrms[idx]); - } - - rgCFGFreeCellCb(cell); - } - - /* Deleting the RGU SAPs */ - MAC_FREE(rgCb[inst].rguSap, - (sizeof(RgUpSapCb) * rgCb[inst].numRguSaps)); - - rgCb[inst].inactiveCell = NULLP; - rgCb[inst].cell = NULLP; - - /* De-register the Timer Service */ - (Void) SDeregTmrMt(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst, - (S16)rgCb[inst].genCfg.tmrRes, macActvTmr); - - /* call back the task initialization function to intialize - * the global RgCb Struct */ - rgActvInit(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst, rgCb[inst].rgInit.region, - rgCb[inst].rgInit.reason); - - return; -} - - -/*********************************************************** - * - * Func : rgLMMGenCntrl - * - * - * Desc : Processes the LM control request for STGEN elmnt. - * - * - * Ret : Void - * - * Notes: - * - * File : rg_lmm.c - * - **********************************************************/ -static Void rgLMMGenCntrl -( -RgMngmt *cntrl, -RgMngmt *cfm, -Pst *cfmPst -) -{ - Inst inst = (cfmPst->srcInst - RG_INST_START); - - cfm->cfm.status = LCM_PRIM_OK; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - - - switch(cntrl->t.cntrl.action) - { - case AENA: - /* Action is Enable */ - switch(cntrl->t.cntrl.subAction) - { - case SATRC: - /* Enable Traces */ - rgCb[inst].rgInit.trc = TRUE; - rgCb[inst].trcLen = cntrl->t.cntrl.s.trcLen; - /*Store the response and TransId for sending the Traces */ - memcpy(&rgCb[inst].genCfg.trcResp.response, - &cntrl->hdr.response, sizeof(Resp)); - rgCb[inst].genCfg.trcResp.transId = cntrl->hdr.transId; - - break; - case SAUSTA: - /* Enable Unsolicited Status (alarms) */ - rgCb[inst].rgInit.usta = TRUE; - /*Store the response and TransId for sending the Alarms */ - memcpy(&rgCb[inst].genCfg.ustaResp.response, - &cntrl->hdr.response, sizeof(Resp)); - rgCb[inst].genCfg.ustaResp.transId = cntrl->hdr.transId; - break; - case SADBG: - /* Enable Debug Printing */ -#ifdef DEBUGP - rgCb[inst].rgInit.dbgMask |= cntrl->t.cntrl.s.rgDbgCntrl.dbgMask; -#endif - break; -#ifdef SS_DIAG - case SALOG: - rgCb[inst].rgInit.logMask = cntrl->t.cntrl.s.logMask; - break; -#endif - - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : invalid subaction=%d",cntrl->t.cntrl.subAction); - break; - } - break; - case ADISIMM: - /* Action is Diable immidiately */ - switch(cntrl->t.cntrl.subAction) - { - case SATRC: - /* Disable Traces */ - rgCb[inst].rgInit.trc = FALSE; - break; - case SAUSTA: - /* Disable Unsolicited Status (alarms) */ - rgCb[inst].rgInit.usta = FALSE; - break; - case SADBG: - /* Disable Debug Printing */ -#ifdef DEBUGP - rgCb[inst].rgInit.dbgMask &=~cntrl->t.cntrl.s.rgDbgCntrl.dbgMask; -#endif - break; -#ifdef SS_DIAG - case SALOG: - rgCb[inst].rgInit.logMask = cntrl->t.cntrl.s.logMask; - break; -#endif - - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : invalid subaction=%d",cntrl->t.cntrl.subAction); - break; - } - break; - case ASHUTDOWN: - /* Free all the memory dynamically allocated by MAC */ - rgLMMShutdown(inst); - break; - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : invalid action=%d",cntrl->t.cntrl.action); - break; - } - RgMiLrgCntrlCfm(cfmPst, cfm); - return; -} - - -/*********************************************************** - * - * Func : rgLMMSapCntrl - * - * - * Desc : Processes the LM control request for STxxxSAP elmnt. - * - * - * Ret : Void - * - * Notes: - * - * File : rg_lmm.c - * - **********************************************************/ -static Void rgLMMSapCntrl -( -RgMngmt *cntrl, -RgMngmt *cfm, -Pst *cfmPst -) -{ - Inst inst = cfmPst->srcInst - RG_INST_START; - - /* Only TFU Sap can be controlled by LM */ - switch(cntrl->hdr.elmId.elmnt) - { - case STTFUSAP: - switch(cntrl->t.cntrl.action) - { - case ABND: - /* Bind Enable Request */ - if ((rgCb[inst].tfuSap.sapSta.sapState == LRG_NOT_CFG) || - (rgCb[inst].tfuSap.sapSta.sapState == LRG_BND)) - { - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_SAP; - } - else - { - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - rgLMMStartTmr(inst,RG_BNDREQ_TMR, rgCb[inst].tfuSap.sapCfg.bndTmr.val, - (PTR)&rgCb[inst].tfuSap); - } - /* Change SAP state */ - rgCb[inst].tfuSap.sapSta.sapState = LRG_WAIT_BNDCFM; - rgCb[inst].tfuSap.numBndRetries++; - /* Store the response and TransId for sending - * the Control confirm */ - memcpy(&rgCb[inst].genCfg.bndCfmResp.response, - &cntrl->hdr.response, sizeof(Resp)); - rgCb[inst].genCfg.bndCfmResp.transId = cntrl->hdr.transId; - - /* Sending Status Indication to Layer Manager */ - cfm->cfm.status = LCM_PRIM_OK_NDONE; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - RgMiLrgCntrlCfm(cfmPst, cfm); - - //rgLIMTfuBndReq(inst,rgCb[inst].tfuSap.sapCfg.suId, - //rgCb[inst].tfuSap.sapCfg.spId); - RETVOID; - } - break; - case AUBND: - /* Unbind request */ - - /* Check if the SAP is configured */ - if( (rgCb[inst].tfuSap.sapSta.sapState == LRG_NOT_CFG) || - (rgCb[inst].tfuSap.sapSta.sapState == LRG_UNBND)) - { - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_MSGTYPE; - } - else - { - //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, TFU_UBNDREQ_MNGMT); - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap); - } - /* Change SAP state */ - rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND; - cfm->cfm.status = LCM_PRIM_OK; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - } - break; - case ADEL: - /* Delete SAP, does initialization of SAP */ - if ((rgCb[inst].tfuSap.sapSta.sapState == LRG_WAIT_BNDCFM) || - (rgCb[inst].tfuSap.sapSta.sapState == LRG_BND)) - { - //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, TFU_UBNDREQ_MNGMT); - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap); - } - } - memset(&rgCb[inst].tfuSap, 0, sizeof(RgLowSapCb)); - rgCb[inst].tfuSap.sapSta.sapState = LRG_NOT_CFG; - cfm->cfm.status = LCM_PRIM_OK; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - break; - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : rgLMMSapCntrl(): invalid action=%d", - cntrl->t.cntrl.action); - break; - } - break; - case STRGUSAP: - switch(cntrl->t.cntrl.action) - { - case ADEL: - memset(&rgCb[inst].rguSap[cntrl->t.cntrl.instId], 0, sizeof(RgUpSapCb)); - rgCb[inst].rguSap[cntrl->t.cntrl.instId].sapSta.sapState = LRG_NOT_CFG; - cfm->cfm.status = LCM_PRIM_OK; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - break; - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : rgLMMSapCntrl(): invalid action=%d", - cntrl->t.cntrl.action); - break; - } - break; - case STCRGSAP: - switch(cntrl->t.cntrl.action) - { - case ADEL: - memset(&rgCb[inst].crgSap, 0, sizeof(RgUpSapCb)); - rgCb[inst].crgSap.sapSta.sapState = LRG_NOT_CFG; - cfm->cfm.status = LCM_PRIM_OK; - cfm->cfm.reason = LCM_REASON_NOT_APPL; - break; - default: - cfm->cfm.status = LCM_PRIM_NOK; - cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL; - DU_LOG("\nERROR --> MAC : invalid action=%d",cntrl->t.cntrl.action); - - break; - } - break; - default: - /* Would never here. */ - RETVOID; - } - RgMiLrgCntrlCfm(cfmPst, cfm); - return; -} - - /*********************************************************** * * Func : rgLMMFillCfmPst @@ -1497,245 +944,6 @@ RgUstaDgn *dgn return (RgMiLrgStaInd(&rgCb[inst].rgInit.lmPst, &usta)); } - -/** - * @brief Layer Manager Trace Indication generation. - * - * @details - * - * Function : rgLMMTrcInd - * - * This API is used by the other modules of MAC to send a - * Trace indication to the Layer Manager. - * - * @param[in] Inst inst - * @param[in] Buffer *srcMbuf, the Message Buffer . - * @param[in] uint8_t event, the trace event. - * @return Void - **/ -Void rgLMMTrcInd -( -Inst inst, -Buffer *srcMbuf, /* Message Buffer */ -uint8_t event /* event */ -) -{ - Buffer *dstMbuf = NULLP; - MsgLen bufLen = 0; - Data *tempBuf; - MsgLen tempCnt; - RgMngmt trc; - Pst pst; - - - - if ((rgCb[inst].trcLen == LRG_NO_TRACE) || (srcMbuf == NULLP)) - { - DU_LOG("\nERROR --> MAC : Trace Disabled."); - return; - } - - memset(&trc, 0, sizeof(RgMngmt)); - - pst = rgCb[inst].rgInit.lmPst; - pst.selector = rgCb[inst].genCfg.trcResp.response.selector; - pst.prior = rgCb[inst].genCfg.trcResp.response.prior; - pst.route = rgCb[inst].genCfg.trcResp.response.route; - pst.region = rgCb[inst].genCfg.trcResp.response.mem.region; - pst.pool = rgCb[inst].genCfg.trcResp.response.mem.pool; - - trc.hdr.transId = rgCb[inst].genCfg.trcResp.transId; - - SGetDateTime(&trc.t.trc.dt); - - /* Check if the whole buffer is to be sent in Trace indication */ - if(rgCb[inst].trcLen == LRG_FULL_TRACE) - { - if (SCpyMsgMsg(srcMbuf, pst.region, pst.pool, &dstMbuf) - != ROK) - { - DU_LOG("\nERROR --> MAC : SCpyMsgMsg Failed."); - return; - } - trc.cfm.status = LCM_PRIM_OK; - trc.cfm.reason = LCM_REASON_NOT_APPL; - trc.t.trc.evnt = event; - - /* Send Trace Indication to Layer manager */ - RgMiLrgTrcInd(&pst, &trc, dstMbuf); - } - /* check if only a specified number of bytes are to be sent */ - else if(rgCb[inst].trcLen > 0) - { - /* Get the length of the recvd message buffer */ - if (SFndLenMsg(srcMbuf, &bufLen) != ROK) - { - DU_LOG("\nERROR --> MAC : SFndLenMsg Failed."); - return; - } - /* Check if the recvd buffer size is less than request trace len */ - if(bufLen < rgCb[inst].trcLen) - { - /* Copy the whole of the recvd buffer in trace indication */ - - if (SCpyMsgMsg(srcMbuf, pst.region, pst.pool, &dstMbuf) - != ROK) - { - DU_LOG("\nERROR --> MAC : SCpyMsgMsg Failed."); - return; - } - - trc.cfm.status = LCM_PRIM_OK; - trc.cfm.reason = LCM_REASON_NOT_APPL; - trc.t.trc.evnt = event; - - /* Send Trace Indication to Layer manager */ - RgMiLrgTrcInd(&pst, &trc, dstMbuf); - } - /* if the recvd buffer size is greater than request trace len */ - if(bufLen >= rgCb[inst].trcLen) - { - /* Get a temporary buffer to store the msg */ - if (rgAllocSBuf(inst,&tempBuf, rgCb[inst].trcLen) != ROK) - { - DU_LOG("\nERROR --> MAC : rgAllocSBuf Failed."); - return; - } - - /* Copy trcLen nos of bytes from the recvd message */ - if (SCpyMsgFix(srcMbuf,0,rgCb[inst].trcLen,tempBuf,&tempCnt) != ROK) - { - DU_LOG("\nERROR --> MAC : SCpyMsgFix Failed."); - return; - } - - if (ODU_GET_MSG_BUF(pst.region, pst.pool, &dstMbuf) != ROK) - { - DU_LOG("\nERROR --> MAC : dstMbuf Allocation Failed"); - return; - } - /* Copy the tempBuf data to dst mBuf */ - if (SCpyFixMsg(tempBuf,dstMbuf,0,rgCb[inst].trcLen,&tempCnt) != ROK) - { - DU_LOG("\nERROR --> MAC : SCpyFixMsg Failed."); - return; - } - - /*ccpu00117052 - MOD - Passing double pointer for proper NULLP - assignment */ - /* Free the memory allocated for tempBuf */ - rgFreeSBuf(inst,&tempBuf, rgCb[inst].trcLen); - - trc.cfm.status = LCM_PRIM_OK; - trc.cfm.reason = LCM_REASON_NOT_APPL; - trc.t.trc.evnt = event; - - /* Send Trace Indication to Layer manager */ - RgMiLrgTrcInd(&pst, &trc, dstMbuf); - } - } - return; -} - - -/** - * @brief Layer Manager Control Confirm generation handler - * for Bind Confirm reception at TFU interface. - * RgLiTfuBndCfm() forwards the confirmation to this - * function. All SAP state related handling is restricted - * to LMM modules, hence the cfm forwarding. - * - * @details - * - * Function : rgLMMBndCfm - * - * This API is used by the LIM module of MAC to forward - * the Bind Confirm it receives over the TFU interface. - * - * @param[in] Pst *pst, Post Structure - * @param[in] SuId suId, Service user ID - * @param[in] uint8_t status, Status - * @return S16 - * -# ROK - **/ -S16 rgLMMBndCfm -( -Pst *pst, /* Post Structure */ -SuId suId, /* Service user ID */ -uint8_t status /* Status */ -) -{ - Inst inst = pst->dstInst - RG_INST_START; - S16 ret = ROK; - RgMngmt cntrlCfm; - Pst cfmPst; - - - UNUSED(pst); - - /* Check if the suId is valid */ - if(rgCb[inst].tfuSap.sapCfg.suId != suId) - { - DU_LOG("\nERROR --> MAC : Invalid SuId"); - return RFAILED; - } - - /* check the Sap State */ - switch(rgCb[inst].tfuSap.sapSta.sapState) - { - case LRG_WAIT_BNDCFM: - break; - case LRG_BND: - /* SAP is already bound */ - return ROK; - default: - return RFAILED; - } - - cfmPst = rgCb[inst].rgInit.lmPst; - cfmPst.selector = rgCb[inst].genCfg.bndCfmResp.response.selector; - cfmPst.prior = rgCb[inst].genCfg.bndCfmResp.response.prior; - cfmPst.route = rgCb[inst].genCfg.bndCfmResp.response.route; - cfmPst.region = rgCb[inst].genCfg.bndCfmResp.response.mem.region; - cfmPst.pool = rgCb[inst].genCfg.bndCfmResp.response.mem.pool; - - memset(&cntrlCfm, 0, sizeof(RgMngmt)); - - switch(status) - { - case CM_BND_OK: /* status is OK */ - /* Change SAP state to Bound */ - rgCb[inst].tfuSap.sapSta.sapState = LRG_BND; - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - ret = rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap); - } - /* Send Control Confirm with status as OK to Layer Manager */ - cntrlCfm.cfm.status = LCM_PRIM_OK; - cntrlCfm.cfm.reason = LCM_REASON_NOT_APPL; - break; - - default: - /* Change SAP state to UnBound */ - rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND; - if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE) - { - ret = rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap); - } - /* Send Control Confirm with status as NOK to Layer Manager */ - cntrlCfm.cfm.status = LCM_PRIM_NOK; - cntrlCfm.cfm.reason = LCM_REASON_NEG_CFM; - break; - } - rgCb[inst].tfuSap.numBndRetries = 0; - cntrlCfm.hdr.elmId.elmnt = STTFUSAP; - cntrlCfm.hdr.transId = rgCb[inst].genCfg.bndCfmResp.transId; - - ret = RgMiLrgCntrlCfm(&cfmPst, &cntrlCfm); - - return (ret); -} - /********************************************************************** End of file