JIRA ID ODUHIGH193: Allocation and deallocation of MaceCellCfg sharable buffer
[o-du/l2.git] / src / 5gnrmac / rg_lmm.c
index 5c64f03..d7e6e1b 100755 (executable)
@@ -38,16 +38,7 @@ static int RLOG_FILE_ID=220;
 static int RLOG_MODULE_ID=4096;
 
 /* header include files (.h) */
-#include "envopt.h"        /* environment options */
-#include "envdep.h"        /* environment dependent */
-#include "envind.h"        /* environment independent */
-#include "gen.h"           /* general */
-#include "ssi.h"           /* system services */
-#include "cm_tkns.h"       /* Common Token Defines */
-#include "cm_llist.h"      /* Common Link List Defines */
-#include "cm_hash.h"       /* Common Hash List Defines */
-#include "cm_mblk.h"       /* common memory link list library */
-#include "cm_lte.h"        /* Common LTE Defines */
+#include "common_def.h"
 #include "rg_env.h"        /* MAC Environment Defines */
 #include "crg.h"           /* CRG Interface defines */
 #include "rgu.h"           /* RGU Interface defines */
@@ -60,15 +51,6 @@ static int RLOG_MODULE_ID=4096;
 #include "du_log.h"
 
 /* header/extern include files (.x) */
-#include "gen.x"           /* general */
-#include "ssi.x"           /* system services */
-#include "cm5.x"           /* system services */
-#include "cm_tkns.x"       /* Common Token Definitions */
-#include "cm_llist.x"      /* Common Link List Definitions */
-#include "cm_lib.x"        /* Common Library Definitions */
-#include "cm_hash.x"       /* Common Hash List Definitions */
-#include "cm_mblk.x"       /* common memory link list library */
-#include "cm_lte.x"        /* Common LTE Defines */
 #include "crg.x"           /* CRG Interface includes */
 #include "rgu.x"           /* RGU Interface includes */
 #include "tfu.x"           /* RGU Interface includes */
@@ -77,15 +59,16 @@ static int RLOG_MODULE_ID=4096;
 #include "lrg.x"           /* LRG Interface includes */
 #include "rgr.x"           /* LRG Interface includes */
 #include "du_app_mac_inf.h"
-#include "mac_sch_interface.h"
 #include "rg.x"            /* MAC includes */
 #ifdef SS_DIAG
 #include "ss_diag.h"        /* Common log file */
 #endif
 #include "ss_rbuf.h"
 #include "ss_rbuf.x"
-
 #include "lwr_mac.h"         /* MAC CL defines */
+#include "mac.h"
+#include "lwr_mac_phy.h"
+#include "lwr_mac_fsm.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -97,6 +80,9 @@ EXTERN Void rgGetSId ARGS((SystemId *s));
 
 /* Public variable declaration */
 ClCb   clGlobalCp;
+extern MacCb  macCb;
+
+int MacSchCellCfgReq(Pst *pst,MacCellCfg *macCellCfg);
 
 /* forward references */
 PRIVATE U16 rgLMMGenCfg ARGS((
@@ -132,7 +118,7 @@ RgMngmt       *cfm,
 Pst           *cfmPst
 ));
 
-extern U16 packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+extern int packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
 
 packMacCellCfgConfirm packMacCellCfmOpts[] =
 {
@@ -246,6 +232,9 @@ Reason reason;         /* reason */
    /* Initialize Scheduler as well */
    schActvInit(ENTRG, (DEFAULT_CELLS + SCH_INST_START), DFLT_REGION, PWR_UP);
 
+   /* Initialize lower mac */
+   lwrMacInit();
+
    RETVALUE(ROK);
 
 } /* rgActvInit */
