[Epic-ID: ODUHIGH-406][Task-ID: ODUHIGH-447] PCCH Scheduling at SCH
[o-du/l2.git] / src / 5gnrmac / mac_slot_ind.c
index 1aa842d..321e350 100644 (file)
@@ -126,7 +126,53 @@ uint8_t MacProcDlAlloc(Pst *pst, DlSchedInfo *dlSchedInfo)
 }
 
 /**
- * @brief Forming anf filling the MUX Pdu
+ * @brief process DL Paging allocation from scheduler
+ *
+ * @details
+ *
+ *     Function : MacProcDlPageAlloc 
+ *      
+ *      This function copied dl Pag info in the mac slot info
+ *           
+ *  @param[in]  Pst            *pst
+ *  @param[in]  DL Paging allocation from scheduler
+ *  @return
+ *      -# ROK 
+ *      -# RFAILED 
+ **/
+uint8_t MacProcDlPageAlloc(Pst *pst, DlPageAlloc *dlPageAlloc)
+{
+   uint16_t  cellIdx = 0;
+   MacDlSlot *currDlSlot = NULLP;
+
+#ifdef CALL_FLOW_DEBUG_LOG
+   DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_DL_PAGING_ALLOC\n");
+#endif
+   if(dlPageAlloc != NULLP)
+   {
+      GET_CELL_IDX(dlPageAlloc->cellId, cellIdx);
+
+      currDlSlot = &macCb.macCell[cellIdx]->dlSlot[dlPageAlloc->dlPageTime.slot];
+      MAC_ALLOC(currDlSlot->pageAllocInfo, sizeof(DlPageAlloc));
+      if(currDlSlot->pageAllocInfo == NULLP)
+      {
+         DU_LOG("\nERROR  --> MAC : MacProcDlPageAlloc : Memory Allocation is failed!");
+         return RFAILED;
+      }
+      memcpy(currDlSlot->pageAllocInfo, dlPageAlloc, sizeof(DlPageAlloc));
+      currDlSlot->pageAllocInfo->pagePdcchCfg.dci.pdschCfg = \
+                                                             &currDlSlot->pageAllocInfo->pagePdschCfg;
+   }
+   else
+   {
+      DU_LOG("\nERROR  --> MAC : DL Paging Allocation is failed!");
+      return RFAILED;
+   }
+   return ROK;
+}
+
+/**
+ * @brief Forming and filling the MUX Pdu
  * @details
  *
  *     Function : fillMsg4Pdu
@@ -314,6 +360,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 +500,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*/