macCellCfg
[o-du/l2.git] / src / 5gnrmac / rg_lmm.c
index e3dd82e..aa68fd5 100755 (executable)
@@ -52,8 +52,9 @@ static int RLOG_MODULE_ID=4096;
 #include "crg.h"           /* CRG Interface defines */
 #include "rgu.h"           /* RGU Interface defines */
 #include "tfu.h"           /* RGU Interface defines */
-#include "rg_sch_inf.h"           /* RGR Interface defines */
+#include "rg_sch_inf.h"    /* RGR Interface defines */
 #include "lrg.h"           /* LRG Interface defines */
+#include "rgr.h"           /* LRG Interface defines */
 #include "rg.h"            /* MAC defines */
 #include "rg_err.h"        /* MAC error defines */
 
@@ -73,12 +74,17 @@ static int RLOG_MODULE_ID=4096;
 #include "rg_sch_inf.x"    /* SCH Interface includes */
 #include "rg_prg.x"    /* PRG Interface includes */
 #include "lrg.x"           /* LRG Interface includes */
+#include "rgr.x"           /* LRG Interface includes */
+#include "mac_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 "rg_cl.h"         /* MAC CL defines */
+
 #ifdef __cplusplus
 extern "C" {
 #endif /* __cplusplus */
@@ -87,6 +93,8 @@ EXTERN Void rgGetSId ARGS((SystemId *s));
 }
 #endif /* __cplusplus */
 
+/* Public variable declaration */
+ClCb   clGlobalCp;
 
 /* forward references */
 PRIVATE U16 rgLMMGenCfg ARGS((
@@ -122,6 +130,15 @@ RgMngmt       *cfm,
 Pst           *cfmPst
 ));
 
+extern U16 cmPackLcMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+extern U16 cmPackLwlcMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+
+packMacCellCfgCfm packMacCellCfmMt[] =
+{
+   cmPackLcMacCellCfgCfm,      /* packing for loosely coupled */
+   duHandleMacCellCfgCfm,      /* packing for tightly coupled */
+   cmPackLwlcMacCellCfgCfm,    /* packing for light weight loosly coupled */
+};
 \f
 /**
  * @brief Task Initiation callback function. 
@@ -202,6 +219,24 @@ Reason reason;         /* reason */
    SAttachSRngBuf(SS_RNG_BUF_ULMAC_TO_ULRLC, SS_RBUF_ENT_ULMAC,SS_RNG_TX);
    SAttachSRngBuf(SS_RNG_BUF_ULMAC_TO_ULRLC, SS_RBUF_ENT_ULRLC,SS_RNG_RX);
 #endif
+
+   /* Initializing CL control block */
+   clGlobalCp.region = region;
+   clGlobalCp.pool = 0;
+   clGlobalCp.clCfgDone = FALSE;
+   clGlobalCp.numOfCells = 0;
+   clGlobalCp.phyState = PHY_STATE_IDLE; 
+
+   if( cmHashListInit(&clGlobalCp.cellCbLst, MAX_NUM_CELL_SUPP, 0x0, FALSE, 
+                  CM_HASH_KEYTYPE_DEF, clGlobalCp.region, clGlobalCp.pool ) != ROK )
+   {
+      printf("\n Cellcb hash list initialization failed for MAC CL");
+      RETVALUE(RFAILED);
+   }
+
+   /* Initialize Scheduler as well */
+   schActvInit(ENTRG, (DEFAULT_CELLS + SCH_INST_START), DFLT_REGION, PWR_UP);
+
    RETVALUE(ROK);
 
 } /* rgActvInit */
@@ -1919,6 +1954,196 @@ Inst    inst;
  
 } /* end of rgActvTmr */
 
