Clean-up and bug-fixes from S. Held (IMST)
git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6420 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -567,6 +567,7 @@ WARN_LOGFILE =
|
||||
INPUT = ../../PHY/impl_defs_top.h \
|
||||
../../PHY/impl_defs_lte.h \
|
||||
../../PHY/defs.h \
|
||||
../../PHY/sse_intrin.h \
|
||||
../../PHY/CODING/defs.h \
|
||||
../../PHY/TOOLS/defs.h \
|
||||
../../PHY/LTE_TRANSPORT/defs.h \
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include "extern_3GPPinterleaver.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "smmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
//#define DEBUG_TURBO_ENCODER 1
|
||||
#define CALLGRIND 1
|
||||
|
||||
@@ -34,10 +34,10 @@
|
||||
|
||||
*/
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/CODING/defs.h"
|
||||
#include "PHY/CODING/lte_interleaver_inline.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
/*
|
||||
// 3gpp2 polynomials
|
||||
|
||||
@@ -42,10 +42,9 @@
|
||||
///
|
||||
///
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "smmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifndef TEST_DEBUG
|
||||
#ifndef TEST_DEBUG
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/CODING/defs.h"
|
||||
#include "PHY/CODING/lte_interleaver_inline.h"
|
||||
|
||||
@@ -44,8 +44,7 @@
|
||||
///
|
||||
///
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "smmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifndef TEST_DEBUG
|
||||
#include "PHY/defs.h"
|
||||
|
||||
@@ -43,8 +43,7 @@
|
||||
///
|
||||
///
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "smmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifndef TEST_DEBUG
|
||||
#include "PHY/defs.h"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
#define F1 3
|
||||
#define F2 10
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#define sgn(a) (((a)<0) ? 0 : 1)
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
|
||||
#ifndef EXPRESSMIMO_TARGET
|
||||
#include "emmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
#endif //EXPRESSMIMO_TARGET
|
||||
|
||||
extern unsigned char ccodedot11_table[128],ccodedot11_table_rev[128];
|
||||
@@ -212,9 +212,9 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short
|
||||
// set initial metrics
|
||||
|
||||
metrics0_15 = _mm_cvtsi32_si128(INIT0);
|
||||
metrics16_31 = _mm_xor_si128(metrics16_31,metrics16_31);
|
||||
metrics32_47 = _mm_xor_si128(metrics32_47,metrics32_47);
|
||||
metrics48_63 = _mm_xor_si128(metrics32_47,metrics32_47);
|
||||
metrics16_31 = _mm_setzero_si128();
|
||||
metrics32_47 = _mm_setzero_si128();
|
||||
metrics48_63 = _mm_setzero_si128();
|
||||
}
|
||||
rescale = _mm_cvtsi32_si128(RESCALE);
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef EXPRESSMIMO_TARGET
|
||||
#include "emmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
#endif //EXPRESSMIMO_TARGET
|
||||
|
||||
extern uint8_t ccodelte_table[128],ccodelte_table_rev[128];
|
||||
@@ -163,10 +163,10 @@ void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) {
|
||||
// set initial metrics
|
||||
//debug_msg("Doing viterbi\n");
|
||||
|
||||
metrics0_15 = _mm_xor_si128(metrics0_15,metrics0_15);
|
||||
metrics16_31 = _mm_xor_si128(metrics16_31,metrics16_31);
|
||||
metrics32_47 = _mm_xor_si128(metrics32_47,metrics32_47);
|
||||
metrics48_63 = _mm_xor_si128(metrics32_47,metrics32_47);
|
||||
metrics0_15 = _mm_setzero_si128();
|
||||
metrics16_31 = _mm_setzero_si128();
|
||||
metrics32_47 = _mm_setzero_si128();
|
||||
metrics48_63 = _mm_setzero_si128();
|
||||
#ifndef USER_MODE
|
||||
//debug_msg("Doing viterbi 2\n");
|
||||
#endif
|
||||
|
||||
@@ -28,8 +28,7 @@
|
||||
*******************************************************************************/
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
// This is 512/(1:256) in __m128i format
|
||||
int16_t inv_ch[256*8] = {512,512,512,512,512,512,512,512,
|
||||
|
||||
@@ -29,13 +29,8 @@
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifdef __SSE3__
|
||||
#include "pmmintrin.h"
|
||||
#include "tmmintrin.h"
|
||||
#else
|
||||
#endif
|
||||
|
||||
//#define k1 1000
|
||||
#define k1 1024
|
||||
|
||||
@@ -46,7 +46,7 @@ int dl_channel_level(int16_t *dl_ch,
|
||||
int avg;
|
||||
|
||||
//clear average level
|
||||
avg128F = _mm_xor_si128(avg128F,avg128F);
|
||||
avg128F = _mm_setzero_si128();
|
||||
dl_ch128=(__m128i *)dl_ch;
|
||||
|
||||
for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
|
||||
|
||||
@@ -33,17 +33,7 @@
|
||||
#include "SCHED/defs.h"
|
||||
#include "SCHED/extern.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "emmintrin.h"
|
||||
|
||||
#ifdef __SSE3__
|
||||
#include "pmmintrin.h"
|
||||
#include "tmmintrin.h"
|
||||
#else
|
||||
__m128i zeroPMI;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroPMI,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroPMI,(xmmy)))
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
//#define k1 1000
|
||||
#define k1 ((long long int) 1000)
|
||||
@@ -489,8 +479,8 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
// pmi
|
||||
|
||||
pmi128_re = _mm_xor_si128(pmi128_re,pmi128_re);
|
||||
pmi128_im = _mm_xor_si128(pmi128_im,pmi128_im);
|
||||
pmi128_re = _mm_setzero_si128();
|
||||
pmi128_im = _mm_setzero_si128();
|
||||
// limit is the number of groups of 4 REs in a subband (12 = 4 RBs, 3 = 1 RB)
|
||||
// for 5 MHz channelization, there are 7 subbands, 6 of size 4 RBs and 1 of size 1 RB
|
||||
if ((N_RB_DL==6) || (subband<(nb_subbands-1)))
|
||||
@@ -507,8 +497,8 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
|
||||
//print_shorts("ch1",dl_ch1_128);
|
||||
// }
|
||||
// if(i==0){
|
||||
mmtmpPMI0 = _mm_xor_si128(mmtmpPMI0,mmtmpPMI0);
|
||||
mmtmpPMI1 = _mm_xor_si128(mmtmpPMI1,mmtmpPMI1);
|
||||
mmtmpPMI0 = _mm_setzero_si128();
|
||||
mmtmpPMI1 = _mm_setzero_si128();
|
||||
// }
|
||||
// if(eNB_id==0)
|
||||
// print_ints("Pre_re",&mmtmpPMI0);
|
||||
|
||||
@@ -28,16 +28,9 @@
|
||||
*******************************************************************************/
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#include "PHY/sse_intrin.h"
|
||||
//#define DEBUG_CH
|
||||
|
||||
#ifndef __SSE3__
|
||||
__m128i zeroE;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
|
||||
//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroE,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zeroE,(xmmx)),15))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroE,(xmmy)))
|
||||
#endif
|
||||
|
||||
// For Channel Estimation in Distributed Alamouti Scheme
|
||||
//static int16_t temp_out_ifft[2048*4] __attribute__((aligned(16)));
|
||||
@@ -696,8 +689,8 @@ int16_t lte_ul_freq_offset_estimation(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
int16_t alpha[128] = {201, 402, 603, 804, 1006, 1207, 1408, 1610, 1811, 2013, 2215, 2417, 2619, 2822, 3024, 3227, 3431, 3634, 3838, 4042, 4246, 4450, 4655, 4861, 5066, 5272, 5479, 5686, 5893, 6101, 6309, 6518, 6727, 6937, 7147, 7358, 7570, 7782, 7995, 8208, 8422, 8637, 8852, 9068, 9285, 9503, 9721, 9940, 10160, 10381, 10603, 10825, 11049, 11273, 11498, 11725, 11952, 12180, 12410, 12640, 12872, 13104, 13338, 13573, 13809, 14046, 14285, 14525, 14766, 15009, 15253, 15498, 15745, 15993, 16243, 16494, 16747, 17001, 17257, 17515, 17774, 18035, 18298, 18563, 18829, 19098, 19368, 19640, 19915, 20191, 20470, 20750, 21033, 21318, 21605, 21895, 22187, 22481, 22778, 23078, 23380, 23685, 23992, 24302, 24615, 24931, 25250, 25572, 25897, 26226, 26557, 26892, 27230, 27572, 27917, 28266, 28618, 28975, 29335, 29699, 30067, 30440, 30817, 31198, 31583, 31973, 32368, 32767};
|
||||
|
||||
// compute log2_maxh (output_shift)
|
||||
avg128U1 = _mm_xor_si128(avg128U1,avg128U1);
|
||||
avg128U2 = _mm_xor_si128(avg128U2,avg128U2);
|
||||
avg128U1 = _mm_setzero_si128();
|
||||
avg128U2 = _mm_setzero_si128();
|
||||
|
||||
for (rb=0;rb<nb_rb;rb++) {
|
||||
avg128U1 = _mm_add_epi32(avg128U1,_mm_madd_epi16(ul_ch1[0],ul_ch1[0]));
|
||||
|
||||
@@ -46,12 +46,7 @@
|
||||
#include "PHY/extern.h"
|
||||
#include "SCHED/defs.h"
|
||||
#include "SIMULATION/TOOLS/defs.h" // for taus
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#include "assertions.h"
|
||||
|
||||
@@ -61,12 +56,6 @@
|
||||
|
||||
//#undef ALL_AGGREGATION
|
||||
|
||||
#ifndef __SSE3__
|
||||
__m128i zero2;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero2,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero2,(xmmy)))
|
||||
#endif
|
||||
|
||||
//extern uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3];
|
||||
//extern uint16_t pcfich_reg[4];
|
||||
|
||||
@@ -636,7 +625,7 @@ void pdcch_channel_level(int32_t **dl_ch_estimates_ext,
|
||||
for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++)
|
||||
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
//clear average level
|
||||
avg128P = _mm_xor_si128(avg128P,avg128P);
|
||||
avg128P = _mm_setzero_si128();
|
||||
dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][frame_parms->N_RB_DL*12];
|
||||
|
||||
for (rb=0;rb<nb_rb;rb++) {
|
||||
@@ -1272,9 +1261,6 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext,
|
||||
|
||||
|
||||
|
||||
#ifndef __SSE3__
|
||||
zero2 = _mm_xor_si128(zero2,zero2);
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_DCI_DECODING
|
||||
msg("[PHY] PDCCH comp: symbol %d\n",symbol);
|
||||
|
||||
@@ -38,26 +38,13 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifdef __SSE2__
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
|
||||
#ifndef __SSE3__
|
||||
__m128i zero;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
|
||||
//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zero,(xmmx)),15))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
|
||||
#endif
|
||||
|
||||
#ifndef USER_MODE
|
||||
#define NOCYGWIN_STATIC static
|
||||
@@ -110,7 +97,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
|
||||
unsigned char aatx,aarx;
|
||||
unsigned short nb_rb;
|
||||
int avgs, rb;
|
||||
LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq;
|
||||
LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0;
|
||||
|
||||
switch (type) {
|
||||
case SI_PDSCH:
|
||||
@@ -800,10 +787,6 @@ void dlsch_channel_compensation(int **rxdataF_ext,
|
||||
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
#ifndef __SSE3__
|
||||
zero = _mm_xor_si128(zero,zero);
|
||||
#endif
|
||||
|
||||
if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
|
||||
|
||||
if (frame_parms->mode1_flag==1) // 10 out of 12 so don't reduce size
|
||||
@@ -815,7 +798,7 @@ void dlsch_channel_compensation(int **rxdataF_ext,
|
||||
for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++) {
|
||||
if (mod_order == 4) {
|
||||
QAM_amp128 = _mm_set1_epi16(QAM16_n1); // 2/sqrt(10)
|
||||
QAM_amp128b = _mm_xor_si128(QAM_amp128b,QAM_amp128b);
|
||||
QAM_amp128b = _mm_setzero_si128();
|
||||
}
|
||||
else if (mod_order == 6) {
|
||||
QAM_amp128 = _mm_set1_epi16(QAM64_n1); //
|
||||
@@ -1180,15 +1163,11 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
|
||||
|
||||
rx_power_correction = 1;
|
||||
|
||||
#ifndef __SSE3__
|
||||
zero = _mm_xor_si128(zero,zero);
|
||||
#endif
|
||||
|
||||
//printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
|
||||
|
||||
if (mod_order == 4) {
|
||||
QAM_amp128 = _mm_set1_epi16(QAM16_n1);
|
||||
QAM_amp128b = _mm_xor_si128(QAM_amp128b,QAM_amp128b);
|
||||
QAM_amp128b = _mm_setzero_si128();
|
||||
}
|
||||
else if (mod_order == 6) {
|
||||
QAM_amp128 = _mm_set1_epi16(QAM64_n1);
|
||||
@@ -1396,15 +1375,11 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
|
||||
rx_power_correction = 1;
|
||||
|
||||
#ifndef __SSE3__
|
||||
zero = _mm_xor_si128(zero,zero);
|
||||
#endif
|
||||
|
||||
//printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
|
||||
|
||||
if (mod_order0 == 4) {
|
||||
QAM_amp0_128 = _mm_set1_epi16(QAM16_n1);
|
||||
QAM_amp0_128b = _mm_xor_si128(QAM_amp0_128b,QAM_amp0_128b);
|
||||
QAM_amp0_128b = _mm_setzero_si128();
|
||||
}
|
||||
else if (mod_order0 == 6) {
|
||||
QAM_amp0_128 = _mm_set1_epi16(QAM64_n1);
|
||||
@@ -1412,7 +1387,7 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
}
|
||||
if (mod_order1 == 4) {
|
||||
QAM_amp1_128 = _mm_set1_epi16(QAM16_n1);
|
||||
QAM_amp1_128b = _mm_xor_si128(QAM_amp1_128b,QAM_amp1_128b);
|
||||
QAM_amp1_128b = _mm_setzero_si128();
|
||||
}
|
||||
else if (mod_order1 == 6) {
|
||||
QAM_amp1_128 = _mm_set1_epi16(QAM64_n1);
|
||||
@@ -1949,7 +1924,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
|
||||
for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++)
|
||||
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
//clear average level
|
||||
avg128D = _mm_xor_si128(avg128D,avg128D);
|
||||
avg128D = _mm_setzero_si128();
|
||||
// 5 is always a symbol with no pilots for both normal and extended prefix
|
||||
|
||||
dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
|
||||
@@ -2008,7 +1983,7 @@ void dlsch_channel_level_TM3(int **dl_ch_estimates_ext,
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
//clear average level
|
||||
avg128D = _mm_xor_si128(avg128D,avg128D);
|
||||
avg128D = _mm_setzero_si128();
|
||||
avg[0] = 0;
|
||||
avg[1] = 0;
|
||||
// 5 is always a symbol with no pilots for both normal and extended prefix
|
||||
@@ -2083,7 +2058,7 @@ void dlsch_channel_level_TM56(int **dl_ch_estimates_ext,
|
||||
symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
//clear average level
|
||||
avg128D = _mm_xor_si128(avg128D,avg128D);
|
||||
avg128D = _mm_setzero_si128();
|
||||
avg[0] = 0;
|
||||
avg[1] = 0;
|
||||
// 5 is always a symbol with no pilots for both normal and extended prefix
|
||||
|
||||
@@ -38,27 +38,11 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#ifdef __SSE2__
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE4_1__
|
||||
#include <smmintrin.h>
|
||||
#endif
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
|
||||
#ifndef __SSE3__
|
||||
//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
//abs_#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16((*(__m128i*)&zero[0]),(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16((*(__m128i*)&zero[0]),(xmmx)),15))
|
||||
//#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifndef USER_MODE
|
||||
#define NOCYGWIN_STATIC static
|
||||
@@ -1061,7 +1045,7 @@ length = number of resource elements
|
||||
|
||||
// Compute the terms for the LLR of first bit
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
|
||||
// 1 term for numerator of LLR
|
||||
xmm3 = _mm_subs_epi16(y1r_over2,rho_rpi);
|
||||
@@ -1305,7 +1289,7 @@ length = number of resource elements
|
||||
y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
|
||||
// compute psi
|
||||
xmm3 = _mm_subs_epi16(y1r,rho_rpi);
|
||||
@@ -1569,7 +1553,7 @@ length = number of resource elements
|
||||
y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
|
||||
// compute psi
|
||||
xmm3 = _mm_subs_epi16(y1r,rho_rpi);
|
||||
@@ -1780,7 +1764,7 @@ void qam16_qpsk(short *stream0_in,
|
||||
y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
|
||||
psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
|
||||
|
||||
@@ -2237,7 +2221,7 @@ void qam16_qam16(short *stream0_in,
|
||||
y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
|
||||
psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
|
||||
|
||||
@@ -2748,7 +2732,7 @@ void qam16_qam64(short *stream0_in,
|
||||
y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
|
||||
xmm0 = _mm_setzero_si128(); // ZERO
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
|
||||
psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
|
||||
|
||||
@@ -3357,7 +3341,7 @@ void qam64_qpsk(short *stream0_in,
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
// Psi_r calculation from rho_rpi or rho_rmi
|
||||
xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
|
||||
xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
|
||||
@@ -4669,7 +4653,7 @@ void qam64_qam16(short *stream0_in,
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
// Psi_r calculation from rho_rpi or rho_rmi
|
||||
xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
|
||||
xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
|
||||
@@ -5924,7 +5908,7 @@ void qam64_qam64(short *stream0_in,
|
||||
y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
|
||||
|
||||
// Psi_r calculation from rho_rpi or rho_rmi
|
||||
xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
|
||||
xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
|
||||
xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
|
||||
|
||||
@@ -1016,7 +1016,7 @@ int dlsch_modulation(mod_sym_t **txdataF,
|
||||
uint8_t pilots=0;
|
||||
uint8_t skip_dc,skip_half;
|
||||
uint8_t mod_order0 = get_Qm(dlsch0_harq->mcs);
|
||||
uint8_t mod_order1;
|
||||
uint8_t mod_order1 = 0;
|
||||
int16_t amp_rho_a, amp_rho_b;
|
||||
int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8];
|
||||
int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8];
|
||||
|
||||
@@ -39,8 +39,7 @@
|
||||
*/
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#include "PHY/sse_intrin.h"
|
||||
//#define DEBUG_DRS
|
||||
|
||||
int generate_drs_pusch(PHY_VARS_UE *phy_vars_ue,
|
||||
|
||||
@@ -37,28 +37,18 @@
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/CODING/extern.h"
|
||||
#include "PHY/CODING/lte_interleaver_inline.h"
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
#ifdef PHY_ABSTRACTION
|
||||
#include "SIMULATION/TOOLS/defs.h"
|
||||
#endif
|
||||
|
||||
#ifndef __SSE3__
|
||||
extern __m128i zero;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
|
||||
#endif
|
||||
|
||||
//#define DEBUG_PBCH 1
|
||||
//#define DEBUG_PBCH_ENCODING
|
||||
@@ -524,7 +514,7 @@ int pbch_channel_level(int **dl_ch_estimates_ext,
|
||||
for (aatx=0;aatx<4;aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++)
|
||||
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
//clear average level
|
||||
avg128 = _mm_xor_si128(avg128,avg128);
|
||||
avg128 = _mm_setzero_si128();
|
||||
dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol_mod*6*12];
|
||||
|
||||
for (rb=0;rb<nb_rb;rb++) {
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
*******************************************************************************/
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
// Mask for identifying subframe for MBMS
|
||||
#define MBSFN_TDD_SF3 0x80// for TDD
|
||||
@@ -46,14 +47,6 @@
|
||||
#define MBSFN_FDD_SF8 0x04
|
||||
|
||||
|
||||
#ifndef __SSE3__
|
||||
#warning SSE3 instruction set not preset
|
||||
__m128i zeroM;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
|
||||
//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroM,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zeroM,(xmmx)),15))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroM,(xmmy)))
|
||||
#endif
|
||||
|
||||
|
||||
void dump_mch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int subframe) {
|
||||
|
||||
@@ -375,7 +368,7 @@ void mch_channel_level(int **dl_ch_estimates_ext,
|
||||
|
||||
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
//clear average level
|
||||
avg128 = _mm_xor_si128(avg128,avg128);
|
||||
avg128 = _mm_setzero_si128();
|
||||
// 5 is always a symbol with no pilots for both normal and extended prefix
|
||||
|
||||
dl_ch128=(__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
|
||||
|
||||
@@ -37,14 +37,7 @@
|
||||
* \note
|
||||
* \warning
|
||||
*/
|
||||
#ifdef __SSE2__
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
//#include "prach.h"
|
||||
@@ -960,8 +953,14 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
|
||||
(numshift>0) ? (not_found = 0) : (preamble_offset++);
|
||||
}
|
||||
}
|
||||
preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
|
||||
(preamble_shift < 0) ? (preamble_shift+=N_ZC) : preamble_shift;
|
||||
if (n_shift_ra>0)
|
||||
preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
|
||||
else
|
||||
preamble_shift = 0;
|
||||
|
||||
if (preamble_shift < 0)
|
||||
preamble_shift+=N_ZC;
|
||||
|
||||
preamble_index0++;
|
||||
if (preamble_index == 0)
|
||||
first_nonzero_root_idx = preamble_offset;
|
||||
|
||||
@@ -354,7 +354,7 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_
|
||||
sss0 = (int16_t*)&sss0_ext[0][5];
|
||||
sss5 = (int16_t*)&sss5_ext[0][5];
|
||||
for (flip=0;flip<2;flip++) { // d0/d5 flip in RX frame
|
||||
for (phase=0;phase<=7;phase++) { // phase offset between PSS and SSS
|
||||
for (phase=0;phase<7;phase++) { // phase offset between PSS and SSS
|
||||
for (Nid1 = 0 ; Nid1 <= 167; Nid1++) { // 168 possible Nid1 values
|
||||
metric = 0;
|
||||
if (flip==0) {
|
||||
|
||||
@@ -38,15 +38,6 @@
|
||||
* \warning
|
||||
*/
|
||||
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#ifdef __SSE4_1__
|
||||
#include <smmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "MAC_INTERFACE/defs.h"
|
||||
@@ -54,16 +45,12 @@
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
//#define DEBUG_ULSCH
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
//extern char* namepointer_chMag ;
|
||||
//eren
|
||||
//extern int **ulchmag_eren;
|
||||
//eren
|
||||
#ifndef __SSE3__
|
||||
__m128i zeroU;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroU,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroU,(xmmy)))
|
||||
#endif
|
||||
|
||||
|
||||
static short jitter[8] __attribute__ ((aligned(16))) = {1,0,0,1,0,1,1,0};
|
||||
@@ -502,7 +489,6 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
mmtmpU2 = _mm_abs_epi16(mmtmpU1);
|
||||
mmtmpU2 = _mm_subs_epi16(ch_magb[i],mmtmpU2);
|
||||
|
||||
#ifdef __SSE4_1__
|
||||
(*llrp32)[0] = _mm_extract_epi32(rxF[i],0);
|
||||
(*llrp32)[1] = _mm_extract_epi32(mmtmpU1,0);
|
||||
(*llrp32)[2] = _mm_extract_epi32(mmtmpU2,0);
|
||||
@@ -515,7 +501,6 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
|
||||
(*llrp32)[9] = _mm_extract_epi32(rxF[i],3);
|
||||
(*llrp32)[10] = _mm_extract_epi32(mmtmpU1,3);
|
||||
(*llrp32)[11] = _mm_extract_epi32(mmtmpU2,3);
|
||||
#endif
|
||||
(*llrp32)+=12;
|
||||
}
|
||||
|
||||
@@ -661,10 +646,6 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
|
||||
#endif
|
||||
// symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
#ifndef __SSE3__
|
||||
zeroU = _mm_xor_si128(zeroU,zeroU);
|
||||
#endif
|
||||
|
||||
// printf("comp: symbol %d\n",symbol);
|
||||
|
||||
#ifdef ULSCH_OFDMA
|
||||
@@ -862,10 +843,6 @@ void ulsch_channel_compensation_alamouti(int32_t **rxdataF_ext,
|
||||
|
||||
// symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
|
||||
|
||||
#ifndef __SSE3__
|
||||
zeroU = _mm_xor_si128(zeroU,zeroU);
|
||||
#endif
|
||||
|
||||
// printf("comp: symbol %d\n",symbol);
|
||||
|
||||
|
||||
@@ -1219,7 +1196,7 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
|
||||
|
||||
for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
|
||||
//clear average level
|
||||
avg128U = _mm_xor_si128(avg128U,avg128U);
|
||||
avg128U = _mm_setzero_si128();
|
||||
ul_ch128=(__m128i *)drs_ch_estimates_ext[aarx];
|
||||
|
||||
for (rb=0;rb<nb_rb;rb++) {
|
||||
|
||||
@@ -26,14 +26,6 @@
|
||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||
|
||||
*******************************************************************************/
|
||||
#ifdef __SSE2__
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/defs.h"
|
||||
#include "PHY/extern.h"
|
||||
#include "extern.h"
|
||||
@@ -44,11 +36,8 @@
|
||||
#else
|
||||
#include "rtai_math.h"
|
||||
#endif
|
||||
#ifndef __SSE3__
|
||||
__m128i zero;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
short conjugate75[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
|
||||
short conjugate75_2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1} ;
|
||||
short negate[8]__attribute__((aligned(16))) = {-1,-1,-1,-1,-1,-1,-1,-1};
|
||||
|
||||
@@ -27,16 +27,7 @@
|
||||
|
||||
*******************************************************************************/
|
||||
#include "defs.h"
|
||||
#include <xmmintrin.h>
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#else
|
||||
static short zero[8]={0,0,0,0,0,0,0,0};
|
||||
#define _mm_abs_epi16(xmmx) xmmx=_mm_xor_si128((xmmx),_mm_cmpgt_epi16(*(__m128i *)&zero[0],(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(*(__m128i *)&zero[0],(xmmy)))
|
||||
#define _mm_hadd_epi32(xmmx,xmmy) _mm_unpacklo_epi64(_mm_add_epi32(_mm_shuffle_epi32((xmmx),_MM_SHUFFLE(0,2,0,2)),_mm_shuffle_epi32((xmmx),_MM_SHUFFLE(1,3,1,3))),_mm_add_epi32(_mm_shuffle_epi32((xmmy),_MM_SHUFFLE(0,2,0,2)),_mm_shuffle_epi32((xmmy),_MM_SHUFFLE(1,3,1,3))))
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
// returns the complex dot product of x and y
|
||||
|
||||
|
||||
@@ -26,8 +26,7 @@
|
||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||
|
||||
*******************************************************************************/
|
||||
#include "emmintrin.h"
|
||||
#include "smmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
#include "defs.h"
|
||||
|
||||
#ifndef EXPRESSMIMO_TARGET
|
||||
|
||||
@@ -38,14 +38,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __SSE2__
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#endif
|
||||
#ifdef __SSE3__
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
|
||||
//defined in rtai_math.h
|
||||
|
||||
@@ -76,8 +76,7 @@
|
||||
// ** WARNING log2size>=2 **
|
||||
//
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "mmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
/// Function ReverseBits()
|
||||
/// computes bit reversed permutation vector
|
||||
|
||||
@@ -52,22 +52,12 @@ int rev2048[2048],rev512[512],rev4096[4096],rev8192[8192];
|
||||
#endif
|
||||
|
||||
|
||||
#include "emmintrin.h"
|
||||
#include "xmmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
|
||||
static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
|
||||
|
||||
|
||||
#ifndef __SSE3__
|
||||
__m128i zerodft;
|
||||
#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zerodft,(xmmx)))
|
||||
#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zerodft,(xmmy)))
|
||||
#else
|
||||
#include <pmmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
|
||||
static short reflip[8] __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
|
||||
|
||||
static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline));
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
*******************************************************************************/
|
||||
#ifndef EXPRESSMIMO_TARGET
|
||||
#include <mmintrin.h>
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
void Zero_Buffer(void *buf,unsigned int length)
|
||||
{
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
#include "defs.h"
|
||||
#include "extern.h"
|
||||
|
||||
#include "mmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
|
||||
|
||||
#ifndef USER_MODE
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#include "defs.h"
|
||||
|
||||
#ifndef EXPRESSMIMO_TARGET
|
||||
#include "mmintrin.h"
|
||||
#include "PHY/sse_intrin.h"
|
||||
#endif //EXPRESSMIMO_TARGET
|
||||
|
||||
// Compute Energy of a complex signal vector, removing the DC component!
|
||||
|
||||
@@ -92,6 +92,9 @@
|
||||
|
||||
#define cmax3(a,b,c) ((cmax(a,b)>c) ? (cmax(a,b)) : (c))
|
||||
|
||||
/// suppress compiler warning for unused arguments
|
||||
#define UNUSED(x) (void)x;
|
||||
|
||||
#ifdef EXPRESSMIMO_TARGET
|
||||
#define Zero_Buffer(x,y) Zero_Buffer_nommx(x,y)
|
||||
#endif //EXPRESSMiMO_TARGET
|
||||
|
||||
@@ -425,7 +425,9 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
|
||||
}
|
||||
*/
|
||||
|
||||
void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type) {
|
||||
void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type)
|
||||
{
|
||||
UNUSED(r_type);
|
||||
|
||||
// unsigned char sect_id=0;
|
||||
int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
|
||||
@@ -1021,9 +1023,9 @@ void phy_eNB_lte_check_measurement_thresholds(instance_t instanceP, ral_threshol
|
||||
|
||||
|
||||
void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,
|
||||
relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
|
||||
relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
|
||||
UNUSED(phy_vars_rn);
|
||||
uint8_t *pbch_pdu=&phy_vars_eNB->pbch_pdu[0];
|
||||
// unsigned int nb_dci_ue_spec = 0, nb_dci_common = 0;
|
||||
uint16_t input_buffer_length, re_allocated=0;
|
||||
uint32_t i,aa;
|
||||
uint8_t harq_pid;
|
||||
@@ -1032,13 +1034,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#ifndef OPENAIR2
|
||||
DCI_PDU DCI_pdu_tmp;
|
||||
uint8_t DLSCH_pdu_tmp[768*8];
|
||||
uint8_t rar;
|
||||
#endif
|
||||
int8_t UE_id;
|
||||
uint8_t num_pdcch_symbols=0;
|
||||
int16_t crnti;
|
||||
uint16_t frame_tx;
|
||||
// int16_t amp;
|
||||
uint8_t ul_subframe;
|
||||
uint32_t ul_frame;
|
||||
#ifdef Rel10
|
||||
@@ -1057,7 +1055,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
start_meas(&phy_vars_eNB->phy_proc_tx);
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[%s %d] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n",
|
||||
LOG_D(PHY,"[%s %"PRIu8"] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n",
|
||||
(r_type == multicast_relay) ? "RN/eNB" : "eNB",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, subframe);
|
||||
#endif
|
||||
@@ -1067,10 +1065,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,0,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);//,1);
|
||||
#endif
|
||||
|
||||
// for (sect_id = 0 ; sect_id < number_of_cards; sect_id++) {
|
||||
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
// clear the transmit data array for the current subframe
|
||||
for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB;aa++) {
|
||||
|
||||
memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][subframe*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)],
|
||||
@@ -1099,12 +1095,11 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
switch (r_type){
|
||||
case no_relay:
|
||||
if ((mch_pduP->Pdu_size > 0) && (mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0
|
||||
//if ((mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0
|
||||
LOG_I(PHY,"[eNB%d] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %d, TBS %d) \n",
|
||||
LOG_I(PHY,"[eNB%"PRIu8"] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %"PRIu8", TBS %d) \n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->mcs,
|
||||
phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
|
||||
else {
|
||||
LOG_D(PHY,"[DeNB %d] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %d (%s)\n",
|
||||
LOG_D(PHY,"[DeNB %"PRIu8"] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %"PRIu8" (%s)\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->sync_area,
|
||||
(mch_pduP->Pdu_size == 0)? "Empty MCH PDU":"Let RN transmit for the moment");
|
||||
mch_pduP = NULL;
|
||||
@@ -1112,8 +1107,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
break;
|
||||
case multicast_relay:
|
||||
if ((mch_pduP->Pdu_size > 0) && ((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
|
||||
//if (((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
|
||||
LOG_I(PHY,"[RN %d] Frame %d subframe %d: Got the MCH PDU for MBSFN sync area %d (MCS %d, TBS %d)\n",
|
||||
LOG_I(PHY,"[RN %"PRIu8"] Frame %d subframe %d: Got the MCH PDU for MBSFN sync area %"PRIu8" (MCS %"PRIu8", TBS %"PRIu16")\n",
|
||||
phy_vars_rn->Mod_id,phy_vars_rn->frame, subframe,
|
||||
mch_pduP->sync_area,mch_pduP->mcs,mch_pduP->Pdu_size);
|
||||
} else if (phy_vars_rn->mch_avtive[subframe%5] == 1){ // SF2 -> SF7, SF3 -> SF8
|
||||
@@ -1123,7 +1117,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->TBS>>3);
|
||||
mch_pduP->Pdu_size = (uint16_t) (phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->TBS>>3);
|
||||
mch_pduP->mcs = phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->mcs;
|
||||
LOG_I(PHY,"[RN %d] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %d (MCS %d, TBS %d)\n",
|
||||
LOG_I(PHY,"[RN %"PRIu8"] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %"PRIu8" (MCS %"PRIu8", TBS %"PRIu16")\n",
|
||||
phy_vars_rn->Mod_id,phy_vars_rn->frame, subframe,subframe%5,
|
||||
phy_vars_rn->sync_area[subframe%5],mch_pduP->mcs,mch_pduP->Pdu_size);
|
||||
} else {
|
||||
@@ -1135,7 +1129,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
phy_vars_rn->mch_avtive[subframe]=0;
|
||||
break;
|
||||
default:
|
||||
LOG_W(PHY,"[eNB %d] Frame %d subframe %d: unknown relaying type %d \n",
|
||||
LOG_W(PHY,"[eNB %"PRIu8"] Frame %d subframe %d: unknown relaying type %d \n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,r_type);
|
||||
mch_pduP=NULL;
|
||||
break;
|
||||
@@ -1147,7 +1141,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
generate_mch(phy_vars_eNB,sched_subframe,(uint8_t*)mch_pduP->payload,abstraction_flag);
|
||||
#ifdef DEBUG_PHY
|
||||
for (i=0;i<mch_pduP->Pdu_size;i++)
|
||||
msg("%2x.",(uint8_t)mch_pduP->payload[i]);
|
||||
msg("%2"PRIx8".",(uint8_t)mch_pduP->payload[i]);
|
||||
msg("\n");
|
||||
#endif
|
||||
} else {
|
||||
@@ -1157,7 +1151,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
}
|
||||
|
||||
else {
|
||||
|
||||
// this is not a pmch subframe
|
||||
|
||||
if (abstraction_flag==0){
|
||||
vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1);
|
||||
@@ -1177,12 +1171,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
0);
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
|
||||
0);
|
||||
|
||||
}
|
||||
@@ -1191,54 +1185,58 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
}
|
||||
|
||||
if (subframe == 0) {
|
||||
// generate PBCH (Physical Broadcast CHannel) info
|
||||
if ((phy_vars_eNB->proc[sched_subframe].frame_tx&3) == 0) {
|
||||
((uint8_t*) pbch_pdu)[2] = 0;
|
||||
pbch_pdu[2] = 0;
|
||||
// FIXME setting pbch_pdu[2] to zero makes the switch statement easier: remove all the or-operators
|
||||
switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
|
||||
case 6:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (0<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (0<<5);
|
||||
break;
|
||||
case 15:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (1<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (1<<5);
|
||||
break;
|
||||
case 25:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (2<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5);
|
||||
break;
|
||||
case 50:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (3<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (3<<5);
|
||||
break;
|
||||
case 75:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (4<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (4<<5);
|
||||
break;
|
||||
case 100:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (5<<5);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (5<<5);
|
||||
break;
|
||||
default:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (2<<5);
|
||||
// FIXME if we get here, this should be flagged as an error, right?
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5);
|
||||
break;
|
||||
}
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xef) |
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xef) |
|
||||
((phy_vars_eNB->lte_frame_parms.phich_config_common.phich_duration << 4)&0x10);
|
||||
|
||||
switch (phy_vars_eNB->lte_frame_parms.phich_config_common.phich_resource) {
|
||||
case oneSixth:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (0<<2);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (0<<2);
|
||||
break;
|
||||
case half:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (1<<2);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (1<<2);
|
||||
break;
|
||||
case one:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (2<<2);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (2<<2);
|
||||
break;
|
||||
case two:
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (3<<2);
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (3<<2);
|
||||
break;
|
||||
default:
|
||||
// unreachable
|
||||
break;
|
||||
}
|
||||
|
||||
((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xfc) | ((phy_vars_eNB->proc[sched_subframe].frame_tx>>8)&0x3);
|
||||
((uint8_t*) pbch_pdu)[1] = phy_vars_eNB->proc[sched_subframe].frame_tx&0xfc;
|
||||
((uint8_t*) pbch_pdu)[0] = 0;
|
||||
pbch_pdu[2] = (pbch_pdu[2]&0xfc) | ((phy_vars_eNB->proc[sched_subframe].frame_tx>>8)&0x3);
|
||||
pbch_pdu[1] = phy_vars_eNB->proc[sched_subframe].frame_tx&0xfc;
|
||||
pbch_pdu[0] = 0;
|
||||
}
|
||||
/// First half of SSS (TDD)
|
||||
if (abstraction_flag==0) {
|
||||
@@ -1247,25 +1245,26 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->proc[sched_subframe].frame_tx%4;
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Generating PBCH, mode1_flag=%d, frame_tx=%d, pdu=%02x%02x%02x\n",
|
||||
uint16_t frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->proc[sched_subframe].frame_tx%4;
|
||||
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Generating PBCH, mode1_flag=%"PRIu8", frame_tx=%"PRIu16", pdu=%02"PRIx8"%02"PRIx8"%02"PRIx8"\n",
|
||||
phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,
|
||||
subframe,
|
||||
phy_vars_eNB->lte_frame_parms.mode1_flag,
|
||||
frame_tx,
|
||||
((uint8_t*) pbch_pdu)[2],
|
||||
((uint8_t*) pbch_pdu)[1],
|
||||
((uint8_t*) pbch_pdu)[0]);
|
||||
pbch_pdu[2],
|
||||
pbch_pdu[1],
|
||||
pbch_pdu[0]);
|
||||
#endif
|
||||
|
||||
if (abstraction_flag==0) {
|
||||
@@ -1311,12 +1310,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
10);
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
|
||||
10);
|
||||
|
||||
}
|
||||
@@ -1330,7 +1329,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
|
||||
AMP,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
|
||||
(phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
|
||||
11);
|
||||
}
|
||||
}
|
||||
@@ -1425,7 +1424,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
DCI_pdu->nCCE = get_nCCE(num_pdcch_symbols,
|
||||
&phy_vars_eNB->lte_frame_parms,
|
||||
get_mi(&phy_vars_eNB->lte_frame_parms,subframe));
|
||||
LOG_D(PHY,"num_pdcch_symbols %d, nCCE %d (dci commond %d, dci uespec %d\n",num_pdcch_symbols,DCI_pdu->nCCE,
|
||||
LOG_D(PHY,"num_pdcch_symbols %"PRIu8", nCCE %u (dci commond %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,DCI_pdu->nCCE,
|
||||
DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
|
||||
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
@@ -1440,14 +1439,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
if (DCI_pdu->dci_alloc[i].rnti != SI_RNTI) {
|
||||
LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %d/%d\n",subframe,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
|
||||
LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %"PRIu32"/%d\n",subframe,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
|
||||
dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (DCI_pdu->dci_alloc[i].rnti == SI_RNTI) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
|
||||
#endif
|
||||
generate_eNB_dlsch_params_from_dci(subframe,
|
||||
&DCI_pdu->dci_alloc[i].dci_pdu[0],
|
||||
@@ -1461,21 +1460,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
P_RNTI,
|
||||
phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
|
||||
|
||||
if ((phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
|
||||
DCI_pdu->nCCE,
|
||||
1,
|
||||
SI_RNTI,
|
||||
subframe)) == -1) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
|
||||
int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 1, SI_RNTI, subframe);
|
||||
phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = result;
|
||||
if (result == -1) {
|
||||
// FIXME what happens to phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe]?
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
}
|
||||
else {
|
||||
LOG_T(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (SI) => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe],DCI_pdu->nCCE);
|
||||
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// configure SI DCI
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, SI in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
msg("[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "SI", &DCI_pdu->dci_alloc[i], i);
|
||||
}
|
||||
#endif
|
||||
@@ -1485,7 +1484,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
}
|
||||
else if (DCI_pdu->dci_alloc[i].ra_flag == 1) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
|
||||
#endif
|
||||
generate_eNB_dlsch_params_from_dci(subframe,
|
||||
&DCI_pdu->dci_alloc[i].dci_pdu[0],
|
||||
@@ -1501,20 +1500,19 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
// mac_xface->macphy_exit("Transmitted RAR, exiting\n");
|
||||
|
||||
if ((phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
|
||||
DCI_pdu->nCCE,
|
||||
1,
|
||||
DCI_pdu->dci_alloc[i].rnti,
|
||||
subframe)) == -1) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 1, DCI_pdu->dci_alloc[i].rnti, subframe);
|
||||
phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = result;
|
||||
if (result == -1) {
|
||||
// FIXME what happens to phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe]?
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
}
|
||||
else {
|
||||
LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (RA) => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA) => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe],DCI_pdu->nCCE);
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// configure RA DCI
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, RA in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
msg("[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "RA", &DCI_pdu->dci_alloc[i], i);
|
||||
}
|
||||
#endif
|
||||
@@ -1528,7 +1526,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
#ifdef OPENAIR2
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB] Searching for RNTI %x\n",DCI_pdu->dci_alloc[i].rnti);
|
||||
LOG_D(PHY,"[eNB] Searching for RNTI %"PRIx16"\n",DCI_pdu->dci_alloc[i].rnti);
|
||||
#endif
|
||||
UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
|
||||
#else
|
||||
@@ -1539,7 +1537,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// Configure this user
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %d in TM%d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(uint8_t)UE_id]);
|
||||
msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %"PRIu16" in TM%"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(uint8_t)UE_id]);
|
||||
smbv_configure_user(smbv_fname,UE_id+1,phy_vars_eNB->transmission_mode[(uint8_t)UE_id],DCI_pdu->dci_alloc[i].rnti);
|
||||
}
|
||||
#endif
|
||||
@@ -1554,25 +1552,25 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
0,
|
||||
P_RNTI,
|
||||
phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single);
|
||||
LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d subframe %d: Generated dlsch params\n",
|
||||
phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
if ((phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
|
||||
DCI_pdu->nCCE,
|
||||
0,
|
||||
DCI_pdu->dci_alloc[i].rnti,
|
||||
subframe)) == -1) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %x) !!!\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n",
|
||||
phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
|
||||
int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 0, DCI_pdu->dci_alloc[i].rnti, subframe);
|
||||
phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = result;
|
||||
if (result == -1) {
|
||||
// FIXME what happens to phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe]?
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %"PRIx16") !!!\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti);
|
||||
}
|
||||
else {
|
||||
LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %x) => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16") => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
|
||||
DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe],DCI_pdu->nCCE);
|
||||
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
|
||||
// configure UE-spec DCI
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
|
||||
}
|
||||
#endif
|
||||
@@ -1580,7 +1578,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
//if (phy_vars_eNB->proc[sched_subframe].frame_tx%100 == 0)
|
||||
LOG_D(PHY,"[eNB %d][DCI][PDSCH %x] Frame %d subframe %d UE_id %d Generated DCI format %d, aggregation %d\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][DCI][PDSCH %"PRIx16"] Frame %d subframe %d UE_id %"PRId8" Generated DCI format %d, aggregation %d\n",
|
||||
phy_vars_eNB->Mod_id, DCI_pdu->dci_alloc[i].rnti,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,UE_id,
|
||||
DCI_pdu->dci_alloc[i].format,
|
||||
@@ -1588,8 +1586,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
LOG_D(PHY,"[eNB %d][PDSCH] Frame %d : No UE_id with corresponding rnti %x, dropping DLSCH\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,(int16_t)DCI_pdu->dci_alloc[i].rnti);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][PDSCH] Frame %d : No UE_id with corresponding rnti %"PRIx16", dropping DLSCH\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,DCI_pdu->dci_alloc[i].rnti);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1605,7 +1603,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
|
||||
pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe));
|
||||
if (harq_pid==255) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx);
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx);
|
||||
mac_exit_wrapper("Invalid harq_pid (255) detected");
|
||||
}
|
||||
#ifdef OPENAIR2
|
||||
@@ -1614,12 +1612,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
UE_id = i;
|
||||
#endif
|
||||
if (UE_id<0) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d: Unknown UE_id for rnti %x\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,(int16_t)DCI_pdu->dci_alloc[i].rnti);
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,DCI_pdu->dci_alloc[i].rnti);
|
||||
mac_exit_wrapper("Invalid UE id (< 0) detected");
|
||||
}
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
//if (phy_vars_eNB->proc[sched_subframe].frame_tx%100 == 0)
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d UL Frame %d, UL Subframe %d, Generated ULSCH (format0) DCI (rnti %x, dci %x) (DCI pos %d/%d), aggregation %d\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][PUSCH %"PRIu8"] Frame %d subframe %d UL Frame %"PRIu32", UL Subframe %"PRIu8", Generated ULSCH (format0) DCI (rnti %"PRIx16", dci %"PRIx8") (DCI pos %"PRIu32"/%d), aggregation %d\n",
|
||||
phy_vars_eNB->Mod_id,
|
||||
subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
|
||||
pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
|
||||
@@ -1629,8 +1627,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
|
||||
pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe),
|
||||
DCI_pdu->dci_alloc[i].rnti,
|
||||
*(unsigned int *)&DCI_pdu->dci_alloc[i].dci_pdu[0],
|
||||
i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
|
||||
DCI_pdu->dci_alloc[i].dci_pdu[0],
|
||||
i,
|
||||
DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
|
||||
1<<DCI_pdu->dci_alloc[i].L);
|
||||
#endif
|
||||
|
||||
@@ -1653,18 +1652,18 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
0,
|
||||
DCI_pdu->dci_alloc[i].rnti,
|
||||
subframe)) == -1) {
|
||||
LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources (%d) for UE spec DCI (PUSCH %x) !!!\n",
|
||||
LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources (%u) for UE spec DCI (PUSCH %"PRIx16") !!!\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->nCCE,DCI_pdu->dci_alloc[i].rnti);
|
||||
}
|
||||
else {
|
||||
LOG_T(PHY,"[eNB %d] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %x) => %d/%d\n",
|
||||
LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %"PRIx16") => %d/%u\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti,
|
||||
DCI_pdu->dci_alloc[i].nCCE,DCI_pdu->nCCE);
|
||||
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// configure UE-spec DCI for UL Grant
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, SF %d UL DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
msg("[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
|
||||
smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
|
||||
}
|
||||
#endif
|
||||
@@ -1672,7 +1671,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
}
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Setting subframe_scheduling_flag for UE %d harq_pid %d (ul subframe %d)\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][PUSCH %"PRIu8"] frame %d subframe %d Setting subframe_scheduling_flag for UE %"PRIu32" harq_pid %"PRIu8" (ul subframe %"PRIu8")\n",
|
||||
phy_vars_eNB->Mod_id,harq_pid,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i,harq_pid,
|
||||
pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe));
|
||||
@@ -1703,7 +1702,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
if (abstraction_flag == 0) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
|
||||
LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %d,ue_spec %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"PRIu8",ue_spec %"PRIu8")\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
|
||||
#endif
|
||||
|
||||
// for (sect_id=0;sect_id<number_of_cards;sect_id++)
|
||||
@@ -1722,9 +1721,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef PHY_ABSTRACTION
|
||||
#ifdef PHY_ABSTRACTION // FIXME this ifdef seems suspicious
|
||||
else {
|
||||
LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
|
||||
num_pdcch_symbols = generate_dci_top_emul(phy_vars_eNB,DCI_pdu->Num_ue_spec_dci,DCI_pdu->Num_common_dci,DCI_pdu->dci_alloc,subframe);
|
||||
}
|
||||
#endif
|
||||
@@ -1756,17 +1755,17 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// Configures the data source of allocation (allocation is configured by DCI)
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), DLSCH_pdu, input_buffer_length);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
#ifdef DEBUG_DLSCH
|
||||
LOG_D(PHY,"[eNB %d][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %d, num_pdcch_symbols %d\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, next_slot, input_buffer_length,num_pdcch_symbols);
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %"PRIu16", num_pdcch_symbols %"PRIu8"\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, next_slot, input_buffer_length,num_pdcch_symbols); // FIXME this code is broken (next_slot?)
|
||||
for (i=0;i<input_buffer_length;i++)
|
||||
LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);
|
||||
LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);// FIXME this code is broken (number of arguments)
|
||||
LOG_T(PHY,"\n");
|
||||
#endif
|
||||
#endif
|
||||
@@ -1825,14 +1824,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
// Check for RA activity
|
||||
if (phy_vars_eNB->dlsch_eNB_ra->active == 1) {
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, subframe %d, RA active, filling RAR:\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d, RA active, filling RAR:\n",
|
||||
phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
|
||||
#endif
|
||||
|
||||
input_buffer_length = phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->TBS/8;
|
||||
|
||||
#ifdef OPENAIR2
|
||||
crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
|
||||
int16_t crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->CC_id,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,
|
||||
dlsch_input_buffer,
|
||||
@@ -1870,7 +1869,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,
|
||||
&phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
|
||||
&phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
|
||||
LOG_I(PHY,"[eNB][RAPROC] Frame %d subframe %d, Activated Msg3 demodulation for UE %d in frame %d, subframe %d\n",
|
||||
LOG_I(PHY,"[eNB][RAPROC] Frame %d subframe %d, Activated Msg3 demodulation for UE %"PRId8" in frame %"PRIu32", subframe %"PRIu8"\n",
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,
|
||||
subframe,
|
||||
UE_id,
|
||||
@@ -1889,13 +1888,13 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// Configures the data source of allocation (allocation is configured by DCI)
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), dlsch_input_buffer, input_buffer_length);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA) with input size = %d,Msg3 frame %d, Msg3 subframe %d\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA) with input size = %"PRIu16",Msg3 frame %"PRIu32", Msg3 subframe %"PRIu8"\n",
|
||||
phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,input_buffer_length,
|
||||
phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
|
||||
@@ -1941,11 +1940,11 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
phy_vars_eNB->dlsch_eNB_ra);
|
||||
}
|
||||
#endif
|
||||
LOG_D(PHY,"[eNB %d][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d] Frame %d, subframe %d, DLSCH (RA) re_allocated = %d\n",phy_vars_eNB->Mod_id,
|
||||
LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d, DLSCH (RA) re_allocated = %"PRIu16"\n",phy_vars_eNB->Mod_id,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, re_allocated);
|
||||
#endif
|
||||
|
||||
@@ -1965,7 +1964,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
|
||||
|
||||
#ifdef DEBUG_PHY_PROC
|
||||
LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %d, G %d, nb_rb %d, mcs %d, pmi_alloc %x, rv %d (round %d)\n",
|
||||
LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")\n",
|
||||
phy_vars_eNB->Mod_id, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti,harq_pid,
|
||||
phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, input_buffer_length,
|
||||
get_G(&phy_vars_eNB->lte_frame_parms,
|
||||
@@ -2002,7 +2001,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#if defined(SMBV) && !defined(EXMIMO)
|
||||
// Configures the data source of allocation (allocation is configured by DCI)
|
||||
if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
|
||||
msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
|
||||
smbv_configure_datalist_for_user(smbv_fname, UE_id+1, DLSCH_pdu, input_buffer_length);
|
||||
}
|
||||
#endif
|
||||
@@ -2012,7 +2011,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
|
||||
#ifdef DEBUG_DLSCH
|
||||
LOG_T(PHY,"eNB DLSCH SDU: \n");
|
||||
for (i=0;i<phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->TBS>>3;i++)
|
||||
LOG_T(PHY,"%x.",(uint8_t)DLSCH_pdu[i]);
|
||||
LOG_T(PHY,"%"PRIx8".",DLSCH_pdu[i]);
|
||||
LOG_T(PHY,"\n");
|
||||
#endif
|
||||
#endif
|
||||
@@ -2160,7 +2159,7 @@ void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t UE_i
|
||||
|
||||
if ((phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active == 1) &&
|
||||
(phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe == subframe) &&
|
||||
(phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame == frame)) {
|
||||
(phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame == (uint32_t)frame)) {
|
||||
|
||||
// harq_pid = 0;
|
||||
|
||||
@@ -2667,13 +2666,19 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t
|
||||
|
||||
void ulsch_decoding_procedures(unsigned char subframe, unsigned int i, PHY_VARS_eNB *phy_vars_eNB, unsigned char abstraction_flag)
|
||||
{
|
||||
UNUSED(subframe);
|
||||
UNUSED(i);
|
||||
UNUSED(phy_vars_eNB);
|
||||
UNUSED(abstraction_flag);
|
||||
LOG_D(PHY,"ulsch_decoding_procedures not yet implemented. should not be called");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type) {
|
||||
void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type)
|
||||
{
|
||||
//RX processing
|
||||
UNUSED(r_type);
|
||||
uint32_t l, ret=0,i,j,k;
|
||||
uint32_t sect_id=0;
|
||||
uint32_t harq_pid, harq_idx, round;
|
||||
|
||||
@@ -192,5 +192,6 @@ showflags :
|
||||
showobj:
|
||||
@echo $(SCHED_OBJS)
|
||||
|
||||
run: syncsim
|
||||
rtai-load --verbose
|
||||
cppcheck:
|
||||
@echo "cppcheck ..."
|
||||
cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c}
|
||||
|
||||
@@ -1839,6 +1839,8 @@ static void *UE_thread_synch(void *arg) {
|
||||
sync_mode_t sync_mode = rssi;
|
||||
int rssi_lin,rssi_min,rssi_max,rssi_avg;
|
||||
double rssi_dBm,rssi_min_dBm,rssi_max_dBm;
|
||||
int16_t spectrum[1024*2];
|
||||
int16_t power_avg[600];
|
||||
|
||||
printf("UE_thread_sync in with PHY_vars_UE %p\n",arg);
|
||||
#ifdef USRP
|
||||
@@ -1901,11 +1903,22 @@ static void *UE_thread_synch(void *arg) {
|
||||
rssi_min = 1<<31;
|
||||
rssi_max = 0;
|
||||
rssi_avg = 0;
|
||||
for (i=0;i<76800;i+=7680) {
|
||||
|
||||
memset(power_dBm_max,0,1024);
|
||||
for (i=0;i<76800*4;i+=1024) {
|
||||
//compute frequency-domain representation of 1024-sample chunk
|
||||
dft1024(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],
|
||||
spectrum,
|
||||
1);
|
||||
compute_spectrum_stats(spectrum,
|
||||
power_avg,
|
||||
power_max,
|
||||
power_min,
|
||||
PHY_vars_UE_g[0][0]->rx_total_gain_dB);
|
||||
}
|
||||
/*
|
||||
rssi_lin = signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],7680);
|
||||
if (PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx>1)
|
||||
rssi_lin += signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],7680);
|
||||
rssi_lin += signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[1][i],7680);
|
||||
rssi_avg += rssi;
|
||||
rssi_min = (rssi < rssi_min) ? rssi : rssi_min;
|
||||
rssi_max = (rssi > rssi_max) ? rssi : rssi_max;
|
||||
@@ -1945,7 +1958,7 @@ static void *UE_thread_synch(void *arg) {
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
break;
|
||||
case pbch:
|
||||
|
||||
|
||||
@@ -438,6 +438,9 @@ cleancell:
|
||||
cleanlfds:
|
||||
$(MAKE) -C $(LFDS_DIR) -f makefile.linux clean
|
||||
|
||||
cppcheck:
|
||||
@echo "cppcheck oaisim ..."
|
||||
cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c}
|
||||
print:
|
||||
@echo "OBJ " $(OBJ)
|
||||
@echo "OAISIM_OBJS " $(OAISIM_OBJS)
|
||||
|
||||
Reference in New Issue
Block a user