X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_slot_ind.c;h=cece129533fd6234c70bf912a581729547ba2d5d;hb=b8044fce6d8a277254f235d128c8729ed0b5e7b0;hp=a2602b564b9c427355d5e49757e5bab5a76eae7b;hpb=a6e0e974ff223ae507ae646c354dcfb76d94a1ed;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index a2602b564..cece12953 100644 --- a/src/5gnrmac/mac_slot_ind.c +++ b/src/5gnrmac/mac_slot_ind.c @@ -26,8 +26,14 @@ #include "cm_hash.h" /* Common Hash List Defines */ #include "cm_mblk.h" /* common memory link list library */ #include "cm_lte.h" /* Common LTE Defines */ +#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 "gen.x" /* general */ #include "ssi.x" /* system services */ #include "cm5.x" /* system services */ @@ -37,22 +43,236 @@ #include "cm_hash.x" /* Common Hash List Definitions */ #include "cm_mblk.x" /* common memory link list library */ #include "cm_lte.x" /* Common LTE Defines */ +#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.h" +#include "du_log.h" +#include "rg.x" +#include "mac_upr_inf_api.h" + +/* function pointers for packing slot ind from mac to sch */ +MacSchSlotIndFunc macSchSlotIndOpts[] = +{ + packMacSchSlotInd, + macSchSlotInd, + packMacSchSlotInd +}; -int MacProcDlBrdcstAlloc(Pst *pst, DlBrdcstAlloc *dlBrdcstAlloc) +/** + * @brief process DL allocation from scheduler + * + * @details + * + * Function : MacProcDlAlloc + * + * This function copied dl sch info in the mac slot info + * + * @param[in] Pst *pst + * @param[in] DL allocation from scheduler + * @return S16 + * -# ROK + * -# RFAILED + **/ +int MacProcDlAlloc(Pst *pst, DlAlloc *dlAlloc) { - if(dlBrdcstAlloc != NULLP) + if(dlAlloc != NULLP) { - MacDlSlot *currDlSlot = - &macCb.macCell->dlSlot[dlBrdcstAlloc->slotIndInfo.slot % MAX_SLOT_SUPPORTED]; - memcpy(&currDlSlot->cellBroadcastInfo, dlBrdcstAlloc, sizeof(DlBrdcstAlloc)); + MacDlSlot *currDlSlot = + &macCb.macCell->dlSlot[dlAlloc->slotIndInfo.slot % MAX_SLOT_SUPPORTED]; + memcpy(&currDlSlot->dlInfo, dlAlloc, sizeof(DlAlloc)); + + if(currDlSlot->dlInfo.msg4Alloc) + { + MacDlData msg4DlData; + MacCeInfo macCeData; + memset(&msg4DlData, 0, sizeof(MacDlData)); + memset(&macCeData, 0, sizeof(MacCeInfo)); + + macCb.macCell->macRaCb[0].msg4TbSize = \ + dlAlloc->msg4Alloc->msg4PdschCfg.codeword[0].tbSize; + + if(macCb.macCell->macRaCb[0].msg4Pdu != NULLP) + { + MAC_ALLOC(msg4DlData.pduInfo[0].dlPdu, \ + macCb.macCell->macRaCb[0].msg4PduLen); + if(msg4DlData.pduInfo[0].dlPdu != NULLP) + { + fillMsg4DlData(&msg4DlData); + } + } + fillMacCe(&macCeData); + macMuxPdu(&msg4DlData, &macCeData, macCb.macCell->macRaCb[0].msg4TbSize); + + /* storing msg4 Pdu in dlAlloc */ + MAC_ALLOC(dlAlloc->msg4Alloc->msg4Info.msg4Pdu, macCb.macCell->macRaCb[0].msg4PduLen); + if(dlAlloc->msg4Alloc->msg4Info.msg4Pdu != NULLP) + { + dlAlloc->msg4Alloc->msg4Info.msg4Pdu = macCb.macCell->macRaCb[0].msg4Pdu; + dlAlloc->msg4Alloc->msg4Info.msg4PduLen = macCb.macCell->macRaCb[0].msg4PduLen; + } + /* 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. + MAC_FREE(dlAlloc->msg4Alloc->msg4Info.msg4Pdu,\ + macCb.macCell->macRaCb[0].msg4PduLen); //TODO: To be freed after lower-mac is succesfull + MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell->macRaCb[0].msg4PduLen); + MAC_FREE(macCb.macCell->macRaCb[0].msg4Pdu, macCb.macCell->macRaCb[0].msg4PduLen); */ + } } return ROK; } +/** + * @brief Transmission time interval indication from PHY. + * + * @details + * + * Function : sendSlotIndMacToSch + * + * This API is invoked by MAC to send slot ind to scheduler. + * + * @param[in] SlotIndInfo *slotInd + * @return S16 + * -# ROK + * -# RFAILED + **/ +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; + + return(*macSchSlotIndOpts[pst.selector])(&pst,slotInd); +} + +/******************************************************************* + * + * @brief Send slot indication to DU APP + * + * @details + * + * Function : sendSlotIndMacToDuApp + * + * Functionality: + * Send slot indication to DU APP + * + * @params[in] Slot indication info + * @return ROK - success + * RFAILED - failure + * + * ****************************************************************/ +int sendSlotIndMacToDuApp(SlotIndInfo *slotInd) +{ + Pst pst; + uint16_t ret; + SlotInfo *slotInfo; + + /* Allocate sharable memory */ + MAC_ALLOC_SHRABL_BUF(slotInfo, sizeof(SlotInfo)); + 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 = DU_MAC_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; +} /* sendSlotIndMacToDuApp */ + + +/** + * @brief Transmission time interval indication from PHY. + * + * @details + * + * Function : fapiMacSlotInd + * + * This API is invoked by PHY to indicate TTI indication to MAC for a cell. + * + * @param[in] Pst *pst + * @param[in] SuId suId + * @param[in] SlotIndInfo *slotInd + * @return S16 + * -# ROK + * -# RFAILED + **/ +PUBLIC S16 fapiMacSlotInd +( +Pst *pst, +SlotIndInfo *slotInd +) +{ + S16 ret; + VOLATILE U32 startTime=0; + Inst inst; + + DU_LOG("\nMAC : Slot Indication received"); + + inst = pst->dstInst; + /*starting Task*/ + SStartTask(&startTime, PID_MAC_TTI_IND); + + /* send slot indication to scheduler */ + ret = sendSlotIndMacToSch(slotInd); + if(ret != ROK) + { + DU_LOG("\nMAC : Sending of slot ind msg from MAC to SCH failed"); + RETVALUE(ret); + } + + ret = macProcessSlotInd(inst,*slotInd); + if(ret != ROK) + { + DU_LOG("\nMAC : macProcessSlotInd failed"); + RETVALUE(ret); + } + + /* send slot indication to du app */ + ret = sendSlotIndMacToDuApp(slotInd); + if(ret != ROK) + { + DU_LOG("\nMAC :Sending of slot ind msg from MAC to DU APP failed"); + RETVALUE(ret); + } + + /*stoping Task*/ + SStopTask(startTime, PID_MAC_TTI_IND); + + RETVALUE(ret); +} /* fapiMacSlotInd */ + /********************************************************************** End of file **********************************************************************/