Renaming GET_UE_IDX to GET_UE_ID in 5gnrmac [Issue-ID: ODUHIGH-401]
[o-du/l2.git] / src / 5gnrmac / mac_msg_hdl.c
index af04edf..66a55b0 100644 (file)
@@ -69,6 +69,21 @@ MacSchSrUciIndFunc macSchSrUciIndOpts[]=
    packMacSchSrUciInd
 };
 
+/* Function pointer for sending Slice cfg  ind from MAC to SCH */
+MacSchSliceCfgReqFunc macSchSliceCfgReqOpts[]=
+{
+   packMacSchSliceCfgReq,
+   MacSchSliceCfgReq,
+   packMacSchSliceCfgReq
+};
+
+/* Function pointer for sending Slice cfg  ind from MAC to SCH */
+MacSchSliceReCfgReqFunc macSchSliceReCfgReqOpts[]=
+{
+   packMacSchSliceReCfgReq,
+   MacSchSliceReCfgReq,
+   packMacSchSliceReCfgReq
+};
 /*******************************************************************
  *
  * @brief Sends DL BO Info to SCH
@@ -209,7 +224,6 @@ uint8_t MacProcRlcDlData(Pst* pstInfo, RlcData *dlData)
    uint8_t   ueId  = 0;
    uint8_t   lcIdx = 0;
    uint8_t   *txPdu = NULLP;
-   uint8_t   pdschSlot = 0;
    uint8_t   schInfoIdx = 0 ;
    uint16_t  cellIdx = 0, txPduLen = 0;
    MacDlData macDlData;
@@ -220,7 +234,7 @@ uint8_t MacProcRlcDlData(Pst* pstInfo, RlcData *dlData)
    DU_LOG("\nDEBUG  -->  MAC: Received DL data for sfn=%d slot=%d numPdu= %d", \
       dlData->slotInfo.sfn, dlData->slotInfo.slot, dlData->numPdu);
 
-   GET_UE_IDX(dlData->rnti, ueId);   
+   GET_UE_ID(dlData->rnti, ueId);   
 
    /* Copy the pdus to be muxed into mac Dl data */
    macDlData.ueId = ueId;
