Merge remote-tracking branch 'origin/NR_BWP_fixes' into integration_2021_wk44
This commit is contained in:
@@ -261,6 +261,8 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
|
|||||||
else
|
else
|
||||||
mu = scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
mu = scc->downlinkConfigCommon->frequencyInfoDL->scs_SpecificCarrierList.list.array[0]->subcarrierSpacing;
|
||||||
|
|
||||||
|
int bwp_start = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
|
||||||
uint8_t fdm = cfg->prach_config.num_prach_fd_occasions.value;
|
uint8_t fdm = cfg->prach_config.num_prach_fd_occasions.value;
|
||||||
// prach is scheduled according to configuration index and tables 6.3.3.2.2 to 6.3.3.2.4
|
// prach is scheduled according to configuration index and tables 6.3.3.2.2 to 6.3.3.2.4
|
||||||
if ( get_nr_prach_info_from_index(config_index,
|
if ( get_nr_prach_info_from_index(config_index,
|
||||||
@@ -387,7 +389,7 @@ void schedule_nr_prach(module_id_t module_idP, frame_t frameP, sub_frame_t slotP
|
|||||||
const int16_t N_RA_RB = get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value, mu_pusch);
|
const int16_t N_RA_RB = get_N_RA_RB(cfg->prach_config.prach_sub_c_spacing.value, mu_pusch);
|
||||||
uint16_t *vrb_map_UL = &cc->vrb_map_UL[slotP * MAX_BWP_SIZE];
|
uint16_t *vrb_map_UL = &cc->vrb_map_UL[slotP * MAX_BWP_SIZE];
|
||||||
for (int i = 0; i < N_RA_RB * fdm; ++i)
|
for (int i = 0; i < N_RA_RB * fdm; ++i)
|
||||||
vrb_map_UL[rach_ConfigGeneric->msg1_FrequencyStart + i] = 0xff; // all symbols
|
vrb_map_UL[bwp_start + rach_ConfigGeneric->msg1_FrequencyStart + i] = 0xff; // all symbols
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -917,10 +919,19 @@ void nr_get_Msg3alloc(module_id_t module_id,
|
|||||||
LOG_D(NR_MAC, "[RAPROC] Msg3 slot %d: current slot %u Msg3 frame %u k2 %u Msg3_tda_id %u start symbol index %u\n", ra->Msg3_slot, current_slot, ra->Msg3_frame, k2,ra->Msg3_tda_id, StartSymbolIndex);
|
LOG_D(NR_MAC, "[RAPROC] Msg3 slot %d: current slot %u Msg3 frame %u k2 %u Msg3_tda_id %u start symbol index %u\n", ra->Msg3_slot, current_slot, ra->Msg3_frame, k2,ra->Msg3_tda_id, StartSymbolIndex);
|
||||||
uint16_t *vrb_map_UL =
|
uint16_t *vrb_map_UL =
|
||||||
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
||||||
const uint16_t bwpSize = NRRIV2BW(ubwp ?
|
|
||||||
ubwp->bwp_Common->genericParameters.locationAndBandwidth :
|
int bwpSize = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth,
|
int bwpStart = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
MAX_BWP_SIZE);
|
|
||||||
|
if (ra->CellGroup) {
|
||||||
|
AssertFatal(ra->CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count == 1,
|
||||||
|
"downlinkBWP_ToAddModList has %d BWP!\n", ra->CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.count);
|
||||||
|
NR_BWP_Uplink_t *ubwp = ra->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[ra->bwp_id - 1];
|
||||||
|
int act_bwp_start = NRRIV2PRBOFFSET(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
int act_bwp_size = NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
if (!((bwpStart >= act_bwp_start) && ((bwpStart+bwpSize) <= (act_bwp_start+act_bwp_size))))
|
||||||
|
bwpStart = act_bwp_start;
|
||||||
|
}
|
||||||
|
|
||||||
/* search msg3_nb_rb free RBs */
|
/* search msg3_nb_rb free RBs */
|
||||||
int rbSize = 0;
|
int rbSize = 0;
|
||||||
@@ -928,16 +939,17 @@ void nr_get_Msg3alloc(module_id_t module_id,
|
|||||||
while (rbSize < msg3_nb_rb) {
|
while (rbSize < msg3_nb_rb) {
|
||||||
rbStart += rbSize; /* last iteration rbSize was not enough, skip it */
|
rbStart += rbSize; /* last iteration rbSize was not enough, skip it */
|
||||||
rbSize = 0;
|
rbSize = 0;
|
||||||
while (rbStart < bwpSize && vrb_map_UL[rbStart])
|
while (rbStart < bwpSize && vrb_map_UL[rbStart + bwpStart])
|
||||||
rbStart++;
|
rbStart++;
|
||||||
AssertFatal(rbStart < bwpSize - msg3_nb_rb, "no space to allocate Msg 3 for RA!\n");
|
AssertFatal(rbStart < bwpSize - msg3_nb_rb, "no space to allocate Msg 3 for RA!\n");
|
||||||
while (rbStart + rbSize < bwpSize
|
while (rbStart + rbSize < bwpSize
|
||||||
&& !vrb_map_UL[rbStart + rbSize]
|
&& !vrb_map_UL[rbStart + bwpStart + rbSize]
|
||||||
&& rbSize < msg3_nb_rb)
|
&& rbSize < msg3_nb_rb)
|
||||||
rbSize++;
|
rbSize++;
|
||||||
}
|
}
|
||||||
ra->msg3_nb_rb = msg3_nb_rb;
|
ra->msg3_nb_rb = msg3_nb_rb;
|
||||||
ra->msg3_first_rb = rbStart;
|
ra->msg3_first_rb = rbStart;
|
||||||
|
ra->msg3_bwp_start = bwpStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1023,12 +1035,12 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
|||||||
uint16_t *vrb_map_UL =
|
uint16_t *vrb_map_UL =
|
||||||
&RC.nrmac[module_idP]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
&RC.nrmac[module_idP]->common_channels[CC_id].vrb_map_UL[ra->Msg3_slot * MAX_BWP_SIZE];
|
||||||
for (int i = 0; i < ra->msg3_nb_rb; ++i) {
|
for (int i = 0; i < ra->msg3_nb_rb; ++i) {
|
||||||
AssertFatal(!vrb_map_UL[i + ra->msg3_first_rb],
|
AssertFatal(!vrb_map_UL[i + ra->msg3_first_rb + ra->msg3_bwp_start],
|
||||||
"RB %d in %4d.%2d is already taken, cannot allocate Msg3!\n",
|
"RB %d in %4d.%2d is already taken, cannot allocate Msg3!\n",
|
||||||
i + ra->msg3_first_rb,
|
i + ra->msg3_first_rb,
|
||||||
ra->Msg3_frame,
|
ra->Msg3_frame,
|
||||||
ra->Msg3_slot);
|
ra->Msg3_slot);
|
||||||
vrb_map_UL[i + ra->msg3_first_rb] = 1;
|
vrb_map_UL[i + ra->msg3_first_rb + ra->msg3_bwp_start] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D(NR_MAC, "[gNB %d][RAPROC] Frame %d, Slot %d : CC_id %d RA is active, Msg3 in (%d,%d)\n", module_idP, frameP, slotP, CC_id, ra->Msg3_frame, ra->Msg3_slot);
|
LOG_D(NR_MAC, "[gNB %d][RAPROC] Frame %d, Slot %d : CC_id %d RA is active, Msg3 in (%d,%d)\n", module_idP, frameP, slotP, CC_id, ra->Msg3_frame, ra->Msg3_slot);
|
||||||
@@ -1047,9 +1059,6 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
|||||||
memset(pusch_pdu, 0, sizeof(nfapi_nr_pusch_pdu_t));
|
memset(pusch_pdu, 0, sizeof(nfapi_nr_pusch_pdu_t));
|
||||||
|
|
||||||
int ibwp_size = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
int ibwp_size = NRRIV2BW(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
int ibwp_start = NRRIV2PRBOFFSET(scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
|
||||||
int abwp_size = ibwp_size;
|
|
||||||
int abwp_start = ibwp_start;
|
|
||||||
int scs = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing;
|
int scs = scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.subcarrierSpacing;
|
||||||
int fh = 0;
|
int fh = 0;
|
||||||
int startSymbolAndLength = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
int startSymbolAndLength = scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||||
@@ -1062,8 +1071,6 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
|||||||
|
|
||||||
startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
startSymbolAndLength = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->startSymbolAndLength;
|
||||||
mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->mappingType;
|
mappingtype = ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->mappingType;
|
||||||
abwp_size = NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
|
||||||
abwp_start = NRRIV2PRBOFFSET(ubwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
|
||||||
scs = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
|
scs = ubwp->bwp_Common->genericParameters.subcarrierSpacing;
|
||||||
fh = ubwp->bwp_Dedicated->pusch_Config->choice.setup->frequencyHopping ? 1 : 0;
|
fh = ubwp->bwp_Dedicated->pusch_Config->choice.setup->frequencyHopping ? 1 : 0;
|
||||||
}
|
}
|
||||||
@@ -1078,17 +1085,11 @@ void nr_add_msg3(module_id_t module_idP, int CC_id, frame_t frameP, sub_frame_t
|
|||||||
ra->msg3_round,
|
ra->msg3_round,
|
||||||
ra->rnti);
|
ra->rnti);
|
||||||
|
|
||||||
int bwp_start;
|
|
||||||
if ((ibwp_start < abwp_start) || (ibwp_size > abwp_size))
|
|
||||||
bwp_start = abwp_start;
|
|
||||||
else
|
|
||||||
bwp_start = ibwp_start;
|
|
||||||
|
|
||||||
fill_msg3_pusch_pdu(pusch_pdu,scc,
|
fill_msg3_pusch_pdu(pusch_pdu,scc,
|
||||||
ra->msg3_round,
|
ra->msg3_round,
|
||||||
startSymbolAndLength,
|
startSymbolAndLength,
|
||||||
ra->rnti, scs,
|
ra->rnti, scs,
|
||||||
ibwp_size, bwp_start,
|
ibwp_size, ra->msg3_bwp_start,
|
||||||
mappingtype, fh,
|
mappingtype, fh,
|
||||||
ra->msg3_first_rb, ra->msg3_nb_rb);
|
ra->msg3_first_rb, ra->msg3_nb_rb);
|
||||||
future_ul_tti_req->n_pdus += 1;
|
future_ul_tti_req->n_pdus += 1;
|
||||||
@@ -1150,7 +1151,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
|||||||
|
|
||||||
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[rbStart + i]) {
|
if (vrb_map[BWPStart + rbStart + i]) {
|
||||||
rbStart += i;
|
rbStart += i;
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
@@ -1364,7 +1365,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
|||||||
|
|
||||||
// Mark the corresponding RBs as used
|
// Mark the corresponding RBs as used
|
||||||
for (int rb = 0; rb < rbSize; rb++) {
|
for (int rb = 0; rb < rbSize; rb++) {
|
||||||
vrb_map[rb + rbStart] = 1;
|
vrb_map[BWPStart + rb + rbStart] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ra->state = WAIT_Msg3;
|
ra->state = WAIT_Msg3;
|
||||||
@@ -1547,7 +1548,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
|||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while ((i < rbSize) && (rbStart + rbSize <= BWPSize)) {
|
while ((i < rbSize) && (rbStart + rbSize <= BWPSize)) {
|
||||||
if (vrb_map[rbStart + i]) {
|
if (vrb_map[BWPStart + rbStart + i]) {
|
||||||
rbStart += i+1;
|
rbStart += i+1;
|
||||||
i = 0;
|
i = 0;
|
||||||
} else {
|
} else {
|
||||||
@@ -1723,7 +1724,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
|
|||||||
|
|
||||||
// Mark the corresponding RBs as used
|
// Mark the corresponding RBs as used
|
||||||
for (int rb = 0; rb < pdsch_pdu_rel15->rbSize; rb++) {
|
for (int rb = 0; rb < pdsch_pdu_rel15->rbSize; rb++) {
|
||||||
vrb_map[rb + pdsch_pdu_rel15->rbStart] = 1;
|
vrb_map[BWPStart + rb + pdsch_pdu_rel15->rbStart] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_D(NR_MAC,"BWPSize: %i\n", pdcch_pdu_rel15->BWPSize);
|
LOG_D(NR_MAC,"BWPSize: %i\n", pdcch_pdu_rel15->BWPSize);
|
||||||
|
|||||||
@@ -481,7 +481,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
|
|||||||
&RC.nrmac[module_id]->common_channels[0].ServingCellConfigCommon->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
|
&RC.nrmac[module_id]->common_channels[0].ServingCellConfigCommon->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
|
||||||
|
|
||||||
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
int rbStart = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
int rbStart = 0; // start wrt BWPstart
|
||||||
|
|
||||||
NR_pdsch_semi_static_t *ps = &sched_ctrl->pdsch_semi_static;
|
NR_pdsch_semi_static_t *ps = &sched_ctrl->pdsch_semi_static;
|
||||||
const long f = (sched_ctrl->active_bwp ||bwpd) ? sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats : 0;
|
const long f = (sched_ctrl->active_bwp ||bwpd) ? sched_ctrl->search_space->searchSpaceType->choice.ue_Specific->dci_Formats : 0;
|
||||||
@@ -671,7 +671,7 @@ void pf_dl(module_id_t module_id,
|
|||||||
&scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
|
&scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters;
|
||||||
|
|
||||||
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth,MAX_BWP_SIZE);
|
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth,MAX_BWP_SIZE);
|
||||||
int rbStart = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
int rbStart = 0; // start wrt BWPstart
|
||||||
|
|
||||||
/* Find a free CCE */
|
/* Find a free CCE */
|
||||||
bool freeCCE = find_free_CCE(module_id, slot, UE_id);
|
bool freeCCE = find_free_CCE(module_id, slot, UE_id);
|
||||||
@@ -760,6 +760,10 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
|||||||
sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth:
|
sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth:
|
||||||
scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,
|
scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,
|
||||||
MAX_BWP_SIZE);
|
MAX_BWP_SIZE);
|
||||||
|
const uint16_t BWPStart = NRRIV2PRBOFFSET(sched_ctrl->active_bwp ?
|
||||||
|
sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth:
|
||||||
|
scc->downlinkConfigCommon->initialDownlinkBWP->genericParameters.locationAndBandwidth,
|
||||||
|
MAX_BWP_SIZE);
|
||||||
|
|
||||||
uint16_t *vrb_map = RC.nrmac[module_id]->common_channels[CC_id].vrb_map;
|
uint16_t *vrb_map = RC.nrmac[module_id]->common_channels[CC_id].vrb_map;
|
||||||
uint8_t rballoc_mask[bwpSize];
|
uint8_t rballoc_mask[bwpSize];
|
||||||
@@ -767,7 +771,7 @@ void nr_fr1_dlsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
|||||||
for (int i = 0; i < bwpSize; i++) {
|
for (int i = 0; i < bwpSize; i++) {
|
||||||
// calculate mask: init with "NOT" vrb_map:
|
// calculate mask: init with "NOT" vrb_map:
|
||||||
// if any RB in vrb_map is blocked (1), the current RBG will be 0
|
// if any RB in vrb_map is blocked (1), the current RBG will be 0
|
||||||
rballoc_mask[i] = !vrb_map[i];
|
rballoc_mask[i] = !vrb_map[i+BWPStart];
|
||||||
n_rb_sched += rballoc_mask[i];
|
n_rb_sched += rballoc_mask[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -280,6 +280,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
|
|||||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
/* find largest unallocated chunk */
|
/* find largest unallocated chunk */
|
||||||
const int bwpSize = NRRIV2BW(sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
const int bwpSize = NRRIV2BW(sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
const int BWPStart = NRRIV2PRBOFFSET(sched_ctrl->active_bwp->bwp_Common->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
int rbStart = 0;
|
int rbStart = 0;
|
||||||
int rbSize = 0;
|
int rbSize = 0;
|
||||||
if (target_dl_bw>bwpSize)
|
if (target_dl_bw>bwpSize)
|
||||||
@@ -288,11 +289,11 @@ void nr_preprocessor_phytest(module_id_t module_id,
|
|||||||
/* loop ensures that we allocate exactly target_dl_bw, or return */
|
/* loop ensures that we allocate exactly target_dl_bw, or return */
|
||||||
while (true) {
|
while (true) {
|
||||||
/* advance to first free RB */
|
/* advance to first free RB */
|
||||||
while (rbStart < bwpSize && vrb_map[rbStart])
|
while (rbStart < bwpSize && vrb_map[rbStart + BWPStart])
|
||||||
rbStart++;
|
rbStart++;
|
||||||
rbSize = 1;
|
rbSize = 1;
|
||||||
/* iterate until we are at target_dl_bw or no available RBs */
|
/* iterate until we are at target_dl_bw or no available RBs */
|
||||||
while (rbStart + rbSize < bwpSize && !vrb_map[rbStart + rbSize] && rbSize < target_dl_bw)
|
while (rbStart + rbSize < bwpSize && !vrb_map[rbStart + rbSize + BWPStart] && rbSize < target_dl_bw)
|
||||||
rbSize++;
|
rbSize++;
|
||||||
/* found target_dl_bw? */
|
/* found target_dl_bw? */
|
||||||
if (rbSize == target_dl_bw)
|
if (rbSize == target_dl_bw)
|
||||||
@@ -397,7 +398,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
|
|||||||
|
|
||||||
/* mark the corresponding RBs as used */
|
/* mark the corresponding RBs as used */
|
||||||
for (int rb = 0; rb < sched_pdsch->rbSize; rb++)
|
for (int rb = 0; rb < sched_pdsch->rbSize; rb++)
|
||||||
vrb_map[rb + sched_pdsch->rbStart] = 1;
|
vrb_map[rb + sched_pdsch->rbStart + BWPStart] = 1;
|
||||||
|
|
||||||
if ((frame&127) == 0) LOG_D(MAC,"phytest: %d.%d DL mcs %d, DL rbStart %d, DL rbSize %d\n", frame, slot, sched_pdsch->mcs, rbStart,rbSize);
|
if ((frame&127) == 0) LOG_D(MAC,"phytest: %d.%d DL mcs %d, DL rbStart %d, DL rbSize %d\n", frame, slot, sched_pdsch->mcs, rbStart,rbSize);
|
||||||
}
|
}
|
||||||
@@ -459,8 +460,11 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
|||||||
uint16_t rbSize;
|
uint16_t rbSize;
|
||||||
|
|
||||||
const int bw = NRRIV2BW(sched_ctrl->active_ubwp ?
|
const int bw = NRRIV2BW(sched_ctrl->active_ubwp ?
|
||||||
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth :
|
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth :
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
const int BWPStart = NRRIV2PRBOFFSET(sched_ctrl->active_ubwp ?
|
||||||
|
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth :
|
||||||
|
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
|
||||||
if (target_ul_bw>bw)
|
if (target_ul_bw>bw)
|
||||||
rbSize = bw;
|
rbSize = bw;
|
||||||
@@ -471,7 +475,7 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
|||||||
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
&RC.nrmac[module_id]->common_channels[CC_id].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
||||||
const uint16_t symb = ((1 << ps->nrOfSymbols) - 1) << ps->startSymbolIndex;
|
const uint16_t symb = ((1 << ps->nrOfSymbols) - 1) << ps->startSymbolIndex;
|
||||||
for (int i = rbStart; i < rbStart + rbSize; ++i) {
|
for (int i = rbStart; i < rbStart + rbSize; ++i) {
|
||||||
if ((vrb_map_UL[i] & symb) != 0) {
|
if ((vrb_map_UL[i+BWPStart] & symb) != 0) {
|
||||||
LOG_E(MAC,
|
LOG_E(MAC,
|
||||||
"%s(): %4d.%2d RB %d is already reserved, cannot schedule UE\n",
|
"%s(): %4d.%2d RB %d is already reserved, cannot schedule UE\n",
|
||||||
__func__,
|
__func__,
|
||||||
@@ -540,6 +544,6 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
|
|||||||
|
|
||||||
/* mark the corresponding RBs as used */
|
/* mark the corresponding RBs as used */
|
||||||
for (int rb = rbStart; rb < rbStart + rbSize; rb++)
|
for (int rb = rbStart; rb < rbStart + rbSize; rb++)
|
||||||
vrb_map_UL[rb] = 1;
|
vrb_map_UL[rb+BWPStart] = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2257,20 +2257,20 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
csirs_pdu_rel15->row = 1;
|
csirs_pdu_rel15->row = 1;
|
||||||
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.row1.buf[0])>>4)&0x0f;
|
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.row1.buf[0])>>4)&0x0f;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row2:
|
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row2:
|
||||||
csirs_pdu_rel15->row = 2;
|
csirs_pdu_rel15->row = 2;
|
||||||
csirs_pdu_rel15->freq_domain = (((resourceMapping.frequencyDomainAllocation.choice.row2.buf[1]>>4)&0x0f) |
|
csirs_pdu_rel15->freq_domain = (((resourceMapping.frequencyDomainAllocation.choice.row2.buf[1]>>4)&0x0f) |
|
||||||
((resourceMapping.frequencyDomainAllocation.choice.row2.buf[0]<<8)&0xff0));
|
((resourceMapping.frequencyDomainAllocation.choice.row2.buf[0]<<8)&0xff0));
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row4:
|
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_row4:
|
||||||
csirs_pdu_rel15->row = 4;
|
csirs_pdu_rel15->row = 4;
|
||||||
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.row4.buf[0])>>5)&0x07;
|
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.row4.buf[0])>>5)&0x07;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_other:
|
case NR_CSI_RS_ResourceMapping__frequencyDomainAllocation_PR_other:
|
||||||
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.other.buf[0])>>2)&0x3f;
|
csirs_pdu_rel15->freq_domain = ((resourceMapping.frequencyDomainAllocation.choice.other.buf[0])>>2)&0x3f;
|
||||||
@@ -2281,18 +2281,18 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
case NR_CSI_RS_ResourceMapping__nrofPorts_p2:
|
case NR_CSI_RS_ResourceMapping__nrofPorts_p2:
|
||||||
csirs_pdu_rel15->row = 3;
|
csirs_pdu_rel15->row = 3;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__nrofPorts_p4:
|
case NR_CSI_RS_ResourceMapping__nrofPorts_p4:
|
||||||
csirs_pdu_rel15->row = 5;
|
csirs_pdu_rel15->row = 5;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__nrofPorts_p8:
|
case NR_CSI_RS_ResourceMapping__nrofPorts_p8:
|
||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
||||||
csirs_pdu_rel15->row = 8;
|
csirs_pdu_rel15->row = 8;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
int num_k = 0;
|
int num_k = 0;
|
||||||
@@ -2301,12 +2301,12 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
if(num_k==4) {
|
if(num_k==4) {
|
||||||
csirs_pdu_rel15->row = 6;
|
csirs_pdu_rel15->row = 6;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
csirs_pdu_rel15->row = 7;
|
csirs_pdu_rel15->row = 7;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2314,12 +2314,12 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
||||||
csirs_pdu_rel15->row = 10;
|
csirs_pdu_rel15->row = 10;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
csirs_pdu_rel15->row = 9;
|
csirs_pdu_rel15->row = 9;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (1 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (1 << csirs_pdu_rel15->symb_l0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__nrofPorts_p16:
|
case NR_CSI_RS_ResourceMapping__nrofPorts_p16:
|
||||||
@@ -2328,24 +2328,24 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
else
|
else
|
||||||
csirs_pdu_rel15->row = 11;
|
csirs_pdu_rel15->row = 11;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((1 << csirs_pdu_rel15->symb_l0) | (2 << csirs_pdu_rel15->symb_l0));
|
||||||
break;
|
break;
|
||||||
case NR_CSI_RS_ResourceMapping__nrofPorts_p24:
|
case NR_CSI_RS_ResourceMapping__nrofPorts_p24:
|
||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
||||||
csirs_pdu_rel15->row = 14;
|
csirs_pdu_rel15->row = 14;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm8_FD2_TD4) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm8_FD2_TD4) {
|
||||||
csirs_pdu_rel15->row = 15;
|
csirs_pdu_rel15->row = 15;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (7 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (7 << csirs_pdu_rel15->symb_l0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
csirs_pdu_rel15->row = 13;
|
csirs_pdu_rel15->row = 13;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2353,18 +2353,18 @@ void nr_csirs_scheduling(int Mod_idP,
|
|||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm4_FD2_TD2) {
|
||||||
csirs_pdu_rel15->row = 17;
|
csirs_pdu_rel15->row = 17;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm8_FD2_TD4) {
|
if (resourceMapping.cdm_Type == NR_CSI_RS_ResourceMapping__cdm_Type_cdm8_FD2_TD4) {
|
||||||
csirs_pdu_rel15->row = 18;
|
csirs_pdu_rel15->row = 18;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= (7 << csirs_pdu_rel15->symb_l0);
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= (7 << csirs_pdu_rel15->symb_l0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
csirs_pdu_rel15->row = 16;
|
csirs_pdu_rel15->row = 16;
|
||||||
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
for (int rb = csirs_pdu_rel15->start_rb; rb < (csirs_pdu_rel15->start_rb + csirs_pdu_rel15->nr_of_rbs); rb++)
|
||||||
vrb_map[rb] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
vrb_map[rb+csirs_pdu_rel15->bwp_start] |= ((3 << csirs_pdu_rel15->symb_l0) | (3 << csirs_pdu_rel15->symb_l1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -520,6 +520,11 @@ void nr_csi_meas_reporting(int Mod_idP,
|
|||||||
curr_pucch->csi_bits +=
|
curr_pucch->csi_bits +=
|
||||||
nr_get_csi_bitlen(Mod_idP,UE_id,csi_report_id);
|
nr_get_csi_bitlen(Mod_idP,UE_id,csi_report_id);
|
||||||
|
|
||||||
|
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ?
|
||||||
|
&sched_ctrl->active_ubwp->bwp_Common->genericParameters:
|
||||||
|
&scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
||||||
|
int bwp_start = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth,MAX_BWP_SIZE);
|
||||||
|
|
||||||
// going through the list of PUCCH resources to find the one indexed by resource_id
|
// going through the list of PUCCH resources to find the one indexed by resource_id
|
||||||
uint16_t *vrb_map_UL = &RC.nrmac[Mod_idP]->common_channels[0].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
uint16_t *vrb_map_UL = &RC.nrmac[Mod_idP]->common_channels[0].vrb_map_UL[sched_slot * MAX_BWP_SIZE];
|
||||||
const int m = pucch_Config->resourceToAddModList->list.count;
|
const int m = pucch_Config->resourceToAddModList->list.count;
|
||||||
@@ -550,7 +555,7 @@ void nr_csi_meas_reporting(int Mod_idP,
|
|||||||
}
|
}
|
||||||
// verify resources are free
|
// verify resources are free
|
||||||
for (int i = start; i < start + len; ++i) {
|
for (int i = start; i < start + len; ++i) {
|
||||||
vrb_map_UL[i] |= mask;
|
vrb_map_UL[i+bwp_start] |= mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1390,18 +1395,32 @@ int nr_acknack_scheduling(int mod_id,
|
|||||||
pucch_Config = RC.nrmac[mod_id]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
|
pucch_Config = RC.nrmac[mod_id]->UE_info.CellGroup[UE_id]->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ?
|
||||||
|
&sched_ctrl->active_ubwp->bwp_Common->genericParameters:
|
||||||
|
&scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
||||||
|
int bwp_start = NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth,MAX_BWP_SIZE);
|
||||||
|
|
||||||
/* verify that at that slot and symbol, resources are free. We only do this
|
/* verify that at that slot and symbol, resources are free. We only do this
|
||||||
* for initialCyclicShift 0 (we assume it always has that one), so other
|
* for initialCyclicShift 0 (we assume it always has that one), so other
|
||||||
* initialCyclicShifts can overlap with ICS 0!*/
|
* initialCyclicShifts can overlap with ICS 0!*/
|
||||||
if (pucch_Config) {
|
if (pucch_Config) {
|
||||||
const NR_PUCCH_Resource_t *resource = pucch_Config->resourceToAddModList->list.array[pucch->resource_indicator];
|
const NR_PUCCH_Resource_t *resource = pucch_Config->resourceToAddModList->list.array[pucch->resource_indicator];
|
||||||
DevAssert(resource->format.present == NR_PUCCH_Resource__format_PR_format0);
|
DevAssert(resource->format.present == NR_PUCCH_Resource__format_PR_format0);
|
||||||
|
int second_hop_prb = resource->secondHopPRB!= NULL ? *resource->secondHopPRB : 0;
|
||||||
|
int nr_of_symbols = resource->format.choice.format0->nrofSymbols;
|
||||||
if (resource->format.choice.format0->initialCyclicShift == 0) {
|
if (resource->format.choice.format0->initialCyclicShift == 0) {
|
||||||
uint16_t *vrb_map_UL = &RC.nrmac[mod_id]->common_channels[CC_id].vrb_map_UL[pucch->ul_slot * MAX_BWP_SIZE];
|
uint16_t *vrb_map_UL = &RC.nrmac[mod_id]->common_channels[CC_id].vrb_map_UL[pucch->ul_slot * MAX_BWP_SIZE];
|
||||||
const uint16_t symb = 1 << resource->format.choice.format0->startingSymbolIndex;
|
for (int l=0; l<nr_of_symbols; l++) {
|
||||||
if ((vrb_map_UL[resource->startingPRB] & symb) != 0)
|
uint16_t symb = 1 << (resource->format.choice.format0->startingSymbolIndex + l);
|
||||||
LOG_W(NR_MAC, "symbol 0x%x is not free for PUCCH alloc in vrb_map_UL at RB %ld and slot %d.%d\n", symb, resource->startingPRB, pucch->frame, pucch->ul_slot);
|
int prb;
|
||||||
vrb_map_UL[resource->startingPRB] |= symb;
|
if (l==1 && second_hop_prb != 0)
|
||||||
|
prb = second_hop_prb;
|
||||||
|
else
|
||||||
|
prb = resource->startingPRB;
|
||||||
|
if ((vrb_map_UL[bwp_start+prb] & symb) != 0)
|
||||||
|
LOG_W(MAC, "symbol 0x%x is not free for PUCCH alloc in vrb_map_UL at RB %ld and slot %d.%d\n", symb, resource->startingPRB, pucch->frame, pucch->ul_slot);
|
||||||
|
vrb_map_UL[bwp_start+prb] |= symb;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -930,7 +930,7 @@ bool allocate_ul_retransmission(module_id_t module_id,
|
|||||||
NR_CellGroupConfig_t *cg = UE_info->CellGroup[UE_id];
|
NR_CellGroupConfig_t *cg = UE_info->CellGroup[UE_id];
|
||||||
NR_BWP_UplinkDedicated_t *ubwpd= cg ? cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP:NULL;
|
NR_BWP_UplinkDedicated_t *ubwpd= cg ? cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP:NULL;
|
||||||
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ? &sched_ctrl->active_ubwp->bwp_Common->genericParameters : &scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ? &sched_ctrl->active_ubwp->bwp_Common->genericParameters : &scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
||||||
int rbStart = sched_ctrl->active_ubwp ? NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE) : 0;
|
int rbStart = 0; // wrt BWP start
|
||||||
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
|
|
||||||
const uint8_t num_dmrs_cdm_grps_no_data = (sched_ctrl->active_bwp || ubwpd) ? 1 : 2;
|
const uint8_t num_dmrs_cdm_grps_no_data = (sched_ctrl->active_bwp || ubwpd) ? 1 : 2;
|
||||||
@@ -1066,10 +1066,10 @@ void pf_ul(module_id_t module_id,
|
|||||||
LOG_D(NR_MAC,"pf_ul: preparing UL scheduling for UE %d\n",UE_id);
|
LOG_D(NR_MAC,"pf_ul: preparing UL scheduling for UE %d\n",UE_id);
|
||||||
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
NR_UE_sched_ctrl_t *sched_ctrl = &UE_info->UE_sched_ctrl[UE_id];
|
||||||
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ? &sched_ctrl->active_ubwp->bwp_Common->genericParameters : &scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
NR_BWP_t *genericParameters = sched_ctrl->active_ubwp ? &sched_ctrl->active_ubwp->bwp_Common->genericParameters : &scc->uplinkConfigCommon->initialUplinkBWP->genericParameters;
|
||||||
|
int rbStart = 0; // wrt BWP start
|
||||||
NR_CellGroupConfig_t *cg = UE_info->CellGroup[UE_id];
|
NR_CellGroupConfig_t *cg = UE_info->CellGroup[UE_id];
|
||||||
NR_BWP_UplinkDedicated_t *ubwpd= cg ? cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
|
NR_BWP_UplinkDedicated_t *ubwpd= cg ? cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
|
||||||
|
|
||||||
int rbStart = sched_ctrl->active_ubwp ? NRRIV2PRBOFFSET(genericParameters->locationAndBandwidth, MAX_BWP_SIZE) : 0;
|
|
||||||
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
const uint16_t bwpSize = NRRIV2BW(genericParameters->locationAndBandwidth, MAX_BWP_SIZE);
|
||||||
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
|
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
|
||||||
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
|
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
|
||||||
@@ -1320,6 +1320,10 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
|||||||
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth:
|
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth:
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth,
|
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth,
|
||||||
MAX_BWP_SIZE);
|
MAX_BWP_SIZE);
|
||||||
|
const uint16_t bwpStart = NRRIV2PRBOFFSET(sched_ctrl->active_ubwp ?
|
||||||
|
sched_ctrl->active_ubwp->bwp_Common->genericParameters.locationAndBandwidth:
|
||||||
|
scc->uplinkConfigCommon->initialUplinkBWP->genericParameters.locationAndBandwidth,
|
||||||
|
MAX_BWP_SIZE);
|
||||||
const struct NR_PUSCH_TimeDomainResourceAllocationList *tdaList = sched_ctrl->active_ubwp ?
|
const struct NR_PUSCH_TimeDomainResourceAllocationList *tdaList = sched_ctrl->active_ubwp ?
|
||||||
sched_ctrl->active_ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList:
|
sched_ctrl->active_ubwp->bwp_Common->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList:
|
||||||
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
scc->uplinkConfigCommon->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_TimeDomainAllocationList;
|
||||||
@@ -1333,10 +1337,10 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
|
|||||||
if (RC.nrmac[module_id]->ulprbbl[i] == 1) vrb_map_UL[i]=symb;
|
if (RC.nrmac[module_id]->ulprbbl[i] == 1) vrb_map_UL[i]=symb;
|
||||||
|
|
||||||
for (int i = 0; i < bwpSize; i++) {
|
for (int i = 0; i < bwpSize; i++) {
|
||||||
while ((vrb_map_UL[i] & symb) != 0 && i < bwpSize)
|
while ((vrb_map_UL[bwpStart + i] & symb) != 0 && i < bwpSize)
|
||||||
i++;
|
i++;
|
||||||
st = i;
|
st = i;
|
||||||
while ((vrb_map_UL[i] & symb) == 0 && i < bwpSize)
|
while ((vrb_map_UL[bwpStart + i] & symb) == 0 && i < bwpSize)
|
||||||
i++;
|
i++;
|
||||||
if (i - st > len) {
|
if (i - st > len) {
|
||||||
len = i - st;
|
len = i - st;
|
||||||
|
|||||||
@@ -145,6 +145,8 @@ typedef struct {
|
|||||||
uint8_t msg3_first_rb;
|
uint8_t msg3_first_rb;
|
||||||
/// Msg3 number of RB
|
/// Msg3 number of RB
|
||||||
uint8_t msg3_nb_rb;
|
uint8_t msg3_nb_rb;
|
||||||
|
/// Msg3 BWP start
|
||||||
|
uint8_t msg3_bwp_start;
|
||||||
/// Msg3 TPC command
|
/// Msg3 TPC command
|
||||||
uint8_t msg3_TPC;
|
uint8_t msg3_TPC;
|
||||||
/// Msg3 ULdelay command
|
/// Msg3 ULdelay command
|
||||||
|
|||||||
Reference in New Issue
Block a user