X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2F5gnrmac%2Fmac_cfg_hdl.c;h=fa17ba067245c09581585c435f491f5688555adc;hb=f73456bd55152c329601f8286ae67fe9875025bc;hp=f354fa430620d1c8220b1715398d4160e054ba16;hpb=54b723e4e533c3bfd0c2258c33f26689b392acbb;p=o-du%2Fl2.git diff --git a/src/5gnrmac/mac_cfg_hdl.c b/src/5gnrmac/mac_cfg_hdl.c index f354fa430..fa17ba067 100644 --- a/src/5gnrmac/mac_cfg_hdl.c +++ b/src/5gnrmac/mac_cfg_hdl.c @@ -42,20 +42,6 @@ packMacCellCfgConfirm packMacCellCfmOpts[] = 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 */ -}; - -MacSchCellDeleteReqFunc macSchCellDeleteReqOpts[]= -{ - packMacSchCellDeleteReq, /* packing for loosely coupled */ - MacSchCellDeleteReq, /* packing for tightly coupled */ - packMacSchCellDeleteReq /* packing for light weight loosely coupled */ -}; - MacDuCellDeleteRspFunc macDuCellDeleteRspOpts[] = { packDuMacCellDeleteRsp, /* packing for loosely coupled */ @@ -70,18 +56,11 @@ MacDuSliceCfgRspFunc macDuSliceCfgRspOpts[] = packDuMacSliceCfgRsp /* packing for light weight loosly coupled */ }; -MacDuSliceReCfgRspFunc macDuSliceReCfgRspOpts[] = -{ - packDuMacSliceReCfgRsp, /* packing for loosely coupled */ - DuProcMacSliceReCfgRsp, /* packing for tightly coupled */ - packDuMacSliceReCfgRsp /* packing for light weight loosly coupled */ -}; - -MacSchPagingIndFunc macSchPagingIndOpts[] = +MacDuSliceRecfgRspFunc macDuSliceRecfgRspOpts[] = { - packMacSchPagingInd, /* packing for loosely coupled */ - MacSchPagingInd, /* packing for tightly coupled */ - packMacSchPagingInd /* packing for light weight loosely coupled */ + packDuMacSliceRecfgRsp, /* packing for loosely coupled */ + DuProcMacSliceRecfgRsp, /* packing for tightly coupled */ + packDuMacSliceRecfgRsp /* packing for light weight loosly coupled */ }; /** @@ -103,12 +82,11 @@ uint8_t MacSchGenCfgReq(Pst *pst, RgMngmt *cfg) { Pst schPst; - printf("\nReceived Scheduler gen config at MAC"); + DU_LOG("\nINFO --> MAC : Received Scheduler gen config at MAC"); memset(&schPst, 0, sizeof(Pst)); FILL_PST_MAC_TO_SCH(schPst, EVENT_SCH_GEN_CFG); - SchProcGenCfgReq(&schPst, cfg); - - return ROK; + + return(SchMessageRouter(&schPst, (void *)cfg)); } /** @@ -128,7 +106,7 @@ uint8_t MacSchGenCfgReq(Pst *pst, RgMngmt *cfg) **/ uint8_t SchSendCfgCfm(Pst *pst, RgMngmt *cfm) { - DU_LOG("\nDEBUG --> Sending Scheduler config confirm to DU APP"); + DU_LOG("\nDEBUG --> MAC : Sending Scheduler config confirm to DU APP"); pst->dstEnt = ENTDUAPP; pst->dstInst = 0; pst->srcInst = 0; @@ -157,8 +135,8 @@ uint8_t SchSendCfgCfm(Pst *pst, RgMngmt *cfm) uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) { Pst cfmPst; - uint16_t cellIdx; - uint8_t ret = ROK, sliceIdx = 0; + uint16_t cellIdx, scsInKhz = 0; + uint8_t ret = ROK, plmnIdx = 0,sliceIdx = 0; MacCellCb *macCellCb; memset((uint8_t *)&cfmPst, 0, sizeof(Pst)); @@ -174,45 +152,52 @@ uint8_t MacProcCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) GET_CELL_IDX(macCellCfg->cellId, cellIdx); macCb.macCell[cellIdx] = macCellCb; macCb.macCell[cellIdx]->cellId = macCellCfg->cellId; + scsInKhz = convertScsEnumValToScsVal(macCellCfg->cellCfg.subCarrSpacing); + + /*Ref : 3GPP 38.211 Table 4.2-1: SCS = (2 ^ numerology * 15kHz)*/ + macCb.macCell[cellIdx]->numerology = log2(scsInKhz/BASE_SCS); + macCb.macCell[cellIdx]->numOfSlots = 10 * (1 << (macCb.macCell[cellIdx]->numerology)); memcpy(&macCb.macCell[cellIdx]->macCellCfg, macCellCfg, sizeof(MacCellCfg)); - MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1Pdu, \ - macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1PduLen); - if(macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1Pdu == NULLP) + MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1Pdu, \ + macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1PduLen); + if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1Pdu == NULLP) { DU_LOG("\nERROR --> MAC : macCellCb is NULL at handling of sib1Pdu of macCellCfg\n"); return RFAILED; } - memcpy(macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1Pdu, macCellCfg->sib1Cfg.sib1Pdu, \ - macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1PduLen); - - macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.numSupportedSlice = macCellCfg->plmnInfoList.numSupportedSlice; - MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai, macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.numSupportedSlice\ - * sizeof(Snssai*)); - if(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai == NULLP) - { - DU_LOG("\nERROR --> MAC: Memory allocation failed at MacProcCellCfgReq"); - return RFAILED; - } + memcpy(macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1Pdu, macCellCfg->cellCfg.sib1Cfg.sib1Pdu, \ + macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1PduLen); - if(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai) + for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) { - for(sliceIdx=0; sliceIdxmacCellCfg.plmnInfoList.numSupportedSlice; sliceIdx++) + macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].numSupportedSlice = macCellCfg->cellCfg.plmnInfoList[plmnIdx].numSupportedSlice; + MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai, macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].numSupportedSlice\ + * sizeof(Snssai*)); + if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai == NULLP) + { + DU_LOG("\nERROR --> MAC: Memory allocation failed at MacProcCellCfgReq"); + return RFAILED; + } + + if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai) { - if(macCellCfg->plmnInfoList.snssai[sliceIdx]) + for(sliceIdx=0; sliceIdxmacCellCfg.cellCfg.plmnInfoList[plmnIdx].numSupportedSlice; sliceIdx++) { - MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai[sliceIdx], sizeof(Snssai)); - if(!macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai[sliceIdx]) + if(macCellCfg->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx]) { - DU_LOG("\nERROR --> MAC: Memory allocation failed at MacProcCellCfgReq"); - return RFAILED; + MAC_ALLOC(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai)); + if(!macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx]) + { + DU_LOG("\nERROR --> MAC: Memory allocation failed at MacProcCellCfgReq"); + return RFAILED; + } + memcpy(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], macCellCfg->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx],\ + sizeof(Snssai)); } - memcpy(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai[sliceIdx], macCellCfg->plmnInfoList.snssai[sliceIdx],\ - sizeof(Snssai)); } } } - /* Send cell cfg to scheduler */ ret = MacSchCellCfgReq(pst, macCellCfg); if(ret != ROK) @@ -251,151 +236,158 @@ uint8_t MacSchCellCfgReq(Pst *pst, MacCellCfg *macCellCfg) { SchCellCfg schCellCfg; Pst cfgPst; - uint8_t ssbMaskIdx = 0, rsrcListIdx = 0, ret=0, sliceIdx=0; + uint8_t ssbMaskIdx = 0, rsrcListIdx = 0, sliceIdx=0, plmnIdx = 0; memset(&cfgPst, 0, sizeof(Pst)); memset(&schCellCfg, 0, sizeof(SchCellCfg)); schCellCfg.cellId = macCellCfg->cellId; - schCellCfg.phyCellId = macCellCfg->phyCellId; - schCellCfg.numerology = macCellCfg->numerology; - schCellCfg.dupMode = macCellCfg->dupType; - schCellCfg.bandwidth = macCellCfg->dlCarrCfg.bw; - schCellCfg.dlFreq = macCellCfg->dlCarrCfg.freq; - schCellCfg.ulFreq = macCellCfg->ulCarrCfg.freq; + schCellCfg.phyCellId = macCellCfg->cellCfg.phyCellId; - /* 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 = ssbPeriodicity[macCellCfg->ssbCfg.ssbPeriod]; - schCellCfg.ssbSchCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset; - for(ssbMaskIdx=0; ssbMaskIdxssbCfg.ssbMask[ssbMaskIdx]; + schCellCfg.plmnInfoList[plmnIdx].plmn = macCellCfg->cellCfg.plmnInfoList[plmnIdx].plmn; + if(macCellCfg->cellCfg.plmnInfoList[plmnIdx].snssai) + { + schCellCfg.plmnInfoList[plmnIdx].numSliceSupport = macCellCfg->cellCfg.plmnInfoList[plmnIdx].numSupportedSlice; + MAC_ALLOC(schCellCfg.plmnInfoList[plmnIdx].snssai, schCellCfg.plmnInfoList[plmnIdx].numSliceSupport * sizeof(Snssai*)); + if(!schCellCfg.plmnInfoList[plmnIdx].snssai) + { + DU_LOG("\nERROR --> MAC: Memory allocation failed at MacSchCellCfgReq"); + return RFAILED; + } + for(sliceIdx=0; sliceIdxcellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx]) + { + MAC_ALLOC(schCellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai)); + if(!schCellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx]) + { + DU_LOG("\nERROR --> MAC: Memory allocation failed at MacSchCellCfgReq"); + return RFAILED; + } + memcpy(schCellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], macCellCfg->cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai)); + } + } + } } - schCellCfg.ssbSchCfg.totNumSsb = countSetBits(schCellCfg.ssbSchCfg.nSSBMask[0]); - /* fill SIB1 scheduler parameters */ - schCellCfg.sib1SchCfg.sib1PduLen = macCellCfg->sib1Cfg.sib1PduLen; - schCellCfg.sib1SchCfg.sib1RepetitionPeriod = macCellCfg->sib1Cfg.sib1RepetitionPeriod; - schCellCfg.sib1SchCfg.coresetZeroIndex = macCellCfg->sib1Cfg.coresetZeroIndex; - schCellCfg.sib1SchCfg.searchSpaceZeroIndex = macCellCfg->sib1Cfg.searchSpaceZeroIndex; - schCellCfg.sib1SchCfg.sib1Mcs = macCellCfg->sib1Cfg.sib1Mcs; - schCellCfg.sib1SchCfg.pageCfg.numPO = macCellCfg->sib1Cfg.pagingCfg.numPO; - schCellCfg.sib1SchCfg.pageCfg.poPresent = macCellCfg->sib1Cfg.pagingCfg.poPresent; - - if(schCellCfg.sib1SchCfg.pageCfg.poPresent) - { - memcpy(schCellCfg.sib1SchCfg.pageCfg.pagingOcc, macCellCfg->sib1Cfg.pagingCfg.pagingOcc, MAX_PO_PER_PF); - } + schCellCfg.dupMode = macCellCfg->cellCfg.dupType; + schCellCfg.dlBandwidth = macCellCfg->carrCfg.dlBw; + schCellCfg.ulBandwidth = macCellCfg->carrCfg.ulBw; - /* 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.totalNumRaPreamble = macCellCfg->prachCfg.totalNumRaPreamble; - schCellCfg.schRachCfg.ssbPerRach = macCellCfg->prachCfg.ssbPerRach; - schCellCfg.schRachCfg.numCbPreamblePerSsb = macCellCfg->prachCfg.numCbPreamblePerSsb; - schCellCfg.schRachCfg.prachMultCarrBand = macCellCfg->prachCfg.prachMultCarrBand; - schCellCfg.schRachCfg.raContResTmr = macCellCfg->prachCfg.raContResTmr; - schCellCfg.schRachCfg.rsrpThreshSsb = macCellCfg->prachCfg.rsrpThreshSsb; - schCellCfg.schRachCfg.raRspWindow = macCellCfg->prachCfg.raRspWindow; + schCellCfg.dlCfgCommon.schFreqInfoDlSib.offsetToPointA = macCellCfg->ssbCfg.ssbOffsetPointA; + schCellCfg.dlCfgCommon.schFreqInfoDlSib.schSpcCarrier[0].subCarrierSpacing = macCellCfg->ssbCfg.scsCmn; /* 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.numTimeDomAlloc = macCellCfg->initialDlBwp.pdschCommon.numTimeDomAlloc; - for(rsrcListIdx = 0; rsrcListIdxinitialDlBwp.pdschCommon.numTimeDomAlloc; rsrcListIdx++) + schCellCfg.dlCfgCommon.schInitialDlBwp.bwp.freqAlloc.startPrb = macCellCfg->cellCfg.initialDlBwp.bwp.firstPrb; + schCellCfg.dlCfgCommon.schInitialDlBwp.bwp.freqAlloc.numPrb = macCellCfg->cellCfg.initialDlBwp.bwp.numPrb; + schCellCfg.dlCfgCommon.schInitialDlBwp.bwp.scs = macCellCfg->cellCfg.initialDlBwp.bwp.scs; + schCellCfg.dlCfgCommon.schInitialDlBwp.bwp.cyclicPrefix = macCellCfg->cellCfg.initialDlBwp.bwp.cyclicPrefix; + + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.searchSpaceId; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.coresetId = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.coresetId; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSlot; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.duration = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.duration; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.monitoringSymbol; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1 = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel1; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2 = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel2; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4 = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel4; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8 = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel8; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16 = + macCellCfg->cellCfg.initialDlBwp.pdcchCommon.commonSearchSpace.candidate.aggLevel16; + + schCellCfg.dlCfgCommon.schInitialDlBwp.pdschCommon.numTimeDomAlloc = macCellCfg->cellCfg.initialDlBwp.pdschCommon.numTimeDomAlloc; + for(rsrcListIdx = 0; rsrcListIdxcellCfg.initialDlBwp.pdschCommon.numTimeDomAlloc; rsrcListIdx++) { - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0 = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; - schCellCfg.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].lengthSymbol = - macCellCfg->initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].lengthSymbol; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0 = + macCellCfg->cellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].k0; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = + macCellCfg->cellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = + macCellCfg->cellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; + schCellCfg.dlCfgCommon.schInitialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].lengthSymbol = + macCellCfg->cellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[rsrcListIdx].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.numTimeDomRsrcAlloc = \ - macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; - for(rsrcListIdx = 0; rsrcListIdx < macCellCfg->initialUlBwp.puschCommon.numTimeDomRsrcAlloc; rsrcListIdx++) + /* fill SIB1 scheduler parameters */ + schCellCfg.dlCfgCommon.schPcchCfg.numPO = macCellCfg->cellCfg.sib1Cfg.pagingCfg.numPO; + schCellCfg.dlCfgCommon.schPcchCfg.poPresent = macCellCfg->cellCfg.sib1Cfg.pagingCfg.poPresent; + if(schCellCfg.dlCfgCommon.schPcchCfg.poPresent) { - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2 = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; - schCellCfg.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength = - macCellCfg->initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength; + memcpy(schCellCfg.dlCfgCommon.schPcchCfg.pagingOcc, macCellCfg->cellCfg.sib1Cfg.pagingCfg.pagingOcc, MAX_PO_PER_PF); } - if(macCellCfg->plmnInfoList.snssai) + /* fill initial UL BWP */ + schCellCfg.ulCfgCommon.schInitialUlBwp.bwp.freqAlloc.startPrb = macCellCfg->cellCfg.initialUlBwp.bwp.firstPrb; + schCellCfg.ulCfgCommon.schInitialUlBwp.bwp.freqAlloc.numPrb = macCellCfg->cellCfg.initialUlBwp.bwp.numPrb; + schCellCfg.ulCfgCommon.schInitialUlBwp.bwp.scs = macCellCfg->cellCfg.initialUlBwp.bwp.scs; + schCellCfg.ulCfgCommon.schInitialUlBwp.bwp.cyclicPrefix = macCellCfg->cellCfg.initialUlBwp.bwp.cyclicPrefix; + /* fill RACH config params */ + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.prachCfgGeneric.prachCfgIdx = macCellCfg->prachCfg.prachCfgIdx; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.prachCfgGeneric.msg1Fdm = macCellCfg->prachCfg.msg1Fdm; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.prachCfgGeneric.msg1FreqStart = macCellCfg->prachCfg.msg1FreqStart; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.prachCfgGeneric.zeroCorrZoneCfg = macCellCfg->prachCfg.fdm[0].zeroCorrZoneCfg; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.prachCfgGeneric.raRspWindow = macCellCfg->prachCfg.raRspWindow; + + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.totalNumRaPreamble = macCellCfg->prachCfg.totalNumRaPreamble; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.ssbPerRach = macCellCfg->prachCfg.ssbPerRach; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.numCbPreamblePerSsb = macCellCfg->prachCfg.numCbPreamblePerSsb; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.raContResTmr = macCellCfg->prachCfg.raContResTmr; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.rsrpThreshSsb = macCellCfg->prachCfg.rsrpThreshSsb; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.rootSeqIdx = macCellCfg->prachCfg.fdm[0].rootSeqIdx; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.numRootSeq = macCellCfg->prachCfg.fdm[0].numRootSeq; + schCellCfg.ulCfgCommon.schInitialUlBwp.schRachCfg.msg1SubcSpacing = \ + macCellCfg->prachCfg.prachSubcSpacing; + + schCellCfg.ulCfgCommon.schInitialUlBwp.pucchCommon.pucchResourceCommon = \ + macCellCfg->cellCfg.initialUlBwp.pucchCommon.pucchResourceCommon; + schCellCfg.ulCfgCommon.schInitialUlBwp.pucchCommon.pucchGroupHopping = \ + macCellCfg->cellCfg.initialUlBwp.pucchCommon.pucchGroupHopping; + schCellCfg.ulCfgCommon.schInitialUlBwp.puschCommon.numTimeDomRsrcAlloc = \ + macCellCfg->cellCfg.initialUlBwp.puschCommon.numTimeDomRsrcAlloc; + for(rsrcListIdx = 0; rsrcListIdx < macCellCfg->cellCfg.initialUlBwp.puschCommon.numTimeDomRsrcAlloc; rsrcListIdx++) { - schCellCfg.plmnInfoList.numSliceSupport = macCellCfg->plmnInfoList.numSupportedSlice; - MAC_ALLOC(schCellCfg.plmnInfoList.snssai, schCellCfg.plmnInfoList.numSliceSupport * sizeof(Snssai*)); - if(!schCellCfg.plmnInfoList.snssai) - { - DU_LOG("\nERROR --> MAC: Memory allocation failed at MacSchCellCfgReq"); - return RFAILED; - } - for(sliceIdx=0; sliceIdxplmnInfoList.snssai[sliceIdx]) - { - MAC_ALLOC(schCellCfg.plmnInfoList.snssai[sliceIdx], sizeof(Snssai)); - if(!schCellCfg.plmnInfoList.snssai[sliceIdx]) - { - DU_LOG("\nERROR --> MAC: Memory allocation failed at MacSchCellCfgReq"); - return RFAILED; - } - memcpy(schCellCfg.plmnInfoList.snssai[sliceIdx], macCellCfg->plmnInfoList.snssai[sliceIdx], sizeof(Snssai)); - } - } + schCellCfg.ulCfgCommon.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2 = + macCellCfg->cellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].k2; + schCellCfg.ulCfgCommon.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType = + macCellCfg->cellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].mappingType; + schCellCfg.ulCfgCommon.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol = + macCellCfg->cellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].startSymbol; + schCellCfg.ulCfgCommon.schInitialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength = + macCellCfg->cellCfg.initialUlBwp.puschCommon.timeDomRsrcAllocList[rsrcListIdx].symbolLength; } #ifdef NR_TDD memcpy(&schCellCfg.tddCfg, &macCellCfg->tddCfg, sizeof(TDDCfg)); #endif + /* fill ssb scheduler parameters */ + for(ssbMaskIdx=0; ssbMaskIdxssbCfg.ssbMask[ssbMaskIdx]; + } + schCellCfg.ssbPeriod = ssbPeriodicity[macCellCfg->ssbCfg.ssbPeriod]; + schCellCfg.ssbFrequency = macCellCfg->cellCfg.ssbFreq; + schCellCfg.dmrsTypeAPos = macCellCfg->ssbCfg.dmrsTypeAPos; + schCellCfg.ssbScs = macCellCfg->cellCfg.subCarrSpacing; + schCellCfg.pdcchCfgSib1.coresetZeroIndex = macCellCfg->cellCfg.sib1Cfg.pdcchCfgSib1.coresetZeroIndex; + schCellCfg.pdcchCfgSib1.searchSpaceZeroIndex = macCellCfg->cellCfg.sib1Cfg.pdcchCfgSib1.searchSpaceZeroIndex; + schCellCfg.ssbPbchPwr = macCellCfg->ssbCfg.ssbPbchPwr; + schCellCfg.ssbSubcOffset = macCellCfg->ssbCfg.ssbScOffset; + schCellCfg.sib1PduLen = macCellCfg->cellCfg.sib1Cfg.sib1PduLen; + FILL_PST_MAC_TO_SCH(cfgPst, EVENT_SCH_CELL_CFG); - ret = (*SchCellCfgOpts[cfgPst.selector])(&cfgPst, &schCellCfg); - return ret; + return(SchMessageRouter(&cfgPst, (void *)&schCellCfg)); } /* end of MacSchCellCfgReq */ @@ -512,7 +504,7 @@ void fapiMacConfigRsp(uint16_t cellId) * RFAILED - failure * * ****************************************************************/ -uint8_t MacSendCellDeleteRsp(CellDeleteStatus result, uint8_t cellId) +uint8_t MacSendCellDeleteRsp(CauseOfResult status, uint8_t cellId) { MacCellDeleteRsp *deleteRsp=NULLP; Pst rspPst; @@ -528,7 +520,7 @@ uint8_t MacSendCellDeleteRsp(CellDeleteStatus result, uint8_t cellId) memset(deleteRsp, 0, sizeof(MacCellDeleteRsp)); deleteRsp->cellId = cellId; - deleteRsp->result = result; + deleteRsp->status = status; /* Fill Post structure and send CELL delete response*/ memset(&rspPst, 0, sizeof(Pst)); @@ -555,10 +547,10 @@ uint8_t MacSendCellDeleteRsp(CellDeleteStatus result, uint8_t cellId) * * ****************************************************************/ uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDelRsp) { - uint8_t ret = ROK, sliceIdx = 0; + uint8_t ret = ROK, sliceIdx = 0, plmnIdx = 0; uint16_t cellIdx=0; - CellDeleteStatus status; - + CauseOfResult cause; + #ifdef CALL_FLOW_DEBUG_LOG DU_LOG("\nCall Flow: ENTSCH -> ENTMAC : EVENT_CELL_DELETE_RSP_TO_MAC\n"); #endif @@ -568,47 +560,50 @@ uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDelRsp) if(schCellDelRsp->rsp == RSP_OK) { DU_LOG("\nINFO --> MAC : SCH CELL Delete response for cellId[%d] is successful ", \ - schCellDelRsp->cellId); + schCellDelRsp->cellId); GET_CELL_IDX(schCellDelRsp->cellId, cellIdx); if(macCb.macCell[cellIdx]) { if(macCb.macCell[cellIdx]->cellId == schCellDelRsp->cellId) { - status = SUCCESSFUL_RSP; - if(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai) + cause = SUCCESSFUL; + for(plmnIdx = 0; plmnIdx < MAX_PLMN; plmnIdx++) { - for(sliceIdx = 0; sliceIdxmacCellCfg.plmnInfoList.numSupportedSlice; sliceIdx++) + if(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai) { - MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai[sliceIdx], sizeof(Snssai)); + for(sliceIdx = 0; sliceIdxmacCellCfg.cellCfg.plmnInfoList[plmnIdx].numSupportedSlice; sliceIdx++) + { + MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai[sliceIdx], sizeof(Snssai)); + } + MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].snssai, macCb.macCell[cellIdx]->macCellCfg.cellCfg.plmnInfoList[plmnIdx].\ + numSupportedSlice * sizeof(Snssai*)); } - MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.snssai, macCb.macCell[cellIdx]->macCellCfg.plmnInfoList.\ - numSupportedSlice * sizeof(Snssai*)); } - MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1Pdu, \ - macCb.macCell[cellIdx]->macCellCfg.sib1Cfg.sib1PduLen); + MAC_FREE(macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1Pdu, \ + macCb.macCell[cellIdx]->macCellCfg.cellCfg.sib1Cfg.sib1PduLen); MAC_FREE(macCb.macCell[cellIdx], sizeof(MacCellCb)); } else { - DU_LOG("ERROR --> MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId); - status = CELL_ID_INVALID; - ret = RFAILED; + DU_LOG("ERROR --> MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId); + cause = CELLID_INVALID; + ret = RFAILED; } } else { DU_LOG("ERROR --> MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId); - status = CELL_ID_INVALID; + cause = CELLID_INVALID; ret = RFAILED; } } else { DU_LOG("ERROR --> MAC : MacProcSchCellDeleteRsp(): CellId[%d] does not exists", schCellDelRsp->cellId); - status = CELL_ID_INVALID; + cause = CELLID_INVALID; ret = RFAILED; } - if(MacSendCellDeleteRsp(status, schCellDelRsp->cellId) != ROK) + if(MacSendCellDeleteRsp(cause, schCellDelRsp->cellId) != ROK) { DU_LOG("\nERROR --> MAC: MacProcSchCellDeleteRsp(): Failed to send CELL delete response"); ret = RFAILED; @@ -639,11 +634,11 @@ uint8_t MacProcSchCellDeleteRsp(Pst *pst, SchCellDeleteRsp *schCellDelRsp) * * ****************************************************************/ -uint8_t sendCellDelReqToSch(SchCellDelete *schCellDel) +uint8_t sendCellDelReqToSch(SchCellDeleteReq *schCellDelReq) { Pst schPst; FILL_PST_MAC_TO_SCH(schPst, EVENT_CELL_DELETE_REQ_TO_SCH); - return(*macSchCellDeleteReqOpts[schPst.selector])(&schPst, schCellDel); + return(SchMessageRouter(&schPst, (void *)schCellDelReq)); } /******************************************************************* @@ -662,10 +657,10 @@ uint8_t sendCellDelReqToSch(SchCellDelete *schCellDel) * * * ****************************************************************/ -uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete) +uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDeleteReq *cellDelete) { uint8_t ret = ROK, cellIdx=0; - SchCellDelete schCellDelete; + SchCellDeleteReq schCellDelete; DU_LOG("\nINFO --> MAC : Cell Delete Request received for cellId[%d]", cellDelete->cellId); @@ -676,7 +671,7 @@ uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete) { if(macCb.macCell[cellIdx]->cellId == cellDelete->cellId) { - memset(&schCellDelete, 0, sizeof(SchCellDelete)); + memset(&schCellDelete, 0, sizeof(SchCellDeleteReq )); schCellDelete.cellId = cellDelete->cellId; ret = sendCellDelReqToSch(&schCellDelete); if(ret != ROK) @@ -702,14 +697,14 @@ uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete) if(ret == RFAILED) { DU_LOG("\nERROR --> MAC : MacProcCellDeleteReq(): Sending failure response to DU"); - if(MacSendCellDeleteRsp(CELL_ID_INVALID, cellDelete->cellId) != ROK) + if(MacSendCellDeleteRsp(CELLID_INVALID, cellDelete->cellId) != ROK) { DU_LOG("\nERROR --> MAC : MacProcCellDeleteReq(): failed to send cell delete rsp for cellID[%d]",\ cellDelete->cellId); } } - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellDelete, sizeof(MacCellDelete)); + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cellDelete, sizeof(MacCellDeleteReq)); } else { @@ -734,78 +729,35 @@ uint8_t MacProcCellDeleteReq(Pst *pst, MacCellDelete *cellDelete) **/ void freeMacSliceCfgReq(MacSliceCfgReq *cfgReq,Pst *pst) { - uint8_t cfgIdx = 0; - - if(cfgReq) - { - if(cfgReq->numOfConfiguredSlice) - { - for(cfgIdx = 0; cfgIdxnumOfConfiguredSlice; cfgIdx++) - { - if(cfgReq->listOfSliceCfg[cfgIdx]) - { - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfSliceCfg[cfgIdx]->rrmPolicyRatio, sizeof(RrmPolicyRatio)); - } - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfSliceCfg[cfgIdx], sizeof(MacSliceRrmPolicy)); - } - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfSliceCfg, cfgReq->numOfConfiguredSlice * sizeof(MacSliceRrmPolicy*)); - } - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq, sizeof(MacSliceCfgReq)); - } -} -/** - * @brief fill Mac Slice Config Rsp - * - * @details - * - * Function : fillMacSliceCfgRsp - * - * This function fill Mac Slice Config Rsp - * - * @param[in] SchSliceCfgRsp *sliceCfgRsp, MacSliceCfgRsp *macSliceCfgRsp, - * uint8_t *count - * @return int - * -# ROK - **/ -uint8_t fillMacSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp, MacSliceCfgRsp *macSliceCfgRsp) -{ - - bool sliceFound = false; - uint8_t cfgIdx = 0; + uint8_t policyIdx = 0, memberListIdx=0; - macSliceCfgRsp->numSliceCfgRsp = schSliceCfgRsp->numSliceCfgRsp; - MAC_ALLOC_SHRABL_BUF(macSliceCfgRsp->listOfSliceCfgRsp, macSliceCfgRsp->numSliceCfgRsp* sizeof(MacSliceRsp*)); - if(macSliceCfgRsp->listOfSliceCfgRsp == NULLP) + if(cfgReq->numOfRrmPolicy) { - DU_LOG("\nERROR --> MAC : Memory allocation failedi in fillMacSliceCfgRsp"); - return RFAILED; - } - - for(cfgIdx = 0; cfgIdxnumSliceCfgRsp; cfgIdx++) - { - sliceFound = false; - if(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp == RSP_OK) - { - sliceFound = true; - } - - MAC_ALLOC_SHRABL_BUF(macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - if(macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx] == NULLP) + if(cfgReq->listOfRrmPolicy) { - DU_LOG("\nERROR --> MAC : Memory allocation failedi in fillMacSliceCfgRsp"); - return RFAILED; - } - - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai = schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->snssai; - if(sliceFound == true) - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = MAC_DU_APP_RSP_OK; - else - { - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->rsp = MAC_DU_APP_RSP_NOK; - macSliceCfgRsp->listOfSliceCfgRsp[cfgIdx]->cause = SLICE_NOT_PRESENT; + for(policyIdx = 0; policyIdxnumOfRrmPolicy; policyIdx++) + { + if(cfgReq->listOfRrmPolicy[policyIdx]) + { + if(cfgReq->listOfRrmPolicy[policyIdx]->numOfRrmPolicyMem) + { + if(cfgReq->listOfRrmPolicy[policyIdx]->rRMPolicyMemberList) + { + for(memberListIdx = 0; memberListIdxlistOfRrmPolicy[policyIdx]->numOfRrmPolicyMem; memberListIdx++) + { + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfRrmPolicy[policyIdx]->rRMPolicyMemberList[memberListIdx], sizeof(RrmPolicyMemberList)); + } + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfRrmPolicy[policyIdx]->rRMPolicyMemberList,\ + cfgReq->listOfRrmPolicy[policyIdx]->numOfRrmPolicyMem * sizeof(RrmPolicyMemberList*)); + } + } + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfRrmPolicy[policyIdx], sizeof(MacSliceRrmPolicy)); + } + } + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, cfgReq->listOfRrmPolicy, cfgReq->numOfRrmPolicy * sizeof(MacSliceRrmPolicy*)); } } - return ROK; + } /** @@ -830,35 +782,6 @@ uint8_t MacSendSliceConfigRsp(MacSliceCfgRsp *macSliceCfgRsp) return (*macDuSliceCfgRspOpts[rspPst.selector])(&rspPst, macSliceCfgRsp); } -/** - * @brief free the slice cfg rsp received from sch. - * - * @details - * - * Function : freeSchSliceCfgRsp - * - * This free the slice cfg rsp received from sch - * - * @param[in] SchSliceCfgRsp *sliceCfgrsp - * @return int - * -# ROK - **/ -void freeSchSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp) -{ - uint8_t cfgIdx = 0; - - if(schSliceCfgRsp) - { - if(schSliceCfgRsp->numSliceCfgRsp) - { - for(cfgIdx = 0; cfgIdx< schSliceCfgRsp->numSliceCfgRsp; cfgIdx++) - { - MAC_FREE(schSliceCfgRsp->listOfSliceCfgRsp[cfgIdx], sizeof(SliceRsp)); - } - MAC_FREE(schSliceCfgRsp->listOfSliceCfgRsp, schSliceCfgRsp->numSliceCfgRsp * sizeof(SliceRsp*)); - } - } -} /** * @brief Mac process the slice cfg rsp received from sch. @@ -874,6 +797,7 @@ void freeSchSliceCfgRsp(SchSliceCfgRsp *schSliceCfgRsp) * @return int * -# ROK **/ + uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceCfgRsp) { MacSliceCfgRsp *macSliceCfgRsp = NULLP; @@ -886,40 +810,39 @@ uint8_t MacProcSchSliceCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceCfgRsp) DU_LOG("\nERROR --> MAC : Failed to allocate memory in MacProcSchSliceCfgRsp"); return RFAILED; } - if(schSliceCfgRsp->listOfSliceCfgRsp) + macSliceCfgRsp->snssai = schSliceCfgRsp->snssai; + if(schSliceCfgRsp->rsp == RSP_OK) + macSliceCfgRsp->rsp = MAC_DU_APP_RSP_OK; + else { - if(fillMacSliceCfgRsp(schSliceCfgRsp, macSliceCfgRsp) != ROK) - { - DU_LOG("\nERROR --> MAC : Failed to fill the slice cfg response"); - return RFAILED; - } - MacSendSliceConfigRsp(macSliceCfgRsp); + macSliceCfgRsp->rsp = MAC_DU_APP_RSP_NOK; } - freeSchSliceCfgRsp(schSliceCfgRsp); + macSliceCfgRsp->cause = schSliceCfgRsp->cause; + MacSendSliceConfigRsp(macSliceCfgRsp); } return ROK; } /** -* @brief send slice cfg response to duapp. -* -* @details -* -* Function : MacSendSliceReconfigRsp -* -* sends slice cfg response to duapp -* -* @param[in] MacSliceCfgRsp macSliceRecfgRsp -* @return int -* -# ROK -**/ -uint8_t MacSendSliceReconfigRsp(MacSliceCfgRsp *macSliceRecfgRsp) + * @brief send slice cfg response to duapp. + * + * @details + * + * Function : MacSendSliceReconfigRsp + * + * sends slice cfg response to duapp + * + * @param[in] MacSliceRecfgRsp macSliceRecfgRsp + * @return int + * -# ROK + **/ +uint8_t MacSendSliceReconfigRsp(MacSliceRecfgRsp *macSliceRecfgRsp) { Pst rspPst; memset(&rspPst, 0, sizeof(Pst)); FILL_PST_MAC_TO_DUAPP(rspPst, EVENT_MAC_SLICE_RECFG_RSP); - return (*macDuSliceReCfgRspOpts[rspPst.selector])(&rspPst, macSliceRecfgRsp); + return (*macDuSliceRecfgRspOpts[rspPst.selector])(&rspPst, macSliceRecfgRsp); } @@ -928,7 +851,7 @@ uint8_t MacSendSliceReconfigRsp(MacSliceCfgRsp *macSliceRecfgRsp) * * @details * - * Function : MacProcSchSliceReCfgRsp + * Function : MacProcSchSliceRecfgRsp * * This function process the slice cfg rsp received from sch * @@ -937,29 +860,28 @@ uint8_t MacSendSliceReconfigRsp(MacSliceCfgRsp *macSliceRecfgRsp) * @return int * -# ROK **/ -uint8_t MacProcSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceRecfgRsp) +uint8_t MacProcSchSliceRecfgRsp(Pst *pst, SchSliceRecfgRsp *schSliceRecfgRsp) { - MacSliceCfgRsp *macSliceReCfgRsp = NULLP; + MacSliceRecfgRsp *macSliceRecfgRsp = NULLP; if(schSliceRecfgRsp) { - MAC_ALLOC_SHRABL_BUF(macSliceReCfgRsp, sizeof(MacSliceCfgRsp)); - if(macSliceReCfgRsp == NULLP) + MAC_ALLOC_SHRABL_BUF(macSliceRecfgRsp, sizeof(MacSliceRecfgRsp)); + if(macSliceRecfgRsp == NULLP) { - DU_LOG("\nERROR --> MAC : Failed to allocate memory in MacProcSchSliceReCfgRsp"); + DU_LOG("\nERROR --> MAC : Failed to allocate memory in MacProcSchSliceRecfgRsp"); return RFAILED; } - if(schSliceRecfgRsp->listOfSliceCfgRsp) + macSliceRecfgRsp->snssai = schSliceRecfgRsp->snssai; + if(schSliceRecfgRsp->rsp == RSP_OK) + macSliceRecfgRsp->rsp = MAC_DU_APP_RSP_OK; + else { - if(fillMacSliceCfgRsp(schSliceRecfgRsp, macSliceReCfgRsp) != ROK) - { - DU_LOG("\nERROR --> MAC : Failed to fill the slice Recfg response"); - return RFAILED; - } - MacSendSliceReconfigRsp(macSliceReCfgRsp); + macSliceRecfgRsp->rsp = MAC_DU_APP_RSP_NOK; } - freeSchSliceCfgRsp(schSliceRecfgRsp); + macSliceRecfgRsp->cause = schSliceRecfgRsp->cause; + MacSendSliceReconfigRsp(macSliceRecfgRsp); } return ROK; } @@ -974,11 +896,11 @@ uint8_t MacProcSchSliceReCfgRsp(Pst *pst, SchSliceCfgRsp *schSliceRecfgRsp) * This function process the downlink pcch indication received from DUAPP * * @param[in] Pst *pst - * @param[in] MacPcchInd *pcchInd + * @param[in] DlPcchInd *pcchInd * @return int * -# ROK **/ -uint8_t MacProcDlPcchInd(Pst *pst, MacPcchInd *pcchInd) +uint8_t MacProcDlPcchInd(Pst *pst, DlPcchInd *pcchInd) { uint8_t ret = RFAILED; uint16_t cellIdx = 0; @@ -1026,7 +948,7 @@ uint8_t MacProcDlPcchInd(Pst *pst, MacPcchInd *pcchInd) memcpy(schPageInd->pagePdu, pcchInd->pcchPdu, pcchInd->pduLen); FILL_PST_MAC_TO_SCH(schPst, EVENT_PAGING_IND_TO_SCH); - ret = (*macSchPagingIndOpts[schPst.selector])(&schPst, schPageInd); + ret = SchMessageRouter(&schPst, (void *)schPageInd); } } } @@ -1035,7 +957,7 @@ uint8_t MacProcDlPcchInd(Pst *pst, MacPcchInd *pcchInd) { MAC_FREE_SHRABL_BUF(pst->region, pst->pool, pcchInd->pcchPdu, pcchInd->pduLen); } - MAC_FREE_SHRABL_BUF(pst->region, pst->pool, pcchInd, sizeof(MacPcchInd)); + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, pcchInd, sizeof(DlPcchInd)); } else { @@ -1043,6 +965,154 @@ uint8_t MacProcDlPcchInd(Pst *pst, MacPcchInd *pcchInd) } return ret; } + +/** + * @brief Mac process the downlink Broadcast Req received from DUAPP + * + * @details + * + * Function : MacProcDlBroadcastReq + * + * This function process the downlink Broadcast Req received from DUAPP + * + * @param[in] Pst *pst + * @param[in] DlBroadcastReq *dlBroadcastReq + * @return int + * -# ROK + **/ +uint8_t MacProcDlBroadcastReq(Pst *pst, MacDlBroadcastReq *dlBroadcastReq) +{ + uint8_t ret = ROK, idx=0; + uint16_t cellIdx = 0; + + if(dlBroadcastReq) + { + DU_LOG("\nINFO --> MAC : Received DL braodcast req from DU_APP for cellId[%d]", dlBroadcastReq->cellId); + + GET_CELL_IDX(dlBroadcastReq->cellId, cellIdx); + + if(macCb.macCell[cellIdx] == NULLP || macCb.macCell[cellIdx]->cellId != dlBroadcastReq->cellId) + { + ret = RFAILED; + DU_LOG("\nERROR --> MAC : MacProcDlBroadcastReq(): CellId[%d] does not exist", dlBroadcastReq->cellId); + } + else + { + /*TODO - Complete the processing of DL Broadcast Request*/ + } + for(idx = 0; idxnumSiBlock; idx++) + { + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlBroadcastReq->siSchedulingInfo[idx]->siAreaID, sizeof(uint8_t)); + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlBroadcastReq->siSchedulingInfo[idx], sizeof(SiSchedulingInfo)); + } + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, dlBroadcastReq, sizeof(MacDlBroadcastReq)); + } + else + { + ret = RFAILED; + DU_LOG("\nERROR --> MAC : MacProcDlBroadcastReq(): Received Null pointer"); + } + return ret; +} + +/** + * @brief Mac process the statistics Req received from DUAPP + * + * @details + * + * Function : MacProcStatsReq + * + * This function process the statistics request from duapp + * + * @param[in] Pst *pst + * @param[in] StatsReq *statsReq + * @return int + * -# ROK + **/ +uint8_t MacProcStatsReq(Pst *pst, MacStatsReq *macStatsReq) +{ + uint8_t macStatsIdx = 0, schStatsIdx = 0; + uint8_t ret = RFAILED; + bool measTypeInvalid = false; + Pst schPst; + SchStatsReq *schStatsReq = NULLP; + CauseOfResult cause; + + if(macStatsReq) + { + DU_LOG("\nINFO --> MAC : Received Statistics Request from DU_APP"); + + MAC_ALLOC(schStatsReq, sizeof(SchStatsReq)); + if(schStatsReq == NULLP) + { + DU_LOG("\nERROR --> MAC : MacProcStatsReq: Failed to allocate memory"); + cause = RESOURCE_UNAVAILABLE; + } + else + { + schStatsReq->numStats = 0; + for(macStatsIdx=0; macStatsIdx < macStatsReq->numStats; macStatsIdx++) + { + /* Checking each measurement type to send only SCH related + * measurement config to SCH + * This will be useful in future when some measurement type will + * be configured for SCH and rest for only MAC */ + switch(macStatsReq->statsList[macStatsIdx].type) + { + case MAC_DL_TOTAL_PRB_USAGE: + { + schStatsReq->statsList[schStatsIdx].type = SCH_DL_TOTAL_PRB_USAGE; + break; + } + case MAC_UL_TOTAL_PRB_USAGE: + { + schStatsReq->statsList[schStatsIdx].type = SCH_UL_TOTAL_PRB_USAGE; + break; + } + default: + { + DU_LOG("\nERROR --> MAC : MacProcStatsReq: Invalid measurement type [%d]", \ + macStatsReq->statsList[macStatsIdx].type); + measTypeInvalid = true; + } + } + + if(!measTypeInvalid) + { + schStatsReq->statsList[schStatsIdx].periodicity = macStatsReq->statsList[macStatsIdx].periodicity; + schStatsIdx++; + measTypeInvalid = false; + } + } + schStatsReq->numStats = schStatsIdx; + + /* If no measurement types are valid, it is failure scenario. + * Even if one measurement type is valid, send to SCH */ + if(schStatsReq->numStats) + { + FILL_PST_MAC_TO_SCH(schPst, EVENT_STATISTICS_REQ_TO_SCH); + ret = SchMessageRouter(&schPst, (void *)schStatsReq); + } + else + { + cause = PARAM_INVALID; + } + } + MAC_FREE_SHRABL_BUF(pst->region, pst->pool, macStatsReq, sizeof(MacStatsReq)); + } + else + { + DU_LOG("\nERROR --> MAC : MacProcStatsReq(): Received Null pointer"); + cause = PARAM_INVALID; + } + + if(ret == RFAILED) + { + /* Send negative acknowledgment to DU APP. TBD in next gerrit */ + } + return ret; +} + /********************************************************************** End of file **********************************************************************/