+
+/*******************************************************************
+ *
+ * @brief Configures the DU Parameters
+ *
+ * @details
+ *
+ * Function : fillDuPort
+ *
+ * Functionality:
+ * - fills the DU Ports.
+ *
+ * @params[in] duPort array to be filled
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ * ****************************************************************/
+uint8_t fillDuPort(uint16_t *duPort)
+{
+
+#ifdef O1_ENABLE
+ duPort[F1_INTERFACE] = g_cfg.DU_Port;
+ duPort[E2_INTERFACE] = g_cfg.RIC_Port;
+#else
+ duPort[F1_INTERFACE] = F1_SCTP_PORT; /* DU Port idx 0 38472 */
+ duPort[E2_INTERFACE] = E2_SCTP_PORT; /* RIC Port idx 1 36421 */
+#endif
+ return ROK;
+}
+
+/*******************************************************************
+ *
+ * @brief Configures the DU Parameters
+ *
+ * @details
+ *
+ * Function : calcSliv
+ *
+ * Functionality:
+ * - calculate SLIV value from start and length field
+ *
+ * @params[in] start symbol
+ * @params[in] length of symbols
+ * @return SLIV value
+ *
+ * ****************************************************************/
+uint16_t calcSliv(uint8_t startSymbol, uint8_t lengthSymbol)
+{
+ uint16_t sliv = 0;
+ if((lengthSymbol-1) <= 7)
+ {
+ sliv = NUM_SYMBOLS_PER_SLOT * (lengthSymbol-1) + startSymbol;
+ }
+ else
+ {
+ sliv = NUM_SYMBOLS_PER_SLOT * (NUM_SYMBOLS_PER_SLOT - lengthSymbol + 1) \
+ + (NUM_SYMBOLS_PER_SLOT - 1 - startSymbol);
+ }
+ return sliv;
+}
+
+
+/*******************************************************************
+ *
+ * @brief Configures serving cell config common in sib1
+ *
+ * @details
+ *
+ * Function : fillServCellCfgCommSib
+ *
+ * Functionality:
+ * - fills Serving cell config common for SIB1
+ *
+ * @params[in] SrvCellCfgCommSib pointer
+ * @return ROK - success
+ * RFAILED - failure
+ *
+ ** ****************************************************************/
+uint8_t fillServCellCfgCommSib(SrvCellCfgCommSib *srvCellCfgComm)
+{
+ PdcchCfgCommon pdcchCfg;
+ PdschCfgCommon pdschCfg;
+ PcchCfg pcchCfg;
+ RachCfgCommon rachCfg;
+ PuschCfgCommon puschCfg;
+ 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 = convertScsValToScsEnum(cellParams.ssbSubCarrierSpacing);
+ srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = cellParams.bSChannelBwUL;
+#else
+ srvCellCfgComm->dlCfg.dlScsCarrier.scsOffset = SSB_SUBCARRIER_OFFSET;
+ srvCellCfgComm->dlCfg.dlScsCarrier.scs = NR_SCS;
+ srvCellCfgComm->dlCfg.dlScsCarrier.scsBw = NR_BANDWIDTH;
+#endif
+ srvCellCfgComm->dlCfg.locAndBw = FREQ_LOC_BW;
+
+ /* Configuring PDCCH Config Common For SIB1 */
+ pdcchCfg.present = BWP_DownlinkCommon__pdcch_ConfigCommon_PR_setup;
+ pdcchCfg.ctrlRsrcSetZero = CORESET_0_INDEX;
+ 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.monitorSlotPrdAndOff = \
+ SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1;
+ pdcchCfg.monitorSymbolsInSlot[0] = 128;
+ pdcchCfg.monitorSymbolsInSlot[1] = 0;
+ pdcchCfg.numCandAggLvl1 = SearchSpace__nrofCandidates__aggregationLevel1_n8;
+ pdcchCfg.numCandAggLvl2 = SearchSpace__nrofCandidates__aggregationLevel2_n4;
+ pdcchCfg.numCandAggLvl4 = SearchSpace__nrofCandidates__aggregationLevel4_n2;
+ pdcchCfg.numCandAggLvl8 = SearchSpace__nrofCandidates__aggregationLevel8_n1;
+ pdcchCfg.numCandAggLvl16 = SearchSpace__nrofCandidates__aggregationLevel16_n0;
+ pdcchCfg.searchSpcType = SearchSpace__searchSpaceType_PR_common;
+ pdcchCfg.commSrchSpcDciFrmt = PDCCH_SERACH_SPACE_DCI_FORMAT;
+ pdcchCfg.searchSpcSib1 = PDCCH_SEARCH_SPACE_ID_SIB1;
+ pdcchCfg.pagingSearchSpc = PDCCH_SEARCH_SPACE_ID_PAGING;
+ pdcchCfg.raSearchSpc = PDCCH_SEARCH_SPACE_ID_PAGING;
+ srvCellCfgComm->dlCfg.pdcchCfg = pdcchCfg;
+
+ /* Configuring PDSCH Config Common For SIB1 */
+ 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].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].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;
+
+ /* Configuring PCCH Config for SIB1 */
+ 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 = 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;
+
+ /* Configuring RACH Config Common for SIB1 */
+ rachCfg.present = BWP_UplinkCommon__rach_ConfigCommon_PR_setup;
+ rachCfg.prachCfgIdx = PRACH_CONFIG_IDX;
+ rachCfg.msg1Fdm = RACH_ConfigGeneric__msg1_FDM_one;
+ rachCfg.msg1FreqStart = PRACH_FREQ_START;
+ rachCfg.zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG;
+ rachCfg.preambleRcvdTgtPwr = PRACH_PREAMBLE_RCVD_TGT_PWR;
+ rachCfg.preambleTransMax = RACH_ConfigGeneric__preambleTransMax_n200;
+ rachCfg.pwrRampingStep = RACH_ConfigGeneric__powerRampingStep_dB2;
+ rachCfg.raRspWindow = RACH_ConfigGeneric__ra_ResponseWindow_sl10;
+ rachCfg.numRaPreamble = NUM_RA_PREAMBLE;
+ 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;
+ rachCfg.rootSeqIdx = ROOT_SEQ_IDX;
+ rachCfg.msg1Scs = PRACH_SUBCARRIER_SPACING ;
+ rachCfg.restrictedSetCfg = PRACH_RESTRICTED_SET_CFG;
+ srvCellCfgComm->ulCfg.rachCfg = rachCfg;
+
+ /* Configuring PUSCH Config Common for SIB1 */
+ puschCfg.puschCfgPresent = BWP_UplinkCommon__pusch_ConfigCommon_PR_setup;
+ puschCfg.numTimeDomRsrcAlloc = 2;
+ puschCfg.timeDomAllocList[0].k2 = PUSCH_K2_CFG1;
+ puschCfg.timeDomAllocList[0].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
+ puschCfg.timeDomAllocList[0].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
+ puschCfg.timeDomAllocList[1].k2 = PUSCH_K2_CFG2;
+ puschCfg.timeDomAllocList[1].mapType = PUSCH_TimeDomainResourceAllocation__mappingType_typeA;
+ puschCfg.timeDomAllocList[1].sliv = calcSliv(PUSCH_START_SYMBOL,PUSCH_LENGTH_SYMBOL);
+ puschCfg.msg3DeltaPreamble = PUSCH_MSG3_DELTA_PREAMBLE;
+ puschCfg.p0NominalWithGrant = PUSCH_P0_NOMINAL_WITH_GRANT;
+ srvCellCfgComm->ulCfg.puschCfg = puschCfg;
+
+ /* Configuring PUCCH Config Common for SIB1 */
+ pucchCfg.present = BWP_UplinkCommon__pucch_ConfigCommon_PR_setup;
+ pucchCfg.rsrcComm = PUCCH_RSRC_COMMON;
+ pucchCfg.grpHop = PUCCH_ConfigCommon__pucch_GroupHopping_neither;
+ pucchCfg.p0Nominal = PUCCH_P0_NOMINAL;
+ srvCellCfgComm->ulCfg.pucchCfg = pucchCfg;
+
+ /* Configuring TDD UL DL config common */
+ tddCfg.refScs = SubcarrierSpacing_kHz30;
+ tddCfg.txPrd = TDD_UL_DL_Pattern__dl_UL_TransmissionPeriodicity_ms5;
+ tddCfg.numDlSlots = NUM_DL_SLOTS;
+ tddCfg.numDlSymbols = NUM_DL_SYMBOLS;
+ tddCfg.numUlSlots = NUM_UL_SLOTS;
+ tddCfg.numUlSymbols = NUM_UL_SYMBOLS;
+ srvCellCfgComm->tddCfg = tddCfg;
+
+ srvCellCfgComm->ssbPosInBurst = 192;
+ srvCellCfgComm->ssbPrdServingCell = SSB_PERIODICITY;
+ srvCellCfgComm->ssPbchBlockPwr = SSB_PBCH_PWR;
+
+ return ROK;
+}
+