@@ -779,8 +768,8 @@ Elmnt sapType;            /* Sap Type */
    {   
       case STRGUSAP:
          if ((cfg->s.rguSap.spId > LRG_MAX_RGU_SAPS) &&
-             (cfg->s.rguSap.selector != RGU_SEL_TC) &&
-             (cfg->s.rguSap.selector != RGU_SEL_LC))
+             (cfg->s.rguSap.selector != ODU_SELECTOR_TC) &&
+             (cfg->s.rguSap.selector != ODU_SELECTOR_LC))
          {
             ret = LCM_REASON_INVALID_PAR_VAL;
             RLOG0(L_ERROR, "unsupported Selector value for RGU");
@@ -810,8 +799,8 @@ Elmnt sapType;            /* Sap Type */
           * there is cfg request with sap is 1*/
          break;
       case STCRGSAP:
-         if ((cfg->s.crgSap.selector != CRG_SEL_TC) &&
-             (cfg->s.crgSap.selector != CRG_SEL_LC))
+         if ((cfg->s.crgSap.selector != ODU_SELECTOR_TC) &&
+             (cfg->s.crgSap.selector != ODU_SELECTOR_LC))
          {
             ret = LCM_REASON_INVALID_PAR_VAL;
             RLOG0(L_ERROR, "unsupported Selector value for CRG");
@@ -840,8 +829,8 @@ Elmnt sapType;            /* Sap Type */
          break;
       case STTFUSAP:
 #ifndef CL_MAC_LWLC 
-         if ((cfg->s.tfuSap.selector != TFU_SEL_TC) &&
-             (cfg->s.tfuSap.selector != TFU_SEL_LC))
+         if ((cfg->s.tfuSap.selector != ODU_SELECTOR_TC) &&
+             (cfg->s.tfuSap.selector != ODU_SELECTOR_LC))
          {
             ret = LCM_REASON_INVALID_PAR_VAL;
             RLOG0(L_ERROR, "unsupported Selector value for TFU");
@@ -919,8 +908,8 @@ RgCfg *cfg;            /* Configuaration information */
    {
       RETVALUE(LCM_REASON_INVALID_MSGTYPE);
    }
-   if ((cfg->s.genCfg.lmPst.selector != LRG_SEL_TC) &&
-       (cfg->s.genCfg.lmPst.selector != LRG_SEL_LC))
+   if ((cfg->s.genCfg.lmPst.selector != ODU_SELECTOR_TC) &&
+       (cfg->s.genCfg.lmPst.selector != ODU_SELECTOR_LC))
    {
       RLOG0(L_ERROR, "unsupported Selector value for RGU");
       RETVALUE(LCM_REASON_INVALID_PAR_VAL);
@@ -937,6 +926,9 @@ RgCfg *cfg;            /* Configuaration information */
    rgCb[inst].rgInit.region = cfg->s.genCfg.mem.region;
    rgCb[inst].rgInit.pool = cfg->s.genCfg.mem.pool;
    rgCb[inst].genCfg.tmrRes = cfg->s.genCfg.tmrRes;
+
+   macCb.macInst = rgCb[inst].rgInit.inst;
+
    /* Initialize SAP States */
    rgCb[inst].crgSap.sapSta.sapState = LRG_NOT_CFG;
 
@@ -1981,13 +1973,13 @@ Inst    inst;
  *      -# ROK
  **/
 #ifdef ANSI
-PUBLIC S16 MacSchGenCfgReq
+PUBLIC int MacSchGenCfgReq
 (
 Pst      *pst,    /* post structure  */
 RgMngmt  *cfg     /* config structure  */
 )
 #else
-PUBLIC S16 MacSchGenCfgReq(pst, cfg)
+PUBLIC int MacSchGenCfgReq(pst, cfg)
 Pst      *pst;    /* post structure  */
 RgMngmt  *cfg;    /* config structure  */
 #endif    
@@ -2030,7 +2022,7 @@ RgMngmt  *cfm;    /* config confirm structure  */
        pst->dstEnt = ENTDUAPP;
        pst->dstInst = 0;
        pst->srcInst = 0;
-       pst->selector = MAC_SCH_LC_SELECTOR
+       pst->selector = ODU_SELECTOR_LC
    RgMiLrgSchCfgCfm(pst, cfm);
    
    RETVALUE(ROK);
@@ -2068,7 +2060,7 @@ Pst           *cfmPst
    cfmPst->dstInst   = 0;
    cfmPst->dstProcId = cfmPst->srcProcId;
 
-   cfmPst->selector  = LRG_SEL_LC;
+   cfmPst->selector  = ODU_SELECTOR_LC;
    cfmPst->prior     = reqPst->prior;
    cfmPst->route     = reqPst->route;
    cfmPst->region    = reqPst->region;
@@ -2101,8 +2093,9 @@ int MacHdlCellCfgReq
 )
 {
    Pst cfmPst;
-   int ret = ROK;
+   uint16_t ret = ROK;
    RgCellCb      *cellCb;
+       MacCellCb     *macCellCb = NULLP;
    Inst inst = pst->dstInst;
 
    cmMemset((U8 *)&cfmPst, 0, sizeof(Pst));
@@ -2117,16 +2110,48 @@ int MacHdlCellCfgReq
    memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg));
    rgCb[inst].cell = cellCb;
 
-   /* Send cell cfg to scheduler */
+   MAC_ALLOC(macCellCb,sizeof(MacCellCb));
+       if(macCellCb == NULLP)
+       {
+      DU_LOG("\nMAC : macCellCb is NULL at handling of macCellCfg\n");
+      return RFAILED;
+   }
+       memset(macCellCb, 0, sizeof(MacCellCb));
+   macCb.macCell = macCellCb;
+   macCb.macCell->cellId = macCellCfg->cellId;
+   
+       MAC_ALLOC(cellCb->macCellCfg.sib1Cfg.sib1Pdu,  macCellCfg->sib1Cfg.sib1PduLen);
+       if(cellCb->macCellCfg.sib1Cfg.sib1Pdu == NULLP)
+       {
+          DU_LOG("\nMAC : macCellCb is NULL at handling of sib1Pdu of macCellCfg\n");
+          return RFAILED;
+       }
+       memcpy(cellCb->macCellCfg.sib1Cfg.sib1Pdu, macCellCfg->sib1Cfg.sib1Pdu, macCellCfg->sib1Cfg.sib1PduLen);
+       
+       /* Send cell cfg to scheduler */
    ret = MacSchCellCfgReq(pst, macCellCfg);
        if(ret != ROK)
        {
                MacCellCfgCfm macCellCfgCfm;
                macCellCfgCfm.rsp = RSP_NOK;
-               macCellCfgCfm.transId = macCellCfg->transId;
+               macCellCfgCfm.cellId = macCellCfg->cellId;
                macCellCfgFillCfmPst(pst,&cfmPst);
                ret = (*packMacCellCfmOpts[cfmPst.selector])(&cfmPst,&macCellCfgCfm);
        }
+   else
+       {
+          if(macCellCfg->prachCfg.fdm[0].numUnusedRootSeq != 0)
+          {
+              MAC_FREE_SHRABL_BUF(pst->region, pst->pool, macCellCfg->prachCfg.fdm[0].unsuedRootSeq,
+              macCellCfg->prachCfg.fdm[0].numUnusedRootSeq* sizeof(uint8_t));
+          }
+          MAC_FREE_SHRABL_BUF(pst->region, pst->pool, macCellCfg->sib1Cfg.sib1Pdu, macCellCfg->sib1Cfg.sib1PduLen);
+          MAC_FREE_SHRABL_BUF(pst->region, pst->pool, macCellCfg ,sizeof(MacCellCfg));
+       }
+
+#ifdef INTEL_WLS
+   LwrMacEnqueueWlsBlock();
+#endif
    return ret;
 } /* end of MacHdlCellCfgReq */
 
@@ -2159,28 +2184,137 @@ int MacSchCellCfgReq
        schCellCfg.phyCellId = macCellCfg->phyCellId;
        schCellCfg.bandwidth = macCellCfg->dlCarrCfg.bw;
        schCellCfg.dupMode = macCellCfg->dupType;
-       schCellCfg.ssbPbchPwr = macCellCfg->ssbCfg.ssbPbchPwr;
-       schCellCfg.scsCommon = macCellCfg->ssbCfg.scsCmn;
-       schCellCfg.ssbOffsetPointA = macCellCfg->ssbCfg.ssbOffsetPointA;
-       schCellCfg.ssbPeriod = macCellCfg->ssbCfg.ssbPeriod;
-       schCellCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset;
+
+       /* fill ssb scheduler parameters */
+       schCellCfg.ssbSchCfg.ssbPbchPwr = macCellCfg->ssbCfg.ssbPbchPwr;
+       schCellCfg.ssbSchCfg.scsCommon = macCellCfg->ssbCfg.scsCmn;
+       schCellCfg.ssbSchCfg.ssbOffsetPointA = macCellCfg->ssbCfg.ssbOffsetPointA;
+       schCellCfg.ssbSchCfg.ssbPeriod = macCellCfg->ssbCfg.ssbPeriod;
+       schCellCfg.ssbSchCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset;
        for(uint8_t idx=0; idx<SSB_MASK_SIZE; idx++)
        {
-      schCellCfg.nSSBMask[idx] = macCellCfg->ssbCfg.ssbMask[idx]; 
+      schCellCfg.ssbSchCfg.nSSBMask[idx] = macCellCfg->ssbCfg.ssbMask[idx]; 
        }
+
+       /* fill SIB1 scheduler parameters */
+       schCellCfg.sib1SchCfg.sib1PduLen = macCellCfg->sib1Cfg.sib1PduLen; 
+       schCellCfg.sib1SchCfg.sib1NewTxPeriod = macCellCfg->sib1Cfg.sib1NewTxPeriod; 
+       schCellCfg.sib1SchCfg.sib1RepetitionPeriod = macCellCfg->sib1Cfg.sib1RepetitionPeriod; 
+       schCellCfg.sib1SchCfg.coresetZeroIndex = macCellCfg->sib1Cfg.coresetZeroIndex; 
+       schCellCfg.sib1SchCfg.searchSpaceZeroIndex = macCellCfg->sib1Cfg.searchSpaceZeroIndex; 
+       schCellCfg.sib1SchCfg.sib1Mcs = macCellCfg->sib1Cfg.sib1Mcs; 
+
+       /* fill RACH config params */
+       schCellCfg.schRachCfg.prachCfgIdx = macCellCfg->prachCfg.prachCfgIdx;
+       schCellCfg.schRachCfg.prachSubcSpacing = \
+          macCellCfg->prachCfg.prachSubcSpacing;
+       schCellCfg.schRachCfg.msg1FreqStart = macCellCfg->prachCfg.msg1FreqStart;
+       schCellCfg.schRachCfg.msg1Fdm       = macCellCfg->prachCfg.msg1Fdm;
+       schCellCfg.schRachCfg.rootSeqLen    = macCellCfg->prachCfg.rootSeqLen;
+       schCellCfg.schRachCfg.rootSeqIdx    = macCellCfg->prachCfg.fdm[0].rootSeqIdx;
+       schCellCfg.schRachCfg.numRootSeq    = macCellCfg->prachCfg.fdm[0].numRootSeq;
+       schCellCfg.schRachCfg.k1            = macCellCfg->prachCfg.fdm[0].k1;
+       schCellCfg.schRachCfg.ssbPerRach    = macCellCfg->prachCfg.ssbPerRach;
+       schCellCfg.schRachCfg.prachMultCarrBand = \
+          macCellCfg->prachCfg.prachMultCarrBand;
+       schCellCfg.schRachCfg.raContResTmr  = macCellCfg->prachCfg.raContResTmr;
+       schCellCfg.schRachCfg.rsrpThreshSsb = macCellCfg->prachCfg.rsrpThreshSsb;
+       schCellCfg.schRachCfg.raRspWindow   = macCellCfg->prachCfg.raRspWindow;
+
+   /* fill initial DL BWP */
+       schCellCfg.schInitialDlBwp.bwp.freqAlloc.startPrb = macCellCfg->initialDlBwp.bwp.firstPrb;
+       schCellCfg.schInitialDlBwp.bwp.freqAlloc.numPrb = macCellCfg->initialDlBwp.bwp.numPrb;
+   schCellCfg.schInitialDlBwp.bwp.scs = macCellCfg->initialDlBwp.bwp.scs;
+   schCellCfg.schInitialDlBwp.bwp.cyclicPrefix = macCellCfg->initialDlBwp.bwp.cyclicPrefix;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId =
+          macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.coresetId =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.coresetId;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.duration =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.duration;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1 =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2 =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4 =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8 =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8;
+   schCellCfg.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16 =
+      macCellCfg->initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16;
+   schCellCfg.schInitialDlBwp.pdschCommon.k0 = macCellCfg->initialDlBwp.pdschCommon.k0;
+   schCellCfg.schInitialDlBwp.pdschCommon.mappingType =
+      macCellCfg->initialDlBwp.pdschCommon.mappingType;
+   schCellCfg.schInitialDlBwp.pdschCommon.startSymbol =
+      macCellCfg->initialDlBwp.pdschCommon.startSymbol;
+   schCellCfg.schInitialDlBwp.pdschCommon.lengthSymbol =
+      macCellCfg->initialDlBwp.pdschCommon.lengthSymbol;
+
+   /* fill initial UL BWP */
+       schCellCfg.schInitialUlBwp.bwp.freqAlloc.startPrb = macCellCfg->initialUlBwp.bwp.firstPrb;
+       schCellCfg.schInitialUlBwp.bwp.freqAlloc.numPrb = macCellCfg->initialUlBwp.bwp.numPrb;
+   schCellCfg.schInitialUlBwp.bwp.scs = macCellCfg->initialUlBwp.bwp.scs;
+   schCellCfg.schInitialUlBwp.bwp.cyclicPrefix = macCellCfg->initialUlBwp.bwp.cyclicPrefix;
+   schCellCfg.schInitialUlBwp.puschCommon.k2 = macCellCfg->initialUlBwp.puschCommon.k2;
+   schCellCfg.schInitialUlBwp.puschCommon.mappingType =
+      macCellCfg->initialUlBwp.puschCommon.mappingType;
+   schCellCfg.schInitialUlBwp.puschCommon.startSymbol =
+      macCellCfg->initialUlBwp.puschCommon.startSymbol;
+   schCellCfg.schInitialUlBwp.puschCommon.lengthSymbol =
+      macCellCfg->initialUlBwp.puschCommon.lengthSymbol;
+
+
    cfgPst.srcProcId = pst->dstProcId;
        cfgPst.dstProcId = pst->srcProcId;
        cfgPst.srcEnt    = ENTRG;
        cfgPst.srcInst   = 0;
        cfgPst.dstEnt    = ENTRG;
        cfgPst.dstInst   = 1;
-       cfgPst.selector  = MAC_SCH_TC_SELECTOR;
+       cfgPst.selector  = ODU_SELECTOR_TC;
        cfgPst.event     = EVENT_SCH_CELL_CFG;
 
        ret = (*SchCellCfgOpts[cfgPst.selector])(&cfgPst, &schCellCfg);
        return ret;
 } /* end of MacSchCellCfgReq */
 
