Remove mbsfn_flag from schedule_ue_spec(), simplify pre_processor interface
This commit is contained in:
@@ -421,7 +421,8 @@ set_ul_DAI(int module_idP,
|
|||||||
void
|
void
|
||||||
schedule_dlsch(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, int *mbsfn_flag) {
|
schedule_dlsch(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP, int *mbsfn_flag) {
|
||||||
for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++) {
|
for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++) {
|
||||||
schedule_ue_spec(module_idP, CC_id, frameP, subframeP, mbsfn_flag);
|
if (mbsfn_flag[CC_id] == 0)
|
||||||
|
schedule_ue_spec(module_idP, CC_id, frameP, subframeP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,8 +448,7 @@ void
|
|||||||
schedule_ue_spec(module_id_t module_idP,
|
schedule_ue_spec(module_id_t module_idP,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP,
|
sub_frame_t subframeP)
|
||||||
int *mbsfn_flag)
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
int UE_id;
|
int UE_id;
|
||||||
@@ -569,13 +569,10 @@ schedule_ue_spec(module_id_t module_idP,
|
|||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,
|
||||||
VCD_FUNCTION_IN);
|
VCD_FUNCTION_IN);
|
||||||
start_meas(&eNB->schedule_dlsch_preprocessor);
|
start_meas(&eNB->schedule_dlsch_preprocessor);
|
||||||
memset(eNB->slice_info.rballoc_sub, 0, sizeof(eNB->slice_info.rballoc_sub));
|
|
||||||
dlsch_scheduler_pre_processor(module_idP,
|
dlsch_scheduler_pre_processor(module_idP,
|
||||||
0, //slice_idxP,
|
CC_id,
|
||||||
frameP,
|
frameP,
|
||||||
subframeP,
|
subframeP);
|
||||||
mbsfn_flag,
|
|
||||||
eNB->slice_info.rballoc_sub);
|
|
||||||
stop_meas(&eNB->schedule_dlsch_preprocessor);
|
stop_meas(&eNB->schedule_dlsch_preprocessor);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PREPROCESSOR,
|
||||||
VCD_FUNCTION_OUT);
|
VCD_FUNCTION_OUT);
|
||||||
@@ -597,9 +594,6 @@ schedule_ue_spec(module_id_t module_idP,
|
|||||||
CC_id);
|
CC_id);
|
||||||
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
|
||||||
|
|
||||||
//if (mbsfn_flag[CC_id] > 0)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
for (UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
for (UE_id = UE_list->head; UE_id >= 0; UE_id = UE_list->next[UE_id]) {
|
||||||
LOG_D(MAC, "doing schedule_ue_spec for CC_id %d UE %d\n",
|
LOG_D(MAC, "doing schedule_ue_spec for CC_id %d UE %d\n",
|
||||||
CC_id,
|
CC_id,
|
||||||
@@ -1627,8 +1621,7 @@ schedule_ue_spec(module_id_t module_idP,
|
|||||||
|
|
||||||
fill_DLSCH_dci(module_idP,
|
fill_DLSCH_dci(module_idP,
|
||||||
frameP,
|
frameP,
|
||||||
subframeP,
|
subframeP);
|
||||||
mbsfn_flag);
|
|
||||||
stop_meas(&eNB->schedule_dlsch);
|
stop_meas(&eNB->schedule_dlsch);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_SCHEDULE_DLSCH,
|
||||||
VCD_FUNCTION_OUT);
|
VCD_FUNCTION_OUT);
|
||||||
@@ -2520,8 +2513,7 @@ schedule_ue_spec_br(module_id_t module_idP,
|
|||||||
void
|
void
|
||||||
fill_DLSCH_dci(module_id_t module_idP,
|
fill_DLSCH_dci(module_id_t module_idP,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP,
|
sub_frame_t subframeP)
|
||||||
int *mbsfn_flagP)
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
// loop over all allocated UEs and compute frequency allocations for PDSCH
|
// loop over all allocated UEs and compute frequency allocations for PDSCH
|
||||||
@@ -2550,9 +2542,6 @@ fill_DLSCH_dci(module_id_t module_idP,
|
|||||||
LOG_D(MAC, "Doing fill DCI for CC_id %d\n",
|
LOG_D(MAC, "Doing fill DCI for CC_id %d\n",
|
||||||
CC_id);
|
CC_id);
|
||||||
|
|
||||||
if (mbsfn_flagP[CC_id] > 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
cc = &eNB->common_channels[CC_id];
|
cc = &eNB->common_channels[CC_id];
|
||||||
N_RBG = to_rbg(cc->mib->message.dl_Bandwidth);
|
N_RBG = to_rbg(cc->mib->message.dl_Bandwidth);
|
||||||
N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
|
N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
|
||||||
|
|||||||
@@ -619,8 +619,7 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t Mod_id,
|
|||||||
min_rb_unit,
|
min_rb_unit,
|
||||||
(uint16_t (*)[MAX_MOBILES_PER_ENB])nb_rbs_required,
|
(uint16_t (*)[MAX_MOBILES_PER_ENB])nb_rbs_required,
|
||||||
rballoc_sub,
|
rballoc_sub,
|
||||||
MIMO_mode_indicator,
|
MIMO_mode_indicator);
|
||||||
mbsfn_flag);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -142,9 +142,8 @@ void schedule_ulsch_rnti_emtc(module_id_t module_idP,
|
|||||||
@param Mod_id Instance of eNB
|
@param Mod_id Instance of eNB
|
||||||
@param frame Frame index
|
@param frame Frame index
|
||||||
@param subframe Index of subframe
|
@param subframe Index of subframe
|
||||||
@param mbsfn_flag Indicates that this subframe is for MCH/MCCH
|
|
||||||
*/
|
*/
|
||||||
void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP,sub_frame_t subframe,int *mbsfn_flag);
|
void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP,sub_frame_t subframe);
|
||||||
|
|
||||||
/** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies
|
/** \brief UE specific DLSCH scheduling. Retrieves next ue to be schduled from round-robin scheduler and gets the appropriate harq_pid for the subframe from PHY. If the process is active and requires a retransmission, it schedules the retransmission with the same PRB count and MCS as the first transmission. Otherwise it consults RLC for DCCH/DTCH SDUs (status with maximum number of available PRBS), builds the MAC header (timing advance sent by default) and copies
|
||||||
@param Mod_id Instance ID of eNB
|
@param Mod_id Instance ID of eNB
|
||||||
@@ -159,8 +158,7 @@ void schedule_dlsch(module_id_t module_idP, frame_t frameP,
|
|||||||
void schedule_ue_spec(module_id_t module_idP,
|
void schedule_ue_spec(module_id_t module_idP,
|
||||||
int CC_id,
|
int CC_id,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframe,
|
sub_frame_t subframe);
|
||||||
int *mbsfn_flag);
|
|
||||||
void schedule_ue_spec_br(module_id_t module_idP,
|
void schedule_ue_spec_br(module_id_t module_idP,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP);
|
sub_frame_t subframeP);
|
||||||
@@ -234,21 +232,18 @@ void clear_nfapi_information(eNB_MAC_INST *eNB, int CC_idP,
|
|||||||
|
|
||||||
|
|
||||||
void dlsch_scheduler_pre_processor(module_id_t module_idP,
|
void dlsch_scheduler_pre_processor(module_id_t module_idP,
|
||||||
int slice_idxP,
|
int CC_id,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframe,
|
sub_frame_t subframe);
|
||||||
int *mbsfn_flag,
|
|
||||||
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX]);
|
|
||||||
|
|
||||||
void dlsch_scheduler_pre_processor_reset(module_id_t module_idP,
|
void dlsch_scheduler_pre_processor_reset(module_id_t module_idP,
|
||||||
int slice_idx,
|
int slice_idx,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP,
|
sub_frame_t subframeP,
|
||||||
int min_rb_unit[NFAPI_CC_MAX],
|
int min_rb_unit[NFAPI_CC_MAX],
|
||||||
uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB],
|
uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB],
|
||||||
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX],
|
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX],
|
||||||
uint8_t MIMO_mode_indicator[NFAPI_CC_MAX][N_RBG_MAX],
|
uint8_t MIMO_mode_indicator[NFAPI_CC_MAX][N_RBG_MAX]);
|
||||||
int *mbsfn_flag);
|
|
||||||
|
|
||||||
void dlsch_scheduler_pre_processor_partitioning(module_id_t Mod_id,
|
void dlsch_scheduler_pre_processor_partitioning(module_id_t Mod_id,
|
||||||
int slice_idx,
|
int slice_idx,
|
||||||
|
|||||||
@@ -879,15 +879,16 @@ void dlsch_scheduler_pre_processor_intraslice_sharing(module_id_t Mod_id,
|
|||||||
// This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done
|
// This function assigns pre-available RBS to each UE in specified sub-bands before scheduling is done
|
||||||
void
|
void
|
||||||
dlsch_scheduler_pre_processor(module_id_t Mod_id,
|
dlsch_scheduler_pre_processor(module_id_t Mod_id,
|
||||||
int slice_idx,
|
int CC_id,
|
||||||
frame_t frameP,
|
frame_t frameP,
|
||||||
sub_frame_t subframeP,
|
sub_frame_t subframeP) {
|
||||||
int *mbsfn_flag,
|
|
||||||
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX]) {
|
|
||||||
int UE_id;
|
int UE_id;
|
||||||
uint8_t CC_id;
|
|
||||||
uint16_t i, j;
|
uint16_t i, j;
|
||||||
|
int slice_idx = 0;
|
||||||
int min_rb_unit[NFAPI_CC_MAX];
|
int min_rb_unit[NFAPI_CC_MAX];
|
||||||
|
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX];
|
||||||
|
memset(rballoc_sub, 0, sizeof(rballoc_sub));
|
||||||
|
|
||||||
eNB_MAC_INST *eNB = RC.mac[Mod_id];
|
eNB_MAC_INST *eNB = RC.mac[Mod_id];
|
||||||
slice_info_t *sli = &eNB->slice_info;
|
slice_info_t *sli = &eNB->slice_info;
|
||||||
uint16_t (*nb_rbs_required)[MAX_MOBILES_PER_ENB] = sli->pre_processor_results[slice_idx].nb_rbs_required;
|
uint16_t (*nb_rbs_required)[MAX_MOBILES_PER_ENB] = sli->pre_processor_results[slice_idx].nb_rbs_required;
|
||||||
@@ -907,8 +908,7 @@ dlsch_scheduler_pre_processor(module_id_t Mod_id,
|
|||||||
min_rb_unit,
|
min_rb_unit,
|
||||||
nb_rbs_required,
|
nb_rbs_required,
|
||||||
rballoc_sub,
|
rballoc_sub,
|
||||||
MIMO_mode_indicator,
|
MIMO_mode_indicator);
|
||||||
mbsfn_flag); // FIXME: Not sure if useful
|
|
||||||
// STATUS
|
// STATUS
|
||||||
// Store the DLSCH buffer for each logical channel
|
// Store the DLSCH buffer for each logical channel
|
||||||
store_dlsch_buffer(Mod_id,
|
store_dlsch_buffer(Mod_id,
|
||||||
@@ -1005,8 +1005,7 @@ dlsch_scheduler_pre_processor_reset(module_id_t module_idP,
|
|||||||
int min_rb_unit[NFAPI_CC_MAX],
|
int min_rb_unit[NFAPI_CC_MAX],
|
||||||
uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB],
|
uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB],
|
||||||
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX],
|
uint8_t rballoc_sub[NFAPI_CC_MAX][N_RBG_MAX],
|
||||||
uint8_t MIMO_mode_indicator[NFAPI_CC_MAX][N_RBG_MAX],
|
uint8_t MIMO_mode_indicator[NFAPI_CC_MAX][N_RBG_MAX]) {
|
||||||
int *mbsfn_flag) {
|
|
||||||
int UE_id;
|
int UE_id;
|
||||||
uint8_t CC_id;
|
uint8_t CC_id;
|
||||||
int i, j;
|
int i, j;
|
||||||
@@ -1025,9 +1024,6 @@ dlsch_scheduler_pre_processor_reset(module_id_t module_idP,
|
|||||||
N_RBG[CC_id] = to_rbg(cc->mib->message.dl_Bandwidth);
|
N_RBG[CC_id] = to_rbg(cc->mib->message.dl_Bandwidth);
|
||||||
min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id);
|
min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id);
|
||||||
|
|
||||||
if (mbsfn_flag[CC_id] > 0) // If this CC is allocated for MBSFN skip it here
|
|
||||||
continue;
|
|
||||||
|
|
||||||
for (UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; ++UE_id) {
|
for (UE_id = 0; UE_id < MAX_MOBILES_PER_ENB; ++UE_id) {
|
||||||
UE_list = &RC.mac[module_idP]->UE_list;
|
UE_list = &RC.mac[module_idP]->UE_list;
|
||||||
ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
|
||||||
|
|||||||
Reference in New Issue
Block a user