bugfix: fix schedule_SR (and some spacing cleanup)
This commit is contained in:
@@ -71,8 +71,8 @@ extern RAN_CONTEXT_t RC;
|
|||||||
uint16_t pdcch_order_table[6] = {31,31,511,2047,2047,8191};
|
uint16_t pdcch_order_table[6] = {31,31,511,2047,2047,8191};
|
||||||
|
|
||||||
|
|
||||||
void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
|
void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
||||||
|
{
|
||||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||||
UE_list_t *UE_list = &eNB->UE_list;
|
UE_list_t *UE_list = &eNB->UE_list;
|
||||||
nfapi_ul_config_request_body_t *ul_req;
|
nfapi_ul_config_request_body_t *ul_req;
|
||||||
@@ -147,8 +147,8 @@ void schedule_SRS(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
|
void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP)
|
||||||
|
{
|
||||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||||
UE_list_t *UE_list = &eNB->UE_list;
|
UE_list_t *UE_list = &eNB->UE_list;
|
||||||
COMMON_channels_t *cc;
|
COMMON_channels_t *cc;
|
||||||
@@ -215,102 +215,111 @@ void schedule_CSI(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
|
|||||||
} // for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
} // for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void schedule_SR(module_id_t module_idP,frame_t frameP,sub_frame_t subframeP) {
|
void schedule_SR(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||||
|
{
|
||||||
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
eNB_MAC_INST *eNB = RC.mac[module_idP];
|
||||||
UE_list_t *UE_list = &eNB->UE_list;
|
UE_list_t *UE_list = &eNB->UE_list;
|
||||||
nfapi_ul_config_request_body_t *ul_req;
|
nfapi_ul_config_request_body_t *ul_req;
|
||||||
int CC_id,UE_id;
|
int CC_id;
|
||||||
|
int UE_id;
|
||||||
SchedulingRequestConfig_t *SRconfig;
|
SchedulingRequestConfig_t *SRconfig;
|
||||||
|
int skip_ue;
|
||||||
|
int is_harq;
|
||||||
|
nfapi_ul_config_sr_information sr;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||||
|
RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP << 4) + subframeP;
|
||||||
|
|
||||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
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]) {
|
|
||||||
|
|
||||||
ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
|
ul_req = &RC.mac[module_idP]->UL_req[CC_id].ul_config_request_body;
|
||||||
|
|
||||||
|
|
||||||
AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id);
|
AssertFatal(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated != NULL, "physicalConfigDedicated is null for UE %d\n",UE_id);
|
||||||
|
|
||||||
if ((SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL) {
|
|
||||||
if (SRconfig->present == SchedulingRequestConfig_PR_setup) {
|
|
||||||
|
|
||||||
|
|
||||||
if (SRconfig->choice.setup.sr_ConfigIndex <= 4) { // 5 ms SR period
|
|
||||||
if ((subframeP%5) != SRconfig->choice.setup.sr_ConfigIndex)
|
|
||||||
continue;
|
|
||||||
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 14) { // 10 ms SR period
|
|
||||||
if (subframeP!=(SRconfig->choice.setup.sr_ConfigIndex-5))
|
|
||||||
continue;
|
|
||||||
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 34) { // 20 ms SR period
|
|
||||||
if ((10*(frameP&1)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-15))
|
|
||||||
continue;
|
|
||||||
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 74) { // 40 ms SR period
|
|
||||||
if ((10*(frameP&3)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-35))
|
|
||||||
continue;
|
|
||||||
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 154) { // 80 ms SR period
|
|
||||||
if ((10*(frameP&7)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-75))
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} // SRconfig->present == SchedulingRequestConfig_PR_setup)
|
|
||||||
} // SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL)
|
|
||||||
|
|
||||||
// if we get here there is some PUCCH1 reception to schedule for SR
|
|
||||||
|
|
||||||
int skip_ue=0;
|
|
||||||
// check that there is no existing UL grant for ULSCH which overrides the SR
|
|
||||||
for (int i=0;i<ul_req->number_of_pdus;i++)
|
|
||||||
if (((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)||
|
|
||||||
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)||
|
|
||||||
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)||
|
|
||||||
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE))&&
|
|
||||||
(ul_req->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
|
|
||||||
skip_ue=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if ((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&&
|
|
||||||
(ul_req->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti))
|
|
||||||
skip_ue=1;
|
|
||||||
|
|
||||||
// drop the allocation because ULSCH with handle it with BSR
|
|
||||||
if (skip_ue==1) continue;
|
|
||||||
|
|
||||||
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
|
// drop the allocation if the UE hasn't send RRCConnectionSetupComplete yet
|
||||||
if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED) continue;
|
if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED) continue;
|
||||||
|
|
||||||
// if we get here then there is no UL grant so program the SR
|
if ((SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL) {
|
||||||
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].pdu_type = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE;
|
if (SRconfig->present == SchedulingRequestConfig_PR_setup) {
|
||||||
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti;
|
if (SRconfig->choice.setup.sr_ConfigIndex <= 4) { // 5 ms SR period
|
||||||
|
if ((subframeP%5) != SRconfig->choice.setup.sr_ConfigIndex)
|
||||||
|
continue;
|
||||||
|
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 14) { // 10 ms SR period
|
||||||
|
if (subframeP!=(SRconfig->choice.setup.sr_ConfigIndex-5))
|
||||||
|
continue;
|
||||||
|
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 34) { // 20 ms SR period
|
||||||
|
if ((10*(frameP&1)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-15))
|
||||||
|
continue;
|
||||||
|
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 74) { // 40 ms SR period
|
||||||
|
if ((10*(frameP&3)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-35))
|
||||||
|
continue;
|
||||||
|
} else if (SRconfig->choice.setup.sr_ConfigIndex <= 154) { // 80 ms SR period
|
||||||
|
if ((10*(frameP&7)+subframeP) != (SRconfig->choice.setup.sr_ConfigIndex-75))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} // SRconfig->present == SchedulingRequestConfig_PR_setup)
|
||||||
|
} // SRconfig = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig)!=NULL)
|
||||||
|
|
||||||
|
// if we get here there is some PUCCH1 reception to schedule for SR
|
||||||
|
|
||||||
|
skip_ue=0;
|
||||||
|
is_harq = 0;
|
||||||
|
// check that there is no existing UL grant for ULSCH which overrides the SR
|
||||||
|
for (i = 0; i < ul_req->number_of_pdus; i++) {
|
||||||
|
if (((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE)||
|
||||||
|
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE)||
|
||||||
|
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE)||
|
||||||
|
(ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE))&&
|
||||||
|
(ul_req->ul_config_pdu_list[i].ulsch_pdu.ulsch_pdu_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
|
||||||
|
skip_ue=1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* if there is already an HARQ pdu, convert to SR_HARQ */
|
||||||
|
else if ((ul_req->ul_config_pdu_list[i].pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE)&&
|
||||||
|
(ul_req->ul_config_pdu_list[i].uci_harq_pdu.ue_information.ue_information_rel8.rnti == UE_list->UE_template[CC_id][UE_id].rnti)) {
|
||||||
|
is_harq = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// drop the allocation because ULSCH with handle it with BSR
|
||||||
|
if (skip_ue==1) continue;
|
||||||
|
|
||||||
|
LOG_D(MAC,"Frame %d, Subframe %d : Scheduling SR for UE %d/%x\n",frameP,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].rnti);
|
||||||
|
|
||||||
// check Rel10 or Rel8 SR
|
// check Rel10 or Rel8 SR
|
||||||
#if defined(Rel10) || defined(Rel14)
|
#if defined(Rel10) || defined(Rel14)
|
||||||
if ((UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2) &&
|
if ((UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2) &&
|
||||||
(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)&&
|
(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)&&
|
||||||
(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)) {
|
(UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020)) {
|
||||||
|
sr.sr_information_rel10.number_of_pucch_resources = 1;
|
||||||
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information.sr_information_rel10.number_of_pucch_resources = 1;
|
sr.sr_information_rel10.pucch_index_p1 = *UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020->sr_PUCCH_ResourceIndexP1_r10;
|
||||||
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information.sr_information_rel10.pucch_index_p1 =
|
} else
|
||||||
*UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->ext2->schedulingRequestConfig_v1020->sr_PUCCH_ResourceIndexP1_r10;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information.sr_information_rel8.pucch_index =
|
sr.sr_information_rel8.pucch_index = UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex;
|
||||||
UE_list->UE_template[CC_id][UE_id].physicalConfigDedicated->schedulingRequestConfig->choice.setup.sr_PUCCH_ResourceIndex;
|
}
|
||||||
LOG_D(MAC,"Frame %d, Subframe %d : Scheduling SR for UE %d/%x\n",frameP,subframeP,UE_id,UE_list->UE_template[CC_id][UE_id].rnti);
|
|
||||||
}
|
/* if there is already an HARQ pdu, convert to SR_HARQ */
|
||||||
RC.mac[module_idP]->UL_req[CC_id].sfn_sf = (frameP<<4)+subframeP;
|
if (is_harq) {
|
||||||
ul_req->number_of_pdus++;
|
nfapi_ul_config_harq_information h = ul_req->ul_config_pdu_list[i].uci_harq_pdu.harq_information;
|
||||||
|
ul_req->ul_config_pdu_list[i].pdu_type = NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE;
|
||||||
|
ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.sr_information = sr;
|
||||||
|
ul_req->ul_config_pdu_list[i].uci_sr_harq_pdu.harq_information = h;
|
||||||
|
} else {
|
||||||
|
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].pdu_type = NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE;
|
||||||
|
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.ue_information.ue_information_rel8.rnti = UE_list->UE_template[CC_id][UE_id].rnti;
|
||||||
|
ul_req->ul_config_pdu_list[ul_req->number_of_pdus].uci_sr_pdu.sr_information = sr;
|
||||||
|
ul_req->number_of_pdus++;
|
||||||
|
} /* if (is_harq) */
|
||||||
} // 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])
|
||||||
} // for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
|
} // for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++)
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
|
void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
|
||||||
frame_t frameP, sub_frame_t subframeP) {
|
frame_t frameP, sub_frame_t subframeP)
|
||||||
|
{
|
||||||
UE_list_t *UE_list = &RC.mac[module_idP]->UE_list;
|
UE_list_t *UE_list = &RC.mac[module_idP]->UE_list;
|
||||||
nfapi_dl_config_request_t *DL_req = &RC.mac[module_idP]->DL_req[0];
|
nfapi_dl_config_request_t *DL_req = &RC.mac[module_idP]->DL_req[0];
|
||||||
uint16_t rnti = UE_RNTI(module_idP,UE_id);
|
uint16_t rnti = UE_RNTI(module_idP,UE_id);
|
||||||
@@ -367,8 +376,8 @@ void check_ul_failure(module_id_t module_idP,int CC_id,int UE_id,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_frame_t subframeP) {
|
void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_frame_t subframeP)
|
||||||
|
{
|
||||||
nfapi_dl_config_request_t *DL_req = &eNB->DL_req[0];
|
nfapi_dl_config_request_t *DL_req = &eNB->DL_req[0];
|
||||||
nfapi_ul_config_request_t *UL_req = &eNB->UL_req[0];
|
nfapi_ul_config_request_t *UL_req = &eNB->UL_req[0];
|
||||||
nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[0];
|
nfapi_hi_dci0_request_t *HI_DCI0_req = &eNB->HI_DCI0_req[0];
|
||||||
@@ -396,8 +405,8 @@ void clear_nfapi_information(eNB_MAC_INST *eNB,int CC_idP,frame_t frameP,sub_fra
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP) {
|
void copy_ulreq(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP)
|
||||||
|
{
|
||||||
int CC_id;
|
int CC_id;
|
||||||
eNB_MAC_INST *eNB;
|
eNB_MAC_INST *eNB;
|
||||||
nfapi_ul_config_request_body_t *ul_req_tmp;
|
nfapi_ul_config_request_body_t *ul_req_tmp;
|
||||||
@@ -433,7 +442,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
|
|||||||
|
|
||||||
COMMON_channels_t *cc = RC.mac[module_idP]->common_channels;
|
COMMON_channels_t *cc = RC.mac[module_idP]->common_channels;
|
||||||
|
|
||||||
eNB_UE_STATS *eNB_UE_stats;
|
|
||||||
#if defined(FLEXRAN_AGENT_SB_IF)
|
#if defined(FLEXRAN_AGENT_SB_IF)
|
||||||
Protocol__FlexranMessage *msg;
|
Protocol__FlexranMessage *msg;
|
||||||
#endif
|
#endif
|
||||||
@@ -465,7 +473,6 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
|
|||||||
|
|
||||||
rnti = UE_RNTI(module_idP, i);
|
rnti = UE_RNTI(module_idP, i);
|
||||||
CC_id = UE_PCCID(module_idP, i);
|
CC_id = UE_PCCID(module_idP, i);
|
||||||
eNB_UE_stats = &RC.mac[module_idP]->UE_list.eNB_UE_stats[CC_id][i];
|
|
||||||
|
|
||||||
if ((frameP==0)&&(subframeP==0)) {
|
if ((frameP==0)&&(subframeP==0)) {
|
||||||
LOG_D(MAC,"UE rnti %x : %s, PHR %d dB CQI %d\n", rnti,
|
LOG_D(MAC,"UE rnti %x : %s, PHR %d dB CQI %d\n", rnti,
|
||||||
@@ -535,8 +542,4 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP, frame_t frameP, sub_frame
|
|||||||
stop_meas(&RC.mac[module_idP]->eNB_scheduler);
|
stop_meas(&RC.mac[module_idP]->eNB_scheduler);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_DLSCH_ULSCH_SCHEDULER,VCD_FUNCTION_OUT);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user