add the relay node for a dual stack operation for eMBMS (experimental)
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4146 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -334,6 +334,9 @@ typedef struct {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define NUMBER_OF_RN_MAX 3
|
||||
|
||||
typedef enum {no_relay=0,unicast_relay=1,multicast_relay=2} relaying_mode_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -61,6 +61,7 @@ char mode_string[4][20] = {"NOT SYNCHED","PRACH","RAR","PUSCH"};
|
||||
#ifndef OPENAIR2
|
||||
unsigned char NB_eNB_INST=0;
|
||||
unsigned char NB_UE_INST=0;
|
||||
unsigned char NB_RN_INST=0;
|
||||
unsigned char NB_INST=0;
|
||||
#endif
|
||||
|
||||
|
||||
+15
-10
@@ -125,8 +125,9 @@ void cleanup_dlsch_threads(void);
|
||||
@param next_slot Index of next_slot (0-19)
|
||||
@param phy_vars_eNB Pointer to eNB variables on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
@param r_mode indicates the relaying operation: 0: no_relaying, 1: unicast relaying, 2: multicast relaying
|
||||
*/
|
||||
void phy_procedures_eNB_lte(u8 last_slot, u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag);
|
||||
void phy_procedures_eNB_lte(u8 last_slot, u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag, relaying_mode_t r_mode);
|
||||
/*!
|
||||
\brief Top-level entry routine for UE procedures. Called every slot by process scheduler. In even slots, it performs RX functions from previous subframe (if required). On odd slots, it generate TX waveform for the following subframe.
|
||||
@param last_slot Index of last slot (0-19)
|
||||
@@ -135,8 +136,9 @@ void phy_procedures_eNB_lte(u8 last_slot, u8 next_slot,PHY_VARS_eNB *phy_vars_eN
|
||||
@param eNB_id ID of eNB on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
@param mode calibration/debug mode
|
||||
@param relaying_mode indicates the relaying operation: 0: no_relaying, 1: unicast relaying, 2: multicast relaying
|
||||
*/
|
||||
void phy_procedures_UE_lte(u8 last_slot, u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode);
|
||||
void phy_procedures_UE_lte(u8 last_slot, u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode, relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for UE TX procedures in normal subframes.
|
||||
@@ -146,7 +148,7 @@ void phy_procedures_UE_lte(u8 last_slot, u8 next_slot,PHY_VARS_UE *phy_vars_ue,u
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
@param mode calib/normal mode
|
||||
*/
|
||||
void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode);
|
||||
void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode,relaying_mode_t r_mode);
|
||||
/*!
|
||||
\brief Scheduling for UE RX procedures in normal subframes.
|
||||
@param last_slot Index of last slot (0-19)
|
||||
@@ -154,8 +156,9 @@ void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abs
|
||||
@param eNB_id Local id of eNB on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
@param mode calibration/debug mode
|
||||
@param r_mode instruct PHY to operate as normal (0), unicast relay (1), or multicast relay (2)
|
||||
*/
|
||||
int phy_procedures_UE_RX(u8 last_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode);
|
||||
int phy_procedures_UE_RX(u8 last_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for UE TX procedures in TDD S-subframes.
|
||||
@@ -164,7 +167,7 @@ int phy_procedures_UE_RX(u8 last_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abst
|
||||
@param eNB_id Local id of eNB on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
*/
|
||||
void phy_procedures_UE_S_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag);
|
||||
void phy_procedures_UE_S_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for UE RX procedures in TDD S-subframes.
|
||||
@@ -173,15 +176,17 @@ void phy_procedures_UE_S_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 a
|
||||
@param eNB_id Local id of eNB on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
*/
|
||||
void phy_procedures_UE_S_RX(u8 last_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag);
|
||||
void phy_procedures_UE_S_RX(u8 last_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag, relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for eNB TX procedures in normal subframes.
|
||||
@param next_slot Index of next slot (0-19)
|
||||
@param phy_vars_eNB Pointer to eNB variables on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
@param r_mode instruct PHY to operate as normal (0), unicast relay (1), or multicast relay (2),
|
||||
@note: r_mode could be extended to support other values to indicate the type of relaying AF,DF,QF, and QMF
|
||||
*/
|
||||
void phy_procedures_eNB_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag);
|
||||
void phy_procedures_eNB_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for eNB RX procedures in normal subframes.
|
||||
@@ -189,7 +194,7 @@ void phy_procedures_eNB_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstractio
|
||||
@param phy_vars_eNB Pointer to eNB variables on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
*/
|
||||
void phy_procedures_eNB_RX(u8 last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag);
|
||||
void phy_procedures_eNB_RX(u8 last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for eNB TX procedures in TDD S-subframes.
|
||||
@@ -197,7 +202,7 @@ void phy_procedures_eNB_RX(u8 last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstractio
|
||||
@param phy_vars_eNB Pointer to eNB variables on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
*/
|
||||
void phy_procedures_eNB_S_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag);
|
||||
void phy_procedures_eNB_S_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Scheduling for eNB RX procedures in TDD S-subframes.
|
||||
@@ -205,7 +210,7 @@ void phy_procedures_eNB_S_TX(u8 next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstract
|
||||
@param phy_vars_eNB Pointer to eNB variables on which to act
|
||||
@param abstraction_flag Indicator of PHY abstraction
|
||||
*/
|
||||
void phy_procedures_eNB_S_RX(u8 last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag);
|
||||
void phy_procedures_eNB_S_RX(u8 last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode);
|
||||
|
||||
/*!
|
||||
\brief Function to compute subframe type as a function of Frame type and TDD Configuration (implements Table 4.2.2 from 36.211, p.11 from version 8.6) and subframe index.
|
||||
|
||||
@@ -410,7 +410,7 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
|
||||
}
|
||||
*/
|
||||
|
||||
void phy_procedures_eNB_S_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag) {
|
||||
void phy_procedures_eNB_S_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode) {
|
||||
|
||||
unsigned char sect_id=0;
|
||||
|
||||
@@ -885,7 +885,7 @@ void fill_dci_emos(DCI_PDU *DCI_pdu, u8 subframe, PHY_VARS_eNB *phy_vars_eNB) {
|
||||
int QPSK[4]={AMP_OVER_SQRT2|(AMP_OVER_SQRT2<<16),AMP_OVER_SQRT2|((65536-AMP_OVER_SQRT2)<<16),((65536-AMP_OVER_SQRT2)<<16)|AMP_OVER_SQRT2,((65536-AMP_OVER_SQRT2)<<16)|(65536-AMP_OVER_SQRT2)};
|
||||
int QPSK2[4]={AMP_OVER_2|(AMP_OVER_2<<16),AMP_OVER_2|((65536-AMP_OVER_2)<<16),((65536-AMP_OVER_2)<<16)|AMP_OVER_2,((65536-AMP_OVER_2)<<16)|(65536-AMP_OVER_2)};
|
||||
|
||||
void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag) {
|
||||
void phy_procedures_eNB_TX(unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode) {
|
||||
u8 *pbch_pdu=&phy_vars_eNB->pbch_pdu[0];
|
||||
// unsigned int nb_dci_ue_spec = 0, nb_dci_common = 0;
|
||||
u16 input_buffer_length, re_allocated=0;
|
||||
@@ -2397,7 +2397,7 @@ void ulsch_decoding_procedures(unsigned char last_slot, unsigned int i, PHY_VARS
|
||||
}
|
||||
|
||||
|
||||
void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag) {
|
||||
void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag,relaying_mode_t r_mode) {
|
||||
//RX processing
|
||||
u32 l, ret,i,j;
|
||||
u32 sect_id=0;
|
||||
@@ -3357,7 +3357,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,u8
|
||||
|
||||
#undef DEBUG_PHY_PROC
|
||||
|
||||
void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag) {
|
||||
void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY_VARS_eNB *phy_vars_eNB,u8 abstraction_flag, relaying_mode_t r_mode) {
|
||||
/*
|
||||
if (phy_vars_eNB->frame >= 1000)
|
||||
mac_xface->macphy_exit("Exiting after 1000 Frames\n");
|
||||
@@ -3372,28 +3372,29 @@ void phy_procedures_eNB_lte(unsigned char last_slot, unsigned char next_slot,PHY
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d: Calling phy_procedures_eNB_TX(%d)\n", phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot);
|
||||
#endif
|
||||
phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag);
|
||||
|
||||
phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_mode);
|
||||
}
|
||||
if (((phy_vars_eNB->lte_frame_parms.frame_type == 1 )&&(subframe_select(&phy_vars_eNB->lte_frame_parms,last_slot>>1)==SF_UL))||
|
||||
(phy_vars_eNB->lte_frame_parms.frame_type == 0)){
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d: Calling phy_procedures_eNB_RX(%d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, last_slot);
|
||||
#endif
|
||||
phy_procedures_eNB_RX(last_slot,phy_vars_eNB,abstraction_flag);
|
||||
phy_procedures_eNB_RX(last_slot,phy_vars_eNB,abstraction_flag,r_mode);
|
||||
}
|
||||
if ((subframe_select(&phy_vars_eNB->lte_frame_parms,next_slot>>1)==SF_S) &&
|
||||
((next_slot&1)==0)) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d: Calling phy_procedures_eNB_S_TX(%d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->frame, next_slot);
|
||||
#endif
|
||||
phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag);
|
||||
phy_procedures_eNB_TX(next_slot,phy_vars_eNB,abstraction_flag,r_mode);
|
||||
}
|
||||
if ((subframe_select(&phy_vars_eNB->lte_frame_parms,last_slot>>1)==SF_S) &&
|
||||
((last_slot&1)==0)){
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d: Calling phy_procedures_eNB_S_RX(%d)\n", phy_vars_eNB->Mod_id,phy_vars_eNB->frame, last_slot);
|
||||
#endif
|
||||
phy_procedures_eNB_S_RX(last_slot,phy_vars_eNB,abstraction_flag);
|
||||
phy_procedures_eNB_S_RX(last_slot,phy_vars_eNB,abstraction_flag,r_mode);
|
||||
}
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_ENB_LTE,0);
|
||||
|
||||
|
||||
@@ -557,7 +557,7 @@ int dummy_tx_buffer[3840*4] __attribute__((aligned(16)));
|
||||
PRACH_RESOURCES_t prach_resources_local;
|
||||
#endif
|
||||
|
||||
void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode) {
|
||||
void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode,relaying_mode_t r_mode) {
|
||||
|
||||
// int i_d;
|
||||
u16 first_rb, nb_rb;
|
||||
@@ -1292,7 +1292,7 @@ void phy_procedures_UE_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abs
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX, VCD_FUNCTION_OUT);
|
||||
}
|
||||
|
||||
void phy_procedures_UE_S_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag) {
|
||||
void phy_procedures_UE_S_TX(u8 next_slot,PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,relaying_mode_t r_mode) {
|
||||
int aa;//i,aa;
|
||||
LTE_DL_FRAME_PARMS *frame_parms=&phy_vars_ue->lte_frame_parms;
|
||||
|
||||
@@ -2163,7 +2163,7 @@ int lte_ue_pdcch_procedures(u8 eNB_id,u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8
|
||||
}
|
||||
|
||||
|
||||
int phy_procedures_UE_RX(u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode) {
|
||||
int phy_procedures_UE_RX(u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode,relaying_mode_t r_mode) {
|
||||
|
||||
u16 l,m,n_symb;
|
||||
// int eNB_id = 0,
|
||||
@@ -3015,7 +3015,7 @@ int phy_procedures_UE_RX(u8 last_slot, PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abs
|
||||
return (0);
|
||||
}
|
||||
|
||||
void phy_procedures_UE_lte(u8 last_slot, u8 next_slot, PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode) {
|
||||
void phy_procedures_UE_lte(u8 last_slot, u8 next_slot, PHY_VARS_UE *phy_vars_ue,u8 eNB_id,u8 abstraction_flag,runmode_t mode, relaying_mode_t r_mode) {
|
||||
|
||||
#undef DEBUG_PHY_PROC
|
||||
|
||||
@@ -3039,22 +3039,22 @@ void phy_procedures_UE_lte(u8 last_slot, u8 next_slot, PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
if ((subframe_select(&phy_vars_ue->lte_frame_parms,next_slot>>1)==SF_UL)||
|
||||
(phy_vars_ue->lte_frame_parms.frame_type == 0)){
|
||||
phy_procedures_UE_TX(next_slot,phy_vars_ue,eNB_id,abstraction_flag,mode);
|
||||
phy_procedures_UE_TX(next_slot,phy_vars_ue,eNB_id,abstraction_flag,mode,r_mode);
|
||||
}
|
||||
if ((subframe_select(&phy_vars_ue->lte_frame_parms,last_slot>>1)==SF_DL) ||
|
||||
(phy_vars_ue->lte_frame_parms.frame_type == 0)){
|
||||
phy_procedures_UE_RX(last_slot,phy_vars_ue,eNB_id,abstraction_flag,mode);
|
||||
phy_procedures_UE_RX(last_slot,phy_vars_ue,eNB_id,abstraction_flag,mode,r_mode);
|
||||
#ifdef EMOS
|
||||
phy_procedures_emos_UE_RX(phy_vars_ue,last_slot,eNB_id);
|
||||
#endif
|
||||
}
|
||||
if ((subframe_select(&phy_vars_ue->lte_frame_parms,next_slot>>1)==SF_S) &&
|
||||
((next_slot&1)==1)) {
|
||||
phy_procedures_UE_S_TX(next_slot,phy_vars_ue,eNB_id,abstraction_flag);
|
||||
phy_procedures_UE_S_TX(next_slot,phy_vars_ue,eNB_id,abstraction_flag,r_mode);
|
||||
}
|
||||
if ((subframe_select(&phy_vars_ue->lte_frame_parms,last_slot>>1)==SF_S) &&
|
||||
((last_slot&1)==0)) {
|
||||
phy_procedures_UE_RX(last_slot,phy_vars_ue,eNB_id,abstraction_flag,mode);
|
||||
phy_procedures_UE_RX(last_slot,phy_vars_ue,eNB_id,abstraction_flag,mode, r_mode);
|
||||
}
|
||||
|
||||
#ifdef OPENAIR2
|
||||
|
||||
Reference in New Issue
Block a user