Merge remote-tracking branch 'origin/nfapi_cleanup1' into develop_integration_2019_w30
This commit is contained in:
@@ -160,7 +160,7 @@ void RCconfig_L1(void) {
|
||||
LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_inst=1 this is because phy_init_RU() uses that to index and not RC.num_eNB - why the 2 similar variables?\n", __FUNCTION__);
|
||||
LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_CC[0]=%d for init_eNB_afterRU()\n", __FUNCTION__, RC.nb_CC[0]);
|
||||
LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_macrlc_inst:%d because used by mac_top_init_eNB()\n", __FUNCTION__, RC.nb_macrlc_inst);
|
||||
//mac_top_init_eNB();
|
||||
mac_top_init_eNB();
|
||||
configure_nfapi_pnf(RC.eNB[j][0]->eth_params_n.remote_addr, RC.eNB[j][0]->eth_params_n.remote_portc, RC.eNB[j][0]->eth_params_n.my_addr, RC.eNB[j][0]->eth_params_n.my_portd,
|
||||
RC.eNB[j][0]->eth_params_n .remote_portd);
|
||||
} else { // other midhaul
|
||||
|
||||
@@ -464,6 +464,7 @@ check_ul_failure(module_id_t module_idP, int CC_id, int UE_id,
|
||||
DL_req[CC_id].dl_config_request_body.number_dci++;
|
||||
DL_req[CC_id].dl_config_request_body.number_pdu++;
|
||||
DL_req[CC_id].dl_config_request_body.tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
DL_req[CC_id].sfn_sf = frameP<<4 | subframeP;
|
||||
LOG_D(MAC,
|
||||
"UE %d rnti %x: sending PDCCH order for RAPROC (failure timer %d), resource_block_coding %d \n",
|
||||
UE_id, rnti,
|
||||
|
||||
@@ -868,8 +868,10 @@ generate_Msg4(module_id_t module_idP,
|
||||
ul_config_pdu = &ul_req_body->ul_config_pdu_list[ul_req_body->number_of_pdus];
|
||||
ul_config_pdu->pdu_type = NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE;
|
||||
ul_config_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_ul_config_uci_harq_pdu));
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.tl.tag = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG;
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.handle = 0; // don't know how to use this
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti = ra->rnti;
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.tl.tag = NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG;
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.ue_type = (ra->rach_resource_type < 3) ? 1 : 2;
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.empty_symbols = 0;
|
||||
ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel13.total_number_of_repetitions = pucchreps[ra->rach_resource_type - 1];
|
||||
@@ -1052,7 +1054,7 @@ generate_Msg4(module_id_t module_idP,
|
||||
mac->TX_req[CC_idP].sfn_sf =
|
||||
fill_nfapi_tx_req(&mac->TX_req[CC_idP].tx_request_body,
|
||||
(frameP * 10) + subframeP,
|
||||
rrc_sdu_length,
|
||||
rrc_sdu_length+offset,
|
||||
mac->pdu_index[CC_idP],
|
||||
mac->UE_list.
|
||||
DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]);
|
||||
|
||||
@@ -1158,6 +1158,7 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
|
||||
dl_req->number_dci++;
|
||||
dl_req->number_pdu++;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
|
||||
memset((void *) dl_config_pdu, 0,
|
||||
sizeof(nfapi_dl_config_request_pdu_t));
|
||||
@@ -1188,6 +1189,7 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
|
||||
// dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector = ;
|
||||
dl_req->number_pdu++;
|
||||
dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
|
||||
|
||||
// Rel10 fields
|
||||
dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
|
||||
|
||||
@@ -736,7 +736,7 @@ schedule_ue_spec(module_id_t module_idP,
|
||||
eNB_UE_stats->dl_cqi, MIN_CQI_VALUE, MAX_CQI_VALUE);
|
||||
*/
|
||||
if (NFAPI_MODE != NFAPI_MONOLITHIC) {
|
||||
eNB_UE_stats->dlsch_mcs1 = 10; // cqi_to_mcs[ue_sched_ctrl->dl_cqi[CC_id]];
|
||||
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[ue_sched_ctrl->dl_cqi[CC_id]];
|
||||
} else { // this operation is also done in the preprocessor
|
||||
eNB_UE_stats->dlsch_mcs1 = cmin(eNB_UE_stats->dlsch_mcs1,
|
||||
eNB->slice_info.dl[slice_idxP].maxmcs); // cmin(eNB_UE_stats->dlsch_mcs1, openair_daq_vars.target_ue_dl_mcs);
|
||||
|
||||
@@ -601,6 +601,7 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t Mod_id,
|
||||
#endif
|
||||
memset(rballoc_sub[0],0,(MAX_NUM_CCs)*(N_RBG_MAX)*sizeof(unsigned char));
|
||||
memset(min_rb_unit,0,sizeof(min_rb_unit));
|
||||
memset(MIMO_mode_indicator[0], 0, MAX_NUM_CCs*N_RBG_MAX*sizeof(unsigned char));
|
||||
|
||||
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||
if (mbsfn_flag[CC_id] > 0) // If this CC is allocated for MBSFN skip it here
|
||||
@@ -1029,7 +1030,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
eNB_UE_stats->dl_cqi, MIN_CQI_VALUE, MAX_CQI_VALUE);
|
||||
*/
|
||||
if (NFAPI_MODE != NFAPI_MONOLITHIC) {
|
||||
eNB_UE_stats->dlsch_mcs1 = 10;//cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]];
|
||||
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]];
|
||||
} else {
|
||||
eNB_UE_stats->dlsch_mcs1 = cqi_to_mcs[ue_sched_ctl->dl_cqi[CC_id]];
|
||||
}
|
||||
@@ -1781,6 +1782,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
|
||||
dl_config_pdu->pdu_size = (uint8_t)(2+sizeof(nfapi_dl_config_dci_dl_pdu));
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format = NFAPI_DL_DCI_FORMAT_1;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level = get_aggregation(get_bw_index(module_idP,CC_id),ue_sched_ctl->dl_cqi[CC_id],format1);
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti = rnti;
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type = 1; // CRNTI : see Table 4-10 from SCF082 - nFAPI specifications
|
||||
dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power = 6000; // equal to RS power
|
||||
@@ -2420,8 +2422,8 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
|
||||
while ( (tbs < bytes_to_schedule) && (rb_table[rb_table_index]<(frame_parms->N_RB_UL-num_pucch_rb-first_rb[CC_id])) &&
|
||||
((UE_template->phr_info - tx_power) > 0) && (rb_table_index < 32 )) {
|
||||
rb_table_index++;
|
||||
tbs = get_TBS_UL(mcs,rb_table[rb_table_index])<<3;
|
||||
tx_power= estimate_ue_tx_power(tbs,rb_table[rb_table_index],0,frame_parms->Ncp,0);
|
||||
tbs = get_TBS_UL(mcs,rb_table[rb_table_index]);
|
||||
tx_power= estimate_ue_tx_power(tbs*8,rb_table[rb_table_index],0,frame_parms->Ncp,0);
|
||||
}
|
||||
|
||||
if ( rb_table[rb_table_index]<3 ) {
|
||||
@@ -2784,12 +2786,12 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
if (cc->tdd_Config) {
|
||||
switch (cc->tdd_Config->subframeAssignment) {
|
||||
case 1:
|
||||
if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
|
||||
if( sched_subframeP == 1 || sched_subframeP == 6 ) cqi_req=0;
|
||||
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if( subframeP == 1 ) cqi_req=0;
|
||||
if( sched_subframeP == 1 ) cqi_req=0;
|
||||
|
||||
break;
|
||||
|
||||
@@ -2899,6 +2901,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
memset((void *)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
|
||||
hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE;
|
||||
hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_dci_pdu);
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tl.tag = NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format = NFAPI_UL_DCI_FORMAT_0;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti;
|
||||
@@ -3056,6 +3059,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t module_idP,
|
||||
memset((void *)hi_dci0_pdu,0,sizeof(nfapi_hi_dci0_request_pdu_t));
|
||||
hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_DCI_PDU_TYPE;
|
||||
hi_dci0_pdu->pdu_size = 2+sizeof(nfapi_hi_dci0_dci_pdu);
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.tl.tag = NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.dci_format = NFAPI_UL_DCI_FORMAT_0;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.aggregation_level = aggregation;
|
||||
hi_dci0_pdu->dci_pdu.dci_pdu_rel8.rnti = rnti;
|
||||
|
||||
@@ -475,6 +475,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
);
|
||||
if (ret == 0) {
|
||||
/* Received a new rnti */
|
||||
if(ret == 0){
|
||||
ra->state = MSGCRNTI;
|
||||
LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Received rnti(Msg4)\n",
|
||||
enb_mod_idP,
|
||||
@@ -504,7 +505,7 @@ rx_sdu(const module_id_t enb_mod_idP,
|
||||
UE_template_ptr->ul_SR = 1;
|
||||
UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
|
||||
} else {
|
||||
cancel_ra_proc(enb_mod_idP, CC_idP, frameP,current_rnti);
|
||||
cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
|
||||
}
|
||||
// break;
|
||||
}
|
||||
|
||||
@@ -1438,6 +1438,8 @@ typedef struct eNB_MAC_INST_s {
|
||||
tx_request_pdu[NFAPI_CC_MAX][MAX_NUM_TX_REQUEST_PDU];
|
||||
/// NFAPI DL PDU structure
|
||||
nfapi_tx_request_t TX_req[NFAPI_CC_MAX];
|
||||
/// NFAPI UE_release_req structure
|
||||
nfapi_ue_release_request_t UE_release_req;
|
||||
/// UL handle
|
||||
uint32_t ul_handle;
|
||||
UE_list_t UE_list;
|
||||
|
||||
@@ -806,6 +806,7 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
|
||||
rlc_sn_t sn = rlc_pP->vt_a;
|
||||
rlc_sn_t sn_end = rlc_pP->vt_s;
|
||||
mem_block_t* pdu_p = NULL;
|
||||
mem_block_t* mb_p = NULL;
|
||||
rlc_am_tx_data_pdu_management_t* tx_data_pdu_management;
|
||||
//Assertion(eNB)_PRAN_DesignDocument_annex No.769
|
||||
if((rlc_pP->retrans_num_pdus <= 0) || (rlc_pP->vt_a == rlc_pP->vt_s))
|
||||
@@ -884,6 +885,18 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
|
||||
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
|
||||
tx_data_pdu_management->retx_count_next,
|
||||
sn);
|
||||
mb_p = rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE].mem_block;
|
||||
if(mb_p != NULL){
|
||||
free_mem_block(mb_p, __func__);
|
||||
tx_data_pdu_management->mem_block = NULL;
|
||||
tx_data_pdu_management->flags.retransmit = 0;
|
||||
tx_data_pdu_management->flags.ack = 1;
|
||||
tx_data_pdu_management->flags.transmitted = 0;
|
||||
rlc_pP->retrans_num_bytes_to_retransmit -= tx_data_pdu_management->retx_payload_size;
|
||||
tx_data_pdu_management->retx_payload_size = 0;
|
||||
tx_data_pdu_management->num_holes = 0;
|
||||
rlc_pP->retrans_num_pdus --;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (rlc_pP->nb_bytes_requested_by_mac >= 5)
|
||||
@@ -938,6 +951,18 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
|
||||
PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
|
||||
tx_data_pdu_management->retx_count_next,
|
||||
sn);
|
||||
mb_p = rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE].mem_block;
|
||||
if(mb_p != NULL){
|
||||
free_mem_block(mb_p, __func__);
|
||||
tx_data_pdu_management->mem_block = NULL;
|
||||
tx_data_pdu_management->flags.retransmit = 0;
|
||||
tx_data_pdu_management->flags.ack = 1;
|
||||
tx_data_pdu_management->flags.transmitted = 0;
|
||||
rlc_pP->retrans_num_bytes_to_retransmit -= tx_data_pdu_management->retx_payload_size;
|
||||
tx_data_pdu_management->retx_payload_size = 0;
|
||||
tx_data_pdu_management->num_holes = 0;
|
||||
rlc_pP->retrans_num_pdus --;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -938,7 +938,7 @@ rlc_am_rx_check_all_byte_segments(
|
||||
rlc_am_pdu_info_t *pdu_info_p = &((rlc_am_rx_pdu_management_t*)(tb_pP->data))->pdu_info;
|
||||
mem_block_t *cursor_p = NULL;
|
||||
mem_block_t *first_cursor_p = NULL;
|
||||
rlc_sn_t sn = pdu_info_p->sn;
|
||||
rlc_usn_t sn = pdu_info_p->sn;
|
||||
sdu_size_t next_waited_so;
|
||||
sdu_size_t last_end_so;
|
||||
|
||||
@@ -969,6 +969,9 @@ rlc_am_rx_check_all_byte_segments(
|
||||
// the so field of the first PDU should be 0
|
||||
//cursor_p = list.head;
|
||||
//we start from the first stored PDU segment of this SN
|
||||
if(cursor_p->data == NULL){
|
||||
return;
|
||||
}
|
||||
pdu_info_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info;
|
||||
|
||||
// if the first segment does not have SO = 0 then no need to continue
|
||||
@@ -985,6 +988,9 @@ rlc_am_rx_check_all_byte_segments(
|
||||
while (cursor_p->next != NULL) {
|
||||
//msg("rlc_am_rx_check_all_byte_segments(%d) @4\n",sn);
|
||||
cursor_p = cursor_p->next;
|
||||
if(cursor_p->data == NULL){
|
||||
return;
|
||||
}
|
||||
pdu_info_p = &((rlc_am_rx_pdu_management_t*)(cursor_p->data))->pdu_info;
|
||||
|
||||
if (pdu_info_p->sn == sn) {
|
||||
|
||||
@@ -17,10 +17,34 @@ extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind);
|
||||
extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind);
|
||||
|
||||
extern uint16_t sf_ahead;
|
||||
extern UL_RCC_IND_t UL_RCC_INFO;
|
||||
|
||||
uint16_t frame_cnt=0;
|
||||
void handle_rach(UL_IND_t *UL_info) {
|
||||
int i;
|
||||
if(NFAPI_MODE == NFAPI_MODE_VNF){
|
||||
for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
|
||||
if (UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles>0) {
|
||||
|
||||
AssertFatal(UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
|
||||
LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_RCC_INFO.rach_ind[j].sfn_sf));
|
||||
initiate_ra_proc(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.rach_ind[j].sfn_sf),
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.rach_ind[j].sfn_sf),
|
||||
UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.preamble,
|
||||
UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
|
||||
UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.rnti
|
||||
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||
,0
|
||||
#endif
|
||||
);
|
||||
free(UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list);
|
||||
UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles = 0;
|
||||
UL_RCC_INFO.rach_ind[j].header.message_id = 0;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
|
||||
AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
|
||||
UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
|
||||
@@ -37,6 +61,7 @@ void handle_rach(UL_IND_t *UL_info) {
|
||||
#endif
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||
|
||||
@@ -72,6 +97,22 @@ void handle_sr(UL_IND_t *UL_info) {
|
||||
if (UL_info->sr_ind.sr_indication_body.number_of_srs>0) {
|
||||
oai_nfapi_sr_indication(&UL_info->sr_ind);
|
||||
}
|
||||
} else if(NFAPI_MODE == NFAPI_MODE_VNF){
|
||||
for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
|
||||
if(UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs > 0){
|
||||
for (i=0;i<UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs;i++){
|
||||
SR_indication(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.sr_ind[j].sfn_sf),
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.sr_ind[j].sfn_sf),
|
||||
UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
|
||||
UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
|
||||
}
|
||||
free(UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list);
|
||||
UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs=0;
|
||||
UL_RCC_INFO.sr_ind[j].header.message_id = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i=0; i<UL_info->sr_ind.sr_indication_body.number_of_srs; i++)
|
||||
SR_indication(UL_info->module_id,
|
||||
@@ -89,27 +130,46 @@ void handle_cqi(UL_IND_t *UL_info) {
|
||||
int i;
|
||||
|
||||
if (NFAPI_MODE==NFAPI_MODE_PNF) {
|
||||
if (UL_info->cqi_ind.number_of_cqis>0) {
|
||||
LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.number_of_cqis);
|
||||
nfapi_cqi_indication_t ind;
|
||||
ind.header.message_id = NFAPI_RX_CQI_INDICATION;
|
||||
ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
|
||||
ind.cqi_indication_body = UL_info->cqi_ind;
|
||||
oai_nfapi_cqi_indication(&ind);
|
||||
UL_info->cqi_ind.number_of_cqis=0;
|
||||
if (UL_info->cqi_ind.cqi_indication_body.number_of_cqis>0) {
|
||||
LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.cqi_indication_body.number_of_cqis);
|
||||
UL_info->cqi_ind.header.message_id = NFAPI_RX_CQI_INDICATION;
|
||||
UL_info->cqi_ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
|
||||
|
||||
oai_nfapi_cqi_indication(&UL_info->cqi_ind);
|
||||
UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
|
||||
}
|
||||
} else if (NFAPI_MODE == NFAPI_MODE_VNF) {
|
||||
for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
|
||||
if(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis > 0){
|
||||
for (i=0;i<UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis;i++){
|
||||
cqi_indication(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.cqi_ind[j].sfn_sf),
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.cqi_ind[j].sfn_sf),
|
||||
UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
|
||||
&UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
|
||||
UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_raw_pdu_list[i].pdu,
|
||||
&UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
|
||||
}
|
||||
|
||||
free(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_pdu_list);
|
||||
free(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.cqi_raw_pdu_list);
|
||||
UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis=0;
|
||||
UL_RCC_INFO.cqi_ind[j].header.message_id = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i=0; i<UL_info->cqi_ind.number_of_cqis; i++)
|
||||
for (i=0;i<UL_info->cqi_ind.cqi_indication_body.number_of_cqis;i++)
|
||||
cqi_indication(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
UL_info->frame,
|
||||
UL_info->subframe,
|
||||
UL_info->cqi_ind.cqi_pdu_list[i].rx_ue_information.rnti,
|
||||
&UL_info->cqi_ind.cqi_pdu_list[i].cqi_indication_rel9,
|
||||
UL_info->cqi_ind.cqi_raw_pdu_list[i].pdu,
|
||||
&UL_info->cqi_ind.cqi_pdu_list[i].ul_cqi_information);
|
||||
NFAPI_SFNSF2SFN(UL_info->cqi_ind.sfn_sf),
|
||||
NFAPI_SFNSF2SF(UL_info->cqi_ind.sfn_sf),
|
||||
UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
|
||||
&UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
|
||||
UL_info->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[i].pdu,
|
||||
&UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
|
||||
|
||||
UL_info->cqi_ind.number_of_cqis=0;
|
||||
UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,7 +183,22 @@ void handle_harq(UL_IND_t *UL_info) {
|
||||
}
|
||||
|
||||
UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
|
||||
}else if(NFAPI_MODE == NFAPI_MODE_VNF){
|
||||
for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
|
||||
if(UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs > 0){
|
||||
for (int i=0;i<UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs;i++){
|
||||
harq_indication(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.harq_ind[j].sfn_sf),
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.harq_ind[j].sfn_sf),
|
||||
&UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list[i]);
|
||||
}
|
||||
|
||||
free(UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list);
|
||||
UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs=0;
|
||||
UL_RCC_INFO.harq_ind[j].header.message_id = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i=0; i < UL_info->harq_ind.harq_indication_body.number_of_harqs; i++)
|
||||
harq_indication(UL_info->module_id,
|
||||
@@ -151,6 +226,56 @@ void handle_ulsch(UL_IND_t *UL_info) {
|
||||
oai_nfapi_rx_ind(&UL_info->rx_ind);
|
||||
UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
|
||||
}
|
||||
} else if(NFAPI_MODE == NFAPI_MODE_VNF){
|
||||
for(uint8_t k = 0;k < NUM_NFPAI_SUBFRAME;k++){
|
||||
if((UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus>0) && (UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs>0)){
|
||||
for (i=0;i<UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus;i++) {
|
||||
for (j=0;j<UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs;j++) {
|
||||
// find crc_indication j corresponding rx_indication i
|
||||
LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x\n",
|
||||
j,UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i,UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
|
||||
if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti == UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti) {
|
||||
LOG_D(PHY, "UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d\n",
|
||||
j, UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
|
||||
if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
|
||||
LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
|
||||
rx_sdu(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
|
||||
(uint8_t *)NULL,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
|
||||
}
|
||||
else {
|
||||
LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
|
||||
rx_sdu(UL_info->module_id,
|
||||
UL_info->CC_id,
|
||||
NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
|
||||
NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
|
||||
}
|
||||
if(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data != NULL){
|
||||
free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data);
|
||||
}
|
||||
break;
|
||||
} //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti == UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
|
||||
} // for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
|
||||
} // for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
|
||||
free(UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list);
|
||||
free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list);
|
||||
UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs = 0;
|
||||
UL_RCC_INFO.crc_ind[k].header.message_id =0;
|
||||
UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus = 0;
|
||||
UL_RCC_INFO.rx_ind[k].header.message_id = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (UL_info->rx_ind.rx_indication_body.number_of_pdus>0 && UL_info->crc_ind.crc_indication_body.number_of_crcs>0) {
|
||||
for (i=0; i<UL_info->rx_ind.rx_indication_body.number_of_pdus; i++) {
|
||||
@@ -574,11 +699,11 @@ void UL_indication(UL_IND_t *UL_info) {
|
||||
Sched_Rsp_t *sched_info = &Sched_INFO[module_id][CC_id];
|
||||
IF_Module_t *ifi = if_inst[module_id];
|
||||
eNB_MAC_INST *mac = RC.mac[module_id];
|
||||
|
||||
LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n",
|
||||
UL_info->frame,UL_info->subframe,
|
||||
module_id,CC_id,
|
||||
UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.number_of_cqis,
|
||||
UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
|
||||
UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.cqi_indication_body.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
|
||||
|
||||
if(UL_info->frame==1023&&UL_info->subframe==6) { // dl scheduling (0,0)
|
||||
frame_cnt= (frame_cnt + 1)%7; // to prevent frame_cnt get too big
|
||||
@@ -604,6 +729,7 @@ void UL_indication(UL_IND_t *UL_info) {
|
||||
handle_sr(UL_info);
|
||||
handle_cqi(UL_info);
|
||||
handle_harq(UL_info);
|
||||
|
||||
// clear HI prior to handling ULSCH
|
||||
uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_id], UL_info->subframe);
|
||||
|
||||
@@ -634,6 +760,9 @@ void UL_indication(UL_IND_t *UL_info) {
|
||||
sched_info->UL_req = NULL;
|
||||
|
||||
sched_info->TX_req = &mac->TX_req[CC_id];
|
||||
pthread_mutex_lock(&lock_ue_freelist);
|
||||
sched_info->UE_release_req = &mac->UE_release_req;
|
||||
pthread_mutex_unlock(&lock_ue_freelist);
|
||||
#ifdef DUMP_FAPI
|
||||
dump_dl(sched_info);
|
||||
#endif
|
||||
|
||||
@@ -71,7 +71,7 @@ typedef struct{
|
||||
nfapi_sr_indication_t sr_ind;
|
||||
|
||||
/// CQI indication list
|
||||
nfapi_cqi_indication_body_t cqi_ind;
|
||||
nfapi_cqi_indication_t cqi_ind;
|
||||
|
||||
/// RACH indication list
|
||||
nfapi_rach_indication_t rach_ind;
|
||||
@@ -90,7 +90,27 @@ typedef struct{
|
||||
} UL_IND_t;
|
||||
|
||||
// Downlink subframe P7
|
||||
#define NUM_NFPAI_SUBFRAME 5
|
||||
typedef struct{
|
||||
/// harq indication list
|
||||
nfapi_harq_indication_t harq_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
/// crc indication list
|
||||
nfapi_crc_indication_t crc_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
/// SR indication list
|
||||
nfapi_sr_indication_t sr_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
/// CQI indication list
|
||||
nfapi_cqi_indication_t cqi_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
/// RACH indication list
|
||||
nfapi_rach_indication_t rach_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
/// RX indication
|
||||
nfapi_rx_indication_t rx_ind[NUM_NFPAI_SUBFRAME];
|
||||
|
||||
} UL_RCC_IND_t;
|
||||
|
||||
typedef struct{
|
||||
/// Module ID
|
||||
@@ -109,6 +129,8 @@ typedef struct{
|
||||
nfapi_hi_dci0_request_t *HI_DCI0_req;
|
||||
/// Pointers to DL SDUs
|
||||
nfapi_tx_request_t *TX_req;
|
||||
/// Pointers to ue_release
|
||||
nfapi_ue_release_request_t *UE_release_req;
|
||||
}Sched_Rsp_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -236,8 +236,8 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id, uint16_t frame,uint8_t subfram
|
||||
// change for mutiple UE's simulation.
|
||||
//pthread_mutex_lock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
|
||||
pthread_mutex_lock(&fill_ul_mutex.cqi_mutex);
|
||||
nfapi_cqi_indication_pdu_t *pdu = &UL_INFO->cqi_ind.cqi_pdu_list[UL_INFO->cqi_ind.number_of_cqis];
|
||||
nfapi_cqi_indication_raw_pdu_t *raw_pdu = &UL_INFO->cqi_ind.cqi_raw_pdu_list[UL_INFO->cqi_ind.number_of_cqis];
|
||||
nfapi_cqi_indication_pdu_t *pdu = &UL_INFO->cqi_ind.cqi_indication_body.cqi_pdu_list[UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis];
|
||||
nfapi_cqi_indication_raw_pdu_t *raw_pdu = &UL_INFO->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis];
|
||||
|
||||
pdu->rx_ue_information.tl.tag = NFAPI_RX_UE_INFORMATION_TAG;
|
||||
pdu->rx_ue_information.rnti = rnti;
|
||||
@@ -263,7 +263,7 @@ void fill_ulsch_cqi_indication_UE_MAC(int Mod_id, uint16_t frame,uint8_t subfram
|
||||
|
||||
|
||||
|
||||
UL_INFO->cqi_ind.number_of_cqis++;
|
||||
UL_INFO->cqi_ind.cqi_indication_body.number_of_cqis++;
|
||||
// change for mutiple UE's simulation.
|
||||
//pthread_mutex_unlock(&UE_mac_inst[Mod_id].UL_INFO_mutex);
|
||||
pthread_mutex_unlock(&fill_ul_mutex.cqi_mutex);
|
||||
|
||||
@@ -1114,6 +1114,8 @@ void put_UE_in_freelist(module_id_t mod_id, rnti_t rnti, boolean_t removeFlag) {
|
||||
free_list->UE_free_ctrl[free_list->tail_freelist].rnti = rnti;
|
||||
free_list->UE_free_ctrl[free_list->tail_freelist].removeContextFlg = removeFlag;
|
||||
free_list->num_UEs++;
|
||||
eNB_MAC->UE_release_req.ue_release_request_body.ue_release_request_TLVs_list[eNB_MAC->UE_release_req.ue_release_request_body.number_of_TLVs].rnti = rnti;
|
||||
eNB_MAC->UE_release_req.ue_release_request_body.number_of_TLVs++;
|
||||
free_list->tail_freelist = (free_list->tail_freelist + 1) % (NUMBER_OF_UE_MAX+1);
|
||||
pthread_mutex_unlock(&lock_ue_freelist);
|
||||
}
|
||||
@@ -1158,28 +1160,32 @@ void release_UE_in_freeList(module_id_t mod_id) {
|
||||
|
||||
for (i=0; i<MAX_MOBILES_PER_ENB; i++) {
|
||||
ulsch = eNB_PHY->ulsch[i];
|
||||
|
||||
if((ulsch != NULL) && (ulsch->rnti == rnti)) {
|
||||
void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch);
|
||||
LOG_I(RRC, "clean_eNb_ulsch ulsch[%d] UE %x\n", i, rnti);
|
||||
clean_eNb_ulsch(ulsch);
|
||||
}
|
||||
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i<MAX_MOBILES_PER_ENB; i++) {
|
||||
dlsch = eNB_PHY->dlsch[i][0];
|
||||
|
||||
if((dlsch != NULL) && (dlsch->rnti == rnti)) {
|
||||
void clean_eNb_dlsch(LTE_eNB_DLSCH_t *dlsch);
|
||||
LOG_I(RRC, "clean_eNb_dlsch dlsch[%d] UE %x \n", i, rnti);
|
||||
clean_eNb_dlsch(dlsch);
|
||||
}
|
||||
}
|
||||
ulsch = eNB_PHY->ulsch[i];
|
||||
if((ulsch != NULL) && (ulsch->rnti == rnti)) {
|
||||
void clean_eNb_ulsch(LTE_eNB_ULSCH_t *ulsch);
|
||||
LOG_I(RRC, "clean_eNb_ulsch ulsch[%d] UE %x\n", i, rnti);
|
||||
clean_eNb_ulsch(ulsch);
|
||||
}
|
||||
|
||||
for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
|
||||
if(eNB_PHY->uci_vars[i].rnti == rnti) {
|
||||
LOG_I(MAC, "clean eNb uci_vars[%d] UE %x \n",i, rnti);
|
||||
memset(&eNB_PHY->uci_vars[i],0,sizeof(LTE_eNB_UCI));
|
||||
}
|
||||
}
|
||||
|
||||
if (flexran_agent_get_rrc_xface(mod_id)) {
|
||||
flexran_agent_get_rrc_xface(mod_id)->flexran_agent_notify_ue_state_change(
|
||||
|
||||
@@ -257,6 +257,15 @@ rrc_eNB_S1AP_get_ue_ids(
|
||||
}
|
||||
|
||||
if (ue_desc_p != NULL) {
|
||||
struct s1ap_eNB_ue_context_s *s1ap_ue_context_p = NULL;
|
||||
if ((s1ap_ue_context_p = RB_REMOVE(s1ap_ue_map, &s1ap_eNB_instance_p->s1ap_ue_head, ue_desc_p)) != NULL) {
|
||||
LOG_E(RRC, "Removed UE context eNB_ue_s1ap_id %u\n", s1ap_ue_context_p->eNB_ue_s1ap_id);
|
||||
s1ap_eNB_free_ue_context(s1ap_ue_context_p);
|
||||
} else {
|
||||
LOG_E(RRC, "Removing UE context eNB_ue_s1ap_id %u: did not find context\n",ue_desc_p->eNB_ue_s1ap_id);
|
||||
}
|
||||
return NULL; //skip the operation below to avoid loop
|
||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
||||
if (ue_desc_p->ue_initial_id != UE_INITIAL_ID_INVALID) {
|
||||
result = rrc_eNB_S1AP_get_ue_ids(rrc_instance_pP, ue_desc_p->ue_initial_id, eNB_ue_s1ap_id);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user