Merge branch 'enhancement-rfsim' into ru_rau_enhancement
Conflicts: cmake_targets/build_oai openair1/PHY/LTE_ESTIMATION/lte_sync_time.c openair1/PHY/LTE_TRANSPORT/dci_tools.c openair1/PHY/LTE_TRANSPORT/if4_tools.c openair1/PHY/LTE_TRANSPORT/prach.c openair1/PHY/defs_eNB.h openair1/PHY/impl_defs_lte.h openair2/ENB_APP/enb_config.c openair2/LAYER2/MAC/eNB_scheduler.c openair2/LAYER2/MAC/eNB_scheduler_ulsch.c targets/RT/USER/lte-enb.c targets/RT/USER/lte-ru.c targets/SIMU/USER/channel_sim.c targets/SIMU/USER/oaisim.c targets/SIMU/USER/oaisim_config.c targets/SIMU/USER/oaisim_functions.c
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#include "openair1/PHY/defs.h"
|
||||
#include "openair1/PHY/defs_eNB.h"
|
||||
#include "openair2/PHY_INTERFACE/IF_Module.h"
|
||||
#include "openair1/PHY/extern.h"
|
||||
#include "LAYER2/MAC/extern.h"
|
||||
#include "LAYER2/MAC/proto.h"
|
||||
#include "openair1/PHY/phy_extern.h"
|
||||
#include "LAYER2/MAC/mac_extern.h"
|
||||
#include "LAYER2/MAC/mac_proto.h"
|
||||
#include "common/ran_context.h"
|
||||
|
||||
#define MAX_IF_MODULES 100
|
||||
@@ -33,13 +33,13 @@ void handle_rach(UL_IND_t *UL_info) {
|
||||
UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
|
||||
UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
|
||||
UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
|
||||
#ifdef Rel14
|
||||
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||
,0
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
#ifdef Rel14
|
||||
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||
if (UL_info->rach_ind_br.rach_indication_body.number_of_preambles>0) {
|
||||
|
||||
AssertFatal(UL_info->rach_ind_br.rach_indication_body.number_of_preambles<5,"More than 4 preambles not supported\n");
|
||||
|
||||
@@ -34,9 +34,10 @@
|
||||
|
||||
|
||||
#include <stdint.h>
|
||||
#include "openair1/PHY/LTE_TRANSPORT/defs.h"
|
||||
//#include "openair1/PHY/LTE_TRANSPORT/transport_eNB.h"
|
||||
#include "nfapi_interface.h"
|
||||
|
||||
#include "platform_constants.h"
|
||||
#include "platform_types.h"
|
||||
|
||||
#define MAX_NUM_DL_PDU 100
|
||||
#define MAX_NUM_UL_PDU 100
|
||||
@@ -75,7 +76,7 @@ typedef struct{
|
||||
/// RACH indication list
|
||||
nfapi_rach_indication_t rach_ind;
|
||||
|
||||
#ifdef Rel14
|
||||
#if (RRC_VERSION >= MAKE_VERSION(14, 0, 0))
|
||||
/// RACH indication list for BR UEs
|
||||
nfapi_rach_indication_t rach_ind_br;
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,498 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
/* This is the interface module between PHY
|
||||
* Provided the FAPI style interface structures for P7.
|
||||
*/
|
||||
|
||||
/*! \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_pdsch_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_pdsch_config_t ue_pdsch_config;
|
||||
UE_PHY_pusch_config_t ue_pusch_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;
|
||||
|
||||
*/
|
||||
@@ -1,373 +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 PHY_INTERFACE/defs.h
|
||||
* \brief mac phy interface primitives
|
||||
* \author Raymond Knopp and Navid Nikaein
|
||||
* \date 2011
|
||||
* \version 0.5
|
||||
* \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr
|
||||
*/
|
||||
|
||||
#ifndef __MAC_PHY_PRIMITIVES_H__
|
||||
# define __MAC_PHY_PRIMITIVES_H__
|
||||
|
||||
#include "LAYER2/MAC/defs.h"
|
||||
|
||||
|
||||
#define MAX_NUMBER_OF_MAC_INSTANCES 16
|
||||
|
||||
#define NULL_PDU 255
|
||||
#define DCI 0
|
||||
#define DLSCH 1
|
||||
#define ULSCH 2
|
||||
|
||||
#define mac_exit_wrapper(sTRING) \
|
||||
do { \
|
||||
char temp[300]; \
|
||||
snprintf(temp, sizeof(temp), "%s in file "__FILE__" at line %d\n", sTRING, __LINE__); \
|
||||
mac_xface->macphy_exit(temp); \
|
||||
} while(0)
|
||||
|
||||
/** @defgroup _phy_if MAC-PHY interface
|
||||
* @ingroup _oai2
|
||||
* @{
|
||||
*/
|
||||
/*! \brief MACPHY Interface */
|
||||
/*
|
||||
typedef struct {
|
||||
/// Pointer function that initializes L2
|
||||
int (*macphy_init)(int eMBMS_active, char *uecap_xer, uint8_t CBA_active,uint8_t HO_active);
|
||||
|
||||
/// Pointer function that stops the low-level scheduler due an exit condition
|
||||
void (*macphy_exit)(const char *);
|
||||
|
||||
// eNB functions
|
||||
/// Invoke dlsch/ulsch scheduling procedure for new subframe
|
||||
void (*eNB_dlsch_ulsch_scheduler)(module_id_t Mod_id,uint8_t cooperation_flag, frame_t frameP, sub_frame_t subframeP);//, int calibration_flag);
|
||||
|
||||
/// Fill random access response sdu, passing timing advance
|
||||
uint16_t (*fill_rar)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t *dlsch_buffer,uint16_t N_RB_UL, uint8_t input_buffer_length);
|
||||
|
||||
/// Initiate the RA procedure upon reception (hypothetical) of a valid preamble
|
||||
void (*initiate_ra_proc)(module_id_t Mod_id,int CC_id,frame_t frameP,uint16_t preamble,int16_t timing_offset,uint8_t sect_id,sub_frame_t subframe,uint8_t f_id);
|
||||
|
||||
/// cancel an ongoing RA procedure
|
||||
void (*cancel_ra_proc)(module_id_t Mod_id,int CC_id,frame_t frameP,uint16_t preamble);
|
||||
|
||||
/// Inform MAC layer that an uplink is scheduled for Msg3 in given subframe.
|
||||
/// This is used so that the MAC scheduler marks as busy the RBs used by the Msg3.
|
||||
void (*set_msg3_subframe)(module_id_t Mod_id,
|
||||
int CC_id,
|
||||
int frame,
|
||||
int subframe,
|
||||
int rnti,
|
||||
int Msg3_frame,
|
||||
int Msg3_subframe);
|
||||
|
||||
/// Get DCI for current subframe from MAC
|
||||
DCI_PDU* (*get_dci_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP,sub_frame_t subframe);
|
||||
|
||||
/// Get DLSCH sdu for particular RNTI and Transport block index
|
||||
uint8_t* (*get_dlsch_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti,uint8_t TB_index);
|
||||
|
||||
/// Send ULSCH sdu to MAC for given rnti
|
||||
void (*rx_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP, sub_frame_t sub_frameP,rnti_t rnti, uint8_t *sdu,uint16_t sdu_len, int harq_pid,uint8_t *msg3_flag);
|
||||
|
||||
/// Indicate failure to synch to external source
|
||||
void (*mrbch_phy_sync_failure) (module_id_t Mod_id,frame_t frameP, uint8_t free_eNB_index);
|
||||
|
||||
/// Indicate Scheduling Request from UE
|
||||
void (*SR_indication)(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti,sub_frame_t subframe);
|
||||
/// Indicate UL Failure to eNodeB MAC
|
||||
void (*UL_failure_indication)(module_id_t Mod_id,int CC_id,frame_t frameP,rnti_t rnti,sub_frame_t subframe);
|
||||
|
||||
/// Configure Common PHY parameters from SIB1
|
||||
void (*phy_config_mib_eNB)(module_id_t Mod_id,int CC_id,
|
||||
int eutra_band,
|
||||
int N_RB_DL,
|
||||
PHICH_Config_t *phich_Config,
|
||||
int Nid_cell,
|
||||
int Ncp,
|
||||
int p_eNB,
|
||||
uint32_t dl_CarrierFreq,
|
||||
uint32_t ul_CarrierFreq);
|
||||
|
||||
/// Configure Common PHY parameters from SIB1
|
||||
void (*phy_config_sib1_eNB)(module_id_t Mod_id,int CC_id,
|
||||
TDD_Config_t *tdd_config,
|
||||
uint8_t SIwindowsize,
|
||||
uint16_t SIperiod);
|
||||
|
||||
/// Configure Common PHY parameters from SIB2
|
||||
void (*phy_config_sib2_eNB)(module_id_t Mod_id, int CC_id,
|
||||
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
|
||||
ARFCN_ValueEUTRA_t *ul_CArrierFreq,
|
||||
long *ul_Bandwidth,
|
||||
AdditionalSpectrumEmission_t *additionalSpectrumEmission,
|
||||
struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList);
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
/// Configure Common PHY parameters from SIB13
|
||||
void (*phy_config_sib13_eNB)(module_id_t Mod_id,int CC_id, int mbsfn_Area_idx,
|
||||
long mbsfn_AreaId_r9);
|
||||
|
||||
void (*phy_config_dedicated_scell_eNB)(uint8_t Mod_id,
|
||||
uint16_t rnti,
|
||||
SCellToAddMod_r10_t *sCellToAddMod_r10,
|
||||
int CC_id);
|
||||
#endif
|
||||
|
||||
/// PHY-Config-Dedicated eNB
|
||||
void (*phy_config_dedicated_eNB)(module_id_t Mod_id,int CC_id,rnti_t rnti,
|
||||
struct PhysicalConfigDedicated *physicalConfigDedicated);
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
/// Get MCH sdu and corresponding MCS for particular MBSFN subframe
|
||||
MCH_PDU* (*get_mch_sdu)(module_id_t Mod_id, int CC_id, frame_t frameP,sub_frame_t subframe);
|
||||
#endif
|
||||
// configure the cba rnti at the physical layer
|
||||
void (*phy_config_cba_rnti)(module_id_t Mod_id,int CC_id,eNB_flag_t eNB_flag, uint8_t index, uint16_t cba_rnti, uint8_t cba_group_id, uint8_t num_active_cba_groups);
|
||||
/// get delta mcs for fast UL AMC
|
||||
int16_t (*estimate_ue_tx_power)(uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs);
|
||||
|
||||
int (*mac_phy_remove_ue)(module_id_t Mod_idP,rnti_t rntiP);
|
||||
/// UE functions
|
||||
|
||||
/// reset the ue phy
|
||||
void (*phy_reset_ue)(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Indicate loss of synchronization of PBCH for this eNB to MAC layer
|
||||
void (*out_of_sync_ind)(module_id_t Mod_id,frame_t frameP,uint16_t eNB_index);
|
||||
|
||||
/// Send a received SI sdu
|
||||
void (*ue_decode_si)(module_id_t Mod_id,int CC_id,frame_t frameP, uint8_t CH_index, void *pdu, uint16_t len);
|
||||
|
||||
/// Send a received Paging sdu
|
||||
void (*ue_decode_p)(module_id_t Mod_id,int CC_id,frame_t frameP, uint8_t CH_index, void *pdu, uint16_t len);
|
||||
|
||||
/// Send a received DLSCH sdu to MAC
|
||||
void (*ue_send_sdu)(module_id_t Mod_id,uint8_t CC_id,frame_t frameP,sub_frame_t subframe,uint8_t *sdu,uint16_t sdu_len,uint8_t CH_index);
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
/// Send a received MCH sdu to MAC
|
||||
void (*ue_send_mch_sdu)(module_id_t Mod_id,uint8_t CC_id, frame_t frameP,uint8_t *sdu,uint16_t sdu_len,uint8_t eNB_index,uint8_t sync_area);
|
||||
|
||||
/// Function to check if UE PHY needs to decode MCH for MAC
|
||||
/// get the sync area id, and return MCS value if need to decode, otherwise -1
|
||||
int (*ue_query_mch)(module_id_t Mod_id, uint8_t CC_id,frame_t frameP,sub_frame_t subframe,uint8_t eNB_index,uint8_t *sync_area, uint8_t *mcch_active);
|
||||
#endif
|
||||
|
||||
/// Retrieve ULSCH sdu from MAC
|
||||
void (*ue_get_sdu)(module_id_t Mod_id,int CC_id,frame_t frameP,sub_frame_t subframe, uint8_t CH_index,uint8_t *ulsch_buffer,uint16_t buflen,uint8_t *access_mode);
|
||||
|
||||
/// Retrieve RRCConnectionReq from MAC
|
||||
PRACH_RESOURCES_t* (*ue_get_rach)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t Msg3_flag,sub_frame_t subframe);
|
||||
|
||||
/// Process Random-Access Response
|
||||
uint16_t (*ue_process_rar)(module_id_t Mod_id,int CC_id,frame_t frameP, uint16_t ra_rnti, uint8_t *dlsch_buffer, uint16_t *t_crnti,uint8_t preamble_index, uint8_t* selected_rar_buffer);
|
||||
|
||||
/// Get SR payload (0,1) from UE MAC
|
||||
uint32_t (*ue_get_SR)(module_id_t Mod_id,int CC_id,frame_t frameP,uint8_t eNB_id,rnti_t rnti,sub_frame_t subframe);
|
||||
|
||||
/// Indicate synchronization with valid PBCH
|
||||
void (*dl_phy_sync_success) (module_id_t Mod_id,frame_t frameP, uint8_t CH_index,uint8_t first_sync);
|
||||
|
||||
/// Only calls the PDCP for now
|
||||
UE_L2_STATE_t (*ue_scheduler)(module_id_t Mod_id, frame_t rxFrameP,sub_frame_t rxSubframe, frame_t txFrameP,sub_frame_t txSubframe, lte_subframe_t direction, uint8_t eNB_id, int CC_id);
|
||||
|
||||
/// PHY-Config-Dedicated UE
|
||||
void (*phy_config_dedicated_ue)(module_id_t Mod_id,int CC_id,uint8_t CH_index,
|
||||
struct PhysicalConfigDedicated *physicalConfigDedicated);
|
||||
|
||||
/// PHY-Config-harq UE
|
||||
void (*phy_config_harq_ue)(module_id_t Mod_id,int CC_id,uint8_t CH_index,
|
||||
uint16_t max_harq_tx);
|
||||
/// Configure Common PHY parameters from SIB1
|
||||
void (*phy_config_sib1_ue)(module_id_t Mod_id,int CC_id,uint8_t CH_index,
|
||||
TDD_Config_t *tdd_config,
|
||||
uint8_t SIwindowsize,
|
||||
uint16_t SIperiod);
|
||||
|
||||
/// Configure Common PHY parameters from SIB2
|
||||
void (*phy_config_sib2_ue)(module_id_t Mod_id,int CC_id,uint8_t CH_index,
|
||||
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
|
||||
ARFCN_ValueEUTRA_t *ul_CArrierFreq,
|
||||
long *ul_Bandwidth,
|
||||
AdditionalSpectrumEmission_t *additionalSpectrumEmission,
|
||||
struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList);
|
||||
|
||||
#if defined(Rel10) || defined(Rel14)
|
||||
/// Configure Common PHY parameters from SIB13
|
||||
void (*phy_config_sib13_ue)(uint8_t Mod_id,int CC_id, uint8_t eNB_index,int mbsfn_Area_idx,
|
||||
long mbsfn_AreaId_r9);
|
||||
|
||||
void (*phy_config_dedicated_scell_ue)(uint8_t Mod_id,
|
||||
uint8_t eNB_index,
|
||||
SCellToAddMod_r10_t *sCellToAddMod_r10,
|
||||
int CC_id);
|
||||
#endif
|
||||
/// Configure Common PHY parameters from mobilityControlInfo
|
||||
void (*phy_config_afterHO_ue)(module_id_t Mod_id,uint8_t CC_id,uint8_t CH_index,
|
||||
MobilityControlInfo_t *mobilityControlInfo,
|
||||
uint8_t ho_failed);
|
||||
|
||||
/// Function to indicate failure of contention resolution or RA procedure
|
||||
void (*ra_failed)(module_id_t Mod_id, uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function to indicate success of contention resolution or RA procedure
|
||||
void (*ra_succeeded)(module_id_t Mod_id,uint8_t CC_id, uint8_t eNB_index);
|
||||
|
||||
/// Function to indicate the transmission of msg1/rach to MAC
|
||||
void (*Msg1_transmitted)(module_id_t Mod_id,uint8_t CC_id,frame_t frameP,uint8_t eNB_id);
|
||||
|
||||
/// Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer
|
||||
void (*Msg3_transmitted)(module_id_t Mod_id,uint8_t CC_id,frame_t frameP,uint8_t eNB_id);
|
||||
|
||||
/// Function to pass inter-cell measurement parameters to PHY (cell Ids)
|
||||
void (*phy_config_meas_ue)(module_id_t Mod_id,uint8_t CC_id,uint8_t eNB_index,uint8_t n_adj_cells,uint32_t *adj_cell_id);
|
||||
|
||||
// PHY Helper Functions
|
||||
|
||||
/// RIV computation from PHY
|
||||
uint16_t (*computeRIV)(uint16_t N_RB_DL,uint16_t RBstart,uint16_t Lcrbs);
|
||||
|
||||
/// Downlink TBS table lookup from PHY
|
||||
uint32_t (*get_TBS_DL)(uint8_t mcs, uint16_t nb_rb);
|
||||
|
||||
/// Uplink TBS table lookup from PHY
|
||||
uint32_t (*get_TBS_UL)(uint8_t mcs, uint16_t nb_rb);
|
||||
|
||||
/// Function to retrieve the HARQ round index for a particular UL/DLSCH and harq_pid
|
||||
int (*get_ue_active_harq_pid)(module_id_t Mod_id, uint8_t CC_id,rnti_t rnti, int frame, uint8_t subframe, uint8_t *harq_pid, uint8_t *round, uint8_t ul_flag);
|
||||
|
||||
/// Function to retrieve number of CCE
|
||||
uint16_t (*get_nCCE_max)(module_id_t Mod_id,uint8_t CC_id,int num_pdcch_symbols,int subframe);
|
||||
|
||||
|
||||
int (*get_nCCE_offset)(int *CCE_table,
|
||||
const unsigned char L,
|
||||
const int nCCE,
|
||||
const int common_dci,
|
||||
const unsigned short rnti,
|
||||
const unsigned char subframe);
|
||||
|
||||
/// Function to retrieve number of PRB in an rb_alloc
|
||||
uint32_t (*get_nb_rb)(uint8_t ra_header, uint32_t rb_alloc, int n_rb_dl);
|
||||
|
||||
/// Function to convert VRB to PRB for distributed allocation
|
||||
uint32_t (*get_prb)(int N_RB_DL,int odd_slot,int vrb,int Ngap);
|
||||
|
||||
/// Function to retrieve transmission mode for UE
|
||||
uint8_t (*get_transmission_mode)(module_id_t Mod_id,uint8_t CC_id,rnti_t rnti);
|
||||
|
||||
/// Function to retrieve rb_alloc bitmap from dci rballoc field and VRB type
|
||||
uint32_t (*get_rballoc)(vrb_t vrb_type, uint16_t rb_alloc_dci);
|
||||
|
||||
/// Function for UE MAC to retrieve current PHY connectivity mode (PRACH,RA_RESPONSE,PUSCH)
|
||||
UE_MODE_t (*get_ue_mode)(module_id_t Mod_id, uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function for UE MAC to retrieve measured Path Loss
|
||||
int16_t (*get_PL)(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function for UE MAC to retrieve the rssi
|
||||
uint32_t (*get_RSSI)(uint8_t Mod_id,uint8_t CC_id);
|
||||
|
||||
/// Function for UE MAC to retrieve the total gain
|
||||
uint32_t (*get_rx_total_gain_dB)(uint8_t Mod_id,uint8_t CC_id);
|
||||
|
||||
/// Function for UE MAC to retrieve the number of adjustent cells
|
||||
uint8_t (*get_n_adj_cells)(uint8_t Mod_id,uint8_t CC_id);
|
||||
|
||||
/// Function for UE MAC to retrieve RSRP/RSRQ measurements
|
||||
uint32_t (*get_RSRP)(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function for UE MAC to retrieve RSRP/RSRQ measurements
|
||||
uint32_t (*get_RSRQ)(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function for UE MAC to set the layer3 filtered RSRP/RSRQ measurements
|
||||
uint8_t (*set_RSRP_filtered)(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrp);
|
||||
|
||||
/// Function for UE MAC to set the layer3 filtered RSRP/RSRQ measurements
|
||||
uint8_t (*set_RSRQ_filtered)(uint8_t Mod_id,uint8_t CC_id,uint8_t eNB_index,float rsrp);
|
||||
|
||||
/// Function for UE/eNB MAC to retrieve number of PRACH in TDD
|
||||
uint8_t (*get_num_prach_tdd)(LTE_DL_FRAME_PARMS *frame_parms);
|
||||
|
||||
/// Function for UE/eNB MAC to retrieve f_id of particular PRACH resource in TDD
|
||||
uint8_t (*get_fid_prach_tdd)(LTE_DL_FRAME_PARMS *frame_parms,uint8_t tdd_map_index);
|
||||
|
||||
/// Function for eNB MAC to retrieve subframe direction
|
||||
lte_subframe_t (*get_subframe_direction)(module_id_t Mod_id, uint8_t CC_id, uint8_t subframe);
|
||||
|
||||
// MAC Helper functions
|
||||
/// Function for UE/PHY to compute PUSCH transmit power in power-control procedure (Po_NOMINAL_PUSCH parameter)
|
||||
int8_t (*get_Po_NOMINAL_PUSCH)(module_id_t Mod_id,uint8_t CC_id);
|
||||
|
||||
/// Function for UE/PHY to compute PUSCH transmit power in power-control procedure (deltaP_rampup parameter)
|
||||
int8_t (*get_deltaP_rampup)(module_id_t Mod_id,uint8_t CC_id);
|
||||
|
||||
/// Function for UE/PHY to compute PHR
|
||||
int8_t (*get_PHR)(module_id_t Mod_id, uint8_t CC_id,uint8_t eNB_index);
|
||||
|
||||
/// Function for UE to process the timing advance command
|
||||
void (*process_timing_advance)(module_id_t Mod_id,uint8_t CC_id, int16_t timing_advance);
|
||||
|
||||
/// Function for MAC to get the UE stats from the PHY
|
||||
LTE_eNB_UE_stats* (*get_eNB_UE_stats)(module_id_t Mod_id, uint8_t CC_id, rnti_t rnti);
|
||||
|
||||
/// get the frame parameters from the PHY
|
||||
LTE_DL_FRAME_PARMS* (*get_lte_frame_parms)(module_id_t Mod_id, uint8_t CC_id);
|
||||
|
||||
/// get the Multiuser mimo mode
|
||||
MU_MIMO_mode* (*get_mu_mimo_mode) (module_id_t Mod_id, uint8_t CC_id, rnti_t rnti);
|
||||
|
||||
/// get the delta TF for Uplink Power Control Calculation
|
||||
int16_t (*get_hundred_times_delta_TF) (module_id_t module_idP, uint8_t CC_id, rnti_t rnti, uint8_t harq_pid);
|
||||
/// get target PUSCH received power
|
||||
int16_t (*get_target_pusch_rx_power) (module_id_t module_idP, uint8_t CC_id);
|
||||
/// get target PUSCH received power
|
||||
int16_t (*get_target_pucch_rx_power) (module_id_t module_idP, uint8_t CC_id);
|
||||
|
||||
unsigned char is_cluster_head;
|
||||
unsigned char is_primary_cluster_head;
|
||||
unsigned char is_secondary_cluster_head;
|
||||
unsigned char cluster_head_index;
|
||||
|
||||
/// PHY Frame Configuration
|
||||
LTE_DL_FRAME_PARMS *frame_parms;
|
||||
|
||||
uint8_t (*get_prach_prb_offset)(LTE_DL_FRAME_PARMS *frame_parms, uint8_t tdd_mapindex, uint16_t Nf);
|
||||
|
||||
int (*is_prach_subframe)(LTE_DL_FRAME_PARMS *frame_parms,frame_t frame, uint8_t subframe);
|
||||
|
||||
/// ICIC algos
|
||||
uint8_t (*get_SB_size)(uint8_t n_rb_dl);
|
||||
///end ALU's algo
|
||||
|
||||
} MAC_xface;
|
||||
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* 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 PHY_INTERFACE/defs.h
|
||||
* \brief mac phy interface primitives
|
||||
* \author Raymond Knopp and Navid Nikaein
|
||||
* \date 2011
|
||||
* \version 0.5
|
||||
* \mail navid.nikaein@eurecom.fr or openair_tech@eurecom.fr
|
||||
*/
|
||||
|
||||
#ifndef __PHY_INTERFACE_H__
|
||||
# define __PHY_INTERFACE_H__
|
||||
|
||||
#include "LAYER2/MAC/mac.h"
|
||||
|
||||
|
||||
#define MAX_NUMBER_OF_MAC_INSTANCES 16
|
||||
|
||||
#define NULL_PDU 255
|
||||
#define DCI 0
|
||||
#define DLSCH 1
|
||||
#define ULSCH 2
|
||||
|
||||
#define mac_exit_wrapper(sTRING) \
|
||||
do { \
|
||||
char temp[300]; \
|
||||
snprintf(temp, sizeof(temp), "%s in file "__FILE__" at line %d\n", sTRING, __LINE__); \
|
||||
mac_xface->macphy_exit(temp); \
|
||||
} while(0)
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/** @} */
|
||||
@@ -23,7 +23,7 @@
|
||||
#define __PHY_INTERFACE_VARS_H__
|
||||
|
||||
//#include "SIMULATION/PHY_EMULATION/spec_defs.h"
|
||||
#include "defs.h"
|
||||
#include "phy_interface.h"
|
||||
|
||||
#ifdef PHY_EMUL
|
||||
#include "SIMULATION/PHY_EMULATION/DEVICE_DRIVER/defs.h"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,118 @@
|
||||
/*
|
||||
* phy_stub_UE.h
|
||||
*
|
||||
* Created on: Sep 14, 2017
|
||||
* Author: montre
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __PHY_STUB_UE__H__
|
||||
#define __PHY_STUB_UE__H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "openair2/PHY_INTERFACE/IF_Module.h"
|
||||
#include "nfapi_interface.h"
|
||||
#include "nfapi_pnf_interface.h"
|
||||
//#include "openair1/PHY/LTE_TRANSPORT/defs.h"
|
||||
//#include "openair1/PHY/defs.h"
|
||||
//#include "openair1/PHY/LTE_TRANSPORT/defs.h"
|
||||
|
||||
UL_IND_t *UL_INFO;
|
||||
|
||||
nfapi_tx_request_pdu_t* tx_request_pdu_list;
|
||||
// New
|
||||
/// Panos: Pointers to config_request types. Used from nfapi callback functions.
|
||||
nfapi_dl_config_request_t* dl_config_req;
|
||||
nfapi_ul_config_request_t* ul_config_req;
|
||||
nfapi_hi_dci0_request_t* hi_dci0_req;
|
||||
|
||||
int tx_req_num_elems;
|
||||
|
||||
int next_ra_frame;
|
||||
module_id_t next_Mod_id;
|
||||
eth_params_t stub_eth_params;
|
||||
|
||||
|
||||
|
||||
|
||||
// Panos: This function should return all the sched_response config messages which concern a specific UE. Inside this
|
||||
// function we should somehow make the translation of config message's rnti to Mod_ID.
|
||||
Sched_Rsp_t get_nfapi_sched_response(uint8_t Mod_id);
|
||||
|
||||
// This function will be processing DL_config and Tx.requests and trigger all the MAC Rx related calls at the UE side,
|
||||
// namely:ue_send_sdu(), or ue_decode_si(), or ue_decode_p(), or ue_process_rar() based on the rnti type.
|
||||
//void handle_nfapi_UE_Rx(uint8_t Mod_id, Sched_Rsp_t *Sched_INFO, int eNB_id);
|
||||
|
||||
int pnf_ul_config_req_UE_MAC(nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req);
|
||||
|
||||
// This function will be processing UL and HI_DCI0 config requests to trigger all the MAC Tx related calls
|
||||
// at the UE side, namely: ue_get_SR(), ue_get_rach(), ue_get_sdu() based on the pdu configuration type.
|
||||
// The output of these calls will be put to an UL_IND_t structure which will then be the input to
|
||||
// send_nfapi_UL_indications().
|
||||
UL_IND_t generate_nfapi_UL_indications(Sched_Rsp_t sched_response);
|
||||
|
||||
// This function should pass the UL indication messages to the eNB side through the socket interface.
|
||||
void send_nfapi_UL_indications(UL_IND_t UL_INFO);
|
||||
|
||||
// This function should be filling the nfapi ULSCH indications at the MAC level of the UE in a similar manner
|
||||
// as fill_rx_indication() does. It should get called from ue_get_SDU()
|
||||
|
||||
//void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe);
|
||||
|
||||
void fill_rx_indication_UE_MAC(module_id_t Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t *ulsch_buffer, uint16_t buflen, uint16_t rnti, int index);
|
||||
|
||||
|
||||
// This function should be indicating directly to the eNB when there is a planned scheduling request at the MAC layer
|
||||
// of the UE. It should get called from ue_get_SR()
|
||||
void fill_sr_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint16_t rnti);
|
||||
|
||||
// In our case the this function will be always indicating ACK to the MAC of the eNB (i.e. always assuming)
|
||||
// successful decoding.
|
||||
void fill_crc_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t crc_flag, int index, uint16_t rnti);
|
||||
|
||||
|
||||
void fill_rach_indication_UE_MAC(int Mod_id,int frame,int subframe, UL_IND_t *UL_INFO, uint8_t ra_PreambleIndex, uint16_t ra_RNTI);
|
||||
|
||||
|
||||
void fill_ulsch_cqi_indication_UE_MAC(int Mod_id, uint16_t frame,uint8_t subframe, UL_IND_t *UL_INFO, uint16_t rnti);
|
||||
|
||||
|
||||
void fill_ulsch_harq_indication_UE_MAC(int Mod_id, int frame,int subframe, UL_IND_t *UL_INFO, nfapi_ul_config_ulsch_harq_information *harq_information, uint16_t rnti);
|
||||
|
||||
void fill_uci_harq_indication_UE_MAC(int Mod_id, int frame, int subframe, UL_IND_t *UL_INFO,nfapi_ul_config_harq_information *harq_information, uint16_t rnti
|
||||
/*uint8_t tdd_mapping_mode,
|
||||
uint16_t tdd_multiplexing_mask*/);
|
||||
|
||||
int ul_config_req_UE_MAC(nfapi_ul_config_request_t* req, int frame, int subframe, module_id_t Mod_id);
|
||||
|
||||
void handle_nfapi_ul_pdu_UE_MAC(module_id_t Mod_id,
|
||||
nfapi_ul_config_request_pdu_t *ul_config_pdu,
|
||||
uint16_t frame,uint8_t subframe,uint8_t srs_present, int index);
|
||||
|
||||
//int dl_config_req_UE_MAC(nfapi_dl_config_request_t* req, nfapi_tx_request_pdu_t* tx_request_pdu_list);
|
||||
int dl_config_req_UE_MAC(nfapi_dl_config_request_t* req, module_id_t Mod_id);
|
||||
|
||||
int tx_req_UE_MAC(nfapi_tx_request_t* req);
|
||||
|
||||
|
||||
int hi_dci0_req_UE_MAC(nfapi_hi_dci0_request_t* req, module_id_t Mod_id);
|
||||
|
||||
// The following set of memcpy functions should be getting called as callback functions from
|
||||
// pnf_p7_subframe_ind.
|
||||
|
||||
int memcpy_dl_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request_t* req);
|
||||
|
||||
|
||||
int memcpy_ul_config_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_ul_config_request_t* req);
|
||||
|
||||
|
||||
int memcpy_tx_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_tx_request_t* req);
|
||||
|
||||
|
||||
int memcpy_hi_dci0_req (nfapi_pnf_p7_config_t* pnf_p7, nfapi_hi_dci0_request_t* req);
|
||||
|
||||
void UE_config_stub_pnf(void);
|
||||
|
||||
|
||||
|
||||
#endif /* PHY_STUB_UE_H_ */
|
||||
Reference in New Issue
Block a user