diff --git a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h index 607786ee97..74c234a597 100755 --- a/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h +++ b/nfapi/open-nFAPI/nfapi/public_inc/fapi_nr_ue_interface.h @@ -67,8 +67,12 @@ typedef struct { #define FAPI_NR_TAG_LENGTH_PACKED_LEN 4 typedef struct { - fapi_nr_tl_t tl; - // common C-RNTI + // config + uint8_t cce_idx; + uint8_t aggregation_level; + uint16_t rnti; + + // dci pdu uint8_t dci_format; uint8_t frequency_domain_resouce_assignment; // 38.214 chapter 5.1.2.2 uint8_t time_domain_resource_assignment; // 38.214 chapter 5.1.2.1 diff --git a/openair1/PHY/defs_nr_UE.h b/openair1/PHY/defs_nr_UE.h index bbae8e5825..2f8c184048 100644 --- a/openair1/PHY/defs_nr_UE.h +++ b/openair1/PHY/defs_nr_UE.h @@ -991,6 +991,8 @@ typedef struct { NR_DL_FRAME_PARMS frame_parms_before_ho; NR_UE_COMMON common_vars; + nr_ue_if_module_t *if_inst; + // point to the current rxTx thread index uint8_t current_thread_id[10]; diff --git a/openair1/SCHED_NR_UE/fapi_l1.c b/openair1/SCHED_NR_UE/fapi_l1.c deleted file mode 100644 index b3ee5ca444..0000000000 --- a/openair1/SCHED_NR_UE/fapi_l1.c +++ /dev/null @@ -1,863 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file fapi_l1.c - * \brief functions for FAPI L1 interface - * \author R. Knopp - * \date 2017 - * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr - * \note - * \warning - */ - -#include "PHY/defs_eNB.h" -#include "PHY/LTE_TRANSPORT/transport_proto.h" -#include "SCHED/sched_eNB.h" - -#include "nfapi_interface.h" -#include "fapi_l1.h" - -int oai_nfapi_dl_config_req(nfapi_dl_config_request_t *dl_config_req); -int oai_nfapi_tx_req(nfapi_tx_request_t *tx_req); -int oai_nfapi_hi_dci0_req(nfapi_hi_dci0_request_t *hi_dci0_req); -int oai_nfapi_ul_config_req(nfapi_ul_config_request_t *ul_config_req); - -extern uint8_t nfapi_mode; - - -void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB, - int frame, int subframe, - eNB_rxtx_proc_t *proc, - nfapi_dl_config_request_pdu_t *dl_config_pdu) -{ - int idx = subframe&1; - LTE_eNB_PDCCH *pdcch_vars = &eNB->pdcch_vars[idx]; - nfapi_dl_config_dci_dl_pdu *pdu = &dl_config_pdu->dci_dl_pdu; - - LOG_D(PHY,"Frame %d, Subframe %d: DCI processing - populating pdcch_vars->dci_alloc[%d] proc:subframe_tx:%d idx:%d pdcch_vars->num_dci:%d\n",frame,subframe, pdcch_vars->num_dci, proc->subframe_tx, idx, pdcch_vars->num_dci); - - // copy dci configuration into eNB structure - fill_dci_and_dlsch(eNB,frame,subframe,proc,&pdcch_vars->dci_alloc[pdcch_vars->num_dci],pdu); - - LOG_D(PHY,"Frame %d, Subframe %d: DCI processing - populated pdcch_vars->dci_alloc[%d] proc:subframe_tx:%d idx:%d pdcch_vars->num_dci:%d\n",proc->frame_tx,proc->subframe_tx, pdcch_vars->num_dci, proc->subframe_tx, idx, pdcch_vars->num_dci); -} - -#ifdef Rel14 - -void handle_nfapi_mpdcch_pdu(PHY_VARS_eNB *eNB, - eNB_rxtx_proc_t *proc, - nfapi_dl_config_request_pdu_t *dl_config_pdu) -{ - int idx = proc->subframe_tx&1; - LTE_eNB_MPDCCH *mpdcch_vars = &eNB->mpdcch_vars[idx]; - nfapi_dl_config_mpdcch_pdu *pdu = &dl_config_pdu->mpdcch_pdu; - - LOG_D(PHY,"Frame %d, Subframe %d: MDCI processing\n",proc->frame_tx,proc->subframe_tx); - - // copy dci configuration into eNB structure - fill_mdci_and_dlsch(eNB,proc,&mpdcch_vars->mdci_alloc[mpdcch_vars->num_dci],pdu); -} - -#endif - -void handle_nfapi_hi_dci0_dci_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu) -{ - int idx = subframe&1; - LTE_eNB_PDCCH *pdcch_vars = &eNB->pdcch_vars[idx]; - - //LOG_D(PHY,"%s() SFN/SF:%04d%d Before num_dci:%d\n", __FUNCTION__,frame,subframe,pdcch_vars->num_dci); - - // copy dci configuration in to eNB structure - fill_dci0(eNB,frame,subframe,proc,&pdcch_vars->dci_alloc[pdcch_vars->num_dci], &hi_dci0_config_pdu->dci_pdu); -} - -void handle_nfapi_hi_dci0_hi_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu) -{ - LTE_eNB_PHICH *phich = &eNB->phich_vars[subframe&1]; - - // copy dci configuration in to eNB structure - LOG_D(PHY,"Received HI PDU with value %d (rbstart %d,cshift %d)\n", - hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.hi_value, - hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.resource_block_start, - hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms); - - // DJP - TODO FIXME - transmission power ignored - phich->config[phich->num_hi].hi = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.hi_value; - phich->config[phich->num_hi].first_rb = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.resource_block_start; - phich->config[phich->num_hi].n_DMRS = hi_dci0_config_pdu->hi_pdu.hi_pdu_rel8.cyclic_shift_2_for_drms; - phich->num_hi++; - AssertFatal(phich->num_hi<32,"Maximum number of phich reached in subframe\n"); -} - -void handle_nfapi_bch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, - nfapi_dl_config_request_pdu_t *dl_config_pdu, - uint8_t *sdu) -{ - nfapi_dl_config_bch_pdu_rel8_t *rel8 = &dl_config_pdu->bch_pdu.bch_pdu_rel8; - - AssertFatal(rel8->length == 3, "BCH PDU has length %d != 3\n",rel8->length); - - //LOG_D(PHY,"bch_pdu: %x,%x,%x\n",sdu[0],sdu[1],sdu[2]); - eNB->pbch_pdu[0] = sdu[2]; - eNB->pbch_pdu[1] = sdu[1]; - eNB->pbch_pdu[2] = sdu[0]; - - // adjust transmit amplitude here based on NFAPI info -} - -#ifdef Rel14 -extern uint32_t localRIV2alloc_LUT6[32]; -extern uint32_t localRIV2alloc_LUT25[512]; -extern uint32_t localRIV2alloc_LUT50_0[1600]; -extern uint32_t localRIV2alloc_LUT50_1[1600]; -extern uint32_t localRIV2alloc_LUT100_0[6000]; -extern uint32_t localRIV2alloc_LUT100_1[6000]; -extern uint32_t localRIV2alloc_LUT100_2[6000]; -extern uint32_t localRIV2alloc_LUT100_3[6000]; -#endif - -void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_dl_config_request_pdu_t *dl_config_pdu, - uint8_t codeword_index, - uint8_t *sdu) -{ - nfapi_dl_config_dlsch_pdu_rel8_t *rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8; -#ifndef Rel8 - nfapi_dl_config_dlsch_pdu_rel10_t *rel10 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10; -#endif -#ifdef Rel14 - nfapi_dl_config_dlsch_pdu_rel13_t *rel13 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13; -#endif - LTE_eNB_DLSCH_t *dlsch0=NULL,*dlsch1=NULL; - LTE_DL_eNB_HARQ_t *dlsch0_harq=NULL,*dlsch1_harq=NULL; - int UE_id; - int harq_pid; - - UE_id = find_dlsch(rel8->rnti,eNB,SEARCH_EXIST_OR_FREE); - AssertFatal(UE_id!=-1,"no free or exiting dlsch_context\n"); - AssertFatal(UE_id= %d(NUMBER_OF_UE_MAX)\n",UE_id,NUMBER_OF_UE_MAX); - - dlsch0 = eNB->dlsch[UE_id][0]; - dlsch1 = eNB->dlsch[UE_id][1]; - -#ifdef Rel14 - if ((rel13->pdsch_payload_type < 2) && (rel13->ue_type>0)) dlsch0->harq_ids[subframe] = 0; -#endif - - harq_pid = dlsch0->harq_ids[subframe]; - AssertFatal((harq_pid>=0) && (harq_pid<8),"harq_pid %d not in 0...7 frame:%d subframe:%d subframe(TX):%d rnti:%x UE_id:%d dlsch0[harq_ids:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d]\n", - harq_pid, - frame,subframe, - proc->subframe_tx,rel8->rnti,UE_id, - dlsch0->harq_ids[0], - dlsch0->harq_ids[1], - dlsch0->harq_ids[2], - dlsch0->harq_ids[3], - dlsch0->harq_ids[4], - dlsch0->harq_ids[5], - dlsch0->harq_ids[6], - dlsch0->harq_ids[7], - dlsch0->harq_ids[8], - dlsch0->harq_ids[9] - ); - dlsch0_harq = dlsch0->harq_processes[harq_pid]; - dlsch1_harq = dlsch1->harq_processes[harq_pid]; - AssertFatal(dlsch0_harq!=NULL,"dlsch_harq is null\n"); - - // compute DL power control parameters - eNB->pdsch_config_dedicated[UE_id].p_a = rel8->pa; - - if (dlsch0->active){ - computeRhoA_eNB(rel8->pa, dlsch0,dlsch0_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB); - computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch0,dlsch0_harq->dl_power_off); - } - if (dlsch1->active){ - computeRhoA_eNB(rel8->pa, dlsch1,dlsch1_harq->dl_power_off, eNB->frame_parms.nb_antenna_ports_eNB); - computeRhoB_eNB(rel8->pa,eNB->frame_parms.pdsch_config_common.p_b,eNB->frame_parms.nb_antenna_ports_eNB,dlsch1,dlsch1_harq->dl_power_off); - } - - dlsch0_harq->pdsch_start = eNB->pdcch_vars[subframe & 1].num_pdcch_symbols; - - if (dlsch0_harq->round==0) { //get pointer to SDU if this a new SDU - AssertFatal(sdu!=NULL,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d : sdu is null for pdu_index %d dlsch0_harq[round:%d SFN/SF:%d%d pdu:%p mcs:%d ndi:%d pdschstart:%d]\n", - frame,subframe, - proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid, - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index,dlsch0_harq->round,dlsch0_harq->frame,dlsch0_harq->subframe,dlsch0_harq->pdu,dlsch0_harq->mcs,dlsch0_harq->ndi,dlsch0_harq->pdsch_start); - if (rel8->rnti != 0xFFFF) LOG_D(PHY,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d, subframe %d]: programming dlsch for round 0, rnti %x, UE_id %d, harq_pid %d\n", - frame,subframe,proc->frame_tx,proc->subframe_tx,rel8->rnti,UE_id,harq_pid); - if (codeword_index == 0) dlsch0_harq->pdu = sdu; - else dlsch1_harq->pdu = sdu; - } - else { - if (rel8->rnti != 0xFFFF) LOG_D(PHY,"NFAPI: SFN/SF:%04d%d proc:TX:[frame %d, subframe %d]: programming dlsch for round %d, rnti %x, UE_id %d, harq_pid %d\n", - frame,subframe,proc->frame_tx,proc->subframe_tx,dlsch0_harq->round, - rel8->rnti,UE_id,harq_pid); - } - -#ifdef Rel14 - dlsch0->sib1_br_flag=0; - - if ((rel13->pdsch_payload_type <2) && (rel13->ue_type>0)) { // this is a BR/CE UE and SIB1-BR/SI-BR - dlsch0->rnti = 0xFFFF; - dlsch0->Kmimo = 1; - dlsch0->Mdlharq = 4; - dlsch0->Nsoft = 25344; - - if (rel13->pdsch_payload_type == 0) dlsch0->sib1_br_flag=1; - - // configure PDSCH - switch (eNB->frame_parms.N_RB_DL) { - case 6: - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT6[rel8->resource_block_coding]; - break; - case 15: - AssertFatal(1==0,"15 PRBs not supported for now\n"); - break; - case 25: - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT25[rel8->resource_block_coding]; - break; - case 50: - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT50_0[rel8->resource_block_coding]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT50_1[rel8->resource_block_coding]; - break; - case 75: - AssertFatal(1==0,"75 PRBs not supported for now\n"); - break; - case 100: - dlsch0_harq->rb_alloc[0] = localRIV2alloc_LUT100_0[rel8->resource_block_coding]; - dlsch0_harq->rb_alloc[1] = localRIV2alloc_LUT100_1[rel8->resource_block_coding]; - dlsch0_harq->rb_alloc[2] = localRIV2alloc_LUT100_2[rel8->resource_block_coding]; - dlsch0_harq->rb_alloc[3] = localRIV2alloc_LUT100_3[rel8->resource_block_coding]; - } - - dlsch0->active = 1; - - dlsch0_harq->nb_rb = 6; - dlsch0_harq->vrb_type = LOCALIZED; - dlsch0_harq->rvidx = rel8->redundancy_version; - dlsch0_harq->Nl = 1; - dlsch0_harq->mimo_mode = (eNB->frame_parms.nb_antenna_ports_eNB == 1) ? SISO : ALAMOUTI; - dlsch0_harq->dl_power_off = 1; - dlsch0_harq->round = 0; - dlsch0_harq->status = ACTIVE; - dlsch0_harq->TBS = rel8->length<<3; - dlsch0_harq->Qm = rel8->modulation; - dlsch0_harq->codeword = 0; - dlsch0_harq->pdsch_start = rel10->pdsch_start; - } - dlsch0->i0 = rel13->initial_transmission_sf_io; -#endif - -#ifdef Rel14 - LOG_D(PHY,"dlsch->i0:%04x dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]\n", - dlsch0->i0, - dlsch0_harq->pdsch_start, dlsch0_harq->nb_rb, dlsch0_harq->vrb_type, dlsch0_harq->rvidx, dlsch0_harq->Nl, dlsch0_harq->mimo_mode, dlsch0_harq->dl_power_off, dlsch0_harq->round, dlsch0_harq->status, dlsch0_harq->TBS, dlsch0_harq->Qm, dlsch0_harq->codeword, dlsch0_harq->rb_alloc[0], - rel8->length - ); -#else - LOG_D(PHY,"dlsch0_harq[pdsch_start:%d nb_rb:%d vrb_type:%d rvidx:%d Nl:%d mimo_mode:%d dl_power_off:%d round:%d status:%d TBS:%d Qm:%d codeword:%d rb_alloc:%d] rel8[length:%d]\n", - dlsch0_harq->pdsch_start, dlsch0_harq->nb_rb, dlsch0_harq->vrb_type, dlsch0_harq->rvidx, dlsch0_harq->Nl, dlsch0_harq->mimo_mode, dlsch0_harq->dl_power_off, dlsch0_harq->round, dlsch0_harq->status, dlsch0_harq->TBS, dlsch0_harq->Qm, dlsch0_harq->codeword, dlsch0_harq->rb_alloc[0], - rel8->length - ); -#endif -} - -uint16_t to_beta_offset_harqack[16]={16,20,25,32,40,50,64,80,101,127,160,248,400,640,1008,8}; - -void handle_ulsch_harq_pdu( - PHY_VARS_eNB *eNB, - int UE_id, - nfapi_ul_config_request_pdu_t *ul_config_pdu, - nfapi_ul_config_ulsch_harq_information *harq_information, - uint16_t frame, - uint8_t subframe) -{ - nfapi_ul_config_ulsch_pdu_rel8_t *rel8 = &ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8; - - LTE_eNB_ULSCH_t *ulsch=eNB->ulsch[UE_id]; - LTE_UL_eNB_HARQ_t *ulsch_harq; - - int harq_pid = rel8->harq_process_number; - ulsch_harq = ulsch->harq_processes[harq_pid]; - ulsch_harq->frame = frame; - ulsch_harq->subframe = subframe; - ulsch_harq->O_ACK = harq_information->harq_information_rel10.harq_size; - ulsch->beta_offset_harqack_times8 = to_beta_offset_harqack[harq_information->harq_information_rel10.delta_offset_harq]; -} - -uint16_t to_beta_offset_ri[16]={9,13,16,20,25,32,40,50,64,80,101,127,160,0,0,0}; -uint16_t to_beta_offset_cqi[16]={0,0,9,10,11,13,14,16,18,20,23,25,28,32,40,50}; - -void handle_ulsch_cqi_ri_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe) -{ - nfapi_ul_config_cqi_ri_information_rel9_t *rel9 = &ul_config_pdu->ulsch_cqi_ri_pdu.cqi_ri_information.cqi_ri_information_rel9; - - LTE_eNB_ULSCH_t *ulsch = eNB->ulsch[UE_id]; - int harq_pid = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number; - LTE_UL_eNB_HARQ_t *ulsch_harq = ulsch->harq_processes[harq_pid]; - - ulsch_harq->frame = frame; - ulsch_harq->subframe = subframe; - ulsch_harq->O_RI = rel9->aperiodic_cqi_pmi_ri_report.cc[0].ri_size; - ulsch_harq->Or1 = rel9->aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[0]; - if (ulsch_harq->O_RI>1) ulsch_harq->Or2 = rel9->aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[1]; - ulsch->beta_offset_ri_times8 = to_beta_offset_ri[rel9->delta_offset_ri]; - ulsch->beta_offset_cqi_times8 = to_beta_offset_cqi[rel9->delta_offset_cqi]; - LOG_D(PHY,"Filling ulsch_cqi_ri information for frame %d, subframe %d : O_RI %d, Or1 %d, beta_offset_cqi_times8 %d (%d)\n", - frame,subframe,ulsch_harq->O_RI,ulsch_harq->Or1,ulsch->beta_offset_cqi_times8, - rel9->delta_offset_cqi); -} - -void handle_ulsch_cqi_harq_ri_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe) -{ - nfapi_ul_config_cqi_ri_information_rel9_t *rel9 = &ul_config_pdu->ulsch_cqi_harq_ri_pdu.cqi_ri_information.cqi_ri_information_rel9; - - LTE_eNB_ULSCH_t *ulsch = eNB->ulsch[UE_id]; - int harq_pid = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.harq_process_number; - LTE_UL_eNB_HARQ_t *ulsch_harq = ulsch->harq_processes[harq_pid]; - nfapi_ul_config_ulsch_harq_information *harq_information = &ul_config_pdu->ulsch_cqi_harq_ri_pdu.harq_information; - - ulsch_harq->frame = frame; - ulsch_harq->subframe = subframe; - ulsch_harq->O_RI = rel9->aperiodic_cqi_pmi_ri_report.cc[0].ri_size; - ulsch_harq->Or1 = rel9->aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[0]; - ulsch_harq->O_ACK = harq_information->harq_information_rel10.harq_size; - - if (ulsch_harq->O_RI>1) ulsch_harq->Or2 = rel9->aperiodic_cqi_pmi_ri_report.cc[0].dl_cqi_pmi_size[1]; - - ulsch->beta_offset_harqack_times8 = to_beta_offset_harqack[harq_information->harq_information_rel10.delta_offset_harq]; - ulsch->beta_offset_ri_times8 = to_beta_offset_ri[rel9->delta_offset_ri]; - ulsch->beta_offset_cqi_times8 = to_beta_offset_cqi[rel9->delta_offset_cqi]; -} - -void handle_uci_harq_information(PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci,nfapi_ul_config_harq_information *harq_information) -{ - if (eNB->frame_parms.frame_type == FDD) { - uci->num_pucch_resources = harq_information->harq_information_rel9_fdd.number_of_pucch_resources; - - LOG_D(PHY,"Programming UCI HARQ mode %d : size %d in (%d,%d)\n", - harq_information->harq_information_rel9_fdd.ack_nack_mode, - harq_information->harq_information_rel9_fdd.harq_size, - uci->frame,uci->subframe); - - if ((harq_information->harq_information_rel9_fdd.ack_nack_mode == 0) && - (harq_information->harq_information_rel9_fdd.harq_size == 1)) { - uci->pucch_fmt = pucch_format1a; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else if ((harq_information->harq_information_rel9_fdd.ack_nack_mode == 0) && - (harq_information->harq_information_rel9_fdd.harq_size == 2)) { - uci->pucch_fmt = pucch_format1b; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else if ((harq_information->harq_information_rel9_fdd.ack_nack_mode == 1) && - (harq_information->harq_information_rel9_fdd.harq_size == 2)) { - uci->pucch_fmt = pucch_format1b_csA2; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - uci->n_pucch_1[1][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_1; - uci->n_pucch_1[1][1] = harq_information->harq_information_rel11.n_pucch_2_1; - } - else if ((harq_information->harq_information_rel9_fdd.ack_nack_mode == 1) && - (harq_information->harq_information_rel9_fdd.harq_size == 3)) { - uci->pucch_fmt = pucch_format1b_csA3; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - uci->n_pucch_1[1][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_1; - uci->n_pucch_1[1][1] = harq_information->harq_information_rel11.n_pucch_2_1; - uci->n_pucch_1[2][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_2; - uci->n_pucch_1[2][1] = harq_information->harq_information_rel11.n_pucch_2_2; - } - else if ((harq_information->harq_information_rel9_fdd.ack_nack_mode == 1) && - (harq_information->harq_information_rel9_fdd.harq_size == 4)) { - uci->pucch_fmt = pucch_format1b_csA4; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - uci->n_pucch_1[1][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_1; - uci->n_pucch_1[1][1] = harq_information->harq_information_rel11.n_pucch_2_1; - uci->n_pucch_1[2][0] = harq_information->harq_information_rel9_fdd.n_pucch_1_2; - uci->n_pucch_1[2][1] = harq_information->harq_information_rel11.n_pucch_2_2; - } - else if (harq_information->harq_information_rel9_fdd.ack_nack_mode == 2) { - uci->pucch_fmt = pucch_format3; - uci->n_pucch_3[0] = harq_information->harq_information_rel9_fdd.n_pucch_1_0; - uci->n_pucch_3[1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else AssertFatal(1==0,"unsupported HARQ mode %d\n",harq_information->harq_information_rel9_fdd.ack_nack_mode); - } - else { // TDD - uci->num_pucch_resources = harq_information->harq_information_rel10_tdd.number_of_pucch_resources; - - if (harq_information->harq_information_rel10_tdd.ack_nack_mode == 0) {//bundling - - uci->pucch_fmt = harq_information->harq_information_rel10_tdd.harq_size==1 ? pucch_format1a : pucch_format1b; - uci->tdd_bundling = 1; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else if ((harq_information->harq_information_rel10_tdd.ack_nack_mode == 1) && //multiplexing - (uci->num_pucch_resources == 1)) { - uci->pucch_fmt = harq_information->harq_information_rel10_tdd.harq_size==1 ? pucch_format1a : pucch_format1b; - uci->tdd_bundling = 0; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else if ((harq_information->harq_information_rel10_tdd.ack_nack_mode == 1) && //multiplexing M>1 - (uci->num_pucch_resources > 1)) { - uci->pucch_fmt = pucch_format1b; - uci->tdd_bundling = 0; - uci->n_pucch_1[0][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_0; - uci->n_pucch_1[0][1] = harq_information->harq_information_rel11.n_pucch_2_0; - uci->n_pucch_1[1][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_1; - uci->n_pucch_1[1][1] = harq_information->harq_information_rel11.n_pucch_2_1; - uci->n_pucch_1[2][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_2; - uci->n_pucch_1[2][1] = harq_information->harq_information_rel11.n_pucch_2_2; - uci->n_pucch_1[3][0] = harq_information->harq_information_rel10_tdd.n_pucch_1_3; - uci->n_pucch_1[3][1] = harq_information->harq_information_rel11.n_pucch_2_3; - } - else if (harq_information->harq_information_rel10_tdd.ack_nack_mode == 2) { - uci->pucch_fmt = pucch_format3; - uci->n_pucch_3[0] = harq_information->harq_information_rel10_tdd.n_pucch_1_0; - uci->n_pucch_3[1] = harq_information->harq_information_rel11.n_pucch_2_0; - } - else AssertFatal(1==0,"unsupported HARQ mode %d\n",harq_information->harq_information_rel10_tdd.ack_nack_mode); - } -} - -void handle_uci_sr_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active) -{ - LTE_eNB_UCI *uci = &eNB->uci_vars[UE_id]; - - uci->frame = frame; - uci->subframe = subframe; - uci->rnti = ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti; - uci->type = SR; - uci->pucch_fmt = pucch_format1; - uci->num_antenna_ports = 1; - uci->num_pucch_resources = 1; - uci->n_pucch_1_0_sr[0] = ul_config_pdu->uci_sr_pdu.sr_information.sr_information_rel8.pucch_index; - uci->srs_active = srs_active; - uci->active = 1; - - LOG_D(PHY,"Programming UCI SR rnti %x, pucch1_0 %d for (%d,%d)\n", - uci->rnti,uci->n_pucch_1_0_sr[0],frame,subframe); -} - -void handle_uci_sr_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active) -{ - LTE_eNB_UCI *uci = &eNB->uci_vars[UE_id]; - - uci->frame = frame; - uci->subframe = subframe; - uci->rnti = ul_config_pdu->uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti; - uci->type = HARQ_SR; - uci->num_antenna_ports = 1; - uci->num_pucch_resources = 1; - uci->n_pucch_1_0_sr[0] = ul_config_pdu->uci_sr_harq_pdu.sr_information.sr_information_rel8.pucch_index; - uci->srs_active = srs_active; - uci->active = 1; - - handle_uci_harq_information(eNB,uci,&ul_config_pdu->uci_sr_harq_pdu.harq_information); -} - -void handle_uci_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active) -{ - LTE_eNB_UCI *uci = &eNB->uci_vars[UE_id]; - - LOG_D(PHY,"Frame %d, Subframe %d: Programming UCI_HARQ process (type %d)\n",frame,subframe,HARQ); - uci->frame = frame; - uci->subframe = subframe; - uci->rnti = ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti; - uci->type = HARQ; - uci->srs_active = srs_active; - uci->num_antenna_ports = ul_config_pdu->uci_harq_pdu.harq_information.harq_information_rel11.num_ant_ports; - - handle_uci_harq_information(eNB,uci,&ul_config_pdu->uci_harq_pdu.harq_information); - - uci->active=1; -} - -void handle_srs_pdu(PHY_VARS_eNB *eNB,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe) -{ - int i; - - for (i=0;isoundingrs_ul_config_dedicated[i].active==1) continue; - - eNB->soundingrs_ul_config_dedicated[i].active = 1; - eNB->soundingrs_ul_config_dedicated[i].frame = frame; - eNB->soundingrs_ul_config_dedicated[i].subframe = subframe; - eNB->soundingrs_ul_config_dedicated[i].rnti = ul_config_pdu->srs_pdu.srs_pdu_rel8.rnti; - eNB->soundingrs_ul_config_dedicated[i].srs_Bandwidth = ul_config_pdu->srs_pdu.srs_pdu_rel8.srs_bandwidth; - eNB->soundingrs_ul_config_dedicated[i].srs_HoppingBandwidth = ul_config_pdu->srs_pdu.srs_pdu_rel8.srs_hopping_bandwidth; - eNB->soundingrs_ul_config_dedicated[i].freqDomainPosition = ul_config_pdu->srs_pdu.srs_pdu_rel8.frequency_domain_position; - eNB->soundingrs_ul_config_dedicated[i].transmissionComb = ul_config_pdu->srs_pdu.srs_pdu_rel8.transmission_comb; - eNB->soundingrs_ul_config_dedicated[i].srs_ConfigIndex = ul_config_pdu->srs_pdu.srs_pdu_rel8.i_srs; - eNB->soundingrs_ul_config_dedicated[i].cyclicShift = ul_config_pdu->srs_pdu.srs_pdu_rel8.sounding_reference_cyclic_shift; - break; - } - AssertFatal(iulsch_pdu.ulsch_pdu_rel8; - - int8_t UE_id; - - // check if we have received a dci for this ue and ulsch descriptor is configured - - if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) { - AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No existing UE ULSCH for rnti %x\n",rel8->rnti); - LOG_D(PHY,"Applying UL config for UE %d, rnti %x for frame %d, subframe %d, modulation %d, rvidx %d\n", UE_id,rel8->rnti,frame,subframe,rel8->modulation_type,rel8->redundancy_version); - - fill_ulsch(eNB,&ul_config_pdu->ulsch_pdu,frame,subframe); - - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE) { - AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_harq_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - - fill_ulsch(eNB,&ul_config_pdu->ulsch_harq_pdu.ulsch_pdu,frame,subframe); - handle_ulsch_harq_pdu(eNB, UE_id, ul_config_pdu, - &ul_config_pdu->ulsch_harq_pdu.harq_information, frame, subframe); - - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE) { - AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti, - eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - fill_ulsch(eNB,&ul_config_pdu->ulsch_cqi_ri_pdu.ulsch_pdu,frame,subframe); - handle_ulsch_cqi_ri_pdu(eNB,UE_id,ul_config_pdu,frame,subframe); - - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE) { - AssertFatal((UE_id = find_ulsch(ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti, - eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE ULSCH for rnti %x\n",ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu.ulsch_pdu_rel8.rnti); - fill_ulsch(eNB,&ul_config_pdu->ulsch_cqi_harq_ri_pdu.ulsch_pdu,frame,subframe); - handle_ulsch_cqi_harq_ri_pdu(eNB,UE_id,ul_config_pdu,frame,subframe); - handle_ulsch_harq_pdu(eNB, UE_id, ul_config_pdu, - &ul_config_pdu->ulsch_cqi_harq_ri_pdu.harq_information, frame, subframe); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE) { - AssertFatal((UE_id = find_uci(ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti, - proc->frame_tx,proc->subframe_tx,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE UCI for rnti %x\n",ul_config_pdu->uci_harq_pdu.ue_information.ue_information_rel8.rnti); - handle_uci_harq_pdu(eNB,UE_id,ul_config_pdu,frame,subframe,srs_present); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE) { - AssertFatal(1==0,"NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE not handled yet\n"); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE) { - AssertFatal(1==0,"NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE not handled yet\n"); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE) { - AssertFatal(1==0,"NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE not handled yet\n"); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE) { - AssertFatal((UE_id = find_uci(ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti, - proc->frame_tx,proc->subframe_tx,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE UCI for rnti %x\n",ul_config_pdu->uci_sr_pdu.ue_information.ue_information_rel8.rnti); - handle_uci_sr_pdu(eNB,UE_id,ul_config_pdu,frame,subframe,srs_present); - - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE) { - AssertFatal((UE_id = find_uci(rel8->rnti,proc->frame_tx,proc->subframe_tx,eNB,SEARCH_EXIST_OR_FREE))>=0, - "No available UE UCI for rnti %x\n",ul_config_pdu->uci_sr_harq_pdu.ue_information.ue_information_rel8.rnti); - handle_uci_sr_harq_pdu(eNB,UE_id,ul_config_pdu,frame,subframe,srs_present); - } - else if (ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_SRS_PDU_TYPE) { - handle_srs_pdu(eNB,ul_config_pdu,frame,subframe); - } -} - -void TX_request(){ - -} - -void DL_config(){ - -} - -void UL_config(){ - -} - -void CONFIG_request(){ - - -} - -void schedule_response(Sched_Rsp_t *Sched_INFO) -{ - PHY_VARS_eNB *eNB; - eNB_rxtx_proc_t *proc; - // copy data from L2 interface into L1 structures - module_id_t Mod_id = Sched_INFO->module_id; - uint8_t CC_id = Sched_INFO->CC_id; - nfapi_dl_config_request_t *DL_req = Sched_INFO->DL_req; - nfapi_hi_dci0_request_t *HI_DCI0_req = Sched_INFO->HI_DCI0_req; - nfapi_ul_config_request_t *UL_req = Sched_INFO->UL_req; - nfapi_tx_request_t *TX_req = Sched_INFO->TX_req; - frame_t frame = Sched_INFO->frame; - sub_frame_t subframe = Sched_INFO->subframe; - LTE_DL_FRAME_PARMS *fp; - uint8_t ul_subframe; - int ul_frame; - int harq_pid; - LTE_UL_eNB_HARQ_t *ulsch_harq; - - AssertFatal(RC.eNB!=NULL,"RC.eNB is null\n"); - AssertFatal(RC.eNB[Mod_id]!=NULL,"RC.eNB[%d] is null\n",Mod_id); - AssertFatal(RC.eNB[Mod_id][CC_id]!=NULL,"RC.eNB[%d][%d] is null\n",Mod_id,CC_id); - - - - eNB = RC.eNB[Mod_id][CC_id]; - fp = &eNB->frame_parms; - proc = &eNB->proc.proc_rxtx[0]; - - /* TODO: check that following line is correct - in the meantime it is disabled */ - //if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)==SF_UL)) return; - - ul_subframe = pdcch_alloc2ul_subframe(fp,subframe); - ul_frame = pdcch_alloc2ul_frame(fp,frame,subframe); - - // DJP - subframe assert will fail - not sure why yet - // DJP - AssertFatal(proc->subframe_tx == subframe, "Current subframe %d != NFAPI subframe %d\n",proc->subframe_tx,subframe); - // DJP - AssertFatal(proc->subframe_tx == subframe, "Current frame %d != NFAPI frame %d\n",proc->frame_tx,frame); - - uint8_t number_pdcch_ofdm_symbols = DL_req->dl_config_request_body.number_pdcch_ofdm_symbols; - - uint8_t number_dl_pdu = DL_req->dl_config_request_body.number_pdu; - uint8_t number_hi_dci0_pdu = HI_DCI0_req->hi_dci0_request_body.number_of_dci+HI_DCI0_req->hi_dci0_request_body.number_of_hi; - uint8_t number_ul_pdu = UL_req!=NULL ? UL_req->ul_config_request_body.number_of_pdus : 0; - - nfapi_dl_config_request_pdu_t *dl_config_pdu; - nfapi_hi_dci0_request_pdu_t *hi_dci0_req_pdu; - nfapi_ul_config_request_pdu_t *ul_config_pdu; - - int i; - - eNB->pdcch_vars[subframe&1].num_pdcch_symbols = number_pdcch_ofdm_symbols; - eNB->pdcch_vars[subframe&1].num_dci = 0; - eNB->phich_vars[subframe&1].num_hi = 0; - - LOG_D(PHY,"NFAPI: Sched_INFO:SFN/SF:%04d%d DL_req:SFN/SF:%04d%d:dl_pdu:%d tx_req:SFN/SF:%04d%d:pdus:%d hi_dci0:SFN/SF:%04d%d:pdus:%d ul_cfg:SFN/SF:%04d%d:pdus:%d num_pdcch_symbols:%d\n", - frame,subframe, - NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),number_dl_pdu, - NFAPI_SFNSF2SFN(TX_req->sfn_sf),NFAPI_SFNSF2SF(TX_req->sfn_sf),TX_req->tx_request_body.number_of_pdus, - NFAPI_SFNSF2SFN(HI_DCI0_req->sfn_sf),NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf),number_hi_dci0_pdu, - NFAPI_SFNSF2SFN(UL_req->sfn_sf),NFAPI_SFNSF2SF(UL_req->sfn_sf),number_ul_pdu, - eNB->pdcch_vars[subframe&1].num_pdcch_symbols); - - int do_oai =0; - int dont_send =0; - /* TODO: check the following test - in the meantime it is put back as it was before */ - //if ((ul_subframe<10)&& - // (subframe_select(fp,ul_subframe)==SF_UL)) { // This means that there is an ul_subframe that can be configured here - if (ul_subframe<10) { // This means that there is an ul_subframe that can be configured here - LOG_D(PHY,"NFAPI: Clearing dci allocations for potential UL subframe %d\n",ul_subframe); - - harq_pid = subframe2harq_pid(fp,ul_frame,ul_subframe); - - // clear DCI allocation maps for new subframe - - for (i=0; iulsch[i]) { - ulsch_harq = eNB->ulsch[i]->harq_processes[harq_pid]; - ulsch_harq->dci_alloc=0; - ulsch_harq->rar_alloc=0; - } - } - } - for (i=0;idl_config_request_body.dl_config_pdu_list[i]; - //LOG_D(PHY,"NFAPI: dl_pdu %d : type %d\n",i,dl_config_pdu->pdu_type); - switch (dl_config_pdu->pdu_type) { - case NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE: - handle_nfapi_dci_dl_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu); - eNB->pdcch_vars[NFAPI_SFNSF2SF(DL_req->sfn_sf)&1].num_dci++; - //LOG_E(PHY,"Incremented num_dci:%d but already set??? dl_config:num_dci:%d\n", eNB->pdcch_vars[subframe&1].num_dci, number_dci); - do_oai=1; - break; - case NFAPI_DL_CONFIG_BCH_PDU_TYPE: - AssertFatal(dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_indextx_request_body.number_of_pdus, - "bch_pdu_rel8.pdu_index>=TX_req->number_of_pdus (%d>%d)\n", - dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index, - TX_req->tx_request_body.number_of_pdus); - eNB->pbch_configured=1; - do_oai=1; - //LOG_D(PHY,"%s() NFAPI_DL_CONFIG_BCH_PDU_TYPE TX:%d/%d RX:%d/%d TXREQ:%d/%d\n", - //__FUNCTION__, proc->frame_tx, proc->subframe_tx, proc->frame_rx, proc->subframe_rx, NFAPI_SFNSF2SFN(TX_req->sfn_sf), NFAPI_SFNSF2SF(TX_req->sfn_sf)); - - - handle_nfapi_bch_pdu(eNB,proc,dl_config_pdu, - TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index].segments[0].segment_data); - break; - case NFAPI_DL_CONFIG_MCH_PDU_TYPE: - // handle_nfapi_mch_dl_pdu(eNB,dl_config_pdu); - break; - case NFAPI_DL_CONFIG_DLSCH_PDU_TYPE: - { - nfapi_dl_config_dlsch_pdu_rel8_t *dlsch_pdu_rel8 = &dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8; - uint16_t pdu_index = dlsch_pdu_rel8->pdu_index; - uint16_t tx_pdus = TX_req->tx_request_body.number_of_pdus; - uint16_t invalid_pdu = pdu_index == -1; - uint8_t *sdu = invalid_pdu ? NULL : pdu_index >= tx_pdus ? NULL : TX_req->tx_request_body.tx_pdu_list[pdu_index].segments[0].segment_data; - - LOG_D(PHY,"%s() [PDU:%d] NFAPI_DL_CONFIG_DLSCH_PDU_TYPE SFN/SF:%04d%d TX:%d/%d RX:%d/%d transport_blocks:%d pdu_index:%d sdu:%p\n", - __FUNCTION__, i, - NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf), - proc->frame_tx, proc->subframe_tx, - proc->frame_rx, proc->subframe_rx, - dlsch_pdu_rel8->transport_blocks, pdu_index, sdu); - - /* - AssertFatal(dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_indextx_request_body.number_of_pdus, - "dlsch_pdu_rel8.pdu_index>=TX_req->number_of_pdus (%d>%d)\n", - dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index, - TX_req->tx_request_body.number_of_pdus); - */ - AssertFatal((dlsch_pdu_rel8->transport_blocks<3) && - (dlsch_pdu_rel8->transport_blocks>0), - "dlsch_pdu_rel8->transport_blocks = %d not in [1,2]\n", - dlsch_pdu_rel8->transport_blocks); - if (1)//sdu != NULL) - { - handle_nfapi_dlsch_pdu(eNB,NFAPI_SFNSF2SFN(DL_req->sfn_sf),NFAPI_SFNSF2SF(DL_req->sfn_sf),proc,dl_config_pdu, dlsch_pdu_rel8->transport_blocks-1, sdu); - } - else - { - dont_send=1; - - LOG_E(MAC,"%s() NFAPI_DL_CONFIG_DLSCH_PDU_TYPE sdu is NULL DL_CFG:SFN/SF:%d:pdu_index:%d TX_REQ:SFN/SF:%d:pdus:%d\n", __FUNCTION__, NFAPI_SFNSF2DEC(DL_req->sfn_sf), pdu_index, NFAPI_SFNSF2DEC(TX_req->sfn_sf), tx_pdus); - } - - // Send the data first so that the DL_CONFIG can just pluck it out of the buffer - // DJP - OAI was here - moved to bottom - do_oai=1; - - /* - if (dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti == eNB->preamble_list[0].preamble_rel8.rnti) {// is RAR pdu - - LOG_D(PHY,"Frame %d, Subframe %d: Received LTE RAR pdu, programming based on UL Grant\n",frame,subframe); - generate_eNB_ulsch_params_from_rar(eNB, - TX_req->tx_request_body.tx_pdu_list[dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index].segments[0].segment_data, - frame, - subframe); - - } */ - } - break; - case NFAPI_DL_CONFIG_PCH_PDU_TYPE: - // handle_nfapi_pch_pdu(eNB,dl_config_pdu); - break; - case NFAPI_DL_CONFIG_PRS_PDU_TYPE: - // handle_nfapi_prs_pdu(eNB,dl_config_pdu); - break; - case NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE: - // handle_nfapi_csi_rs_pdu(eNB,dl_config_pdu); - break; - case NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE: - // handle_nfapi_epdcch_pdu(eNB,dl_config_pdu); - break; -#ifdef Rel14 - case NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE: -#ifdef Rel14 - handle_nfapi_mpdcch_pdu(eNB,proc,dl_config_pdu); - eNB->mpdcch_vars[subframe&1].num_dci++; -#endif - break; -#endif - } - } - - if (nfapi_mode && do_oai && !dont_send) { - oai_nfapi_tx_req(Sched_INFO->TX_req); - - oai_nfapi_dl_config_req(Sched_INFO->DL_req); // DJP - .dl_config_request_body.dl_config_pdu_list[0]); // DJP - FIXME TODO - yuk - only copes with 1 pdu - } - - if (nfapi_mode && number_hi_dci0_pdu!=0) { - oai_nfapi_hi_dci0_req(HI_DCI0_req); - eNB->pdcch_vars[NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf)&1].num_dci=0; - eNB->pdcch_vars[NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf)&1].num_pdcch_symbols=0; - } - - for (i=0;ihi_dci0_request_body.hi_dci0_pdu_list[i]; - - LOG_D(PHY,"NFAPI: hi_dci0_pdu %d : type %d\n",i,hi_dci0_req_pdu->pdu_type); - - switch (hi_dci0_req_pdu->pdu_type) { - - case NFAPI_HI_DCI0_DCI_PDU_TYPE: - - handle_nfapi_hi_dci0_dci_pdu(eNB,NFAPI_SFNSF2SFN(HI_DCI0_req->sfn_sf),NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf),proc,hi_dci0_req_pdu); - - eNB->pdcch_vars[NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf)&1].num_dci++; - break; - - case NFAPI_HI_DCI0_HI_PDU_TYPE: - handle_nfapi_hi_dci0_hi_pdu(eNB,NFAPI_SFNSF2SFN(HI_DCI0_req->sfn_sf),NFAPI_SFNSF2SF(HI_DCI0_req->sfn_sf),proc,hi_dci0_req_pdu); - break; - } - } - - if (nfapi_mode) { - if (number_ul_pdu>0) - { - //LOG_D(PHY, "UL_CONFIG to send to PNF\n"); - oai_nfapi_ul_config_req(UL_req); - UL_req->ul_config_request_body.number_of_pdus=0; - number_ul_pdu=0; - } - } - else { - for (i=0;iul_config_request_body.ul_config_pdu_list[i]; - LOG_D(PHY,"NFAPI: ul_pdu %d : type %d\n",i,ul_config_pdu->pdu_type); - AssertFatal(ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE || - ul_config_pdu->pdu_type == NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE - , - "Optional UL_PDU type %d not supported\n",ul_config_pdu->pdu_type); - handle_nfapi_ul_pdu(eNB,proc,ul_config_pdu,UL_req->sfn_sf>>4,UL_req->sfn_sf&0xf,UL_req->ul_config_request_body.srs_present); - } - } -} diff --git a/openair1/SCHED_NR_UE/fapi_l1.h b/openair1/SCHED_NR_UE/fapi_l1.h deleted file mode 100644 index efb028f464..0000000000 --- a/openair1/SCHED_NR_UE/fapi_l1.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file fapi_l1.h - * \brief function prototypes for FAPI L1 interface - * \author R. Knopp - * \date 2017 - * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr - * \note - * \warning - */ - -#include "PHY/defs_eNB.h" -#include "PHY/phy_extern.h" -#include "PHY/LTE_TRANSPORT/transport_proto.h" -#include "SCHED/sched_eNB.h" -#include "SCHED/sched_common.h" -#include "nfapi_interface.h" - -void fill_uci_harq_indication(PHY_VARS_eNB *eNB,LTE_eNB_UCI *uci,int frame,int subframe,uint8_t *harq_ack,uint8_t tdd_mapping_mode,uint16_t tdd_multiplexing_mask); -void fill_ulsch_harq_indication(PHY_VARS_eNB *eNB,LTE_UL_eNB_HARQ_t *ulsch_harq,uint16_t rnti, int frame,int subframe,int bundling); -void fill_ulsch_cqi_indication(PHY_VARS_eNB *eNB,uint16_t frame,uint8_t subframe,LTE_UL_eNB_HARQ_t *ulsch_harq,uint16_t rnti); -void fill_sr_indication(PHY_VARS_eNB *eNB,uint16_t rnti,int frame,int subframe,uint32_t stat); -void fill_rx_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe); -void fill_crc_indication(PHY_VARS_eNB *eNB,int UE_id,int frame,int subframe,uint8_t crc_flag); -void handle_nfapi_dci_dl_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc,nfapi_dl_config_request_pdu_t *dl_config_pdu); -void handle_nfapi_mpdcch_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,nfapi_dl_config_request_pdu_t *dl_config_pdu); -void handle_nfapi_hi_dci0_dci_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu); -void handle_nfapi_hi_dci0_hi_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_hi_dci0_request_pdu_t *hi_dci0_config_pdu); -void handle_nfapi_dlsch_pdu(PHY_VARS_eNB *eNB,int frame,int subframe,eNB_rxtx_proc_t *proc, - nfapi_dl_config_request_pdu_t *dl_config_pdu, - uint8_t codeword_index, - uint8_t *sdu); -void handle_nfapi_ul_pdu(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc, - nfapi_ul_config_request_pdu_t *ul_config_pdu, - uint16_t frame,uint8_t subframe,uint8_t srs_present); - -void handle_ulsch_harq_pdu( - PHY_VARS_eNB *eNB, - int UE_id, - nfapi_ul_config_request_pdu_t *ul_config_pdu, - nfapi_ul_config_ulsch_harq_information *harq_information, - uint16_t frame, - uint8_t subframe); - -void handle_ulsch_cqi_ri_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe); - -void handle_uci_harq_information(PHY_VARS_eNB *eNB, LTE_eNB_UCI *uci,nfapi_ul_config_harq_information *harq_information); - -void handle_uci_sr_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active); - -void handle_uci_sr_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active); -void handle_uci_harq_pdu(PHY_VARS_eNB *eNB,int UE_id,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe,uint8_t srs_active); - -void handle_srs_pdu(PHY_VARS_eNB *eNB,nfapi_ul_config_request_pdu_t *ul_config_pdu,uint16_t frame,uint8_t subframe); - -void schedule_response(Sched_Rsp_t *Sched_INFO); diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c index 62b3b5da76..04c2c3c361 100755 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.c @@ -19,13 +19,13 @@ * contact@openairinterface.org */ -/*! \file fapi_nr_ue_l1.c +/* \file fapi_nr_ue_l1.c * \brief functions for NR UE FAPI-like interface - * \author R. Knopp + * \author R. Knopp, K.H. HSU * \date 2018 * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr * \note * \warning */ diff --git a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h index f60f474899..9b7b87a18c 100755 --- a/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h +++ b/openair1/SCHED_NR_UE/fapi_nr_ue_l1.h @@ -19,13 +19,13 @@ * contact@openairinterface.org */ -/*! \file fapi_nr_ue_l1.c +/* \file fapi_nr_ue_l1.c * \brief functions for FAPI L1 interface - * \author R. Knopp + * \author R. Knopp, K.H. HSU * \date 2018 * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr * \note * \warning */ diff --git a/openair2/LAYER2/NR_MAC_UE/config_ue.c b/openair2/LAYER2/NR_MAC_UE/config_ue.c index be7a9434b2..5f245de72d 100755 --- a/openair2/LAYER2/NR_MAC_UE/config_ue.c +++ b/openair2/LAYER2/NR_MAC_UE/config_ue.c @@ -19,15 +19,17 @@ * contact@openairinterface.org */ -/*! \file config.c +/* \file config.c * \brief UE and eNB configuration performed by RRC or as a consequence of RRC procedures - * \author Navid Nikaein and Raymond Knopp - * \date 2010 - 2014 + * \author R. Knopp, K.H. HSU + * \date 2018 * \version 0.1 - * \email: navid.nikaein@eurecom.fr - * @ingroup _mac - + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ + #include "defs.h" #include "proto.h" diff --git a/openair2/LAYER2/NR_MAC_UE/extern.h b/openair2/LAYER2/NR_MAC_UE/extern.h deleted file mode 100644 index abe787b2b0..0000000000 --- a/openair2/LAYER2/NR_MAC_UE/extern.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file extern.h -* \brief mac externs -* \author Navid Nikaein and Raymond Knopp -* \date 2010 - 2014 -* \version 1.0 -* \email navid.nikaein@eurecom.fr -* @ingroup _mac - -*/ - -#ifndef __MAC_EXTERN_H__ -#define __MAC_EXTERN_H__ - - -#ifdef USER_MODE -//#include "stdio.h" -#endif //USER_MODE -//#include "PHY/defs.h" -#include "PHY/defs_nr_UE.h" -#include "defs.h" -#include "COMMON/mac_rrc_primitives.h" -#ifdef PHY_EMUL -//#include "SIMULATION/simulation_defs.h" -#endif //PHY_EMUL -//#include "PHY_INTERFACE/defs.h" -//#include "RRC/LITE/defs.h" - -extern const uint32_t BSR_TABLE[BSR_TABLE_SIZE]; -//extern uint32_t EBSR_Level[63]; -extern const uint32_t Extended_BSR_TABLE[BSR_TABLE_SIZE]; -//extern uint32_t Extended_BSR_TABLE[63]; ----currently not used - -extern const uint8_t cqi2fmt0_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]; - -extern const uint8_t cqi2fmt1x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]; - -extern const uint8_t cqi2fmt2x_agg[MAX_SUPPORTED_BW][CQI_VALUE_RANGE]; - -extern UE_MAC_INST *UE_mac_inst; -extern eNB_MAC_INST *eNB_mac_inst; -extern eNB_RRC_INST *eNB_rrc_inst; -extern UE_RRC_INST *UE_rrc_inst; -extern UE_MAC_INST *ue_mac_inst; -extern MAC_RLC_XFACE *Mac_rlc_xface; -extern uint8_t Is_rrc_registered; - -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][MAX_NUM_CCs][NUMBER_OF_UE_MAX]; // eNBxUE = 8x8 - - - -//#ifndef USER_MODE -//extern MAC_xface *mac_xface; -extern RRC_XFACE *Rrc_xface; - -extern uint8_t Is_rrc_registered; - -#ifndef PHY_EMUL -#ifndef PHYSIM -#define NB_INST 1 -#else -extern unsigned char NB_INST; -#endif -extern unsigned char NB_eNB_INST; -extern unsigned char NB_UE_INST; -extern unsigned char NB_RN_INST; -extern unsigned short NODE_ID[1]; -extern void* bigphys_malloc(int); -#else -extern EMULATION_VARS *Emul_vars; -#endif //PHY_EMUL - - -extern int cqi_to_mcs[16]; - -extern uint32_t RRC_CONNECTION_FLAG; - -extern uint8_t rb_table[33]; - -extern DCI0_5MHz_TDD_1_6_t UL_alloc_pdu; - -extern DCI1A_5MHz_TDD_1_6_t RA_alloc_pdu; -extern DCI1A_5MHz_TDD_1_6_t DLSCH_alloc_pdu1A; -extern DCI1A_5MHz_TDD_1_6_t BCCH_alloc_pdu; - -extern DCI1A_5MHz_TDD_1_6_t CCCH_alloc_pdu; -extern DCI1_5MHz_TDD_t DLSCH_alloc_pdu; - -extern DCI0_5MHz_FDD_t UL_alloc_pdu_fdd; - -extern DCI1A_5MHz_FDD_t DLSCH_alloc_pdu1A_fdd; -extern DCI1A_5MHz_FDD_t RA_alloc_pdu_fdd; -extern DCI1A_5MHz_FDD_t BCCH_alloc_pdu_fdd; - -extern DCI1A_5MHz_FDD_t CCCH_alloc_pdu_fdd; -extern DCI1_5MHz_FDD_t DLSCH_alloc_pdu_fdd; - -extern DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu1; -extern DCI2_5MHz_2A_TDD_t DLSCH_alloc_pdu2; -extern DCI1E_5MHz_2A_M10PRB_TDD_t DLSCH_alloc_pdu1E; - -#endif //DEF_H - - diff --git a/openair2/LAYER2/NR_MAC_UE/mac.h b/openair2/LAYER2/NR_MAC_UE/mac.h index e4935b1fea..a8e7a05609 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac.h +++ b/openair2/LAYER2/NR_MAC_UE/mac.h @@ -19,21 +19,17 @@ * contact@openairinterface.org */ -/*! \file LAYER2/MAC/defs.h -* \brief MAC data structures, constant, and function prototype -* \author Navid Nikaein and Raymond Knopp -* \date 2011 -* \version 0.5 -* \email navid.nikaein@eurecom.fr - -*/ -/** @defgroup _oai2 openair2 Reference Implementation - * @ingroup _ref_implementation_ - * @{ +/* \file mac.h + * \brief MAC data structures, constant, and function prototype + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ -/*@}*/ - #ifndef __LAYER2_NR_UE_MAC_DEFS_H__ #define __LAYER2_NR_UE_MAC_DEFS_H__ diff --git a/openair2/LAYER2/NR_MAC_UE/mac_defs.h b/openair2/LAYER2/NR_MAC_UE/mac_defs.h index 1a00dfbd92..b5278ffacb 100755 --- a/openair2/LAYER2/NR_MAC_UE/mac_defs.h +++ b/openair2/LAYER2/NR_MAC_UE/mac_defs.h @@ -19,21 +19,17 @@ * contact@openairinterface.org */ -/*! \file LAYER2/MAC/defs.h -* \brief MAC data structures, constant, and function prototype -* \author Navid Nikaein and Raymond Knopp -* \date 2011 -* \version 0.5 -* \email navid.nikaein@eurecom.fr - -*/ -/** @defgroup _oai2 openair2 Reference Implementation - * @ingroup _ref_implementation_ - * @{ +/* \file mac_defs.h + * \brief MAC data structures, constant, and function prototype + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ -/*@}*/ - #ifndef __LAYER2_NR_MAC_DEFS_H__ #define __LAYER2_NR_MAC_DEFS_H__ diff --git a/openair2/LAYER2/NR_MAC_UE/mac_vars.c b/openair2/LAYER2/NR_MAC_UE/mac_vars.c index 3192d6dcc9..d995bdb2d0 100644 --- a/openair2/LAYER2/NR_MAC_UE/mac_vars.c +++ b/openair2/LAYER2/NR_MAC_UE/mac_vars.c @@ -19,15 +19,16 @@ * contact@openairinterface.org */ -/*! \file vars.h -* \brief mac vars -* \author Navid Nikaein and Raymond Knopp -* \date 2010 - 2014 -* \version 1.0 -* \email navid.nikaein@eurecom.fr -* @ingroup _mac - -*/ +/* \file vars.h + * \brief MAC Layer variables + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ #include "mac_defs.h" diff --git a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c index 8a4bdecd7a..ea053a390c 100644 --- a/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c +++ b/openair2/LAYER2/NR_MAC_UE/main_ue_nr.c @@ -19,14 +19,15 @@ * contact@openairinterface.org */ -/*! \file main.c +/* \file main_ue_nr.c * \brief top init of Layer 2 - * \author Navid Nikaein and Raymond Knopp - * \date 2010 - 2014 - * \version 1.0 - * \email: navid.nikaein@eurecom.fr - * @ingroup _mac - + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ #include "defs.h" diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c index 6b5fb4a5f3..4dbeff40c6 100755 --- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c +++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c @@ -19,15 +19,17 @@ * contact@openairinterface.org */ -/*! \file ue_procedures.c +/* \file ue_procedures.c * \brief procedures related to UE - * \author Navid Nikaein and Raymond Knopp - * \date 2010 - 2014 - * \version 1 - * \email: navid.nikaein@eurecom.fr - * @ingroup _mac - + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ + #include "proto.h" #include "RRC/NR_UE/rrc_proto.h" diff --git a/openair2/LAYER2/NR_MAC_UE/proto.h b/openair2/LAYER2/NR_MAC_UE/proto.h index 387bbc4e86..167a02c0eb 100755 --- a/openair2/LAYER2/NR_MAC_UE/proto.h +++ b/openair2/LAYER2/NR_MAC_UE/proto.h @@ -19,13 +19,17 @@ * contact@openairinterface.org */ -/*! \file LAYER2/MAC/proto.h +/* \file proto.h * \brief MAC functions prototypes for eNB and UE - * \author Navid Nikaein and Raymond Knopp - * \date 2010 - 2014 - * \email navid.nikaein@eurecom.fr - * \version 1.0 + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ + #ifndef __LAYER2_MAC_PROTO_H__ #define __LAYER2_MAC_PROTO_H__ diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c index d77759e3df..ff191fdce6 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.c @@ -19,13 +19,13 @@ * contact@openairinterface.org */ -/*! \file NR_IF_Module.c +/* \file NR_IF_Module.c * \brief functions for NR UE FAPI-like interface - * \author R. Knopp + * \author R. Knopp, K.H. HSU * \date 2018 * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr * \note * \warning */ @@ -102,7 +102,7 @@ nr_ue_if_module_t *nr_ue_if_module_init(uint32_t module_id){ memset((void*)nr_ue_if_module_inst[module_id],0,sizeof(nr_ue_if_module_t)); nr_ue_if_module_inst[module_id]->CC_mask=0; - nr_ue_if_module_register_dl_indication(module_id, nr_ue_dl_indication); + nr_ue_if_module_inst[module_id]->dl_indication = nr_ue_dl_indication; } return nr_ue_if_module_inst[module_id]; diff --git a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h index f407428ee6..0da7ddc118 100755 --- a/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h +++ b/openair2/NR_UE_PHY_INTERFACE/NR_IF_Module.h @@ -19,16 +19,17 @@ * contact@openairinterface.org */ -/*! \file openair2/PHY_INTERFACE/IF_Module.h -* \brief data structures for PHY/MAC interface modules -* \author EURECOM/NTUST -* \date 2018 -* \version 0.1 -* \company Eurecom -* \email: raymond.knopp@eurecom.fr -* \note -* \warning -*/ +/* \file NR_IF_Module.h + * \brief data structures for L1/L2 interface modules + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ + #ifndef __NR_IF_MODULE_H__ #define __NR_IF_MODULE_H__ diff --git a/openair2/RRC/NR_UE/L2_interface_ue.c b/openair2/RRC/NR_UE/L2_interface_ue.c index f5a5670eae..dea5301a44 100644 --- a/openair2/RRC/NR_UE/L2_interface_ue.c +++ b/openair2/RRC/NR_UE/L2_interface_ue.c @@ -19,13 +19,15 @@ * contact@openairinterface.org */ -/*! \file l2_interface.c +/* \file l2_interface_ue.c * \brief layer 2 interface, used to support different RRC sublayer - * \author Raymond Knopp and Navid Nikaein - * \date 2010-2014 - * \version 1.0 - * \company Eurecom - * \email: raymond.knopp@eurecom.fr + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ #include "rrc_defs.h" diff --git a/openair2/RRC/NR_UE/main_ue.c b/openair2/RRC/NR_UE/main_ue.c index 70d1cbb998..c3557a068d 100644 --- a/openair2/RRC/NR_UE/main_ue.c +++ b/openair2/RRC/NR_UE/main_ue.c @@ -1,4 +1,34 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ +/* \file main_ue.c + * \brief RRC layer top level initialization + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ #include "defs.h" #include "rrc_proto.h" diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index 10f5a00266..69ee5046a8 100755 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -19,13 +19,15 @@ * contact@openairinterface.org */ -/*! \file rrc_UE.c - * \brief rrc procedures for UE - * \author Navid Nikaein and Raymond Knopp - * \date 2011 - 2014 - * \version 1.0 - * \company Eurecom - * \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr +/* \file rrc_UE.c + * \brief RRC procedures + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ #define RRC_UE diff --git a/openair2/RRC/NR_UE/rrc_defs.h b/openair2/RRC/NR_UE/rrc_defs.h index b999d88fe9..7e8bcd3933 100644 --- a/openair2/RRC/NR_UE/rrc_defs.h +++ b/openair2/RRC/NR_UE/rrc_defs.h @@ -19,14 +19,16 @@ * contact@openairinterface.org */ -/*! \file RRC/LITE/defs.h -* \brief RRC struct definitions and function prototypes -* \author Navid Nikaein and Raymond Knopp -* \date 2010 - 2014 -* \version 1.0 -* \company Eurecom -* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr -*/ +/* \file rrc_defs.h + * \brief RRC structures/types definition + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ #ifndef __OPENAIR_NR_RRC_DEFS_H__ #define __OPENAIR_NR_RRC_DEFS_H__ diff --git a/openair2/RRC/NR_UE/rrc_list.h b/openair2/RRC/NR_UE/rrc_list.h index 5bad103dd4..32a452e4a2 100644 --- a/openair2/RRC/NR_UE/rrc_list.h +++ b/openair2/RRC/NR_UE/rrc_list.h @@ -1,3 +1,35 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* \file rrc_list.h + * \brief linked list implementation for ToAddModList mechanism in RRC layer + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ + #ifndef _RRC_LIST_H_ #define _RRC_LIST_H_ diff --git a/openair2/RRC/NR_UE/rrc_proto.h b/openair2/RRC/NR_UE/rrc_proto.h index 4f9106b977..5f932f1675 100644 --- a/openair2/RRC/NR_UE/rrc_proto.h +++ b/openair2/RRC/NR_UE/rrc_proto.h @@ -19,17 +19,17 @@ * contact@openairinterface.org */ -/*! \file proto.h +/* \file proto.h * \brief RRC functions prototypes for eNB and UE - * \author Navid Nikaein and Raymond Knopp - * \date 2010 - 2014 - * \email navid.nikaein@eurecom.fr - * \version 1.0 - - */ -/** \addtogroup _rrc - * @{ + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning */ + #ifndef _RRC_PROTO_H_ #define _RRC_PROTO_H_ diff --git a/openair2/RRC/NR_UE/rrc_vars.h b/openair2/RRC/NR_UE/rrc_vars.h index 8df7d7174b..5c74e5b5a8 100644 --- a/openair2/RRC/NR_UE/rrc_vars.h +++ b/openair2/RRC/NR_UE/rrc_vars.h @@ -19,14 +19,16 @@ * contact@openairinterface.org */ -/*! \file vars.hles -* \brief rrc variables -* \author Raymond Knopp and Navid Nikaein -* \date 2013 -* \version 1.0 -* \company Eurecom -* \email: navid.nikaein@eurecom.fr -*/ +/* \file vars.h + * \brief RRC layer variables + * \author R. Knopp, K.H. HSU + * \date 2018 + * \version 0.1 + * \company Eurecom / NTUST + * \email: knopp@eurecom.fr, kai-hsiang.hsu@eurecom.fr + * \note + * \warning + */ #ifndef __OPENAIR_NR_RRC_VARS_H__ diff --git a/targets/RT/USER/nr-ue.c b/targets/RT/USER/nr-ue.c index cb80fede45..0ba0888b16 100644 --- a/targets/RT/USER/nr-ue.c +++ b/targets/RT/USER/nr-ue.c @@ -40,8 +40,8 @@ #undef MALLOC //there are two conflicting definitions, so we better make sure we don't use it at all //#undef FRAME_LENGTH_COMPLEX_SAMPLES //there are two conflicting definitions, so we better make sure we don't use it at all +#include "fapi_nr_ue_l1.h" #include "PHY/phy_extern_nr_ue.h" -//#include "LAYER2/NR_MAC_UE/extern.h" #include "LAYER2/NR_MAC_UE/proto.h" #include "SCHED_NR/extern.h" @@ -220,6 +220,9 @@ void init_UE(int nb_inst) LOG_I(PHY,"Initializing memory for UE instance %d (%p)\n",inst,PHY_vars_UE_g[inst]); PHY_vars_UE_g[inst][0] = init_nr_ue_vars(NULL,inst,0); + AssertFatal((UE->if_inst = IF_Module_init(inst)) != NULL,"Can't register interface module\n"); + UE->if_inst->scheduled_response = nr_ue_scheduled_response; + UE->if_inst->phy_config_request = nr_ue_phy_config_request; AssertFatal(0 == pthread_create(&UE->proc.pthread_ue, &UE->proc.attr_ue,