+/**
+ * @brief Layer Manager  Configuration request handler for Scheduler
+ *
+ * @details
+ *
+ *     Function : MacSchGenCfgReq
+ *     
+ *     This function receives general configurations for Scheduler
+ *     from DU APP and forwards to Scheduler.
+ *     
+ *  @param[in]  Pst *pst, the post structure     
+ *  @param[in]  RgMngmt *cfg, the configuration parameter's structure
+ *  @return  S16
+ *      -# ROK
+ **/
+#ifdef ANSI
+PUBLIC S16 MacSchGenCfgReq
+(
+Pst      *pst,    /* post structure  */
+RgMngmt  *cfg     /* config structure  */
+)
+#else
+PUBLIC S16 MacSchGenCfgReq(pst, cfg)
+Pst      *pst;    /* post structure  */
+RgMngmt  *cfg;    /* config structure  */
+#endif    
+{
+   printf("\nReceived Scheduler gen config at MAC");
+   pst->dstInst = DEFAULT_CELLS + 1;
+   HandleSchGenCfgReq(pst, cfg);
+
+   return ROK;
+}
+
+/**
+ * @brief Layer Manager Configuration response from Scheduler
+ *
+ * @details
+ *
+ *     Function : SchSendCfgCfm
+ *     
+ *     This function sends general configurations response from
+ *     Scheduler to DU APP.
+ *     
+ *  @param[in]  Pst *pst, the post structure     
+ *  @param[in]  RgMngmt *cfm, the configuration confirm structure
+ *  @return  S16
+ *      -# ROK
+ **/
+#ifdef ANSI
+PUBLIC S16 SchSendCfgCfm 
+(
+Pst      *pst,    /* post structure  */
+RgMngmt  *cfm     /* config confirm structure  */
+)
+#else
+PUBLIC S16 SchSendCfgCfm(pst, cfm)
+Pst      *pst;    /* post structure  */
+RgMngmt  *cfm;    /* config confirm structure  */
+#endif    
+{
+   printf("\nSending Scheduler config confirm to DU APP");
+   RgMiLrgSchCfgCfm(pst, cfm);
+   
+   RETVALUE(ROK);
+}
+
+/**
+ * @brief Layer Manager Configuration request handler. 
+ *
+ * @details
+ *
+ *     Function : MacSchCfgReq 
+ *     
+ *     This function handles the gNB and cell configuration
+ *     request received from DU APP.
+ *     This API unapcks and forwards the config towards SCH
+ *     
+ *  @param[in]  Pst           *pst
+ *  @param[in]  RgrCfgTransId transId
+ *  @param[in]  RgrCfgReqInfo *cfgReqInfo
+ *  @return  S16
+ *      -# ROK
+ **/
+#ifdef ANSI
+PUBLIC S16 MacSchCfgReq 
+(
+ Pst           *pst,
+ RgrCfgTransId transId,
+ RgrCfgReqInfo *cfgReqInfo
+)
+#else
+PUBLIC S16 MacSchCfgReq(pst, transId, cfgReqInfo)
+ Pst           *pst; 
+ RgrCfgTransId transId;
+ RgrCfgReqInfo *cfgReqInfo;
+#endif    
+{
+   printf("\nReceived Scheduler config at MAC");
+   pst->dstInst = DEFAULT_CELLS + 1;
+   HandleSchCfgReq(pst, transId, cfgReqInfo);
+
+   RETVALUE(ROK);
+} /* end of MacSchCfgReq*/
+
+\f
+/***********************************************************
+ *
+ *     Func : macCellCfgFillCfmPst 
+ *        
+ *
+ *     Desc : Fills the Confirmation Post Structure cfmPst 
+ *
+ *     Ret  : Void
+ *
+ *     Notes: 
+ *
+ *     File : rg_lmm.c 
+ *
+ **********************************************************/
+Void macCellCfgFillCfmPst
+(
+Pst           *reqPst,
+Pst           *cfmPst
+)
+{
+   Inst inst;
+   inst = reqPst->dstInst;
+
+   cfmPst->srcEnt    = rgCb[inst].rgInit.ent;
+   cfmPst->srcInst   = rgCb[inst].rgInit.inst;
+   cfmPst->srcProcId = rgCb[inst].rgInit.procId;
+
+   cfmPst->srcEnt    = reqPst->dstEnt;
+   cfmPst->dstEnt    = reqPst->srcEnt;
+   cfmPst->srcInst   = reqPst->dstInst;
+   cfmPst->dstInst   = reqPst->srcInst;
+   cfmPst->srcProcId = reqPst->dstProcId;
+   cfmPst->dstProcId = reqPst->srcProcId;
+
+   cfmPst->selector  = LRG_SEL_LC;
+   cfmPst->prior     = reqPst->prior;
+   cfmPst->route     = reqPst->route;
+   cfmPst->region    = reqPst->region;
+   cfmPst->pool      = reqPst->pool;
+   cfmPst->event = EVENT_MAC_CELL_CONFIG_CFM;
+
+   RETVOID;
+}
+
+/**
+ * @brief Layer Manager Configuration request handler. 
+ *
+ * @details
+ *
+ *     Function : handleMacCellCfgReq 
+ *     
+ *     This function handles the gNB and cell configuration
+ *     request received from DU APP.
+ *     This API unapcks and forwards the config towards SCH
+ *     
+ *  @param[in]  Pst           *pst
+ *  @param[in]  MacCellCfg    *macCellCfg 
+ *  @return  S16
+ *      -# ROK
+ **/
+S16 handleMacCellCfgReq
+(
+ Pst           *pst,
+ MacCellCfg    *macCellCfg
+)
+{
+   U16 ret = ROK;
+   MacCellCfgCfm macCellCfgCfm;
+   RgCellCb      *cellCb;
+   Pst cnfPst;
+   Inst inst = pst->dstInst;
+
+   cellCb = rgCb[inst].cell;
+   memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg));
+
+   macCellCfgFillCfmPst(pst,&cnfPst);
+
+   macCellCfgCfm.transId = macCellCfg->transId;
+   //ret = cmPackLcMacCellCfgCfm(&cnfPst,&macCellCfgCfm);
+   ret = (*packMacCellCfmMt[cnfPst.selector])(&cnfPst,&macCellCfgCfm);
+   return ret;
+} /* end of handleMacCellCfgReq */
+
 \f
 /**********************************************************************