fix bug in selecting MSG3 re-transmission slot
This commit is contained in:
@@ -114,6 +114,7 @@ int16_t fill_dmrs_mask(const NR_PDSCH_Config_t *pdsch_Config,
|
||||
mappingType_t mappingtype,
|
||||
int length);
|
||||
int get_slots_per_frame_from_scs(int scs);
|
||||
uint16_t get_ul_bitmap(const frame_structure_t *fs, int slot);
|
||||
bool is_ul_slot(const slot_t slot, const frame_structure_t *fs);
|
||||
bool is_dl_slot(const slot_t slot, const frame_structure_t *fs);
|
||||
bool is_mixed_slot(const slot_t slot, const frame_structure_t *fs);
|
||||
|
||||
@@ -24,6 +24,15 @@
|
||||
#include "common/utils/nr/nr_common.h"
|
||||
#include "nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface_scf.h"
|
||||
|
||||
uint16_t get_ul_bitmap(const frame_structure_t *fs, int slot)
|
||||
{
|
||||
const int slot_period = slot % fs->numb_slots_period;
|
||||
const tdd_bitmap_t *bm = &fs->period_cfg.tdd_slot_bitmap[slot_period];
|
||||
/* For some reason, we only store the number of symbols if it's mixed */
|
||||
const int num_ul_symbols = bm->slot_type == TDD_NR_MIXED_SLOT ? bm->num_ul_symbols : 14;
|
||||
return SL_to_bitmap(14 - num_ul_symbols, num_ul_symbols);
|
||||
}
|
||||
|
||||
int get_slots_per_frame_from_scs(int scs)
|
||||
{
|
||||
const int nr_slots_per_frame[5] = {10, 20, 40, 80, 160};
|
||||
|
||||
@@ -812,8 +812,12 @@ static void nr_generate_Msg3_retransmission(module_id_t module_idP,
|
||||
uint16_t K2 = tda_info.k2 + get_NTN_Koffset(scc);
|
||||
const int sched_frame = (frame + (slot + K2) / slots_frame) % MAX_FRAME_NUMBER;
|
||||
const int sched_slot = (slot + K2) % slots_frame;
|
||||
uint16_t slot_bitmap = get_ul_bitmap(&nr_mac->frame_structure, sched_slot);
|
||||
uint16_t msg3_mask = SL_to_bitmap(tda_info.startSymbolIndex, tda_info.nrOfSymbols);
|
||||
|
||||
if (!is_dl_slot(slot, &nr_mac->frame_structure) || !is_ul_slot(sched_slot, &nr_mac->frame_structure))
|
||||
if (!is_dl_slot(slot, &nr_mac->frame_structure)
|
||||
|| !is_ul_slot(sched_slot, &nr_mac->frame_structure)
|
||||
|| !((msg3_mask & slot_bitmap) == msg3_mask))
|
||||
return;
|
||||
|
||||
NR_beam_alloc_t beam_ul = beam_allocation_procedure(&nr_mac->beam_info, sched_frame, sched_slot, UE->UE_beam_index, slots_frame);
|
||||
|
||||
@@ -46,13 +46,7 @@ int get_num_ul_tda(gNB_MAC_INST *nrmac, int slot, int k2, const NR_tda_info_t **
|
||||
/* we assume that this function is mutex-protected from outside */
|
||||
NR_SCHED_ENSURE_LOCKED(&nrmac->sched_lock);
|
||||
|
||||
const frame_structure_t *fs = &nrmac->frame_structure;
|
||||
const int slot_period = slot % fs->numb_slots_period;
|
||||
const tdd_bitmap_t *bm = &fs->period_cfg.tdd_slot_bitmap[slot_period];
|
||||
/* For some reason, we only store the number of symbols if it's mixed */
|
||||
const int num_ul_symbols = bm->slot_type == TDD_NR_MIXED_SLOT ? bm->num_ul_symbols : 14;
|
||||
const uint16_t ul_bitmap = SL_to_bitmap(14 - num_ul_symbols, num_ul_symbols);
|
||||
|
||||
const uint16_t ul_bitmap = get_ul_bitmap(&nrmac->frame_structure, slot);
|
||||
*first_idx = NULL;
|
||||
FOR_EACH_SEQ_ARR(NR_tda_info_t *, tda, &nrmac->ul_tda) {
|
||||
DevAssert(tda->valid_tda);
|
||||
|
||||
@@ -48,7 +48,6 @@ int get_dl_slots_per_period(const frame_structure_t *fs);
|
||||
int get_full_ul_slots_per_period(const frame_structure_t *fs);
|
||||
int get_full_dl_slots_per_period(const frame_structure_t *fs);
|
||||
int get_ul_slot_offset(const frame_structure_t *fs, int idx, bool count_mixed);
|
||||
|
||||
void delete_nr_ue_data(NR_UE_info_t *UE, NR_COMMON_channels_t *ccPtr, uid_allocator_t *uia);
|
||||
|
||||
void mac_top_init_gNB(ngran_node_t node_type,
|
||||
|
||||
Reference in New Issue
Block a user