X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_slot_ind.c;h=d8dc0e7a7a8c379098fcfe60ace6a7acf17f1dcb;hb=c01ca171144bd6e576646466d420c6d5feaabc59;hp=95a21c2599fea791c98d054f21b87cd3376d0e6f;hpb=7ebfb1f80967fe83bf169c2915cedf2c9fb5cbf7;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index 95a21c259..d8dc0e7a7 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" @@ -53,9 +54,13 @@ MacSchSlotIndFunc macSchSlotIndOpts[] = **/ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) { + uint8_t ueIdx; uint16_t cellIdx; MacDlSlot *currDlSlot = NULLP; +#ifdef CALL_FLOW_DEBUG_LOG + DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_DL_SCH_INFO\n"); +#endif if(dlSchedInfo != NULLP) { GET_CELL_IDX(dlSchedInfo->cellId, cellIdx); @@ -89,7 +94,10 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) /* Check if the downlink pdu is msg4 */ if(dlSchedInfo->dlMsgAlloc->dlMsgInfo.isMsg4Pdu) { - macCb.macCell[cellIdx]->macRaCb[0].msg4TbSize = dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize; + GET_UE_IDX(dlSchedInfo->dlMsgAlloc->dlMsgInfo.crnti, ueIdx); + ueIdx = ueIdx -1; + macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize = \ + dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize; } else { @@ -124,6 +132,7 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc) { uint8_t ueIdx; uint16_t cellIdx; + uint16_t msg4TxPduLen; MacDlData msg4DlData; MacCeInfo macCeData; @@ -134,45 +143,50 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc) GET_UE_IDX(msg4Alloc->dlMsgInfo.crnti, ueIdx); ueIdx = ueIdx -1; + + if(macCb.macCell[cellIdx] == NULLP) + { + DU_LOG("\nERROR --> MAC: Cell Id[%d] not found", cellId); + return; + } + if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu != NULLP) { - MAC_ALLOC(msg4DlData.pduInfo[ueIdx].dlPdu, \ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); - if(msg4DlData.pduInfo[ueIdx].dlPdu != NULLP) + MAC_ALLOC(msg4DlData.pduInfo[msg4DlData.numPdu].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); + if(msg4DlData.pduInfo[msg4DlData.numPdu].dlPdu != NULLP) { - fillMsg4DlData(&msg4DlData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen,\ + msg4TxPduLen = macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize - TX_PAYLOAD_HDR_LEN; + + fillMsg4DlData(&msg4DlData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen, \ macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4Pdu); - fillMacCe(&macCeData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg3Pdu); - /* Forming Mux Pdu */ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu = NULLP; - MAC_ALLOC(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize); - if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu != NULLP) - { - memset(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, 0, \ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize); - macMuxPdu(&msg4DlData, &macCeData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu,\ - macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize); - - } - else - { - DU_LOG("\nERROR --> MAC: Failed allocating memory for msg4TxPdu"); - } - /* Free memory allocated */ - MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); + fillMacCe(&macCeData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg3Pdu); + /* Forming Mux Pdu */ + macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu = NULLP; + MAC_ALLOC(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, msg4TxPduLen); + if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu != NULLP) + { + memset(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, 0, msg4TxPduLen); + macMuxPdu(&msg4DlData, &macCeData, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, msg4TxPduLen); + } + else + { + DU_LOG("\nERROR --> MAC: Failed allocating memory for msg4TxPdu"); + } + /* Free memory allocated */ + MAC_FREE(msg4DlData.pduInfo[msg4DlData.numPdu-1].dlPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen); + msg4DlData.numPdu--; } } /* storing msg4 Pdu in macDlSlot */ if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu) { - msg4Alloc->dlMsgInfo.dlMsgPduLen = macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize; + msg4Alloc->dlMsgInfo.dlMsgPduLen = msg4TxPduLen; MAC_ALLOC(msg4Alloc->dlMsgInfo.dlMsgPdu, msg4Alloc->dlMsgInfo.dlMsgPduLen); if(msg4Alloc->dlMsgInfo.dlMsgPdu != NULLP) { - memcpy(msg4Alloc->dlMsgInfo.dlMsgPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \ - msg4Alloc->dlMsgInfo.dlMsgPduLen); + memcpy(msg4Alloc->dlMsgInfo.dlMsgPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \ + msg4Alloc->dlMsgInfo.dlMsgPduLen); } } else @@ -203,7 +217,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) { @@ -302,7 +316,13 @@ uint8_t macProcSlotInd(SlotIndInfo slotInd) uint16_t cellIdx = 0; GET_CELL_IDX(slotInd.cellId, cellIdx); - + + if(macCb.macCell[cellIdx] == NULLP) + { + DU_LOG("ERROR --> MAC : macProcSlotInd(): CellId[%d] does not exist. Error occurred at SFN [%d] Slot [%d]",\ + slotInd.cellId, slotInd.sfn, slotInd.slot); + return RFAILED; + } /* Store current time info */ macCb.macCell[cellIdx]->currTime.cellId = slotInd.cellId; macCb.macCell[cellIdx]->currTime.slot = slotInd.slot; @@ -314,12 +334,6 @@ uint8_t macProcSlotInd(SlotIndInfo slotInd) /* Trigger for DL TTI REQ */ fillDlTtiReq(slotInd); - /* Trigger for UL TTI REQ */ - fillUlTtiReq(slotInd); - - /* Trigger for UL DCI REQ */ - fillUlDciReq(slotInd); - return ROK; } /* macProcSlotInd */ @@ -342,15 +356,22 @@ uint8_t macProcSlotInd(SlotIndInfo slotInd) uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) { uint8_t ret = ROK; + uint16_t cellIdx; volatile uint32_t startTime=0; #ifdef ODU_SLOT_IND_DEBUG_LOG - DU_LOG("\nDEBUG --> MAC : 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++; + if(gSlotCount == 1) + { + GET_CELL_IDX(slotInd->cellId, cellIdx); + macCb.macCell[cellIdx]->state = CELL_STATE_UP; + } + /* When testing L2 with Intel-L1, any changes specific to * timer mode testing must be guarded under INTEL_TIMER_MODE*/ #ifndef INTEL_TIMER_MODE @@ -387,6 +408,16 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd) /*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 */