Commit 072567e5 authored by Marwan Hammouda's avatar Marwan Hammouda

HARQ32 enabled in conf files and also SA mode

parent 9c01fe12
......@@ -157,6 +157,8 @@
#define GNB_CONFIG_STRING_SCS_ULBWP3 "ul_bwp3_subcarrierSpacing"
#define GNB_CONFIG_STRING_SCS_ULBWP4 "ul_bwp4_subcarrierSpacing"
#define GNB_CONFIG_STRING_FIRSTACTIVEULBWP_ID "firstActiveUplinkBWP-Id"
#define GNB_CONFIG_STRING_NUM_DL_HARQ_PROCESSES "nrofHARQ-ProcessesForPDSCH"
#define GNB_CONFIG_STRING_NUM_UL_HARQ_PROCESSES "nrofHARQ-ProcessesForPUSCH"
/*--------------------------------------------------------------------------------------------------------------------*/
......@@ -280,6 +282,8 @@
{GNB_CONFIG_STRING_LOCATIONANDBANDWIDTH_ULBWP2,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[1]->bwp_Common->genericParameters.locationAndBandwidth,.defint64val=0,TYPE_INT64,0}, \
{GNB_CONFIG_STRING_LOCATIONANDBANDWIDTH_ULBWP3,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[2]->bwp_Common->genericParameters.locationAndBandwidth,.defint64val=0,TYPE_INT64,0}, \
{GNB_CONFIG_STRING_LOCATIONANDBANDWIDTH_ULBWP4,NULL,0,.i64ptr=&scd->uplinkConfig->uplinkBWP_ToAddModList->list.array[3]->bwp_Common->genericParameters.locationAndBandwidth,.defint64val=0,TYPE_INT64,0}, \
{GNB_CONFIG_STRING_DEFAULTDLBWP_ID,NULL,0,.i64ptr=scd->defaultDownlinkBWP_Id,.defint64val=0,TYPE_INT64,0}}
{GNB_CONFIG_STRING_DEFAULTDLBWP_ID,NULL,0,.i64ptr=scd->defaultDownlinkBWP_Id,.defint64val=0,TYPE_INT64,0}, \
{GNB_CONFIG_STRING_NUM_DL_HARQ_PROCESSES,NULL,0,.i64ptr=scd->pdsch_ServingCellConfig->choice.setup->nrofHARQ_ProcessesForPDSCH,.defint64val=16,TYPE_INT64,0}, \
{GNB_CONFIG_STRING_NUM_UL_HARQ_PROCESSES,NULL,0,.i64ptr=scd->uplinkConfig->pusch_ServingCellConfig->choice.setup->ext3->nrofHARQ_ProcessesForPUSCH_r17,.defint64val=16,TYPE_INT64,0}}
#endif
......@@ -535,8 +535,70 @@ void prepare_scd(NR_ServingCellConfig_t *scd) {
asn1cSeqAdd(&scd->uplinkConfig->uplinkBWP_ToAddModList->list,ubwp);
}
scd->pdsch_ServingCellConfig = calloc(1, sizeof(*scd->pdsch_ServingCellConfig));
NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig = calloc(1, sizeof(*pdsch_servingcellconfig));
scd->pdsch_ServingCellConfig->present = NR_SetupRelease_PDSCH_ServingCellConfig_PR_setup;
scd->pdsch_ServingCellConfig->choice.setup = pdsch_servingcellconfig;
pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = calloc(1, sizeof(*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH));
scd->uplinkConfig->pusch_ServingCellConfig = calloc(1, sizeof(*scd->uplinkConfig->pusch_ServingCellConfig));
NR_PUSCH_ServingCellConfig_t *pusch_scc = calloc(1, sizeof(*pusch_scc));
scd->uplinkConfig->pusch_ServingCellConfig->present = NR_SetupRelease_PUSCH_ServingCellConfig_PR_setup;
scd->uplinkConfig->pusch_ServingCellConfig->choice.setup = pusch_scc;
pusch_scc->ext3 = calloc(1, sizeof(*pusch_scc->ext3));
pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17 = calloc(1, sizeof(*pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17));
}
void fix_harq_cfg(NR_PDSCH_ServingCellConfig_t *pdsch_servingcellconfig,
NR_PUSCH_ServingCellConfig_t *pusch_scc)
{
int num_dlharq = *pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH;
LOG_I(NR_RRC,"Configured value dlharq:%d\n", num_dlharq);
switch (num_dlharq) {
case 2:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n2;
break;
case 4:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n4;
break;
case 6:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n6;
break;
case 10:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n10;
break;
case 12:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n12;
break;
case 16:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16;
break;
case 32:
*pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH = NR_PDSCH_ServingCellConfig__nrofHARQ_ProcessesForPDSCH_n16;
pdsch_servingcellconfig->ext3 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3));
pdsch_servingcellconfig->ext3->nrofHARQ_ProcessesForPDSCH_v1700 = calloc(1, sizeof(*pdsch_servingcellconfig->ext3->nrofHARQ_ProcessesForPDSCH_v1700));
*pdsch_servingcellconfig->ext3->nrofHARQ_ProcessesForPDSCH_v1700 = NR_PDSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPDSCH_v1700_n32;
break;
default:
//num dl harqprocesses = 8 if IEs nrofHARQ_ProcessesForPDSCH and
//nrofHARQ_ProcessesForPDSCH_v1700 are not present
free_and_zero(pdsch_servingcellconfig->nrofHARQ_ProcessesForPDSCH);
break;
}
int num_ulharq = *pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17;
if (num_ulharq == 32) {
*pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17 =
NR_PUSCH_ServingCellConfig__ext3__nrofHARQ_ProcessesForPUSCH_r17_n32;
} else {
//If the IE is not present number of ul harq processes is 16
free_and_zero(pusch_scc->ext3->nrofHARQ_ProcessesForPUSCH_r17);
free_and_zero(pusch_scc->ext3);
}
}
/* This function checks dedicated serving cell configuration and performs fixes as needed */
void fix_scd(NR_ServingCellConfig_t *scd) {
......@@ -645,6 +707,10 @@ void fix_scd(NR_ServingCellConfig_t *scd) {
}
}
//SEt correct IE values based on harq values configured.
fix_harq_cfg(scd->pdsch_ServingCellConfig->choice.setup,
scd->uplinkConfig->pusch_ServingCellConfig->choice.setup);
}
void RCconfig_nr_prs(void)
......
......@@ -2348,19 +2348,7 @@ NR_UE_info_t *add_new_nr_ue(gNB_MAC_INST *nr_mac, rnti_t rntiP, NR_CellGroupConf
// pdsch_servingcellconfig == NULL in SA -> will create default (8) number of HARQ processes
create_dl_harq_list(sched_ctrl, dl_bwp->pdsch_servingcellconfig);
int nrofHARQ = 16;
if (ul_bwp && ul_bwp->pusch_servingcellconfig)
nrofHARQ = get_nrofHARQ_ProcessesForPUSCH(ul_bwp->pusch_servingcellconfig->ext3);
LOG_D(NR_MAC,"Num UL HARQ: %d\n",nrofHARQ);
// add all available UL HARQ processes for this UE
// nb of ul harq processes not configurable
create_nr_list(&sched_ctrl->available_ul_harq, nrofHARQ);
for (int harq = 0; harq < nrofHARQ; harq++)
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
create_nr_list(&sched_ctrl->feedback_ul_harq, nrofHARQ);
create_nr_list(&sched_ctrl->retrans_ul_harq, nrofHARQ);
create_ul_harq_list(sched_ctrl, (ul_bwp ? ul_bwp->pusch_servingcellconfig : NULL));
reset_srs_stats(UE);
......@@ -2410,6 +2398,35 @@ void set_sched_pucch_list(NR_UE_sched_ctrl_t *sched_ctrl,
}
}
void create_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl,
const NR_PUSCH_ServingCellConfig_t *pusch) {
int nrofHARQ = pusch ? get_nrofHARQ_ProcessesForPUSCH(pusch->ext3) : 16;
LOG_I(NR_MAC,"Num UL HARQ:%d\n",nrofHARQ);
if (sched_ctrl->available_ul_harq.len == 0) {
// add all available UL HARQ processes for this UE
// nb of ul harq processes not configurable
create_nr_list(&sched_ctrl->available_ul_harq, nrofHARQ);
for (int harq = 0; harq < nrofHARQ; harq++)
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
create_nr_list(&sched_ctrl->feedback_ul_harq, nrofHARQ);
create_nr_list(&sched_ctrl->retrans_ul_harq, nrofHARQ);
} else if (sched_ctrl->available_ul_harq.len == nrofHARQ) {
LOG_D(NR_MAC, "nrofHARQ %d already configured\n", nrofHARQ);
} else {
const int old_nrofHARQ = sched_ctrl->available_ul_harq.len;
AssertFatal(nrofHARQ > old_nrofHARQ,
"cannot resize HARQ list to be smaller (nrofHARQ %d, old_nrofHARQ %d)\n",
nrofHARQ, old_nrofHARQ);
resize_nr_list(&sched_ctrl->available_ul_harq, nrofHARQ);
for (int harq = old_nrofHARQ; harq < nrofHARQ; harq++)
add_tail_nr_list(&sched_ctrl->available_ul_harq, harq);
resize_nr_list(&sched_ctrl->feedback_ul_harq, nrofHARQ);
resize_nr_list(&sched_ctrl->retrans_ul_harq, nrofHARQ);
}
}
void create_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl,
const NR_PDSCH_ServingCellConfig_t *pdsch) {
const int nrofHARQ = pdsch && pdsch->nrofHARQ_ProcessesForPDSCH ?
......@@ -2832,6 +2849,7 @@ void nr_mac_update_timers(module_id_t module_id,
if (get_softmodem_params()->sa) {
// add all available DL HARQ processes for this UE in SA
create_dl_harq_list(sched_ctrl, UE->current_DL_BWP.pdsch_servingcellconfig);
create_ul_harq_list(sched_ctrl, UE->current_UL_BWP.pusch_servingcellconfig);
}
}
}
......
......@@ -366,6 +366,9 @@ void nr_rx_sdu(const module_id_t gnb_mod_idP,
void create_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl,
const NR_PDSCH_ServingCellConfig_t *pdsch);
void create_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl,
const NR_PUSCH_ServingCellConfig_t *pusch);
void reset_dl_harq_list(NR_UE_sched_ctrl_t *sched_ctrl);
void reset_ul_harq_list(NR_UE_sched_ctrl_t *sched_ctrl);
......
This diff is collapsed.
......@@ -151,6 +151,19 @@ gNBs =
);
# Dedicated Serving Cell Configuration
servingCellConfigDedicated = (
{
nrofHARQ-ProcessesForPDSCH = 32;
nrofHARQ-ProcessesForPUSCH = 32;
}
);
# ------- SCTP definitions
SCTP :
{
......
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