U8, U16, U32 data type changes
[o-du/l2.git] / src / 5gnrrlc / rlc_msg_hdl.c
index 0e296ce..e7085d0 100644 (file)
@@ -49,7 +49,7 @@
  *
  * @details
  *
- *    Function : fillRlcUlUeCfgRsp
+ *    Function : fillRlcUeCfgRsp
  *
  *    Functionality: 
  *     Fills RLC UL UE Cfg Rsp from RlcCRsp
  *  @params[in]  Pointer to RlcCfgCfm
  *               Pointer to RlcUeCfgRsp
  *
- *  @return void
+ *  @return ROK/RFAILED
  * 
  *****************************************************************/
 
-void fillRlcUlUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp)
+uint8_t fillRlcUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp)
 {
    uint8_t idx;
+   uint8_t ret = ROK;
  
    rlcCfgRsp->cellId = rlcCRsp->cellId;
    rlcCfgRsp->ueIdx  = rlcCRsp->ueId;
@@ -73,13 +74,17 @@ void fillRlcUlUeCfgRsp(RlcUeCfgRsp *rlcCfgRsp, RlcCfgCfmInfo *rlcCRsp)
       {
          rlcCfgRsp->result = RLC_DU_APP_RSP_OK;
         rlcCfgRsp->reason = rlcCRsp->entCfgCfm[idx].status.reason;
+        ret = ROK;
       }
       else
       {
          rlcCfgRsp->result = RLC_DU_APP_RSP_NOK;
         rlcCfgRsp->reason = rlcCRsp->entCfgCfm[idx].status.reason;
+        ret = RFAILED;
+        break;
       }
    }
+   return ret;
 }
 
 /*******************************************************************
@@ -124,13 +129,111 @@ void fillEntModeAndDir(uint8_t *entMode, uint8_t *direction, RlcMode rlcMode)
     break;
    }
 }
+
+/*******************************************************************
+ *
+ * @brief fills LC Cfgs to be Added in RLC
+ *
+ * @details
+ *
+ *    Function : fillLcCfg
+ *
+ *    Functionality:
+ *      fills LC Cfgs to be Added in RLC
+ *
+ * @params[in] 
+ *             RlcEntCfgInfo pointer
+ *             RlcBearerCfg pointer
+ *             Config Type 
+ * @return void
+ *
+ * ****************************************************************/
+void fillLcCfg(RlcEntCfgInfo *rlcUeCfg, RlcBearerCfg *duRlcUeCfg, uint8_t cfgType)
+{
+   uint8_t lChRbIdx = 0;
+
+   rlcUeCfg->rbId                  = duRlcUeCfg->rbId;
+   rlcUeCfg->rbType                = duRlcUeCfg->rbType;   // SRB or DRB
+   rlcUeCfg->lCh[lChRbIdx].lChId   = duRlcUeCfg->lcId;   
+   rlcUeCfg->lCh[lChRbIdx].type    = duRlcUeCfg->lcType;
+   fillEntModeAndDir(&rlcUeCfg->entMode, &rlcUeCfg->dir, duRlcUeCfg->rlcMode);
+   rlcUeCfg->cfgType               = cfgType;
+   switch(rlcUeCfg->entMode)
+   {
+
+      case CM_LTE_MODE_AM:
+         {
+            /* DL AM INFO */
+            rlcUeCfg->m.amInfo.dl.snLen       = duRlcUeCfg->u.amCfg->dlAmCfg.snLenDl; 
+            rlcUeCfg->m.amInfo.dl.pollRetxTmr = duRlcUeCfg->u.amCfg->dlAmCfg.pollRetxTmr;
+            rlcUeCfg->m.amInfo.dl.pollPdu     = duRlcUeCfg->u.amCfg->dlAmCfg.pollPdu; 
+            rlcUeCfg->m.amInfo.dl.pollByte    = duRlcUeCfg->u.amCfg->dlAmCfg.pollByte; 
+            rlcUeCfg->m.amInfo.dl.maxRetx     = duRlcUeCfg->u.amCfg->dlAmCfg.maxRetxTh;
+
+            /* UL AM INFO */
+            lChRbIdx++;   //lChRbIdx = 1, indicates UL AM
+            rlcUeCfg->lCh[lChRbIdx].lChId    = duRlcUeCfg->lcId;   
+            rlcUeCfg->lCh[lChRbIdx].type     = duRlcUeCfg->lcType;
+            rlcUeCfg->m.amInfo.ul.snLen      = duRlcUeCfg->u.amCfg->ulAmCfg.snLenUl; 
+            rlcUeCfg->m.amInfo.ul.staProhTmr = duRlcUeCfg->u.amCfg->ulAmCfg.statProhTmr;
+            rlcUeCfg->m.amInfo.ul.reOrdTmr   = duRlcUeCfg->u.amCfg->ulAmCfg.reAssemTmr;
+            break;
+         }
+      case CM_LTE_MODE_UM:
+         {
+            /* UL UM CONFIG */
+            rlcUeCfg->m.umInfo.ul.snLen    = duRlcUeCfg->u.umBiDirCfg->ulUmCfg.snLenUlUm; 
+            rlcUeCfg->m.umInfo.ul.reOrdTmr = duRlcUeCfg->u.umBiDirCfg->ulUmCfg.reAssemTmr;
+
+            /* DL UM CONFIG */
+            rlcUeCfg->m.umInfo.dl.snLen = duRlcUeCfg->u.umBiDirCfg->dlUmCfg.snLenDlUm; 
+            break;
+         }
+      default:
+         break;
+   }/* End of switch(entMode) */
+}
+
+/*******************************************************************
+ *
+ * @brief fills LC Cfgs to be Added in RLC
+ *
+ * @details
+ *
+ *    Function : fillRlcCfg
+ *
+ *    Functionality:
+ *      fills LC Cfgs to be Add/Mod/Del in RLC
+ *
+ * @params[in] 
+ *             RlcEntCfgInfo pointer
+ *             RlcBearerCfg pointer
+ * @return void
+ *
+ ******************************************************************/
+
+void fillRlcCfg(RlcCfgInfo *rlcUeCfg, RlcUeCfg *ueCfg)
+{
+   uint8_t lcIdx;
+   
+   rlcUeCfg->ueId    = ueCfg->ueIdx;
+   rlcUeCfg->cellId  = ueCfg->cellId;
+   rlcUeCfg->numEnt  = ueCfg->numLcs;
+   rlcUeCfg->transId = getTransId();
+
+   for(lcIdx = 0; lcIdx < rlcUeCfg->numEnt; lcIdx++)
+   {
+      fillLcCfg(&rlcUeCfg->entCfg[lcIdx], &ueCfg->rlcLcCfg[lcIdx], ueCfg->rlcLcCfg[lcIdx].configType);
+   }
+}
+
 /*******************************************************************
  *
  * @brief Handles Ue Create Request from DU APP
  *
  * @details
  *
- *    Function : RlcUlProcUeCreateReq
+ *    Function : RlcProcUeCreateReq
  *
  *    Functionality:
  *      Handles Ue create Request from DU APP
@@ -141,80 +244,32 @@ void fillEntModeAndDir(uint8_t *entMode, uint8_t *direction, RlcMode rlcMode)
  *         RFAILED - failure
  *
  * ****************************************************************/
