X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_ue_mgr.c;h=b83130e5eee96fa22e86497d5b0fcc4be1e5e9bf;hb=de6a435729e3cad9d4a66329080b8206a64f452c;hp=4206acd38ff23bc6bfadb52d5729068a14de974a;hpb=c946e9243610d6fb122e34674eeab874f7d2f7a4;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_ue_mgr.c b/src/5gnrmac/mac_ue_mgr.c index 4206acd38..b83130e5e 100644 --- a/src/5gnrmac/mac_ue_mgr.c +++ b/src/5gnrmac/mac_ue_mgr.c @@ -136,6 +136,32 @@ uint8_t fillMacCellGroupCfg(MacCellGrpCfg macCellGrp, SchMacCellGrpCfg *macCell macCellGrpCfg->phrCfg.modeOtherCG = macCellGrp.phrCfg.phrOtherCG; } +#ifdef NR_DRX + /* Copy Drx configuration */ + + macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationTimerValInMs = macCellGrp.drxCfg.drxOnDurationTimer.onDurationTimerValInMs; + if(!macCellGrp.drxCfg.drxOnDurationTimer.onDurationTimerValInMs) + macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = \ + macCellGrp.drxCfg.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds; + else + macCellGrpCfg->drxCfg.drxOnDurationTimer.onDurationtimerValue.milliSeconds = \ + macCellGrp.drxCfg.drxOnDurationTimer.onDurationtimerValue.milliSeconds; + macCellGrpCfg->drxCfg.drxInactivityTimer = macCellGrp.drxCfg.drxInactivityTimer; + macCellGrpCfg->drxCfg.drxHarqRttTimerDl = macCellGrp.drxCfg.drxHarqRttTimerDl; + macCellGrpCfg->drxCfg.drxHarqRttTimerUl = macCellGrp.drxCfg.drxHarqRttTimerUl; + macCellGrpCfg->drxCfg.drxRetransmissionTimerDl = macCellGrp.drxCfg.drxRetransmissionTimerDl; + macCellGrpCfg->drxCfg.drxRetransmissionTimerUl = macCellGrp.drxCfg.drxRetransmissionTimerUl; + macCellGrpCfg->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetChoice = macCellGrp.drxCfg.drxLongCycleStartOffset.\ + drxLongCycleStartOffsetChoice; + macCellGrpCfg->drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetVal = macCellGrp.drxCfg.drxLongCycleStartOffset.drxLongCycleStartOffsetVal; + macCellGrpCfg->drxCfg.shortDrxPres = macCellGrp.drxCfg.shortDrxPres; + if(macCellGrpCfg->drxCfg.shortDrxPres) + { + macCellGrpCfg->drxCfg.shortDrx.drxShortCycle = macCellGrp.drxCfg.shortDrx.drxShortCycle; + macCellGrpCfg->drxCfg.shortDrx.drxShortCycleTimer = macCellGrp.drxCfg.shortDrx.drxShortCycleTimer; + } + macCellGrpCfg->drxCfg.drxSlotOffset = macCellGrp.drxCfg.drxSlotOffset; +#endif return ROK; } @@ -2008,6 +2034,7 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx) DU_LOG("\nERROR --> MAC: Failed while filing MAC LC List at fillMacUeCb()"); } ueCb->transmissionAction = ueCfg->transmissionAction; + return ret; } @@ -2059,27 +2086,21 @@ uint8_t updateMacRaCb(uint16_t cellIdx, MacUeCb *ueCb) void deleteMacRaCb(uint16_t cellIdx, MacUeCb *ueCb) { - uint8_t ueIdx; + uint8_t tbIdx; + MacRaCbInfo *raCb = ueCb->raCb; + DlHarqProcCb *hqProcCb; - for(ueIdx = 0; ueIdx < MAX_NUM_UE; ueIdx++) + if(raCb && (raCb->crnti == ueCb->crnti)) { - if(macCb.macCell[cellIdx]->macRaCb[ueIdx].crnti == ueCb->crnti) + hqProcCb = &raCb->msg4HqInfo; + MAC_FREE(raCb->msg4Pdu, raCb->msg4PduLen); + for(tbIdx = 0; tbIdx < raCb->msg4HqInfo.numTb; tbIdx++) { - if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu) - { - MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu, \ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); - } - if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu) - { - MAC_FREE(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize); - } - memset(&macCb.macCell[cellIdx]->macRaCb[ueIdx], 0, sizeof(MacRaCbInfo)); - break; + MAC_FREE(raCb->msg4HqInfo.tbInfo[tbIdx].tb, \ + raCb->msg4HqInfo.tbInfo[tbIdx].tbSize - TX_PAYLOAD_HDR_LEN); } + memset(raCb, 0, sizeof(MacRaCbInfo)); } - } /******************************************************************* @@ -2099,7 +2120,8 @@ void deleteMacRaCb(uint16_t cellIdx, MacUeCb *ueCb) * ****************************************************************/ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) { - uint8_t ret =ROK; + uint8_t ret = ROK; + uint8_t hqProcIdx = 0; if((ueCb->ueId == ueCfg->ueId) && (ueCb->crnti == ueCfg->crnti)\ &&(ueCb->state == UE_STATE_ACTIVE)) @@ -2118,6 +2140,12 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) } else { + /* Initialize all DL HARQ PROC ID to MAX NUM OF HARQ PROC */ + for(hqProcIdx = 0; hqProcIdx < MAX_NUM_HARQ_PROC; hqProcIdx++) + { + ueCb->dlInfo.dlHarqEnt.harqProcCb[hqProcIdx].procId = MAX_NUM_HARQ_PROC; + } + /* If UE has not requested for RACH yet, it means UE context is created for a * UE in handover */ if(macCb.macCell[cellIdx]->macRaCb[ueCb->ueId-1].crnti == ueCb->crnti) @@ -2166,7 +2194,6 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) } else { - deleteMacRaCb(cellIdx, ueCb); return ROK; } } @@ -2707,10 +2734,10 @@ void deletePucchResourcesCfg(PucchResrcCfg *resrcCfg) * * @details * -* Function : MacProcSchUeCfgRsp +* Function : MacProcSchUeDeleteRsp * * Functionality: -* Processes UE create delete from scheduler +* Processes UE delete from scheduler * * @params[in] Pst : Post structure * schUeDelRsp : Scheduler UE delete respons @@ -2721,10 +2748,11 @@ void deletePucchResourcesCfg(PucchResrcCfg *resrcCfg) uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp) { - uint8_t ueId =0, isCrntiValid = 0; + uint8_t ueId =0, isCrntiValid = 0, tbIdx =0, idx=0; uint16_t cellIdx=0; uint8_t ret = RFAILED; UeDeleteStatus result; + DlHarqEnt *dlHarqEnt; #ifdef CALL_FLOW_DEBUG_LOG DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_UE_DELETE_RSP_TO_MAC\n"); @@ -2763,9 +2791,21 @@ uint8_t MacProcSchUeDeleteRsp(Pst *pst, SchUeDeleteRsp *schUeDelRsp) MAC_FREE(macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.lcCb[lcIdx].snssai, sizeof(Snssai)); } #endif + dlHarqEnt = &macCb.macCell[cellIdx]->ueCb[ueId -1].dlInfo.dlHarqEnt; + for(idx =0 ; idxharqProcCb[idx].numTb) + { + + MAC_FREE(dlHarqEnt->harqProcCb[idx].tbInfo[tbIdx].tb, dlHarqEnt->harqProcCb[idx].tbInfo[tbIdx].tbSize); + dlHarqEnt->harqProcCb[idx].numTb--; + tbIdx++; + } + } memset(&macCb.macCell[cellIdx]->ueCb[ueId -1], 0, sizeof(MacUeCb)); macCb.macCell[cellIdx]->numActvUe--; - result = SUCCESS; + result = DEL_SUCCESSFUL; ret = ROK; } else @@ -2856,7 +2896,7 @@ uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete) { uint8_t ret = ROK; uint8_t cellIdx=0; - UeDeleteStatus result=SUCCESS; + UeDeleteStatus result=DEL_SUCCESSFUL; MacUeCb *ueCb = NULLP; MacCellCb *cellCb = NULLP; @@ -2890,7 +2930,7 @@ uint8_t MacProcUeDeleteReq(Pst *pst, MacUeDelete *ueDelete) result = CELLID_INVALID; } - if(result != SUCCESS) + if(result != DEL_SUCCESSFUL) { MacSendUeDeleteRsp(ueDelete->cellId, ueDelete->crnti, result); MAC_FREE_SHRABL_BUF(pst->region, pst->pool, ueDelete, sizeof(MacUeDelete));