X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_ue_mgr.c;h=7ede4a5de2210d2a1047c813ac83a2b19ac7b02c;hb=f0f283a72b3bdf0740cb49071a2f025159f0bf15;hp=a7e3b2972d29e4bfde7d269761a2aaf04802024b;hpb=1616921700a3c7541f1df6dd2678f9ee4d8e933b;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_ue_mgr.c b/src/5gnrmac/mac_ue_mgr.c index a7e3b2972..7ede4a5de 100644 --- a/src/5gnrmac/mac_ue_mgr.c +++ b/src/5gnrmac/mac_ue_mgr.c @@ -29,25 +29,25 @@ #include "mac_utils.h" /* function pointers for packing slot ind from mac to sch */ -MacSchUeCreateReqFunc macSchUeCreateReqOpts[] = +MacSchAddUeConfigReqFunc macSchAddUeConfigReqOpts[] = { - packMacSchUeCreateReq, /* packing for loosely coupled */ - MacSchUeCreateReq, /* packing for tightly coupled */ - packMacSchUeCreateReq /* packing for light weight loosely coupled */ + packMacSchAddUeConfigReq, /* packing for loosely coupled */ + MacSchAddUeConfigReq, /* packing for tightly coupled */ + packMacSchAddUeConfigReq /* packing for light weight loosely coupled */ }; -MacDuUeCfgRspFunc MacDuUeCfgRspOpts[] = +MacDuUeCfgRspFunc macDuUeCfgRspOpts[] = { packDuMacUeCfgRsp, /* packing for loosely coupled */ DuProcMacUeCfgRsp, /* packing for tightly coupled */ packDuMacUeCfgRsp /* packing for light weight loosly coupled */ }; -MacSchUeReconfigReqFunc macSchUeReconfigReqOpts[] = +MacSchModUeConfigReqFunc macSchModUeConfigReqOpts[] = { - packMacSchUeReconfigReq, /* packing for loosely coupled */ - MacSchUeReconfigReq, /* packing for tightly coupled */ - packMacSchUeReconfigReq /* packing for light weight loosely coupled */ + packMacSchModUeConfigReq, /* packing for loosely coupled */ + MacSchModUeConfigReq, /* packing for tightly coupled */ + packMacSchModUeConfigReq /* packing for light weight loosely coupled */ }; /******************************************************************* @@ -77,7 +77,7 @@ uint8_t fillMacCellGroupCfg(MacCellGrpCfg macCellGrp, SchMacCellGrpCfg *macCell schedReqCfg->addModListCount = macCellGrp.schReqCfg.addModListCount; if(schedReqCfg->addModListCount > MAX_NUM_SR_CFG_PER_CELL_GRP) { - DU_LOG("\nMAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \ + DU_LOG("\nERROR --> MAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \ schedReqCfg->addModListCount, MAX_NUM_SR_CFG_PER_CELL_GRP); return RFAILED; } @@ -97,7 +97,7 @@ uint8_t fillMacCellGroupCfg(MacCellGrpCfg macCellGrp, SchMacCellGrpCfg *macCell tagCfg->addModListCount = macCellGrp.tagCfg.addModListCount; if(tagCfg->addModListCount > MAX_NUM_TAGS) { - DU_LOG("\nMAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \ + DU_LOG("\nERROR --> MAC : Scheduling Request Add/Mod Count %d exceeds max limit %d", \ tagCfg->addModListCount, MAX_NUM_TAGS); return RFAILED; } @@ -174,7 +174,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg * MAC_ALLOC_SHRABL_BUF(schPdschCfg->maxMimoLayers, sizeof(uint8_t)); if(!schPdschCfg->maxMimoLayers) { - DU_LOG("\nMAC :Memory Alloc MimoLayers Failed at fillPdschServCellCfg()"); + DU_LOG("\nERROR --> MAC :Memory Alloc MimoLayers Failed at fillPdschServCellCfg()"); return RFAILED; } } @@ -195,7 +195,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg * MAC_ALLOC_SHRABL_BUF(schPdschCfg->maxCodeBlkGrpPerTb, sizeof(SchMaxCodeBlkGrpPerTB)); if(!schPdschCfg->maxCodeBlkGrpPerTb) { - DU_LOG("\nMAC :Memory Alloc for code Block Failed at fillPdschServCellCfg()"); + DU_LOG("\nERROR --> MAC :Memory Alloc for code Block Failed at fillPdschServCellCfg()"); return RFAILED; } } @@ -213,7 +213,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg * MAC_ALLOC_SHRABL_BUF(schPdschCfg->codeBlkGrpFlushInd, sizeof(bool)); if(!schPdschCfg->codeBlkGrpFlushInd) { - DU_LOG("\nMAC :Memory Alloc for Flush Ind Failed at fillPdschServCellCfg()"); + DU_LOG("\nERROR --> MAC :Memory Alloc for Flush Ind Failed at fillPdschServCellCfg()"); return RFAILED; } } @@ -231,7 +231,7 @@ uint8_t fillPdschServCellCfg(PdschServCellCfg macPdschCfg, SchPdschServCellCfg * MAC_ALLOC_SHRABL_BUF(schPdschCfg->xOverhead, sizeof(SchPdschXOverhead)); if(!schPdschCfg->xOverhead) { - DU_LOG("\nMAC :Memory Alloc for xOverHead Failed at fillPdschServCellCfg()"); + DU_LOG("\nERROR --> MAC :Memory Alloc for xOverHead Failed at fillPdschServCellCfg()"); return RFAILED; } } @@ -276,7 +276,7 @@ uint8_t fillInitalUlBwpPuschCfg(PuschCfg macPuschCfg, SchPuschCfg *schPuschCfg) schPuschCfg->numTimeDomRsrcAlloc = macPuschCfg.numTimeDomRsrcAlloc; if(schPuschCfg->numTimeDomRsrcAlloc > MAX_NUM_UL_ALLOC) { - DU_LOG("\nMAC : Number of Time domain resource allocation [%d] exceeds max limit [%d]",\ + DU_LOG("\nERROR --> MAC : Number of Time domain resource allocation [%d] exceeds max limit [%d]",\ schPuschCfg->numTimeDomRsrcAlloc, MAX_NUM_UL_ALLOC); return RFAILED; } @@ -296,6 +296,732 @@ uint8_t fillInitalUlBwpPuschCfg(PuschCfg macPuschCfg, SchPuschCfg *schPuschCfg) return ROK; } +/******************************************************************* + * + * @brief Function to fillResrcSetList sent by DU + * + * @details + * + * Function : fillResrcSetList + * + * Functionality: Function to fillResrcSetList sent by DU + * + * @params[in] PucchResrcSetCfg pointer, + * SchPucchResrcSetCfg pointer + * @return void + * + * ****************************************************************/ + +void fillResrcSetList(PucchResrcSetCfg *macRsrcSetList, SchPucchResrcSetCfg *schRsrcSetList) +{ + uint8_t arrIdx, rsrcListIdx; + + /* ResrcSetToAddModList */ + schRsrcSetList->resrcSetToAddModListCount = macRsrcSetList->resrcSetToAddModListCount; + for(arrIdx = 0; arrIdx < macRsrcSetList->resrcSetToAddModListCount; arrIdx++) + { + schRsrcSetList->resrcSetToAddModList[arrIdx].resrcSetId =\ + macRsrcSetList->resrcSetToAddModList[arrIdx].resrcSetId; + + schRsrcSetList->resrcSetToAddModList[arrIdx].maxPayLoadSize =\ + macRsrcSetList->resrcSetToAddModList[arrIdx].maxPayLoadSize; + + schRsrcSetList->resrcSetToAddModList[arrIdx].resrcListCount =\ + macRsrcSetList->resrcSetToAddModList[arrIdx].resrcListCount; + for(rsrcListIdx = 0; rsrcListIdx < macRsrcSetList->resrcSetToAddModList[arrIdx].\ + resrcListCount; rsrcListIdx++) + { + schRsrcSetList->resrcSetToAddModList[arrIdx].resrcList[rsrcListIdx] =\ + macRsrcSetList->resrcSetToAddModList[arrIdx].resrcList[rsrcListIdx]; + } + } + /* ResrcSetToRelList */ + schRsrcSetList->resrcSetToRelListCount = macRsrcSetList->resrcSetToRelListCount; + for(arrIdx = 0; arrIdx < macRsrcSetList->resrcSetToRelListCount; arrIdx++) + { + schRsrcSetList->resrcSetToRelList[arrIdx] = macRsrcSetList->resrcSetToRelList[arrIdx]; + } +} + +/******************************************************************* + * + * @brief Function to fillResrcList sent by DU + * + * @details + * + * Function : fillResrcList + * + * Functionality: Function to fillResrcList sent by DU + * + * @params[in] PucchResrcCfg pointer, + * SchPucchResrcCfg pointer + * @return ROK/RFAILED; + * + * ****************************************************************/ +uint8_t fillResrcList(PucchResrcCfg *macResrcCfg, SchPucchResrcCfg *schResrcCfg) +{ + uint8_t arrIdx; + + schResrcCfg->resrcToAddModListCount = macResrcCfg->resrcToAddModListCount; + for(arrIdx=0; arrIdx < macResrcCfg->resrcToAddModListCount; arrIdx++) + { + schResrcCfg->resrcToAddModList[arrIdx].resrcId =\ + macResrcCfg->resrcToAddModList[arrIdx].resrcId; + schResrcCfg->resrcToAddModList[arrIdx].startPrb =\ + macResrcCfg->resrcToAddModList[arrIdx].startPrb; + schResrcCfg->resrcToAddModList[arrIdx].intraFreqHop =\ + macResrcCfg->resrcToAddModList[arrIdx].intraFreqHop; + schResrcCfg->resrcToAddModList[arrIdx].secondPrbHop =\ + macResrcCfg->resrcToAddModList[arrIdx].secondPrbHop; + schResrcCfg->resrcToAddModList[arrIdx].pucchFormat =\ + macResrcCfg->resrcToAddModList[arrIdx].pucchFormat; + if(macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format0) + { + MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0, sizeof(SchPucchFormat0)); + if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate memory for Format0 in fillResrcList()"); + return RFAILED; + } + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0->initialCyclicShift =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format0->initialCyclicShift; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0->numSymbols =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format0->numSymbols; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format0->startSymbolIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format0->startSymbolIdx; + } + + if(macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format1) + { + MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1, sizeof(SchPucchFormat1)); + if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate memory for Format1 in fillResrcList()"); + return RFAILED; + } + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1->initialCyclicShift =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format1->initialCyclicShift; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1->numSymbols =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format1->numSymbols; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1->startSymbolIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format1->startSymbolIdx; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format1->timeDomOCC =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format1->timeDomOCC; + } + + if(macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format2) + { + MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format2, sizeof(SchPucchFormat2_3)); + if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format2 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate memory for Format2 in fillResrcList()"); + return RFAILED; + } + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format2->numPrbs =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format2->numPrbs; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format2->numSymbols =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format2->numSymbols; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format2->startSymbolIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format2->startSymbolIdx; + } + + if(macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format3) + { + MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format3, sizeof(SchPucchFormat2_3)); + if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format3 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate memory for Format3 in fillResrcList()"); + return RFAILED; + } + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format3->numPrbs =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format3->numPrbs; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format3->numSymbols =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format3->numSymbols; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format3->startSymbolIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format3->startSymbolIdx; + } + + if(macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format4) + { + MAC_ALLOC(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4, sizeof(SchPucchFormat4)); + if(schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate memory for Format4 in fillResrcList()"); + return RFAILED; + } + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4->numSymbols =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format4->numSymbols; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4->startSymbolIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format4->startSymbolIdx; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4->occLen =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format4->occLen; + schResrcCfg->resrcToAddModList[arrIdx].SchPucchFormat.format4->occIdx =\ + macResrcCfg->resrcToAddModList[arrIdx].PucchFormat.format4->occIdx; + } + } + return ROK; +} + +/******************************************************************* + * + * @brief Function to fillPucchFormatCfg sent by DU + * + * @details + * + * Function : fillPucchFormatCfg + * + * Functionality: Function to fillPucchFormatCfg + * + * @params[in] PucchFormatCfg pointer, + * SchPucchFormatCfg pointer + * @return void + * + * ****************************************************************/ + +void fillPucchFormatCfg(PucchFormatCfg *macFormatCfg, SchPucchFormatCfg *schFormatCfg) +{ + schFormatCfg->interSlotFreqHop = macFormatCfg->interSlotFreqHop; + schFormatCfg->addDmrs = macFormatCfg->addDmrs; + schFormatCfg->maxCodeRate = macFormatCfg->maxCodeRate; + schFormatCfg->numSlots = macFormatCfg->numSlots; + schFormatCfg->pi2BPSK = macFormatCfg->pi2BPSK; + schFormatCfg->harqAckCSI = macFormatCfg->harqAckCSI; +} + +/******************************************************************* + * + * @brief Function to fillPucchSchedReqCfg sent by DU + * + * @details + * + * Function : fillPucchSchedReqCfg + * + * Functionality: Function to fillPucchSchedReqCfg + * + * @params[in] PucchSchedReqCfg pointer, + * SchPucchSchedReqCfg pointer + * @return void + * + * ****************************************************************/ +void fillPucchSchedReqCfg(PucchSchedReqCfg *macSchedReqCfg, SchPucchSchedReqCfg *schSchedReqCfg) +{ + uint8_t arrIdx; + + schSchedReqCfg->schedAddModListCount = macSchedReqCfg->schedAddModListCount; + for(arrIdx=0; arrIdx < schSchedReqCfg->schedAddModListCount; arrIdx++) + { + schSchedReqCfg->schedAddModList[arrIdx].resrcId = macSchedReqCfg->schedAddModList[arrIdx].resrcId; + schSchedReqCfg->schedAddModList[arrIdx].requestId = macSchedReqCfg->schedAddModList[arrIdx].requestId; + schSchedReqCfg->schedAddModList[arrIdx].periodicity =\ + macSchedReqCfg->schedAddModList[arrIdx].periodicity; + schSchedReqCfg->schedAddModList[arrIdx].offset =\ + macSchedReqCfg->schedAddModList[arrIdx].offset; + schSchedReqCfg->schedAddModList[arrIdx].resrc =\ + macSchedReqCfg->schedAddModList[arrIdx].resrc; + } + schSchedReqCfg->schedRelListCount = macSchedReqCfg->schedRelListCount; + for(arrIdx=0; arrIdx < schSchedReqCfg->schedRelListCount; arrIdx++) + { + schSchedReqCfg->schedRelList[arrIdx] = macSchedReqCfg->schedRelList[arrIdx]; + } +} + +/******************************************************************* + * + * @brief Function to fillMultiCsiCfg sent by DU + * + * @details + * + * Function : fillMultiCsiCfg + * + * Functionality: Function to fillMultiCsiCfg + * + * @params[in] PucchMultiCsiCfg pointer, + * SchPucchMultiCsiCfg pointer + * @return void + * + * ****************************************************************/ + + void fillMultiCsiCfg(PucchMultiCsiCfg *macCsiCfg, SchPucchMultiCsiCfg *schCsiCfg) + { + uint8_t arrIdx; + + schCsiCfg->multiCsiResrcListCount = macCsiCfg->multiCsiResrcListCount; + for(arrIdx =0; arrIdx < schCsiCfg->multiCsiResrcListCount; arrIdx++) + { + schCsiCfg->multiCsiResrcList[arrIdx] = macCsiCfg->multiCsiResrcList[arrIdx]; + } + } + +/******************************************************************* + * + * @brief Function to fillDlToUlAck sent by DU + * + * @details + * + * Function : fillDlToUlAck + * + * Functionality: Function to fillDlToUlAck + * + * @params[in] PucchDlDataToUlAck pointer, + * SchPucchDlDataToUlAck pointer + * @return void + * + * ****************************************************************/ + +void fillDlToUlAck(PucchDlDataToUlAck *macUlAck, SchPucchDlDataToUlAck *schUlAck) +{ + uint8_t arrIdx; + + schUlAck->dlDataToUlAckListCount = macUlAck->dlDataToUlAckListCount; + for(arrIdx =0; arrIdx < macUlAck->dlDataToUlAckListCount; arrIdx++) + { + schUlAck->dlDataToUlAckList[arrIdx] = macUlAck->dlDataToUlAckList[arrIdx]; + } +} + +/******************************************************************* + * + * @brief Function to fillPucchPowerControl sent by DU + * + * @details + * + * Function : fillPucchPowerControl + * + * Functionality: Function to fillPucchPowerControl + * + * @params[in] PucchPowerControl pointer, + * SchPucchPowerControl pointer + * @return void + * + * ****************************************************************/ + +void fillPucchPowerControl(PucchPowerControl *macPwrCtrl, SchPucchPowerControl *schPwrCtrl) +{ + uint8_t arrIdx; + + schPwrCtrl->deltaF_Format0 = macPwrCtrl->deltaF_Format0; + schPwrCtrl->deltaF_Format1 = macPwrCtrl->deltaF_Format1; + schPwrCtrl->deltaF_Format2 = macPwrCtrl->deltaF_Format2; + schPwrCtrl->deltaF_Format3 = macPwrCtrl->deltaF_Format3; + schPwrCtrl->deltaF_Format4 = macPwrCtrl->deltaF_Format4; + schPwrCtrl->p0SetCount = macPwrCtrl->p0SetCount; + for(arrIdx =0; arrIdx < macPwrCtrl->p0SetCount; arrIdx++) + { + schPwrCtrl->p0Set[arrIdx].p0PucchId = macPwrCtrl->p0Set[arrIdx].p0PucchId; + schPwrCtrl->p0Set[arrIdx].p0PucchVal = macPwrCtrl->p0Set[arrIdx].p0PucchVal; + } + schPwrCtrl->pathLossRefRSListCount = macPwrCtrl->pathLossRefRSListCount; + for(arrIdx = 0; arrIdx < macPwrCtrl->pathLossRefRSListCount; arrIdx++) + { + schPwrCtrl->pathLossRefRSList[arrIdx].pathLossRefRSId =\ + macPwrCtrl->pathLossRefRSList[arrIdx].pathLossRefRSId; + } +} + +/******************************************************************* + * + * @brief Function to fillOtherPucchFormatCfg sent by DU + * + * @details + * + * Function : fillOtherPucchFormatCfg + * + * Functionality: Function to fillOtherPucchFormatCfg + * + * @params[in] PucchFormat + * PucchFormatCfg pointer, + * SchPucchCfg pointer + * @return void + * + * ****************************************************************/ + +uint8_t fillOtherPucchFormatCfg(uint8_t pucchFormat, PucchFormatCfg *macFormatCfg, SchPucchCfg *schPucchCfg) +{ + + switch(pucchFormat) + { + case PUCCH_FORMAT_1: + { + if(macFormatCfg) + { + MAC_ALLOC(schPucchCfg->format1, sizeof(SchPucchFormatCfg)); + if(schPucchCfg->format1 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Format 1 in fillOtherPucchFormatCfg()"); + return RFAILED; + } + fillPucchFormatCfg(macFormatCfg, schPucchCfg->format1); + } + break; + } + case PUCCH_FORMAT_2: + { + if(macFormatCfg) + { + MAC_ALLOC(schPucchCfg->format2, sizeof(SchPucchFormatCfg)); + if(schPucchCfg->format2 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Format 2 in fillOtherPucchFormatCfg()"); + return RFAILED; + } + fillPucchFormatCfg(macFormatCfg, schPucchCfg->format2); + } + break; + } + case PUCCH_FORMAT_3: + { + if(macFormatCfg) + { + MAC_ALLOC(schPucchCfg->format3, sizeof(SchPucchFormatCfg)); + if(schPucchCfg->format3 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Format 3 in fillOtherPucchFormatCfg()"); + return RFAILED; + } + fillPucchFormatCfg(macFormatCfg, schPucchCfg->format3); + } + break; + } + case PUCCH_FORMAT_4: + { + if(macFormatCfg) + { + MAC_ALLOC(schPucchCfg->format4, sizeof(SchPucchFormatCfg)); + if(schPucchCfg->format4 == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Format 4 in fillOtherPucchFormatCfg()"); + return RFAILED; + } + fillPucchFormatCfg(macFormatCfg, schPucchCfg->format4); + } + break; + } + default: + DU_LOG("\nERROR --> MAC : Invalid Format Cfg %d in fillInitialUlBwpPucchCfg()", pucchFormat); + return RFAILED; + } + return ROK; +} + +/******************************************************************* + * + * @brief Fills PUCCH config in initial UL BWP config for SCH UE Cfg + * + * @details + * + * Function : fillInitalUlBwpPucchCfg + * + * Functionality: + * Fills PUCCH cofig in initial UL BWP config for SCH UE Cfg + * + * @params[in] macPucchCfg : Initial UL-BWP PUCCH cfg at MAC + * schPucchCfg : Initial UL-BWP PUCCH cfg to be filled + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t fillInitialUlBwpPucchCfg(PucchCfg *macPucchCfg, SchPucchCfg *schPucchCfg) +{ + if(macPucchCfg->resrcSet) + { + MAC_ALLOC(schPucchCfg->resrcSet, sizeof(SchPucchResrcSetCfg)); + if(schPucchCfg->resrcSet == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Resrc set List in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->resrcSet, 0, sizeof(SchPucchResrcSetCfg)); + fillResrcSetList(macPucchCfg->resrcSet, schPucchCfg->resrcSet); + } + + if(macPucchCfg->resrc) + { + MAC_ALLOC(schPucchCfg->resrc, sizeof(SchPucchResrcCfg)); + if(schPucchCfg->resrc == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for Resrc List in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->resrc, 0, sizeof(SchPucchResrcCfg)); + if((fillResrcList(macPucchCfg->resrc, schPucchCfg->resrc)) != ROK) + { + DU_LOG("\nERROR --> MAC : Failed in fillResrcList() at fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + } + + /* valid for format 1, 2, 3, 4 */ + fillOtherPucchFormatCfg(PUCCH_FORMAT_1, macPucchCfg->format1, schPucchCfg); + fillOtherPucchFormatCfg(PUCCH_FORMAT_2, macPucchCfg->format2, schPucchCfg); + fillOtherPucchFormatCfg(PUCCH_FORMAT_3, macPucchCfg->format3, schPucchCfg); + fillOtherPucchFormatCfg(PUCCH_FORMAT_4, macPucchCfg->format4, schPucchCfg); + + if(macPucchCfg->schedReq) + { + MAC_ALLOC(schPucchCfg->schedReq, sizeof(SchPucchSchedReqCfg)); + if(schPucchCfg->schedReq == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for PucchSchedReqCfg in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->schedReq, 0, sizeof(SchPucchSchedReqCfg)); + fillPucchSchedReqCfg(macPucchCfg->schedReq, schPucchCfg->schedReq); + } + + if(macPucchCfg->multiCsiCfg) + { + MAC_ALLOC(schPucchCfg->multiCsiCfg, sizeof(SchPucchMultiCsiCfg)); + if(schPucchCfg->multiCsiCfg == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for multiCsiCfg in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->multiCsiCfg, 0, sizeof(SchPucchMultiCsiCfg)); + fillMultiCsiCfg(macPucchCfg->multiCsiCfg, schPucchCfg->multiCsiCfg); + } + + //TODO: To add the support for spatial Config + schPucchCfg->spatialInfo = NULLP; + + if(macPucchCfg->dlDataToUlAck) + { + MAC_ALLOC(schPucchCfg->dlDataToUlAck, sizeof(SchPucchDlDataToUlAck)); + if(schPucchCfg->dlDataToUlAck == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for dlDataToUlAck in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->dlDataToUlAck, 0, sizeof(SchPucchDlDataToUlAck)); + fillDlToUlAck(macPucchCfg->dlDataToUlAck, schPucchCfg->dlDataToUlAck); + + } + + if(macPucchCfg->powerControl) + { + MAC_ALLOC(schPucchCfg->powerControl, sizeof(SchPucchPowerControl)); + if(schPucchCfg->powerControl == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to allocate Mem for powerControl in fillInitialUlBwpPucchCfg()"); + return RFAILED; + } + memset(schPucchCfg->powerControl, 0, sizeof(SchPucchPowerControl)); + fillPucchPowerControl(macPucchCfg->powerControl, schPucchCfg->powerControl); + } + + return ROK; +} + +/******************************************************************* + * + * @brief function to free Pucch Format + * + * @details + * + * Function : freeSchPucchFormat + * + * Functionality: + * function to free Pucch Format + * + * @params[in] pucchFormat, SchPucchResrcInfo Pointer, + * SchPucchResrcInfo pointer + * @return void + * ****************************************************************/ + +void freeSchPucchFormat(uint8_t pucchFormat, SchPucchResrcInfo *resrcInfo, SchPucchFormatCfg *formatCfg) +{ + switch(pucchFormat) + { + case PUCCH_FORMAT_0 : + if(resrcInfo->SchPucchFormat.format0) + { + MAC_FREE(resrcInfo->SchPucchFormat.format0, sizeof(SchPucchFormat0)); + resrcInfo->SchPucchFormat.format0 = NULLP; + } + break; + + case PUCCH_FORMAT_1 : + if(resrcInfo->SchPucchFormat.format1) + { + MAC_FREE(resrcInfo->SchPucchFormat.format1, sizeof(SchPucchFormat1)); + resrcInfo->SchPucchFormat.format1 = NULLP; + } + if(formatCfg) + { + memset(formatCfg, 0, sizeof(SchPucchFormatCfg)); + MAC_FREE(formatCfg, sizeof(SchPucchFormatCfg)); + } + break; + + case PUCCH_FORMAT_2 : + if(resrcInfo->SchPucchFormat.format2) + { + MAC_FREE(resrcInfo->SchPucchFormat.format2, sizeof(SchPucchFormat2_3)); + resrcInfo->SchPucchFormat.format2 = NULLP; + } + if(formatCfg) + { + memset(formatCfg, 0, sizeof(SchPucchFormatCfg)); + MAC_FREE(formatCfg, sizeof(SchPucchFormatCfg)); + } + break; + + case PUCCH_FORMAT_3 : + if(resrcInfo->SchPucchFormat.format3) + { + MAC_FREE(resrcInfo->SchPucchFormat.format3, sizeof(SchPucchFormat2_3)); + resrcInfo->SchPucchFormat.format3 = NULLP; + } + if(formatCfg) + { + memset(formatCfg, 0, sizeof(SchPucchFormatCfg)); + MAC_FREE(formatCfg, sizeof(SchPucchFormatCfg)); + } + break; + + case PUCCH_FORMAT_4 : + if(resrcInfo->SchPucchFormat.format4) + { + MAC_FREE(resrcInfo->SchPucchFormat.format4, sizeof(SchPucchFormat4)); + resrcInfo->SchPucchFormat.format4 = NULLP; + } + if(formatCfg) + { + memset(formatCfg, 0, sizeof(SchPucchFormatCfg)); + MAC_FREE(formatCfg, sizeof(SchPucchFormatCfg)); + } + break; + + default: + break; + } +} + +/******************************************************************* + * + * @brief function to free Pucch Resrc Cfg + * + * @details + * + * Function : freePucchResrcCfg + * + * Functionality: + * function to free Pucch Resrc Cfg + * + * @params[in] SchPucchResrcCfg pointer, + * @return void + * ****************************************************************/ + +void freePucchResrcCfg(SchPucchResrcCfg *schRsrcList) +{ + uint8_t resrcIdx; + + /* free Resrc To AddMod List */ + for(resrcIdx = 0; resrcIdx < schRsrcList->resrcToAddModListCount; resrcIdx++) + { + freeSchPucchFormat(schRsrcList->resrcToAddModList[resrcIdx].pucchFormat, + &schRsrcList->resrcToAddModList[resrcIdx], NULLP); + memset(&schRsrcList->resrcToAddModList[resrcIdx], 0, sizeof(SchPucchResrcInfo)); + } + memset(schRsrcList, 0, sizeof(SchPucchResrcCfg)); + MAC_FREE(schRsrcList, sizeof(SchPucchResrcCfg)); +} + +/******************************************************************* + * + * @brief function to free Pucch Sched Req Cfg + * + * @details + * + * Function : freePucchSchedReqCfg + * + * Functionality: + * function to free Pucch Sched Req Cfg + * + * @params[in] SchPucchSchedReqCfg pointer, + * @return void + * ****************************************************************/ + +void freePucchSchedReqCfg(SchPucchSchedReqCfg *schedReqCfg) +{ + uint8_t schedReqIdx; + + for(schedReqIdx = 0; schedReqIdx < schedReqCfg->schedAddModListCount; schedReqIdx++) + { + memset(&schedReqCfg->schedAddModList[schedReqIdx], 0, sizeof(SchSchedReqResrcInfo)); + } + memset(schedReqCfg, 0, sizeof(SchPucchSchedReqCfg)); + MAC_FREE(schedReqCfg, sizeof(SchPucchSchedReqCfg)); +} + +/******************************************************************* + * + * @brief function to free Ul Bwp Pucch Cfg + * + * @details + * + * Function : freeUlBwpPucchCfg + * + * Functionality: + * function to free Ul Bwp Pucch Cfg + * + * @params[in] SchPucchCfg pointer, + * @return void + * ****************************************************************/ + +void freeUlBwpPucchCfg(SchPucchCfg *schPucchCfg) +{ + if(schPucchCfg->resrcSet) + { + memset(schPucchCfg->resrcSet, 0, sizeof(SchPucchResrcSetCfg)); + MAC_FREE(schPucchCfg->resrcSet, sizeof(SchPucchResrcSetCfg)); + } + if(schPucchCfg->resrc) + { + freePucchResrcCfg(schPucchCfg->resrc); + } + if(schPucchCfg->format1) + { + freeSchPucchFormat(PUCCH_FORMAT_1, NULLP, schPucchCfg->format1); + } + if(schPucchCfg->format2) + { + freeSchPucchFormat(PUCCH_FORMAT_2, NULLP, schPucchCfg->format2); + } + if(schPucchCfg->format3) + { + freeSchPucchFormat(PUCCH_FORMAT_3, NULLP, schPucchCfg->format3); + } + if(schPucchCfg->format4) + { + freeSchPucchFormat(PUCCH_FORMAT_4, NULLP, schPucchCfg->format4); + } + if(schPucchCfg->schedReq) + { + freePucchSchedReqCfg(schPucchCfg->schedReq); + } + if(schPucchCfg->spatialInfo) + { + memset(schPucchCfg->spatialInfo, 0, sizeof(SchPucchSpatialCfg)); + MAC_FREE(schPucchCfg->spatialInfo, sizeof(SchPucchSpatialCfg)); + } + if(schPucchCfg->multiCsiCfg) + { + memset(schPucchCfg->multiCsiCfg, 0, sizeof(SchPucchMultiCsiCfg)); + MAC_FREE(schPucchCfg->multiCsiCfg, sizeof(SchPucchMultiCsiCfg)); + } + if(schPucchCfg->dlDataToUlAck) + { + memset(schPucchCfg->dlDataToUlAck, 0, sizeof(SchPucchDlDataToUlAck)); + MAC_FREE(schPucchCfg->dlDataToUlAck, sizeof(SchPucchDlDataToUlAck)); + } + if(schPucchCfg->powerControl) + { + memset(schPucchCfg->powerControl, 0, sizeof(SchPucchPowerControl)); + MAC_FREE(schPucchCfg->powerControl, sizeof(SchPucchPowerControl)); + } +} + /******************************************************************* * * @brief Fills initail UL BWP config to send to scheduler @@ -317,15 +1043,21 @@ uint8_t fillInitialUlBwp(InitialUlBwp macInitUlBwp, SchInitialUlBwp *schInitUlBw schInitUlBwp->pucchCfgPres = macInitUlBwp.pucchPresent; if(schInitUlBwp->pucchCfgPres) { - /* TODO : Optional parameter */ + memset(&schInitUlBwp->pucchCfg, 0, sizeof(SchPucchCfg)); + if(fillInitialUlBwpPucchCfg(&macInitUlBwp.pucchCfg, &schInitUlBwp->pucchCfg) != ROK) + { + DU_LOG("\nERROR --> MAC : Failed to fill Pucch Cfg in fillInitialUlBwpPucchCfg()"); + freeUlBwpPucchCfg(&schInitUlBwp->pucchCfg); + return RFAILED; + } } - schInitUlBwp->puschCfgPres = macInitUlBwp.puschPresent; if(schInitUlBwp->puschCfgPres) { + memset(&schInitUlBwp->puschCfg, 0, sizeof(SchPuschCfg)); if(fillInitalUlBwpPuschCfg(macInitUlBwp.puschCfg, &schInitUlBwp->puschCfg) != ROK) { - DU_LOG("\nMAC : fillInitalUlBwpPuschCfg() failed"); + DU_LOG("\nERROR --> MAC : Failed to fill Pusch Cfg in fillInitalUlBwpPuschCfg()"); return RFAILED; } } @@ -357,7 +1089,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC schPdcchCfg->numCRsetToAddMod = macPdcchCfg.numCRsetToAddMod; if(schPdcchCfg->numCRsetToAddMod > MAX_NUM_CRSET) { - DU_LOG("\nMAC : Number of CORESET to ADD/MOD [%d] exceeds max limit [%d]",\ + DU_LOG("\nERROR --> MAC : Number of CORESET to ADD/MOD [%d] exceeds max limit [%d]",\ schPdcchCfg->numCRsetToAddMod, MAX_NUM_CRSET); return RFAILED; } @@ -381,7 +1113,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC schPdcchCfg->numCRsetToRel = macPdcchCfg.numCRsetToRel; if(schPdcchCfg->numCRsetToAddMod > MAX_NUM_CRSET) { - DU_LOG("\nMAC : Number of CORESET to release [%d] exceeds max limit [%d]",\ + DU_LOG("\nERROR --> MAC : Number of CORESET to release [%d] exceeds max limit [%d]",\ schPdcchCfg->numCRsetToRel, MAX_NUM_CRSET); return RFAILED; } @@ -395,7 +1127,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC schPdcchCfg->numSearchSpcToAddMod = macPdcchCfg.numSearchSpcToAddMod; if(schPdcchCfg->numSearchSpcToAddMod > MAX_NUM_SEARCH_SPC) { - DU_LOG("\nMAC : Number of search space to ADD/MOD [%d] exceeds max [%d]", \ + DU_LOG("\nERROR --> MAC : Number of search space to ADD/MOD [%d] exceeds max [%d]", \ schPdcchCfg->numSearchSpcToAddMod, MAX_NUM_SEARCH_SPC); return RFAILED; } @@ -429,7 +1161,7 @@ uint8_t fillInitDlBwpPdcchCfg(PdcchConfig macPdcchCfg, SchPdcchConfig *schPdcchC schPdcchCfg->numSearchSpcToRel = macPdcchCfg.numSearchSpcToRel; if(schPdcchCfg->numSearchSpcToRel > MAX_NUM_SEARCH_SPC) { - DU_LOG("\nMAC : Number of search space to release [%d] exceeds max [%d]", \ + DU_LOG("\nERROR --> MAC : Number of search space to release [%d] exceeds max [%d]", \ schPdcchCfg->numSearchSpcToRel, MAX_NUM_SEARCH_SPC); return RFAILED; } @@ -468,7 +1200,7 @@ uint8_t fillInitDlBwpPdschCfg(PdschConfig macPdschCfg, SchPdschConfig *schPdschC schPdschCfg->numTimeDomRsrcAlloc = macPdschCfg.numTimeDomRsrcAlloc; if(schPdschCfg->numTimeDomRsrcAlloc > MAX_NUM_DL_ALLOC) { - DU_LOG("\nMAC : Number of time domain resource allocation [%d], exceeds\ + DU_LOG("\nERROR --> MAC : Number of time domain resource allocation [%d], exceeds\ max limit [%d]", schPdschCfg->numTimeDomRsrcAlloc, MAX_NUM_DL_ALLOC); return RFAILED; } @@ -521,7 +1253,7 @@ uint8_t fillInitialDlBwp(InitialDlBwp macInitDlBwp, SchInitalDlBwp *schInitDlBwp { if(fillInitDlBwpPdcchCfg(macInitDlBwp.pdcchCfg, &schInitDlBwp->pdcchCfg) != ROK) { - DU_LOG("\nMAC : fillInitDlBwpPdcchCfg() failed"); + DU_LOG("\nERROR --> MAC : fillInitDlBwpPdcchCfg() failed"); return RFAILED; } } @@ -531,7 +1263,7 @@ uint8_t fillInitialDlBwp(InitialDlBwp macInitDlBwp, SchInitalDlBwp *schInitDlBwp { if(fillInitDlBwpPdschCfg(macInitDlBwp.pdschCfg,&schInitDlBwp->pdschCfg) != ROK) { - DU_LOG("\nMAC : fillInitDlBwpPdschCfg() failed"); + DU_LOG("\nERROR --> MAC : fillInitDlBwpPdschCfg() failed"); return RFAILED; } } @@ -566,14 +1298,14 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg) if(fillInitialDlBwp(macSpCellCfg.servCellCfg.initDlBwp, \ &servCellCfg->initDlBwp) != ROK ) { - DU_LOG("\nMAC : fillInitialDlBwp() failed"); + DU_LOG("\nERROR --> MAC : fillInitialDlBwp() failed"); return RFAILED; } servCellCfg->numDlBwpToAdd = macSpCellCfg.servCellCfg.numDlBwpToAdd; if(servCellCfg->numDlBwpToAdd > MAX_NUM_BWP) { - DU_LOG("\nMAC : Number of DL BWP to ADD/MOD [%d] exceeds max limit [%d]",\ + DU_LOG("\nERROR --> MAC : Number of DL BWP to ADD/MOD [%d] exceeds max limit [%d]",\ servCellCfg->numDlBwpToAdd, MAX_NUM_BWP); return RFAILED; } @@ -594,7 +1326,7 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg) if(fillPdschServCellCfg(macSpCellCfg.servCellCfg.pdschServCellCfg, \ &servCellCfg->pdschServCellCfg) != ROK) { - DU_LOG("\nMAC : fillPdschServCellCfg() failed"); + DU_LOG("\nERROR --> MAC : fillPdschServCellCfg() failed"); return RFAILED; } @@ -602,14 +1334,14 @@ uint8_t fillSpCellCfg(SpCellCfg macSpCellCfg, SchSpCellCfg *schSpCellCfg) if(fillInitialUlBwp(macSpCellCfg.servCellCfg.initUlBwp, \ &servCellCfg->initUlBwp) != ROK) { - DU_LOG("\nMAC : fillInitialUlBwp() failed"); + DU_LOG("\nERROR --> MAC : fillInitialUlBwp() failed"); return RFAILED; } servCellCfg->numUlBwpToAdd = macSpCellCfg.servCellCfg.numUlBwpToAdd; if(servCellCfg->numUlBwpToAdd > MAX_NUM_BWP) { - DU_LOG("\nMAC : Number of UL BWP to ADD/MOD [%d] exceeds max limit [%d]",\ + DU_LOG("\nERROR --> MAC : Number of UL BWP to ADD/MOD [%d] exceeds max limit [%d]",\ servCellCfg->numUlBwpToAdd, MAX_NUM_BWP); return RFAILED; } @@ -644,14 +1376,14 @@ uint8_t sendUeReqToSch(Pst *pst, SchUeCfg *schUeCfg) switch(pst->event) { case EVENT_MAC_UE_CREATE_REQ: - FILL_PST_MAC_TO_SCH(schPst, EVENT_UE_CREATE_REQ_TO_SCH); - return(*macSchUeCreateReqOpts[schPst.selector])(&schPst, schUeCfg); + FILL_PST_MAC_TO_SCH(schPst, EVENT_ADD_UE_CONFIG_REQ_TO_SCH); + return(*macSchAddUeConfigReqOpts[schPst.selector])(&schPst, schUeCfg); case EVENT_MAC_UE_RECONFIG_REQ: - FILL_PST_MAC_TO_SCH(schPst, EVENT_UE_RECONFIG_REQ_TO_SCH); - return(*macSchUeReconfigReqOpts[schPst.selector])(&schPst,schUeCfg); + FILL_PST_MAC_TO_SCH(schPst, EVENT_MODIFY_UE_CONFIG_REQ_TO_SCH); + return(*macSchModUeConfigReqOpts[schPst.selector])(&schPst,schUeCfg); default: - DU_LOG("\n Invalid Pst received %d", pst->event); + DU_LOG("\nERROR --> Invalid Pst received %d", pst->event); return RFAILED; } } @@ -761,7 +1493,7 @@ uint8_t fillLogicalChannelCfg(SchLcCfg *schLcCfg, LcCfg *macLcCfg) MAC_ALLOC(schLcCfg->drbQos, sizeof(SchDrbQosInfo)); if(!schLcCfg->drbQos) { - DU_LOG("\nMAC : Memory alloc failed at drbQos at fillLogicalChannelCfg()"); + DU_LOG("\nERROR --> MAC : Memory alloc failed at drbQos at fillLogicalChannelCfg()"); ret = RFAILED; } } @@ -786,7 +1518,7 @@ uint8_t fillLogicalChannelCfg(SchLcCfg *schLcCfg, LcCfg *macLcCfg) MAC_ALLOC(schLcCfg->snssai, sizeof(SchSnssai)); if(!schLcCfg->snssai) { - DU_LOG("\nMAC : Memory alloc failed at snssai at fillLogicalChannelCfg()"); + DU_LOG("\nERROR --> MAC : Memory alloc failed at snssai at fillLogicalChannelCfg()"); ret = RFAILED; } } @@ -843,7 +1575,7 @@ uint8_t fillSchLcCfgList(SchUeCfg *schUeCfg, MacUeCfg *ueCfg) { if(fillLogicalChannelCfg(&schUeCfg->schLcCfg[lcIdx], &ueCfg->lcCfgList[lcIdx]) != ROK) { - DU_LOG("\nMAC : fillLogicalChannelCfg() failed for lc Idx[%d]", lcIdx); + DU_LOG("\nERROR --> MAC : fillLogicalChannelCfg() failed for lc Idx[%d]", lcIdx); return RFAILED; } schUeCfg->numLcs++; @@ -874,47 +1606,67 @@ uint8_t fillSchUeCfg(Pst *pst, SchUeCfg *schUeCfg, MacUeCfg *ueCfg) schUeCfg->crnti = ueCfg->crnti; /* Copy MAC cell group config */ - memset(&schUeCfg->macCellGrpCfg, 0, sizeof(SchMacCellGrpCfg)); - if(fillMacCellGroupCfg(ueCfg->macCellGrpCfg, &schUeCfg->macCellGrpCfg) != ROK) + if(ueCfg->macCellGrpCfgPres == true) { - DU_LOG("\nMAC : fillMacCellGroupCfg() failed"); - return RFAILED; + schUeCfg->macCellGrpCfgPres = true; + memset(&schUeCfg->macCellGrpCfg, 0, sizeof(SchMacCellGrpCfg)); + if(fillMacCellGroupCfg(ueCfg->macCellGrpCfg, &schUeCfg->macCellGrpCfg) != ROK) + { + DU_LOG("\nERROR --> MAC : fillMacCellGroupCfg() failed"); + return RFAILED; + } } - - /* Copy Physical cell group config */ - memset(&schUeCfg->phyCellGrpCfg, 0,sizeof(SchPhyCellGrpCfg)); - if(fillPhyCellGroupCfg(ueCfg->phyCellGrpCfg, &schUeCfg->phyCellGrpCfg) != ROK) + if(ueCfg->phyCellGrpCfgPres == true) { - DU_LOG("\nMAC : fillPhyCellGroupCfg() failed"); - return RFAILED; + schUeCfg->phyCellGrpCfgPres = true; + /* Copy Physical cell group config */ + memset(&schUeCfg->phyCellGrpCfg, 0,sizeof(SchPhyCellGrpCfg)); + if(fillPhyCellGroupCfg(ueCfg->phyCellGrpCfg, &schUeCfg->phyCellGrpCfg) != ROK) + { + DU_LOG("\nERROR --> MAC : fillPhyCellGroupCfg() failed"); + return RFAILED; + } } - /* Copy sp cell config */ - memset(&schUeCfg->spCellCfg, 0, sizeof(SchSpCellCfg)); - if(fillSpCellCfg(ueCfg->spCellCfg, &schUeCfg->spCellCfg) != ROK) + if(ueCfg->spCellCfgPres == true) { - DU_LOG("\nMAC : fillSpCellCfg() failed"); - return RFAILED; + schUeCfg->spCellCfgPres = true; + /* Copy sp cell config */ + memset(&schUeCfg->spCellCfg, 0, sizeof(SchSpCellCfg)); + if(fillSpCellCfg(ueCfg->spCellCfg, &schUeCfg->spCellCfg) != ROK) + { + DU_LOG("\nERROR --> MAC : fillSpCellCfg() failed"); + return RFAILED; + } } - - schUeCfg->aggrMaxBitRate = NULL; - if(ueCfg->maxAggrBitRate != NULL) + if(ueCfg->ambrCfg != NULLP) { - MAC_ALLOC(schUeCfg->aggrMaxBitRate, sizeof(SchAggrMaxBitRate)); - if(!schUeCfg->aggrMaxBitRate) + MAC_ALLOC(schUeCfg->ambrCfg, sizeof(SchAmbrCfg)); + if(!schUeCfg->ambrCfg) { - DU_LOG("\nMAC : Memory allocation failed in sendReconfigReqToSch"); - return RFAILED; + DU_LOG("\nERROR --> MAC : Memory allocation failed in sendReconfigReqToSch"); + return RFAILED; } - schUeCfg->aggrMaxBitRate->ulBitRate = ueCfg->maxAggrBitRate->ulBits; - schUeCfg->aggrMaxBitRate->dlBitRate = ueCfg->maxAggrBitRate->dlBits; + schUeCfg->ambrCfg->ulBr = ueCfg->ambrCfg->ulBr; } + else + schUeCfg->ambrCfg = NULLP; + + /* Fill DL modulation infor */ + schUeCfg->dlModInfo.modOrder = ueCfg->dlModInfo.modOrder; + schUeCfg->dlModInfo.mcsIndex = ueCfg->dlModInfo.mcsIndex; + schUeCfg->dlModInfo.mcsTable = ueCfg->dlModInfo.mcsTable; + + /* Fill UL modulation infor */ + schUeCfg->ulModInfo.modOrder = ueCfg->ulModInfo.modOrder; + schUeCfg->ulModInfo.mcsIndex = ueCfg->ulModInfo.mcsIndex; + schUeCfg->ulModInfo.mcsTable = ueCfg->ulModInfo.mcsTable; /* Fill sch Lc Cfg to Add/ Mod/ Del */ ret = fillSchLcCfgList(schUeCfg, ueCfg); if(ret == RFAILED) { - DU_LOG("\nMAC : Failed to copy LCs at fillSchUeCfg()"); + DU_LOG("\nERROR --> MAC : Failed to copy LCs at fillSchUeCfg()"); return ret; } return ret; @@ -1022,7 +1774,7 @@ uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg) /*Nothing to Modify in DL LC CB */ /*Modify UL LC CB */ ueCb->ulInfo.lcCb[ueLcIdx].lcGrpId = ueCfg->lcCfgList[lcIdx].ulLcCfg.lcGroup; - DU_LOG("\nMAC: Successfully Modified LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); + DU_LOG("\nINFO --> MAC: Successfully Modified LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); break; } if(ueCfg->lcCfgList[lcIdx].configType == CONFIG_DEL) @@ -1034,7 +1786,7 @@ uint8_t fillMacLcCfgList(MacUeCb *ueCb, MacUeCfg *ueCfg) memset(&ueCb->ulInfo.lcCb[ueLcIdx], 0, sizeof(UlLcCb)); (ueCb->ulInfo.numUlLc)--; updateMacUlCb(ueLcIdx, &ueCb->ulInfo); - DU_LOG("\nMAC: Successfully Deleted LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); + DU_LOG("\nINFO --> MAC: Successfully Deleted LC context for lcId[%d]", ueCfg->lcCfgList[lcIdx].lcId); break; } } @@ -1069,17 +1821,23 @@ uint8_t fillMacUeCb(MacUeCb *ueCb, MacUeCfg *ueCfg, uint8_t cellIdx) ueCb->ueIdx = ueCfg->ueIdx; ueCb->crnti = ueCfg->crnti; ueCb->cellCb = macCb.macCell[cellIdx]; - ueCb->dlInfo.dlHarqEnt.numHarqProcs = \ + if(ueCfg->spCellCfgPres) + { + ueCb->dlInfo.dlHarqEnt.numHarqProcs = \ ueCfg->spCellCfg.servCellCfg.pdschServCellCfg.numHarqProcForPdsch; + } ueCb->state = UE_STATE_ACTIVE; /*TODO: To check the bsr value during implementation */ - ueCb->bsrTmrCfg.periodicTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.periodicTimer; - ueCb->bsrTmrCfg.retxTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.retxTimer; - ueCb->bsrTmrCfg.srDelayTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.srDelayTimer; + if(ueCfg->macCellGrpCfgPres) + { + ueCb->bsrTmrCfg.periodicTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.periodicTimer; + ueCb->bsrTmrCfg.retxTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.retxTimer; + ueCb->bsrTmrCfg.srDelayTimer = ueCfg->macCellGrpCfg.bsrTmrCfg.srDelayTimer; + } ret = fillMacLcCfgList(ueCb, ueCfg); if(ret == RFAILED) { - DU_LOG("\nMAC: Failed while filing MAC LC List at fillMacUeCb()"); + DU_LOG("\nERROR --> MAC: Failed while filing MAC LC List at fillMacUeCb()"); } return ret; } @@ -1177,7 +1935,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\ &&(ueCb->state == UE_STATE_ACTIVE)) { - DU_LOG("\n MAC : CRNTI %d already configured ", ueCfg->crnti); + DU_LOG("\nERROR --> MAC : CRNTI %d already configured ", ueCfg->crnti); return ROKDUP; } else @@ -1186,7 +1944,7 @@ uint8_t createUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) ret = fillMacUeCb(ueCb, ueCfg, cellIdx); if(ret != ROK) { - DU_LOG("\nMAC : Failed to create Ue Cb at createUeCb()"); + DU_LOG("\nERROR --> MAC : Failed to create Ue Cb at createUeCb()"); return ret; } else @@ -1222,11 +1980,11 @@ uint8_t modifyUeCb(uint8_t cellIdx, MacUeCb *ueCb, MacUeCfg *ueCfg) if((ueCb->ueIdx == ueCfg->ueIdx) && (ueCb->crnti == ueCfg->crnti)\ &&(ueCb->state == UE_STATE_ACTIVE)) { - DU_LOG("\n MAC : Reconfig Req received for CRNTI %d ", ueCfg->crnti); + DU_LOG("\nINFO --> MAC : Modifying Ue config Req for CRNTI %d ", ueCfg->crnti); ret = fillMacUeCb(ueCb, ueCfg, cellIdx); if(ret != ROK) { - DU_LOG("\nMAC : Failed to modify Ue Cb at modifyUeCb()"); + DU_LOG("\nERROR --> MAC : Failed to modify MacUeCb at modifyUeCb()"); return ret; } else @@ -1267,14 +2025,14 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg) /* Validate cell id */ if(macCb.macCell[cellIdx]->cellId != ueCfg->cellId) { - DU_LOG("\nMAC : Cell Id %d not configured", ueCfg->cellId); + DU_LOG("\nERROR --> MAC : Cell Id %d not configured", ueCfg->cellId); return RFAILED; } /* Check if max number of UE configured */ if(macCb.macCell[cellIdx]->numActvUe > MAX_NUM_UE) { - DU_LOG("MAC : Max number of UE [%d] already configured", MAX_NUM_UE); + DU_LOG("\nERROR --> MAC : Max number of UE [%d] already configured", MAX_NUM_UE); return RFAILED; } @@ -1282,11 +2040,15 @@ uint8_t procMacUeCfgData(Pst *pst, MacUeCfg *ueCfg) ueCb = &macCb.macCell[cellIdx]->ueCb[ueCfg->ueIdx -1]; switch(pst->event) { - case EVENT_UE_CREATE_RSP_TO_MAC: + case EVENT_UE_CONFIG_RSP_TO_MAC: ret = createUeCb(cellIdx, ueCb, ueCfg); + if(ret != ROK) + DU_LOG("\nERROR --> MAC: AddUeConfigReq for cellIdx :%d failed in procMacUeCfgData()", cellIdx); break; case EVENT_UE_RECONFIG_RSP_TO_MAC: ret = modifyUeCb(cellIdx, ueCb, ueCfg); + if(ret != ROK) + DU_LOG("\nERROR --> MAC: ModifyUeConfigReq for cellIdx :%d failed at procMacUeCfgData()", cellIdx); break; default: break; @@ -1319,7 +2081,7 @@ uint8_t copyToTmpData(MacUeCfg *ueCfg) MAC_ALLOC(tmpData, sizeof(MacUeCfg)); if(!tmpData) { - DU_LOG("\nMAC: Memory Alloc Failed at copyToTmpData()"); + DU_LOG("\nERROR --> MAC: Memory Alloc Failed at copyToTmpData()"); return RFAILED; } memcpy(tmpData, ueCfg, sizeof(MacUeCfg)); @@ -1349,7 +2111,7 @@ uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg) SchUeCfg schUeCfg; memset(&schUeCfg, 0, sizeof(SchUeCfg)); - DU_LOG("\nMAC : UE Create Request for CRNTI[%d]", ueCfg->crnti); + DU_LOG("\nINFO --> MAC : UE Create Request for CRNTI[%d]", ueCfg->crnti); if(ueCfg) { @@ -1360,23 +2122,23 @@ uint8_t MacProcUeCreateReq(Pst *pst, MacUeCfg *ueCfg) /*Sending Cfg Req to SCH */ ret = fillSchUeCfg(pst, &schUeCfg, ueCfg); if(ret != ROK) - DU_LOG("\nMAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()"); + DU_LOG("\nERROR --> MAC : Failed to fill Sch Ue Cfg at MacProcUeCreateReq()"); else { /* Fill event and send UE create request to SCH */ ret = sendUeReqToSch(pst, &schUeCfg); if(ret != ROK) - DU_LOG("\nMAC : Failed to send UE Create request to SCH"); + DU_LOG("\nERROR --> MAC : Failed to send UE Create request to SCH"); } } else { - DU_LOG("\nMAC : Failed to store MAC UE CFG "); + DU_LOG("\nERROR --> MAC : Failed to store MAC UE CFG "); } } else { - DU_LOG("\nMAC : MAC UE Create request processing failed"); + DU_LOG("\nERROR --> MAC : MAC UE Create request processing failed"); ret = RFAILED; } /* FREE shared memory */ @@ -1409,7 +2171,7 @@ uint8_t MacSendUeCreateRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) MAC_ALLOC_SHRABL_BUF(cfgRsp, sizeof(MacUeCfgRsp)); if(!cfgRsp) { - DU_LOG("\nMAC: Memory allocation for UE config response failed"); + DU_LOG("\nERROR --> MAC: Memory allocation for UE config response failed"); return RFAILED; } @@ -1422,7 +2184,7 @@ uint8_t MacSendUeCreateRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) /* Fill Post structure and send UE Create response*/ memset(&rspPst, 0, sizeof(Pst)); FILL_PST_MAC_TO_DUAPP(rspPst, EVENT_MAC_UE_CREATE_RSP); - return MacDuUeCfgRspOpts[rspPst.selector](&rspPst, cfgRsp); + return (*macDuUeCfgRspOpts[rspPst.selector])(&rspPst, cfgRsp); } /******************************************************************* @@ -1449,7 +2211,7 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) MAC_ALLOC_SHRABL_BUF(cfgRsp, sizeof(MacUeCfgRsp)); if(!cfgRsp) { - DU_LOG("\nMAC: Memory allocation for UE Reconfig response failed"); + DU_LOG("\nERROR --> MAC: Memory allocation for UE Reconfig response failed"); return RFAILED; } @@ -1462,7 +2224,7 @@ uint8_t MacSendUeReconfigRsp(MacRsp result, SchUeCfgRsp *schCfgRsp) /* Fill Post structure and send UE Create response*/ memset(&rspPst, 0, sizeof(Pst)); FILL_PST_MAC_TO_DUAPP(rspPst, EVENT_MAC_UE_RECONFIG_RSP); - return MacDuUeCfgRspOpts[rspPst.selector](&rspPst, cfgRsp); + return (*macDuUeCfgRspOpts[rspPst.selector])(&rspPst, cfgRsp); } /******************************************************************* @@ -1492,7 +2254,7 @@ MacUeCfg *getMacUeCfg(uint16_t cellIdx, uint8_t ueIdx) } else { - DU_LOG("\nMAC: Failed to get macCellCb in getMacUeCfg()"); + DU_LOG("\nERROR --> MAC: Failed to get macCellCb in getMacUeCfg()"); } return ueCfg; } @@ -1524,33 +2286,63 @@ uint8_t MacProcSchUeCfgRsp(Pst *pst, SchUeCfgRsp *schCfgRsp) GET_CELL_IDX(schCfgRsp->cellId, cellIdx); ueCfg = getMacUeCfg(cellIdx, schCfgRsp->ueIdx); + if(ueCfg == NULLP) + { + DU_LOG("\nERROR --> MAC : Failed to find the Mac Ue Cfg for event [%d] in MacProcSchUeCfgRsp()", pst->event); + ret = RFAILED; + } - if(ueCfg) + switch(pst->event) { - if(schCfgRsp->rsp == RSP_NOK) + case EVENT_UE_CONFIG_RSP_TO_MAC: { - DU_LOG("\nMAC : SCH UE Config Response : FAILURE [CRNTI %d] for event %d", schCfgRsp->crnti, pst->event); + if(schCfgRsp->rsp != RSP_NOK) + { + DU_LOG("\nINFO --> MAC: SCH UeConfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + if(ret == ROK) + { + ret = procMacUeCfgData(pst, ueCfg); + if(ret == ROK) + { + result = MAC_DU_APP_RSP_OK; + } + } + } + else + { + DU_LOG("\nERROR --> MAC: SCH UeConfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + } + ret = MacSendUeCreateRsp(result, schCfgRsp); } - else + break; + + case EVENT_UE_RECONFIG_RSP_TO_MAC: { - DU_LOG("\nMAC : SCH UE Config Response : SUCCESS [CRNTI %d]", schCfgRsp->crnti); - ret = procMacUeCfgData(pst, ueCfg); - if(ret == ROK) + if(schCfgRsp->rsp != RSP_NOK) { - result = MAC_DU_APP_RSP_OK; - } + DU_LOG("\nINFO --> MAC: SCH UeReconfigRsp for CRNTI[%d] is success in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + if(ret == ROK) + { + ret = procMacUeCfgData(pst, ueCfg); + if(ret == ROK) + { + result = MAC_DU_APP_RSP_OK; + } + } + } + else + { + DU_LOG("\nERROR --> MAC: SCH UeReconfigRsp for CRNTI[%d] is failed in MacProcSchUeCfgRsp()", schCfgRsp->crnti); + } + ret = MacSendUeReconfigRsp(result, schCfgRsp); } - MAC_FREE(ueCfg, sizeof(MacUeCfg)); - ueCfg = NULLP; - } - if(pst->event == EVENT_UE_CREATE_RSP_TO_MAC) - { - ret = MacSendUeCreateRsp(result, schCfgRsp); - } - if(pst->event == EVENT_UE_RECONFIG_RSP_TO_MAC) - { - ret = MacSendUeReconfigRsp(result, schCfgRsp); + break; + + default: + break; } + MAC_FREE(ueCfg, sizeof(MacUeCfg)); + ueCfg = NULLP; return ret; } @@ -1576,7 +2368,7 @@ uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg) SchUeCfg schUeCfg; memset(&schUeCfg, 0, sizeof(SchUeCfg)); - DU_LOG("\nMAC : UE Reconfig Request for CRNTI[%d]", ueCfg->crnti); + DU_LOG("\nINFO --> MAC : UE Reconfig Request for CRNTI[%d]", ueCfg->crnti); if(ueCfg) { @@ -1585,25 +2377,25 @@ uint8_t MacProcUeReconfigReq(Pst *pst, MacUeCfg *ueCfg) if(ret == ROK) { /*Sending Cfg Req to SCH */ - ret = fillSchUeCfg(pst, &schUeCfg, ueCfg); - if(ret != ROK) - DU_LOG("\nMAC : Failed to fill sch Ue Cfg at MacProcUeReconfigReq()"); + ret = fillSchUeCfg(pst, &schUeCfg, ueCfg); + if(ret != ROK) + DU_LOG("\nERROR --> MAC : Failed to fill sch Ue Cfg at MacProcUeReconfigReq()"); else - { + { /* Fill event and send UE create request to SCH */ ret = sendUeReqToSch(pst, &schUeCfg); - if(ret != ROK) - DU_LOG("\nMAC : Failed to send UE Reconfig Request to SCH"); - } + if(ret != ROK) + DU_LOG("\nERROR --> MAC : Failed to send UE Reconfig Request to SCH"); + } } else { - DU_LOG("\nMAC : Failed to store MAC UE Cb "); + DU_LOG("\nERROR --> MAC : Failed to store MAC UE Cb "); } } else { - DU_LOG("\nMAC : MAC UE Create request processing failed"); + DU_LOG("\nERROR --> MAC : MAC UE Create request processing failed"); ret = RFAILED; } /* FREE shared memory */