Commit a3d3bf42 authored by Robert Schmidt's avatar Robert Schmidt

Separate CCE allocation, MCS, RB Alloc in UL sched

parent cb6e23b2
...@@ -502,6 +502,33 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -502,6 +502,33 @@ void nr_schedule_ulsch(module_id_t module_id,
const int slot_idx = (slot + K2) % num_slots_per_tdd; const int slot_idx = (slot + K2) % num_slots_per_tdd;
if (is_xlsch_in_slot(ulsch_in_slot_bitmap, slot_idx) if (is_xlsch_in_slot(ulsch_in_slot_bitmap, slot_idx)
&& (!get_softmodem_params()->phy_test || slot_idx == 8)) { && (!get_softmodem_params()->phy_test || slot_idx == 8)) {
const int target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific;
NR_SearchSpace_t *ss = get_searchspace(bwp, target_ss);
uint8_t nr_of_candidates, aggregation_level;
find_aggregation_candidates(&aggregation_level, &nr_of_candidates, ss);
NR_ControlResourceSet_t *coreset = get_coreset(bwp, ss, 1 /* dedicated */);
const int cid = coreset->controlResourceSetId;
const uint16_t Y = UE_info->Y[UE_id][cid][nr_mac->current_slot];
const int m = UE_info->num_pdcch_cand[UE_id][cid];
int CCEIndex = allocate_nr_CCEs(nr_mac,
bwp,
coreset,
aggregation_level,
Y,
m,
nr_of_candidates);
if (CCEIndex < 0) {
LOG_E(MAC, "%s(): CCE list not empty, couldn't schedule PUSCH\n", __func__);
return;
}
UE_info->num_pdcch_cand[UE_id][cid]++;
const uint8_t mcs = 9;
const uint16_t rbStart = 0;
const uint16_t rbSize = get_softmodem_params()->phy_test ?
50 : NRRIV2BW(ubwp->bwp_Common->genericParameters.locationAndBandwidth,275);
nfapi_nr_ul_dci_request_t *UL_dci_req = &RC.nrmac[module_id]->UL_dci_req[0]; nfapi_nr_ul_dci_request_t *UL_dci_req = &RC.nrmac[module_id]->UL_dci_req[0];
UL_dci_req->SFN = frame; UL_dci_req->SFN = frame;
UL_dci_req->Slot = slot; UL_dci_req->Slot = slot;
...@@ -519,9 +546,6 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -519,9 +546,6 @@ void nr_schedule_ulsch(module_id_t module_id,
//UL_tti_req = &nr_mac->UL_tti_req[CC_id]; //UL_tti_req = &nr_mac->UL_tti_req[CC_id];
const int target_ss = NR_SearchSpace__searchSpaceType_PR_ue_Specific;
NR_SearchSpace_t *ss = get_searchspace(bwp, target_ss);
int dci_formats[2]; int dci_formats[2];
if (ss->searchSpaceType->choice.ue_Specific->dci_Formats) if (ss->searchSpaceType->choice.ue_Specific->dci_Formats)
dci_formats[0] = NR_UL_DCI_FORMAT_0_1; dci_formats[0] = NR_UL_DCI_FORMAT_0_1;
...@@ -560,7 +584,7 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -560,7 +584,7 @@ void nr_schedule_ulsch(module_id_t module_id,
else else
pusch_pdu->data_scrambling_id = *scc->physCellId; pusch_pdu->data_scrambling_id = *scc->physCellId;
pusch_pdu->mcs_index = 9; pusch_pdu->mcs_index = mcs;
if (pusch_pdu->transform_precoding) if (pusch_pdu->transform_precoding)
pusch_pdu->mcs_table = get_pusch_mcs_table(pusch_Config->mcs_Table, pusch_pdu->mcs_table = get_pusch_mcs_table(pusch_Config->mcs_Table,
0, 0,
...@@ -592,12 +616,8 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -592,12 +616,8 @@ void nr_schedule_ulsch(module_id_t module_id,
AssertFatal(pusch_Config->resourceAllocation == NR_PUSCH_Config__resourceAllocation_resourceAllocationType1, AssertFatal(pusch_Config->resourceAllocation == NR_PUSCH_Config__resourceAllocation_resourceAllocationType1,
"Only frequency resource allocation type 1 is currently supported\n"); "Only frequency resource allocation type 1 is currently supported\n");
pusch_pdu->resource_alloc = 1; //type 1 pusch_pdu->resource_alloc = 1; //type 1
pusch_pdu->rb_start = 0; pusch_pdu->rb_start = rbStart;
if (get_softmodem_params()->phy_test) pusch_pdu->rb_size = rbSize;
pusch_pdu->rb_size = 50;
else
pusch_pdu->rb_size = pusch_pdu->bwp_size;
pusch_pdu->vrb_to_prb_mapping = 0; pusch_pdu->vrb_to_prb_mapping = 0;
if (pusch_Config->frequencyHopping==NULL) if (pusch_Config->frequencyHopping==NULL)
...@@ -738,29 +758,8 @@ void nr_schedule_ulsch(module_id_t module_id, ...@@ -738,29 +758,8 @@ void nr_schedule_ulsch(module_id_t module_id,
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &ul_dci_request_pdu->pdcch_pdu.pdcch_pdu_rel15; nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &ul_dci_request_pdu->pdcch_pdu.pdcch_pdu_rel15;
UL_dci_req->numPdus+=1; UL_dci_req->numPdus+=1;
LOG_D(MAC,"Configuring ULDCI/PDCCH in %d.%d\n", frame,slot); LOG_D(MAC,"Configuring ULDCI/PDCCH in %d.%d\n", frame,slot);
uint8_t nr_of_candidates, aggregation_level;
find_aggregation_candidates(&aggregation_level, &nr_of_candidates, ss);
NR_ControlResourceSet_t *coreset = get_coreset(bwp, ss, 1 /* dedicated */);
int cid = coreset->controlResourceSetId;
const uint16_t Y = UE_info->Y[UE_id][cid][slot];
const int m = UE_info->num_pdcch_cand[UE_id][cid];
int CCEIndex = allocate_nr_CCEs(nr_mac,
bwp,
coreset,
aggregation_level,
Y,
m,
nr_of_candidates);
if (CCEIndex < 0) {
LOG_E(MAC, "%s(): CCE list not empty, couldn't schedule PUSCH\n", __func__);
pusch_sched->active = false;
return;
}
UE_info->num_pdcch_cand[UE_id][cid]++;
nr_configure_pdcch(nr_mac, nr_configure_pdcch(nr_mac,
pdcch_pdu_rel15, pdcch_pdu_rel15,
UE_info->rnti[UE_id], UE_info->rnti[UE_id],
......
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