Commit fb1ccbaf authored by Louis Adrien Dufrene's avatar Louis Adrien Dufrene

prach taken into account in ulsch scheduler + resolve UE_id = -1 in rx_sdu (to test before push)

parent 28902bcd
...@@ -565,17 +565,16 @@ int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex ...@@ -565,17 +565,16 @@ int is_prach_subframe0(LTE_DL_FRAME_PARMS *frame_parms,uint8_t prach_ConfigIndex
return(prach_mask); return(prach_mask);
} }
int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms,uint32_t frame, uint8_t subframe) { int is_prach_subframe(LTE_DL_FRAME_PARMS *frame_parms, uint32_t frame, uint8_t subframe) {
uint8_t prach_ConfigIndex = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex; uint8_t prach_ConfigIndex = frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex;
int prach_mask = is_prach_subframe0(frame_parms,prach_ConfigIndex,frame,subframe); int prach_mask = is_prach_subframe0(frame_parms, prach_ConfigIndex, frame, subframe);
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0)) #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
int i; for (int i=0; i<4; i++) {
for (i=0;i<4;i++) {
if (frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[i] == 1) if (frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_CElevel_enable[i] == 1)
prach_mask|=(is_prach_subframe0(frame_parms,frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[i],frame,subframe)<<(i+1)); prach_mask |= (is_prach_subframe0(frame_parms, frame_parms->prach_emtc_config_common.prach_ConfigInfo.prach_ConfigIndex[i],
frame, subframe) << (i+1));
} }
#endif #endif
return(prach_mask); return(prach_mask);
......
...@@ -146,8 +146,8 @@ rx_sdu(const module_id_t enb_mod_idP, ...@@ -146,8 +146,8 @@ rx_sdu(const module_id_t enb_mod_idP,
} }
*/ */
// LAD // LAD
/*
first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid];
LOG_W(MAC, "[MAC] UE_id = %d : first_rb = %d ; scheduled_ul_bytes = %d ; TBS_UL = %d ; frame = %d ; subframe = %d\n", LOG_W(MAC, "[MAC] UE_id = %d : first_rb = %d ; scheduled_ul_bytes = %d ; TBS_UL = %d ; frame = %d ; subframe = %d\n",
UE_id, UE_id,
...@@ -156,6 +156,7 @@ rx_sdu(const module_id_t enb_mod_idP, ...@@ -156,6 +156,7 @@ rx_sdu(const module_id_t enb_mod_idP,
UE_list->UE_template[CC_idP][UE_id].TBS_UL[harq_pid], UE_list->UE_template[CC_idP][UE_id].TBS_UL[harq_pid],
frameP, frameP,
subframeP); subframeP);
*/
start_meas(&mac->rx_ulsch_sdu); start_meas(&mac->rx_ulsch_sdu);
...@@ -329,7 +330,7 @@ rx_sdu(const module_id_t enb_mod_idP, ...@@ -329,7 +330,7 @@ rx_sdu(const module_id_t enb_mod_idP,
if (ra[RA_id].msg3_round >= mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) { if (ra[RA_id].msg3_round >= mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) {
cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti); cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
} else { } else {
first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; // UE_id = -1 !? // first_rb = UE_list->UE_template[CC_idP][UE_id].first_rb_ul[harq_pid]; // UE_id = -1 !!!!
ra[RA_id].msg3_round++; ra[RA_id].msg3_round++;
// LAD // LAD
...@@ -417,7 +418,9 @@ rx_sdu(const module_id_t enb_mod_idP, ...@@ -417,7 +418,9 @@ rx_sdu(const module_id_t enb_mod_idP,
mac->eNB_stats[CC_idP].ulsch_bytes_rx = sdu_lenP; mac->eNB_stats[CC_idP].ulsch_bytes_rx = sdu_lenP;
mac->eNB_stats[CC_idP].total_ulsch_bytes_rx += sdu_lenP; mac->eNB_stats[CC_idP].total_ulsch_bytes_rx += sdu_lenP;
mac->eNB_stats[CC_idP].total_ulsch_pdus_rx += 1; mac->eNB_stats[CC_idP].total_ulsch_pdus_rx += 1;
UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] = 0; // can UE_id = -1 !? if (UE_id != -1) {
UE_list->UE_sched_ctrl[UE_id].round_UL[CC_idP][harq_pid] = 0;
}
// LAD // LAD
/* /*
...@@ -1166,7 +1169,6 @@ schedule_ulsch(module_id_t module_idP, ...@@ -1166,7 +1169,6 @@ schedule_ulsch(module_id_t module_idP,
/* Second setup step */ /* Second setup step */
int sched_subframe = 0; int sched_subframe = 0;
int sched_frame = 0; int sched_frame = 0;
int n_rb_ul_tab = 0;
/* Second init step */ /* Second init step */
sched_subframe = (subframeP + 4) % 10; sched_subframe = (subframeP + 4) % 10;
...@@ -1271,9 +1273,49 @@ schedule_ulsch(module_id_t module_idP, ...@@ -1271,9 +1273,49 @@ schedule_ulsch(module_id_t module_idP,
for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++, cc++) { for (int CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++, cc++) {
first_rb[CC_id] = 1; // leave out first RB for PUCCH first_rb[CC_id] = 1; // leave out first RB for PUCCH
int start_rb = 0;
int nb_rb = 6;
LTE_DL_FRAME_PARMS *frame_parms = &(RC.eNB[module_idP][CC_id]->frame_parms);
RA_t *ra_ptr = cc->ra; RA_t *ra_ptr = cc->ra;
/* /* Louis-Adrien: Only set for FDD (for the moment)
* Hard coded for prach-ConfigIndex = 0 and prach-Freqoffset = 2
* ToDo: The PRACH resources should be added with modularity (here?)
*/
/*
if (cc->tdd_Config == NULL) { // FDD
if (((sched_frame %2) == 0) && sched_subframe == 1) { // RACH frame and subframe
if (first_rb[CC_id] < 8) {
n_rb_ul_tab = to_prb(cc->ul_Bandwidth); // return total number of PRB
if (n_rb_ul_tab >= 8) {
first_rb[CC_id] = 8;
} else {
return;
}
}
}
}
*/
if (is_prach_subframe(frame_parms, sched_frame, sched_subframe) == 1) {
start_rb = get_prach_prb_offset(frame_parms,
frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
0, // tdd_mapindex
frameP); // Nf --> shouldn't it be sched_frame ???
first_rb[CC_id] = start_rb + nb_rb;
// LAD
LOG_W(MAC, "[MAC] Config Index = %d ; Freq_offset = %d ; first_rb = %d ; subframe = %d ; sched_subframe = %d\n",
frame_parms->prach_config_common.prach_ConfigInfo.prach_ConfigIndex,
frame_parms->prach_config_common.prach_ConfigInfo.prach_FreqOffset,
first_rb[CC_id],
subframeP,
sched_subframe);
}
/*
* Check if RA (Msg3) is active in this subframeP, if so skip the PRB used for Msg3 * Check if RA (Msg3) is active in this subframeP, if so skip the PRB used for Msg3
* Msg3 is using 1 PRB so we need to increase first_rb accordingly * Msg3 is using 1 PRB so we need to increase first_rb accordingly
* Not sure about the break (can there be more than 1 active RA procedure per CC_id and per subframe?) * Not sure about the break (can there be more than 1 active RA procedure per CC_id and per subframe?)
...@@ -1291,24 +1333,6 @@ schedule_ulsch(module_id_t module_idP, ...@@ -1291,24 +1333,6 @@ schedule_ulsch(module_id_t module_idP,
// break; // break;
} }
} }
/* Louis-Adrien: Only set for FDD (for the moment)
* Hard coded for prach-ConfigIndex = 0 and prach-Freqoffset = 2
* ToDo: The PRACH resources should be added with modularity (here?)
*/
if (cc[CC_id].tdd_Config == NULL) { // FDD
if (((sched_frame %2) == 0) && sched_subframe == 1) { // RACH frame and subframe
if (first_rb[CC_id] < 8) {
n_rb_ul_tab = to_prb(cc[CC_id].ul_Bandwidth); // return total number of PRB
if (n_rb_ul_tab >= 8) {
first_rb[CC_id] = 8;
} else {
return;
}
}
}
}
} }
/* Run each enabled slice-specific schedulers one by one */ /* Run each enabled slice-specific schedulers one by one */
......
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