[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-428]Slot Indication at DUAPP
[o-du/l2.git] / src / 5gnrmac / mac_slot_ind.c
index 2968fa5..3a3d008 100644 (file)
@@ -55,8 +55,8 @@ MacSchSlotIndFunc macSchSlotIndOpts[] =
 uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
 {
    uint8_t   schInfoIdx = 0;
-   uint8_t   ueIdx;
-   uint16_t  cellIdx;
+   uint8_t   ueId = 0, ueIdx = 0;
+   uint16_t  cellIdx = 0;
    MacDlSlot *currDlSlot = NULLP;
 
 #ifdef CALL_FLOW_DEBUG_LOG
@@ -98,8 +98,8 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
             {
                if(dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.isMsg4Pdu)
                {
-                  GET_UE_IDX(dlSchedInfo->dlMsgAlloc[ueIdx]->dlMsgSchedInfo[schInfoIdx].dlMsgInfo.crnti, ueIdx);
-                  ueIdx = ueIdx -1;
+                  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;
                }
@@ -138,7 +138,7 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
  **/
 void fillMsg4Pdu(uint16_t cellId, DlMsgSchInfo *msg4SchInfo)
 {
-   uint8_t   ueIdx;
+   uint8_t   ueId = 0, ueIdx = 0;
    uint16_t  cellIdx;
    uint16_t  msg4TxPduLen;
    MacDlData msg4DlData;
@@ -149,8 +149,8 @@ void fillMsg4Pdu(uint16_t cellId, DlMsgSchInfo *msg4SchInfo)
    memset(&msg4DlData, 0, sizeof(MacDlData));
    memset(&macCeData, 0, sizeof(MacCeInfo));
 
-   GET_UE_IDX(msg4SchInfo->dlMsgInfo.crnti, ueIdx);
-   ueIdx = ueIdx -1;
+   GET_UE_ID(msg4SchInfo->dlMsgInfo.crnti, ueId);
+   ueIdx = ueId -1;
 
    if(macCb.macCell[cellIdx] == NULLP)
    {
@@ -314,6 +314,49 @@ int sendCellUpIndMacToDuApp(uint16_t cellId)
    return ret;
 } /* sendCellUpIndMacToDuApp */
 
+/*******************************************************************
+ *
+ * @brief Send slot indication to DU APP
+ *
+ * @details
+ *
+ *    Function : sendSlotIndToDuApp
+ *
+ *    Functionality:
+ *       Send cell up indication to DU APP
+ *
+ * @params[in] Cell Up indication info 
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t sendSlotIndToDuApp(SlotTimingInfo *slotInd)
+{
+   Pst pst;
+   uint16_t ret;
+   SlotTimingInfo *slotIndInfo;
+
+   /*  Allocate sharable memory */
+   MAC_ALLOC_SHRABL_BUF(slotIndInfo, sizeof(SlotTimingInfo));
+   if(!slotIndInfo)
+   {
+      DU_LOG("\nERROR  -->  MAC : Memory allocation failed for slot indication");
+      return RFAILED;
+   }
+   memcpy(slotIndInfo, slotInd,sizeof(SlotTimingInfo));
+
+   /* Fill Pst */
+   FILL_PST_MAC_TO_DUAPP(pst, EVENT_MAC_SLOT_IND);
+
+   ret = MacDuAppSlotInd(&pst, slotIndInfo);
+   if(ret != ROK)
+   {
+      DU_LOG("\nERROR  -->  MAC: Failed to send slot up indication to DU APP");
+      MAC_FREE_SHRABL_BUF(MAC_MEM_REGION, MAC_POOL, slotIndInfo, sizeof(SlotTimingInfo));
+   }
+
+   return ret;
+}
 /*******************************************************************
  *
  * @brief Process slot indication at MAC
@@ -411,16 +454,25 @@ uint8_t fapiMacSlotInd(Pst *pst, SlotTimingInfo *slotInd)
    }
 #endif
 
-   /* send slot indication to du app */
+   /*First Slot Ind is for CellUp. Any other Slot, will be notified to DUAPP as
+    * SLOT_IND*/
    if(gSlotCount == 1)   
    {
+      /* send cell up indication to du app */
       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(SlotTimingInfo));
-         return ret;
-      }
+
+   }
+   else
+   {
+      /* send slot indication to du app */
+      ret = sendSlotIndToDuApp(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(SlotTimingInfo));
+      return ret;
    }
 
    /*stoping Task*/