-uint8_t RlcUlProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg)
+uint8_t RlcProcUeCreateReq(Pst *pst, RlcUeCfg *ueCfg)
 {
-   uint8_t idx;
    uint8_t ret = ROK;
-   uint8_t lChRbIdx;
    RlcCfgInfo *rlcUeCfg = NULLP;
 
    RlcCb *rlcUeCb = NULLP;
    rlcUeCb = RLC_GET_RLCCB(pst->dstInst);
    RLC_ALLOC(rlcUeCb, rlcUeCfg, sizeof(RlcCfgInfo));
-   if(rlcUeCfg)
+   if(rlcUeCfg == NULLP)
+   {
+      DU_LOG("\nRLC: Failed to allocate memory at RlcProcUeCreateReq()");
+      ret = RFAILED;
+   }
+   else
    {
       memset(rlcUeCfg, 0, sizeof(RlcCfgInfo));
-
-      rlcUeCfg->ueId    = ueCfg->ueIdx;
-      rlcUeCfg->cellId  = ueCfg->cellId;
-      rlcUeCfg->numEnt  = ueCfg->numLcs;
-      rlcUeCfg->transId = getTransId();
-      for(idx = 0; idx < ueCfg->numLcs; idx++)
-      {
-         lChRbIdx = 0;
-         rlcUeCfg->entCfg[idx].rbId           = ueCfg->rlcBearerCfg[idx].rbId;
-         rlcUeCfg->entCfg[idx].rbType         = ueCfg->rlcBearerCfg[idx].rbType;   // SRB or DRB
-         rlcUeCfg->entCfg[idx].lCh[lChRbIdx].lChId   = ueCfg->rlcBearerCfg[idx].lcId;   
-         rlcUeCfg->entCfg[idx].lCh[lChRbIdx].type    = ueCfg->rlcBearerCfg[idx].lcType;
-         fillEntModeAndDir(&rlcUeCfg->entCfg[idx].entMode, &rlcUeCfg->entCfg[idx].dir,\
-            ueCfg->rlcBearerCfg[idx].rlcMode);
-         rlcUeCfg->entCfg[idx].cfgType        = CKW_CFG_ADD;
-         switch(rlcUeCfg->entCfg[idx].entMode)
-         {
-
-            case CM_LTE_MODE_AM:
-            {
-               /* DL AM INFO */
-               rlcUeCfg->entCfg[idx].m.amInfo.dl.snLen = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.snLenDl; 
-               rlcUeCfg->entCfg[idx].m.amInfo.dl.pollRetxTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollRetxTmr;
-               rlcUeCfg->entCfg[idx].m.amInfo.dl.pollPdu = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollPdu; 
-               rlcUeCfg->entCfg[idx].m.amInfo.dl.pollByte = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.pollByte; 
-               rlcUeCfg->entCfg[idx].m.amInfo.dl.maxRetx = ueCfg->rlcBearerCfg[idx].u.amCfg.dlAmCfg.maxRetxTh;
-
-               /* UL AM INFO */
-              lChRbIdx++;   //lChRbIdx = 1, indicates UL AM
-               rlcUeCfg->entCfg[idx].lCh[lChRbIdx].lChId   = ueCfg->rlcBearerCfg[idx].lcId;   
-               rlcUeCfg->entCfg[idx].lCh[lChRbIdx].type    = ueCfg->rlcBearerCfg[idx].lcType;
-               rlcUeCfg->entCfg[idx].m.amInfo.ul.snLen = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.snLenUl; 
-               rlcUeCfg->entCfg[idx].m.amInfo.ul.staProhTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.statProhTmr;
-               rlcUeCfg->entCfg[idx].m.amInfo.ul.reOrdTmr = ueCfg->rlcBearerCfg[idx].u.amCfg.ulAmCfg.reAssemTmr;
-               break;
-            }
-            case CM_LTE_MODE_UM:
-            {
-               /* UL UM CONFIG */
-               rlcUeCfg->entCfg[idx].m.umInfo.ul.snLen = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.ulUmCfg.snLenUlUm; 
-               rlcUeCfg->entCfg[idx].m.umInfo.ul.reOrdTmr = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.ulUmCfg.reAssemTmr;
-
-               /* DL UM CONFIG */
-               rlcUeCfg->entCfg[idx].m.umInfo.dl.snLen = ueCfg->rlcBearerCfg[idx].u.umBiDirCfg.dlUmCfg.snLenDlUm; 
-               break;
-            }
-            default:
-               break;
-         }/* End of switch(entMode) */
-      }
+      fillRlcCfg(rlcUeCfg, ueCfg); 
       ret = RlcProcCfgReq(pst, rlcUeCfg);
-      }
-      else
-      {
-         DU_LOG("\nRLC: Failed to allocate memory ");
-         ret = RFAILED;
-      }
-      RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg));
-      return ret;
+      if(ret != ROK)
+         DU_LOG("\nRLC: Failed to configure Add/Mod/Del entities at RlcProcUeCreateReq()");
+
+   }
+   RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg));
+   return ret;
 }
