Renaming GET_UE_IDX to GET_UE_ID in 5gnrmac [Issue-ID: ODUHIGH-401]
[o-du/l2.git] / src / 5gnrmac / mac_slot_ind.c
index d8dc0e7..1aa842d 100644 (file)
@@ -54,8 +54,9 @@ MacSchSlotIndFunc macSchSlotIndOpts[] =
  **/
 uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
 {
-   uint8_t   ueIdx;
-   uint16_t  cellIdx;
+   uint8_t   schInfoIdx = 0;
+   uint8_t   ueId = 0, ueIdx = 0;
+   uint16_t  cellIdx = 0;
    MacDlSlot *currDlSlot = NULLP;
 
 #ifdef CALL_FLOW_DEBUG_LOG
@@ -74,36 +75,43 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
                                             &currDlSlot->dlInfo.brdcstAlloc.sib1Alloc.sib1PdschCfg;
       }
 
-      if(dlSchedInfo->rarAlloc != NULLP)
+      for(ueIdx=0; ueIdx<MAX_NUM_UE; ueIdx++)
       {
-         currDlSlot = &macCb.macCell[cellIdx]->\
-                      dlSlot[dlSchedInfo->schSlotValue.rarTime.slot];
-         currDlSlot->dlInfo.rarAlloc = dlSchedInfo->rarAlloc;
-
-         /* 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->dlInfo.cellId = dlSchedInfo->cellId;
-
-         /* Check if the downlink pdu is msg4 */
-         if(dlSchedInfo->dlMsgAlloc->dlMsgInfo.isMsg4Pdu)
+         if(dlSchedInfo->rarAlloc[ueIdx] != NULLP)
          {
-            GET_UE_IDX(dlSchedInfo->dlMsgAlloc->dlMsgInfo.crnti, ueIdx);
-            ueIdx = ueIdx -1;
-            macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize = \
-               dlSchedInfo->dlMsgAlloc->dlMsgPdschCfg.codeword[0].tbSize;
+            currDlSlot = &macCb.macCell[cellIdx]->dlSlot[dlSchedInfo->schSlotValue.rarTime.slot];
+            currDlSlot->dlInfo.rarAlloc[ueIdx] = dlSchedInfo->rarAlloc[ueIdx];
+
+            /* MUXing of RAR */
+            fillRarPdu(&currDlSlot->dlInfo.rarAlloc[ueIdx]->rarInfo);
          }
-         else
+
+         if(dlSchedInfo->dlMsgAlloc[ueIdx] != NULLP)
          {
-            memcpy(&currDlSlot->dlInfo.schSlotValue, &dlSchedInfo->schSlotValue, sizeof(SchSlotValue));
-            /* Send LC schedule result to RLC */
-            sendSchedRptToRlc(currDlSlot->dlInfo, dlSchedInfo->schSlotValue.dlMsgTime);
+            currDlSlot = &macCb.macCell[cellIdx]->\
+                         dlSlot[dlSchedInfo->schSlotValue.dlMsgTime.slot];
+            currDlSlot->dlInfo.dlMsgAlloc[ueIdx] = dlSchedInfo->dlMsgAlloc[ueIdx]; /* copy msg4 alloc pointer in MAC slot info */
+            currDlSlot->dlInfo.cellId = dlSchedInfo->cellId;
+
+            /* Check if the downlink pdu is msg4 */
+            for(schInfoIdx=0; schInfoIdx < dlSchedInfo->dlMsgAlloc[ueIdx]->numSchedInfo; schInfoIdx++)
+            {
+               if(dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.isMsg4Pdu)
+               {
+                  GET_UE_ID(dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.crnti, ueId);
+                  ueIdx = ueId -1;
+                  macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TbSize = \
+                     dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgPdschCfg.codeword[0].tbSize;
+               }
+               else
+               {
+                  memcpy(&currDlSlot->dlInfo.schSlotValue, &dlSchedInfo->schSlotValue, sizeof(SchSlotValue));
+                  /* Send LC schedule result to RLC */
+                  if((dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].pduPres == PDSCH_PDU) ||
+                        (dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].pduPres == BOTH))
+                     sendSchedRptToRlc(currDlSlot->dlInfo, dlSchedInfo->schSlotValue.dlMsgTime, ueIdx, schInfoIdx);
+               }
+            }
          }
       }
 
