Move power configuration into struct
Group related parameters and simplify setup of these parameters.
This commit is contained in:
@@ -1492,28 +1492,33 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
||||
AssertFatal(config.first_active_bwp <= config.num_additional_bwps, "1st active BWP does not belog to the configured BWPs\n");
|
||||
|
||||
if (MacRLC_ParamList.numelt > 0) {
|
||||
AssertFatal(MacRLC_ParamList.numelt == 1, "only one MACRLCs section supported!\n");
|
||||
AssertFatal(MacRLC_ParamList.numelt == RC.nb_nr_macrlc_inst, "only one MACRLCs section supported!\n");
|
||||
/* NR RLC config is needed by mac_top_init_gNB() */
|
||||
nr_rlc_configuration_t default_rlc_config;
|
||||
config_rlc(cfg, &default_rlc_config);
|
||||
|
||||
config.pusch.target_snrx10 = *(MacRLC_ParamList.paramarray[0][MACRLC_PUSCHTARGETSNRX10_IDX].iptr);
|
||||
config.pusch.rssi_threshold = *(MacRLC_ParamList.paramarray[0][MACRLC_PUSCH_RSSI_THRES_IDX].iptr);
|
||||
config.pucch.rssi_threshold = *(MacRLC_ParamList.paramarray[0][MACRLC_PUCCH_RSSI_THRES_IDX].iptr);
|
||||
config.pucch.target_snrx10 = *(MacRLC_ParamList.paramarray[0][MACRLC_PUCCHTARGETSNRX10_IDX].iptr);
|
||||
config.ul_prbblack_SNR_threshold = *(MacRLC_ParamList.paramarray[0][MACRLC_UL_PRBBLACK_SNR_THRESHOLD_IDX].iptr);
|
||||
config.pucch.failure_thres = *(MacRLC_ParamList.paramarray[0][MACRLC_PUCCHFAILURETHRES_IDX].iptr);
|
||||
config.pusch.failure_thres = *(MacRLC_ParamList.paramarray[0][MACRLC_PUSCHFAILURETHRES_IDX].iptr);
|
||||
|
||||
LOG_I(NR_MAC,
|
||||
"PUSCH Target %d RSSI thresh %d Failure %d, PUCCH Target %d RSSI thresh %d Failure %d\n",
|
||||
config.pusch.target_snrx10,
|
||||
config.pusch.rssi_threshold,
|
||||
config.pusch.failure_thres,
|
||||
config.pucch.target_snrx10,
|
||||
config.pucch.rssi_threshold,
|
||||
config.pucch.failure_thres);
|
||||
|
||||
ngran_node_t node_type = get_node_type();
|
||||
mac_top_init_gNB(node_type, scc, &config, &default_rlc_config);
|
||||
|
||||
for (j = 0; j < RC.nb_nr_macrlc_inst; j++) {
|
||||
RC.nrmac[j]->pusch_target_snrx10 = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCHTARGETSNRX10_IDX].iptr);
|
||||
RC.nrmac[j]->pusch_rssi_threshold = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCH_RSSI_THRES_IDX].iptr);
|
||||
RC.nrmac[j]->pucch_rssi_threshold = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCH_RSSI_THRES_IDX].iptr);
|
||||
RC.nrmac[j]->pucch_target_snrx10 = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCHTARGETSNRX10_IDX].iptr);
|
||||
RC.nrmac[j]->ul_prbblack_SNR_threshold = *(MacRLC_ParamList.paramarray[j][MACRLC_UL_PRBBLACK_SNR_THRESHOLD_IDX].iptr);
|
||||
RC.nrmac[j]->pucch_failure_thres = *(MacRLC_ParamList.paramarray[j][MACRLC_PUCCHFAILURETHRES_IDX].iptr);
|
||||
RC.nrmac[j]->pusch_failure_thres = *(MacRLC_ParamList.paramarray[j][MACRLC_PUSCHFAILURETHRES_IDX].iptr);
|
||||
|
||||
LOG_I(NR_MAC,
|
||||
"PUSCH Target %d, PUCCH Target %d, PUCCH Failure %d, PUSCH Failure %d\n",
|
||||
RC.nrmac[j]->pusch_target_snrx10,
|
||||
RC.nrmac[j]->pucch_target_snrx10,
|
||||
RC.nrmac[j]->pucch_failure_thres,
|
||||
RC.nrmac[j]->pusch_failure_thres);
|
||||
if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) {
|
||||
// check number of instances is same as RRC/PDCP
|
||||
|
||||
|
||||
@@ -879,7 +879,7 @@ static NR_UE_harq_t *find_harq(frame_t frame, slot_t slot, NR_UE_info_t * UE, in
|
||||
void handle_nr_uci_pucch_0_1(module_id_t mod_id, frame_t frame, slot_t slot, const nfapi_nr_uci_pucch_pdu_format_0_1_t *uci_01)
|
||||
{
|
||||
gNB_MAC_INST *nrmac = RC.nrmac[mod_id];
|
||||
int rssi_threshold = nrmac->pucch_rssi_threshold;
|
||||
int rssi_threshold = nrmac->radio_config.pucch.rssi_threshold;
|
||||
NR_SCHED_LOCK(&nrmac->sched_lock);
|
||||
NR_UE_info_t *UE = find_nr_UE(&nrmac->UE_info, uci_01->rnti);
|
||||
bool is_ra = false;
|
||||
@@ -932,7 +932,7 @@ void handle_nr_uci_pucch_0_1(module_id_t mod_id, frame_t frame, slot_t slot, con
|
||||
// tpc (power control) only if we received AckNack
|
||||
if (uci_01->harq.harq_confidence_level == 0 && uci_01->ul_cqi != 0xff) {
|
||||
sched_ctrl->pucch_snrx10 = uci_01->ul_cqi * 5 - 640;
|
||||
sched_ctrl->tpc1 = nr_get_tpc(nrmac->pucch_target_snrx10, uci_01->ul_cqi, 30, 0);
|
||||
sched_ctrl->tpc1 = nr_get_tpc(nrmac->radio_config.pucch.target_snrx10, uci_01->ul_cqi, 30, 0);
|
||||
} else
|
||||
sched_ctrl->tpc1 = 1;
|
||||
sched_ctrl->tpc1 = nr_limit_tpc(sched_ctrl->tpc1, uci_01->rssi, rssi_threshold);
|
||||
@@ -954,7 +954,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id, frame_t frame, slot_t slot, c
|
||||
{
|
||||
gNB_MAC_INST *nrmac = RC.nrmac[mod_id];
|
||||
NR_SCHED_LOCK(&nrmac->sched_lock);
|
||||
int rssi_threshold = nrmac->pucch_rssi_threshold;
|
||||
int rssi_threshold = nrmac->radio_config.pucch.rssi_threshold;
|
||||
|
||||
NR_UE_info_t *UE = find_nr_UE(&nrmac->UE_info, uci_234->rnti);
|
||||
if (!UE) {
|
||||
@@ -969,7 +969,7 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id, frame_t frame, slot_t slot, c
|
||||
// TODO PUCCH2 SNR computation is not correct -> ignore the following
|
||||
if (uci_234->ul_cqi != 0xff) {
|
||||
sched_ctrl->pucch_snrx10 = uci_234->ul_cqi * 5 - 640;
|
||||
sched_ctrl->tpc1 = nr_get_tpc(nrmac->pucch_target_snrx10, uci_234->ul_cqi, 30, 0);
|
||||
sched_ctrl->tpc1 = nr_get_tpc(nrmac->radio_config.pucch.target_snrx10, uci_234->ul_cqi, 30, 0);
|
||||
sched_ctrl->tpc1 = nr_limit_tpc(sched_ctrl->tpc1, uci_234->rssi, rssi_threshold);
|
||||
}
|
||||
|
||||
|
||||
@@ -795,7 +795,7 @@ static void nr_rx_ra_sdu(const module_id_t mod_id,
|
||||
}
|
||||
}
|
||||
|
||||
const int target_snrx10 = mac->pusch_target_snrx10;
|
||||
const int target_snrx10 = mac->radio_config.pusch.target_snrx10;
|
||||
if (!sdu) { // NACK
|
||||
if (cfra) // no Msg3 on CFRA, no problem
|
||||
return;
|
||||
@@ -944,9 +944,9 @@ static void _nr_rx_sdu(const module_id_t gnb_mod_idP,
|
||||
gNB_MAC_INST *gNB_mac = RC.nrmac[gnb_mod_idP];
|
||||
const int current_rnti = rntiP;
|
||||
LOG_D(NR_MAC, "rx_sdu for rnti %04x\n", current_rnti);
|
||||
const int target_snrx10 = gNB_mac->pusch_target_snrx10;
|
||||
const int rssi_threshold = gNB_mac->pusch_rssi_threshold;
|
||||
const int pusch_failure_thres = gNB_mac->pusch_failure_thres;
|
||||
const int target_snrx10 = gNB_mac->radio_config.pusch.target_snrx10;
|
||||
const int rssi_threshold = gNB_mac->radio_config.pusch.rssi_threshold;
|
||||
const int pusch_failure_thres = gNB_mac->radio_config.pusch.failure_thres;
|
||||
NR_UE_info_t *UE = find_nr_UE(&gNB_mac->UE_info, current_rnti);
|
||||
if (UE) {
|
||||
NR_UE_sched_ctrl_t *UE_scheduling_control = &UE->UE_sched_ctrl;
|
||||
@@ -1582,7 +1582,7 @@ void handle_nr_srs_measurements(const module_id_t module_id,
|
||||
|
||||
sprintf(stats->srs_stats, "UL-SNR %i dB", wide_band_snr_dB);
|
||||
|
||||
const int ul_prbblack_SNR_threshold = nr_mac->ul_prbblack_SNR_threshold;
|
||||
const int ul_prbblack_SNR_threshold = nr_mac->radio_config.ul_prbblack_SNR_threshold;
|
||||
uint16_t *ulprbbl = nr_mac->ulprbbl;
|
||||
|
||||
uint16_t num_rbs = nr_srs_bf_report.prg_size * nr_srs_bf_report.reported_symbol_list[0].num_prgs;
|
||||
|
||||
@@ -184,6 +184,15 @@ typedef enum {
|
||||
SSB_SINR,
|
||||
} nr_config_report_type_t;
|
||||
|
||||
typedef struct nr_power_config {
|
||||
/// target SNR
|
||||
int target_snrx10;
|
||||
/// RSSI threshold for power control. Limits power control commands when RSSI reaches threshold.
|
||||
int rssi_threshold;
|
||||
/// Failure threshold (compared to consecutive PUSCH DTX)
|
||||
int failure_thres;
|
||||
} nr_power_config_t;
|
||||
|
||||
typedef struct nr_mac_config_s {
|
||||
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
||||
int pusch_AntennaPorts;
|
||||
@@ -197,8 +206,10 @@ typedef struct nr_mac_config_s {
|
||||
bool use_deltaMCS;
|
||||
int maxMIMO_layers;
|
||||
bool disable_harq;
|
||||
//int pusch_TargetSNRx10;
|
||||
//int pucch_TargetSNRx10;
|
||||
nr_power_config_t pusch;
|
||||
/// SNR threshold needed to put or not a PRB in the black list
|
||||
int ul_prbblack_SNR_threshold;
|
||||
nr_power_config_t pucch;
|
||||
nr_mac_timers_t timer_config;
|
||||
int num_dlharq;
|
||||
int num_ulharq;
|
||||
@@ -901,20 +912,6 @@ typedef struct gNB_MAC_INST_s {
|
||||
/// Pointer to IF module instance for PHY
|
||||
NR_IF_Module_t *if_inst;
|
||||
pthread_t stats_thread;
|
||||
/// Pusch target SNR
|
||||
int pusch_target_snrx10;
|
||||
/// RSSI threshold for power control. Limits power control commands when RSSI reaches threshold.
|
||||
int pusch_rssi_threshold;
|
||||
/// Pucch target SNR
|
||||
int pucch_target_snrx10;
|
||||
/// RSSI threshold for PUCCH power control. Limits power control commands when RSSI reaches threshold.
|
||||
int pucch_rssi_threshold;
|
||||
/// SNR threshold needed to put or not a PRB in the black list
|
||||
int ul_prbblack_SNR_threshold;
|
||||
/// PUCCH Failure threshold (compared to consecutive PUCCH DTX)
|
||||
int pucch_failure_thres;
|
||||
/// PUSCH Failure threshold (compared to consecutive PUSCH DTX)
|
||||
int pusch_failure_thres;
|
||||
/// Subcarrier Offset
|
||||
int ssb_SubcarrierOffset;
|
||||
int ssb_OffsetPointA;
|
||||
|
||||
Reference in New Issue
Block a user