X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_cfg.c;h=8c08491423ad27e14efb44595cc405b5534635f4;hb=051044374d0ed16423e2ef98c70395fde934f0ce;hp=3ddf9004d118111e06420a18a92574c7fbca8357;hpb=b6b9cd39450a3cbf7ec962f2d8c65540af28eb29;p=o-du%2Fl2.git diff --git a/src/du_app/du_cfg.c b/src/du_app/du_cfg.c index 3ddf9004d..8c0849142 100644 --- a/src/du_app/du_cfg.c +++ b/src/du_app/du_cfg.c @@ -27,10 +27,10 @@ #include "du_cfg.h" #include "du_mgr.h" #include "du_utils.h" +#include "du_f1ap_conversions.h" #include "OCTET_STRING.h" #include "BIT_STRING.h" #include "odu_common_codec.h" -#include "du_sys_info_hdl.h" #include "MIB.h" #include "SearchSpace.h" #include "SIB-TypeInfo.h" @@ -51,6 +51,8 @@ #include "RACH-ConfigCommon.h" #include "BWP-DownlinkCommon.h" #include "BWP-UplinkCommon.h" +#include "TDD-UL-DL-ConfigCommon.h" +#include "du_sys_info_hdl.h" #ifdef O1_ENABLE #include "CmInterface.h" @@ -121,6 +123,7 @@ void FillSlotConfig() } #endif + /******************************************************************* * @brief Reads the CL Configuration. * @@ -138,8 +141,6 @@ void FillSlotConfig() * * ****************************************************************/ - -/* This function is used to fill up the cell configuration for CL */ uint8_t readMacCfg() { uint8_t idx=0, sliceIdx=0; @@ -206,8 +207,8 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.ssbCfg.ssbOffsetPointA = OFFSET_TO_POINT_A; duCfgParam.macCellCfg.ssbCfg.betaPss = BETA_PSS; #ifdef O1_ENABLE - duCfgParam.macCellCfg.ssbCfg.scsCmn = cellParams.ssbSubCarrierSpacing; - duCfgParam.macCellCfg.ssbCfg.ssbPeriod = cellParams.ssbPeriodicity; + duCfgParam.macCellCfg.ssbCfg.scsCmn = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing); + duCfgParam.macCellCfg.ssbCfg.ssbPeriod = convertScsPeriodicityToEnum(cellParams.ssbPeriodicity); duCfgParam.macCellCfg.ssbCfg.ssbScOffset = cellParams.ssbOffset; #else duCfgParam.macCellCfg.ssbCfg.scsCmn = NR_SCS; @@ -215,7 +216,6 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.ssbCfg.ssbScOffset = SSB_SUBCARRIER_OFFSET; #endif duCfgParam.macCellCfg.ssbCfg.ssbMask[0] = 1; /* only one SSB is transmitted */ - duCfgParam.macCellCfg.ssbCfg.ssbMask[1] = 0; if(BuildMibPdu() != ROK) { DU_LOG("\nERROR --> Failed to build MIB PDU"); @@ -232,7 +232,7 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.prachCfg.pres = TRUE; duCfgParam.macCellCfg.prachCfg.prachCfgIdx = PRACH_CONFIG_IDX; duCfgParam.macCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN; - duCfgParam.macCellCfg.prachCfg.prachSubcSpacing = fetchScsValue(PRACH_SUBCARRIER_SPACING); + duCfgParam.macCellCfg.prachCfg.prachSubcSpacing = convertScsEnumValToScsVal(PRACH_SUBCARRIER_SPACING); duCfgParam.macCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG; duCfgParam.macCellCfg.prachCfg.msg1Fdm = NUM_PRACH_FDM; duCfgParam.macCellCfg.prachCfg.msg1FreqStart = PRACH_FREQ_START; @@ -253,7 +253,10 @@ uint8_t readMacCfg() } *(duCfgParam.macCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ; } + + duCfgParam.macCellCfg.prachCfg.totalNumRaPreamble = NUM_RA_PREAMBLE; duCfgParam.macCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH; + duCfgParam.macCellCfg.prachCfg.numCbPreamblePerSsb = CB_PREAMBLE_PER_SSB; duCfgParam.macCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND; duCfgParam.macCellCfg.prachCfg.raContResTmr = RA_CONT_RES_TIMER; duCfgParam.macCellCfg.prachCfg.rsrpThreshSsb = RSRP_THRESHOLD_SSB; @@ -279,7 +282,19 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.sib1Cfg.coresetZeroIndex = CORESET_0_INDEX; duCfgParam.macCellCfg.sib1Cfg.searchSpaceZeroIndex = SEARCHSPACE_0_INDEX; duCfgParam.macCellCfg.sib1Cfg.sib1Mcs = DEFAULT_MCS; - + + duCfgParam.macCellCfg.sib1Cfg.pagingCfg.numPO = duCfgParam.sib1Params.srvCellCfgCommSib.dlCfg.pcchCfg.ns; + if((duCfgParam.sib1Params.srvCellCfgCommSib.dlCfg.pcchCfg.firstPDCCHMontioringType != \ + PCCH_Config__firstPDCCH_MonitoringOccasionOfPO_PR_NOTHING) && (duCfgParam.macCellCfg.sib1Cfg.pagingCfg.numPO != 0)) + { + duCfgParam.macCellCfg.sib1Cfg.pagingCfg.poPresent = TRUE; + memcpy(duCfgParam.macCellCfg.sib1Cfg.pagingCfg.pagingOcc, + duCfgParam.sib1Params.srvCellCfgCommSib.dlCfg.pcchCfg.firstPDCCHMontioringInfo,MAX_PO_PER_PF); + } + else + { + duCfgParam.macCellCfg.sib1Cfg.pagingCfg.poPresent = FALSE; + } /* fill Intial DL BWP */ duCfgParam.macCellCfg.initialDlBwp.bwp.firstPrb = 0; @@ -304,7 +319,7 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.initialDlBwp.pdcchCommon.commonSearchSpace. candidate.aggLevel16 = 0; - duCfgParam.macCellCfg.initialDlBwp.pdschCommon.numTimeDomAlloc = 2; + duCfgParam.macCellCfg.initialDlBwp.pdschCommon.numTimeDomAlloc = NUM_TIME_DOM_RSRC_ALLOC; idx = 0; duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].k0 = PDSCH_K0_CFG1; duCfgParam.macCellCfg.initialDlBwp.pdschCommon.timeDomRsrcAllocList[idx].mappingType = @@ -355,7 +370,7 @@ uint8_t readMacCfg() duCfgParam.macCellCfg.initialUlBwp.pucchCommon.pucchGroupHopping = PUCCH_GROUP_HOPPING; /* Plmn And SNSSAI Configuration */ - memset(&duCfgParam.macCellCfg.plmnInfoList.plmn, &duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.srvdPlmn[0].plmn,\ + memcpy(&duCfgParam.macCellCfg.plmnInfoList.plmn, &duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.srvdPlmn[0].plmn,\ sizeof(Plmn)); taiSliceSuppLst = &duCfgParam.srvdCellLst[0].duCellInfo.cellInfo.srvdPlmn[0].taiSliceSuppLst; duCfgParam.macCellCfg.plmnInfoList.numSupportedSlice = taiSliceSuppLst->numSupportedSlices; @@ -381,6 +396,49 @@ uint8_t readMacCfg() memcpy(duCfgParam.macCellCfg.plmnInfoList.snssai[sliceIdx], taiSliceSuppLst->snssai[sliceIdx], sizeof(Snssai)); } } + +#ifndef O1_ENABLE + + /*Note: Static Configuration, when O1 is not configuring the RRM policy*/ + RrmPolicyList rrmPolicy; + rrmPolicy.id[0] = 1; + rrmPolicy.resourceType = PRB; + rrmPolicy.rRMMemberNum = 1; + memcpy(rrmPolicy.rRMPolicyMemberList[0].mcc,duCfgParam.macCellCfg.plmnInfoList.plmn.mcc, 3*sizeof(uint8_t)); + memcpy(rrmPolicy.rRMPolicyMemberList[0].mnc,duCfgParam.macCellCfg.plmnInfoList.plmn.mnc, 3*sizeof(uint8_t)); + rrmPolicy.rRMPolicyMemberList[0].sst = 1; + rrmPolicy.rRMPolicyMemberList[0].sd[0] = 2; + rrmPolicy.rRMPolicyMemberList[0].sd[1] = 3; + rrmPolicy.rRMPolicyMemberList[0].sd[2] = 4; + rrmPolicy.rRMPolicyMaxRatio = 90; + rrmPolicy.rRMPolicyMinRatio = 30; + rrmPolicy.rRMPolicyDedicatedRatio = 10; + + cpyRrmPolicyInDuCfgParams(&rrmPolicy, 1, &duCfgParam.tempSliceCfg); + +#endif + +#ifdef NR_DRX + /* Storing the DRX configuration */ + memset(&duCfgParam.macCellCfg.drxInfo, 0, sizeof(DrxInfo)); + duCfgParam.macCellCfg.drxInfo.drxOnDurationTimer.onDurationTimerValInMs = DRX_ONDURATION_TIMER_VALUE_PRESENT_IN_MS; + if(!duCfgParam.macCellCfg.drxInfo.drxOnDurationTimer.onDurationTimerValInMs) + duCfgParam.macCellCfg.drxInfo.drxOnDurationTimer.onDurationtimerValue.subMilliSeconds = \ + DRX_ONDURATION_TIMER_VALUE_IN_SUBMS; + else + duCfgParam.macCellCfg.drxInfo.drxOnDurationTimer.onDurationtimerValue.milliSeconds = \ + DRX_ONDURATION_TIMER_VALUE_IN_MS; + duCfgParam.macCellCfg.drxInfo.drxInactivityTimer = DRX_INACTIVITY_TIMER; + duCfgParam.macCellCfg.drxInfo.drxHarqRttTimerDl = DRX_HARQ_RTT_TIMER_DL; + duCfgParam.macCellCfg.drxInfo.drxHarqRttTimerUl = DRX_HARQ_RTT_TIMER_UL; + duCfgParam.macCellCfg.drxInfo.drxRetransmissionTimerDl = DRX_RETRANSMISSION_TIMER_DL; + duCfgParam.macCellCfg.drxInfo.drxRetransmissionTimerUl = DRX_RETRANSMISSION_TIMER_UL; + duCfgParam.macCellCfg.drxInfo.drxLongCycleStartOffset.drxLongCycleStartOffsetChoice = DRX_LONG_CYCLE_START_OFFSET_CHOICE; + duCfgParam.macCellCfg.drxInfo.drxLongCycleStartOffset.drxLongCycleStartOffsetVal = DRX_LONG_CYCLE_START_OFFSET_VAL; + duCfgParam.macCellCfg.drxInfo.shortDrx.drxShortCycle = DRX_SHORT_CYCLE; + duCfgParam.macCellCfg.drxInfo.shortDrx.drxShortCycleTimer = DRX_SHORT_CYCLE_TIMER; + duCfgParam.macCellCfg.drxInfo.drxSlotOffset = DRX_SLOT_OFFSET; +#endif return ROK; } @@ -471,12 +529,18 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm) PucchCfgCommon pucchCfg; TddUlDlCfgCommon tddCfg; +#ifdef O1_ENABLE + srvCellCfgComm->scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing); +#else + srvCellCfgComm->scs = NR_SCS; +#endif + /* Configuring DL Config Common for SIB1*/ srvCellCfgComm->dlCfg.freqBandInd = NR_FREQ_BAND; srvCellCfgComm->dlCfg.offsetToPointA = OFFSET_TO_POINT_A; #ifdef O1_ENABLE srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = cellParams.ssbOffset; - srvCellCfgComm->dlCfg.dlScsCarrier.scs = cellParams.ssbSubCarrierSpacing; + srvCellCfgComm->dlCfg.dlScsCarrier.scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing); srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = cellParams.bSChannelBwUL; #else srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET; @@ -491,9 +555,7 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm) pdcchCfg.searchSpcZero = SEARCHSPACE_0_INDEX; pdcchCfg.searchSpcId = PDCCH_SEARCH_SPACE_ID; pdcchCfg.ctrlRsrcSetId = PDCCH_CTRL_RSRC_SET_ID; - pdcchCfg.monitorSlotPrdAndOffPresent = \ - - SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; + pdcchCfg.monitorSlotPrdAndOffPresent = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; //pdcchCfg.monitorSlotPrdAndOff = \ SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; pdcchCfg.monitorSymbolsInSlot[0] = 128; @@ -514,38 +576,41 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm) pdschCfg.present = BWP_DownlinkCommon__pdsch_ConfigCommon_PR_setup; pdschCfg.numTimeDomRsrcAlloc = 2; pdschCfg.timeDomAlloc[0].k0 = PDSCH_K0_CFG1; - pdschCfg.timeDomAlloc[0].mapType = \ - PDSCH_TimeDomainResourceAllocation__mappingType_typeA; + pdschCfg.timeDomAlloc[0].mapType = PDSCH_TimeDomainResourceAllocation__mappingType_typeA; pdschCfg.timeDomAlloc[0].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL); pdschCfg.timeDomAlloc[1].k0 = PDSCH_K0_CFG2; - pdschCfg.timeDomAlloc[1].mapType = \ - PDSCH_TimeDomainResourceAllocation__mappingType_typeA; + pdschCfg.timeDomAlloc[1].mapType = PDSCH_TimeDomainResourceAllocation__mappingType_typeA; pdschCfg.timeDomAlloc[1].sliv = calcSliv(PDSCH_START_SYMBOL,PDSCH_LENGTH_SYMBOL); srvCellCfgComm->dlCfg.pdschCfg = pdschCfg; /* Configuring BCCH Config for SIB1 */ - srvCellCfgComm->dlCfg.bcchCfg.modPrdCoeff = \ - BCCH_Config__modificationPeriodCoeff_n16; + srvCellCfgComm->dlCfg.bcchCfg.modPrdCoeff = BCCH_Config__modificationPeriodCoeff_n16; /* Configuring PCCH Config for SIB1 */ - pcchCfg.dfltPagingCycle = PagingCycle_rf256; - pcchCfg.nAndPagingFrmOffPresent = PCCH_Config__nAndPagingFrameOffset_PR_oneT; - pcchCfg.numPagingOcc = PCCH_Config__ns_four; + pcchCfg.dfltPagingCycle = convertPagingCycleEnumToValue(PagingCycle_rf256); + pcchCfg.nAndPagingFrmOffsetType = PCCH_Config__nAndPagingFrameOffset_PR_oneT; + pcchCfg.pageFrameOffset = 0; + pcchCfg.ns = convertNsEnumToValue(PCCH_Config__ns_one); + pcchCfg.firstPDCCHMontioringType = PCCH_Config__firstPDCCH_MonitoringOccasionOfPO_PR_sCS30KHZoneT_SCS15KHZhalfT; + memset(pcchCfg.firstPDCCHMontioringInfo, 0, sizeof(uint16_t)); + pcchCfg.firstPDCCHMontioringInfo[0] = 44; + srvCellCfgComm->dlCfg.pcchCfg = pcchCfg; /* Configuring UL Config Common */ #ifdef O1_ENABLE srvCellCfgComm->ulCfg.ulScsCarrier.scsOffset = cellParams.ssbOffset; - srvCellCfgComm->ulCfg.ulScsCarrier.scs = cellParams.ssbSubCarrierSpacing; + srvCellCfgComm->ulCfg.ulScsCarrier.scs = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing); srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = cellParams.bSChannelBwUL; #else srvCellCfgComm->ulCfg.ulScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET; srvCellCfgComm->ulCfg.ulScsCarrier.scs = NR_SCS; srvCellCfgComm->ulCfg.ulScsCarrier.scsBw = NR_BANDWIDTH; #endif + srvCellCfgComm->ulCfg.freqBandInd = NR_FREQ_BAND; srvCellCfgComm->ulCfg.pMax = UL_P_MAX; srvCellCfgComm->ulCfg.locAndBw = FREQ_LOC_BW; srvCellCfgComm->ulCfg.timeAlignTimerComm = TimeAlignmentTimer_infinity; @@ -561,9 +626,8 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm) rachCfg.pwrRampingStep = RACH_ConfigGeneric__powerRampingStep_dB2; rachCfg.raRspWindow = RACH_ConfigGeneric__ra_ResponseWindow_sl10; rachCfg.numRaPreamble = NUM_RA_PREAMBLE; - rachCfg.ssbPerRachOccPresent = \ - RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one; - rachCfg.numSsbPerRachOcc = SSB_PER_RACH; + rachCfg.numSsbPerRachOcc = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one; + rachCfg.numCbPreamblePerSsb = CB_PREAMBLE_PER_SSB; rachCfg.contResTimer = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64; rachCfg.rsrpThreshSsb = RSRP_THRESHOLD_SSB; rachCfg.rootSeqIdxPresent = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139; @@ -602,7 +666,7 @@ uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm) srvCellCfgComm->tddCfg = tddCfg; srvCellCfgComm->ssbPosInBurst = 192; - srvCellCfgComm->ssbPrdServingCell = SSB_PERIODICITY_20MS; + srvCellCfgComm->ssbPrdServingCell = SSB_PERIODICITY; srvCellCfgComm->ssPbchBlockPwr = SSB_PBCH_PWR; return ROK; @@ -816,49 +880,61 @@ uint8_t readCfg() return RFAILED; } #ifdef O1_ENABLE - memcpy(taiSliceSuppLst->snssai[sliceIdx]->sd, cellParams.plmnList[sliceIdx].sd, \ -SD_SIZE*sizeof(uint8_t)); - taiSliceSuppLst->snssai[sliceIdx]->sst = cellParams.plmnList[sliceIdx].sst; + memcpy(taiSliceSuppLst->snssai[sliceIdx]->sd, cellParams.plmnList[sliceIdx].sd, \ + SD_SIZE*sizeof(uint8_t)); + taiSliceSuppLst->snssai[sliceIdx]->sst = cellParams.plmnList[sliceIdx].sst; #else memcpy(taiSliceSuppLst->snssai[sliceIdx], &snssai[sliceIdx], sizeof(Snssai)); #endif - } + } } - /* NR Mode info */ -#ifdef O1_ENABLE - /* TAC and EPSTAC */ - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.epsTac = cellParams.nRTAC; //to check and fill - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.tac = cellParams.nRTAC; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = cellParams.arfcnUL; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = cellParams.arfcnSUL; -#else - /* TAC and EPSTAC */ - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.epsTac = DU_TAC; //to check and fill - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.tac = DU_TAC; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.nrArfcn = NR_UL_ARFCN; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN; -#endif - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.fdd.ulNrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106; -#if 0 /* NR Mode info */ - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_ARFCN; +#ifdef NR_TDD + /* NR TDD Mode info */ +#ifdef O1_ENABLE + duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = cellParams.arfcnUL; + duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = cellParams.arfcnSUL; + duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = convertScsPeriodicityToEnum(cellParams.ssbPeriodicity); +#else + duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.nrArfcn = NR_UL_ARFCN; duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulArfcn = SUL_ARFCN; - duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = SCS_15; + duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrScs = SSB_PRDCTY_MS_20; +#endif duCfgParam.srvdCellLst[srvdCellIdx].duCellInfo.f1Mode.mode.tdd.nrFreqInfo.sulInfo.sulTxBw.nrb = NRB_106; for(freqBandIdx=0; freqBandIdx