changes for multi-RU DAS scenario, handling of antenna ports in 7.2 (memory allocations for PRACH and neAxc in fh_config)
This commit is contained in:
committed by
francescomani
parent
a1a4f24d0f
commit
1153721b19
@@ -874,6 +874,7 @@ static void fill_rf_config(RU_t *ru, char *rf_config_file)
|
|||||||
cfg->num_rb_dl = N_RB;
|
cfg->num_rb_dl = N_RB;
|
||||||
cfg->tx_num_channels = ru->nb_tx * ru->num_beams_period;
|
cfg->tx_num_channels = ru->nb_tx * ru->num_beams_period;
|
||||||
cfg->rx_num_channels = ru->nb_rx * ru->num_beams_period;
|
cfg->rx_num_channels = ru->nb_rx * ru->num_beams_period;
|
||||||
|
cfg->num_distributed_ru = ru->num_beams_period;
|
||||||
LOG_I(PHY,"Setting RF config for N_RB %d, NB_RX %d, NB_TX %d\n",cfg->num_rb_dl,cfg->rx_num_channels,cfg->tx_num_channels);
|
LOG_I(PHY,"Setting RF config for N_RB %d, NB_RX %d, NB_TX %d\n",cfg->num_rb_dl,cfg->rx_num_channels,cfg->tx_num_channels);
|
||||||
LOG_I(PHY,"tune_offset %.0f Hz, sample_rate %.0f Hz\n",cfg->tune_offset,cfg->sample_rate);
|
LOG_I(PHY,"tune_offset %.0f Hz, sample_rate %.0f Hz\n",cfg->tune_offset,cfg->sample_rate);
|
||||||
|
|
||||||
|
|||||||
@@ -116,9 +116,9 @@ void nr_phy_init_RU(RU_t *ru)
|
|||||||
// AssertFatal(ru->nb_rx <= sizeof(ru->prach_rxsigF) / sizeof(ru->prach_rxsigF[0]),
|
// AssertFatal(ru->nb_rx <= sizeof(ru->prach_rxsigF) / sizeof(ru->prach_rxsigF[0]),
|
||||||
// "nb_antennas_rx too large");
|
// "nb_antennas_rx too large");
|
||||||
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
||||||
ru->prach_rxsigF[j] = (int16_t**)malloc(ru->nb_rx * sizeof(int16_t*));
|
ru->prach_rxsigF[j] = (int16_t**)malloc(nb_rx_streams * sizeof(int16_t*));
|
||||||
|
|
||||||
for (int i = 0; i < ru->nb_rx; i++) {
|
for (int i = 0; i < nb_rx_streams; i++) {
|
||||||
// largest size for PRACH FFT is 4x98304 (16*24576)
|
// largest size for PRACH FFT is 4x98304 (16*24576)
|
||||||
ru->prach_rxsigF[j][i] = (int16_t*)malloc16_clear(4 * 98304 * 2 * sizeof(int16_t));
|
ru->prach_rxsigF[j][i] = (int16_t*)malloc16_clear(4 * 98304 * 2 * sizeof(int16_t));
|
||||||
LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n", i, ru->prach_rxsigF[j][i]);
|
LOG_D(PHY,"[INIT] prach_vars->rxsigF[%d] = %p\n", i, ru->prach_rxsigF[j][i]);
|
||||||
@@ -173,7 +173,7 @@ void nr_phy_free_RU(RU_t *ru)
|
|||||||
free_and_zero(ru->common.rxdataF);
|
free_and_zero(ru->common.rxdataF);
|
||||||
|
|
||||||
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
for (int j = 0; j < NUMBER_OF_NR_RU_PRACH_OCCASIONS_MAX; j++) {
|
||||||
for (int i = 0; i < ru->nb_rx; i++)
|
for (int i = 0; i < nb_rx_streams; i++)
|
||||||
free_and_zero(ru->prach_rxsigF[j][i]);
|
free_and_zero(ru->prach_rxsigF[j][i]);
|
||||||
free_and_zero(ru->prach_rxsigF[j]);
|
free_and_zero(ru->prach_rxsigF[j]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -225,6 +225,8 @@ typedef struct openair0_config {
|
|||||||
int rx_num_channels;
|
int rx_num_channels;
|
||||||
//! number of TX channels (=TX antennas)
|
//! number of TX channels (=TX antennas)
|
||||||
int tx_num_channels;
|
int tx_num_channels;
|
||||||
|
//! number of distributed radio-units
|
||||||
|
int num_distributed_ru;
|
||||||
//! rx daughter card
|
//! rx daughter card
|
||||||
char* rx_subdev;
|
char* rx_subdev;
|
||||||
//! tx daughter card
|
//! tx daughter card
|
||||||
|
|||||||
@@ -834,7 +834,7 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c
|
|||||||
{
|
{
|
||||||
AssertFatal(num_rus == 1 || num_rus == 2, "only support 1 or 2 RUs as of now\n");
|
AssertFatal(num_rus == 1 || num_rus == 2, "only support 1 or 2 RUs as of now\n");
|
||||||
AssertFatal(ru_idx < num_rus, "illegal ru_idx %d: must be < %d\n", ru_idx, num_rus);
|
AssertFatal(ru_idx < num_rus, "illegal ru_idx %d: must be < %d\n", ru_idx, num_rus);
|
||||||
DevAssert(oai0->tx_num_channels > 0 && oai0->rx_num_channels > 0);
|
DevAssert(oai0->tx_num_channels > 0 && oai0->rx_num_channels > 0 && oai0->num_distributed_ru > 0);
|
||||||
DevAssert(oai0->tx_bw > 0 && oai0->rx_bw > 0);
|
DevAssert(oai0->tx_bw > 0 && oai0->rx_bw > 0);
|
||||||
DevAssert(oai0->tx_freq[0] > 0);
|
DevAssert(oai0->tx_freq[0] > 0);
|
||||||
for (int i = 1; i < oai0->tx_num_channels; ++i)
|
for (int i = 1; i < oai0->tx_num_channels; ++i)
|
||||||
@@ -879,7 +879,7 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c
|
|||||||
fh_config->dpdk_port = ru_idx; // DPDK port number used for FH
|
fh_config->dpdk_port = ru_idx; // DPDK port number used for FH
|
||||||
fh_config->sector_id = 0; // Band sector ID for FH; not used in xran
|
fh_config->sector_id = 0; // Band sector ID for FH; not used in xran
|
||||||
fh_config->nCC = 1; // number of Component carriers supported on FH; M-plane info
|
fh_config->nCC = 1; // number of Component carriers supported on FH; M-plane info
|
||||||
fh_config->neAxc = RTE_MAX(oai0->tx_num_channels / num_rus, oai0->rx_num_channels / num_rus); // number of eAxc supported on one CC = max(PDSCH, PUSCH)
|
fh_config->neAxc = RTE_MAX(oai0->num_distributed_ru * oai0->tx_num_channels / num_rus, oai0->num_distributed_ru * oai0->rx_num_channels / num_rus); // number of eAxc supported on one CC = max(PDSCH, PUSCH)
|
||||||
fh_config->neAxcUl = 0; // number of eAxc supported on one CC for UL direction = PUSCH; used only if XRAN_CATEGORY_B
|
fh_config->neAxcUl = 0; // number of eAxc supported on one CC for UL direction = PUSCH; used only if XRAN_CATEGORY_B
|
||||||
fh_config->nAntElmTRx = 0; // number of antenna elements for TX and RX = SRS; used only if XRAN_CATEGORY_B
|
fh_config->nAntElmTRx = 0; // number of antenna elements for TX and RX = SRS; used only if XRAN_CATEGORY_B
|
||||||
fh_config->nDLFftSize = 0; // DL FFT size; not used in xran
|
fh_config->nDLFftSize = 0; // DL FFT size; not used in xran
|
||||||
|
|||||||
Reference in New Issue
Block a user