Compare commits

...

9 Commits

Author SHA1 Message Date
Raymond Knopp
eaa9f672bc last fix for P5 message using kSSB 2022-07-03 00:48:33 +02:00
Raymond Knopp
9aaa3ed334 some logging. 2022-07-02 18:31:21 +02:00
Raymond Knopp
d63f43c69a changes for nonzero kSSB 2022-07-02 14:43:38 +02:00
Raymond Knopp
367a03cd67 Merge branch 'develop' into nonzeroKSSB_hotfix 2022-07-02 10:34:04 +02:00
Raymond Knopp
ba8bad1f2b scs fix for non-zero kSSB 2022-07-02 10:32:58 +02:00
Raymond Knopp
183f9588b4 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop
Conflicts:
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_uci.c
2022-07-02 09:07:56 +02:00
Raymond Knopp
165b8d18d5 check for error in Msg3 allocation 2022-05-13 22:55:44 +02:00
Raymond Knopp
1d48718840 Merge branch 'develop' of https://gitlab.eurecom.fr/oai/openairinterface5g into develop 2022-05-13 21:11:10 +02:00
Raymond Knopp
75fdfbe263 minor logging change 2022-05-13 09:32:23 +02:00
8 changed files with 31 additions and 27 deletions

View File

@@ -267,7 +267,7 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu,
else
pbch->pbch_a |= ((config->ssb_table.ssb_subcarrier_offset.value>>4)&1)<<29; //MSB of k_SSB (bit index 4)
LOG_D(PHY,"After extra byte: pbch_a = 0x%08x\n",pbch->pbch_a);
LOG_D(PHY,"After extra byte: pbch_a = 0x%08x (ssb_subcarrier_offset %d)\n",pbch->pbch_a,config->ssb_table.ssb_subcarrier_offset.value);
// Payload interleaving

View File

@@ -72,8 +72,8 @@ void nr_common_signal_procedures (PHY_VARS_gNB *gNB,int frame,int slot,nfapi_nr_
ssb_start_symbol = ssb_start_symbol_abs % fp->symbols_per_slot; // start symbol wrt slot
// setting the first subcarrier
fp->ssb_start_subcarrier = (12 * cfg->ssb_table.ssb_offset_point_a.value + ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset);
LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset);
fp->ssb_start_subcarrier = (12 * cfg->ssb_table.ssb_offset_point_a.value + (ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset>>cfg->ssb_config.scs_common.value));
LOG_D(PHY, "SSB first subcarrier %d (%d,%d)\n", fp->ssb_start_subcarrier,cfg->ssb_table.ssb_offset_point_a.value,ssb_pdu.ssb_pdu_rel15.SsbSubcarrierOffset>>cfg->ssb_config.scs_common.value);
LOG_D(PHY,"SS TX: frame %d, slot %d, start_symbol %d\n",frame,slot, ssb_start_symbol);
nr_generate_pss(&txdataF[0][txdataF_offset], AMP, ssb_start_symbol, cfg, fp);

View File

@@ -3886,7 +3886,7 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
type0_PDCCH_CSS_config->n_0 = ((uint32_t)(big_o*(1<<scs_pdcch)) + (uint32_t)(type0_PDCCH_CSS_config->ssb_index*big_m))%num_slot_per_frame;
type0_PDCCH_CSS_config->cset_start_rb = ssb_offset_point_a - type0_PDCCH_CSS_config->rb_offset;
LOG_D(NR_MAC,"Setting cset_start_rb to %d (%d,%d,%d)\n",type0_PDCCH_CSS_config->cset_start_rb,ssb_offset_point_a,scs_ssb,type0_PDCCH_CSS_config->rb_offset);
}
void fill_coresetZero(NR_ControlResourceSet_t *coreset0, NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config) {

View File

@@ -335,22 +335,20 @@ void config_common(int Mod_idP, int pdsch_AntennaPorts, int pusch_AntennaPorts,
cfg->num_tlv++;
// SSB Table Configuration
int scs_scaling = 1<<(cfg->ssb_config.scs_common.value);
int scs_scaling = 1; // value for FR1 >= 3 GHz (15 kHz steps)
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA < 600000)
scs_scaling = scs_scaling*3;
scs_scaling = scs_scaling*3; // conversion for FR1 < 3GHz, 5 kHz steps)
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
scs_scaling = scs_scaling>>2;
scs_scaling = scs_scaling>>2; // conversion for FR2, 60 kHz steps)
uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
RC.nrmac[Mod_idP]->ssb_SubcarrierOffset = absolute_diff%(12*scs_scaling);
RC.nrmac[Mod_idP]->ssb_SubcarrierOffset = (absolute_diff*scs_scaling)%24;
int sco = 31; // no SIB1
if(get_softmodem_params()->sa) {
sco = RC.nrmac[Mod_idP]->ssb_SubcarrierOffset;
if(frequency_range == FR1)
sco <<= cfg->ssb_config.scs_common.value; // 38.211 section 7.4.3.1 in FR1 it is expresses in terms of 15kHz SCS
}
cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*scs_scaling) - 10; //absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
cfg->ssb_table.ssb_offset_point_a.value = absolute_diff/(12*(scs_scaling<<cfg->ssb_config.scs_common.value)) - 10; //absoluteFrequencySSB is the central frequency of SSB which is made by 20RBs in total
cfg->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
cfg->num_tlv++;
cfg->ssb_table.ssb_period.value = *scc->ssb_periodicityServingCell;

