X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_slot_ind.c;h=37cb68751f453e718558e7c3b7711c0990b93da4;hb=be872311899d115fdf4565e4811cc8b37226ac53;hp=19f8f0e20800184f0692079fa7cb3f1b837d57e8;hpb=ce136a8facf53778e327bead92b0cfe91b566571;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index 19f8f0e20..37cb68751 100644 --- a/src/5gnrmac/mac_slot_ind.c +++ b/src/5gnrmac/mac_slot_ind.c @@ -25,6 +25,7 @@ #include "rlc_mac_inf.h" #include "mac.h" #include "mac_upr_inf_api.h" +#include "lwr_mac.h" #include "lwr_mac_fsm.h" #include "mac_utils.h" @@ -61,48 +62,48 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) GET_CELL_IDX(dlSchedInfo->cellId, cellIdx); if(dlSchedInfo->isBroadcastPres) { - currDlSlot = &macCb.macCell[cellIdx]->\ - dlSlot[dlSchedInfo->schSlotValue.broadcastTime.slot]; - currDlSlot->dlInfo.isBroadcastPres = true; - memcpy(&currDlSlot->dlInfo.brdcstAlloc, &dlSchedInfo->brdcstAlloc, sizeof(DlBrdcstAlloc)); + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.broadcastTime.slot]; + currDlSlot->dlInfo.isBroadcastPres = true; + memcpy(&currDlSlot->dlInfo.brdcstAlloc, &dlSchedInfo->brdcstAlloc, sizeof(DlBrdcstAlloc)); currDlSlot->dlInfo.brdcstAlloc.sib1Alloc.sib1PdcchCfg.dci.pdschCfg = \ - &currDlSlot->dlInfo.brdcstAlloc.sib1Alloc.sib1PdschCfg; + &currDlSlot->dlInfo.brdcstAlloc.sib1Alloc.sib1PdschCfg; } if(dlSchedInfo->rarAlloc != NULLP) { - currDlSlot = &macCb.macCell[cellIdx]->\ - dlSlot[dlSchedInfo->schSlotValue.rarTime.slot]; - currDlSlot->dlInfo.rarAlloc = dlSchedInfo->rarAlloc; + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.rarTime.slot]; + currDlSlot->dlInfo.rarAlloc = dlSchedInfo->rarAlloc; - /* MUXing of RAR */ - fillRarPdu(&currDlSlot->dlInfo.rarAlloc->rarInfo); + /* MUXing of RAR */ + fillRarPdu(&currDlSlot->dlInfo.rarAlloc->rarInfo); } if(dlSchedInfo->dlMsgAlloc != NULLP) { - currDlSlot = &macCb.macCell[cellIdx]->\ - dlSlot[dlSchedInfo->schSlotValue.dlMsgTime.slot]; - currDlSlot->dlInfo.dlMsgAlloc = dlSchedInfo->dlMsgAlloc; /* copy msg4 alloc pointer in MAC slot info */ + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.dlMsgTime.slot]; + currDlSlot->dlInfo.dlMsgAlloc = dlSchedInfo->dlMsgAlloc; /* copy msg4 alloc pointer in MAC slot info */ currDlSlot->dlInfo.cellId = dlSchedInfo->cellId; /* Check if the downlink pdu is msg4 */ - if(dlSchedInfo->dlMsgAlloc->dlMsgInfo.isMsg4Pdu) - { - macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize = dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize; - } - else - { - memcpy(&currDlSlot->dlInfo.schSlotValue, &dlSchedInfo->schSlotValue, sizeof(SchSlotValue)); - /* Send LC schedule result to RLC */ - sendSchedRptToRlc(currDlSlot->dlInfo, dlSchedInfo->schSlotValue.dlMsgTime); - } + if(dlSchedInfo->dlMsgAlloc->dlMsgInfo.isMsg4Pdu) + { + macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize = dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize; + } + else + { + memcpy(&currDlSlot->dlInfo.schSlotValue, &dlSchedInfo->schSlotValue, sizeof(SchSlotValue)); + /* Send LC schedule result to RLC */ + sendSchedRptToRlc(currDlSlot->dlInfo, dlSchedInfo->schSlotValue.dlMsgTime); + } } if(dlSchedInfo->ulGrant != NULLP) { - currDlSlot = &macCb.macCell[cellIdx]->\ - dlSlot[dlSchedInfo->schSlotValue.ulDciTime.slot]; + currDlSlot = &macCb.macCell[cellIdx]->\ + dlSlot[dlSchedInfo->schSlotValue.ulDciTime.slot]; currDlSlot->dlInfo.ulGrant = dlSchedInfo->ulGrant; } } @@ -157,7 +158,7 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc) } else { - DU_LOG("\nMAC: Failed allocating memory for msg4TxPdu"); + DU_LOG("\nERROR --> MAC: Failed allocating memory for msg4TxPdu"); } /* Free memory allocated */ MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); @@ -177,7 +178,7 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc) } else { - DU_LOG("\nMAC: Failed at macMuxPdu()"); + DU_LOG("\nERROR --> MAC: Failed at macMuxPdu()"); } } @@ -203,7 +204,7 @@ void buildAndSendMuxPdu(SlotIndInfo currTimingInfo) GET_CELL_IDX(currTimingInfo.cellId, cellIdx); - ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA); + ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA_DL); currDlSlot = &macCb.macCell[cellIdx]->dlSlot[muxTimingInfo.slot]; if(currDlSlot->dlInfo.dlMsgAlloc) { @@ -240,50 +241,47 @@ int sendSlotIndMacToSch(SlotIndInfo *slotInd) /******************************************************************* * - * @brief Send slot indication to DU APP + * @brief Send cell up indication to DU APP * * @details * - * Function : sendSlotIndMacToDuApp + * Function : sendCellUpIndMacToDuApp * * Functionality: - * Send slot indication to DU APP + * Send cell up indication to DU APP * - * @params[in] Slot indication info + * @params[in] Cell Up indication info * @return ROK - success * RFAILED - failure * * ****************************************************************/ -int sendSlotIndMacToDuApp(SlotIndInfo *slotInd) +int sendCellUpIndMacToDuApp(uint16_t cellId) { Pst pst; uint16_t ret; - SlotIndInfo *slotInfo; + OduCellId *oduCellId; /* Allocate sharable memory */ - MAC_ALLOC_SHRABL_BUF(slotInfo, sizeof(SlotIndInfo)); - if(!slotInfo) + MAC_ALLOC_SHRABL_BUF(oduCellId, sizeof(OduCellId)); + if(!oduCellId) { - DU_LOG("\nMAC : Slot Indication memory allocation failed"); + DU_LOG("\nERROR --> MAC : Memory allocation failed for cell up indication"); return RFAILED; } - - slotInfo->cellId = slotInd->cellId; - slotInfo->sfn = slotInd->sfn; - slotInfo->slot = slotInd->slot; + oduCellId->cellId = cellId; /* Fill Pst */ - FILL_PST_MAC_TO_DUAPP(pst, EVENT_MAC_SLOT_IND); + FILL_PST_MAC_TO_DUAPP(pst, EVENT_MAC_CELL_UP_IND); - ret = MacDuAppSlotInd(&pst, slotInfo); + ret = MacDuAppCellUpInd(&pst, oduCellId); 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)); + DU_LOG("\nERROR --> MAC: Failed to send cell up indication to DU APP"); + MAC_FREE_SHRABL_BUF(MAC_MEM_REGION, MAC_POOL, oduCellId, sizeof(OduCellId)); } return ret; -} /* sendSlotIndMacToDuApp */ +} /* sendCellUpIndMacToDuApp */ /******************************************************************* * @@ -302,7 +300,7 @@ int sendSlotIndMacToDuApp(SlotIndInfo *slotInd) * ****************************************************************/ uint8_t macProcSlotInd(SlotIndInfo slotInd) { - uint16_t cellIdx; + uint16_t cellIdx = 0; GET_CELL_IDX(slotInd.cellId, cellIdx); @@ -317,9 +315,8 @@ uint8_t macProcSlotInd(SlotIndInfo slotInd) /* Trigger for DL TTI REQ */ fillDlTtiReq(slotInd); - /* Trigger for UL TTI REQ */ - fillUlTtiReq(slotInd); - + /* TODO : check if this too needs to be sent in sequence with Dl and Ul TTI req. + * If so , move trigger for fillUlDciReq to lower mac */ /* Trigger for UL DCI REQ */ fillUlDciReq(slotInd); @@ -348,10 +345,11 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) volatile uint32_t startTime=0; #ifdef ODU_SLOT_IND_DEBUG_LOG - DU_LOG("\nMAC : Slot Indication received"); + DU_LOG("\nDEBUG --> MAC : Slot Indication received. [%d : %d]", slotInd->sfn, slotInd->slot); #endif /*starting Task*/ ODU_START_TASK(&startTime, PID_MAC_TTI_IND); + gSlotCount++; /* When testing L2 with Intel-L1, any changes specific to * timer mode testing must be guarded under INTEL_TIMER_MODE*/ @@ -360,7 +358,7 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) ret = sendSlotIndMacToSch(slotInd); if(ret != ROK) { - DU_LOG("\nMAC : Sending of slot ind msg from MAC to SCH failed"); + DU_LOG("\nERROR --> MAC : Sending of slot ind msg from MAC to SCH failed"); MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo)); return ret; } @@ -368,24 +366,37 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) ret = macProcSlotInd(*slotInd); if(ret != ROK) { - DU_LOG("\nMAC : macProcSlotInd failed"); + DU_LOG("\nERROR --> MAC : macProcSlotInd failed"); MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo)); return ret; } #endif /* send slot indication to du app */ - ret = sendSlotIndMacToDuApp(slotInd); - if(ret != ROK) + if(gSlotCount == 1) { - DU_LOG("\nMAC :Sending of slot ind msg from MAC to DU APP failed"); - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo)); - return ret; + ret = sendCellUpIndMacToDuApp(slotInd->cellId); + if(ret != ROK) + { + DU_LOG("\nERROR --> MAC :Sending of slot ind msg from MAC to DU APP failed"); + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo)); + return ret; + } } /*stoping Task*/ ODU_STOP_TASK(startTime, PID_MAC_TTI_IND); MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo)); + +#ifdef INTEL_WLS_MEM + lwrMacCb.phySlotIndCntr++; + if(lwrMacCb.phySlotIndCntr > WLS_MEM_FREE_PRD) + { + lwrMacCb.phySlotIndCntr = 1; + } + freeWlsBlockList(lwrMacCb.phySlotIndCntr - 1); +#endif + return ret; } /* fapiMacSlotInd */