Commit 28345c7a authored by Swetank Srivastava's avatar Swetank Srivastava

Intermediate changes

parent 1d7925c6
...@@ -497,7 +497,7 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) { ...@@ -497,7 +497,7 @@ int get_nr_table_idx(int nr_bandP, uint8_t scs_index) {
break; break;
} }
AssertFatal(i > 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n",nr_bandP); AssertFatal(i >= 0 && i < sizeofArray(nr_bandtable), "band is not existing: %d\n",nr_bandP);
LOG_D(PHY, "NR band table index %d (Band %d, dl_min %lu, ul_min %lu)\n", i, nr_bandtable[i].band, nr_bandtable[i].dl_min,nr_bandtable[i].ul_min); LOG_D(PHY, "NR band table index %d (Band %d, dl_min %lu, ul_min %lu)\n", i, nr_bandtable[i].band, nr_bandtable[i].dl_min,nr_bandtable[i].ul_min);
return i; return i;
......
...@@ -154,8 +154,8 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, int N_RB_DL) ...@@ -154,8 +154,8 @@ void set_scs_parameters (NR_DL_FRAME_PARMS *fp, int mu, int N_RB_DL)
fp->slots_per_subframe = nr_slots_per_subframe[NR_MU_1]; fp->slots_per_subframe = nr_slots_per_subframe[NR_MU_1];
while(nr_ssb_table[idx][0]!=fp->nr_band || while(nr_ssb_table[idx][0]!=fp->nr_band ||
nr_ssb_table[idx][1]!=30) { nr_ssb_table[idx][1]!=30) {
AssertFatal(nr_ssb_table[idx][0]<=fp->nr_band,"SCS %d not applicable to band %d\n", /* AssertFatal(nr_ssb_table[idx][0]<=fp->nr_band,"SCS %d not applicable to band %d\n",
fp->subcarrier_spacing,fp->nr_band); fp->subcarrier_spacing,fp->nr_band); */
idx++; idx++;
} }
fp->ssb_type = nr_ssb_table[idx][2]; fp->ssb_type = nr_ssb_table[idx][2];
......
...@@ -311,7 +311,7 @@ const uint8_t table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[16][4]={ ...@@ -311,7 +311,7 @@ const uint8_t table_5_1_2_1_1_5_time_dom_res_alloc_C_dmrs_typeA_pos3[16][4]={
{1,0,2,6} // row index 16 {1,0,2,6} // row index 16
}; };
void get_info_from_tda_tables(int default_abc, void get_info_from_tda_tables(int default_abc,
int tda, int tda,
int dmrs_TypeA_Position, int dmrs_TypeA_Position,
int normal_CP, int normal_CP,
...@@ -1961,7 +1961,9 @@ void get_delta_arfcn(int i, uint32_t nrarfcn, uint64_t N_OFFs){ ...@@ -1961,7 +1961,9 @@ void get_delta_arfcn(int i, uint32_t nrarfcn, uint64_t N_OFFs){
uint32_t delta_arfcn = nrarfcn - N_OFFs; uint32_t delta_arfcn = nrarfcn - N_OFFs;
if(delta_arfcn%(nr_bandtable[i].step_size)!=0) if(delta_arfcn%(nr_bandtable[i].step_size)!=0)
AssertFatal(1 == 0, "nrarfcn %u is not on the channel raster for step size %lu", nrarfcn, nr_bandtable[i].step_size); // AssertFatal(1 == 0, "nrarfcn %u is not on the channel raster for step size %lu", nrarfcn, nr_bandtable[i].step_size);
LOG_E(NR_MAC, "fxn:%s nrarfcn %u is not on the channel raster for step size %lu",
__FUNCTION__, nrarfcn, nr_bandtable[i].step_size);
} }
...@@ -2052,6 +2054,7 @@ uint64_t from_nrarfcn(int nr_bandP, ...@@ -2052,6 +2054,7 @@ uint64_t from_nrarfcn(int nr_bandP,
} }
} }
LOG_D(NR_MAC, "swetank: nrarfcn:%d nr_table_index:%d\n", nrarfcn, i);
LOG_D(NR_MAC, "Frequency from NR-ARFCN for N_OFFs %lu, duplex spacing %d KHz, deltaFglobal %d KHz\n", N_OFFs, delta_duplex, deltaFglobal); LOG_D(NR_MAC, "Frequency from NR-ARFCN for N_OFFs %lu, duplex spacing %d KHz, deltaFglobal %d KHz\n", N_OFFs, delta_duplex, deltaFglobal);
AssertFatal(nrarfcn >= N_OFFs,"nrarfcn %u < N_OFFs[%d] %llu\n", nrarfcn, nr_bandtable[i].band, (long long unsigned int)N_OFFs); AssertFatal(nrarfcn >= N_OFFs,"nrarfcn %u < N_OFFs[%d] %llu\n", nrarfcn, nr_bandtable[i].band, (long long unsigned int)N_OFFs);
...@@ -3507,7 +3510,17 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD ...@@ -3507,7 +3510,17 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD
type0_PDCCH_CSS_config->num_rbs = -1; type0_PDCCH_CSS_config->num_rbs = -1;
type0_PDCCH_CSS_config->num_symbols = -1; type0_PDCCH_CSS_config->num_symbols = -1;
type0_PDCCH_CSS_config->rb_offset = -1; type0_PDCCH_CSS_config->rb_offset = -1;
LOG_D(NR_MAC,"NR_SubcarrierSpacing_kHz30 %d, scs_ssb %d, scs_pdcch %d, min_chan_bw %d\n",(int)NR_SubcarrierSpacing_kHz30,(int)scs_ssb,(int)scs_pdcch,min_channel_bw); LOG_D(NR_MAC,"swetank: NR_SubcarrierSpacing_kHz30 %d, scs_ssb %d, scs_pdcch %d, min_chan_bw %d\n",(int)NR_SubcarrierSpacing_kHz30,(int)scs_ssb,(int)scs_pdcch,min_channel_bw);
LOG_D(NR_MAC,"swetank: fxn:%s pdcch_ConfigSIB1.controlResourceSetZero:%d pdcch_ConfigSIB1.searchSpaceZero:%d\n", __FUNCTION__, mib->pdcch_ConfigSIB1.controlResourceSetZero, mib->pdcch_ConfigSIB1.searchSpaceZero);
LOG_D(NR_MAC,"swetank: fxn:%s num_slot_per_frame:%d ssb_subcarrier_offset:%d ssb_start_symbol:%d frequency_range:%d ssb_index:%d ssb_period:%d \n",
__FUNCTION__,
num_slot_per_frame,
ssb_subcarrier_offset,
ssb_start_symbol,
frequency_range,
ssb_index,
ssb_period
);
// type0-pdcch coreset // type0-pdcch coreset
switch( ((int)scs_ssb << 3) | (int)scs_pdcch ){ switch( ((int)scs_ssb << 3) | (int)scs_pdcch ){
...@@ -3826,6 +3839,7 @@ void get_type0_PDCCH_CSS_config_parameters(NR_Type0_PDCCH_CSS_config_t *type0_PD ...@@ -3826,6 +3839,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->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; type0_PDCCH_CSS_config->cset_start_rb = ssb_offset_point_a - type0_PDCCH_CSS_config->rb_offset;
LOG_E(NR_MAC,"swetank: fxn:%s cset_start_rb:%d ssb_offset_point_a:%d rb_offset:%d \n", __FUNCTION__, type0_PDCCH_CSS_config->cset_start_rb, ssb_offset_point_a, type0_PDCCH_CSS_config->rb_offset);
} }
......
...@@ -327,9 +327,9 @@ void config_common(int Mod_idP, int ssb_SubcarrierOffset, int pdsch_AntennaPorts ...@@ -327,9 +327,9 @@ void config_common(int Mod_idP, int ssb_SubcarrierOffset, int pdsch_AntennaPorts
} else { } else {
ssb_SubcarrierOffset_limit = 12; ssb_SubcarrierOffset_limit = 12;
} }
if (ssb_SubcarrierOffset<ssb_SubcarrierOffset_limit) /* if (ssb_SubcarrierOffset<ssb_SubcarrierOffset_limit)
AssertFatal(sco==(scs_scaling * ssb_SubcarrierOffset),"absoluteFrequencySSB has a subcarrier offset of %d while it should be %d\n",sco/scs_scaling,ssb_SubcarrierOffset); AssertFatal(sco==(scs_scaling * ssb_SubcarrierOffset),"absoluteFrequencySSB has a subcarrier offset of %d while it should be %d\n",sco/scs_scaling,ssb_SubcarrierOffset);
*/
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) - 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->ssb_table.ssb_offset_point_a.tl.tag = NFAPI_NR_CONFIG_SSB_OFFSET_POINT_A_TAG;
cfg->num_tlv++; cfg->num_tlv++;
......
...@@ -275,6 +275,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, ...@@ -275,6 +275,7 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
frame_t frame, frame_t frame,
sub_frame_t slot){ sub_frame_t slot){
LOG_D(NR_MAC, "fxn:%s Entry\n", __FUNCTION__);
protocol_ctxt_t ctxt={0}; protocol_ctxt_t ctxt={0};
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frame, slot,module_idP); PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, module_idP, ENB_FLAG_YES, NOT_A_RNTI, frame, slot,module_idP);
...@@ -401,4 +402,5 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP, ...@@ -401,4 +402,5 @@ void gNB_dlsch_ulsch_scheduler(module_id_t module_idP,
stop_meas(&RC.nrmac[module_idP]->eNB_scheduler); stop_meas(&RC.nrmac[module_idP]->eNB_scheduler);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_gNB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT);
LOG_D(NR_MAC, "fxn:%s Exit\n", __FUNCTION__);
} }
...@@ -1210,22 +1210,30 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra ...@@ -1210,22 +1210,30 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
bwp = ra->CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[ra->bwp_id-1]; bwp = ra->CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[ra->bwp_id-1];
genericParameters = &bwp->bwp_Common->genericParameters; genericParameters = &bwp->bwp_Common->genericParameters;
pdsch_TimeDomainAllocationList = bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList; pdsch_TimeDomainAllocationList = bwp->bwp_Common->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
LOG_D(NR_MAC, "swetank: fxn:%s line:%d \n", __FUNCTION__, __LINE__);
} }
else { else {
genericParameters= &scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters; genericParameters= &scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
pdsch_TimeDomainAllocationList = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList; pdsch_TimeDomainAllocationList = scc->downlinkConfigCommon->initialDownlinkBWP->pdsch_ConfigCommon->choice.setup->pdsch_TimeDomainAllocationList;
LOG_D(NR_MAC, "swetank: fxn:%s line:%d \n", __FUNCTION__, __LINE__);
} }
long BWPStart = 0; long BWPStart = 0;
long BWPSize = 0; long BWPSize = 0;
NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config = NULL; NR_Type0_PDCCH_CSS_config_t *type0_PDCCH_CSS_config = NULL;
LOG_D(NR_MAC, "swetank: controlResourceSetId:%d locationAndBandwidth:%d genericParameters.locationAndBandwidth:%d \n",
*ss->controlResourceSetId,
genericParameters->locationAndBandwidth,
scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth);
if(*ss->controlResourceSetId!=0) { if(*ss->controlResourceSetId!=0) {
BWPStart = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE); BWPStart = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
BWPSize = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE); BWPSize = NRRIV2BW(scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
LOG_D(NR_MAC, "swetank: BWPStart:%d BWPSize:%d\n", BWPStart, BWPSize);
} else { } else {
type0_PDCCH_CSS_config = &nr_mac->type0_PDCCH_CSS_config[ra->beam_id]; type0_PDCCH_CSS_config = &nr_mac->type0_PDCCH_CSS_config[ra->beam_id];
BWPStart = type0_PDCCH_CSS_config->cset_start_rb; BWPStart = type0_PDCCH_CSS_config->cset_start_rb;
BWPSize = type0_PDCCH_CSS_config->num_rbs; BWPSize = type0_PDCCH_CSS_config->num_rbs;
LOG_D(NR_MAC, "swetank: BWPStart:%d BWPSize:%d beam_id:%d \n", BWPStart, BWPSize, ra->beam_id);
} }
// Calculate number of symbols // Calculate number of symbols
...@@ -1238,6 +1246,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra ...@@ -1238,6 +1246,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
AssertFatal(coreset!=NULL,"Coreset cannot be null for RA-Msg2\n"); AssertFatal(coreset!=NULL,"Coreset cannot be null for RA-Msg2\n");
LOG_D(NR_MAC, "swetank: BWPStart:%d rbStart:%d rbSize:%d BWPSize:%d startSymbolIndex:%d nrOfSymbols:%d \n", BWPStart, rbStart, rbSize, BWPSize, nrOfSymbols);
uint16_t *vrb_map = cc[CC_id].vrb_map; uint16_t *vrb_map = cc[CC_id].vrb_map;
for (int i = 0; (i < rbSize) && (rbStart <= (BWPSize - rbSize)); i++) { for (int i = 0; (i < rbSize) && (rbStart <= (BWPSize - rbSize)); i++) {
if (vrb_map[BWPStart + rbStart + i]&SL_to_bitmap(startSymbolIndex, nrOfSymbols)) { if (vrb_map[BWPStart + rbStart + i]&SL_to_bitmap(startSymbolIndex, nrOfSymbols)) {
......
...@@ -176,7 +176,10 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) ...@@ -176,7 +176,10 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
uint8_t ssb_frame_periodicity = 1; // every how many frames SSB are generated uint8_t ssb_frame_periodicity = 1; // every how many frames SSB are generated
if (ssb_period > 1) // 0 is every half frame if (ssb_period > 1) // 0 is every half frame
{
LOG_D(MAC," fxn:%s line:%d \n", __FUNCTION__, __LINE__);
ssb_frame_periodicity = 1 << (ssb_period -1); ssb_frame_periodicity = 1 << (ssb_period -1);
}
if (!(frameP%ssb_frame_periodicity) && if (!(frameP%ssb_frame_periodicity) &&
((slotP<(slots_per_frame>>1)) || (ssb_period == 0))) { ((slotP<(slots_per_frame>>1)) || (ssb_period == 0))) {
...@@ -202,6 +205,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) ...@@ -202,6 +205,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
switch (scc->ssb_PositionsInBurst->present) { switch (scc->ssb_PositionsInBurst->present) {
case 1: case 1:
// short bitmap (<3GHz) max 4 SSBs // short bitmap (<3GHz) max 4 SSBs
LOG_D(MAC," fxn:%s line:%d \n", __FUNCTION__, __LINE__);
for (int i_ssb=0; i_ssb<4; i_ssb++) { for (int i_ssb=0; i_ssb<4; i_ssb++) {
if ((shortBitmap->buf[0]>>(7-i_ssb))&0x01) { if ((shortBitmap->buf[0]>>(7-i_ssb))&0x01) {
ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb); ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb);
...@@ -230,6 +234,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) ...@@ -230,6 +234,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
break; break;
case 2: case 2:
// medium bitmap (<6GHz) max 8 SSBs // medium bitmap (<6GHz) max 8 SSBs
LOG_D(MAC," fxn:%s line:%d \n", __FUNCTION__, __LINE__);
for (int i_ssb=0; i_ssb<8; i_ssb++) { for (int i_ssb=0; i_ssb<8; i_ssb++) {
if ((mediumBitmap->buf[0]>>(7-i_ssb))&0x01) { if ((mediumBitmap->buf[0]>>(7-i_ssb))&0x01) {
ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb); ssb_start_symbol = get_ssb_start_symbol(band,scs,i_ssb);
...@@ -333,9 +338,14 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -333,9 +338,14 @@ uint32_t schedule_control_sib1(module_id_t module_id,
NR_COMMON_channels_t *cc = &gNB_mac->common_channels[CC_id]; NR_COMMON_channels_t *cc = &gNB_mac->common_channels[CC_id];
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
uint16_t *vrb_map = cc->vrb_map; uint16_t *vrb_map = cc->vrb_map;
LOG_D(NR_MAC," fxn:%s Entry \n", __FUNCTION__);
if (gNB_mac->sched_ctrlCommon == NULL){ if (gNB_mac->sched_ctrlCommon == NULL){
LOG_D(NR_MAC,"schedule_control_common: Filling nr_mac->sched_ctrlCommon\n"); LOG_D(NR_MAC,"schedule_control_common: Filling nr_mac->sched_ctrlCommon\n");
LOG_D(NR_MAC," fxn:%s gNB_mac->cset0_bwp_start=type0_PDCCH_CSS_config->cset_start_rb:%d gNB_mac->cset0_bwp_size=type0_PDCCH_CSS_config->num_rbs:%d \n",
__FUNCTION__,
gNB_mac->cset0_bwp_start,
gNB_mac->cset0_bwp_size);
gNB_mac->sched_ctrlCommon = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon)); gNB_mac->sched_ctrlCommon = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon));
gNB_mac->sched_ctrlCommon->search_space = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon->search_space)); gNB_mac->sched_ctrlCommon->search_space = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon->search_space));
gNB_mac->sched_ctrlCommon->coreset = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon->coreset)); gNB_mac->sched_ctrlCommon->coreset = calloc(1,sizeof(*gNB_mac->sched_ctrlCommon->coreset));
...@@ -370,11 +380,16 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -370,11 +380,16 @@ uint32_t schedule_control_sib1(module_id_t module_id,
&gNB_mac->sched_ctrlCommon->sched_pdcch, &gNB_mac->sched_ctrlCommon->sched_pdcch,
gNB_mac->sched_ctrlCommon->coreset, gNB_mac->sched_ctrlCommon->coreset,
0); 0);
// if (RC.ss.mode >= SS_SOFTMODEM)
// gNB_mac->sched_ctrlCommon->cce_index = 0;
LOG_D(MAC,"swetank: cce_index: %d\n", gNB_mac->sched_ctrlCommon->cce_index);
AssertFatal(gNB_mac->sched_ctrlCommon->cce_index >= 0, "Could not find CCE for coreset0\n"); AssertFatal(gNB_mac->sched_ctrlCommon->cce_index >= 0, "Could not find CCE for coreset0\n");
const uint16_t bwpSize = type0_PDCCH_CSS_config->num_rbs; const uint16_t bwpSize = type0_PDCCH_CSS_config->num_rbs;
int rbStart = type0_PDCCH_CSS_config->cset_start_rb; int rbStart = 0;
if(RC.ss.mode >= SS_SOFTMODEM)
rbStart = 27;
// TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C) // TODO: There are exceptions to this in table 5.1.2.1.1-4,5 (Default time domain allocation tables B, C)
int mappingtype = (startSymbolIndex <= 3)? typeA: typeB; int mappingtype = (startSymbolIndex <= 3)? typeA: typeB;
...@@ -391,6 +406,7 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -391,6 +406,7 @@ uint32_t schedule_control_sib1(module_id_t module_id,
LOG_D(MAC,"dlDmrsSymbPos %x\n",dlDmrsSymbPos); LOG_D(MAC,"dlDmrsSymbPos %x\n",dlDmrsSymbPos);
int rbSize = 0; int rbSize = 0;
uint32_t TBS = 0; uint32_t TBS = 0;
LOG_D(MAC,"bwpSize:%d rbStart:%d rbSize:%d startSymbolIndex,:%d nrOfSymbols:%d\n",bwpSize, rbStart, rbSize, startSymbolIndex, nrOfSymbols);
do { do {
if(rbSize < bwpSize && !(vrb_map[rbStart + rbSize]&SL_to_bitmap(startSymbolIndex, nrOfSymbols))) if(rbSize < bwpSize && !(vrb_map[rbStart + rbSize]&SL_to_bitmap(startSymbolIndex, nrOfSymbols)))
rbSize++; rbSize++;
...@@ -403,14 +419,30 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -403,14 +419,30 @@ uint32_t schedule_control_sib1(module_id_t module_id,
TBS = nr_compute_tbs(nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx), TBS = nr_compute_tbs(nr_get_Qm_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx),
nr_get_code_rate_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx), nr_get_code_rate_dl(gNB_mac->sched_ctrlCommon->sched_pdsch.mcs, gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx),
rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0, 0,1) >> 3; rbSize, nrOfSymbols, N_PRB_DMRS * dmrs_length,0, 0,1) >> 3;
LOG_D(MAC,"mcs = %i\n", gNB_mac->sched_ctrlCommon->sched_pdsch.mcs);
LOG_D(MAC,"nrOfSymbols = %i\n", nrOfSymbols);
LOG_D(MAC, "rbSize = %i\n", rbSize);
LOG_D(MAC, "rbStart = %i\n", rbStart);
LOG_D(MAC,"TBS = %i\n", TBS);
LOG_D(MAC,"mcsTableIdx= %i\n", gNB_mac->sched_ctrlCommon->pdsch_semi_static.mcsTableIdx);
LOG_D(MAC,"dmrs_length %d\n",dmrs_length);
LOG_D(MAC,"time_domain_allocation= %i\n", time_domain_allocation);
LOG_D(MAC,"startSymbolIndex= %i\n", startSymbolIndex);
LOG_D(MAC,"nrOfSymbols= %i\n", nrOfSymbols);
LOG_D(MAC,"dlDmrsSymbPos= %i\n", dlDmrsSymbPos);
LOG_D(MAC,"candidate_idx= %i\n", candidate_idx);
LOG_D(MAC,"num_total_bytes= %i\n", num_total_bytes);
LOG_D(MAC,"num_total_bytes= %i\n", num_total_bytes);
} while (TBS < gNB_mac->sched_ctrlCommon->num_total_bytes); } 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", 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); gNB_mac->sched_ctrlCommon->num_total_bytes);
gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize = rbSize; gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize = rbSize;
gNB_mac->sched_ctrlCommon->sched_pdsch.rbStart = 0; gNB_mac->sched_ctrlCommon->sched_pdsch.rbStart = 0;
/*
LOG_D(MAC,"mcs = %i\n", gNB_mac->sched_ctrlCommon->sched_pdsch.mcs); LOG_D(MAC,"mcs = %i\n", gNB_mac->sched_ctrlCommon->sched_pdsch.mcs);
LOG_D(MAC,"startSymbolIndex = %i\n", startSymbolIndex); LOG_D(MAC,"startSymbolIndex = %i\n", startSymbolIndex);
LOG_D(MAC,"nrOfSymbols = %i\n", nrOfSymbols); LOG_D(MAC,"nrOfSymbols = %i\n", nrOfSymbols);
...@@ -419,7 +451,12 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -419,7 +451,12 @@ uint32_t schedule_control_sib1(module_id_t module_id,
LOG_D(MAC,"dmrs_length %d\n",dmrs_length); LOG_D(MAC,"dmrs_length %d\n",dmrs_length);
LOG_D(MAC,"N_PRB_DMRS = %d\n",N_PRB_DMRS); LOG_D(MAC,"N_PRB_DMRS = %d\n",N_PRB_DMRS);
LOG_D(MAC,"mappingtype = %d\n", mappingtype); LOG_D(MAC,"mappingtype = %d\n", mappingtype);
// Mark the corresponding RBs as used // Mark the corresponding RBs as used */
LOG_D(NR_MAC, "swetank: CC_id:%d gNB_mac->sched_ctrlCommon->cce_index:%d aggregation_level:%d sched_pdsch.rbSize:%d \n",
CC_id,
gNB_mac->sched_ctrlCommon->cce_index,
gNB_mac->sched_ctrlCommon->aggregation_level,
gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize);
fill_pdcch_vrb_map(gNB_mac, fill_pdcch_vrb_map(gNB_mac,
CC_id, CC_id,
&gNB_mac->sched_ctrlCommon->sched_pdcch, &gNB_mac->sched_ctrlCommon->sched_pdcch,
...@@ -428,6 +465,7 @@ uint32_t schedule_control_sib1(module_id_t module_id, ...@@ -428,6 +465,7 @@ uint32_t schedule_control_sib1(module_id_t module_id,
for (int rb = 0; rb < gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize; rb++) { for (int rb = 0; rb < gNB_mac->sched_ctrlCommon->sched_pdsch.rbSize; rb++) {
vrb_map[rb + rbStart] = SL_to_bitmap(startSymbolIndex, nrOfSymbols); vrb_map[rb + rbStart] = SL_to_bitmap(startSymbolIndex, nrOfSymbols);
} }
LOG_D(NR_MAC," fxn:%s Exit\n", __FUNCTION__);
return TBS; return TBS;
} }
...@@ -576,6 +614,7 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) ...@@ -576,6 +614,7 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
int time_domain_allocation = gNB_mac->sib1_tda; int time_domain_allocation = gNB_mac->sib1_tda;
LOG_D(NR_MAC, "swetank: scc->ssb_PositionsInBurst->present:%d\n", scc->ssb_PositionsInBurst->present);
int L_max; int L_max;
switch (scc->ssb_PositionsInBurst->present) { switch (scc->ssb_PositionsInBurst->present) {
case 1: case 1:
...@@ -615,6 +654,9 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP) ...@@ -615,6 +654,9 @@ void schedule_nr_sib1(module_id_t module_idP, frame_t frameP, sub_frame_t slotP)
int nrOfSymbols = 0; int nrOfSymbols = 0;
bool is_typeA; bool is_typeA;
LOG_D(NR_MAC,"type0_pdcch_ss_mux_pattern: %i\n", type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern);
LOG_D(NR_MAC,"time_domain_allocation: %i\n", time_domain_allocation);
LOG_D(NR_MAC,"dmrs_TypeA_Position: %i\n", gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position);
get_info_from_tda_tables(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern, get_info_from_tda_tables(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern,
time_domain_allocation, time_domain_allocation,
gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position, gNB_mac->common_channels->ServingCellConfigCommon->dmrs_TypeA_Position,
......
...@@ -404,6 +404,18 @@ int find_pdcch_candidate(gNB_MAC_INST *mac, ...@@ -404,6 +404,18 @@ int find_pdcch_candidate(gNB_MAC_INST *mac,
const int L = pdcch->RegBundleSize; const int L = pdcch->RegBundleSize;
const int C = R>0 ? N_regs/(L*R) : 0; const int C = R>0 ? N_regs/(L*R) : 0;
const int B_rb = L/N_symb; // nb of RBs occupied by each REG bundle const int B_rb = L/N_symb; // nb of RBs occupied by each REG bundle
LOG_D(NR_MAC,"swetank: cc_id:%d aggregation:%d nr_of_candidates:%d N_rb:%d N_symb:%d N_regs:%d N_cces%d R:%d L:%d C:%d B_rb:%d :\n",
cc_id,
aggregation,
nr_of_candidates,
N_rb,
N_symb,
N_regs,
N_cces,
R,
L,
C,
B_rb);
// loop over all the available candidates // loop over all the available candidates
// this implements TS 38.211 Sec. 7.3.2.2 // this implements TS 38.211 Sec. 7.3.2.2
...@@ -413,16 +425,27 @@ int find_pdcch_candidate(gNB_MAC_INST *mac, ...@@ -413,16 +425,27 @@ int find_pdcch_candidate(gNB_MAC_INST *mac,
for (int j=first_cce; (j<first_cce+aggregation) && !taken; j++) { // loop over CCEs for (int j=first_cce; (j<first_cce+aggregation) && !taken; j++) { // loop over CCEs
for (int k=6*j/L; (k<(6*j/L+6/L)) && !taken; k++) { // loop over REG bundles for (int k=6*j/L; (k<(6*j/L+6/L)) && !taken; k++) { // loop over REG bundles
int f = cce_to_reg_interleaving(R, k, pdcch->ShiftIndex, C, L, N_regs); int f = cce_to_reg_interleaving(R, k, pdcch->ShiftIndex, C, L, N_regs);
LOG_D(NR_MAC,"swetank: pdcch->ShiftIndex:%d\n", pdcch->ShiftIndex);
for(int rb=0; rb<B_rb; rb++) { // loop over the RBs of the bundle for(int rb=0; rb<B_rb; rb++) { // loop over the RBs of the bundle
if(vrb_map[pdcch->BWPStart + f*B_rb + rb]&SL_to_bitmap(pdcch->StartSymbolIndex,N_symb)) { if(vrb_map[pdcch->BWPStart + f*B_rb + rb]&SL_to_bitmap(pdcch->StartSymbolIndex,N_symb)) {
LOG_D(NR_MAC,"swetank: pdcch->BWPStart:%d pdcch->StartSymbolIndex:%d \n", pdcch->BWPStart, pdcch->StartSymbolIndex);
taken = true; taken = true;
break; break;
} }
} }
} }
} }
if (RC.ss.mode == SS_SOFTMODEM)
{
taken = 0;
m = 0;
first_cce = 0;
}
LOG_D(NR_MAC,"swetank: taken:%d m:%d \n", taken, m);
if(!taken){ if(!taken){
mac->pdcch_cand[coreset->controlResourceSetId] = m++; // using candidate m, next available is m+1 mac->pdcch_cand[coreset->controlResourceSetId] = m++; // using candidate m, next available is m+1
LOG_D(NR_MAC,"swetank: coreset->controlResourceSetId:%d mac->pdcch_cand[coreset->controlResourceSetId]:%d\n", coreset->controlResourceSetId, mac->pdcch_cand[coreset->controlResourceSetId]);
return first_cce; return first_cce;
} }
} }
......
...@@ -373,6 +373,7 @@ static void match_crc_rx_pdu(nfapi_nr_rx_data_indication_t *rx_ind, nfapi_nr_crc ...@@ -373,6 +373,7 @@ static void match_crc_rx_pdu(nfapi_nr_rx_data_indication_t *rx_ind, nfapi_nr_crc
} }
void NR_UL_indication(NR_UL_IND_t *UL_info) { void NR_UL_indication(NR_UL_IND_t *UL_info) {
LOG_D(NR_MAC, "fxn:%s Entry\n", __FUNCTION__);
AssertFatal(UL_info!=NULL,"UL_info is null\n"); AssertFatal(UL_info!=NULL,"UL_info is null\n");
#ifdef DUMP_FAPI #ifdef DUMP_FAPI
dump_ul(UL_info); dump_ul(UL_info);
...@@ -509,6 +510,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) { ...@@ -509,6 +510,7 @@ void NR_UL_indication(NR_UL_IND_t *UL_info) {
sched_info->DL_req->dl_tti_request_body.nPDUs); sched_info->DL_req->dl_tti_request_body.nPDUs);
} }
} }
LOG_D(NR_MAC, "fxn:%s Exit\n", __FUNCTION__);
} }
NR_IF_Module_t *NR_IF_Module_init(int Mod_id) { NR_IF_Module_t *NR_IF_Module_init(int Mod_id) {
......
...@@ -285,7 +285,7 @@ static inline void ss_gNB_read_from_socket(acpCtx_t ctx) ...@@ -285,7 +285,7 @@ static inline void ss_gNB_read_from_socket(acpCtx_t ctx)
SS_NR_SYS_PORT_MSG_IND(message_p).req = req; SS_NR_SYS_PORT_MSG_IND(message_p).req = req;
SS_NR_SYS_PORT_MSG_IND(message_p).userId = userId; SS_NR_SYS_PORT_MSG_IND(message_p).userId = userId;
itti_send_msg_to_task(TASK_SYS_GNB, INSTANCE_DEFAULT, message_p); itti_send_msg_to_task(TASK_SYS_GNB, INSTANCE_DEFAULT, message_p);
LOG_A(GNB_APP, "[SS-PORTMAN-GNB] fxn:%s line:%d Msg sent to \n", __FUNCTION__, __LINE__, TASK_SYS_GNB); LOG_A(GNB_APP, "[SS-PORTMAN-GNB] fxn:%s line:%d Msg sent to TASK_SYS_GNB \n", __FUNCTION__, __LINE__);
} }
} }
} }
......
This diff is collapsed.
...@@ -29,7 +29,7 @@ typedef struct CellConfig5GReq_s ...@@ -29,7 +29,7 @@ typedef struct CellConfig5GReq_s
proxy_ss_header_t header; proxy_ss_header_t header;
int16_t maxRefPower; int16_t maxRefPower;
uint8_t initialAttenuation; uint8_t initialAttenuation;
long absoluteFrequencySSB; long absoluteFrequency;
} CellConfig5GReq_t; } CellConfig5GReq_t;
typedef enum _sys_Type typedef enum _sys_Type
......
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