Commit 24fed617 authored by francescomani's avatar francescomani

reworking prach scheduler to use new rach occasion information

parent 8f1661c6
......@@ -320,7 +320,7 @@ typedef struct {
int Pc_max;
} NR_PRACH_RESOURCES_t;
typedef struct{
typedef struct {
float ssb_per_ro;
int preambles_per_ssb;
} ssb_ro_preambles_t;
......@@ -362,8 +362,6 @@ typedef struct {
bool RA_active;
/// Random-access preamble index
int ra_PreambleIndex;
// When multiple SSBs per RO is configured, this indicates which one is selected in this RO -> this is used to properly compute the PRACH preamble
uint8_t ssb_nb_in_ro;
int zeroCorrelationZoneConfig;
int restricted_set_config;
// selected SSB for RACH (not the SSB-Index but the cumulative index, excluding not trasmitted SSBs)
......
......@@ -302,4 +302,3 @@ void release_mac_configuration(NR_UE_MAC_INST_t *mac, NR_UE_MAC_reset_cause_t ca
for (int i = mac->TAG_list.count; i > 0 ; i--)
asn_sequence_del(&mac->TAG_list, i - 1, 1);
}
......@@ -403,7 +403,7 @@ static void ra_resource_selection(NR_UE_MAC_INST_t *mac)
ssb = mac->mib_ssb;
// set the PREAMBLE_INDEX to a ra-PreambleIndex corresponding to the selected SSB
ra->ra_PreambleIndex = res->ra_PreambleIndex;
ra->ro_mask_index = cfra->resourcesTwoStep_r16.ra_ssb_OccasionMaskIndex;
ra->ro_mask_index = cfra->resourcesTwoStep_r16.ra_ssb_OccasionMaskIndex;
break;
}
}
......@@ -454,7 +454,7 @@ static void select_prach_occasion(RA_config_t *ra,
int idx_ssb = 0;
int temp_idx = 0;
if (ra->ssb_ro_config.ssb_per_ro < 1) {
num_ros_per_ssb = (int) (1 / ra->ssb_ro_config.ssb_per_ro);
num_ros_per_ssb = (int)(1 / ra->ssb_ro_config.ssb_per_ro);
idx_ssb = (rand_r(&seed) % num_ros_per_ssb);
temp_idx = ra->ra_ssb * num_ros_per_ssb + idx_ssb;
} else {
......@@ -508,13 +508,13 @@ static void configure_prach_occasions(NR_UE_MAC_INST_t *mac, int prach_config_in
if (fs->frame_type == TDD && !check_mixed_slot_prach(fs, slot, start_symbol, end_symbol))
continue;
for (int f = 0; f < num_fd_occasions; f++) { // fd occasions
ra_occasions_period[num_ra_occasions_period] = (prach_occasion_info_t) {
.slot = slot,
.frame_info[0] = prach_info.x,
.frame_info[1] = n == 0 ? prach_info.y : prach_info.y2,
.start_symbol = start_symbol,
.fdm = f,
.format = prach_info.format};
ra_occasions_period[num_ra_occasions_period] =
(prach_occasion_info_t){.slot = slot,
.frame_info[0] = prach_info.x,
.frame_info[1] = n == 0 ? prach_info.y : prach_info.y2,
.start_symbol = start_symbol,
.fdm = f,
.format = prach_info.format};
LOG_D(NR_MAC,
"RA occasion %d: slot %d start symbol %d fd occasion %d\n",
num_ra_occasions_period,
......@@ -533,10 +533,10 @@ static void configure_prach_occasions(NR_UE_MAC_INST_t *mac, int prach_config_in
ra->association_periods = 1;
int nb_eq_ssb = mac->ssb_list.nb_tx_ssb;
if (ra->ssb_ro_config.ssb_per_ro < 1)
nb_eq_ssb *= (int) (1 / ra->ssb_ro_config.ssb_per_ro);
nb_eq_ssb *= (int)(1 / ra->ssb_ro_config.ssb_per_ro);
int nb_eq_ro = num_ra_occasions_period;
if (ra->ssb_ro_config.ssb_per_ro > 1)
nb_eq_ro *= (int) ra->ssb_ro_config.ssb_per_ro;
nb_eq_ro *= (int)ra->ssb_ro_config.ssb_per_ro;
while (nb_eq_ssb > nb_eq_ro) {
// not enough PRACH occasions -> need to increase association period
ra->association_periods <<= 1;
......
This diff is collapsed.
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