X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Frg_lmm.c;h=1fc073e8f8a315230c30a3a01b2adbb501101eea;hb=105199ef642ffe9736ea24a01d4546578fa25e60;hp=7c7275523acbebbd3e37e85374ee271ca026400e;hpb=43f9a063a851c5318a609e9966cdc0b30f0abaf5;p=o-du%2Fl2.git diff --git a/src/5gnrmac/rg_lmm.c b/src/5gnrmac/rg_lmm.c index 7c7275523..1fc073e8f 100755 --- a/src/5gnrmac/rg_lmm.c +++ b/src/5gnrmac/rg_lmm.c @@ -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 */ @@ -83,8 +65,10 @@ static int RLOG_MODULE_ID=4096; #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" { @@ -96,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(( @@ -131,7 +118,7 @@ RgMngmt *cfm, Pst *cfmPst )); -extern U16 packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); +extern int packMacCellCfgCfm(Pst *pst, MacCellCfgCfm *macCellCfgCfm); packMacCellCfgConfirm packMacCellCfmOpts[] = { @@ -139,6 +126,14 @@ packMacCellCfgConfirm packMacCellCfmOpts[] = duHandleMacCellCfgCfm, /* packing for tightly 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. @@ -237,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 */ @@ -770,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"); @@ -801,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"); @@ -831,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"); @@ -910,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); @@ -928,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; @@ -961,6 +962,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) @@ -975,6 +977,7 @@ RgCfg *cfg; /* Configuaration information */ RETVALUE(LCM_REASON_MEM_NOAVAIL); } +#endif /* Set Config done in TskInit */ rgCb[inst].rgInit.cfgDone = TRUE; @@ -1970,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 @@ -2016,50 +2019,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 = ODU_SELECTOR_LC; 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*/ - /*********************************************************** * @@ -2088,19 +2056,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->selector = ODU_SELECTOR_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; } @@ -2121,19 +2086,19 @@ Pst *cfmPst * @return S16 * -# ROK **/ -S16 MacHdlCellCfgReq +int MacHdlCellCfgReq ( Pst *pst, MacCellCfg *macCellCfg ) { - U16 ret = ROK; - MacCellCfgCfm macCellCfgCfm; + Pst cfmPst; + uint16_t ret = ROK; RgCellCb *cellCb; - Pst cnfPst; + MacCellCb *macCellCb = NULLP; Inst inst = pst->dstInst; - cellCb = rgCb[inst].cell; + cmMemset((U8 *)&cfmPst, 0, sizeof(Pst)); MAC_ALLOC(cellCb,sizeof(RgCellCb)); if(cellCb == NULLP) @@ -2143,16 +2108,224 @@ S16 MacHdlCellCfgReq } memcpy(&cellCb->macCellCfg,macCellCfg,sizeof(MacCellCfg)); + rgCb[inst].cell = cellCb; - macCellCfgFillCfmPst(pst,&cnfPst); - - macCellCfgCfm.transId = macCellCfg->transId; - - 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; + } + memset(macCellCb, 0, sizeof(MacCellCb)); + macCb.macCell = macCellCb; + macCb.macCell->cellId = macCellCfg->cellId; + /* 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); + } +#ifdef INTEL_WLS + LwrMacEnqueueWlsBlock(); +#endif 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; + + /* 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; idxssbCfg.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 = 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.transId = cellCb->macCellCfg.transId; + 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. + * + * @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 +) +{ + if(schCellCfgCfm->rsp == RSP_OK) + { + sendToLowerMac(CONFIG_REQUEST, 0, (void *)NULL); + } + else + { + MacSendCellCfgCfm(RSP_NOK); + } + return ROK; +} + /********************************************************************** End of file