+
 /*******************************************************************
 *
 * @brief filling the structure of rrc delivery msg info
@@ -565,6 +620,52 @@ uint8_t RlcProcSchedResultRpt(Pst *pst, RlcSchedResultRpt *schRep)
    return ret;
 }
 
+
+/*******************************************************************
+ *
+ * @brief Handles Ue Reconfig Request from DU APP
+ *
+ * @details
+ *
+ *    Function : RlcProcUeReconfigReq
+ *
+ *    Functionality:
+ *      Handles Ue Reconfig Request from DU APP
+ *
+ * @params[in] Post structure pointer
+ *             RlcUeCfg pointer 
+ * @return ROK     - success
+ *         RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t RlcProcUeReconfigReq(Pst *pst, RlcUeCfg *ueCfg)
+{
+   uint8_t ret = ROK;
+   RlcCfgInfo *rlcUeCfg = NULLP; //Seed code Rlc cfg struct
+   RlcCb *rlcUeCb = NULLP;
+    
+   DU_LOG("\nRLC: UE reconfig request received. CellID[%d] UEIDX[%d]",ueCfg->cellId, ueCfg->ueIdx);
+
+   rlcUeCb = RLC_GET_RLCCB(pst->dstInst);
+   RLC_ALLOC(rlcUeCb, rlcUeCfg, sizeof(RlcCfgInfo));
+   if(rlcUeCfg == NULLP)
+   {
+      DU_LOG("\nRLC: Failed to allocate memory at RlcProcUeReconfigReq()");
+      ret = RFAILED;
+   }
+   else
+   {
+      memset(rlcUeCfg, 0, sizeof(RlcCfgInfo));
+      fillRlcCfg(rlcUeCfg, ueCfg);
+      ret = RlcProcCfgReq(pst, rlcUeCfg);
+      if(ret != ROK)
+         DU_LOG("\nRLC: Failed to configure Add/Mod/Del entities at RlcProcUeReconfigReq()");
+   }
+   
+   RLC_FREE_SHRABL_BUF(pst->region, pst->pool, ueCfg, sizeof(RlcUeCfg));
+   return ret;
+}
+
 /**********************************************************************
          End of file
 **********************************************************************/