+
+/*******************************************************************
+ *
+ * @brief Sends Cell config confirm to DU APP
+ *
+ * @details
+ *
+ *    Function : MacSendCellCfgCfm 
+ *
+ *    Functionality:
+ *      Sends Cell config confirm to DU APP
+ *
+ * @params[in] Response status
+ * @return void
+ *
+ * ****************************************************************/
+void MacSendCellCfgCfm(uint8_t response)
+{
+   Pst pst;
+   RgCellCb      *cellCb;
+   MacCellCfgCfm macCellCfgCfm;
+   cmMemset((U8 *)&pst, 0, sizeof(Pst));
+   cellCb = rgCb[macCb.macInst].cell;
+   macCellCfgCfm.cellId = cellCb->macCellCfg.cellId;
+   macCellCfgCfm.rsp = response;
+
+   memcpy((void *)&pst, (void *)&rgCb[macCb.macInst].rgInit.lmPst, sizeof(Pst));
+   pst.event = EVENT_MAC_CELL_CONFIG_CFM;
+   (*packMacCellCfmOpts[pst.selector])(&pst,&macCellCfgCfm);
+}
+
+
 /**
  * @brief Layer Manager Configuration response handler. 
  *
@@ -2201,26 +2335,17 @@ int MacProcSchCellCfgCfm
  SchCellCfgCfm *schCellCfgCfm
 )
 {
-   Pst cfmPst;
-   int ret;
-   RgCellCb      *cellCb;
-   MacCellCfgCfm macCellCfgCfm;
-
-   cmMemset((U8 *)&cfmPst, 0, sizeof(Pst));
-       cellCb = rgCb[pst->dstInst].cell;
-       macCellCfgCfm.transId = cellCb->macCellCfg.transId;
        if(schCellCfgCfm->rsp == RSP_OK)
        {
-      macCellCfgCfm.rsp = RSP_OK;
+      sendToLowerMac(CONFIG_REQUEST, 0, (void *)NULL);
        }
        else
        {
-               macCellCfgCfm.rsp = RSP_NOK;
+      MacSendCellCfgCfm(RSP_NOK);
        }
-       macCellCfgFillCfmPst(pst,&cfmPst);
-       ret = (*packMacCellCfmOpts[cfmPst.selector])(&cfmPst,&macCellCfgCfm);
-       
+   return ROK; 
 }
+
 /**********************************************************************
  
          End of file