From 0422bf8bb9bbf6ff55273f7b9075970230da8514 Mon Sep 17 00:00:00 2001 From: matzakos <panagiotis.matzakos@eurecom.fr> Date: Mon, 4 Sep 2017 10:12:55 +0200 Subject: [PATCH] Definition of the UE MAC interface: IF_Module_UE.h, IF_Module_UE.c, UE_MAC_interface.h and the supporting functions. --- openair1/PHY/INIT/defs.h | 2 + openair1/PHY/INIT/lte_init.c | 13 +- openair1/PHY/defs.h | 1 + openair1/SCHED/phy_procedures_lte_ue.c | 73 +++- openair2/LAYER2/MAC/config.c | 49 +++ openair2/LAYER2/MAC/ue_procedures.c | 2 + openair2/PHY_INTERFACE/IF_Module_UE.c | 77 ++++ openair2/PHY_INTERFACE/IF_Module_UE.h | 177 ++++++++ openair2/PHY_INTERFACE/UE_MAC_interface.h | 500 ++++++++++++++++++++++ 9 files changed, 891 insertions(+), 3 deletions(-) create mode 100644 openair2/PHY_INTERFACE/IF_Module_UE.c create mode 100644 openair2/PHY_INTERFACE/IF_Module_UE.h create mode 100644 openair2/PHY_INTERFACE/UE_MAC_interface.h diff --git a/openair1/PHY/INIT/defs.h b/openair1/PHY/INIT/defs.h index 36d8aa00be..229c24f96f 100644 --- a/openair1/PHY/INIT/defs.h +++ b/openair1/PHY/INIT/defs.h @@ -356,6 +356,8 @@ void phy_cleanup(void); void phy_config_request(PHY_Config_t *phy_config); +void phy_config_request_ue(UE_PHY_Config_t* UE_config_INFO); + int init_frame_parms(LTE_DL_FRAME_PARMS *frame_parms,uint8_t osf); void dump_frame_parms(LTE_DL_FRAME_PARMS *frame_parms); diff --git a/openair1/PHY/INIT/lte_init.c b/openair1/PHY/INIT/lte_init.c index 81a8478e33..259b952ac0 100644 --- a/openair1/PHY/INIT/lte_init.c +++ b/openair1/PHY/INIT/lte_init.c @@ -59,7 +59,6 @@ int l1_north_init_eNB() { } - void phy_config_request(PHY_Config_t *phy_config) { uint8_t Mod_id = phy_config->Mod_id; @@ -255,6 +254,18 @@ void phy_config_request(PHY_Config_t *phy_config) { LOG_I(PHY,"eNB %d/%d configured\n",Mod_id,CC_id); } + +/* Panos: New function of the UE MAC interface: This function +should copy the values assigned to the interface parameters +(within MAC/config.c) to the PHY frame configuration. It should be called at the end of +config::rrc_mac_config_request_ue()*/ + +void phy_config_request_ue (UE_PHY_Config_t* UE_config_INFO) +{ + +} + + void phy_config_sib1_ue(uint8_t Mod_id,int CC_id, uint8_t eNB_id, TDD_Config_t *tdd_Config, diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 22df648149..00d5605cfb 100644 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -58,6 +58,7 @@ #include "msc.h" #include "openair2/PHY_INTERFACE/IF_Module.h" +#include "openair2/PHY_INTERFACE/IF_Module_UE.h" //#include <complex.h> #include "assertions.h" diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 046e37097c..21b8ae9843 100644 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -503,6 +503,7 @@ void ue_compute_srs_occasion(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id { int Mod_id = ue->Mod_id; int CC_id = ue->CC_id; + // Panos: Substitute call to ue_get_SR() with the filled ue_SR_config->SR_payload (0, or 1). SR_payload = ue_get_SR(Mod_id, CC_id, frame_tx, @@ -1338,6 +1339,8 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin // ask L2 for RACH transport if ((mode != rx_calib_ue) && (mode != rx_calib_ue_med) && (mode != rx_calib_ue_byp) && (mode != no_L2_connect) ) { LOG_D(PHY,"Getting PRACH resources\n"); + // Panos: Substitute the call to ue_get_rach with ue->prach_resources[eNB_id] = ue_rach_config, assuming that + // ue_get_rach() will have been called from the MAC layer. ue->prach_resources[eNB_id] = ue_get_rach(ue->Mod_id, ue->CC_id, frame_tx, @@ -1416,6 +1419,7 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin } if (ue->mac_enabled==1){ + // Panos: Substitute with fill_Tx_indication(ue->Mod_id, ue->CC_id, frame_tx, eNB_id, UE_MAC_Tx_IND_Msg1_TYPE) Msg1_transmitted(ue->Mod_id, ue->CC_id, frame_tx, @@ -1684,6 +1688,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB if (ue->mac_enabled == 1) { // signal MAC that Msg3 was sent + // Substitute call to this function by call to fill_Tx_indication (UE_MAC_Tx_IND_Msg3_TYPE) Msg3_transmitted(Mod_id, CC_id, frame_tx, @@ -1699,6 +1704,10 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->round==0) { //if (ue->ulsch[eNB_id]->harq_processes[harq_pid]->calibration_flag == 0) { access_mode=SCHEDULED_ACCESS; + + // Panos: Remove the call to ue_get_sdu here and use + // the corresponding Tx.request PDU, instead of ulsch_input_buffer, below. + ue_get_sdu(Mod_id, CC_id, frame_tx, @@ -2536,6 +2545,8 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin frame_tx += pbch_phase; if (ue->mac_enabled==1) { + // Panos:Substitute this call with fill_bch_indication(sync=1) + dl_phy_sync_success(ue->Mod_id,frame_rx,eNB_id, ue->UE_mode[eNB_id]==NOT_SYNCHED ? 1 : 0); } @@ -2617,7 +2628,11 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin ue->pbch_vars[eNB_id]->pdu_errors_conseq++; ue->pbch_vars[eNB_id]->pdu_errors++; - if (ue->mac_enabled == 1) rrc_out_of_sync_ind(ue->Mod_id,frame_rx,eNB_id); + if (ue->mac_enabled == 1) { + // Panos: Substitute call to rrc_out_of_sync_ind() with fill_bch_incication(sync=0). + + rrc_out_of_sync_ind(ue->Mod_id,frame_rx,eNB_id); + } else AssertFatal(ue->pbch_vars[eNB_id]->pdu_errors_conseq<100, "More that 100 consecutive PBCH errors! Exiting!\n"); } @@ -2637,6 +2652,55 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PBCH_PROCEDURES, VCD_FUNCTION_OUT); } +// Panos: New function supporting the MAC interface +void fill_bch_indication(module_id_t module_idP, + frame_t frameP, + unsigned char eNB_index, + uint8_t first_sync, + uint8_t sync) +{ + +} + +// Panos: New function supporting the MAC interface +void fill_dlsch_indication(module_id_t module_idP, + uint8_t CC_id, + frame_t frameP, + sub_frame_t subframeP, + uint8_t* sdu, + uint16_t sdu_len, + uint8_t eNB_index) +{ + +} + +// Panos: New function supporting the MAC interface +void fill_dlsch_rar_indication(module_id_t module_idP, + int CC_id, + frame_t frameP, + rnti_t ra_rnti, + uint8_t* dlsch_buffer, + rnti_t* t_crnti, + uint8_t preamble_index, + uint8_t* selected_rar_buffer) +{ + +} + +// PANOS: New function supporting the MAC interface + +void fill_Tx_indication(module_id_t module_idP,uint8_t CC_id,frame_t frameP, uint8_t eNB_id, uint8_t Tx_ind_type) +{ + switch (Tx_ind_type) + { + case UE_MAC_Tx_IND_Msg1_TYPE: + break; + case UE_MAC_Tx_IND_Msg3_TYPE: + break; + } +} + + int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t abstraction_flag) { @@ -3217,6 +3281,7 @@ void process_rar(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, int eNB_id, runmode_t mo subframe_rx, ue->prach_resources[eNB_id]->ra_PreambleIndex); + // Panos: Substitute call to ue_process_rar() with call to fill_dlsch_rar_indication() timing_advance = ue_process_rar(ue->Mod_id, ue->CC_id, frame_rx, @@ -3507,6 +3572,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, if (ue->mac_enabled == 1) { switch (pdsch) { case PDSCH: + // Panos: Substitute call to ue_send_sdu() with call to fill_dlsch_indication() ue_send_sdu(ue->Mod_id, CC_id, frame_rx, @@ -3516,6 +3582,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, eNB_id); break; case SI_PDSCH: + // Panos: Substitute call with call to fill_dlsch_indication() ue_decode_si(ue->Mod_id, CC_id, frame_rx, @@ -3524,7 +3591,8 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3); break; case P_PDSCH: - ue_decode_p(ue->Mod_id, + // Panos: Substitute call with call to fill_dlsch_indication() + ue_decode_p(ue->Mod_id, CC_id, frame_rx, eNB_id, @@ -3532,6 +3600,7 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue, ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3); break; case RA_PDSCH: + // Panos: Substitute with call to fill_dlsch_rar_indication() process_rar(ue,proc,eNB_id,mode,abstraction_flag); break; case PDSCH1: diff --git a/openair2/LAYER2/MAC/config.c b/openair2/LAYER2/MAC/config.c index 0d9980ed10..bcf3dc0d6d 100644 --- a/openair2/LAYER2/MAC/config.c +++ b/openair2/LAYER2/MAC/config.c @@ -264,6 +264,7 @@ void config_sib1(int Mod_idP, } + int power_off_dB[6] = {78,118,140,170,188,200}; void config_sib2(int Mod_idP, @@ -414,6 +415,10 @@ void config_sib2(int Mod_idP, } + + + + void config_dedicated(int Mod_idP, int CC_idP, uint16_t rnti, @@ -671,6 +676,47 @@ int rrc_mac_config_req_eNB(module_id_t Mod_idP, return(0); } + +// P: New function supporting the MAC interface +void config_sib1_ue() +{ + +} + +// P: New function supporting the MAC interface +void config_sib2_ue() +{ + +} + +// P: New function supporting the MAC interface +void config_meas_ue() +{ + +} + +// P: New function supporting the MAC interface +// to substitute call to phy_config_afterHO_ue(). +void config_afterHO_ue() +{ + +} + +// P: New function supporting the MAC interface +void config_sib13_ue() +{ + +} + + +// P: New function supporting the MAC interface +void config_dedicated_ue() +{ + +} + + + int rrc_mac_config_req_ue( module_id_t Mod_idP, @@ -1021,6 +1067,9 @@ rrc_mac_config_req_ue( #endif VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); + // Panos: Call to the phy_config_request_ue() function of the interface to copy the UE_PHY_Config_t interface + // configuration to the PHY common and dedicated configuration originating from RRC. + return(0); } diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c index 3d9cc64f24..a000a17fb1 100644 --- a/openair2/LAYER2/MAC/ue_procedures.c +++ b/openair2/LAYER2/MAC/ue_procedures.c @@ -1781,6 +1781,8 @@ for (lcid=DCCH; (lcid < MAX_NUM_LCID) && (is_all_lcid_processed == FALSE) ; lcid VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GET_SDU, VCD_FUNCTION_OUT); stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu); + // Panos: Tx_request should be filled from the ulsch_buffer here. + if (opt_enabled) { trace_pdu(0, ulsch_buffer, buflen, module_idP, 3, UE_mac_inst[module_idP].crnti, UE_mac_inst[module_idP].txFrame, UE_mac_inst[module_idP].txSubframe, 0, 0); LOG_D(OPT,"[UE %d][ULSCH] Frame %d subframe %d trace pdu for rnti %x with size %d\n", diff --git a/openair2/PHY_INTERFACE/IF_Module_UE.c b/openair2/PHY_INTERFACE/IF_Module_UE.c new file mode 100644 index 0000000000..cb04b55432 --- /dev/null +++ b/openair2/PHY_INTERFACE/IF_Module_UE.c @@ -0,0 +1,77 @@ +#include "openair1/PHY/defs.h" +#include "openair2/PHY_INTERFACE/IF_Module_UE.h" +#include "openair2/PHY_INTERFACE/UE_MAC_interface.h" +#include "openair1/PHY/extern.h" +#include "LAYER2/MAC/extern.h" +#include "LAYER2/MAC/proto.h" +#include "common/ran_context.h" + + + +void handle_bch(UE_DL_IND_t *UE_DL_INFO) +{ + +} + + +void handle_dlsch(UE_DL_IND_t *UE_DL_INFO) +{ + int i; + UE_MAC_dlsch_indication_pdu_t *dlsch_pdu_ind; + + for (i=0; i<UE_DL_INFO->UE_DLSCH_ind.number_of_pdus; i++) + { + dlsch_pdu_ind = UE_DL_INFO->UE_DLSCH_ind.dlsch_ind_list[i]; + switch (dlsch_pdu_ind->pdu_type) { + + case UE_MAC_DL_IND_PDSCH_PDU_TYPE: + // Call ue_send_sdu() + break; + + case UE_MAC_DL_IND_SI_PDSCH_PDU_TYPE: + // Call ue_decode_si() + break; + + case UE_MAC_DL_IND_P_PDSCH_PDU_TYPE: + // Call ue_decode_p() + break; + + case UE_MAC_DL_IND_DLSCH_RAR_PDU_TYPE: + // Call ue_process_rar() + break; + } + } + +} + + +void UE_DL_indication(UE_DL_IND_t *UE_DL_INFO) +{ + + /*Call handle functions to forward PDUs or control indications to the upper layers. + handle_bch(UE_DL_INFO); + handle_dlsch (UE_DL_INFO); + */ +} + +/* Indicate the Txon of Msg1 or Msg3 to the MAC layer of the transmitter side and trigger associated + * MAC layer operations */ + +void UE_Tx_indication(UE_Tx_IND_t *UE_Tx_INFO) +{ + switch (UE_Tx_INFO->ind_type) { + + case UE_MAC_Tx_IND_Msg1_TYPE: + //Call Msg1_transmitted() + break; + + case UE_MAC_Tx_IND_Msg3_TYPE: + //Call Msg3_transmitted() + break; + } +} + + + + + diff --git a/openair2/PHY_INTERFACE/IF_Module_UE.h b/openair2/PHY_INTERFACE/IF_Module_UE.h new file mode 100644 index 0000000000..77046bcae6 --- /dev/null +++ b/openair2/PHY_INTERFACE/IF_Module_UE.h @@ -0,0 +1,177 @@ + +/*This is the interface module between PHY +*Provided the FAPI style interface structures for P7. +* +* +* +*//* + * 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.0 (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 openair2/PHY_INTERFACE/IF_Module.h +* \brief data structures for PHY/MAC interface modules +* \author EURECOM/NTUST +* \date 2017 +* \version 0.1 +* \company Eurecom +* \email: raymond.knopp@eurecom.fr +* \note +* \warning +*/ +#ifndef __IF_MODULE_UE__H__ +#define __IF_MODULE_UE__H__ + + +#include <stdint.h> +#include "openair1/PHY/LTE_TRANSPORT/defs.h" +#include "UE_MAC_interface.h" + +#define MAX_NUM_DL_PDU 100 +#define MAX_NUM_UL_PDU 100 +#define MAX_NUM_HI_DCI0_PDU 100 +#define MAX_NUM_TX_REQUEST_PDU 100 + +#define MAX_NUM_HARQ_IND 100 +#define MAX_NUM_CRC_IND 100 +#define MAX_NUM_SR_IND 100 +#define MAX_NUM_CQI_IND 100 +#define MAX_NUM_RACH_IND 100 +#define MAX_NUM_SRS_IND 100 + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + int CC_id; + // / frame + frame_t frame; + /// subframe + sub_frame_t subframe; + + /// harq ACKs indication list + //UE_MAC_hi_indication_body_t UE_hi_ind; + + /// crc indication list + //UE_MAC_crc_indication_body_t UE_crc_ind; + + /// RX BCH indication + UE_MAC_BCH_indication_body_t UE_BCH_ind; + + /// RX DLSCH indication + UE_MAC_DLSCH_indication_body_t UE_DLSCH_ind; + +} UE_DL_IND_t; + + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + int CC_id; + /// frame + frame_t frame; + /// subframe + sub_frame_t subframe; + /// Txon Indication type (Msg1 or Msg3) + uint8_t ind_type; +}UE_Tx_IND_t; + + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + int CC_id; + /// frame + frame_t frame; + /// subframe + sub_frame_t subframe; + /// Sidelink Control Information indication + ue_sci_indication_body_t UE_SCI_ind; + /// RX SLSCH indication + ue_SLSCH_indication_body_t UE_SLSCH_ind; + /// RX SLDCH indication + ue_SLDCH_indication_body_t UE_SLDCH_ind; + /// RX SLBCH indication + ue_SLBCH_indication_body_t UE_SLBCH_ind; + +} UE_SL_IND_t; + +// Downlink subframe P7 + + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + uint8_t CC_id; + /// frame + frame_t frame; + /// subframe + sub_frame_t subframe; + /// MAC IFace UL Config Request + UE_MAC_ul_config_request_t *UE_UL_req; + /// MAC IFace SL Transmission Config Request + UE_MAC_sl_config_request_Tx_t *SL_Tx_req; + /// MAC IFace SL Reception Config Request + UE_MAC_sl_config_request_Rx_t *SL_Rx_req; + /// Pointers to UL SDUs + UE_MAC_tx_request_t *UE_TX_req; + /// Pointers to SL SDUs + UE_MAC_sl_tx_request_t *TX_SL_req; +}UE_Sched_Rsp_t; + +typedef struct { + uint8_t Mod_id; + int CC_id; + UE_PHY_config_common_request_t *cfg_common; + UE_PHY_config_dedicated_request_t *cfg_dedicated; +}UE_PHY_Config_t; + +typedef struct IF_Module_UE_s{ +//define the function pointer + void (*UE_DL_indication)(UE_DL_IND_t *UE_DL_INFO); + void (*UE_SL_indication)(UE_SL_IND_t *UE_SL_INFO); + void (*UE_Tx1_indication)(UE_Tx_IND_t *UE_Tx_INFO); + void (*UE_sched_response)(UE_Sched_Rsp_t *UE_Sched_INFO); + void (*UE_config_req)(UE_PHY_Config_t* UE_config_INFO); +//P: Perhaps an additional separate function for dedicated PHY configuration is needed. + uint32_t CC_mask; + uint16_t current_frame; + uint8_t current_subframe; + pthread_mutex_t if_mutex; +}IF_Module_UE_t; + + +IF_Module_UE_t *IF_Module_UE_init(int Mod_id); +void IF_Module_UE_kill(int Mod_id); + + +void UE_DL_indication(UE_DL_IND_t *UE_DL_INFO); + + +void UE_Tx_indication(UE_Tx_IND_t *UE_Tx_INFO); + + +/*Interface for Downlink, transmitting the DLSCH SDU, DCI SDU*/ +void UE_schedule_response(UE_Sched_Rsp_t *UE_Sched_INFO); + +#endif + diff --git a/openair2/PHY_INTERFACE/UE_MAC_interface.h b/openair2/PHY_INTERFACE/UE_MAC_interface.h new file mode 100644 index 0000000000..0ed5e22184 --- /dev/null +++ b/openair2/PHY_INTERFACE/UE_MAC_interface.h @@ -0,0 +1,500 @@ + +/*This is the interface module between PHY +*Provided the FAPI style interface structures for P7. +* +* +* +*//* + * 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.0 (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 openair2/PHY_INTERFACE/IF_Module.h +* \brief data structures for PHY/MAC interface modules +* \author EURECOM/NTUST +* \date 2017 +* \version 0.1 +* \company Eurecom +* \email: raymond.knopp@eurecom.fr +* \note +* \warning +*/ +#ifndef __UE_MAC_INTERFACE__H__ +#define __UE_MAC_INTERFACE__H__ + +#include "nfapi_interface.h" +#include "openair1/PHY/impl_defs_lte.h" +#include "targets/COMMON/openairinterface5g_limits.h" + + + +#define MAX_NUM_DL_PDU 100 +#define MAX_NUM_UL_PDU 100 +#define MAX_NUM_HI_DCI0_PDU 100 +#define MAX_NUM_TX_REQUEST_PDU 100 + +#define MAX_NUM_HARQ_IND 100 +#define MAX_NUM_CRC_IND 100 +#define MAX_NUM_SR_IND 100 +#define MAX_NUM_CQI_IND 100 +#define MAX_NUM_RACH_IND 100 +#define MAX_NUM_SRS_IND 100 + + +// UE_MAC enums +typedef enum { + UE_MAC_DL_IND_PDSCH_PDU_TYPE =0, + UE_MAC_DL_IND_SI_PDSCH_PDU_TYPE, + UE_MAC_DL_IND_P_PDSCH_PDU_TYPE, + UE_MAC_DL_IND_DLSCH_RAR_PDU_TYPE +} UE_MAC_dl_ind_pdu_type_e; + +// UE_MAC enums +typedef enum { + UE_MAC_Tx_IND_Msg1_TYPE =0, + UE_MAC_Tx_IND_Msg3_TYPE +} UE_MAC_Tx_ind_type_e; + + + +// *** UE_UL_Config.request related structures + + +typedef struct{ + //module_id_t module_idP; + //int CC_id; + //frame_t frameP; + uint8_t eNB_id; + //uint16_t rnti; + //sub_frame_t subframe_tx; + uint32_t SR_payload; //0 or 1 +}UE_MAC_ul_config_SR; + + + +typedef struct{ + //module_id_t module_idP; + //int CC_id; + //frame_t frameP; + uint8_t eNB_indexP; + //sub_frame_t subframeP; + + uint8_t ra_RACH_MaskIndex; + int8_t ra_PREAMBLE_RECEIVED_TARGET_POWER; + uint8_t ra_TDD_map_index; + uint16_t ra_RNTI; + uint8_t *Msg3; +}UE_MAC_ul_config_rach; + +typedef struct { + union { + UE_MAC_ul_config_rach ue_rach_config; + //UE_MAC_ul_config_ULSCH ue_ULSCH_pdu; + UE_MAC_ul_config_SR ue_SR_config; + }; +} UE_MAC_ul_config_request_list; + +typedef struct { + nfapi_tl_t tl; + uint16_t length_list; + UE_MAC_ul_config_request_list* ue_ul_config_list; +} UE_MAC_ul_config_request_body_t; + +typedef struct { + //nfapi_p7_message_header_t header; + uint16_t sfn_sf; + UE_MAC_ul_config_request_body_t ue_ul_config_request_body; //nfapi_dl_config_request_body_t +} UE_MAC_ul_config_request_t; + + + + + + + + + +// *** UE_Tx.request related structures + +typedef struct { + uint16_t pdu_length; + uint16_t pdu_index; + uint8_t num_segments; + struct { + uint32_t segment_length; + uint8_t* segment_data; + } segments[NFAPI_TX_MAX_SEGMENTS]; +} UE_MAC_tx_request_pdu_t; + + +typedef struct { + nfapi_tl_t tl; + uint16_t number_of_pdus; + UE_MAC_tx_request_pdu_t* ue_tx_pdu_list; +} UE_MAC_tx_request_body_t; + + +typedef struct { + //nfapi_p7_message_header_t header; + uint16_t sfn_sf; + UE_MAC_tx_request_body_t ue_tx_request_body; +} UE_MAC_tx_request_t; + + +typedef struct{ + + +}UE_MAC_sl_config_request_Tx_t; + +typedef struct{ + + +}UE_MAC_sl_config_request_Rx_t; + + +typedef struct{ + + +}UE_MAC_sl_tx_request_t; + + + + + + +// *** UE_DL.indication related structures + +typedef struct{ + unsigned char eNB_index; + uint8_t first_sync; //boolean 0 or 1 + uint8_t sync; // boolean 0 or 1 to indicate whether rrc_out_of_sync_ind() or dl_phy_sync_success() + // should be called from the handler function of the interface respectively. +}UE_MAC_bch_indication_pdu_t; + + +typedef struct{ + nfapi_tl_t tl; + UE_MAC_bch_indication_pdu_t* bch_ind_list; +}UE_MAC_BCH_indication_body_t; + + +// Panos: Corresponding to inputs of MAC functions: ue_send_sdu(), ue_decode_si(), ue_decode_p(). +typedef struct{ + uint8_t* data; + uint16_t data_len; +}UE_MAC_dlsch_pdu; + + +// Panos: Corresponding to inputs of MAC function: process_rar(). +typedef struct{ + rnti_t ra_rnti; + uint8_t* rar_input_buffer; // Originating from PHY + rnti_t* t_crnti; + uint8_t preamble_index; + uint8_t* rar_output_buffer; //should be returned to PHY: dlsch0->harq_processes[0]->b +}UE_MAC_dlsch_rar_pdu; + + +typedef struct{ + uint8_t pdu_type; + uint8_t eNB_index; + union{ + UE_MAC_dlsch_pdu dlsch_pdu_ind; + UE_MAC_dlsch_rar_pdu dlsch_rar_pdu_ind; + }; +}UE_MAC_dlsch_indication_pdu_t; + + +typedef struct{ + nfapi_tl_t tl; + uint16_t number_of_pdus; + UE_MAC_dlsch_indication_pdu_t* dlsch_ind_list; +}UE_MAC_DLSCH_indication_body_t; + + + + + + +// *** UE_SL.indication related structures + +typedef struct{ + +}ue_sci_indication_body_t; + + +typedef struct{ + +}ue_SLSCH_indication_body_t; + + +typedef struct{ + +}ue_SLDCH_indication_body_t; + +typedef struct{ + +}ue_SLBCH_indication_body_t; + + +// *** UE_Config_common.request related structures + +typedef struct { + uint8_t subframeAssignment; + uint8_t specialSubframePatterns; +}UE_PHY_tdd_frame_structure_t; + + +typedef struct { + uint16_t rootSequenceIndex; + uint8_t prach_Config_enabled; + uint8_t prach_ConfigIndex; + uint8_t highSpeedFlag; + uint8_t zeroCorrelationZoneConfig; + uint8_t prach_FreqOffset; +}UE_PHY_prach_config_t; + +typedef struct { + uint8_t deltaPUCCH_Shift; + uint8_t nRB_CQI; + uint8_t nCS_AN; + uint16_t n1PUCCH_AN; +}UE_PHY_pucch_config_t; + + +typedef struct { + int8_t referenceSignalPower; + uint8_t p_b; +}UE_PHY_pdcch_config_t; + + +typedef struct { + uint8_t n_SB; + PUSCH_HOPPING_t hoppingMode; + uint8_t pusch_HoppingOffset; + uint8_t enable64QAM; + uint8_t groupHoppingEnabled; + uint8_t groupAssignmentPUSCH; + uint8_t sequenceHoppingEnabled; + uint8_t cyclicShift; +}UE_PHY_pusch_config_t; + + +typedef struct{ + uint8_t enabled_flag; + uint8_t srs_BandwidthConfig; + uint8_t srs_SubframeConfig; + uint8_t ackNackSRS_SimultaneousTransmission; + uint8_t srs_MaxUpPts; +}UE_PHY_SRS_config_t; + +typedef struct{ + int8_t p0_NominalPUSCH; + PUSCH_alpha_t alpha; + int8_t p0_NominalPUCCH; + int8_t deltaPreambleMsg3; + long deltaF_PUCCH_Format1; + long deltaF_PUCCH_Format1b; + long deltaF_PUCCH_Format2; + long deltaF_PUCCH_Format2a; + long deltaF_PUCCH_Format2b; +}UE_PHY_UL_power_control_config_t; + + +typedef struct{ + uint8_t maxHARQ_Msg3Tx; +}UE_PHY_HARQ_Msg3_config_t; + +typedef struct{ + uint8_t nb_antennas_tx; +}UE_PHY_antenna_config_t; + +typedef struct{ + PHICH_RESOURCE_t phich_resource; + PHICH_DURATION_t phich_duration; +}UE_PHY_phich_config_t; + + +typedef struct { + UE_PHY_tdd_frame_structure_t ue_tdd_frame_structure_config; + UE_PHY_prach_config_t ue_prach_config; + UE_PHY_pucch_config_t ue_pucch_config; + UE_PHY_pdcch_config_t ue_pdcch_config; + UE_PHY_pusch_config_t ue_pdsch_config; + UE_PHY_SRS_config_t ue_srs_config; + UE_PHY_UL_power_control_config_t ue_ul_pow_cntl_config; + UE_PHY_HARQ_Msg3_config_t ue_harq_msg3_config; + /* Where can we find the types and values of the configuration for the PCH? + UE_MAC_pusch_config_t ue_pch_config + radioResourceConfigCommon->pcch_Config.defaultPagingCycle, radioResourceConfigCommon->pcch_Config.nB*/ + UE_PHY_antenna_config_t ue_ant_config; + UE_PHY_phich_config_t ue_phich_config; + /* MBSFN?*/ +}UE_PHY_config_common_request_t; + + + + + + + +// *** UE_Config_dedicated. request related structures + +typedef struct{ + PA_t p_a; +}UE_PHY_pdsch_config_dedicated_t; + + +typedef struct{ + uint8_t ackNackRepetition; + ANFBmode_t tdd_AckNackFeedbackMode; + //ACKNAKREP_t repetitionFactor; + //uint16_t n1PUCCH_AN_Rep; +}UE_PHY_pucch_config_dedicated_t; + + +typedef struct{ + uint16_t betaOffset_ACK_Index; + uint16_t betaOffset_RI_Index; + uint16_t betaOffset_CQI_Index; +}UE_PHY_pusch_config_dedicated_t; + + +typedef struct{ + int8_t p0_UE_PUSCH; + uint8_t deltaMCS_Enabled; + uint8_t accumulationEnabled; + int8_t p0_UE_PUCCH; + int8_t pSRS_Offset; + uint8_t filterCoefficient; +}UE_PHY_ul_power_control_config_dedicated_t; + + +typedef struct{ + uint16_t sr_PUCCH_ResourceIndex; + uint8_t sr_ConfigIndex; + DSR_TRANSMAX_t dsr_TransMax; +}UE_PHY_SR_config_dedicated_t; + + +typedef struct{ + uint8_t srsConfigDedicatedSetup; + uint8_t duration; + uint8_t cyclicShift; + uint8_t freqDomainPosition; + uint8_t srs_Bandwidth; + uint16_t srs_ConfigIndex; + uint8_t srs_HoppingBandwidth; + uint8_t transmissionComb; + //uint8_t srsCellSubframe; + //uint8_t srsUeSubframe; +}UE_PHY_srs_ul_config_dedicated_t; + + +typedef struct{ + CQI_REPORTMODEAPERIODIC cqi_ReportModeAperiodic; + CQI_REPORTPERIODIC CQI_ReportPeriodic; + //int8_t nomPDSCH_RS_EPRE_Offset; +}UE_PHY_cqi_report_config_dedicated_t; + + + +typedef struct{ + uint8_t transmission_mode [NUMBER_OF_CONNECTED_eNB_MAX]; + UE_PHY_pdsch_config_dedicated_t ue_pdsch_config; + UE_PHY_pucch_config_dedicated_t ue_pucch_config; + UE_PHY_pusch_config_dedicated_t ue_pusch_config; + UE_PHY_ul_power_control_config_dedicated_t ue_ul_pow_cntrl_config; + UE_PHY_SR_config_dedicated_t ue_SR_config; + UE_PHY_srs_ul_config_dedicated_t ue_srs_ul_config; + UE_PHY_cqi_report_config_dedicated_t ue_cqi_report_config; +}UE_PHY_config_dedicated_request_t; + +#endif + + + + + + + + + + + + + + + + + + + +/* +typedef struct { + nfapi_p4_p5_message_header_t header; + uint8_t num_tlv; + nfapi_subframe_config_t subframe_config; + nfapi_rf_config_t rf_config; + nfapi_phich_config_t phich_config; + nfapi_sch_config_t sch_config; + nfapi_prach_config_t prach_config; + nfapi_pusch_config_t pusch_config; + nfapi_pucch_config_t pucch_config; + nfapi_srs_config_t srs_config; + nfapi_uplink_reference_signal_config_t uplink_reference_signal_config; + nfapi_laa_config_t laa_config; + nfapi_emtc_config_t emtc_config; + nfapi_tdd_frame_structure_t tdd_frame_structure_config; + nfapi_l23_config_t l23_config; + nfapi_nb_iot_config_t nb_iot_config; + + // addition nfapi tlvs as per table 2-16 in idle or configure + nfapi_nfapi_t nfapi_config; + + nfapi_vendor_extension_tlv_t vendor_extension; +} nfapi_config_request_t; + + + + + +typedef struct { + nfapi_tl_t tl; + uint8_t dci_format; + uint8_t cce_index; + uint8_t aggregation_level; + uint16_t rnti; + uint8_t resource_block_start; + uint8_t number_of_resource_block; + uint8_t mcs_1; + uint8_t cyclic_shift_2_for_drms; + uint8_t frequency_hopping_enabled_flag; + uint8_t frequency_hopping_bits; + uint8_t new_data_indication_1; + uint8_t ue_tx_antenna_seleciton; + uint8_t tpc; + uint8_t cqi_csi_request; + uint8_t ul_index; + uint8_t dl_assignment_index; + uint32_t tpc_bitmap; + uint16_t transmission_power; +} nfapi_hi_dci0_dci_pdu_rel8_t; + +*/ -- 2.26.2