#include "rgr.h" /* LRG Interface defines */
#include "rg.h" /* MAC defines */
#include "rg_err.h" /* MAC error defines */
+#include "du_log.h"
/* header/extern include files (.x) */
#include "gen.x" /* general */
#include "rg_prg.x" /* PRG Interface includes */
#include "lrg.x" /* LRG Interface includes */
#include "rgr.x" /* LRG Interface includes */
-#include "mac_interface.h"
+#include "du_app_mac_inf.h"
#include "rg.x" /* MAC includes */
#ifdef SS_DIAG
#include "ss_diag.h" /* Common log file */
#include "ss_rbuf.h"
#include "ss_rbuf.x"
-#include "rg_cl.h" /* MAC CL defines */
-
+#include "lwr_mac.h" /* MAC CL defines */
+#include "mac.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
Pst *cfmPst
));
-extern U16 cmPackLcMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
-extern U16 cmPackLwlcMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
+extern U16 packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm);
-packMacCellCfgCfm packMacCellCfmMt[] =
+packMacCellCfgConfirm packMacCellCfmOpts[] =
{
- cmPackLcMacCellCfgCfm, /* packing for loosely coupled */
+ packMacCellCfgCfm, /* packing for loosely coupled */
duHandleMacCellCfgCfm, /* packing for tightly coupled */
- cmPackLwlcMacCellCfgCfm, /* packing for light weight loosly coupled */
+ packMacCellCfgCfm, /* packing for light weight loosly coupled */
};
+
+SchCellCfgFunc SchCellCfgOpts[] =
+{
+ packSchCellCfg, /* packing for loosely coupled */
+ SchHdlCellCfgReq, /* packing for tightly coupled */
+ packSchCellCfg /* packing for light weight loosly coupled */
+};
+
\f
/**
* @brief Task Initiation callback function.
/* Initialize the timer control point */
cmMemset((U8 *)&rgCb[inst].tmrTqCp, 0, sizeof(CmTqCp));
rgCb[inst].tmrTqCp.tmrLen = RG_TQ_SIZE;
+#if 0
/* Timer Registration request to SSI */
if (SRegTmrMt(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst,
(S16)rgCb[inst].genCfg.tmrRes, rgActvTmr) != ROK)
RETVALUE(LCM_REASON_MEM_NOAVAIL);
}
+#endif
/* Set Config done in TskInit */
rgCb[inst].rgInit.cfgDone = TRUE;
#endif
{
printf("\nSending Scheduler config confirm to DU APP");
+ pst->dstEnt = ENTDUAPP;
+ pst->dstInst = 0;
+ pst->srcInst = 0;
+ pst->selector = MAC_SCH_LC_SELECTOR;
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
/***********************************************************
*
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->dstEnt = ENTDUAPP;
+ cfmPst->dstInst = 0;
+ cfmPst->dstProcId = cfmPst->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;
+ cfmPst->event = EVENT_MAC_CELL_CONFIG_CFM;
RETVOID;
}
*
* @details
*
- * Function : handleMacCellCfgReq
+ * Function : MacHdlCellCfgReq
*
* This function handles the gNB and cell configuration
* request received from DU APP.
* @return S16
* -# ROK
**/
-S16 handleMacCellCfgReq
+int MacHdlCellCfgReq
(
Pst *pst,
MacCellCfg *macCellCfg
)
{
- U16 ret = ROK;
- MacCellCfgCfm macCellCfgCfm;
+ Pst cfmPst;
+ int ret = ROK;
RgCellCb *cellCb;
- Pst cnfPst;
+ MacCellCb *macCellCb;
Inst inst = pst->dstInst;
- cellCb = rgCb[inst].cell;
- memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg));
+ cmMemset((U8 *)&cfmPst, 0, sizeof(Pst));
+ MAC_ALLOC(cellCb,sizeof(RgCellCb));
+
+ if(cellCb == NULLP)
+ {
+ DU_LOG("\nMAC : cellCb is NULL at handling of macCellCfg\n");
+ return RFAILED;
+ }
- macCellCfgFillCfmPst(pst,&cnfPst);
+ memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg));
+ rgCb[inst].cell = cellCb;
- macCellCfgCfm.transId = macCellCfg->transId;
- //ret = cmPackLcMacCellCfgCfm(&cnfPst,&macCellCfgCfm);
- ret = (*packMacCellCfmMt[cnfPst.selector])(&cnfPst,&macCellCfgCfm);
+ MAC_ALLOC(macCellCb,sizeof(MacCellCb));
+ if(macCellCb == NULLP)
+ {
+ DU_LOG("\nMAC : macCellCb is NULL at handling of macCellCfg\n");
+ return RFAILED;
+ }
+ macCb.macCell = macCellCb;
+ /* Send cell cfg to scheduler */
+ ret = MacSchCellCfgReq(pst, macCellCfg);
+ if(ret != ROK)
+ {
+ MacCellCfgCfm macCellCfgCfm;
+ macCellCfgCfm.rsp = RSP_NOK;
+ macCellCfgCfm.transId = macCellCfg->transId;
+ macCellCfgFillCfmPst(pst,&cfmPst);
+ ret = (*packMacCellCfmOpts[cfmPst.selector])(&cfmPst,&macCellCfgCfm);
+ }
return ret;
-} /* end of handleMacCellCfgReq */
+} /* end of MacHdlCellCfgReq */
-\f
+/**
+ * @brief Layer Manager Configuration request handler.
+ *
+ * @details
+ *
+ * Function : MacSchCellCfgReq
+ *
+ * This function sends cell configuration to SCH
+ *
+ * @param[in] Pst *pst
+ * @param[in] MacCellCfg *macCellCfg
+ * @return S16
+ * -# ROK
+ **/
+int MacSchCellCfgReq
+(
+ Pst *pst,
+ MacCellCfg *macCellCfg
+)
+{
+ SchCellCfg schCellCfg;
+ Pst cfgPst;
+ int ret;
+
+ cmMemset((U8 *)&cfgPst, 0, sizeof(Pst));
+ schCellCfg.cellId = macCellCfg->cellId;
+ schCellCfg.phyCellId = macCellCfg->phyCellId;
+ schCellCfg.bandwidth = macCellCfg->dlCarrCfg.bw;
+ schCellCfg.dupMode = macCellCfg->dupType;
+
+ /* 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.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;
+
+ 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.event = EVENT_SCH_CELL_CFG;
+
+ ret = (*SchCellCfgOpts[cfgPst.selector])(&cfgPst, &schCellCfg);
+ return ret;
+} /* end of MacSchCellCfgReq */
+
+/**
+ * @brief Layer Manager Configuration response handler.
+ *
+ * @details
+ *
+ * Function : MacProcSchCellCfgCfm
+ *
+ * This function processes cell configuration to SCH
+ *
+ * @param[in] Pst *pst
+ * @param[in] SchCellCfgCfm *schCellCfgCfm
+ * @return int
+ * -# ROK
+ **/
+int MacProcSchCellCfgCfm
+(
+ Pst *pst,
+ 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;
+ }
+ else
+ {
+ macCellCfgCfm.rsp = RSP_NOK;
+ }
+ macCellCfgFillCfmPst(pst,&cfmPst);
+ ret = (*packMacCellCfmOpts[cfmPst.selector])(&cfmPst,&macCellCfgCfm);
+
+}
/**********************************************************************
End of file