X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Frg_lmm.c;h=7683a6d6bb08a226e8cf609b136359339475e7a3;hb=f15bab416a36e421d42be3d2d1a42bf4c8c8b6c2;hp=0e744585620e39461310e4310271d8fb5a78ba01;hpb=451e626d5ac7c7e7586bab23358161230449af46;p=o-du%2Fl2.git diff --git a/src/5gnrmac/rg_lmm.c b/src/5gnrmac/rg_lmm.c index 0e7445856..7683a6d6b 100755 --- a/src/5gnrmac/rg_lmm.c +++ b/src/5gnrmac/rg_lmm.c @@ -57,6 +57,7 @@ static int RLOG_MODULE_ID=4096; #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 */ @@ -84,7 +85,7 @@ static int RLOG_MODULE_ID=4096; #include "ss_rbuf.x" #include "lwr_mac.h" /* MAC CL defines */ - +#include "mac.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -130,14 +131,22 @@ RgMngmt *cfm, Pst *cfmPst )); -extern U16 cmPackMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); +extern U16 packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); -packMacCellCfgCfm packMacCellCfmOpts[] = +packMacCellCfgConfirm packMacCellCfmOpts[] = { - cmPackMacCellCfgCfm, /* packing for loosely coupled */ + packMacCellCfgCfm, /* packing for loosely coupled */ duHandleMacCellCfgCfm, /* packing for tightly coupled */ - cmPackMacCellCfgCfm, /* 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 */ +}; + /** * @brief Task Initiation callback function. @@ -960,6 +969,7 @@ RgCfg *cfg; /* Configuaration information */ /* 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) @@ -974,6 +984,7 @@ RgCfg *cfg; /* Configuaration information */ RETVALUE(LCM_REASON_MEM_NOAVAIL); } +#endif /* Set Config done in TskInit */ rgCb[inst].rgInit.cfgDone = TRUE; @@ -2015,50 +2026,15 @@ RgMngmt *cfm; /* config confirm structure */ #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*/ - /*********************************************************** * @@ -2087,19 +2063,16 @@ Pst *cfmPst 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; } @@ -2120,30 +2093,141 @@ Pst *cfmPst * @return S16 * -# ROK **/ -S16 MacHdlCellCfgReq +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)); - macCellCfgFillCfmPst(pst,&cnfPst); + if(cellCb == NULLP) + { + DU_LOG("\nMAC : cellCb is NULL at handling of macCellCfg\n"); + return RFAILED; + } - macCellCfgCfm.transId = macCellCfg->transId; + memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg)); + rgCb[inst].cell = cellCb; - ret = (*packMacCellCfmOpts[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 MacHdlCellCfgReq */ - +/** + * @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; + 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; + for(uint8_t idx=0; idxssbCfg.ssbMask[idx]; + } + 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