@@ -524,7 +538,7 @@ uint8_t MacProcCellStop(Pst *pst, OduCellId  *cellId)
  * ****************************************************************/
 uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo)
 {
-   uint8_t      ueIdx = 0;
+   uint8_t      ueId = 0, ueIdx = 0;
    uint16_t     cellIdx;
    uint16_t     idx;
    DlRlcBoInfo  dlBoInfo;
@@ -544,8 +558,8 @@ uint8_t MacProcDlCcchInd(Pst *pst, DlCcchIndInfo *dlCcchIndInfo)
       dlBoInfo.dataVolume = (dlCcchIndInfo->dlCcchMsgLen + 3) + (MAX_CRI_SIZE + 1);
 
       /* storing Msg4 Pdu in raCb */
-      GET_UE_IDX(dlBoInfo.crnti, ueIdx);
-      ueIdx = ueIdx -1;
+      GET_UE_ID(dlBoInfo.crnti, ueId);
+      ueIdx = ueId -1;
       if(macCb.macCell[cellIdx]->macRaCb[ueIdx].crnti == dlCcchIndInfo->crnti)
       {
         macCb.macCell[cellIdx]->macRaCb[ueIdx].msg4PduLen = dlCcchIndInfo->dlCcchMsgLen;
@@ -634,6 +648,8 @@ uint8_t macProcUlCcchInd(uint16_t cellId, uint16_t crnti, uint16_t rrcContSize,
  *             lcg ID
  *             buffer size
  *
+ * @return ROK     - success
+ *         RFAILED - failure
  *
  * ****************************************************************/
 uint8_t macProcShortBsr(uint16_t cellId, uint16_t crnti, uint8_t lcgId, uint32_t bufferSize)
@@ -655,6 +671,48 @@ uint8_t macProcShortBsr(uint16_t cellId, uint16_t crnti, uint8_t lcgId, uint32_t
    return(*macSchBsrOpts[pst.selector])(&pst, &bsrInd);
 }
 
+/*******************************************************************
+ *
+ * @brief Processes received short BSR
+ *
+ * @details
+ *
+ *    Function : macProcShortBsr
+ *
+ *    Functionality:
+ *        MAC sends Short BSR to SCH
+ *
+ * @params[in] cell ID
+ *             crnti
+ *             lcg ID
+ *             buffer size
+ *
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t macProcLongBsr(uint16_t cellId, uint16_t crnti,uint8_t numLcg,\
+                         DataVolInfo dataVolInfo[MAX_NUM_LOGICAL_CHANNEL_GROUPS])
+{
+   Pst                  pst;
+   UlBufferStatusRptInd bsrInd;
+   uint8_t lcgIdx = 0;
+
+   memset(&pst, 0, sizeof(Pst));
+   memset(&bsrInd, 0, sizeof(UlBufferStatusRptInd));
+
+   bsrInd.cellId                 = cellId;
+   bsrInd.crnti                  = crnti;
+   bsrInd.bsrType                = LONG_BSR;
+   bsrInd.numLcg                 = numLcg; 
+
+   for(lcgIdx = 0; lcgIdx < numLcg; lcgIdx++)
+      memcpy(&(bsrInd.dataVolInfo[lcgIdx]), &(dataVolInfo[lcgIdx]), sizeof(DataVolInfo));
+
+   FILL_PST_MAC_TO_SCH(pst, EVENT_LONG_BSR);
+   return(*macSchBsrOpts[pst.selector])(&pst, &bsrInd);
+}
+
 /*******************************************************************
  *
  * @brief Builds and send SR UCI Indication to SCH
@@ -755,6 +813,161 @@ uint8_t FapiMacUciInd(Pst *pst, UciInd *macUciInd)
    return ret;
 }
 
+/*******************************************************************
+ *
+ * @brief fill Slice Cfg Request info in shared structre
+ * 
+ * @details
+ *
+ *    Function : fillSliceCfgInfo 
+ *
+ *    Functionality:
+ *       fill Slice Cfg Request info in shared structre
+ *
+ * @params[in] SchSliceCfgReq *schSliceCfgReq 
+ *             MacSliceCfgReq *macSliceCfgReq;
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ **********************************************************************/
+ uint8_t fillSliceCfgInfo(SchSliceCfgReq *schSliceCfgReq, MacSliceCfgReq *macSliceCfgReq)
+ {
+    uint8_t cfgIdx = 0;
+    
+    if(macSliceCfgReq->listOfSliceCfg)
+    {
+       schSliceCfgReq->numOfConfiguredSlice =  macSliceCfgReq->numOfConfiguredSlice;
+       MAC_ALLOC(schSliceCfgReq->listOfConfirguration, schSliceCfgReq->numOfConfiguredSlice *sizeof(SchRrmPolicyOfSlice*));
+       if(schSliceCfgReq->listOfConfirguration == NULLP)
+       {
+          DU_LOG("\nERROR  -->  MAC : Memory allocation failed in fillSliceCfgInfo");
+          return RFAILED;
+       }
+       for(cfgIdx = 0; cfgIdx<schSliceCfgReq->numOfConfiguredSlice; cfgIdx++)
+       {
+          MAC_ALLOC(schSliceCfgReq->listOfConfirguration[cfgIdx], sizeof(SchRrmPolicyOfSlice));
+          if(schSliceCfgReq->listOfConfirguration[cfgIdx] == NULLP)
+          {
+             DU_LOG("\nERROR  -->  MAC : Memory allocation failed in fillSliceCfgInfo");
+             return RFAILED;
+          }
+          
+          memcpy(&schSliceCfgReq->listOfConfirguration[cfgIdx]->snssai, &macSliceCfgReq->listOfSliceCfg[cfgIdx]->snssai, sizeof(Snssai));
+
+          if(macSliceCfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio)
+          {
+             MAC_ALLOC(schSliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo, sizeof(SchRrmPolicyRatio));
+             if(schSliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo == NULLP)
+             {
+                DU_LOG("\nERROR  -->  MAC : Memory allocation failed in fillSliceCfgInfo");
+                return RFAILED;
+             }
+             schSliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo->policyMaxRatio = macSliceCfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyMaxRatio;
+             schSliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo->policyMinRatio = macSliceCfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyMinRatio;
+             schSliceCfgReq->listOfConfirguration[cfgIdx]->rrmPolicyRatioInfo->policyDedicatedRatio = macSliceCfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio->policyDedicatedRatio;
+          }
+       }
+    }
+    return ROK;
+ }
+/*******************************************************************
+ *
+ * @brief Processes Slice Cfg Request recived from DU
+ *
+ * @details
+ *
+ *    Function : MacProcSliceCfgReq 
+ *
+ *    Functionality:
+ *       Processes Processes Slice Cfg Request recived from DU
+ *
+ * @params[in] Post Structure Pointer
+ *             MacSliceCfgReq *macSliceCfgReq;
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ **********************************************************************/
+uint8_t MacProcSliceCfgReq(Pst *pst, MacSliceCfgReq *macSliceCfgReq)
+{
+   uint8_t ret = ROK;
+   Pst schPst;
+   SchSliceCfgReq *schSliceCfgReq;
+
+   DU_LOG("\nINFO  -->  MAC : Received Slice Cfg request from DU APP");
+   if(macSliceCfgReq)
+   {
+      MAC_ALLOC(schSliceCfgReq, sizeof(SchSliceCfgReq));
+      if(schSliceCfgReq == NULLP)
+      {
+         DU_LOG("\nERROR -->  MAC : Memory allocation failed in MacProcSliceCfgReq");
+         ret = RFAILED;
+      }
+      else
+      {
+         if(fillSliceCfgInfo(schSliceCfgReq, macSliceCfgReq) == ROK)
+         {
+            FILL_PST_MAC_TO_SCH(schPst, EVENT_SLICE_CFG_REQ_TO_SCH);
+            ret = (*macSchSliceCfgReqOpts[schPst.selector])(&schPst, schSliceCfgReq);
+         }
+      }
+      freeMacSliceCfgReq(macSliceCfgReq, pst); 
+   }
+   else
+   {
+      DU_LOG("\nINFO  -->  MAC : Received MacSliceCfgReq is NULL");
+   }
+   return ret;
+}
+
+/*******************************************************************
+ *
+ * @brief Processes Slice ReCfg Request recived from DU
+ *
+ * @details
+ *
+ *    Function : MacProcSliceReCfgReq 
+ *
+ *    Functionality:
+ *       Processes Processes Slice ReCfg Request recived from DU
+ *
+ * @params[in] Post Structure Pointer
+ *             MacSliceCfgReq *macSliceReCfgReq;
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ **********************************************************************/
+uint8_t MacProcSliceReCfgReq(Pst *pst, MacSliceCfgReq *macSliceReCfgReq)
+{
+   uint8_t ret = ROK;
+   Pst schPst;
+   SchSliceCfgReq *schSliceReCfgReq;
+
+   DU_LOG("\nINFO  -->  MAC : Received Slice ReCfg request from DU APP");
+   if(macSliceReCfgReq)
+   {
+      MAC_ALLOC(schSliceReCfgReq, sizeof(SchSliceCfgReq));
+      if(schSliceReCfgReq == NULLP)
+      {
+         DU_LOG("\nERROR -->  MAC : Memory allocation failed in MacProcSliceReCfgReq");
+         ret = RFAILED;
+      }
+      else
+      {
+         if(fillSliceCfgInfo(schSliceReCfgReq, macSliceReCfgReq) == ROK)
+         {
+            FILL_PST_MAC_TO_SCH(schPst, EVENT_SLICE_RECFG_REQ_TO_SCH);
+            ret = (*macSchSliceReCfgReqOpts[schPst.selector])(&schPst, schSliceReCfgReq);
+         }
+
+      }
+      freeMacSliceCfgReq(macSliceReCfgReq, pst);
+   }
+   else
+   {
+      DU_LOG("\nINFO  -->  MAC : Received MacSliceCfgReq is NULL");
+   }
+   return ret;
+}
 
 /**********************************************************************
   End of file