diff --git a/openair1/DOCS/DOXYGEN/Doxyfile b/openair1/DOCS/DOXYGEN/Doxyfile index 88a033df21bd4e8e1332cc517befb5ace30b7033..8cda3df01be3c57e9c99bd70433a4f9a9732d2fa 100755 --- a/openair1/DOCS/DOXYGEN/Doxyfile +++ b/openair1/DOCS/DOXYGEN/Doxyfile @@ -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 \ diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c index a27f2bb2ba6f15a7428dac3d81afe07883e51551..32cc0ddbb9a96f38e0314d14958234c7c6296b1d 100755 --- a/openair1/PHY/CODING/3gpplte_sse.c +++ b/openair1/PHY/CODING/3gpplte_sse.c @@ -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 diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder.c b/openair1/PHY/CODING/3gpplte_turbo_decoder.c index 22fe5c58e010f6a78572b0c79b79202d695695a7..4a098f84a617c2bedff1bd4c07d4e9a34444de53 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder.c @@ -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 diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c index d1f8219743831cc10e6a279f1329b282ce1f2a6b..febd82644f83b429bde2c2665558a20d44385e68 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c @@ -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" diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c index 12df10e5c63b61abfa19f416d503f68a8374907f..29f2de0c740ac213e7900d895d1deef461bb0c87 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c @@ -44,8 +44,7 @@ /// /// -#include "emmintrin.h" -#include "smmintrin.h" +#include "PHY/sse_intrin.h" #ifndef TEST_DEBUG #include "PHY/defs.h" diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index ac0673436868950e6258f13c7940f3b303463aa3..5c61a8ed80a2aa445a73a367c538cbc85e076d17 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -43,8 +43,7 @@ /// /// -#include "emmintrin.h" -#include "smmintrin.h" +#include "PHY/sse_intrin.h" #ifndef TEST_DEBUG #include "PHY/defs.h" diff --git a/openair1/PHY/CODING/TESTBENCH/ltetest.c b/openair1/PHY/CODING/TESTBENCH/ltetest.c index 4a168a3175965e2e72d218dd3abef04550acf709..0a25d5bcb4633bfc2048af43b2add565d8488493 100644 --- a/openair1/PHY/CODING/TESTBENCH/ltetest.c +++ b/openair1/PHY/CODING/TESTBENCH/ltetest.c @@ -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) diff --git a/openair1/PHY/CODING/viterbi.c b/openair1/PHY/CODING/viterbi.c index a6e1ffa2bf283e633989b5cbe1b08d2c8e3aac6d..0315749fe215c0cd2bdb6d9d3fa096aa6324c0a9 100755 --- a/openair1/PHY/CODING/viterbi.c +++ b/openair1/PHY/CODING/viterbi.c @@ -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); diff --git a/openair1/PHY/CODING/viterbi_lte.c b/openair1/PHY/CODING/viterbi_lte.c index 8d44d0de8415deff02494f9e99de79b61dc58f79..270763cc6c908710699ae30d55d920607e6e2cc8 100644 --- a/openair1/PHY/CODING/viterbi_lte.c +++ b/openair1/PHY/CODING/viterbi_lte.c @@ -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 diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c index 74bea94245681baa23d1ba3d646f86d4a1b8bd8f..dfe77dabb6389454e964b151b04b3e937697b552 100755 --- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c +++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c @@ -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, diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c index 5d17d35bfd5e261995e078b6115a1316720086ae..9d4fabc782590e00f96fd76e7fab1fd12daadbd2 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c @@ -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 diff --git a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c index e29d2d644d5510144a90a0f3a1388a0ac34ffaed..54d39fa8cb78ee7566ed4ca72380162b271dba25 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c @@ -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++) { diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c index 2241bad9c1a6730ef64ade5416db2119397b4c1f..6582e1d5fca3ecc7c9f9193dd2a69bc79abec343 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c @@ -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); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index 21a5e14ccbab253f54bf0efc2b2fa2276e45d068..24b275bdb5a1a7d6cc0bef294a7a26a7474aed15 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -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])); diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 6b0bbcbe738229940df0f1e95a7790e1dbef2c7c..767a683c80adaf2eb61c40e0e452c85c0cd4eb98 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -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); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c index a081cf5caf4240f99c69d071bde8bbcb1c0d2e6e..3d642e55b0ee20ee6c6fcb8f50494988c949acc7 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c @@ -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 diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c index ba83156742309f1f02b79b7c23ab539d19491aaf..8ffb030fddb363c8e5115047b96149d555b6cb8b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c @@ -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); diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c index 276180fd76f3dbf16eb94ee1e6431ee61b1c4a97..731d1ef7cb00086e9284355e45b5d7901ccee63c 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c @@ -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]; diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c index fa73a9ec757b478307a114db592f82cdfbbbe7af..7b11f7ae6d897ec7af946bc9ec5a514881ed8ac1 100644 --- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c +++ b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c @@ -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, diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c index 920ab5b90c54ea634b03197fc35f9025bd25804b..5ce741ae0cd212e338f12d27efc9c040b8081aac 100755 --- a/openair1/PHY/LTE_TRANSPORT/pbch.c +++ b/openair1/PHY/LTE_TRANSPORT/pbch.c @@ -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++) { diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c index f1a79190f99fe5343c388cadc3b42b2b3b3e8fe2..1d0e3491a8711cab4ce68d6155171f1b4e141bd9 100644 --- a/openair1/PHY/LTE_TRANSPORT/pmch.c +++ b/openair1/PHY/LTE_TRANSPORT/pmch.c @@ -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]; diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c index f714c0b9e41ec2dee7169d4c57d366cb78faa172..e4689fb2f9c42125b1188eb343272b6f1d64bbe8 100644 --- a/openair1/PHY/LTE_TRANSPORT/prach.c +++ b/openair1/PHY/LTE_TRANSPORT/prach.c @@ -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; diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index c0a577edaa3ca6b7befd7417d51a986fbc312535..efe6784cd3809a6a6dbf7b429eb841c33a3398f3 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -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) { diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c index 112b1ee494884e92244a53413b6f21996bc840ea..9c1b3c740953e371e9c534924df272bdc1ee02ec 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c @@ -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++) { diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c index 6c0d890a7dba0f5ee5463056eba9087be3fe6699..4366bc609d5e86ced5782f8b7d37617913dd1e70 100755 --- a/openair1/PHY/MODULATION/ul_7_5_kHz.c +++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c @@ -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}; diff --git a/openair1/PHY/TOOLS/cdot_prod.c b/openair1/PHY/TOOLS/cdot_prod.c index a83c5a44d515efbacc6d3dd399d8402556f48c8e..293c8bd06e85861bac72b9f666731f3ef1311557 100644 --- a/openair1/PHY/TOOLS/cdot_prod.c +++ b/openair1/PHY/TOOLS/cdot_prod.c @@ -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 diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c index 261cbb4a387212926ec5fa360efa62dac176184a..7d5658e6da6052e41b25df978725de28125ae379 100644 --- a/openair1/PHY/TOOLS/cmult_sv.c +++ b/openair1/PHY/TOOLS/cmult_sv.c @@ -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 diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h index 3e0bf404a0a31e50b5f7a2f9de6b93c1d2d40e8a..2755a92755fc271491b5118c556e30c60297ec24 100644 --- a/openair1/PHY/TOOLS/defs.h +++ b/openair1/PHY/TOOLS/defs.h @@ -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 diff --git a/openair1/PHY/TOOLS/fft.c b/openair1/PHY/TOOLS/fft.c index ff1b9ded228b9873fb06a6cc08f810fad94865e7..9657ead210d55cf637131e8bdf89c1d88e539df5 100755 --- a/openair1/PHY/TOOLS/fft.c +++ b/openair1/PHY/TOOLS/fft.c @@ -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 diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c index 23a06eb0e3ed0f9cf6a0c1eb162da93282012efd..b2ce76d9a92c59fd9043cd7f0e1eba2358d8cf61 100644 --- a/openair1/PHY/TOOLS/lte_dfts.c +++ b/openair1/PHY/TOOLS/lte_dfts.c @@ -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)); diff --git a/openair1/PHY/TOOLS/memory_routines.c b/openair1/PHY/TOOLS/memory_routines.c index 969a6629c60dc0872537d25f17a79066e9cc06db..fda70d0392bc74406e601c951d064e24d79a7392 100755 --- a/openair1/PHY/TOOLS/memory_routines.c +++ b/openair1/PHY/TOOLS/memory_routines.c @@ -27,7 +27,7 @@ *******************************************************************************/ #ifndef EXPRESSMIMO_TARGET -#include <mmintrin.h> +#include "PHY/sse_intrin.h" void Zero_Buffer(void *buf,unsigned int length) { diff --git a/openair1/PHY/TOOLS/phase_comp.c b/openair1/PHY/TOOLS/phase_comp.c index c4d89729c79c1ec3879ff47402c90046a5feac6d..16725361536d706f09d6ebaadf7f7e6b806727db 100644 --- a/openair1/PHY/TOOLS/phase_comp.c +++ b/openair1/PHY/TOOLS/phase_comp.c @@ -49,7 +49,7 @@ #include "defs.h" #include "extern.h" -#include "mmintrin.h" +#include "PHY/sse_intrin.h" #ifndef USER_MODE diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c index 79dd0ee1f9575edb1867bb7abb05f9c7d3112b28..7402c61a835795a7a7d559afc9a09535a0e49f75 100755 --- a/openair1/PHY/TOOLS/signal_energy.c +++ b/openair1/PHY/TOOLS/signal_energy.c @@ -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! diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 2bf159e9a817e1beb70918b68236f2d2aaaf4ed0..993417e0fc4633b88aec6f10a36948eda8fb9232 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -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 diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c index ed9fe90b25f9f36d13c6532e126b99e1ffd3705f..d9ce11c466bc037088e5d2c2f153015db675aba6 100755 --- a/openair1/SCHED/phy_procedures_lte_eNb.c +++ b/openair1/SCHED/phy_procedures_lte_eNb.c @@ -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; diff --git a/openair1/SIMULATION/LTE_PHY/Makefile b/openair1/SIMULATION/LTE_PHY/Makefile index f662c1172ad67c79f7a3415c9aa498741a1bfa4f..99c6c8cb56c0726c99ae3fcdbcb7f93d1847c88b 100644 --- a/openair1/SIMULATION/LTE_PHY/Makefile +++ b/openair1/SIMULATION/LTE_PHY/Makefile @@ -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} diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index 3689c8d8b732d0c080359be94a8035466ccc0e46..cde6df34a41b82524a4b6418e62adb2c7df8d6a6 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.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: diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile index ebc6cd84f538fb51b12528befa0dbdfea98da3e3..1a9b65634a04c9e71feba86a7e9f7c6d1f7ed20a 100644 --- a/targets/SIMU/USER/Makefile +++ b/targets/SIMU/USER/Makefile @@ -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)