@@ -128,9 +136,9 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
  *  @param[in]  DlMsgAlloc  *msg4Alloc
  *  @return  void
  **/
-void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc)
+void fillMsg4Pdu(uint16_t cellId, DlMsgSchInfo *msg4SchInfo)
 {
-   uint8_t   ueIdx;
+   uint8_t   ueId = 0, ueIdx = 0;
    uint16_t  cellIdx;
    uint16_t  msg4TxPduLen;
    MacDlData msg4DlData;
@@ -141,8 +149,8 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc)
    memset(&msg4DlData, 0, sizeof(MacDlData));
    memset(&macCeData, 0, sizeof(MacCeInfo));
 
-   GET_UE_IDX(msg4Alloc->dlMsgInfo.crnti, ueIdx);
-   ueIdx = ueIdx -1;
+   GET_UE_ID(msg4SchInfo->dlMsgInfo.crnti, ueId);
+   ueIdx = ueId -1;
 
    if(macCb.macCell[cellIdx] == NULLP)
    {
@@ -181,17 +189,17 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc)
    /* storing msg4 Pdu in macDlSlot */
    if(macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu)
    {
-      msg4Alloc->dlMsgInfo.dlMsgPduLen = msg4TxPduLen;
-      MAC_ALLOC(msg4Alloc->dlMsgInfo.dlMsgPdu, msg4Alloc->dlMsgInfo.dlMsgPduLen);
-      if(msg4Alloc->dlMsgInfo.dlMsgPdu != NULLP)
+      msg4SchInfo->dlMsgInfo.dlMsgPduLen = msg4TxPduLen;
+      MAC_ALLOC(msg4SchInfo->dlMsgInfo.dlMsgPdu, msg4SchInfo->dlMsgInfo.dlMsgPduLen);
+      if(msg4SchInfo->dlMsgInfo.dlMsgPdu != NULLP)
       {
-         memcpy(msg4Alloc->dlMsgInfo.dlMsgPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \
-               msg4Alloc->dlMsgInfo.dlMsgPduLen);
+         memcpy(msg4SchInfo->dlMsgInfo.dlMsgPdu, macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4TxPdu, \
+               msg4SchInfo->dlMsgInfo.dlMsgPduLen);
       }
    }
    else
    {
-      DU_LOG("\nERROR  -->  MAC: Failed at macMuxPdu()");
+      DU_LOG("\nERROR  -->  MAC: Failed at fillMsg4Pdu()");
    }
 }
 
@@ -204,27 +212,37 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgAlloc *msg4Alloc)
  * 
  *      Build and Sends the Muxed Pdu to Lower MAC.
  *           
- *  @param[in]  SlotIndInfo    *slotInd
+ *  @param[in]  SlotTimingInfo    *slotInd
  *  @return  void
  **/
 