View File

@@ -1121,6 +1121,7 @@ void fill_msg3_pusch_pdu(nfapi_nr_pusch_pdu_t *pusch_pdu,
pusch_pdu->mcs_index = mcsindex;
pusch_pdu->pusch_data.tb_size = TBS;
AssertFatal(mcsindex<10, "msg3 mcs got to 10 cannot get TBS = 7: pusch_pdu->rb_size %d, pusch_pdu->nr_of_symbols %d\n",pusch_pdu->rb_size,pusch_pdu->nr_of_symbols);
}
}

View File

@@ -134,7 +134,7 @@ void schedule_ssb(frame_t frame, sub_frame_t slot,
dl_config_pdu->ssb_pdu.ssb_pdu_rel15.precoding_and_beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = beam_index;
dl_req->nPDUs++;
LOG_D(MAC,"Scheduling ssb %d at frame %d and slot %d\n",i_ssb,frame,slot);
LOG_D(NR_MAC,"Scheduling ssb %d at frame %d and slot %d, scoffset %d, offset_pointa %d\n",i_ssb,frame,slot,scoffset,offset_pointa);
}
@@ -198,7 +198,6 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
const BIT_STRING_t *longBitmap = &scc->ssb_PositionsInBurst->choice.longBitmap;
uint16_t ssb_start_symbol;
switch (scc->ssb_PositionsInBurst->present) {
case 1:
// short bitmap (<3GHz) max 4 SSBs
@@ -207,8 +206,9 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb);
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
if ((ssb_start_symbol/14) == rel_slot){
LOG_D(NR_MAC,"Generating SSB in %d.%d (%d,%d)\n",frameP,slotP,offset_pointa,ssbSubcarrierOffset);
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset, ssb_start_symbol, CC_id);
if (get_softmodem_params()->sa == 1) {
get_type0_PDCCH_CSS_config_parameters(&gNB->type0_PDCCH_CSS_config[i_ssb],
frameP,
@@ -236,7 +236,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
if ((ssb_start_symbol/14) == rel_slot){
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset,ssb_start_symbol, CC_id);
if (get_softmodem_params()->sa == 1) {
get_type0_PDCCH_CSS_config_parameters(&gNB->type0_PDCCH_CSS_config[i_ssb],
frameP,
@@ -265,7 +265,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
// if start symbol is in current slot, schedule current SSB, fill VRB map and call get_type0_PDCCH_CSS_config_parameters
if ((ssb_start_symbol/14) == rel_slot){
schedule_ssb(frameP, slotP, scc, dl_req, i_ssb, ssbSubcarrierOffset, offset_pointa, (*(uint32_t*)cc->MIB_pdu.payload) & ((1<<24)-1));
fill_ssb_vrb_map(cc, offset_pointa, ssb_start_symbol, CC_id);
fill_ssb_vrb_map(cc, offset_pointa, ssbSubcarrierOffset, ssb_start_symbol, CC_id);
const NR_TDD_UL_DL_Pattern_t *tdd = &scc->tdd_UL_DL_ConfigurationCommon->pattern1;
const int n_slots_frame = nr_slots_per_frame[*scc->ssbSubcarrierSpacing];
// FR2 is only TDD, to be fixed for flexible TDD
@@ -306,7 +306,7 @@ void schedule_nr_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframe
//----------------------------------------
}
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart, int CC_id) {
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id) {
AssertFatal(*cc->ServingCellConfigCommon->ssbSubcarrierSpacing !=
NR_SubcarrierSpacing_kHz240,
@@ -314,7 +314,9 @@ void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart
uint16_t *vrb_map = cc[CC_id].vrb_map;
for (int rb = 0; rb < 20; rb++)
int extra_prb = ssb_subcarrier_offset > 0 ? 1 : 0;
LOG_D(NR_MAC,"Filling SSB positions in VRBMAP starting at rb %d for %d PRBs\n",rbStart,(20+extra_prb));
for (int rb = 0; rb < (20+extra_prb); rb++)
vrb_map[rbStart + rb] = SL_to_bitmap(symStart, 4);
}
@@ -405,9 +407,10 @@ uint32_t schedule_control_sib1(module_id_t module_id,
rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0, 0,1) >> 3;
} while (TBS < gNB_mac->sched_ctrlCommon->num_total_bytes);
AssertFatal(TBS>=gNB_mac->sched_ctrlCommon->num_total_bytes,"Couldn't allocate enough resources for %d bytes in SIB1 PDSCH\n",
gNB_mac->sched_ctrlCommon->num_total_bytes);
AssertFatal(TBS>=gNB_mac->sched_ctrlCommon->num_total_bytes,"Couldn't allocate enough resources for %d bytes in SIB1 PDSCH (start PRB %d)\n",
gNB_mac->sched_ctrlCommon->num_total_bytes,rbStart);
LOG_D(NR_MAC,"Allocated PDSCH for SIB1 (rbStart %d (absolute), rbSize %d, startSymbolIndex %d, nrOfSymbols %d)\n",rbStart,rbSize,startSymbolIndex,nrOfSymbols);
gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize = rbSize;
gNB_mac->sched_ctrlCommon->sched_pdsch.rbStart = 0;

View File

@@ -434,7 +434,7 @@ int binomial(int n, int k);
bool is_xlsch_in_slot(uint64_t bitmap, sub_frame_t slot);
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, uint16_t symStart, int CC_id);
void fill_ssb_vrb_map (NR_COMMON_channels_t *cc, int rbStart, int ssb_subcarrier_offset, uint16_t symStart, int CC_id);
/* \brief Function to indicate a received SDU on ULSCH.

View File

@@ -226,17 +226,16 @@ uint8_t do_MIB_NR(gNB_RRC_INST *rrc,uint32_t frame) {
AssertFatal(scc->ssbSubcarrierSpacing != NULL, "scc->ssbSubcarrierSpacing is null\n");
int band = *scc->downlinkConfigCommon->frequencyInfoDL->frequencyBandList.list.array[0];
frequency_range_t frequency_range = band<100?FR1:FR2;
int scs_scaling = 1<<*scc->ssbSubcarrierSpacing;
int scs_scaling = 1; // this is the default value for FR1 > 3 GHz
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA < 600000)
scs_scaling = scs_scaling*3;
scs_scaling = scs_scaling*3; // this is FR1 < 3 GHz
if (scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA > 2016666)
scs_scaling = scs_scaling>>2;
scs_scaling = scs_scaling>>2; // this is FR2
uint32_t absolute_diff = (*scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencySSB - scc->downlinkConfigCommon->frequencyInfoDL->absoluteFrequencyPointA);
int ssb_subcarrier_offset = 31; // default value for NSA
if (get_softmodem_params()->sa) {
ssb_subcarrier_offset = absolute_diff%(12*scs_scaling);
if(frequency_range == FR1)
ssb_subcarrier_offset <<= *scc->ssbSubcarrierSpacing;
ssb_subcarrier_offset = (absolute_diff*scs_scaling)%24;
LOG_I(NR_RRC,"Set ssb_subcarrier_offset to %d, absolute_diff %d, scs_scaling %d\n",ssb_subcarrier_offset,absolute_diff, scs_scaling);
}
mib->message.choice.mib->ssb_SubcarrierOffset = ssb_subcarrier_offset&15;
@@ -294,6 +293,9 @@ uint8_t do_MIB_NR(gNB_RRC_INST *rrc,uint32_t frame) {
mib->message.choice.mib->cellBarred = NR_MIB__cellBarred_notBarred;
// assign_enum
mib->message.choice.mib->intraFreqReselection = NR_MIB__intraFreqReselection_notAllowed;
LOG_I(NR_RRC,"MIB cellBarred %d intraFreqReselection %d\n",mib->message.choice.mib->cellBarred,mib->message.choice.mib->intraFreqReselection);
//encode MIB to data
enc_rval = uper_encode_to_buffer(&asn_DEF_NR_BCCH_BCH_Message,
NULL,