fixed scheduler for 2 CCs.
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6114 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -71,27 +71,27 @@ extern inline unsigned int taus(void);
|
|||||||
|
|
||||||
void add_ue_dlsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframeP, UE_DLSCH_STATUS status){
|
void add_ue_dlsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframeP, UE_DLSCH_STATUS status){
|
||||||
|
|
||||||
eNB_dlsch_info[module_idP][UE_id].rnti = UE_RNTI(module_idP,UE_id);
|
eNB_dlsch_info[module_idP][CC_id][UE_id].rnti = UE_RNTI(module_idP,UE_id);
|
||||||
// eNB_dlsch_info[module_idP][ue_mod_idP].weight = weight;
|
// eNB_dlsch_info[module_idP][CC_id][ue_mod_idP].weight = weight;
|
||||||
eNB_dlsch_info[module_idP][UE_id].subframe = subframeP;
|
eNB_dlsch_info[module_idP][CC_id][UE_id].subframe = subframeP;
|
||||||
eNB_dlsch_info[module_idP][UE_id].status = status;
|
eNB_dlsch_info[module_idP][CC_id][UE_id].status = status;
|
||||||
|
|
||||||
eNB_dlsch_info[module_idP][UE_id].serving_num++;
|
eNB_dlsch_info[module_idP][CC_id][UE_id].serving_num++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int schedule_next_dlue(module_id_t module_idP, sub_frame_t subframeP){
|
int schedule_next_dlue(module_id_t module_idP, int CC_id, sub_frame_t subframeP){
|
||||||
|
|
||||||
int next_ue;
|
int next_ue;
|
||||||
UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list;
|
UE_list_t *UE_list=&eNB_mac_inst[module_idP].UE_list;
|
||||||
|
|
||||||
for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ){
|
for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ){
|
||||||
if (eNB_dlsch_info[module_idP][next_ue].status == S_DL_WAITING)
|
if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == S_DL_WAITING)
|
||||||
return next_ue;
|
return next_ue;
|
||||||
}
|
}
|
||||||
for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ){
|
for (next_ue=UE_list->head; next_ue>=0; next_ue=UE_list->next[next_ue] ){
|
||||||
if (eNB_dlsch_info[module_idP][next_ue].status == S_DL_BUFFERED) {
|
if (eNB_dlsch_info[module_idP][CC_id][next_ue].status == S_DL_BUFFERED) {
|
||||||
eNB_dlsch_info[module_idP][next_ue].status = S_DL_WAITING;
|
eNB_dlsch_info[module_idP][CC_id][next_ue].status = S_DL_WAITING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -442,6 +442,7 @@ void schedule_ue_spec(module_id_t module_idP,
|
|||||||
|
|
||||||
|
|
||||||
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||||
|
LOG_D(MAC, "doing schedule_ue_spec for CC_id %d\n",CC_id);
|
||||||
if (mbsfn_flag[CC_id]>0)
|
if (mbsfn_flag[CC_id]>0)
|
||||||
continue;
|
continue;
|
||||||
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]) {
|
||||||
@@ -1182,6 +1183,7 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
|
|||||||
start_meas(&eNB->fill_DLSCH_dci);
|
start_meas(&eNB->fill_DLSCH_dci);
|
||||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_IN);
|
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_FILL_DLSCH_DCI,VCD_FUNCTION_IN);
|
||||||
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||||
|
LOG_D(MAC,"Doing fill DCI for CC_id %d\n",CC_id);
|
||||||
|
|
||||||
if (mbsfn_flagP[CC_id]>0)
|
if (mbsfn_flagP[CC_id]>0)
|
||||||
continue;
|
continue;
|
||||||
@@ -1750,11 +1752,11 @@ void fill_DLSCH_dci(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP
|
|||||||
|
|
||||||
// UE specific DCIs
|
// UE specific DCIs
|
||||||
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]) {
|
||||||
// printf("UE_id: %d => status %d\n",UE_id,eNB_dlsch_info[module_idP][UE_id].status);
|
LOG_D(MAC,"CC_id %d, UE_id: %d => status %d\n",CC_id,UE_id,eNB_dlsch_info[module_idP][CC_id][UE_id].status);
|
||||||
if (eNB_dlsch_info[module_idP][UE_id].status == S_DL_SCHEDULED) {
|
if (eNB_dlsch_info[module_idP][CC_id][UE_id].status == S_DL_SCHEDULED) {
|
||||||
|
|
||||||
// clear scheduling flag
|
// clear scheduling flag
|
||||||
eNB_dlsch_info[module_idP][UE_id].status = S_DL_WAITING;
|
eNB_dlsch_info[module_idP][CC_id][UE_id].status = S_DL_WAITING;
|
||||||
rnti = UE_RNTI(module_idP,UE_id);
|
rnti = UE_RNTI(module_idP,UE_id);
|
||||||
mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0);
|
mac_xface->get_ue_active_harq_pid(module_idP,CC_id,rnti,frameP,subframeP,&harq_pid,&round,0);
|
||||||
nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid];
|
nb_rb = UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid];
|
||||||
|
|||||||
@@ -69,27 +69,29 @@
|
|||||||
|
|
||||||
|
|
||||||
void init_ue_sched_info(void){
|
void init_ue_sched_info(void){
|
||||||
module_id_t i,j;
|
module_id_t i,j,k;
|
||||||
for (i=0;i<NUMBER_OF_eNB_MAX;i++){
|
for (i=0;i<NUMBER_OF_eNB_MAX;i++){
|
||||||
|
for (k=0;i<MAX_NUM_CCs;i++){
|
||||||
for (j=0;j<NUMBER_OF_UE_MAX;j++){
|
for (j=0;j<NUMBER_OF_UE_MAX;j++){
|
||||||
// init DL
|
// init DL
|
||||||
eNB_dlsch_info[i][j].weight = 0;
|
eNB_dlsch_info[i][k][j].weight = 0;
|
||||||
eNB_dlsch_info[i][j].subframe = 0;
|
eNB_dlsch_info[i][k][j].subframe = 0;
|
||||||
eNB_dlsch_info[i][j].serving_num = 0;
|
eNB_dlsch_info[i][k][j].serving_num = 0;
|
||||||
eNB_dlsch_info[i][j].status = S_DL_NONE;
|
eNB_dlsch_info[i][k][j].status = S_DL_NONE;
|
||||||
// init UL
|
// init UL
|
||||||
eNB_ulsch_info[i][j].subframe = 0;
|
eNB_ulsch_info[i][k][j].subframe = 0;
|
||||||
eNB_ulsch_info[i][j].serving_num = 0;
|
eNB_ulsch_info[i][k][j].serving_num = 0;
|
||||||
eNB_ulsch_info[i][j].status = S_UL_NONE;
|
eNB_ulsch_info[i][k][j].status = S_UL_NONE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned char get_ue_weight(module_id_t module_idP, int ue_idP){
|
unsigned char get_ue_weight(module_id_t module_idP, int CC_id, int ue_idP){
|
||||||
|
|
||||||
return(eNB_dlsch_info[module_idP][ue_idP].weight);
|
return(eNB_dlsch_info[module_idP][CC_id][ue_idP].weight);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,8 +237,8 @@ int add_new_ue(module_id_t mod_idP, int cc_idP, rnti_t rntiP,int harq_pidP) {
|
|||||||
UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j==0)?1:0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0
|
UE_list->UE_template[cc_idP][UE_id].oldNDI[j] = (j==0)?1:0; // 1 because first transmission is with format1A (Msg4) for harq_pid 0
|
||||||
UE_list->UE_template[cc_idP][UE_id].oldNDI_UL[j] = (j==harq_pidP)?0:1; // 1st transmission is with Msg3;
|
UE_list->UE_template[cc_idP][UE_id].oldNDI_UL[j] = (j==harq_pidP)?0:1; // 1st transmission is with Msg3;
|
||||||
}
|
}
|
||||||
eNB_ulsch_info[mod_idP][UE_id].status = S_UL_WAITING;
|
eNB_ulsch_info[mod_idP][cc_idP][UE_id].status = S_UL_WAITING;
|
||||||
eNB_dlsch_info[mod_idP][UE_id].status = S_UL_WAITING;
|
eNB_dlsch_info[mod_idP][cc_idP][UE_id].status = S_UL_WAITING;
|
||||||
LOG_D(MAC,"[eNB %d] Add UE_id %d on Primary CC_id %d: rnti %x\n",mod_idP,UE_id,cc_idP,rntiP);
|
LOG_D(MAC,"[eNB %d] Add UE_id %d on Primary CC_id %d: rnti %x\n",mod_idP,UE_id,cc_idP,rntiP);
|
||||||
dump_ue_list(UE_list,0);
|
dump_ue_list(UE_list,0);
|
||||||
return(UE_id);
|
return(UE_id);
|
||||||
@@ -266,10 +268,10 @@ int mac_remove_ue(module_id_t mod_idP, int ue_idP) {
|
|||||||
UE_list->UE_template[pCC_id][ue_idP].ul_SR = 0;
|
UE_list->UE_template[pCC_id][ue_idP].ul_SR = 0;
|
||||||
UE_list->UE_template[pCC_id][ue_idP].rnti = 0;
|
UE_list->UE_template[pCC_id][ue_idP].rnti = 0;
|
||||||
UE_list->UE_template[pCC_id][ue_idP].ul_active = FALSE;
|
UE_list->UE_template[pCC_id][ue_idP].ul_active = FALSE;
|
||||||
eNB_ulsch_info[mod_idP][ue_idP].rnti = 0;
|
eNB_ulsch_info[mod_idP][pCC_id][ue_idP].rnti = 0;
|
||||||
eNB_ulsch_info[mod_idP][ue_idP].status = S_UL_NONE;
|
eNB_ulsch_info[mod_idP][pCC_id][ue_idP].status = S_UL_NONE;
|
||||||
eNB_dlsch_info[mod_idP][ue_idP].rnti = 0;
|
eNB_dlsch_info[mod_idP][pCC_id][ue_idP].rnti = 0;
|
||||||
eNB_dlsch_info[mod_idP][ue_idP].status = S_DL_NONE;
|
eNB_dlsch_info[mod_idP][pCC_id][ue_idP].status = S_DL_NONE;
|
||||||
|
|
||||||
rrc_eNB_free_UE_index(mod_idP,ue_idP);
|
rrc_eNB_free_UE_index(mod_idP,ue_idP);
|
||||||
|
|
||||||
|
|||||||
@@ -355,11 +355,11 @@ void adjust_bsr_info(int buffer_occupancy,
|
|||||||
|
|
||||||
void add_ue_ulsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframeP, UE_ULSCH_STATUS status){
|
void add_ue_ulsch_info(module_id_t module_idP, int CC_id, int UE_id, sub_frame_t subframeP, UE_ULSCH_STATUS status){
|
||||||
|
|
||||||
eNB_ulsch_info[module_idP][UE_id].rnti = UE_RNTI(module_idP,UE_id);
|
eNB_ulsch_info[module_idP][CC_id][UE_id].rnti = UE_RNTI(module_idP,UE_id);
|
||||||
eNB_ulsch_info[module_idP][UE_id].subframe = subframeP;
|
eNB_ulsch_info[module_idP][CC_id][UE_id].subframe = subframeP;
|
||||||
eNB_ulsch_info[module_idP][UE_id].status = status;
|
eNB_ulsch_info[module_idP][CC_id][UE_id].status = status;
|
||||||
|
|
||||||
eNB_ulsch_info[module_idP][UE_id].serving_num++;
|
eNB_ulsch_info[module_idP][CC_id][UE_id].serving_num++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ extern eNB_MAC_INST *eNB_mac_inst;
|
|||||||
extern MAC_RLC_XFACE *Mac_rlc_xface;
|
extern MAC_RLC_XFACE *Mac_rlc_xface;
|
||||||
extern uint8_t Is_rrc_registered;
|
extern uint8_t Is_rrc_registered;
|
||||||
|
|
||||||
extern eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
extern eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
||||||
extern eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
extern eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ module_id_t schedule_next_ulue(module_id_t module_idP, int UE_id,sub_frame_t sub
|
|||||||
@param subframe Subframe number on which to act
|
@param subframe Subframe number on which to act
|
||||||
@returns UE index that is to be scheduled if needed/room
|
@returns UE index that is to be scheduled if needed/room
|
||||||
*/
|
*/
|
||||||
int schedule_next_dlue(module_id_t module_idP, sub_frame_t subframe);
|
int schedule_next_dlue(module_id_t module_idP, int CC_id, sub_frame_t subframe);
|
||||||
|
|
||||||
/* \brief Allocates a set of PRBS for a particular UE. This is a simple function for the moment, later it should process frequency-domain CQI information and/or PMI information. Currently it just returns the first PRBS that are available in the subframe based on the number requested.
|
/* \brief Allocates a set of PRBS for a particular UE. This is a simple function for the moment, later it should process frequency-domain CQI information and/or PMI information. Currently it just returns the first PRBS that are available in the subframe based on the number requested.
|
||||||
@param UE_id Index of UE on which to act
|
@param UE_id Index of UE on which to act
|
||||||
@@ -359,7 +359,7 @@ uint32_t req_new_ulsch(module_id_t module_idP);
|
|||||||
*/
|
*/
|
||||||
uint32_t ue_get_SR(module_id_t module_idP, int CC_id,frame_t frameP, uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe);
|
uint32_t ue_get_SR(module_id_t module_idP, int CC_id,frame_t frameP, uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe);
|
||||||
|
|
||||||
uint8_t get_ue_weight(module_id_t module_idP, int UE_id);
|
uint8_t get_ue_weight(module_id_t module_idP, int CC_id, int UE_id);
|
||||||
|
|
||||||
// UE functions
|
// UE functions
|
||||||
void mac_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t CH_index);
|
void mac_out_of_sync_ind(module_id_t module_idP, frame_t frameP, uint16_t CH_index);
|
||||||
|
|||||||
@@ -66,8 +66,8 @@ int pCC_id[NUMBER_OF_eNB_MAX];
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
eNB_ULSCH_INFO eNB_ulsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
||||||
eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
eNB_DLSCH_INFO eNB_dlsch_info[NUMBER_OF_eNB_MAX][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifndef USER_MODE
|
#ifndef USER_MODE
|
||||||
|
|||||||
@@ -650,9 +650,11 @@ boolean_t pdcp_data_ind(
|
|||||||
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
|
pdcp_p->last_submitted_pdcp_rx_sn = sequence_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(DEBUG_PDCP_PAYLOAD)
|
||||||
rlc_util_print_hex_octets(PDCP,
|
rlc_util_print_hex_octets(PDCP,
|
||||||
(unsigned char*)&sdu_buffer_pP->data[payload_offset],
|
(unsigned char*)&sdu_buffer_pP->data[payload_offset],
|
||||||
sdu_buffer_sizeP - payload_offset);
|
sdu_buffer_sizeP - payload_offset);
|
||||||
|
#endif
|
||||||
|
|
||||||
src_id = (enb_flagP == ENB_FLAG_NO) ? enb_mod_idP : ue_mod_idP + NB_eNB_INST;
|
src_id = (enb_flagP == ENB_FLAG_NO) ? enb_mod_idP : ue_mod_idP + NB_eNB_INST;
|
||||||
dst_id = (enb_flagP == ENB_FLAG_NO) ? ue_mod_idP + NB_eNB_INST: enb_mod_idP;
|
dst_id = (enb_flagP == ENB_FLAG_NO) ? ue_mod_idP + NB_eNB_INST: enb_mod_idP;
|
||||||
|
|||||||
Reference in New Issue
Block a user