Commit 3cd49db4 authored by francescomani's avatar francescomani

removing ul active_bwp

parent 66e28109
...@@ -699,13 +699,7 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t ...@@ -699,13 +699,7 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon; NR_ServingCellConfigCommon_t *scc = cc->ServingCellConfigCommon;
NR_UE_UL_BWP_t *UL_BWP = &ra->UL_BWP; NR_UE_UL_BWP_t *UL_BWP = &ra->UL_BWP;
NR_BWP_Uplink_t *ubwp = NULL;
NR_BWP_UplinkDedicated_t *ubwpd = NULL;
NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = UL_BWP->tdaList; NR_PUSCH_TimeDomainResourceAllocationList_t *pusch_TimeDomainAllocationList = UL_BWP->tdaList;
if(ra->CellGroup) {
ubwp = ra->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[UL_BWP->bwp_id-1];
ubwpd = ra->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
}
int mu = UL_BWP->scs; int mu = UL_BWP->scs;
uint8_t K2 = *pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->k2; uint8_t K2 = *pusch_TimeDomainAllocationList->list.array[ra->Msg3_tda_id]->k2;
const int sched_frame = frame + (slot + K2 >= nr_slots_per_frame[mu]); const int sched_frame = frame + (slot + K2 >= nr_slots_per_frame[mu]);
...@@ -834,14 +828,11 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t ...@@ -834,14 +828,11 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
const NR_SIB1_t *sib1 = cc->sib1 ? cc->sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL; const NR_SIB1_t *sib1 = cc->sib1 ? cc->sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL;
config_uldci(sib1, config_uldci(sib1,
ubwp,
ubwpd,
scc, scc,
pusch_pdu, pusch_pdu,
&uldci_payload, &uldci_payload,
ra->Msg3_tda_id, ra->Msg3_tda_id,
ra->msg3_TPC, ra->msg3_TPC,
0, // not used in format 0_0
&ra->UL_BWP); &ra->UL_BWP);
fill_dci_pdu_rel15(scc, fill_dci_pdu_rel15(scc,
...@@ -879,7 +870,6 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t ...@@ -879,7 +870,6 @@ void nr_generate_Msg3_retransmission(module_id_t module_idP, int CC_id, frame_t
void nr_get_Msg3alloc(module_id_t module_id, void nr_get_Msg3alloc(module_id_t module_id,
int CC_id, int CC_id,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc,
NR_BWP_Uplink_t *ubwp,
sub_frame_t current_slot, sub_frame_t current_slot,
frame_t current_frame, frame_t current_frame,
NR_RA_t *ra, NR_RA_t *ra,
...@@ -1393,10 +1383,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra ...@@ -1393,10 +1383,7 @@ void nr_generate_Msg2(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
nfapi_nr_pdu_t *tx_req = &nr_mac->TX_req[CC_id].pdu_list[nr_mac->TX_req[CC_id].Number_of_PDUs]; nfapi_nr_pdu_t *tx_req = &nr_mac->TX_req[CC_id].pdu_list[nr_mac->TX_req[CC_id].Number_of_PDUs];
// Program UL processing for Msg3 // Program UL processing for Msg3
NR_BWP_Uplink_t *ubwp = ra->CellGroup ? nr_get_Msg3alloc(module_idP, CC_id, scc, slotP, frameP, ra, nr_mac->tdd_beam_association);
ra->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[ra->UL_BWP.bwp_id-1] :
NULL;
nr_get_Msg3alloc(module_idP, CC_id, scc, ubwp, slotP, frameP, ra, nr_mac->tdd_beam_association);
nr_add_msg3(module_idP, CC_id, frameP, slotP, ra, (uint8_t *) &tx_req->TLVs[0].value.direct[0]); nr_add_msg3(module_idP, CC_id, frameP, slotP, ra, (uint8_t *) &tx_req->TLVs[0].value.direct[0]);
if(ra->cfra) { if(ra->cfra) {
...@@ -1520,7 +1507,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra ...@@ -1520,7 +1507,7 @@ void nr_generate_Msg4(module_id_t module_idP, int CC_id, frame_t frameP, sub_fra
} }
const int delta_PRI=0; const int delta_PRI=0;
int r_pucch = nr_get_pucch_resource(coreset, sched_ctrl->active_ubwp, NULL, CCEIndex); int r_pucch = nr_get_pucch_resource(coreset, ra->UL_BWP.pucch_Config, CCEIndex);
LOG_D(NR_MAC,"[RAPROC] Msg4 r_pucch %d (CCEIndex %d, nb_of_candidates %d, delta_PRI %d)\n", r_pucch, CCEIndex, nr_of_candidates, delta_PRI); LOG_D(NR_MAC,"[RAPROC] Msg4 r_pucch %d (CCEIndex %d, nb_of_candidates %d, delta_PRI %d)\n", r_pucch, CCEIndex, nr_of_candidates, delta_PRI);
......
...@@ -377,16 +377,10 @@ bool allocate_dl_retransmission(module_id_t module_id, ...@@ -377,16 +377,10 @@ bool allocate_dl_retransmission(module_id_t module_id,
const NR_ServingCellConfigCommon_t *scc = nr_mac->common_channels->ServingCellConfigCommon; const NR_ServingCellConfigCommon_t *scc = nr_mac->common_channels->ServingCellConfigCommon;
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
NR_UE_DL_BWP_t *BWP = &UE->current_DL_BWP; NR_UE_DL_BWP_t *BWP = &UE->current_DL_BWP;
NR_UE_UL_BWP_t *UBWP = &UE->current_UL_BWP;
NR_sched_pdsch_t *retInfo = &sched_ctrl->harq_processes[current_harq_pid].sched_pdsch; NR_sched_pdsch_t *retInfo = &sched_ctrl->harq_processes[current_harq_pid].sched_pdsch;
NR_CellGroupConfig_t *cg = UE->CellGroup; NR_CellGroupConfig_t *cg = UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd =
cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
const int coresetid = sched_ctrl->coreset->controlResourceSetId; const int coresetid = sched_ctrl->coreset->controlResourceSetId;
const uint16_t bwpSize = coresetid == 0 ? RC.nrmac[module_id]->cset0_bwp_size : BWP->BWPSize; const uint16_t bwpSize = coresetid == 0 ? RC.nrmac[module_id]->cset0_bwp_size : BWP->BWPSize;
...@@ -506,7 +500,7 @@ bool allocate_dl_retransmission(module_id_t module_id, ...@@ -506,7 +500,7 @@ bool allocate_dl_retransmission(module_id_t module_id,
/* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH /* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH
* allocation after CCE alloc fail would be more complex) */ * allocation after CCE alloc fail would be more complex) */
int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, sched_ctrl->active_ubwp, ubwpd, CCEIndex); int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, UBWP->pucch_Config, CCEIndex);
const int alloc = nr_acknack_scheduling(module_id, UE, frame, slot, r_pucch, 0); const int alloc = nr_acknack_scheduling(module_id, UE, frame, slot, r_pucch, 0);
if (alloc<0) { if (alloc<0) {
LOG_D(MAC, LOG_D(MAC,
...@@ -639,19 +633,11 @@ void pf_dl(module_id_t module_id, ...@@ -639,19 +633,11 @@ void pf_dl(module_id_t module_id,
/* Loop UE_sched to find max coeff and allocate transmission */ /* Loop UE_sched to find max coeff and allocate transmission */
while (remainUEs> 0 && n_rb_sched >= min_rbSize && iterator->UE != NULL) { while (remainUEs> 0 && n_rb_sched >= min_rbSize && iterator->UE != NULL) {
NR_CellGroupConfig_t *cg = iterator->UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd =
cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
NR_UE_sched_ctrl_t *sched_ctrl = &iterator->UE->UE_sched_ctrl; NR_UE_sched_ctrl_t *sched_ctrl = &iterator->UE->UE_sched_ctrl;
const uint16_t rnti = iterator->UE->rnti; const uint16_t rnti = iterator->UE->rnti;
NR_UE_DL_BWP_t *BWP = &iterator->UE->current_DL_BWP; NR_UE_DL_BWP_t *BWP = &iterator->UE->current_DL_BWP;
NR_UE_UL_BWP_t *UBWP = &iterator->UE->current_UL_BWP;
const int coresetid = sched_ctrl->coreset->controlResourceSetId; const int coresetid = sched_ctrl->coreset->controlResourceSetId;
const uint16_t bwpSize = coresetid == 0 ? const uint16_t bwpSize = coresetid == 0 ?
...@@ -697,7 +683,7 @@ void pf_dl(module_id_t module_id, ...@@ -697,7 +683,7 @@ void pf_dl(module_id_t module_id,
/* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH /* Find PUCCH occasion: if it fails, undo CCE allocation (undoing PUCCH
* allocation after CCE alloc fail would be more complex) */ * allocation after CCE alloc fail would be more complex) */
int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, sched_ctrl->active_ubwp, ubwpd, CCEIndex); int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, UBWP->pucch_Config, CCEIndex);
const int alloc = nr_acknack_scheduling(module_id, iterator->UE, frame, slot, r_pucch, 0); const int alloc = nr_acknack_scheduling(module_id, iterator->UE, frame, slot, r_pucch, 0);
if (alloc<0) { if (alloc<0) {
......
...@@ -280,7 +280,7 @@ void nr_preprocessor_phytest(module_id_t module_id, ...@@ -280,7 +280,7 @@ void nr_preprocessor_phytest(module_id_t module_id,
__func__, __func__,
UE->rnti); UE->rnti);
int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, sched_ctrl->active_ubwp, NULL, CCEIndex); int r_pucch = nr_get_pucch_resource(sched_ctrl->coreset, UE->current_UL_BWP.pucch_Config, CCEIndex);
const int alloc = nr_acknack_scheduling(module_id, UE, frame, slot, r_pucch, 0); const int alloc = nr_acknack_scheduling(module_id, UE, frame, slot, r_pucch, 0);
if (alloc < 0) { if (alloc < 0) {
LOG_D(MAC, LOG_D(MAC,
...@@ -379,18 +379,13 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_ ...@@ -379,18 +379,13 @@ bool nr_ul_preprocessor_phytest(module_id_t module_id, frame_t frame, sub_frame_
if (!is_xlsch_in_slot(ulsch_slot_bitmap, sched_slot)) if (!is_xlsch_in_slot(ulsch_slot_bitmap, sched_slot))
return false; return false;
uint8_t num_dmrs_cdm_grps_no_data = 1;
if ((target_ul_Nl==4)||(target_ul_Nl==3))
num_dmrs_cdm_grps_no_data = 2;
/* we want to avoid a lengthy deduction of DMRS and other parameters in /* we want to avoid a lengthy deduction of DMRS and other parameters in
* every TTI if we can save it, so check whether TDA, or * every TTI if we can save it, so check whether TDA, or
* num_dmrs_cdm_grps_no_data has changed and only then recompute */ * num_dmrs_cdm_grps_no_data has changed and only then recompute */
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static; NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->nrOfLayers != target_ul_Nl || ps->nrOfLayers != target_ul_Nl)
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) nr_set_pusch_semi_static(BWP, scc, tda, target_ul_Nl,ps);
nr_set_pusch_semi_static(BWP, scc, sched_ctrl->active_ubwp, NULL, tda, num_dmrs_cdm_grps_no_data,target_ul_Nl,ps);
uint16_t rbStart = 0; uint16_t rbStart = 0;
uint16_t rbSize; uint16_t rbSize;
......
...@@ -595,10 +595,7 @@ void nr_set_pdsch_semi_static(const NR_UE_DL_BWP_t *BWP, ...@@ -595,10 +595,7 @@ void nr_set_pdsch_semi_static(const NR_UE_DL_BWP_t *BWP,
void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP, void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP,
const NR_ServingCellConfigCommon_t *scc, const NR_ServingCellConfigCommon_t *scc,
const NR_BWP_Uplink_t *ubwp,
const NR_BWP_UplinkDedicated_t *ubwpd,
int tda, int tda,
uint8_t num_dmrs_cdm_grps_no_data,
uint8_t nrOfLayers, uint8_t nrOfLayers,
NR_pusch_semi_static_t *ps) { NR_pusch_semi_static_t *ps) {
...@@ -610,7 +607,11 @@ void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP, ...@@ -610,7 +607,11 @@ void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP,
&ps->nrOfSymbols); &ps->nrOfSymbols);
ps->nrOfLayers = nrOfLayers; ps->nrOfLayers = nrOfLayers;
ps->num_dmrs_cdm_grps_no_data = BWP->transform_precoding ? num_dmrs_cdm_grps_no_data : 2; // TODO setting of cdm groups with no data to be redone for MIMO
if (BWP->transform_precoding || nrOfLayers<3)
ps->num_dmrs_cdm_grps_no_data = (BWP->dci_format == NR_UL_DCI_FORMAT_0_1) ? 1 : (ps->nrOfSymbols == 2 ? 1 : 2);
else
ps->num_dmrs_cdm_grps_no_data = 2;
/* DMRS calculations */ /* DMRS calculations */
ps->mapping_type = BWP->tdaList->list.array[tda]->mappingType; ps->mapping_type = BWP->tdaList->list.array[tda]->mappingType;
...@@ -639,8 +640,8 @@ void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP, ...@@ -639,8 +640,8 @@ void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP,
num_dmrs_symb += (ps->ul_dmrs_symb_pos >> i) & 1; num_dmrs_symb += (ps->ul_dmrs_symb_pos >> i) & 1;
ps->num_dmrs_symb = num_dmrs_symb; ps->num_dmrs_symb = num_dmrs_symb;
ps->N_PRB_DMRS = ps->dmrs_config_type == 0 ps->N_PRB_DMRS = ps->dmrs_config_type == 0
? num_dmrs_cdm_grps_no_data * 6 ? ps->num_dmrs_cdm_grps_no_data * 6
: num_dmrs_cdm_grps_no_data * 4; : ps->num_dmrs_cdm_grps_no_data * 4;
} }
#define BLER_UPDATE_FRAME 10 #define BLER_UPDATE_FRAME 10
...@@ -907,14 +908,11 @@ void nr_configure_css_dci_initial(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu, ...@@ -907,14 +908,11 @@ void nr_configure_css_dci_initial(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu,
} }
void config_uldci(const NR_SIB1_t *sib1, void config_uldci(const NR_SIB1_t *sib1,
const NR_BWP_Uplink_t *ubwp,
const NR_BWP_UplinkDedicated_t *ubwpd,
const NR_ServingCellConfigCommon_t *scc, const NR_ServingCellConfigCommon_t *scc,
const nfapi_nr_pusch_pdu_t *pusch_pdu, const nfapi_nr_pusch_pdu_t *pusch_pdu,
dci_pdu_rel15_t *dci_pdu_rel15, dci_pdu_rel15_t *dci_pdu_rel15,
int time_domain_assignment, int time_domain_assignment,
uint8_t tpc, uint8_t tpc,
int n_ubwp,
NR_UE_UL_BWP_t *UBWP) { NR_UE_UL_BWP_t *UBWP) {
int bwp_id = UBWP->bwp_id; int bwp_id = UBWP->bwp_id;
...@@ -941,7 +939,7 @@ void config_uldci(const NR_SIB1_t *sib1, ...@@ -941,7 +939,7 @@ void config_uldci(const NR_SIB1_t *sib1,
LOG_D(NR_MAC,"Configuring DCI Format 0_1\n"); LOG_D(NR_MAC,"Configuring DCI Format 0_1\n");
dci_pdu_rel15->dai[0].val = 0; //TODO dci_pdu_rel15->dai[0].val = 0; //TODO
// bwp indicator as per table 7.3.1.1.2-1 in 38.212 // bwp indicator as per table 7.3.1.1.2-1 in 38.212
dci_pdu_rel15->bwp_indicator.val = n_ubwp < 4 ? bwp_id : bwp_id - 1; dci_pdu_rel15->bwp_indicator.val = UBWP->n_ul_bwp < 4 ? bwp_id : bwp_id - 1;
// SRS resource indicator // SRS resource indicator
if (pusch_Config && if (pusch_Config &&
pusch_Config->txConfig != NULL) { pusch_Config->txConfig != NULL) {
...@@ -1033,11 +1031,10 @@ void nr_configure_pdcch(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu, ...@@ -1033,11 +1031,10 @@ void nr_configure_pdcch(nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu,
} }
int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset, int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset,
NR_BWP_Uplink_t *bwp, NR_PUCCH_Config_t *pucch_Config,
NR_BWP_UplinkDedicated_t *bwpd,
int CCEIndex) { int CCEIndex) {
int r_pucch = -1; int r_pucch = -1;
if(bwp == NULL && bwpd == NULL) { if(pucch_Config == NULL) {
int n_rb,rb_offset; int n_rb,rb_offset;
get_coreset_rballoc(coreset->frequencyDomainResources.buf,&n_rb,&rb_offset); get_coreset_rballoc(coreset->frequencyDomainResources.buf,&n_rb,&rb_offset);
const uint16_t N_cce = n_rb * coreset->duration / NR_NB_REG_PER_CCE; const uint16_t N_cce = n_rb * coreset->duration / NR_NB_REG_PER_CCE;
...@@ -1048,23 +1045,19 @@ int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset, ...@@ -1048,23 +1045,19 @@ int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset,
} }
// This function configures pucch pdu fapi structure // This function configures pucch pdu fapi structure
void nr_configure_pucch(const NR_SIB1_t *sib1, void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
nfapi_nr_pucch_pdu_t* pucch_pdu,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc,
NR_UE_info_t* UE, NR_UE_info_t* UE,
NR_BWP_UplinkDedicated_t *bwpd,
uint8_t pucch_resource, uint8_t pucch_resource,
uint16_t O_csi, uint16_t O_csi,
uint16_t O_ack, uint16_t O_ack,
uint8_t O_sr, uint8_t O_sr,
int r_pucch) { int r_pucch) {
NR_PUCCH_Config_t *pucch_Config;
NR_PUCCH_Resource_t *pucchres; NR_PUCCH_Resource_t *pucchres;
NR_PUCCH_ResourceSet_t *pucchresset; NR_PUCCH_ResourceSet_t *pucchresset;
NR_PUCCH_FormatConfig_t *pucchfmt; NR_PUCCH_FormatConfig_t *pucchfmt;
NR_PUCCH_ResourceId_t *resource_id = NULL; NR_PUCCH_ResourceId_t *resource_id = NULL;
NR_BWP_Uplink_t *bwp = UE->UE_sched_ctrl.active_ubwp;
NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP; NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP;
long *id0 = NULL; long *id0 = NULL;
...@@ -1087,14 +1080,7 @@ void nr_configure_pucch(const NR_SIB1_t *sib1, ...@@ -1087,14 +1080,7 @@ void nr_configure_pucch(const NR_SIB1_t *sib1,
id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0; id0 = pusch_Config->dmrs_UplinkForPUSCH_MappingTypeB->choice.setup->transformPrecodingDisabled->scramblingID0;
else id0 = scc->physCellId; else id0 = scc->physCellId;
NR_PUCCH_ConfigCommon_t *pucch_ConfigCommon = NULL; NR_PUCCH_ConfigCommon_t *pucch_ConfigCommon = BWP->pucch_ConfigCommon;
if(bwp) {
pucch_ConfigCommon = bwp->bwp_Common->pucch_ConfigCommon->choice.setup;
} else if(scc) {
pucch_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup;
} else {
pucch_ConfigCommon = sib1->servingCellConfigCommon->uplinkConfigCommon->initialUplinkBWP.pucch_ConfigCommon->choice.setup;
}
// hop flags and hopping id are valid for any BWP // hop flags and hopping id are valid for any BWP
switch (pucch_ConfigCommon->pucch_GroupHopping){ switch (pucch_ConfigCommon->pucch_GroupHopping){
...@@ -1126,12 +1112,10 @@ void nr_configure_pucch(const NR_SIB1_t *sib1, ...@@ -1126,12 +1112,10 @@ void nr_configure_pucch(const NR_SIB1_t *sib1,
pucch_pdu->bwp_start = BWP->BWPStart; pucch_pdu->bwp_start = BWP->BWPStart;
pucch_pdu->subcarrier_spacing = BWP->scs; pucch_pdu->subcarrier_spacing = BWP->scs;
pucch_pdu->cyclic_prefix = (BWP->cyclicprefix==NULL) ? 0 : *BWP->cyclicprefix; pucch_pdu->cyclic_prefix = (BWP->cyclicprefix==NULL) ? 0 : *BWP->cyclicprefix;
if (r_pucch<0 || bwp ){
NR_PUCCH_Config_t *pucch_Config = BWP->pucch_Config;
if (r_pucch<0 || pucch_Config){
LOG_D(NR_MAC,"pucch_acknak: Filling dedicated configuration for PUCCH\n"); LOG_D(NR_MAC,"pucch_acknak: Filling dedicated configuration for PUCCH\n");
// we have either a dedicated BWP or Dedicated PUCCH configuration on InitialBWP
AssertFatal(bwp!=NULL || bwpd!=NULL,"We need one dedicated configuration for a BWP (neither additional or initial BWP has a dedicated configuration)\n");
pucch_Config = bwp && bwp->bwp_Dedicated && bwp->bwp_Dedicated->pucch_Config ?
bwp->bwp_Dedicated->pucch_Config->choice.setup : bwpd->pucch_Config->choice.setup;
AssertFatal(pucch_Config->resourceSetToAddModList!=NULL, AssertFatal(pucch_Config->resourceSetToAddModList!=NULL,
"PUCCH resourceSetToAddModList is null\n"); "PUCCH resourceSetToAddModList is null\n");
...@@ -1273,8 +1257,8 @@ void nr_configure_pucch(const NR_SIB1_t *sib1, ...@@ -1273,8 +1257,8 @@ void nr_configure_pucch(const NR_SIB1_t *sib1,
LOG_D(NR_MAC,"Configure pucch: pucch_pdu->format_type %d pucch_pdu->bit_len_harq %d, pucch->pdu->bit_len_csi %d\n",pucch_pdu->format_type,pucch_pdu->bit_len_harq,pucch_pdu->bit_len_csi_part1); LOG_D(NR_MAC,"Configure pucch: pucch_pdu->format_type %d pucch_pdu->bit_len_harq %d, pucch->pdu->bit_len_csi %d\n",pucch_pdu->format_type,pucch_pdu->bit_len_harq,pucch_pdu->bit_len_csi_part1);
} }
else { // this is the default PUCCH configuration, PUCCH format 0 or 1 else { // this is the default PUCCH configuration, PUCCH format 0 or 1
LOG_D(NR_MAC,"pucch_acknak: Filling default PUCCH configuration from Tables (r_pucch %d, bwp %p)\n",r_pucch,bwp); LOG_D(NR_MAC,"pucch_acknak: Filling default PUCCH configuration from Tables (r_pucch %d, pucch_Config %p)\n",r_pucch,pucch_Config);
int rsetindex = *scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon; int rsetindex = *pucch_ConfigCommon->pucch_ResourceCommon;
int prb_start, second_hop_prb, nr_of_symb, start_symb; int prb_start, second_hop_prb, nr_of_symb, start_symb;
set_r_pucch_parms(rsetindex, set_r_pucch_parms(rsetindex,
r_pucch, r_pucch,
...@@ -2271,8 +2255,11 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2271,8 +2255,11 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
NR_BWP_Uplink_t *ul_bwp = NULL; NR_BWP_Uplink_t *ul_bwp = NULL;
NR_BWP_DownlinkDedicated_t *bwpd = NULL; NR_BWP_DownlinkDedicated_t *bwpd = NULL;
NR_BWP_UplinkDedicated_t *ubwpd = NULL; NR_BWP_UplinkDedicated_t *ubwpd = NULL;
NR_CSI_MeasConfig_t *csi_MeasConfig = NULL;
DL_BWP->n_dl_bwp = 1; DL_BWP->n_dl_bwp = 1;
UL_BWP->n_ul_bwp = 1;
int old_dl_bwp_id = DL_BWP->bwp_id; int old_dl_bwp_id = DL_BWP->bwp_id;
int old_ul_bwp_id = UL_BWP->bwp_id;
int target_ss; int target_ss;
...@@ -2281,6 +2268,7 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2281,6 +2268,7 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
CellGroup->spCellConfig->spCellConfigDedicated) { CellGroup->spCellConfig->spCellConfigDedicated) {
const NR_ServingCellConfig_t *servingCellConfig = CellGroup->spCellConfig->spCellConfigDedicated; const NR_ServingCellConfig_t *servingCellConfig = CellGroup->spCellConfig->spCellConfigDedicated;
csi_MeasConfig = servingCellConfig->csi_MeasConfig ? servingCellConfig->csi_MeasConfig->choice.setup : NULL;
target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific; target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific;
// (re)configuring BWP // (re)configuring BWP
...@@ -2304,6 +2292,8 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2304,6 +2292,8 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
} }
const struct NR_UplinkConfig__uplinkBWP_ToAddModList *ubwpList = servingCellConfig->uplinkConfig->uplinkBWP_ToAddModList; const struct NR_UplinkConfig__uplinkBWP_ToAddModList *ubwpList = servingCellConfig->uplinkConfig->uplinkBWP_ToAddModList;
if(ubwpList)
UL_BWP->n_ul_bwp = ubwpList->list.count;
if (UL_BWP->bwp_id>0) { if (UL_BWP->bwp_id>0) {
for (int i=0; i<ubwpList->list.count; i++) { for (int i=0; i<ubwpList->list.count; i++) {
ul_bwp = ubwpList->list.array[i]; ul_bwp = ubwpList->list.array[i];
...@@ -2325,6 +2315,7 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2325,6 +2315,7 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
DL_BWP->pdsch_Config = bwpd->pdsch_Config->choice.setup; DL_BWP->pdsch_Config = bwpd->pdsch_Config->choice.setup;
UL_BWP->pusch_Config = ubwpd->pusch_Config->choice.setup; UL_BWP->pusch_Config = ubwpd->pusch_Config->choice.setup;
UL_BWP->pucch_Config = ubwpd->pucch_Config->choice.setup;
} }
else { else {
DL_BWP->bwp_id = 0; DL_BWP->bwp_id = 0;
...@@ -2332,10 +2323,13 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2332,10 +2323,13 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
target_ss = NR_SearchSpace__searchSpaceType_PR_common; target_ss = NR_SearchSpace__searchSpaceType_PR_common;
DL_BWP->pdsch_Config = NULL; DL_BWP->pdsch_Config = NULL;
UL_BWP->pusch_Config = NULL; UL_BWP->pusch_Config = NULL;
UL_BWP->pucch_Config = NULL;
} }
if (old_dl_bwp_id != DL_BWP->bwp_id) if (old_dl_bwp_id != DL_BWP->bwp_id)
LOG_I(NR_MAC, "Switching to DL-BWP %li\n", DL_BWP->bwp_id); LOG_I(NR_MAC, "Switching to DL-BWP %li\n", DL_BWP->bwp_id);
if (old_ul_bwp_id != UL_BWP->bwp_id)
LOG_I(NR_MAC, "Switching to UL-BWP %li\n", UL_BWP->bwp_id);
// TDA lists // TDA lists
if (DL_BWP->bwp_id>0) if (DL_BWP->bwp_id>0)
...@@ -2383,6 +2377,12 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2383,6 +2377,12 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
else else
UL_BWP->transform_precoding = *UL_BWP->pusch_Config->transformPrecoder; UL_BWP->transform_precoding = *UL_BWP->pusch_Config->transformPrecoder;
if(UL_BWP->bwp_id>0)
UL_BWP->pucch_ConfigCommon = ul_bwp->bwp_Common->pucch_ConfigCommon->choice.setup;
else
UL_BWP->pucch_ConfigCommon = scc->uplinkConfigCommon->initialUplinkBWP->pucch_ConfigCommon->choice.setup;
if(UE) { if(UE) {
// setting PDCCH related structures for sched_ctrl // setting PDCCH related structures for sched_ctrl
sched_ctrl->search_space = get_searchspace(scc, sched_ctrl->search_space = get_searchspace(scc,
...@@ -2408,6 +2408,9 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac, ...@@ -2408,6 +2408,9 @@ void configure_UE_BWP(gNB_MAC_INST *nr_mac,
NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0) : NR_UL_DCI_FORMAT_0_1 : NR_UL_DCI_FORMAT_0_0) :
NR_UL_DCI_FORMAT_0_0; NR_UL_DCI_FORMAT_0_0;
if (csi_MeasConfig)
compute_csi_bitlen (csi_MeasConfig, UE);
} }
if(ra) { if(ra) {
...@@ -2480,13 +2483,6 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf ...@@ -2480,13 +2483,6 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
else else
UE->Msg4_ACKed = false; UE->Msg4_ACKed = false;
if (CellGroup &&
CellGroup->spCellConfig &&
CellGroup->spCellConfig->spCellConfigDedicated &&
CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig &&
CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup)
compute_csi_bitlen (CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup, UE);
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
memset(sched_ctrl, 0, sizeof(*sched_ctrl)); memset(sched_ctrl, 0, sizeof(*sched_ctrl));
sched_ctrl->dl_max_mcs = 28; /* do not limit MCS for individual UEs */ sched_ctrl->dl_max_mcs = 28; /* do not limit MCS for individual UEs */
...@@ -2523,8 +2519,6 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf ...@@ -2523,8 +2519,6 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
"uplinkBWP_ToAddModList has %d BWP!\n", "uplinkBWP_ToAddModList has %d BWP!\n",
ubwpList->list.count); ubwpList->list.count);
sched_ctrl->active_ubwp = ubwpList && UL_BWP->bwp_id > 0 ? ubwpList->list.array[UL_BWP->bwp_id - 1] : NULL;
/* get Number of HARQ processes for this UE */ /* get Number of HARQ processes for this UE */
if (servingCellConfig) if (servingCellConfig)
AssertFatal(servingCellConfig->pdsch_ServingCellConfig->present == NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup, AssertFatal(servingCellConfig->pdsch_ServingCellConfig->present == NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup,
...@@ -2648,7 +2642,6 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE, ...@@ -2648,7 +2642,6 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE,
NR_CellGroupConfig_t *CellGroup = UE->CellGroup; NR_CellGroupConfig_t *CellGroup = UE->CellGroup;
NR_BWP_DownlinkDedicated_t *bwpd=NULL; NR_BWP_DownlinkDedicated_t *bwpd=NULL;
NR_BWP_UplinkDedicated_t *ubwpd=NULL;
int dl_bwp_id = UE->current_DL_BWP.bwp_id; int dl_bwp_id = UE->current_DL_BWP.bwp_id;
int ul_bwp_id = UE->current_UL_BWP.bwp_id; int ul_bwp_id = UE->current_UL_BWP.bwp_id;
...@@ -2670,13 +2663,10 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE, ...@@ -2670,13 +2663,10 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE,
CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count,ul_bwp_id); CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count,ul_bwp_id);
bwpd = CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[dl_bwp_id-1]->bwp_Dedicated; bwpd = CellGroup->spCellConfig->spCellConfigDedicated->downlinkBWP_ToAddModList->list.array[dl_bwp_id-1]->bwp_Dedicated;
ubwpd = CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[ul_bwp_id-1]->bwp_Dedicated;
} }
else if (CellGroup && CellGroup->spCellConfig && CellGroup->spCellConfig->spCellConfigDedicated) { // this is an initialBWP else if (CellGroup && CellGroup->spCellConfig && CellGroup->spCellConfig->spCellConfigDedicated) { // this is an initialBWP
AssertFatal((bwpd=CellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP)!=NULL, AssertFatal((bwpd=CellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP)!=NULL,
"CellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP is null\n"); "CellGroup->spCellConfig->spCellConfigDedicated->initialDownlinkBWP is null\n");
AssertFatal((ubwpd=CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP)!=NULL,
"CellGroup->spCellConfig->spCellConfigDedicated->uplnikConfig->initialUplinkBWP is null\n");
} }
NR_SearchSpace_t *ss=NULL; NR_SearchSpace_t *ss=NULL;
...@@ -2714,10 +2704,11 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE, ...@@ -2714,10 +2704,11 @@ void get_pdsch_to_harq_feedback(NR_UE_info_t *UE,
} }
} }
else { else {
AssertFatal(ubwpd!=NULL,"ubwpd shouldn't be null here\n"); NR_PUCCH_Config_t *pucch_Config = UE->current_UL_BWP.pucch_Config;
if(ubwpd->pucch_Config->choice.setup->dl_DataToUL_ACK != NULL) { AssertFatal(pucch_Config!=NULL,"pucch_Config shouldn't be null here\n");
if(pucch_Config->dl_DataToUL_ACK != NULL) {
for (int i=0; i<8; i++) { for (int i=0; i<8; i++) {
pdsch_to_harq_feedback[i] = *ubwpd->pucch_Config->choice.setup->dl_DataToUL_ACK->list.array[i]; pdsch_to_harq_feedback[i] = *pucch_Config->dl_DataToUL_ACK->list.array[i];
if(pdsch_to_harq_feedback[i]>*max_fb_time) if(pdsch_to_harq_feedback[i]>*max_fb_time)
*max_fb_time = pdsch_to_harq_feedback[i]; *max_fb_time = pdsch_to_harq_feedback[i];
} }
...@@ -2981,28 +2972,10 @@ void nr_mac_update_timers(module_id_t module_id, ...@@ -2981,28 +2972,10 @@ void nr_mac_update_timers(module_id_t module_id,
create_dl_harq_list(sched_ctrl, pdsch); create_dl_harq_list(sched_ctrl, pdsch);
} }
// If needed, update the Dedicated BWP
if (spCellConfigDedicated->uplinkConfig &&
spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList) {
sched_ctrl->active_ubwp = spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.array[*spCellConfigDedicated->uplinkConfig->firstActiveUplinkBWP_Id - 1];
if (*spCellConfigDedicated->uplinkConfig->firstActiveUplinkBWP_Id != UE->current_UL_BWP.bwp_id) {
LOG_I(NR_MAC, "Changing to UL-BWP %li\n", sched_ctrl->active_ubwp->bwp_Id);
}
}
configure_UE_BWP(RC.nrmac[module_id], scc, sched_ctrl, NULL, UE); configure_UE_BWP(RC.nrmac[module_id], scc, sched_ctrl, NULL, UE);
// Update coreset/searchspace // Update coreset/searchspace
sched_ctrl->maxL = 2;
if (cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig &&
cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup) {
compute_csi_bitlen (cg->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup, UE);
}
NR_pdsch_semi_static_t *ps = &sched_ctrl->pdsch_semi_static; NR_pdsch_semi_static_t *ps = &sched_ctrl->pdsch_semi_static;
const uint8_t layers = set_dl_nrOfLayers(sched_ctrl); const uint8_t layers = set_dl_nrOfLayers(sched_ctrl);
const int tda = get_dl_tda(RC.nrmac[module_id], scc, slot); const int tda = get_dl_tda(RC.nrmac[module_id], scc, slot);
...@@ -3015,28 +2988,14 @@ void nr_mac_update_timers(module_id_t module_id, ...@@ -3015,28 +2988,14 @@ void nr_mac_update_timers(module_id_t module_id,
sched_ctrl, sched_ctrl,
ps); ps);
NR_BWP_Uplink_t *ubwp = sched_ctrl->active_ubwp;
NR_BWP_UplinkDedicated_t *ubwpd = NULL;
if (ubwp) {
ubwpd = sched_ctrl->active_ubwp->bwp_Dedicated;
} else if (cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
(cg->spCellConfig->spCellConfigDedicated->initialDownlinkBWP)) {
ubwpd = cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP;
}
NR_pusch_semi_static_t *ups = &sched_ctrl->pusch_semi_static; NR_pusch_semi_static_t *ups = &sched_ctrl->pusch_semi_static;
const uint8_t num_dmrs_cdm_grps_no_data = (ubwp || ubwpd) ? 1 : 2;
const uint8_t nrOfLayers = 1; const uint8_t nrOfLayers = 1;
const int utda = get_ul_tda(RC.nrmac[module_id], scc, slot); const int utda = get_ul_tda(RC.nrmac[module_id], scc, slot);
nr_set_pusch_semi_static(&UE->current_UL_BWP, nr_set_pusch_semi_static(&UE->current_UL_BWP,
scc, scc,
ubwp,
ubwpd,
utda, utda,
num_dmrs_cdm_grps_no_data,
nrOfLayers, nrOfLayers,
ups); ups);
} }
......
...@@ -80,21 +80,13 @@ static void nr_fill_nfapi_pucch(gNB_MAC_INST *nrmac, ...@@ -80,21 +80,13 @@ static void nr_fill_nfapi_pucch(gNB_MAC_INST *nrmac,
pucch->resource_indicator); pucch->resource_indicator);
NR_COMMON_channels_t * common_ch=nrmac->common_channels; NR_COMMON_channels_t * common_ch=nrmac->common_channels;
NR_ServingCellConfigCommon_t *scc = common_ch->ServingCellConfigCommon; NR_ServingCellConfigCommon_t *scc = common_ch->ServingCellConfigCommon;
NR_CellGroupConfig_t *cg=UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd = cg && cg->spCellConfig && cg->spCellConfig->spCellConfigDedicated && LOG_D(NR_MAC,"%4d.%2d Calling nr_configure_pucch (pucch_Config %p,r_pucch %d) pucch to be scheduled in %4d.%2d\n",
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ? frame,slot,UE->current_UL_BWP.pucch_Config,pucch->r_pucch,pucch->frame,pucch->ul_slot);
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
LOG_D(NR_MAC,"%4d.%2d Calling nr_configure_pucch (ubwpd %p,r_pucch %d) pucch to be scheduled in %4d.%2d\n", nr_configure_pucch(pucch_pdu,
frame,slot,ubwpd,pucch->r_pucch,pucch->frame,pucch->ul_slot);
const NR_SIB1_t *sib1 = common_ch->sib1 ? common_ch->sib1->message.choice.c1->choice.systemInformationBlockType1 : NULL;
nr_configure_pucch(sib1,
pucch_pdu,
scc, scc,
UE, UE,
ubwpd,
pucch->resource_indicator, pucch->resource_indicator,
pucch->csi_bits, pucch->csi_bits,
pucch->dai_c, pucch->dai_c,
...@@ -708,17 +700,7 @@ void nr_csi_meas_reporting(int Mod_idP, ...@@ -708,17 +700,7 @@ void nr_csi_meas_reporting(int Mod_idP,
const NR_CSI_MeasConfig_t *csi_measconfig = CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup; const NR_CSI_MeasConfig_t *csi_measconfig = CellGroup->spCellConfig->spCellConfigDedicated->csi_MeasConfig->choice.setup;
AssertFatal(csi_measconfig->csi_ReportConfigToAddModList->list.count > 0, AssertFatal(csi_measconfig->csi_ReportConfigToAddModList->list.count > 0,
"NO CSI report configuration available"); "NO CSI report configuration available");
NR_PUCCH_Config_t *pucch_Config = NULL; NR_PUCCH_Config_t *pucch_Config = UL_BWP->pucch_Config;
if (sched_ctrl->active_ubwp) {
pucch_Config = sched_ctrl->active_ubwp->bwp_Dedicated->pucch_Config->choice.setup;
} else if (CellGroup &&
CellGroup->spCellConfig &&
CellGroup->spCellConfig->spCellConfigDedicated &&
CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig &&
CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP &&
CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup) {
pucch_Config = CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
}
for (int csi_report_id = 0; csi_report_id < csi_measconfig->csi_ReportConfigToAddModList->list.count; csi_report_id++){ for (int csi_report_id = 0; csi_report_id < csi_measconfig->csi_ReportConfigToAddModList->list.count; csi_report_id++){
NR_CSI_ReportConfig_t *csirep = csi_measconfig->csi_ReportConfigToAddModList->list.array[csi_report_id]; NR_CSI_ReportConfig_t *csirep = csi_measconfig->csi_ReportConfigToAddModList->list.array[csi_report_id];
...@@ -1617,18 +1599,7 @@ int nr_acknack_scheduling(int mod_id, ...@@ -1617,18 +1599,7 @@ int nr_acknack_scheduling(int mod_id,
* later) * later)
* * each UE has dedicated PUCCH Format 0 resources, and we use index 0! */ * * each UE has dedicated PUCCH Format 0 resources, and we use index 0! */
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
NR_CellGroupConfig_t *cg = UE->CellGroup; NR_PUCCH_Config_t *pucch_Config = BWP->pucch_Config;
NR_PUCCH_Config_t *pucch_Config = NULL;
if (sched_ctrl->active_ubwp) {
pucch_Config = sched_ctrl->active_ubwp->bwp_Dedicated->pucch_Config->choice.setup;
} else if (cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP) {
pucch_Config = cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
}
int bwp_start = BWP->BWPStart; int bwp_start = BWP->BWPStart;
int bwp_size = BWP->BWPSize; int bwp_size = BWP->BWPSize;
...@@ -1881,21 +1852,10 @@ void nr_sr_reporting(gNB_MAC_INST *nrmac, frame_t SFN, sub_frame_t slot) ...@@ -1881,21 +1852,10 @@ void nr_sr_reporting(gNB_MAC_INST *nrmac, frame_t SFN, sub_frame_t slot)
NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP; NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP;
const int n_slots_frame = nr_slots_per_frame[BWP->scs]; const int n_slots_frame = nr_slots_per_frame[BWP->scs];
if (sched_ctrl->ul_failure==1) continue; if (sched_ctrl->ul_failure==1) continue;
NR_PUCCH_Config_t *pucch_Config = NULL; NR_PUCCH_Config_t *pucch_Config = BWP->pucch_Config;
if (sched_ctrl->active_ubwp) {
pucch_Config = sched_ctrl->active_ubwp->bwp_Dedicated->pucch_Config->choice.setup;
} else if (UE->CellGroup &&
UE->CellGroup->spCellConfig &&
UE->CellGroup->spCellConfig->spCellConfigDedicated &&
UE->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig &&
UE->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP &&
UE->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup) {
pucch_Config = UE->CellGroup->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP->pucch_Config->choice.setup;
}
else continue; if (!pucch_Config || !pucch_Config->schedulingRequestResourceToAddModList)
if (!pucch_Config->schedulingRequestResourceToAddModList) continue;
continue;
AssertFatal(pucch_Config->schedulingRequestResourceToAddModList->list.count>0,"NO SR configuration available"); AssertFatal(pucch_Config->schedulingRequestResourceToAddModList->list.count>0,"NO SR configuration available");
......
...@@ -822,32 +822,22 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac, ...@@ -822,32 +822,22 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
const int CC_id = 0; const int CC_id = 0;
NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl; NR_UE_sched_ctrl_t *sched_ctrl = &UE->UE_sched_ctrl;
NR_sched_pusch_t *retInfo = &sched_ctrl->ul_harq_processes[harq_pid].sched_pusch; NR_sched_pusch_t *retInfo = &sched_ctrl->ul_harq_processes[harq_pid].sched_pusch;
NR_CellGroupConfig_t *cg = UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd = cg && cg->spCellConfig && cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
int rbStart = 0; // wrt BWP start int rbStart = 0; // wrt BWP start
const uint16_t bwpSize = UE->current_UL_BWP.BWPSize; const uint16_t bwpSize = UE->current_UL_BWP.BWPSize;
const uint8_t nrOfLayers = 1; const uint8_t nrOfLayers = 1;
const uint8_t num_dmrs_cdm_grps_no_data = (sched_ctrl->active_ubwp || ubwpd) ? 1 : 2;
LOG_D(NR_MAC,"retInfo->time_domain_allocation = %d, tda = %d\n", retInfo->time_domain_allocation, tda); LOG_D(NR_MAC,"retInfo->time_domain_allocation = %d, tda = %d\n", retInfo->time_domain_allocation, tda);
LOG_D(NR_MAC,"num_dmrs_cdm_grps_no_data %d, tbs %d\n",num_dmrs_cdm_grps_no_data, retInfo->tb_size); LOG_D(NR_MAC,"tbs %d\n",retInfo->tb_size);
if (tda == retInfo->time_domain_allocation) { if (tda == retInfo->time_domain_allocation) {
/* check whether we need to switch the TDA allocation since tha last /* check whether we need to switch the TDA allocation since tha last
* (re-)transmission */ * (re-)transmission */
NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static; NR_pusch_semi_static_t *ps = &sched_ctrl->pusch_semi_static;
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->nrOfLayers != nrOfLayers || ps->nrOfLayers != nrOfLayers) {
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) {
nr_set_pusch_semi_static(&UE->current_UL_BWP, nr_set_pusch_semi_static(&UE->current_UL_BWP,
scc, scc,
sched_ctrl->active_ubwp,
ubwpd,
tda, tda,
num_dmrs_cdm_grps_no_data,
nrOfLayers, nrOfLayers,
ps); ps);
} }
...@@ -865,10 +855,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac, ...@@ -865,10 +855,7 @@ static bool allocate_ul_retransmission(gNB_MAC_INST *nrmac,
NR_pusch_semi_static_t temp_ps; NR_pusch_semi_static_t temp_ps;
nr_set_pusch_semi_static(&UE->current_UL_BWP, nr_set_pusch_semi_static(&UE->current_UL_BWP,
scc, scc,
sched_ctrl->active_ubwp,
ubwpd,
tda, tda,
num_dmrs_cdm_grps_no_data,
nrOfLayers, nrOfLayers,
&temp_ps); &temp_ps);
/* the retransmission will use a different time domain allocation, check /* the retransmission will use a different time domain allocation, check
...@@ -1016,10 +1003,6 @@ void pf_ul(module_id_t module_id, ...@@ -1016,10 +1003,6 @@ void pf_ul(module_id_t module_id,
NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP; NR_UE_UL_BWP_t *BWP = &UE->current_UL_BWP;
int rbStart = 0; // wrt BWP start int rbStart = 0; // wrt BWP start
NR_CellGroupConfig_t *cg = UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd = cg && cg->spCellConfig && cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
const uint16_t bwpSize = BWP->BWPSize; const uint16_t bwpSize = BWP->BWPSize;
NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch; NR_sched_pusch_t *sched_pusch = &sched_ctrl->sched_pusch;
...@@ -1106,17 +1089,12 @@ void pf_ul(module_id_t module_id, ...@@ -1106,17 +1089,12 @@ void pf_ul(module_id_t module_id,
* every TTI if we can save it, so check whether TDA, or * every TTI if we can save it, so check whether TDA, or
* num_dmrs_cdm_grps_no_data has changed and only then recompute */ * num_dmrs_cdm_grps_no_data has changed and only then recompute */
const uint8_t nrOfLayers = 1; const uint8_t nrOfLayers = 1;
const uint8_t num_dmrs_cdm_grps_no_data = (sched_ctrl->active_ubwp || ubwpd) ? 1 : 2;
const int tda = get_ul_tda(nrmac, scc, sched_pusch->slot); const int tda = get_ul_tda(nrmac, scc, sched_pusch->slot);
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->nrOfLayers != nrOfLayers || ps->nrOfLayers != nrOfLayers) {
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) {
nr_set_pusch_semi_static(BWP, nr_set_pusch_semi_static(BWP,
scc, scc,
sched_ctrl->active_ubwp,
ubwpd,
tda, tda,
num_dmrs_cdm_grps_no_data,
nrOfLayers, nrOfLayers,
ps); ps);
} }
...@@ -1209,13 +1187,7 @@ void pf_ul(module_id_t module_id, ...@@ -1209,13 +1187,7 @@ void pf_ul(module_id_t module_id,
else LOG_D(NR_MAC, "%4d.%2d free CCE for UL DCI UE %04x\n",frame,slot, iterator->UE->rnti); else LOG_D(NR_MAC, "%4d.%2d free CCE for UL DCI UE %04x\n",frame,slot, iterator->UE->rnti);
NR_UE_UL_BWP_t *BWP = &iterator->UE->current_UL_BWP; NR_UE_UL_BWP_t *BWP = &iterator->UE->current_UL_BWP;
NR_CellGroupConfig_t *cg = iterator->UE->CellGroup;
NR_BWP_UplinkDedicated_t *ubwpd = cg && cg->spCellConfig && cg->spCellConfig->spCellConfigDedicated
&& cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
int rbStart = sched_ctrl->active_ubwp ? BWP->BWPStart : 0;
const uint16_t bwpSize = BWP->BWPSize; const uint16_t bwpSize = BWP->BWPSize;
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;
...@@ -1225,22 +1197,18 @@ void pf_ul(module_id_t module_id, ...@@ -1225,22 +1197,18 @@ void pf_ul(module_id_t module_id,
* every TTI if we can save it, so check whether TDA, or * every TTI if we can save it, so check whether TDA, or
* num_dmrs_cdm_grps_no_data has changed and only then recompute */ * num_dmrs_cdm_grps_no_data has changed and only then recompute */
const uint8_t nrOfLayers = 1; const uint8_t nrOfLayers = 1;
const uint8_t num_dmrs_cdm_grps_no_data = (sched_ctrl->active_ubwp || ubwpd) ? 1 : 2;
const int tda = get_ul_tda(nrmac, scc, sched_pusch->slot); const int tda = get_ul_tda(nrmac, scc, sched_pusch->slot);
if (ps->time_domain_allocation != tda if (ps->time_domain_allocation != tda
|| ps->nrOfLayers != nrOfLayers || ps->nrOfLayers != nrOfLayers) {
|| ps->num_dmrs_cdm_grps_no_data != num_dmrs_cdm_grps_no_data) {
nr_set_pusch_semi_static(BWP, nr_set_pusch_semi_static(BWP,
scc, scc,
sched_ctrl->active_ubwp,
ubwpd,
tda, tda,
num_dmrs_cdm_grps_no_data,
nrOfLayers, nrOfLayers,
ps); ps);
} }
update_ul_ue_R_Qm(sched_pusch, BWP->pusch_Config, BWP->mcs_table); update_ul_ue_R_Qm(sched_pusch, BWP->pusch_Config, BWP->mcs_table);
int rbStart = 0;
const uint16_t slbitmap = SL_to_bitmap(ps->startSymbolIndex, ps->nrOfSymbols); const uint16_t slbitmap = SL_to_bitmap(ps->startSymbolIndex, ps->nrOfSymbols);
while (rbStart < bwpSize && (rballoc_mask[rbStart] & slbitmap) != slbitmap) while (rbStart < bwpSize && (rballoc_mask[rbStart] & slbitmap) != slbitmap)
rbStart++; rbStart++;
...@@ -1340,7 +1308,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t ...@@ -1340,7 +1308,7 @@ bool nr_fr1_ulsch_preprocessor(module_id_t module_id, frame_t frame, sub_frame_t
is_xlsch_in_slot(nr_mac->ulsch_slot_bitmap[sched_slot / 64], sched_slot); is_xlsch_in_slot(nr_mac->ulsch_slot_bitmap[sched_slot / 64], sched_slot);
// FIXME: Avoid mixed slots for initialUplinkBWP // FIXME: Avoid mixed slots for initialUplinkBWP
if (sched_ctrl->active_ubwp==NULL && is_mixed_slot) if (BWP->bwp_id==0 && is_mixed_slot)
return false; return false;
// Avoid slots with the SRS // Avoid slots with the SRS
...@@ -1473,10 +1441,6 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot) ...@@ -1473,10 +1441,6 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
NR_CellGroupConfig_t *cg = UE->CellGroup; NR_CellGroupConfig_t *cg = UE->CellGroup;
NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP; NR_UE_UL_BWP_t *current_BWP = &UE->current_UL_BWP;
NR_BWP_UplinkDedicated_t *ubwpd = cg && cg->spCellConfig && cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig ?
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->initialUplinkBWP : NULL;
UE->mac_stats.ul.current_bytes = 0; UE->mac_stats.ul.current_bytes = 0;
/* dynamic PUSCH values (RB alloc, MCS, hence R, Qm, TBS) that change in /* dynamic PUSCH values (RB alloc, MCS, hence R, Qm, TBS) that change in
...@@ -1744,24 +1708,13 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot) ...@@ -1744,24 +1708,13 @@ void nr_schedule_ulsch(module_id_t module_id, frame_t frame, sub_frame_t slot)
dci_pdu_rel15_t uldci_payload; dci_pdu_rel15_t uldci_payload;
memset(&uldci_payload, 0, sizeof(uldci_payload)); memset(&uldci_payload, 0, sizeof(uldci_payload));
int n_ubwp=1;
if (cg &&
cg->spCellConfig &&
cg->spCellConfig->spCellConfigDedicated &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig &&
cg->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList) {
n_ubwp = cg->spCellConfig->spCellConfigDedicated->uplinkConfig->uplinkBWP_ToAddModList->list.count;
}
config_uldci(sib1, config_uldci(sib1,
sched_ctrl->active_ubwp,
ubwpd,
scc, scc,
pusch_pdu, pusch_pdu,
&uldci_payload, &uldci_payload,
ps->time_domain_allocation, ps->time_domain_allocation,
UE->UE_sched_ctrl.tpc0, UE->UE_sched_ctrl.tpc0,
n_ubwp,
current_BWP); current_BWP);
fill_dci_pdu_rel15(scc, fill_dci_pdu_rel15(scc,
cg, cg,
......
...@@ -134,7 +134,6 @@ int nr_allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t slo ...@@ -134,7 +134,6 @@ int nr_allocate_CCEs(int module_idP, int CC_idP, frame_t frameP, sub_frame_t slo
void nr_get_Msg3alloc(module_id_t module_id, void nr_get_Msg3alloc(module_id_t module_id,
int CC_id, int CC_id,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc,
NR_BWP_Uplink_t *ubwp,
sub_frame_t current_subframe, sub_frame_t current_subframe,
frame_t current_frame, frame_t current_frame,
NR_RA_t *ra, NR_RA_t *ra,
...@@ -192,14 +191,11 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id, ...@@ -192,14 +191,11 @@ void handle_nr_uci_pucch_2_3_4(module_id_t mod_id,
void config_uldci(const NR_SIB1_t *sib1, void config_uldci(const NR_SIB1_t *sib1,
const NR_BWP_Uplink_t *ubwp,
const NR_BWP_UplinkDedicated_t *ubwpd,
const NR_ServingCellConfigCommon_t *scc, const NR_ServingCellConfigCommon_t *scc,
const nfapi_nr_pusch_pdu_t *pusch_pdu, const nfapi_nr_pusch_pdu_t *pusch_pdu,
dci_pdu_rel15_t *dci_pdu_rel15, dci_pdu_rel15_t *dci_pdu_rel15,
int time_domain_assignment, int time_domain_assignment,
uint8_t tpc, uint8_t tpc,
int n_ubwp,
NR_UE_UL_BWP_t *BWP); NR_UE_UL_BWP_t *BWP);
void nr_schedule_pucch(gNB_MAC_INST* nrmac, void nr_schedule_pucch(gNB_MAC_INST* nrmac,
...@@ -249,15 +245,12 @@ int nr_is_dci_opportunity(nfapi_nr_search_space_t search_space, ...@@ -249,15 +245,12 @@ int nr_is_dci_opportunity(nfapi_nr_search_space_t search_space,
*/ */
int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset, int nr_get_pucch_resource(NR_ControlResourceSet_t *coreset,
NR_BWP_Uplink_t *bwp, NR_PUCCH_Config_t *pucch_Config,
NR_BWP_UplinkDedicated_t *bwpd,
int CCEIndex); int CCEIndex);
void nr_configure_pucch(const NR_SIB1_t *sib1, void nr_configure_pucch(nfapi_nr_pucch_pdu_t* pucch_pdu,
nfapi_nr_pucch_pdu_t* pucch_pdu,
NR_ServingCellConfigCommon_t *scc, NR_ServingCellConfigCommon_t *scc,
NR_UE_info_t* UE, NR_UE_info_t* UE,
NR_BWP_UplinkDedicated_t *bwpd,
uint8_t pucch_resource, uint8_t pucch_resource,
uint16_t O_csi, uint16_t O_csi,
uint16_t O_ack, uint16_t O_ack,
...@@ -346,10 +339,7 @@ void nr_set_pdsch_semi_static(const NR_UE_DL_BWP_t *BWP, ...@@ -346,10 +339,7 @@ void nr_set_pdsch_semi_static(const NR_UE_DL_BWP_t *BWP,
void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP, void nr_set_pusch_semi_static(const NR_UE_UL_BWP_t *BWP,
const NR_ServingCellConfigCommon_t *scc, const NR_ServingCellConfigCommon_t *scc,
const NR_BWP_Uplink_t *ubwp,
const NR_BWP_UplinkDedicated_t *ubwpd,
int tda, int tda,
uint8_t num_dmrs_cdm_grps_no_data,
uint8_t nrOfLayers, uint8_t nrOfLayers,
NR_pusch_semi_static_t *ps); NR_pusch_semi_static_t *ps);
......
...@@ -105,12 +105,15 @@ typedef struct NR_UE_DL_BWP { ...@@ -105,12 +105,15 @@ typedef struct NR_UE_DL_BWP {
typedef struct NR_UE_UL_BWP { typedef struct NR_UE_UL_BWP {
NR_BWP_Id_t bwp_id; NR_BWP_Id_t bwp_id;
int n_ul_bwp;
int scs; int scs;
long *cyclicprefix; long *cyclicprefix;
uint16_t BWPSize; uint16_t BWPSize;
uint16_t BWPStart; uint16_t BWPStart;
NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList; NR_PUSCH_TimeDomainResourceAllocationList_t *tdaList;
NR_PUSCH_Config_t *pusch_Config; NR_PUSCH_Config_t *pusch_Config;
NR_PUCCH_Config_t *pucch_Config;
NR_PUCCH_ConfigCommon_t *pucch_ConfigCommon;
uint8_t transform_precoding; uint8_t transform_precoding;
uint8_t mcs_table; uint8_t mcs_table;
nr_dci_format_t dci_format; nr_dci_format_t dci_format;
...@@ -581,9 +584,6 @@ typedef struct NR_UE_ul_harq { ...@@ -581,9 +584,6 @@ typedef struct NR_UE_ul_harq {
/*! \brief scheduling control information set through an API */ /*! \brief scheduling control information set through an API */
#define MAX_CSI_REPORTS 48 #define MAX_CSI_REPORTS 48
typedef struct { typedef struct {
/// the currently active BWP in UL
NR_BWP_Uplink_t *active_ubwp;
/// the next active BWP ID in DL /// the next active BWP ID in DL
NR_BWP_Id_t next_dl_bwp_id; NR_BWP_Id_t next_dl_bwp_id;
/// the next active BWP ID in UL /// the next active BWP ID in UL
...@@ -598,8 +598,6 @@ typedef struct { ...@@ -598,8 +598,6 @@ typedef struct {
/// corresponding to the sched_pusch/sched_pdsch structures below /// corresponding to the sched_pusch/sched_pdsch structures below
int cce_index; int cce_index;
uint8_t aggregation_level; uint8_t aggregation_level;
/// maximum aggregation level for UE, can be used to select level
int maxL;
/// PUCCH scheduling information. Array of two: HARQ+SR in the first field, /// PUCCH scheduling information. Array of two: HARQ+SR in the first field,
/// CSI in second. This order is important for nr_acknack_scheduling()! /// CSI in second. This order is important for nr_acknack_scheduling()!
NR_sched_pucch_t sched_pucch[2]; NR_sched_pucch_t sched_pucch[2];
......
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