X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_slot_ind.c;h=bca05f28a0f70d9279261e729d3677094dd62d34;hb=29b5f01d779caab32dbc5b3686a5d917e4c818ec;hp=cb0b8322066dc2a038616b5f689351010e1b9dc0;hpb=105199ef642ffe9736ea24a01d4546578fa25e60;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_slot_ind.c b/src/5gnrmac/mac_slot_ind.c index cb0b83220..bca05f28a 100644 --- a/src/5gnrmac/mac_slot_ind.c +++ b/src/5gnrmac/mac_slot_ind.c @@ -85,58 +85,108 @@ int MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo) if(dlSchedInfo->msg4Alloc != NULLP) { Msg4Alloc *msg4Alloc = NULLP; - MacDlData msg4DlData; - MacCeInfo macCeData; - 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; + } + } + return ROK; +} - memset(&msg4DlData, 0, sizeof(MacDlData)); - memset(&macCeData, 0, sizeof(MacCeInfo)); +/** + * @brief Forming anf filling the MUX Pdu + * @details + * + * Function : fillMsg4Pdu + * + * Forming and filling of Msg4Pdu + * + * @param[in] Msg4Alloc *msg4Alloc + * @return void + **/ +void fillMsg4Pdu(Msg4Alloc *msg4Alloc) +{ + MacDlData msg4DlData; + MacCeInfo macCeData; - macCb.macCell->macRaCb[0].msg4TbSize = msg4Alloc->msg4PdschCfg.codeword[0].tbSize; + memset(&msg4DlData, 0, sizeof(MacDlData)); + memset(&macCeData, 0, sizeof(MacCeInfo)); - if(macCb.macCell->macRaCb[0].msg4Pdu != NULLP) + 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, 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) { - MAC_ALLOC(msg4DlData.pduInfo[0].dlPdu, \ - macCb.macCell->macRaCb[0].msg4PduLen); - if(msg4DlData.pduInfo[0].dlPdu != NULLP) - { - fillMsg4DlData(&msg4DlData); - } - } - - /* MUXing for msg4 */ - fillMacCe(&macCeData); - macMuxPdu(&msg4DlData, &macCeData, macCb.macCell->macRaCb[0].msg4TbSize); - - /* storing msg4 Pdu in macDlSlot */ - if(macCb.macCell->macRaCb[0].msg4TxPdu) - { - msg4Alloc->msg4Info.msg4PduLen = macCb.macCell->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); - } + 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 at macMuxPdu()"); - return RFAILED; + DU_LOG("\nMAC: Failed allocating memory for msg4TxPdu"); } - /* 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(dlSchedInfo->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); */ + /* Free memory allocated */ + MAC_FREE(msg4DlData.pduInfo[0].dlPdu, macCb.macCell->macRaCb[0].msg4PduLen); } } - return ROK; + + /* storing msg4 Pdu in macDlSlot */ + if(macCb.macCell->macRaCb[0].msg4TxPdu) + { + msg4Alloc->msg4Info.msg4PduLen = macCb.macCell->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 + { + 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. + MAC_FREE(macCb.macCell->macRaCb[0].msg4Pdu, macCb.macCell->macRaCb[0].msg4PduLen); */ +} + +/** + * @brief Builds and Send the Muxed Pdu to Lower MAC + * + * @details + * + * Function : buildAndSendMuxPdu + * + * Build and Sends the Muxed Pdu to Lower MAC. + * + * @param[in] SlotIndInfo *slotInd + * @return void + **/ + +void buildAndSendMuxPdu(SlotIndInfo currTimingInfo) +{ + MacDlSlot *currDlSlot = NULLP; + SlotIndInfo muxTimingInfo; + memset(&muxTimingInfo, 0, sizeof(SlotIndInfo)); + + ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA); + currDlSlot = &macCb.macCell->dlSlot[muxTimingInfo.slot]; + if(currDlSlot->dlInfo.msg4Alloc) + { + fillMsg4Pdu(currDlSlot->dlInfo.msg4Alloc); + currDlSlot = NULLP; + } } /**