- printf("\n\n");
- printf("===========================================================================================================\n");
- printf("SAMPLE-APP VERSION\n");
- printf("===========================================================================================================\n");
-
- printf("%s\n", sysversion);
- printf("build-date: %s\n", compilation_date);
- printf("build-time: %s\n", compilation_time);
-}
-
-int main(int argc, char *argv[])
-{
- int i;
- int j, len;
- int lcore_id = 0;
- char filename[256];
- char prefix_name[256];
- uint32_t nCenterFreq;
- int32_t xret = 0;
- struct stat st = {0};
- uint32_t filenameLength = strlen(argv[1]);
- char *pCheckName1 = NULL, *pCheckName2 = NULL;
- enum xran_if_state xran_curr_if_state = XRAN_INIT;
-
- uint64_t nMask = (uint64_t)1;
- uint16_t nCoreUsage[4*64+1];
- uint16_t nCoreId[4*64];
- float nTotal = 0.0;
- uint64_t nTotalTime;
- uint64_t nUsedTime;
- uint32_t nCoreUsed;
- float nUsedPercent;
-
-
- if (argc == 3)
- errx(2, "Need two argument - the PCI address of the network port");
- if (filenameLength >= 256)
- {
- printf("Config file name input is too long, exiting!\n");
- exit(-1);
- }
-
- version_print();
-
- //add for Klocworks
- len = strlen(argv[1]) + 1;
- if (len > (sizeof(filename) - 10))
- len = (sizeof(filename) - 10);
- strncpy(filename, argv[1], (sizeof(filename) - 10));
- filename[len] = '\0';
-
- if (xran_is_synchronized() != 0)
- printf("Machine is not synchronized using PTP!\n");
- else
- printf("Machine is synchronized using PTP!\n");
-
- memset(&startupConfiguration, 0, sizeof(RuntimeConfig));
-
- if (parseConfigFile(filename, (RuntimeConfig*)&startupConfiguration) != 0) {
- printf("Configuration file error.\n");
- return -1;
- }
-
- if(startupConfiguration.ant_file[0] == NULL){
- printf("it looks like test vector for antennas were not provided\n");
- exit(-1);
- }
-
- if (startupConfiguration.numCC > XRAN_MAX_SECTOR_NR) {
- printf("Number of cells %d exceeds max number supported %d!\n", startupConfiguration.numCC, XRAN_MAX_SECTOR_NR);
- startupConfiguration.numCC = XRAN_MAX_SECTOR_NR;
-
- }
- if (startupConfiguration.antElmTRx > XRAN_MAX_ANT_ARRAY_ELM_NR) {
- printf("Number of Antenna elements %d exceeds max number supported %d!\n", startupConfiguration.antElmTRx, XRAN_MAX_ANT_ARRAY_ELM_NR);
- startupConfiguration.antElmTRx = XRAN_MAX_ANT_ARRAY_ELM_NR;
- }
-
- numCCPorts = startupConfiguration.numCC;
- num_eAxc = startupConfiguration.numAxc;
-
- printf("numCCPorts %d num_eAxc%d\n", numCCPorts, num_eAxc);
-
- if (startupConfiguration.mu_number <= 1){
- nFpgaToSW_FTH_RxBufferLen = 13168; /* 273*12*4 + 64*/
- nFpgaToSW_PRACH_RxBufferLen = 8192;
- nSW_ToFpga_FTH_TxBufferLen = 13168 + /* 273*12*4 + 64* + ETH AND ORAN HDRs */
- XRAN_MAX_SECTIONS_PER_SYM* (RTE_PKTMBUF_HEADROOM + sizeof(struct ether_hdr) +
- sizeof(struct xran_ecpri_hdr) +
- sizeof(struct radio_app_common_hdr) +
- sizeof(struct data_section_hdr));
- } else if (startupConfiguration.mu_number == 3){
- nFpgaToSW_FTH_RxBufferLen = 3328;
- nFpgaToSW_PRACH_RxBufferLen = 8192;
- nSW_ToFpga_FTH_TxBufferLen = 3328 +
- XRAN_MAX_SECTIONS_PER_SYM * (RTE_PKTMBUF_HEADROOM + sizeof(struct ether_hdr) +
- sizeof(struct xran_ecpri_hdr) +
- sizeof(struct radio_app_common_hdr) +
- sizeof(struct data_section_hdr));
- } else {
- printf("given numerology is not supported %d\n", startupConfiguration.mu_number);
- exit(-1);
- }
- printf("nSW_ToFpga_FTH_TxBufferLen %d\n", nSW_ToFpga_FTH_TxBufferLen);
-
- memset(&xranInit, 0, sizeof(struct xran_fh_init));
-
- if(startupConfiguration.appMode == APP_O_DU) {
- printf("set O-DU\n");
- xranInit.io_cfg.id = 0;/* O-DU */
- xranInit.io_cfg.core = startupConfiguration.io_core;
- xranInit.io_cfg.system_core = startupConfiguration.system_core;
- xranInit.io_cfg.pkt_proc_core = startupConfiguration.pkt_proc_core;
- xranInit.io_cfg.pkt_aux_core = startupConfiguration.pkt_aux_core; /* do not start*/
- xranInit.io_cfg.timing_core = startupConfiguration.timing_core;
- } else {
- printf("set O-RU\n");
- xranInit.io_cfg.id = 1; /* O-RU*/
- xranInit.io_cfg.core = startupConfiguration.io_core;
- xranInit.io_cfg.system_core = startupConfiguration.system_core;
- xranInit.io_cfg.pkt_proc_core = startupConfiguration.pkt_proc_core;
- xranInit.io_cfg.pkt_aux_core = startupConfiguration.pkt_aux_core; /* do not start*/
- xranInit.io_cfg.timing_core = startupConfiguration.timing_core;
- }
-
- cpu_set_t cpuset;
- pthread_t thread;
-
- thread = pthread_self();
- CPU_ZERO(&cpuset);
- CPU_SET(xranInit.io_cfg.system_core,&cpuset);
- pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
-/* if (s != 0)
- handle_error_en(s, "pthread_setaffinity_np");
-*/
-
- xranInit.io_cfg.bbdev_mode = XRAN_BBDEV_NOT_USED;
-
- if(startupConfiguration.xranCat == XRAN_CATEGORY_A){
- xranInit.eAxCId_conf.mask_cuPortId = 0xf000;
- xranInit.eAxCId_conf.mask_bandSectorId = 0x0f00;
- xranInit.eAxCId_conf.mask_ccId = 0x00f0;
- xranInit.eAxCId_conf.mask_ruPortId = 0x000f;
- xranInit.eAxCId_conf.bit_cuPortId = 12;
- xranInit.eAxCId_conf.bit_bandSectorId = 8;
- xranInit.eAxCId_conf.bit_ccId = 4;
- xranInit.eAxCId_conf.bit_ruPortId = 0;
- } else {
- xranInit.eAxCId_conf.mask_cuPortId = 0xf000;
- xranInit.eAxCId_conf.mask_bandSectorId = 0x0c00;
- xranInit.eAxCId_conf.mask_ccId = 0x0300;
- xranInit.eAxCId_conf.mask_ruPortId = 0x00ff; /* more than [0-127] eAxC */
- xranInit.eAxCId_conf.bit_cuPortId = 12;
- xranInit.eAxCId_conf.bit_bandSectorId = 10;
- xranInit.eAxCId_conf.bit_ccId = 8;
- xranInit.eAxCId_conf.bit_ruPortId = 0;
- }
-
- xranInit.io_cfg.dpdk_dev[XRAN_UP_VF] = argv[2];
- xranInit.io_cfg.dpdk_dev[XRAN_CP_VF] = argv[3];
- xranInit.mtu = startupConfiguration.mtu;
-
- xranInit.p_o_du_addr = (int8_t *)&startupConfiguration.o_du_addr;
- xranInit.p_o_ru_addr = (int8_t *)&startupConfiguration.o_ru_addr;
-
- snprintf(prefix_name, sizeof(prefix_name), "wls_%d",startupConfiguration.instance_id);
- xranInit.filePrefix = prefix_name;
-
- xranInit.totalBfWeights = startupConfiguration.totalBfWeights;
-
- xranInit.Tadv_cp_dl = startupConfiguration.Tadv_cp_dl;
- xranInit.T2a_min_cp_dl = startupConfiguration.T2a_min_cp_dl;
- xranInit.T2a_max_cp_dl = startupConfiguration.T2a_max_cp_dl;
- xranInit.T2a_min_cp_ul = startupConfiguration.T2a_min_cp_ul;
- xranInit.T2a_max_cp_ul = startupConfiguration.T2a_max_cp_ul;
- xranInit.T2a_min_up = startupConfiguration.T2a_min_up;
- xranInit.T2a_max_up = startupConfiguration.T2a_max_up;
- xranInit.Ta3_min = startupConfiguration.Ta3_min;
- xranInit.Ta3_max = startupConfiguration.Ta3_max;
- xranInit.T1a_min_cp_dl = startupConfiguration.T1a_min_cp_dl;
- xranInit.T1a_max_cp_dl = startupConfiguration.T1a_max_cp_dl;
- xranInit.T1a_min_cp_ul = startupConfiguration.T1a_min_cp_ul;
- xranInit.T1a_max_cp_ul = startupConfiguration.T1a_max_cp_ul;
- xranInit.T1a_min_up = startupConfiguration.T1a_min_up;
- xranInit.T1a_max_up = startupConfiguration.T1a_max_up;
- xranInit.Ta4_min = startupConfiguration.Ta4_min;
- xranInit.Ta4_max = startupConfiguration.Ta4_max;
-
- xranInit.enableCP = startupConfiguration.enableCP;
- xranInit.prachEnable = startupConfiguration.enablePrach;
- xranInit.srsEnable = startupConfiguration.enableSrs;
- xranInit.debugStop = startupConfiguration.debugStop;
- xranInit.debugStopCount = startupConfiguration.debugStopCount;
- xranInit.DynamicSectionEna = startupConfiguration.DynamicSectionEna;
- xranInit.io_cfg.bbdev_mode = XRAN_BBDEV_NOT_USED;
- xranInit.GPS_Alpha = startupConfiguration.GPS_Alpha;
- xranInit.GPS_Beta = startupConfiguration.GPS_Beta;
-
- xranInit.cp_vlan_tag = startupConfiguration.cp_vlan_tag;
- xranInit.up_vlan_tag = startupConfiguration.up_vlan_tag;
-
- printf("IQ files size is %d slots\n", startupConfiguration.numSlots);
-
- iq_playback_buffer_size_dl = (startupConfiguration.numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB *
- app_xran_get_num_rbs(startupConfiguration.mu_number, startupConfiguration.nDLBandwidth, startupConfiguration.nDLAbsFrePointA)
- *4L);
-
- iq_playback_buffer_size_ul = (startupConfiguration.numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB *
- app_xran_get_num_rbs(startupConfiguration.mu_number, startupConfiguration.nULBandwidth, startupConfiguration.nULAbsFrePointA)
- *4L);
-
-
- /* 10 * [14*32*273*2*2] = 4892160 bytes */
- iq_bfw_buffer_size_dl = (startupConfiguration.numSlots * N_SYM_PER_SLOT * startupConfiguration.antElmTRx *
- app_xran_get_num_rbs(startupConfiguration.mu_number, startupConfiguration.nDLBandwidth, startupConfiguration.nDLAbsFrePointA)
- *4L);
-
- /* 10 * [14*32*273*2*2] = 4892160 bytes */
- iq_bfw_buffer_size_ul = (startupConfiguration.numSlots * N_SYM_PER_SLOT *
- app_xran_get_num_rbs(startupConfiguration.mu_number, startupConfiguration.nULBandwidth, startupConfiguration.nULAbsFrePointA)
- *4L);
-
- /* 10 * [1*273*2*2] = 349440 bytes */
- iq_srs_buffer_size_ul = (startupConfiguration.numSlots * N_SYM_PER_SLOT * N_SC_PER_PRB *
- app_xran_get_num_rbs(startupConfiguration.mu_number, startupConfiguration.nULBandwidth, startupConfiguration.nULAbsFrePointA)
- *4L);
-
- for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(numCCPorts * num_eAxc); i++) {
- p_tx_play_buffer[i] = (int16_t*)malloc(iq_playback_buffer_size_dl);
- tx_play_buffer_size[i] = (int32_t)iq_playback_buffer_size_dl;
-
- if (p_tx_play_buffer[i] == NULL)
- exit(-1);
-
- tx_play_buffer_size[i] = sys_load_file_to_buff(startupConfiguration.ant_file[i],
- "DL IFFT IN IQ Samples in binary format",
- (uint8_t*) p_tx_play_buffer[i],
- tx_play_buffer_size[i],
- 1);
- tx_play_buffer_position[i] = 0;
- }
-
- if (startupConfiguration.appMode == APP_O_DU && startupConfiguration.xranCat == XRAN_CATEGORY_B){
- for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(numCCPorts * num_eAxc); i++) {
-
- p_tx_dl_bfw_buffer[i] = (int16_t*)malloc(iq_bfw_buffer_size_dl);
- tx_dl_bfw_buffer_size[i] = (int32_t)iq_bfw_buffer_size_dl;
-
- if (p_tx_dl_bfw_buffer[i] == NULL)
- exit(-1);
-
- tx_dl_bfw_buffer_size[i] = sys_load_file_to_buff(startupConfiguration.dl_bfw_file[i],
- "DL BF weights IQ Samples in binary format",
- (uint8_t*) p_tx_dl_bfw_buffer[i],
- tx_dl_bfw_buffer_size[i],
- 1);
- tx_dl_bfw_buffer_position[i] = 0;
- }
- }
-
- if (startupConfiguration.appMode == APP_O_DU && startupConfiguration.xranCat == XRAN_CATEGORY_B){
-
- for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(numCCPorts * num_eAxc); i++) {
- p_tx_ul_bfw_buffer[i] = (int16_t*)malloc(iq_bfw_buffer_size_ul);
- tx_ul_bfw_buffer_size[i] = (int32_t)iq_bfw_buffer_size_ul;
-
- if (p_tx_ul_bfw_buffer[i] == NULL)
- exit(-1);
-
- tx_ul_bfw_buffer_size[i] = sys_load_file_to_buff(startupConfiguration.ul_bfw_file[i],
- "UL BF weights IQ Samples in binary format",
- (uint8_t*) p_tx_ul_bfw_buffer[i],
- tx_ul_bfw_buffer_size[i],
- 1);
- tx_ul_bfw_buffer_position[i] = 0;
- }
- }
-
- if (startupConfiguration.appMode == APP_O_RU && startupConfiguration.enablePrach){
- for(i = 0; i < MAX_ANT_CARRIER_SUPPORTED && i < (uint32_t)(numCCPorts * num_eAxc); i++) {
- p_tx_prach_play_buffer[i] = (int16_t*)malloc(PRACH_PLAYBACK_BUFFER_BYTES);
- tx_prach_play_buffer_size[i] = (int32_t)PRACH_PLAYBACK_BUFFER_BYTES;
-
- if (p_tx_prach_play_buffer[i] == NULL)
- exit(-1);
-
- memset(p_tx_prach_play_buffer[i], 0, PRACH_PLAYBACK_BUFFER_BYTES);
-
- tx_prach_play_buffer_size[i] = sys_load_file_to_buff(startupConfiguration.prach_file[i],