-void buildAndSendMuxPdu(SlotIndInfo currTimingInfo)
+void buildAndSendMuxPdu(SlotTimingInfo currTimingInfo)
 {
+   uint8_t   ueIdx;
+   uint8_t   schInfoIdx;
    uint16_t  cellIdx;
    MacDlSlot *currDlSlot = NULLP;
-   SlotIndInfo muxTimingInfo;
-   memset(&muxTimingInfo, 0, sizeof(SlotIndInfo));
+   SlotTimingInfo muxTimingInfo;
+   memset(&muxTimingInfo, 0, sizeof(SlotTimingInfo));
 
    GET_CELL_IDX(currTimingInfo.cellId, cellIdx);
 
    ADD_DELTA_TO_TIME(currTimingInfo, muxTimingInfo, PHY_DELTA_DL);
    currDlSlot = &macCb.macCell[cellIdx]->dlSlot[muxTimingInfo.slot];
-   if(currDlSlot->dlInfo.dlMsgAlloc)
+
+   for(ueIdx=0; ueIdx<MAX_NUM_UE; ueIdx++)
    {
-      if(currDlSlot->dlInfo.dlMsgAlloc->dlMsgInfo.isMsg4Pdu)
+      if(currDlSlot->dlInfo.dlMsgAlloc[ueIdx])
       {
-         fillMsg4Pdu(currTimingInfo.cellId, currDlSlot->dlInfo.dlMsgAlloc);
-         currDlSlot = NULLP;
+         for(schInfoIdx=0; schInfoIdx<currDlSlot->dlInfo.dlMsgAlloc[ueIdx]->numSchedInfo; schInfoIdx++)
+         {
+            if((currDlSlot->dlInfo.dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.isMsg4Pdu) &&
+                  ((currDlSlot->dlInfo.dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].pduPres == PDSCH_PDU) ||
+                   (currDlSlot->dlInfo.dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].pduPres == BOTH)))
+            {
+               fillMsg4Pdu(currTimingInfo.cellId, &currDlSlot->dlInfo.dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx]);
+            }
+         }
       }
    }
 }
@@ -238,12 +256,12 @@ void buildAndSendMuxPdu(SlotIndInfo currTimingInfo)
  * 
  *      This API is invoked by MAC to send slot ind to scheduler.
  *           
- *  @param[in]  SlotIndInfo    *slotInd
+ *  @param[in]  SlotTimingInfo    *slotInd
  *  @return  
  *      -# ROK 
  *      -# RFAILED 
  **/
-int sendSlotIndMacToSch(SlotIndInfo *slotInd)
+int sendSlotIndMacToSch(SlotTimingInfo *slotInd)
 {
    /* fill Pst structure to send to lwr_mac to MAC */
    Pst pst;
@@ -311,7 +329,7 @@ int sendCellUpIndMacToDuApp(uint16_t cellId)
  *         RFAILED - failure
  *
  * ****************************************************************/
-uint8_t macProcSlotInd(SlotIndInfo slotInd)
+uint8_t macProcSlotInd(SlotTimingInfo slotInd)
 {
    uint16_t  cellIdx = 0;
 
@@ -348,12 +366,12 @@ uint8_t macProcSlotInd(SlotIndInfo slotInd)
  *           
  *  @param[in]  Pst            *pst
  *  @param[in]  SuId           suId 
- *  @param[in]  SlotIndInfo    *slotInd
+ *  @param[in]  SlotTimingInfo    *slotInd
  *  @return  
  *      -# ROK 
  *      -# RFAILED 
  **/
-uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd)
+uint8_t fapiMacSlotInd(Pst *pst, SlotTimingInfo *slotInd)
 {
    uint8_t               ret = ROK;
    uint16_t              cellIdx;
@@ -380,7 +398,7 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd)
    if(ret != ROK)
    {
       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));
+      MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotTimingInfo));
       return ret;
    }
 
@@ -388,7 +406,7 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd)
    if(ret != ROK)
    {
       DU_LOG("\nERROR  -->  MAC : macProcSlotInd failed");
-      MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo));
+      MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotTimingInfo));
       return ret;
    }
 #endif
@@ -400,14 +418,14 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotIndInfo *slotInd)
       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));
+         MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotTimingInfo));
          return ret;
       }
    }
 
    /*stoping Task*/
    ODU_STOP_TASK(startTime, PID_MAC_TTI_IND);
-   MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotIndInfo));
+   MAC_FREE_SHRABL_BUF(pst->region, pst->pool, slotInd, sizeof(SlotTimingInfo));
 
 #ifdef INTEL_WLS_MEM
    lwrMacCb.phySlotIndCntr++;