X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fdu_app%2Fdu_utils.c;h=95772fe6c51861c35e3295be3b43b7c9c3ffe2a0;hb=135666f5b7d048c76f68c15bd0c6b6566d1e49e2;hp=da5a29b02bff3cae5036448321df9d2cae8341e2;hpb=829bbd114f1c3dc00c1da47bca0a8207c049df3f;p=o-du%2Fl2.git diff --git a/src/du_app/du_utils.c b/src/du_app/du_utils.c index da5a29b02..95772fe6c 100644 --- a/src/du_app/du_utils.c +++ b/src/du_app/du_utils.c @@ -1,6 +1,6 @@ /******************************************************************************* ################################################################################ -# Copyright (c) [2017-2019] [Radisys] # +# Copyright (c) [2020] [Radisys] # # # # Licensed under the Apache License, Version 2.0 (the "License"); # # you may not use this file except in compliance with the License. # @@ -14,429 +14,169 @@ # See the License for the specific language governing permissions and # # limitations under the License. # ################################################################################ -*******************************************************************************/ - -/* This file contains all utility functions */ -#if 0 -#include -#include -#include -#include -#include -#endif -#include "du_mgr.h" - -#define DU_INST 0 -#define DU_ID 1 -#define DU_IP_V4_ADDR "168.168.31.12" -#define CU_IP_V4_ADDR "168.168.31.57" -#define DU_IP_V6_ADDR "0000:0000:0000:0000:0000:0000:0000:0001" -#define DU_PORT 38472 -#define CU_PORT 38472 -#define NR_PCI 1 -#define NR_CELL_ID 1 -#define DU_NAME "Oran_OAM_DU" -#define CELL_DIR UL_DL -#define CELL_TYPE SMALL -#define DUPLEX_MODE DUP_MODE_TDD -#define DU_TAC 1 -#define PLMN_MCC0 3 -#define PLMN_MCC1 1 -#define PLMN_MCC2 1 -#define PLMN_MNC0 4 -#define PLMN_MNC1 8 -#define PLMN_MNC2 0 -#define NR_ARFCN 2079427 -#define SUL_ARFCN 100 -#define NR_FREQ_BAND 257 -#define SUL_BAND 2 -#define TIME_CFG 10 -#define NR_RANAC 150 -#define CARRIER_IDX 1 -#define NUM_TX_ANT 2 -#define NUM_RX_ANT 2 -#define FREQ_SHIFT_7P5KHZ FALSE -#define SSB_PBCH_PWR 0 -#define BCH_PAYLOAD MAC_GEN_FULL_PBCH_PAYLD -#define SUBCARRIER_SPACING 3 -#define PRB_OFFSET 0 -#define BETA_PSS BETA_PSS_0DB -#define SSB_PERIODICITTY SSB_PRDCTY_MS_20 -#define SSB_SUBCARRIER_OFFSET 0 -#define SSB_MULT_CARRIER_BAND FALSE -#define MULT_CELL_CARRIER FALSE - -#define PRACH_SEQ_LEN SHORT_SEQUENCE -#define PRACH_SUBCARRIER_SPACING 3 -#define PRACH_RESTRICTED_SET_CFG UNRESTRICTED -#define NUM_PRACH_FDM 1 -#define ROOT_SEQ_IDX 0 -#define NUM_ROOT_SEQ 1 -#define ZERO_CORRELATION_ZONE_CFG 2 -#define NUM_UNUSED_ROOT_SEQ 1 -#define UNUSED_ROOT_SEQ 1 -#define SSB_PER_RACH 3 -#define PRACH_MULT_CARRIER_BAND FALSE -#define TDD_PERIODICITY TX_PRDCTY_MS_2P5 -#define RSS_MEASUREMENT_UNIT DONT_REPORT_RSSI - -extern DuCfgParams ducfgparam; - - -/* Filling Slot configuration as : - * Slot Sym 0 Sym 1 Sym 2 Sym 3 Sym 4 Sym 5 Sym 6 Sym 7 Sym 8 Sym 9 Sym10 Sym11 Sym12 Sym13 - * 0 DL DL DL DL DL DL DL DL DL DL DL DL DL DL - * 1 DL DL DL DL DL DL DL DL DL DL DL DL DL DL - * 2 DL DL DL DL DL DL DL DL DL DL DL DL DL DL - * 3 DL DL DL DL DL DL DL DL DL DL GD GD GD UL - * 4 UL UL UL UL UL UL UL UL UL UL UL UL UL UL -*/ + *******************************************************************************/ +/* Utility definitions to be used in du app */ +#include "common_def.h" +#include "du_app_mac_inf.h" +#include "du_utils.h" + +/* Spec Ref-38.214-Table 5.1.2.1-1 */ +uint8_t slivCfgIdxTable[MAX_SLIV_CONFIG_IDX][3] = { +/*S L SLIV*/ +{ 0, 1, 0 },/* index0 */ +{ 0, 2, 14 },/* index1 */ +{ 0, 3, 28 },/* index2 */ +{ 0, 4, 42 },/* index3 */ +{ 0, 5, 56 },/* index4 */ +{ 0, 6, 70 },/* index5 */ +{ 0, 7, 84 },/* index6 */ +{ 0, 8, 98 },/* index7 */ +{ 0, 9, 97 },/* index8 */ +{ 0, 10, 83 },/* index9 */ +{ 0, 11, 69 },/* index10 */ +{ 0, 12, 55 },/* index11 */ +{ 0, 13, 41 },/* index12 */ +{ 0, 14, 27 },/* index13 */ +{ 1, 1, 1 },/* index14 */ +{ 1, 2, 15 },/* index15 */ +{ 1, 3, 29 },/* index16 */ +{ 1, 4, 43 },/* index17 */ +{ 1, 5, 57 },/* index18 */ +{ 1, 6, 71 },/* index19 */ +{ 1, 7, 85 },/* index20 */ +{ 1, 8, 99 },/* index21 */ +{ 1, 9, 96 },/* index22 */ +{ 1, 10, 82 },/* index23 */ +{ 1, 11, 68 },/* index24 */ +{ 1, 12, 54 },/* index25 */ +{ 1, 13, 40 },/* index26 */ +{ 2, 1, 2 },/* index27 */ +{ 2, 2, 16 },/* index28 */ +{ 2, 3, 30 },/* index29 */ +{ 2, 4, 44 },/* index30 */ +{ 2, 5, 58 },/* index31 */ +{ 2, 6, 72 },/* index32 */ +{ 2, 7, 86 },/* index33 */ +{ 2, 8, 100},/* index34 */ +{ 2, 9, 95 },/* index35 */ +{ 2, 10, 81 },/* index36 */ +{ 2, 11, 67 },/* index37 */ +{ 2, 12, 53 },/* index38 */ +{ 3, 1, 3 },/* index39 */ +{ 3, 2, 17 },/* index40 */ +{ 3, 3, 31 },/* index41 */ +{ 3, 4, 45 },/* index42 */ +{ 3, 5, 59 },/* index43 */ +{ 3, 6, 73 },/* index44 */ +{ 3, 7, 87 },/* index45 */ +{ 3, 8, 101},/* index46 */ +{ 3, 9, 94 },/* index47 */ +{ 3, 10, 80 },/* index48 */ +{ 3, 11, 66 },/* index49 */ +{ 4, 1, 4 },/* index50 */ +{ 4, 2, 18 },/* index51 */ +{ 4, 3, 32 },/* index52 */ +{ 4, 4, 46 },/* index53 */ +{ 4, 5, 60 },/* index54 */ +{ 4, 6, 74 },/* index55 */ +{ 4, 7, 88 },/* index56 */ +{ 4, 8, 102},/* index57 */ +{ 4, 9, 93 },/* index58 */ +{ 4, 10, 79 },/* index59 */ +{ 5, 1, 5 },/* index60 */ +{ 5, 2, 19 },/* index61 */ +{ 5, 3, 33 },/* index62 */ +{ 5, 4, 47 },/* index63 */ +{ 5, 5, 61 },/* index64 */ +{ 5, 6, 75 },/* index65 */ +{ 5, 7, 89 },/* index66 */ +{ 5, 8, 103},/* index67 */ +{ 5, 9, 92 },/* index68 */ +{ 6, 1, 6 },/* index69 */ +{ 6, 2, 20 },/* index70 */ +{ 6, 3, 34 },/* index71 */ +{ 6, 4, 48 },/* index72 */ +{ 6, 5, 62 },/* index73 */ +{ 6, 6, 76 },/* index74 */ +{ 6, 7, 90 },/* index75 */ +{ 6, 8, 104},/* index76 */ +{ 7, 1, 7 },/* index77 */ +{ 7, 2, 21 },/* index78 */ +{ 7, 3, 35 },/* index79 */ +{ 7, 4, 49 },/* index80 */ +{ 7, 5, 63 },/* index81 */ +{ 7, 6, 77 },/* index82 */ +{ 7, 7, 91 },/* index83 */ +{ 8, 1, 8 },/* index84 */ +{ 8, 2, 22 },/* index85 */ +{ 8, 3, 36 },/* index86 */ +{ 8, 4, 50 },/* index87 */ +{ 8, 5, 64 },/* index88 */ +{ 8, 6, 78 },/* index89 */ +{ 9, 1, 9 },/* index90 */ +{ 9, 2, 23 },/* index91 */ +{ 9, 3, 37 },/* index92 */ +{ 9, 4, 51 },/* index93 */ +{ 9, 5, 65 },/* index94 */ +{ 10, 1, 10 },/* index95 */ +{ 10, 2, 24 },/* index96 */ +{ 10, 3, 38 },/* index97 */ +{ 10, 4, 52 },/* index98 */ +{ 11, 1, 11 },/* index99 */ +{ 11, 2, 25 },/* index100*/ +{ 11, 3, 39 },/* index101*/ +{ 12, 1, 12 },/* index102*/ +{ 12, 2, 26 },/* index103*/ +{ 13, 1, 13 } /* index104*/ +}; /******************************************************************* * - * @brief Fills the Slot configuration + * @brief Function to fill the start Symbol and Symbol Len from the + * sliv Config Idx Table * * @details * - * Function : fillSlotConfig - * - * Functionality:Fill the Slot configuration values - * - * @params[in] void - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - - -void fillSlotConfig() -{ - U8 slot; - U8 symbol; - - for(slot = 0; slot <= 3; slot++) - { - for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++) - ducfgparam.clCellCfg.tddCfg.slotCfg[slot][symbol] = DL_SLOT; - } - - ducfgparam.clCellCfg.tddCfg.slotCfg[3][10] = GUARD_SLOT; - ducfgparam.clCellCfg.tddCfg.slotCfg[3][11] = GUARD_SLOT; - ducfgparam.clCellCfg.tddCfg.slotCfg[3][12] = GUARD_SLOT; - ducfgparam.clCellCfg.tddCfg.slotCfg[3][13] = UL_SLOT; - - for(symbol = 0; symbol < MAX_SYMB_PER_SLOT; symbol++) - ducfgparam.clCellCfg.tddCfg.slotCfg[4][symbol] = UL_SLOT; - -} - -/******************************************************************* - * - * @brief Reads the CL Configuration. - * - * @details + * Function : fillStartSymbolAndLen * - * Function : readClCfg + * Functionality: Function to fill the start Symbol and Symbol Len + * from the sliv Config Idx Table * - * Functionality: - * - Fills up the cell configuration for CL. - * - Calls fillSlotConfig() - * - * @params[in] void - * @return ROK - success - * RFAILED - failure + * @params[in] startSymbolIdx pointer, + * symbolLen pointer, + * sliv + * @return void * * ****************************************************************/ - - -/* This function is used to fill up the cell configuration for CL */ -void readClCfg() +void fillStartSymbolAndLen(uint8_t numRsrcAlloc, PdschConfig *pdschCfg, PuschCfg *puschCfg) { - ducfgparam.clCellCfg.carrierId = CARRIER_IDX; - - /* Cell configuration */ - ducfgparam.clCellCfg.cellId = NR_CELL_ID; - ducfgparam.clCellCfg.phyCellId = NR_PCI; - ducfgparam.clCellCfg.dupType = DUPLEX_MODE; - - /* DL carrier configuration */ - ducfgparam.clCellCfg.dlCarrCfg.pres = TRUE; - ducfgparam.clCellCfg.dlCarrCfg.bw = SUL_ARFCN; - ducfgparam.clCellCfg.dlCarrCfg.freq = NR_ARFCN; - ducfgparam.clCellCfg.dlCarrCfg.k0[0] = 1; - ducfgparam.clCellCfg.dlCarrCfg.k0[1] = 1; - ducfgparam.clCellCfg.dlCarrCfg.k0[2] = 1; - ducfgparam.clCellCfg.dlCarrCfg.k0[3] = 1; - ducfgparam.clCellCfg.dlCarrCfg.k0[4] = 1; - ducfgparam.clCellCfg.dlCarrCfg.gridSize[0] = 1; - ducfgparam.clCellCfg.dlCarrCfg.gridSize[1] = 1; - ducfgparam.clCellCfg.dlCarrCfg.gridSize[2] = 1; - ducfgparam.clCellCfg.dlCarrCfg.gridSize[3] = 1; - ducfgparam.clCellCfg.dlCarrCfg.gridSize[4] = 1; - ducfgparam.clCellCfg.dlCarrCfg.numAnt = NUM_TX_ANT; - - /* UL Carrier configuration */ - ducfgparam.clCellCfg.ulCarrCfg.pres = TRUE; - ducfgparam.clCellCfg.ulCarrCfg.bw = SUL_ARFCN; - ducfgparam.clCellCfg.ulCarrCfg.freq = NR_ARFCN; - ducfgparam.clCellCfg.ulCarrCfg.k0[0] = 1; - ducfgparam.clCellCfg.ulCarrCfg.k0[1] = 1; - ducfgparam.clCellCfg.ulCarrCfg.k0[2] = 1; - ducfgparam.clCellCfg.ulCarrCfg.k0[3] = 1; - ducfgparam.clCellCfg.ulCarrCfg.k0[4] = 1; - ducfgparam.clCellCfg.ulCarrCfg.gridSize[0] = 1; - ducfgparam.clCellCfg.ulCarrCfg.gridSize[1] = 1; - ducfgparam.clCellCfg.ulCarrCfg.gridSize[2] = 1; - ducfgparam.clCellCfg.ulCarrCfg.gridSize[3] = 1; - ducfgparam.clCellCfg.ulCarrCfg.gridSize[4] = 1; - ducfgparam.clCellCfg.ulCarrCfg.numAnt = NUM_RX_ANT; - - ducfgparam.clCellCfg.freqShft = FREQ_SHIFT_7P5KHZ; - - /* SSB configuration */ - ducfgparam.clCellCfg.ssbCfg.ssbPbchPwr = SSB_PBCH_PWR; - ducfgparam.clCellCfg.ssbCfg.bchPayload = BCH_PAYLOAD; - ducfgparam.clCellCfg.ssbCfg.scsCmn = SUBCARRIER_SPACING; - ducfgparam.clCellCfg.ssbCfg.ssbPrbOffset = PRB_OFFSET; - ducfgparam.clCellCfg.ssbCfg.betaPss = BETA_PSS; - ducfgparam.clCellCfg.ssbCfg.ssbPeriod = SSB_PERIODICITTY; - ducfgparam.clCellCfg.ssbCfg.ssbSubcOffset = SSB_SUBCARRIER_OFFSET; - ducfgparam.clCellCfg.ssbCfg.mibPdu = 104; - ducfgparam.clCellCfg.ssbCfg.nSSBMask[0] = 2162721; - ducfgparam.clCellCfg.ssbCfg.nSSBMask[1] = 0; - ducfgparam.clCellCfg.ssbCfg.multCarrBand = SSB_MULT_CARRIER_BAND; - ducfgparam.clCellCfg.ssbCfg.multCellCarr = MULT_CELL_CARRIER; - - /* PRACH configuration */ - ducfgparam.clCellCfg.prachCfg.pres = TRUE; - ducfgparam.clCellCfg.prachCfg.prachSeqLen = PRACH_SEQ_LEN; - ducfgparam.clCellCfg.prachCfg.prachSubcSpacing = PRACH_SUBCARRIER_SPACING; - ducfgparam.clCellCfg.prachCfg.prachRstSetCfg = PRACH_RESTRICTED_SET_CFG; - ducfgparam.clCellCfg.prachCfg.prachFdm = NUM_PRACH_FDM; - ducfgparam.clCellCfg.prachCfg.fdm[0].rootSeqIdx = ROOT_SEQ_IDX; - ducfgparam.clCellCfg.prachCfg.fdm[0].numRootSeq = NUM_ROOT_SEQ; - ducfgparam.clCellCfg.prachCfg.fdm[0].k1 = 1; - ducfgparam.clCellCfg.prachCfg.fdm[0].zeroCorrZoneCfg = ZERO_CORRELATION_ZONE_CFG; - ducfgparam.clCellCfg.prachCfg.fdm[0].numUnusedRootSeq = NUM_UNUSED_ROOT_SEQ; - *(ducfgparam.clCellCfg.prachCfg.fdm[0].unsuedRootSeq) = UNUSED_ROOT_SEQ; - ducfgparam.clCellCfg.prachCfg.ssbPerRach = SSB_PER_RACH; - ducfgparam.clCellCfg.prachCfg.prachMultCarrBand = PRACH_MULT_CARRIER_BAND; - - /* TDD configuration */ - ducfgparam.clCellCfg.tddCfg.pres = TRUE; - ducfgparam.clCellCfg.tddCfg.tddPeriod = TDD_PERIODICITY; - - fillSlotConfig(); + uint8_t slivIdx, timeDomIdx; - /* RSSI Measurement configuration */ - ducfgparam.clCellCfg.rssiUnit = RSS_MEASUREMENT_UNIT; - - /* This should be calculated based on - (number of mandatory parameters) + (number of otional parameters being filled) */ - ducfgparam.clCellCfg.numTlv = 39; - -} -/******************************************************************* - * - * @brief Configures the DU Parameters - * - * @details - * - * Function : readCfg - * - * Functionality: - * - Initializes the DuCfg members. - * - Calls readClCfg() - * - * @params[in] system task ID - * @return ROK - success - * RFAILED - failure - * - * ****************************************************************/ - -void readCfg() -{ - U8 i,j,k; - - /* F1 DU IP Address and Port*/ - ducfgparam.sctpParams.duIpAddr.ipV4Pres = TRUE; - strcpy(ducfgparam.sctpParams.duIpAddr.ipV4Addr, (char*)DU_IP_V4_ADDR); - ducfgparam.sctpParams.duIpAddr.ipV6Pres = FALSE; - strcpy(ducfgparam.sctpParams.duIpAddr.ipV6Addr, (char*)DU_IP_V6_ADDR); - ducfgparam.sctpParams.duPort = DU_PORT; - - /* F1 CU IP Address and Port*/ - ducfgparam.sctpParams.cuIpAddr.ipV4Pres = TRUE; - strcpy(ducfgparam.sctpParams.cuIpAddr.ipV4Addr, (char*)CU_IP_V4_ADDR); - ducfgparam.sctpParams.cuIpAddr.ipV6Pres = FALSE; - strcpy(ducfgparam.sctpParams.cuIpAddr.ipV6Addr, DU_IP_V6_ADDR); - ducfgparam.sctpParams.cuPort = CU_PORT; - - /* DU Info */ - ducfgparam.duId = DU_ID; - strcpy(ducfgparam.duName,DU_NAME); - - for(i=0;itimeDomRsrcAllociList[timeDomIdx].startSymbolAndLength ==\ + slivCfgIdxTable[slivIdx][2]) + { + pdschCfg->timeDomRsrcAllociList[timeDomIdx].startSymbol = slivCfgIdxTable[slivIdx][0]; + pdschCfg->timeDomRsrcAllociList[timeDomIdx].symbolLength = slivCfgIdxTable[slivIdx][1]; + break; + } } + if(puschCfg)/* PUSCH Config */ + { + if(puschCfg->timeDomRsrcAllocList[timeDomIdx].startSymbolAndLength ==\ + slivCfgIdxTable[slivIdx][2]) + { + puschCfg->timeDomRsrcAllocList[timeDomIdx].startSymbol = slivCfgIdxTable[slivIdx][0]; + puschCfg->timeDomRsrcAllocList[timeDomIdx].symbolLength = slivCfgIdxTable[slivIdx][1]; + break; + } + + } } - - ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrScs = SCS_15; - ducfgparam.srvdCellLst[i].duCellInfo.f1Mode.mode.tdd.nrTxBw.nrb = NRB_160; - - /*Measurement Config and Cell Config */ - ducfgparam.srvdCellLst[i].duCellInfo.measTimeCfg = TIME_CFG; - - ducfgparam.srvdCellLst[i].duCellInfo.cellDir = CELL_DIR; - - ducfgparam.srvdCellLst[i].duCellInfo.cellType=CELL_TYPE; - - /* Broadcast PLMN Identity */ - for(j=0;j