X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_slot_ind.c;h=103623a34fa4e73ab08de95dd004242396bc0f95;hb=45d134510deb6902b870b4a0fb574b6075fba601;hp=bca05f28a0f70d9279261e729d3677094dd62d34;hpb=392607b7a8cbf1b7415b15517275dd1ef4e897a9;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index bca05f28a..103623a34 100644 --- a/src/5gnrmac/mac_slot_ind.c +++ b/src/5gnrmac/mac_slot_ind.c @@ -17,25 +17,19 @@ *******************************************************************************/ /* header include files (.h) */ #include "common_def.h" -#include "rgu.h" -#include "tfu.h" /* RGU Interface includes */ #include "lrg.h" -#include "crg.h" /* layer management defines for LTE-MAC */ -#include "rg_sch_inf.h" /* layer management defines for LTE-MAC */ -#include "rg_env.h" -#include "rg.h" - -#include "rgu.x" -#include "tfu.x" /* RGU Interface includes */ #include "lrg.x" -#include "crg.x" /* layer management typedefs for MAC */ -#include "rg_sch_inf.x" /* SCH interface typedefs */ -#include "rg_prg.x" #include "du_app_mac_inf.h" +#include "mac_sch_interface.h" +#include "lwr_mac_upr_inf.h" #include "mac.h" -#include "du_log.h" -#include "rg.x" #include "mac_upr_inf_api.h" +#include "lwr_mac_fsm.h" +#include "mac_utils.h" + +/* Function declarations */ +extern uint16_t fillUlTtiReq(SlotIndInfo currTimingInfo); +extern uint16_t fillDlTtiReq(SlotIndInfo currTimingInfo); /* function pointers for packing slot ind from mac to sch */ MacSchSlotIndFunc macSchSlotIndOpts[] = @@ -56,39 +50,44 @@ MacSchSlotIndFunc macSchSlotIndOpts[] = * * @param[in] Pst *pst * @param[in] DL allocation from scheduler - * @return S16 + * @return * -# ROK * -# RFAILED **/ -int MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) +uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) { + uint16_t cellIdx; MacDlSlot *currDlSlot = NULLP; if(dlSchedInfo != NULLP) { - if(dlSchedInfo->isBroadcastPres) - { - currDlSlot = &macCb.macCell->dlSlot[dlSchedInfo->schSlotValue.broadcastTime.slot]; - currDlSlot->dlInfo.isBroadcastPres = true; - memcpy(&currDlSlot->dlInfo.brdcstAlloc, &dlSchedInfo->brdcstAlloc, sizeof(DlBrdcstAlloc)); - } - - if(dlSchedInfo->rarAlloc != NULLP) - { - currDlSlot = &macCb.macCell->dlSlot[dlSchedInfo->schSlotValue.rarTime.slot]; - currDlSlot->dlInfo.rarAlloc = dlSchedInfo->rarAlloc; - - /* MUXing of RAR */ - fillRarPdu(&currDlSlot->dlInfo.rarAlloc->rarInfo); - } - - if(dlSchedInfo->msg4Alloc != NULLP) + GET_CELL_IDX(dlSchedInfo->cellId, cellIdx); + if(dlSchedInfo->isBroadcastPres) { - Msg4Alloc *msg4Alloc = NULLP; - currDlSlot = &macCb.macCell->dlSlot[dlSchedInfo->schSlotValue.msg4Time.slot]; - currDlSlot->dlInfo.msg4Alloc = dlSchedInfo->msg4Alloc; /* copy msg4 alloc pointer in MAC slot info */ - msg4Alloc = dlSchedInfo->msg4Alloc; - macCb.macCell->macRaCb[0].msg4TbSize = msg4Alloc->msg4PdschCfg.codeword[0].tbSize; + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.broadcastTime.slot]; + currDlSlot->dlInfo.isBroadcastPres = true; + memcpy(&currDlSlot->dlInfo.brdcstAlloc, &dlSchedInfo->brdcstAlloc, sizeof(DlBrdcstAlloc)); + } + + if(dlSchedInfo->rarAlloc != NULLP) + { + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.rarTime.slot]; + currDlSlot->dlInfo.rarAlloc = dlSchedInfo->rarAlloc; + + /* MUXing of RAR */ + fillRarPdu(&currDlSlot->dlInfo.rarAlloc->rarInfo); + } + + if(dlSchedInfo->msg4Alloc != NULLP) + { + Msg4Alloc *msg4Alloc = NULLP; + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.msg4Time.slot]; + currDlSlot->dlInfo.msg4Alloc = dlSchedInfo->msg4Alloc; /* copy msg4 alloc pointer in MAC slot info */ + msg4Alloc = dlSchedInfo->msg4Alloc; + macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize = msg4Alloc->msg4PdschCfg.codeword[0].tbSize; } } return ROK; @@ -105,59 +104,64 @@ int MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) * @param[in] Msg4Alloc *msg4Alloc * @return void **/ -void fillMsg4Pdu(Msg4Alloc *msg4Alloc) +void fillMsg4Pdu(uint16_t cellId, Msg4Alloc *msg4Alloc) { + uint16_t cellIdx; MacDlData msg4DlData; MacCeInfo macCeData; + GET_CELL_IDX(cellId, cellIdx); + memset(&msg4DlData, 0, sizeof(MacDlData)); memset(&macCeData, 0, sizeof(MacCeInfo)); - - if(macCb.macCell->macRaCb[0].msg4Pdu != NULLP) + + if(macCb.macCell[cellIdx]->macRaCb[0].msg4Pdu != NULLP) { MAC_ALLOC(msg4DlData.pduInfo[0].dlPdu, \ - macCb.macCell->macRaCb[0].msg4PduLen); + macCb.macCell[cellIdx]->macRaCb[0].msg4PduLen); if(msg4DlData.pduInfo[0].dlPdu != NULLP) { - fillMsg4DlData(&msg4DlData, macCb.macCell->macRaCb[0].msg4Pdu); - fillMacCe(&macCeData, macCb.macCell->macRaCb[0].msg3Pdu); - /* Forming Mux Pdu */ - macCb.macCell->macRaCb[0].msg4TxPdu = NULLP; - MAC_ALLOC(macCb.macCell->macRaCb[0].msg4TxPdu, macCb.macCell->macRaCb[0].msg4TbSize); - if(macCb.macCell->macRaCb[0].msg4TxPdu != NULLP) - { - memset(macCb.macCell->macRaCb[0].msg4TxPdu, 0, macCb.macCell->macRaCb[0].msg4TbSize); - macMuxPdu(&msg4DlData, &macCeData, macCb.macCell->macRaCb[0].msg4TxPdu,\ - macCb.macCell->macRaCb[0].msg4TbSize); - - } - else - { - DU_LOG("\nMAC: Failed allocating memory for msg4TxPdu"); - } - /* Free memory allocated */ - MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell->macRaCb[0].msg4PduLen); + fillMsg4DlData(cellId, &msg4DlData, macCb.macCell[cellIdx]->macRaCb[0].msg4Pdu); + fillMacCe(&macCeData, macCb.macCell[cellIdx]->macRaCb[0].msg3Pdu); + /* Forming Mux Pdu */ + macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu = NULLP; + MAC_ALLOC(macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu, \ + macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize); + if(macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu != NULLP) + { + memset(macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu, 0, \ + macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize); + macMuxPdu(&msg4DlData, &macCeData, macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu,\ + macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize); + + } + else + { + DU_LOG("\nMAC: Failed allocating memory for msg4TxPdu"); + } + /* Free memory allocated */ + MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell[cellIdx]->macRaCb[0].msg4PduLen); } } - + /* storing msg4 Pdu in macDlSlot */ - if(macCb.macCell->macRaCb[0].msg4TxPdu) + if(macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu) { - msg4Alloc->msg4Info.msg4PduLen = macCb.macCell->macRaCb[0].msg4TbSize; + msg4Alloc->msg4Info.msg4PduLen = macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize; MAC_ALLOC(msg4Alloc->msg4Info.msg4Pdu, msg4Alloc->msg4Info.msg4PduLen); - if(msg4Alloc->msg4Info.msg4Pdu != NULLP) - { - memcpy(msg4Alloc->msg4Info.msg4Pdu, macCb.macCell->macRaCb[0].msg4TxPdu, \ - msg4Alloc->msg4Info.msg4PduLen); - } - } - else - { + if(msg4Alloc->msg4Info.msg4Pdu != NULLP) + { + memcpy(msg4Alloc->msg4Info.msg4Pdu, macCb.macCell[cellIdx]->macRaCb[0].msg4TxPdu, \ + msg4Alloc->msg4Info.msg4PduLen); + } + } + else + { DU_LOG("\nMAC: Failed at macMuxPdu()"); - } + } /* TODO: Free all allocated memory, after the usage */ /* MAC_FREE(macCb.macCell->macRaCb[0].msg4TxPdu, \ - macCb.macCell->macRaCb[0].msg4TbSize); // TODO: To be freed after re-transmission is successful. + macCb.macCell->macRaCb[0].msg4TbSize); // TODO: To be freed after re-transmission is successful. MAC_FREE(macCb.macCell->macRaCb[0].msg4Pdu, macCb.macCell->macRaCb[0].msg4PduLen); */ } @@ -176,16 +180,19 @@ void fillMsg4Pdu(Msg4Alloc *msg4Alloc) void buildAndSendMuxPdu(SlotIndInfo currTimingInfo) { + uint16_t cellIdx; MacDlSlot *currDlSlot = NULLP; SlotIndInfo muxTimingInfo; memset(&muxTimingInfo, 0, sizeof(SlotIndInfo)); - - ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA); - currDlSlot = &macCb.macCell->dlSlot[muxTimingInfo.slot]; + + GET_CELL_IDX(currTimingInfo.cellId, cellIdx); + + ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA); + currDlSlot = &macCb.macCell[cellIdx]->dlSlot[muxTimingInfo.slot]; if(currDlSlot->dlInfo.msg4Alloc) - { - fillMsg4Pdu(currDlSlot->dlInfo.msg4Alloc); - currDlSlot = NULLP; + { + fillMsg4Pdu(currTimingInfo.cellId, currDlSlot->dlInfo.msg4Alloc); + currDlSlot = NULLP; } } @@ -199,7 +206,7 @@ void buildAndSendMuxPdu(SlotIndInfo currTimingInfo) * This API is invoked by MAC to send slot ind to scheduler. * * @param[in] SlotIndInfo *slotInd - * @return S16 + * @return * -# ROK * -# RFAILED **/ @@ -208,9 +215,7 @@ int sendSlotIndMacToSch(SlotIndInfo *slotInd) /* fill Pst structure to send to lwr_mac to MAC */ Pst pst; - fillMacToSchPst(&pst); - pst.event = EVENT_SLOT_IND_TO_SCH; - + FILL_PST_MAC_TO_SCH(pst, EVENT_SLOT_IND_TO_SCH); return(*macSchSlotIndOpts[pst.selector])(&pst,slotInd); } @@ -234,45 +239,70 @@ int sendSlotIndMacToDuApp(SlotIndInfo *slotInd) { Pst pst; uint16_t ret; - SlotInfo *slotInfo; - + SlotIndInfo *slotInfo; + /* Allocate sharable memory */ - MAC_ALLOC_SHRABL_BUF(slotInfo, sizeof(SlotInfo)); + MAC_ALLOC_SHRABL_BUF(slotInfo, sizeof(SlotIndInfo)); if(!slotInfo) { DU_LOG("\nMAC : Slot Indication memory allocation failed"); return RFAILED; - } - - slotInfo->cellId = macCb.macCell->cellId; - slotInfo->sfn = slotInd->sfn; - slotInfo->slot = slotInd->slot; - - /* Fill Pst */ - pst.selector = ODU_SELECTOR_LWLC; - pst.srcEnt = ENTRG; - pst.dstEnt = ENTDUAPP; - pst.dstInst = 0; - pst.srcInst = macCb.macInst; - pst.dstProcId = rgCb[pst.srcInst].rgInit.procId; - pst.srcProcId = rgCb[pst.srcInst].rgInit.procId; - pst.region = MAC_MEM_REGION; - pst.pool = MAC_POOL; - pst.event = EVENT_MAC_SLOT_IND; - pst.route = 0; - pst.prior = 0; - pst.intfVer = 0; - - ret = MacDuAppSlotInd(&pst, slotInfo); - if(ret != ROK) - { - DU_LOG("\nMAC: Failed to send slot indication to DU APP"); - MAC_FREE_SHRABL_BUF(MAC_MEM_REGION, MAC_POOL, slotInfo, sizeof(SlotInfo)); - } - - return ret; + } + + slotInfo->cellId = slotInd->cellId; + slotInfo->sfn = slotInd->sfn; + slotInfo->slot = slotInd->slot; + + /* Fill Pst */ + FILL_PST_MAC_TO_DUAPP(pst, EVENT_MAC_SLOT_IND); + + ret = MacDuAppSlotInd(&pst, slotInfo); + if(ret != ROK) + { + DU_LOG("\nMAC: Failed to send slot indication to DU APP"); + MAC_FREE_SHRABL_BUF(MAC_MEM_REGION, MAC_POOL, slotInfo, sizeof(SlotIndInfo)); + } + + return ret; } /* sendSlotIndMacToDuApp */ +/******************************************************************* + * + * @brief Process slot indication at MAC + * + * @details + * + * Function : macProcSlotInd + * + * Functionality: Process slot indication at MAC + * + * @params[in] Slot indication info + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +uint8_t macProcSlotInd(SlotIndInfo slotInd) +{ + uint16_t cellIdx; + + GET_CELL_IDX(slotInd.cellId, cellIdx); + + /* Store current time info */ + macCb.macCell[cellIdx]->currTime.cellId = slotInd.cellId; + macCb.macCell[cellIdx]->currTime.slot = slotInd.slot; + macCb.macCell[cellIdx]->currTime.sfn = slotInd.sfn; + + /* Mux Pdu for Msg4 */ + buildAndSendMuxPdu(slotInd); + + /* Trigger for DL TTI REQ */ + fillDlTtiReq(slotInd); + + /* Trigger for UL TTI REQ */ + fillUlTtiReq(slotInd); + + return ROK; +} /* macProcSlotInd */ /** * @brief Transmission time interval indication from PHY. @@ -286,23 +316,17 @@ int sendSlotIndMacToDuApp(SlotIndInfo *slotInd) * @param[in] Pst *pst * @param[in] SuId suId * @param[in] SlotIndInfo *slotInd - * @return S16 + * @return * -# ROK * -# RFAILED **/ -PUBLIC S16 fapiMacSlotInd -( -Pst *pst, -SlotIndInfo *slotInd -) +uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) { - S16 ret; - VOLATILE U32 startTime=0; - Inst inst; + uint8_t ret; + VOLATILE uint32_t startTime=0; DU_LOG("\nMAC : Slot Indication received"); - - inst = pst->dstInst; + /*starting Task*/ SStartTask(&startTime, PID_MAC_TTI_IND); @@ -311,14 +335,14 @@ SlotIndInfo *slotInd if(ret != ROK) { DU_LOG("\nMAC : Sending of slot ind msg from MAC to SCH failed"); - RETVALUE(ret); + return ret; } - ret = macProcessSlotInd(inst,*slotInd); + ret = macProcSlotInd(*slotInd); if(ret != ROK) { - DU_LOG("\nMAC : macProcessSlotInd failed"); - RETVALUE(ret); + DU_LOG("\nMAC : macProcSlotInd failed"); + return ret; } /* send slot indication to du app */ @@ -326,13 +350,13 @@ SlotIndInfo *slotInd if(ret != ROK) { DU_LOG("\nMAC :Sending of slot ind msg from MAC to DU APP failed"); - RETVALUE(ret); + return ret; } /*stoping Task*/ SStopTask(startTime, PID_MAC_TTI_IND); - RETVALUE(ret); + return ret; } /* fapiMacSlotInd */ /**********************************************************************