Commit a1d59bde authored by Robert Schmidt's avatar Robert Schmidt

Add some parameters for split 7 in split 8 openair0 config

For the initialization of the xran library (split 7.2), we need some
parameters such as PRACH or frame config. However, to date,
initialization of split at level 7 use the split 8 openair0_config
structure, which does not have the necessary information.

Hence, add a single structure that contains that information.
parent 8c8bb1c4
......@@ -936,6 +936,26 @@ static void fill_rf_config(RU_t *ru, char *rf_config_file)
}
}
static void fill_split7_config(split7_config_t *split7, const nfapi_nr_config_request_scf_t *config, int slots_per_frame)
{
const nfapi_nr_prach_config_t *prach_config = &config->prach_config;
const nfapi_nr_tdd_table_t *tdd_table = &config->tdd_table;
DevAssert(prach_config->prach_ConfigurationIndex.tl.tag == NFAPI_NR_CONFIG_PRACH_CONFIG_INDEX_TAG);
split7->prach_index = prach_config->prach_ConfigurationIndex.value;
AssertFatal(prach_config->num_prach_fd_occasions.value == 1, "cannot handle more than one PRACH occasion\n");
split7->prach_freq_start = prach_config->num_prach_fd_occasions_list[0].k1.value;
DevAssert(tdd_table->tdd_period.tl.tag == NFAPI_NR_CONFIG_TDD_PERIOD_TAG);
int nb_periods_per_frame = get_nb_periods_per_frame(tdd_table->tdd_period.value);
split7->n_tdd_period = slots_per_frame / nb_periods_per_frame;
for (int slot = 0; slot < split7->n_tdd_period; ++slot) {
for (int sym = 0; sym < 14; ++sym) {
split7->slots[slot].sym_dir[sym] = tdd_table->max_tdd_periodicity_list[slot].max_num_of_symbol_per_slot_list[sym].slot_config.value;
}
}
}
/* this function maps the RU tx and rx buffers to the available rf chains.
Each rf chain is is addressed by the card number and the chain on the card. The
rf_map specifies for each antenna port, on which rf chain the mapping should start. Multiple
......@@ -1154,6 +1174,7 @@ void *ru_thread( void *param ) {
nr_dump_frame_parms(fp);
nr_phy_init_RU(ru);
fill_rf_config(ru, ru->rf_config_file);
fill_split7_config(&ru->openair0_cfg.split7, &ru->config, fp->slots_per_frame);
if(!emulate_rf) {
// Start IF device if any
......
......@@ -178,8 +178,27 @@ typedef enum {
RU_GPIO_CONTROL_INTERDIGITAL,
} gpio_control_t;
/*! \brief defines the direction of each symbol. Int values intentional and
* analogous to FAPI/FHI 7.2 */
typedef enum { SYMBOL_DIR_DL = 0, SYMBOL_DIR_UL = 1, SYMBOL_DIR_GU = 2 } symbol_direction_t;
/*! \brief Contains information about PRACH and Frame structure, for
* initialization of split 7 radios which reuses the interface of split 8.
*/
typedef struct split7_config {
/*! PRACH index used for PRACH */
int prach_index;
/*! PRACH frequency start, from RRC's msg1-FrequencyStart */
int prach_freq_start;
/*! the TDD period length, if TDD indicated in parent struct */
int n_tdd_period;
/*! TDD frame structure, if TDD indicated */
struct {
symbol_direction_t sym_dir[14];
} slots[160];
} split7_config_t;
/*! \brief RF frontend parameters set by application */
typedef struct {
typedef struct openair0_config {
//! Module ID for this configuration
int Mod_id;
//! device log level
......@@ -281,6 +300,8 @@ typedef struct {
int txfh_cores[4];
//! select the GPIO control method
gpio_control_t gpio_controller;
//! this interface is reused for split 7, so split 7 options provided below
split7_config_t split7;
} openair0_config_t;
/*! \brief RF mapping */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment