* activate the sencond MBSFNArea when eMBMS relaying is activated * add wireshark interface for MCH PDUs (Not tested feature) * pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4156 818b1a75-f10b-46b9-bf7c-635c3b92a50f
284 lines
10 KiB
C
Executable File
284 lines
10 KiB
C
Executable File
/*******************************************************************************
|
|
|
|
Eurecom OpenAirInterface
|
|
Copyright(c) 1999 - 2010 Eurecom
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
under the terms and conditions of the GNU General Public License,
|
|
version 2, as published by the Free Software Foundation.
|
|
|
|
This program is distributed in the hope it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
The full GNU General Public License is included in this distribution in
|
|
the file called "COPYING".
|
|
|
|
Contact Information
|
|
Openair Admin: openair_admin@eurecom.fr
|
|
Openair Tech : openair_tech@eurecom.fr
|
|
Forums : http://forums.eurecom.fsr/openairinterface
|
|
Address : Eurecom, 2229, route des crêtes, 06560 Valbonne Sophia Antipolis, France
|
|
|
|
*******************************************************************************/
|
|
/*! \file defs.h
|
|
* \brief mac phy interface primitives
|
|
* \author Raymond Knopp and Navid Nikaein
|
|
* \date 2011
|
|
* \version 0.5
|
|
* @ingroup _mac
|
|
|
|
*/
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
/*! \brief MACPHY Interface */
|
|
typedef struct
|
|
{
|
|
/// Pointer function that initializes L2
|
|
int (*macphy_init)(int eMBMS_active, u8 CBA_enabled);
|
|
|
|
/// 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)(u8 Mod_id, u8 cooperation_flag, u32 frame, u8 subframe);//, int calibration_flag);
|
|
|
|
/// Fill random access response sdu, passing timing advance
|
|
u16 (*fill_rar)(u8 Mod_id,u32 frame,u8 *dlsch_buffer,u16 N_RB_UL, u8 input_buffer_length);
|
|
|
|
/// Terminate the RA procedure upon reception of l3msg on ulsch
|
|
void (*terminate_ra_proc)(u8 Mod_id,u32 frame,u16 UE_id, u8 *l3msg,u16 l3msg_len);
|
|
|
|
/// Initiate the RA procedure upon reception (hypothetical) of a valid preamble
|
|
void (*initiate_ra_proc)(u8 Mod_id,u32 frame,u16 preamble,s16 timing_offset,u8 sect_id,u8 subframe,u8 f_id);
|
|
|
|
/// cancel an ongoing RA procedure
|
|
void (*cancel_ra_proc)(u8 Mod_id,u32 frame,u16 preamble);
|
|
|
|
/// Get DCI for current subframe from MAC
|
|
DCI_PDU* (*get_dci_sdu)(u8 Mod_id,u32 frame,u8 subframe);
|
|
|
|
/// Get DLSCH sdu for particular RNTI and Transport block index
|
|
u8* (*get_dlsch_sdu)(u8 Mod_id,u32 frame,u16 rnti,u8 TB_index);
|
|
|
|
/// Send ULSCH sdu to MAC for given rnti
|
|
void (*rx_sdu)(u8 Mod_id,u32 frame,u16 rnti, u8 *sdu,u16 sdu_len);
|
|
|
|
/// Indicate failure to synch to external source
|
|
void (*mrbch_phy_sync_failure) (u8 Mod_id,u32 frame, u8 free_eNB_index);
|
|
|
|
/// Indicate Scheduling Request from UE
|
|
void (*SR_indication)(u8 Mod_id,u32 frame,u16 rnti,u8 subframe);
|
|
|
|
/// Configure Common PHY parameters from SIB1
|
|
void (*phy_config_sib1_eNB)(u8 Mod_id,
|
|
TDD_Config_t *tdd_config,
|
|
u8 SIwindowsize,
|
|
u16 SIperiod);
|
|
|
|
/// Configure Common PHY parameters from SIB2
|
|
void (*phy_config_sib2_eNB)(u8 Mod_id,
|
|
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
|
|
ARFCN_ValueEUTRA_t *ul_CArrierFreq,
|
|
long *ul_Bandwidth,
|
|
AdditionalSpectrumEmission_t *additionalSpectrumEmission,
|
|
struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList);
|
|
|
|
#ifdef Rel10
|
|
/// Configure Common PHY parameters from SIB13
|
|
void (*phy_config_sib13_eNB)(u8 Mod_id,int mbsfn_Area_idx,
|
|
long mbsfn_AreaId_r9);
|
|
#endif
|
|
|
|
/// PHY-Config-Dedicated eNB
|
|
void (*phy_config_dedicated_eNB)(u8 Mod_id,u16 rnti,
|
|
struct PhysicalConfigDedicated *physicalConfigDedicated);
|
|
|
|
#ifdef Rel10
|
|
/// Get MCH sdu and corresponding MCS for particular MBSFN subframe
|
|
MCH_PDU* (*get_mch_sdu)(uint8_t Mod_id,uint32_t frame,uint32_t subframe);
|
|
#endif
|
|
// configure the cba rnti at the physical layer
|
|
void (*phy_config_cba_rnti)(u8 Mod_id,u8 eNB_flag, u8 index, u16 cba_rnti, u8 cba_group_id, u8 num_active_cba_groups);
|
|
|
|
// UE functions
|
|
|
|
/// Indicate loss of synchronization of PBCH for this eNB to MAC layer
|
|
void (*out_of_sync_ind)(u8 Mod_id,u32 frame,u16 eNB_index);
|
|
|
|
/// Send a received SI sdu
|
|
void (*ue_decode_si)(u8 Mod_id,u32 frame, u8 CH_index, void *pdu, u16 len);
|
|
|
|
/// Send a received DLSCH sdu to MAC
|
|
void (*ue_send_sdu)(u8 Mod_id,u32 frame,u8 *sdu,u16 sdu_len,u8 CH_index);
|
|
|
|
#ifdef Rel10
|
|
/// Send a received MCH sdu to MAC
|
|
void (*ue_send_mch_sdu)(u8 Mod_id,u32 frame,u8 *sdu,u16 sdu_len,u8 CH_index);
|
|
|
|
/// Function to check if UE PHY needs to decode MCH for MAC
|
|
/// Return MCS value if need to decode, otherwise -1
|
|
int (*ue_query_mch)(uint8_t Mod_id,uint32_t frame,uint32_t subframe);
|
|
#endif
|
|
|
|
/// Retrieve ULSCH sdu from MAC
|
|
void (*ue_get_sdu)(u8 Mod_id,u32 frame,u8 subframe, u8 CH_index,u8 *ulsch_buffer,u16 buflen,u8 *access_mode);
|
|
|
|
/// Retrieve RRCConnectionReq from MAC
|
|
PRACH_RESOURCES_t* (*ue_get_rach)(u8 Mod_id,u32 frame,u8 Msg3_flag,u8 subframe);
|
|
|
|
/// Process Random-Access Response
|
|
u16 (*ue_process_rar)(u8 Mod_id,u32 frame,u8 *dlsch_buffer,u16 *t_crnti,u8 preamble_index);
|
|
|
|
/// Get SR payload (0,1) from UE MAC
|
|
u32 (*ue_get_SR)(u8 Mod_id,u32 frame,u8 eNB_id,u16 rnti,u8 subframe);
|
|
|
|
/// Indicate synchronization with valid PBCH
|
|
void (*dl_phy_sync_success) (u8 Mod_id,u32 frame, u8 CH_index,u8 first_sync);
|
|
|
|
/// Only calls the PDCP for now
|
|
UE_L2_STATE_t (*ue_scheduler)(u8 Mod_id, u32 frame,u8 subframe, lte_subframe_t direction,u8 eNB_id);
|
|
|
|
/// PHY-Config-Dedicated UE
|
|
void (*phy_config_dedicated_ue)(u8 Mod_id,u8 CH_index,
|
|
struct PhysicalConfigDedicated *physicalConfigDedicated);
|
|
|
|
/// Configure Common PHY parameters from SIB1
|
|
void (*phy_config_sib1_ue)(u8 Mod_id,u8 CH_index,
|
|
TDD_Config_t *tdd_config,
|
|
u8 SIwindowsize,
|
|
u16 SIperiod);
|
|
|
|
/// Configure Common PHY parameters from SIB2
|
|
void (*phy_config_sib2_ue)(u8 Mod_id,u8 CH_index,
|
|
RadioResourceConfigCommonSIB_t *radioResourceConfigCommon,
|
|
ARFCN_ValueEUTRA_t *ul_CArrierFreq,
|
|
long *ul_Bandwidth,
|
|
AdditionalSpectrumEmission_t *additionalSpectrumEmission,
|
|
struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList);
|
|
|
|
#ifdef Rel10
|
|
/// Configure Common PHY parameters from SIB13
|
|
void (*phy_config_sib13_ue)(u8 Mod_id,u8 CH_index,int mbsfn_Area_idx,
|
|
long mbsfn_AreaId_r9);
|
|
#endif
|
|
|
|
/// Function to indicate failure of contention resolution or RA procedure
|
|
void (*ra_failed)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function to indicate success of contention resolution or RA procedure
|
|
void (*ra_succeeded)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function to indicate the transmission of msg1/rach to MAC
|
|
void (*Msg1_transmitted)(u8 Mod_id,u32 frame,u8 eNB_id);
|
|
|
|
/// Function to indicate Msg3 transmission/retransmission which initiates/reset Contention Resolution Timer
|
|
void (*Msg3_transmitted)(u8 Mod_id,u32 frame,u8 eNB_id);
|
|
|
|
/// Function to pass inter-cell measurement parameters to PHY (cell Ids)
|
|
void (*phy_config_meas_ue)(u8 Mod_id,u8 eNB_index,u8 n_adj_cells,u32 *adj_cell_id);
|
|
|
|
// PHY Helper Functions
|
|
|
|
/// RIV computation from PHY
|
|
u16 (*computeRIV)(u16 N_RB_DL,u16 RBstart,u16 Lcrbs);
|
|
|
|
/// Downlink TBS table lookup from PHY
|
|
u16 (*get_TBS_DL)(u8 mcs, u16 nb_rb);
|
|
|
|
/// Uplink TBS table lookup from PHY
|
|
u16 (*get_TBS_UL)(u8 mcs, u16 nb_rb);
|
|
|
|
/// Function to retrieve the HARQ round index for a particular UL/DLSCH and harq_pid
|
|
int (*get_ue_active_harq_pid)(u8 Mod_id, u16 rnti, u8 subframe, u8 *harq_pid, u8 *round, u8 ul_flag);
|
|
|
|
/// Function to retrieve number of CCE
|
|
u16 (*get_nCCE_max)(u8 Mod_id);
|
|
|
|
/// Function to retrieve number of PRB in an rb_alloc
|
|
u32 (*get_nb_rb)(u8 ra_header, u32 rb_alloc, int n_rb_dl);
|
|
|
|
/// Function to retrieve transmission mode for UE
|
|
u8 (*get_transmission_mode)(u16 Mod_id,u16 rnti);
|
|
|
|
/// Function to retrieve rb_alloc bitmap from dci rballoc field and VRB type
|
|
u32 (*get_rballoc)(u8 vrb_type, u16 rb_alloc_dci);
|
|
|
|
/// Function for UE MAC to retrieve current PHY connectivity mode (PRACH,RA_RESPONSE,PUSCH)
|
|
UE_MODE_t (*get_ue_mode)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function for UE MAC to retrieve measured Path Loss
|
|
s16 (*get_PL)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function for UE MAC to retrieve RSRP/RSRQ measurements
|
|
u8* (*get_RSRP)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function for UE MAC to retrieve RSRP/RSRQ measurements
|
|
u8* (*get_RSRQ)(u8 Mod_id,u8 eNB_index);
|
|
|
|
/// Function for UE/eNB MAC to retrieve number of PRACH in TDD
|
|
u8 (*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
|
|
u8 (*get_fid_prach_tdd)(LTE_DL_FRAME_PARMS *frame_parms,u8 tdd_map_index);
|
|
|
|
/// Function for eNB MAC to retrieve subframe direction
|
|
lte_subframe_t (*get_subframe_direction)(u8 Mod_id, u8 subframe);
|
|
|
|
// MAC Helper functions
|
|
/// Function for UE/PHY to compute PUSCH transmit power in power-control procedure (Po_NOMINAL_PUSCH parameter)
|
|
s8 (*get_Po_NOMINAL_PUSCH)(u8 Mod_id);
|
|
|
|
/// Function for UE/PHY to compute PUSCH transmit power in power-control procedure (deltaP_rampup parameter)
|
|
s8 (*get_deltaP_rampup)(u8 Mod_id);
|
|
|
|
/// Function for UE/PHY to compute PHR
|
|
s8 (*get_PHR)(u8 Mod_id, u8 eNB_index);
|
|
|
|
void (*process_timing_advance)(u8 Mod_id,s16 timing_advance);
|
|
|
|
LTE_eNB_UE_stats* (*get_eNB_UE_stats)(u8 Mod_id, u16 rnti);
|
|
|
|
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 *lte_frame_parms;
|
|
|
|
//ICIC algos
|
|
u8 (*get_SB_size)(u8 n_rb_dl);
|
|
|
|
//end ALU's algo
|
|
|
|
} MAC_xface;
|
|
|
|
|
|
#endif
|
|
|
|
|