automatic selection of SIB1 TDA
This commit is contained in:
@@ -16,8 +16,6 @@ gNBs =
|
|||||||
nr_cellid = 12345678L;
|
nr_cellid = 12345678L;
|
||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ gNBs =
|
|||||||
tr_s_preference = "local_mac"
|
tr_s_preference = "local_mac"
|
||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 15;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -16,8 +16,6 @@ gNBs =
|
|||||||
nr_cellid = 12345678L;
|
nr_cellid = 12345678L;
|
||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 15;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
# force_UL256qam_off = 1;
|
# force_UL256qam_off = 1;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -255,8 +255,6 @@ configuration](../RRC/rrc-usage.md) as well for SIB configuration.
|
|||||||
* `pusch_AntennaPorts` (default 1): number of antenna ports in PUSCH
|
* `pusch_AntennaPorts` (default 1): number of antenna ports in PUSCH
|
||||||
* `maxMIMO_layers` (default -1=unlimited): maximum number of MIMO layers to use
|
* `maxMIMO_layers` (default -1=unlimited): maximum number of MIMO layers to use
|
||||||
in downlink
|
in downlink
|
||||||
* `sib1_tda` (default 1): time domain allocation (TDA) indices to use for SIB1
|
|
||||||
(38.214 section 5.1.2.1.1)
|
|
||||||
* `do_CSIRS` (default 0): flag whether to use channel-state information
|
* `do_CSIRS` (default 0): flag whether to use channel-state information
|
||||||
reference signal (CSI-RS)
|
reference signal (CSI-RS)
|
||||||
* `do_SRS` (default 0): flag whether to use sounding reference signal (SRS)
|
* `do_SRS` (default 0): flag whether to use sounding reference signal (SRS)
|
||||||
|
|||||||
@@ -296,7 +296,6 @@ This allows to reuse HARQ processes immediately, but it breaks compatibility wit
|
|||||||
To enable this feature, the `disable_harq` flag has to be added to the gNB conf file in the section `gNBs.[0]`
|
To enable this feature, the `disable_harq` flag has to be added to the gNB conf file in the section `gNBs.[0]`
|
||||||
```
|
```
|
||||||
...
|
...
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
disable_harq = 1; // <--
|
disable_harq = 1; // <--
|
||||||
|
|
||||||
|
|||||||
@@ -699,7 +699,6 @@ void RCconfig_verify(configmodule_interface_t *cfg, ngran_node_t node_type)
|
|||||||
verify_gnb_param_notset(gnbp, GNB_PDSCH_ANTENNAPORTS_XP_IDX, GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP);
|
verify_gnb_param_notset(gnbp, GNB_PDSCH_ANTENNAPORTS_XP_IDX, GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP);
|
||||||
verify_gnb_param_notset(gnbp, GNB_PUSCH_ANTENNAPORTS_IDX, GNB_CONFIG_STRING_PUSCHANTENNAPORTS);
|
verify_gnb_param_notset(gnbp, GNB_PUSCH_ANTENNAPORTS_IDX, GNB_CONFIG_STRING_PUSCHANTENNAPORTS);
|
||||||
verify_gnb_param_notset(gnbp, GNB_MINRXTXTIME_IDX, GNB_CONFIG_STRING_MINRXTXTIME);
|
verify_gnb_param_notset(gnbp, GNB_MINRXTXTIME_IDX, GNB_CONFIG_STRING_MINRXTXTIME);
|
||||||
verify_gnb_param_notset(gnbp, GNB_SIB1_TDA_IDX, GNB_CONFIG_STRING_SIB1TDA);
|
|
||||||
verify_gnb_param_notset(gnbp, GNB_DO_CSIRS_IDX, GNB_CONFIG_STRING_DOCSIRS);
|
verify_gnb_param_notset(gnbp, GNB_DO_CSIRS_IDX, GNB_CONFIG_STRING_DOCSIRS);
|
||||||
verify_gnb_param_notset(gnbp, GNB_DO_SRS_IDX, GNB_CONFIG_STRING_DOSRS);
|
verify_gnb_param_notset(gnbp, GNB_DO_SRS_IDX, GNB_CONFIG_STRING_DOSRS);
|
||||||
verify_gnb_param_notset(gnbp, GNB_FORCE256QAMOFF_IDX, GNB_CONFIG_STRING_FORCE256QAMOFF);
|
verify_gnb_param_notset(gnbp, GNB_FORCE256QAMOFF_IDX, GNB_CONFIG_STRING_FORCE256QAMOFF);
|
||||||
@@ -1436,8 +1435,6 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
|||||||
}
|
}
|
||||||
config.minRXTXTIME = *GNBParamList.paramarray[0][GNB_MINRXTXTIME_IDX].iptr;
|
config.minRXTXTIME = *GNBParamList.paramarray[0][GNB_MINRXTXTIME_IDX].iptr;
|
||||||
LOG_I(GNB_APP, "minTXRXTIME %d\n", config.minRXTXTIME);
|
LOG_I(GNB_APP, "minTXRXTIME %d\n", config.minRXTXTIME);
|
||||||
config.sib1_tda = *GNBParamList.paramarray[0][GNB_SIB1_TDA_IDX].iptr;
|
|
||||||
LOG_I(GNB_APP, "SIB1 TDA %d\n", config.sib1_tda);
|
|
||||||
config.do_CSIRS = *GNBParamList.paramarray[0][GNB_DO_CSIRS_IDX].iptr;
|
config.do_CSIRS = *GNBParamList.paramarray[0][GNB_DO_CSIRS_IDX].iptr;
|
||||||
config.do_SRS = *GNBParamList.paramarray[0][GNB_DO_SRS_IDX].iptr;
|
config.do_SRS = *GNBParamList.paramarray[0][GNB_DO_SRS_IDX].iptr;
|
||||||
config.max_num_rsrp = *GNBParamList.paramarray[0][GNB_LIMIT_RSRP_REPORT_IDX].iptr;
|
config.max_num_rsrp = *GNBParamList.paramarray[0][GNB_LIMIT_RSRP_REPORT_IDX].iptr;
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ typedef enum {
|
|||||||
#define GNB_CONFIG_STRING_PDSCHANTENNAPORTS_N2 "pdsch_AntennaPorts_N2"
|
#define GNB_CONFIG_STRING_PDSCHANTENNAPORTS_N2 "pdsch_AntennaPorts_N2"
|
||||||
#define GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP "pdsch_AntennaPorts_XP"
|
#define GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP "pdsch_AntennaPorts_XP"
|
||||||
#define GNB_CONFIG_STRING_PUSCHANTENNAPORTS "pusch_AntennaPorts"
|
#define GNB_CONFIG_STRING_PUSCHANTENNAPORTS "pusch_AntennaPorts"
|
||||||
#define GNB_CONFIG_STRING_SIB1TDA "sib1_tda"
|
|
||||||
#define GNB_CONFIG_STRING_DOCSIRS "do_CSIRS"
|
#define GNB_CONFIG_STRING_DOCSIRS "do_CSIRS"
|
||||||
#define GNB_CONFIG_STRING_DOSRS "do_SRS"
|
#define GNB_CONFIG_STRING_DOSRS "do_SRS"
|
||||||
#define GNB_CONFIG_STRING_NRCELLID "nr_cellid"
|
#define GNB_CONFIG_STRING_NRCELLID "nr_cellid"
|
||||||
@@ -179,7 +178,6 @@ typedef enum {
|
|||||||
{GNB_CONFIG_STRING_PDSCHANTENNAPORTS_N2, "vert. log. antenna ports", 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_PDSCHANTENNAPORTS_N2, "vert. log. antenna ports", 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP, "XP log. antenna ports", 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_PDSCHANTENNAPORTS_XP, "XP log. antenna ports", 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_PUSCHANTENNAPORTS, NULL, 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_PUSCHANTENNAPORTS, NULL, 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_SIB1TDA, NULL, 0, .iptr=NULL, .defintval=1, TYPE_INT, 0}, \
|
|
||||||
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_DOCSIRS, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_DOSRS, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
{GNB_CONFIG_STRING_DOSRS, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, .u64ptr=NULL,.defint64val=1, TYPE_UINT64, 0}, \
|
{GNB_CONFIG_STRING_NRCELLID, NULL, 0, .u64ptr=NULL,.defint64val=1, TYPE_UINT64, 0}, \
|
||||||
@@ -225,30 +223,29 @@ typedef enum {
|
|||||||
#define GNB_PDSCH_ANTENNAPORTS_N2_IDX 14
|
#define GNB_PDSCH_ANTENNAPORTS_N2_IDX 14
|
||||||
#define GNB_PDSCH_ANTENNAPORTS_XP_IDX 15
|
#define GNB_PDSCH_ANTENNAPORTS_XP_IDX 15
|
||||||
#define GNB_PUSCH_ANTENNAPORTS_IDX 16
|
#define GNB_PUSCH_ANTENNAPORTS_IDX 16
|
||||||
#define GNB_SIB1_TDA_IDX 17
|
#define GNB_DO_CSIRS_IDX 17
|
||||||
#define GNB_DO_CSIRS_IDX 18
|
#define GNB_DO_SRS_IDX 18
|
||||||
#define GNB_DO_SRS_IDX 19
|
#define GNB_NRCELLID_IDX 19
|
||||||
#define GNB_NRCELLID_IDX 20
|
#define GNB_MINRXTXTIME_IDX 20
|
||||||
#define GNB_MINRXTXTIME_IDX 21
|
#define GNB_ULPRBBLACKLIST_IDX 21
|
||||||
#define GNB_ULPRBBLACKLIST_IDX 22
|
#define GNB_UMONDEFAULTDRB_IDX 22
|
||||||
#define GNB_UMONDEFAULTDRB_IDX 23
|
#define GNB_FORCE256QAMOFF_IDX 23
|
||||||
#define GNB_FORCE256QAMOFF_IDX 24
|
#define GNB_ENABLE_SDAP_IDX 24
|
||||||
#define GNB_ENABLE_SDAP_IDX 25
|
#define GNB_DRBS 25
|
||||||
#define GNB_DRBS 26
|
#define GNB_GNB_DU_ID_IDX 26
|
||||||
#define GNB_GNB_DU_ID_IDX 27
|
#define GNB_GNB_CU_UP_ID_IDX 27
|
||||||
#define GNB_GNB_CU_UP_ID_IDX 28
|
#define GNB_USE_DELTA_MCS_IDX 28
|
||||||
#define GNB_USE_DELTA_MCS_IDX 29
|
#define GNB_FORCEUL256QAMOFF_IDX 29
|
||||||
#define GNB_FORCEUL256QAMOFF_IDX 30
|
#define GNB_MAXMIMOLAYERS_IDX 30
|
||||||
#define GNB_MAXMIMOLAYERS_IDX 31
|
#define GNB_DISABLE_HARQ_IDX 31
|
||||||
#define GNB_DISABLE_HARQ_IDX 32
|
#define GNB_NUM_DL_HARQ_IDX 32
|
||||||
#define GNB_NUM_DL_HARQ_IDX 33
|
#define GNB_NUM_UL_HARQ_IDX 33
|
||||||
#define GNB_NUM_UL_HARQ_IDX 34
|
#define GNB_UESS_AGG_LEVEL_LIST_IDX 34
|
||||||
#define GNB_UESS_AGG_LEVEL_LIST_IDX 35
|
#define GNB_CU_SIBS_IDX 35
|
||||||
#define GNB_CU_SIBS_IDX 36
|
#define GNB_DU_SIBS_IDX 36
|
||||||
#define GNB_DU_SIBS_IDX 37
|
#define GNB_CONFIG_REP_IDX 37
|
||||||
#define GNB_CONFIG_REP_IDX 38
|
#define GNB_1ST_ACTIVE_BWP_IDX 38
|
||||||
#define GNB_1ST_ACTIVE_BWP_IDX 39
|
#define GNB_LIMIT_RSRP_REPORT_IDX 39
|
||||||
#define GNB_LIMIT_RSRP_REPORT_IDX 40
|
|
||||||
|
|
||||||
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
#define TRACKING_AREA_CODE_OKRANGE {0x0001,0xFFFD}
|
||||||
#define NUM_DL_HARQ_OKVALUES {2,4,6,8,10,12,16,32}
|
#define NUM_DL_HARQ_OKVALUES {2,4,6,8,10,12,16,32}
|
||||||
@@ -287,7 +284,6 @@ typedef enum {
|
|||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
{ .s5 = { NULL } }, \
|
|
||||||
{ .s1 = { config_check_intval, NUM_DL_HARQ_OKVALUES,8 } }, \
|
{ .s1 = { config_check_intval, NUM_DL_HARQ_OKVALUES,8 } }, \
|
||||||
{ .s1 = { config_check_intval, NUM_UL_HARQ_OKVALUES,2 } }, \
|
{ .s1 = { config_check_intval, NUM_UL_HARQ_OKVALUES,2 } }, \
|
||||||
{ .s5 = { NULL } }, \
|
{ .s5 = { NULL } }, \
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ void schedule_nr_mib(module_id_t module_idP, frame_t frameP, slot_t slotP, nfapi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_rb_mcs_tbs(NR_sched_pdsch_t *pdsch, uint32_t num_total_bytes, uint16_t *vrb_map)
|
static bool update_rb_mcs_tbs(NR_sched_pdsch_t *pdsch, uint32_t num_total_bytes, uint16_t *vrb_map)
|
||||||
{
|
{
|
||||||
const NR_tda_info_t *tda_info = &pdsch->tda_info;
|
const NR_tda_info_t *tda_info = &pdsch->tda_info;
|
||||||
|
|
||||||
@@ -296,12 +296,15 @@ static void update_rb_mcs_tbs(NR_sched_pdsch_t *pdsch, uint32_t num_total_bytes,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AssertFatal(pdsch->tb_size >= num_total_bytes,
|
if (pdsch->tb_size < num_total_bytes) {
|
||||||
"Couldn't allocate enough resources for %d bytes in SIB PDSCH (rbStart %d, rbSize %d, bwpSize %d)\n",
|
LOG_D(NR_MAC,
|
||||||
num_total_bytes,
|
"Couldn't allocate enough resources for %d bytes in SIB PDSCH (rbStart %d, rbSize %d, bwpSize %d)\n",
|
||||||
pdsch->rbStart,
|
num_total_bytes,
|
||||||
pdsch->rbSize,
|
pdsch->rbStart,
|
||||||
bwpSize);
|
pdsch->rbSize,
|
||||||
|
bwpSize);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
LOG_D(NR_MAC,
|
LOG_D(NR_MAC,
|
||||||
"mcs=%i, startSymbolIndex = %i, nrOfSymbols = %i, rbSize = %i, TBS = %i, dmrs_length %d, N_PRB_DMRS = %d, mappingtype = %d\n",
|
"mcs=%i, startSymbolIndex = %i, nrOfSymbols = %i, rbSize = %i, TBS = %i, dmrs_length %d, N_PRB_DMRS = %d, mappingtype = %d\n",
|
||||||
@@ -313,6 +316,7 @@ static void update_rb_mcs_tbs(NR_sched_pdsch_t *pdsch, uint32_t num_total_bytes,
|
|||||||
pdsch->dmrs_parms.N_DMRS_SLOT,
|
pdsch->dmrs_parms.N_DMRS_SLOT,
|
||||||
N_PRB_DMRS,
|
N_PRB_DMRS,
|
||||||
tda_info->mapping_type);
|
tda_info->mapping_type);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NR_sched_pdsch_t schedule_control_sib1(gNB_MAC_INST *gNB_mac,
|
static NR_sched_pdsch_t schedule_control_sib1(gNB_MAC_INST *gNB_mac,
|
||||||
@@ -342,11 +346,12 @@ static NR_sched_pdsch_t schedule_control_sib1(gNB_MAC_INST *gNB_mac,
|
|||||||
|
|
||||||
uint8_t nr_of_candidates = 0;
|
uint8_t nr_of_candidates = 0;
|
||||||
|
|
||||||
for (int i=0; i<3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
find_aggregation_candidates(&gNB_mac->sched_ctrlCommon->aggregation_level, &nr_of_candidates, gNB_mac->sched_ctrlCommon->search_space,4<<i);
|
find_aggregation_candidates(&gNB_mac->sched_ctrlCommon->aggregation_level, &nr_of_candidates, gNB_mac->sched_ctrlCommon->search_space,4<<i);
|
||||||
if (nr_of_candidates>0) break; // choosing the lower value of aggregation level available
|
if (nr_of_candidates > 0)
|
||||||
|
break; // choosing the lower value of aggregation level available
|
||||||
}
|
}
|
||||||
AssertFatal(nr_of_candidates>0,"nr_of_candidates is 0\n");
|
AssertFatal(nr_of_candidates > 0, "nr_of_candidates is 0\n");
|
||||||
gNB_mac->sched_ctrlCommon->cce_index = find_pdcch_candidate(gNB_mac,
|
gNB_mac->sched_ctrlCommon->cce_index = find_pdcch_candidate(gNB_mac,
|
||||||
CC_id,
|
CC_id,
|
||||||
gNB_mac->sched_ctrlCommon->aggregation_level,
|
gNB_mac->sched_ctrlCommon->aggregation_level,
|
||||||
@@ -358,18 +363,21 @@ static NR_sched_pdsch_t schedule_control_sib1(gNB_MAC_INST *gNB_mac,
|
|||||||
|
|
||||||
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");
|
||||||
|
|
||||||
update_rb_mcs_tbs(&pdsch, gNB_mac->sched_ctrlCommon->num_total_bytes, vrb_map);
|
bool success = update_rb_mcs_tbs(&pdsch, gNB_mac->sched_ctrlCommon->num_total_bytes, vrb_map);
|
||||||
|
if (success) {
|
||||||
|
// Mark the corresponding RBs as used
|
||||||
|
fill_pdcch_vrb_map(gNB_mac,
|
||||||
|
CC_id,
|
||||||
|
pdcch,
|
||||||
|
gNB_mac->sched_ctrlCommon->cce_index,
|
||||||
|
gNB_mac->sched_ctrlCommon->aggregation_level,
|
||||||
|
beam);
|
||||||
|
for (int rb = 0; rb < pdsch.rbSize; rb++) {
|
||||||
|
vrb_map[rb + type0_PDCCH_CSS_config->cset_start_rb] |= SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
pdsch.tb_size = 0; // to signal we couldn't allocate TBS
|
||||||
|
|
||||||
// Mark the corresponding RBs as used
|
|
||||||
fill_pdcch_vrb_map(gNB_mac,
|
|
||||||
CC_id,
|
|
||||||
pdcch,
|
|
||||||
gNB_mac->sched_ctrlCommon->cce_index,
|
|
||||||
gNB_mac->sched_ctrlCommon->aggregation_level,
|
|
||||||
beam);
|
|
||||||
for (int rb = 0; rb < pdsch.rbSize; rb++) {
|
|
||||||
vrb_map[rb + type0_PDCCH_CSS_config->cset_start_rb] |= SL_to_bitmap(tda_info->startSymbolIndex, tda_info->nrOfSymbols);
|
|
||||||
}
|
|
||||||
return pdsch;
|
return pdsch;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -474,12 +482,8 @@ void schedule_nr_sib1(module_id_t module_idP,
|
|||||||
// TODO: Get these values from RRC
|
// TODO: Get these values from RRC
|
||||||
const int CC_id = 0;
|
const int CC_id = 0;
|
||||||
uint8_t candidate_idx = 0;
|
uint8_t candidate_idx = 0;
|
||||||
|
|
||||||
gNB_MAC_INST *gNB_mac = RC.nrmac[module_idP];
|
gNB_MAC_INST *gNB_mac = RC.nrmac[module_idP];
|
||||||
NR_ServingCellConfigCommon_t *scc = gNB_mac->common_channels[CC_id].ServingCellConfigCommon;
|
NR_ServingCellConfigCommon_t *scc = gNB_mac->common_channels[CC_id].ServingCellConfigCommon;
|
||||||
|
|
||||||
int time_domain_allocation = gNB_mac->radio_config.sib1_tda;
|
|
||||||
|
|
||||||
int L_max;
|
int L_max;
|
||||||
switch (scc->ssb_PositionsInBurst->present) {
|
switch (scc->ssb_PositionsInBurst->present) {
|
||||||
case 1:
|
case 1:
|
||||||
@@ -492,8 +496,7 @@ void schedule_nr_sib1(module_id_t module_idP,
|
|||||||
L_max = 64;
|
L_max = 64;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
AssertFatal(0,"SSB bitmap size value %d undefined (allowed values 1,2,3)\n",
|
AssertFatal(false, "SSB bitmap size value %d undefined (allowed values 1,2,3)\n", scc->ssb_PositionsInBurst->present);
|
||||||
scc->ssb_PositionsInBurst->present);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < L_max; i++) {
|
for (int i = 0; i < L_max; i++) {
|
||||||
@@ -512,38 +515,51 @@ void schedule_nr_sib1(module_id_t module_idP,
|
|||||||
int beam_index = get_beam_from_ssbidx(gNB_mac, i);
|
int beam_index = get_beam_from_ssbidx(gNB_mac, i);
|
||||||
NR_beam_alloc_t beam = beam_allocation_procedure(&gNB_mac->beam_info, frameP, slotP, beam_index, n_slots_frame);
|
NR_beam_alloc_t beam = beam_allocation_procedure(&gNB_mac->beam_info, frameP, slotP, beam_index, n_slots_frame);
|
||||||
AssertFatal(beam.idx >= 0, "Cannot allocate SIB1 corresponding to SSB %d in any available beam\n", i);
|
AssertFatal(beam.idx >= 0, "Cannot allocate SIB1 corresponding to SSB %d in any available beam\n", i);
|
||||||
|
NR_COMMON_channels_t *cc = &gNB_mac->common_channels[0];
|
||||||
LOG_D(NR_MAC,"(%d.%d) SIB1 transmission: ssb_index %d\n", frameP, slotP, type0_PDCCH_CSS_config->ssb_index);
|
LOG_D(NR_MAC,"(%d.%d) SIB1 transmission: ssb_index %d\n", frameP, slotP, type0_PDCCH_CSS_config->ssb_index);
|
||||||
|
|
||||||
default_table_type_t table_type = get_default_table_type(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern);
|
default_table_type_t table_type = get_default_table_type(type0_PDCCH_CSS_config->type0_pdcch_ss_mux_pattern);
|
||||||
// assuming normal CP
|
|
||||||
NR_tda_info_t tda_info = get_info_from_tda_tables(table_type, time_domain_allocation, scc->dmrs_TypeA_Position, true);
|
|
||||||
|
|
||||||
AssertFatal((tda_info.startSymbolIndex + tda_info.nrOfSymbols) < 14,
|
|
||||||
"SIB1 TDA %d would cause overlap with CSI-RS. Please select a different SIB1 TDA.\n",
|
|
||||||
time_domain_allocation);
|
|
||||||
|
|
||||||
NR_pdsch_dmrs_t dmrs_parms = get_dl_dmrs_params(scc, NULL, &tda_info, 1);
|
|
||||||
|
|
||||||
NR_sched_pdcch_t sched_pdcch = set_pdcch_structure(NULL,
|
NR_sched_pdcch_t sched_pdcch = set_pdcch_structure(NULL,
|
||||||
gNB_mac->sched_ctrlCommon->search_space,
|
gNB_mac->sched_ctrlCommon->search_space,
|
||||||
gNB_mac->sched_ctrlCommon->coreset,
|
gNB_mac->sched_ctrlCommon->coreset,
|
||||||
scc,
|
scc,
|
||||||
NULL,
|
NULL,
|
||||||
type0_PDCCH_CSS_config);
|
type0_PDCCH_CSS_config);
|
||||||
|
int time_domain_allocation = -1;
|
||||||
|
NR_sched_pdsch_t sched_pdsch = {0};
|
||||||
|
for (int t = 0; t < 16; t++) {
|
||||||
|
// If the PDSCH was scheduled with SI-RNTI in PDCCH Type0 common search space,
|
||||||
|
// the UE may assume that this PDSCH resource allocation is not applied (Table 5.1.2.1.1-4 and 5 in 38.214)
|
||||||
|
int row = t + 1;
|
||||||
|
if (table_type == defaultB && (row == 12 || row == 13 || row == 14))
|
||||||
|
continue;
|
||||||
|
if (table_type == defaultC && (row == 1 || row == 6 || row == 7 ||row > 12))
|
||||||
|
continue;
|
||||||
|
// assuming normal CP
|
||||||
|
NR_tda_info_t tda_info = get_info_from_tda_tables(table_type, t, scc->dmrs_TypeA_Position, true);
|
||||||
|
// SIB1 TDA going to the last symbol would cause overlap with CSI-RS
|
||||||
|
if (!tda_info.valid_tda || tda_info.startSymbolIndex + tda_info.nrOfSymbols == 14)
|
||||||
|
continue;
|
||||||
|
if (tda_info.startSymbolIndex < type0_PDCCH_CSS_config->first_symbol_index + type0_PDCCH_CSS_config->num_symbols)
|
||||||
|
continue;
|
||||||
|
|
||||||
NR_COMMON_channels_t *cc = &gNB_mac->common_channels[0];
|
NR_pdsch_dmrs_t dmrs_parms = get_dl_dmrs_params(scc, NULL, &tda_info, 1);
|
||||||
// Configure sched_ctrlCommon for SIB1
|
// Configure sched_ctrlCommon for SIB1
|
||||||
NR_sched_pdsch_t sched_pdsch = schedule_control_sib1(gNB_mac,
|
sched_pdsch = schedule_control_sib1(gNB_mac,
|
||||||
CC_id,
|
CC_id,
|
||||||
&sched_pdcch,
|
&sched_pdcch,
|
||||||
type0_PDCCH_CSS_config,
|
type0_PDCCH_CSS_config,
|
||||||
time_domain_allocation,
|
t,
|
||||||
&dmrs_parms,
|
&dmrs_parms,
|
||||||
&tda_info,
|
&tda_info,
|
||||||
candidate_idx,
|
candidate_idx,
|
||||||
beam.idx,
|
beam.idx,
|
||||||
cc->sib1_bcch_length);
|
cc->sib1_bcch_length);
|
||||||
|
if (sched_pdsch.tb_size > 0) {
|
||||||
|
time_domain_allocation = t;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AssertFatal(time_domain_allocation > 0, "Couldn't select any TDA for SIB1\n");
|
||||||
nfapi_nr_dl_tti_request_body_t *dl_req = &DL_req->dl_tti_request_body;
|
nfapi_nr_dl_tti_request_body_t *dl_req = &DL_req->dl_tti_request_body;
|
||||||
int pdu_index = gNB_mac->pdu_index[0]++;
|
int pdu_index = gNB_mac->pdu_index[0]++;
|
||||||
nr_fill_nfapi_dl_SIB_pdu(gNB_mac,
|
nr_fill_nfapi_dl_SIB_pdu(gNB_mac,
|
||||||
@@ -673,7 +689,8 @@ static void other_sib_sched_control(module_id_t module_idP,
|
|||||||
uint16_t *vrb_map = cc->vrb_map[beam.idx];
|
uint16_t *vrb_map = cc->vrb_map[beam.idx];
|
||||||
uint8_t *sib_bcch_pdu = cc->other_sib_bcch_pdu[payload_idx];
|
uint8_t *sib_bcch_pdu = cc->other_sib_bcch_pdu[payload_idx];
|
||||||
int num_total_bytes = cc->other_sib_bcch_length[payload_idx];
|
int num_total_bytes = cc->other_sib_bcch_length[payload_idx];
|
||||||
update_rb_mcs_tbs(&sched_pdsch_otherSI, num_total_bytes, vrb_map);
|
bool success = update_rb_mcs_tbs(&sched_pdsch_otherSI, num_total_bytes, vrb_map);
|
||||||
|
AssertFatal(success, "Couldn't allocate TBS for other SIB\n");
|
||||||
|
|
||||||
for (int rb = 0; rb < sched_pdsch_otherSI.rbSize; rb++) {
|
for (int rb = 0; rb < sched_pdsch_otherSI.rbSize; rb++) {
|
||||||
vrb_map[rb + type0_PDCCH_CSS_config->cset_start_rb] |= SL_to_bitmap(tda_info.startSymbolIndex, tda_info.nrOfSymbols);
|
vrb_map[rb + type0_PDCCH_CSS_config->cset_start_rb] |= SL_to_bitmap(tda_info.startSymbolIndex, tda_info.nrOfSymbols);
|
||||||
|
|||||||
@@ -186,7 +186,6 @@ typedef enum {
|
|||||||
} nr_config_report_type_t;
|
} nr_config_report_type_t;
|
||||||
|
|
||||||
typedef struct nr_mac_config_t {
|
typedef struct nr_mac_config_t {
|
||||||
int sib1_tda;
|
|
||||||
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
||||||
int pusch_AntennaPorts;
|
int pusch_AntennaPorts;
|
||||||
int minRXTXTIME;
|
int minRXTXTIME;
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
min_rxtxtime = 4;
|
min_rxtxtime = 4;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ gNBs =
|
|||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
min_rxtxtime = 4;
|
min_rxtxtime = 4;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
force_UL256qam_off = 1;
|
force_UL256qam_off = 1;
|
||||||
# maxMIMO_layers = 2;
|
# maxMIMO_layers = 2;
|
||||||
|
|
||||||
|
|||||||
-1
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 8;
|
pusch_AntennaPorts = 8;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
force_UL256qam_off = 1;
|
force_UL256qam_off = 1;
|
||||||
maxMIMO_layers = 2;
|
maxMIMO_layers = 2;
|
||||||
|
|
||||||
|
|||||||
-1
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 8;
|
pusch_AntennaPorts = 8;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
force_UL256qam_off = 1;
|
force_UL256qam_off = 1;
|
||||||
maxMIMO_layers = 2;
|
maxMIMO_layers = 2;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
enable_sdap = 0;
|
enable_sdap = 0;
|
||||||
#sib1_tda = 0;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
disable_harq = 1;
|
disable_harq = 1;
|
||||||
cu_sibs = [2];
|
cu_sibs = [2];
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
disable_harq = 1;
|
disable_harq = 1;
|
||||||
cu_sibs = [2];
|
cu_sibs = [2];
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
disable_harq = 1;
|
disable_harq = 1;
|
||||||
cu_sibs = [2];
|
cu_sibs = [2];
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 1;
|
pusch_AntennaPorts = 1;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 1;
|
do_SRS = 1;
|
||||||
sib1_tda = 15;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ gNBs =
|
|||||||
|
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 1;
|
do_SRS = 1;
|
||||||
sib1_tda = 15;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
# disable_harq = 1;
|
# disable_harq = 1;
|
||||||
# num_dlharq = 32;
|
# num_dlharq = 32;
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
# disable_harq = 1;
|
# disable_harq = 1;
|
||||||
# num_dlharq = 32;
|
# num_dlharq = 32;
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 5;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 2;
|
pusch_AntennaPorts = 2;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
# force_UL256qam_off = 1;
|
# force_UL256qam_off = 1;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
-1
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
# force_UL256qam_off = 1;
|
# force_UL256qam_off = 1;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
# force_UL256qam_off = 1;
|
# force_UL256qam_off = 1;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ gNBs =
|
|||||||
pusch_AntennaPorts = 4;
|
pusch_AntennaPorts = 4;
|
||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ gNBs =
|
|||||||
do_CSIRS = 1;
|
do_CSIRS = 1;
|
||||||
do_SRS = 0;
|
do_SRS = 0;
|
||||||
force_UL256qam_off = 1;
|
force_UL256qam_off = 1;
|
||||||
# sib1_tda = 15;
|
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ gNBs =
|
|||||||
|
|
||||||
////////// Physical parameters:
|
////////// Physical parameters:
|
||||||
|
|
||||||
sib1_tda = 15;
|
|
||||||
min_rxtxtime = 6;
|
min_rxtxtime = 6;
|
||||||
|
|
||||||
servingCellConfigCommon = (
|
servingCellConfigCommon = (
|
||||||
|
|||||||
Reference in New Issue
Block a user