diff --git a/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 new file mode 100755 index 0000000000000000000000000000000000000000..72956d4866edfa5a514a5ed409eb0f12332168bc Binary files /dev/null and b/targets/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 differ diff --git a/targets/RTAI/USER/init_exmimo2.sh b/targets/RTAI/USER/init_exmimo2.sh index e2dddcabcde53a498d7c55a43bec83d515221cc5..b98f6a7394ab3abef327160e1c84e9ce1cb5936b 100644 --- a/targets/RTAI/USER/init_exmimo2.sh +++ b/targets/RTAI/USER/init_exmimo2.sh @@ -1,22 +1,44 @@ +#!/bin/bash + +PCI=`lspci -m | grep Xilinx` +if [ -z "$PCI" ]; then + echo "No card found. Stopping!" + retur +fi + sudo rmmod openair_rf sudo insmod $OPENAIR_TARGETS/ARCH/EXMIMO/DRIVER/eurecom/openair_rf.ko -sudo mknod /dev/openair0 c 127 0 -sudo chmod a+rw /dev/openair0 sleep 1 -#$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR0_DIR/express-mimo/software/sdr/exmimo2/sdr_expressmimo2 +if [ ! -e /dev/openair0 ]; then + sudo mknod /dev/openair0 c 127 0 + sudo chmod a+rw /dev/openair0 +fi -$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2 +DEVICE=`echo $PCI | awk -F\" '{print $(NF-1)}' | awk '{print $2}'` +if [ $(($DEVICE%100)) == 8 ]; then + echo "Using firmware version 8" + $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2 +else + if [ $(($DEVICE%100)) == 9 ]; then + echo "Using firmware version 9" + #$OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR0_DIR/express-mimo/software/sdr/exmimo2/sdr_expressmimo2 + $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v9 + else + echo 'No corresponding firmware found' + return + fi +fi sudo rmmod nasmesh sudo insmod $OPENAIR2_DIR/NAS/DRIVER/MESH/nasmesh.ko -if [ $1 = "eNB" ]; then +if [ "$1" = "eNB" ]; then echo "bring up oai0 interface for enb" sudo ifconfig oai0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.1 -t 10.0.1.9 -r 3 else - if [ $1 = "UE" ]; then + if [ "$1" = "UE" ]; then echo "bring up oai0 interface for UE" sudo ifconfig oai0 10.0.1.9 netmask 255.255.255.0 broadcast 10.0.1.255 $OPENAIR2_DIR/NAS/DRIVER/MESH/RB_TOOL/rb_tool -a -c0 -i0 -z0 -s 10.0.1.9 -t 10.0.1.1 -r 3 diff --git a/targets/RTAI/USER/lte-softmodem.c b/targets/RTAI/USER/lte-softmodem.c index f966ba70868831d4cdc3568270bf3c171db82902..7c333719b9eaea9839a58631f24b425e15013f0d 100644 --- a/targets/RTAI/USER/lte-softmodem.c +++ b/targets/RTAI/USER/lte-softmodem.c @@ -897,8 +897,8 @@ int main(int argc, char **argv) { u32 rf_mode_byp[4] = {22991,22991,22991,22991}; */ u32 my_rf_mode = RXEN + TXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX + DMAMODE_TX; - u32 my_rf_mode2 = RXEN + TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM + DMAMODE_RX; - u32 rf_mode[4] = {my_rf_mode,my_rf_mode2,0,0}; + u32 rf_mode_base = TXLPFNORM + TXLPFEN + TXLPF25 + RXLPFNORM + RXLPFEN + RXLPF25 + LNA1ON +LNAMax + RFBBNORM; + u32 rf_mode[4] = {my_rf_mode,0,0,0}; u32 rf_local[4] = {8255000,8255000,8255000,8255000}; // UE zepto //{8254617, 8254617, 8254617, 8254617}; //eNB khalifa //{8255067,8254810,8257340,8257340}; // eNB PETRONAS @@ -1096,9 +1096,28 @@ int main(int argc, char **argv) { frame_parms->Ncp_UL = 0; frame_parms->Nid_cell = Nid_cell; frame_parms->nushift = 0; - frame_parms->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later - frame_parms->nb_antennas_tx = (UE_flag==0) ? 1 : 1; - frame_parms->nb_antennas_rx = (UE_flag==0) ? 1 : 1; + if (UE_flag==0) { + switch (transmission_mode) { + case 1: + frame_parms->nb_antennas_tx = 1; + frame_parms->nb_antennas_rx = 1; + break; + case 2: + case 5: + case 6: + frame_parms->nb_antennas_tx = 2; + frame_parms->nb_antennas_rx = 1; + break; + default: + printf("Unsupported transmission mode %d\n",transmission_mode); + exit(-1); + } + } + else { //UE_flag==1 + frame_parms->nb_antennas_tx = 1; + frame_parms->nb_antennas_rx = 1; + } + frame_parms->nb_antennas_tx_eNB = (transmission_mode == 1) ? 1 : 2; //initial value overwritten by initial sync later frame_parms->mode1_flag = (transmission_mode == 1) ? 1 : 0; frame_parms->frame_type = 1; frame_parms->tdd_config = 3; @@ -1269,7 +1288,7 @@ int main(int argc, char **argv) { openair_daq_vars.ue_dl_rb_alloc=0x1fff; openair_daq_vars.target_ue_dl_mcs=20; openair_daq_vars.ue_ul_nb_rb=6; - openair_daq_vars.target_ue_ul_mcs=11; + openair_daq_vars.target_ue_ul_mcs=12; // if AGC is off, the following values will be used // for (i=0;i<4;i++) @@ -1309,13 +1328,24 @@ int main(int argc, char **argv) { printf("Card %d: ExpressMIMO %d, HW Rev %d, SW Rev 0x%d\n", card, p_exmimo_id->board_exmimoversion, p_exmimo_id->board_hwrev, p_exmimo_id->board_swrev); - p_exmimo_config->framing.eNB_flag = !UE_flag; - p_exmimo_config->framing.tdd_config = 0; + if (p_exmimo_id->board_swrev>=BOARD_SWREV_CNTL2) + p_exmimo_config->framing.eNB_flag = 0; + else + p_exmimo_config->framing.eNB_flag = !UE_flag; + p_exmimo_config->framing.tdd_config = DUPLEXMODE_FDD + TXRXSWITCH_LSB; p_exmimo_config->framing.resampling_factor = 2; + + for (ant=0;ant<max(frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx);ant++) + p_exmimo_config->rf.rf_mode[ant] = rf_mode_base; + for (ant=0;ant<frame_parms->nb_antennas_tx;ant++) + p_exmimo_config->rf.rf_mode[ant] += (TXEN + DMAMODE_TX); + for (ant=0;ant<frame_parms->nb_antennas_rx;ant++) + p_exmimo_config->rf.rf_mode[ant] += (RXEN + DMAMODE_RX); + for (ant=max(frame_parms->nb_antennas_tx,frame_parms->nb_antennas_rx);ant<4;ant++) { + p_exmimo_config->rf.rf_mode[ant] = 0; + carrier_freq[ant] = 0; //this turns off all other LIMEs + } - carrier_freq[1] = 0; //don't use this LIME for card 1 - carrier_freq[2] = 0; //don't use this LIME for card 1 - carrier_freq[3] = 0; //don't use this LIME for card 1 for (ant = 0; ant<4; ant++) { p_exmimo_config->rf.do_autocal[ant] = 1; p_exmimo_config->rf.rf_freq_rx[ant] = carrier_freq[ant]; @@ -1340,21 +1370,6 @@ int main(int argc, char **argv) { p_exmimo_config->rf.rffe_gain_rxfinal[ant] = 63; p_exmimo_config->rf.rffe_gain_rxlow[ant] = 63; } - if (UE_flag) { - p_exmimo_config->rf.rf_mode[0] = my_rf_mode; - p_exmimo_config->rf.rf_mode[1] = 0; - //p_exmimo_config->rf.rf_mode[1] = my_rf_mode; - p_exmimo_config->rf.rf_mode[2] = 0; - p_exmimo_config->rf.rf_mode[3] = 0; - } - else { - p_exmimo_config->rf.rf_mode[0] = my_rf_mode; - p_exmimo_config->rf.rf_mode[1] = 0; - //p_exmimo_config->rf.rf_mode[1] = my_rf_mode; - p_exmimo_config->rf.rf_mode[2] = 0; - p_exmimo_config->rf.rf_mode[3] = 0; - } - dump_frame_parms(frame_parms); @@ -1410,7 +1425,7 @@ int main(int argc, char **argv) { for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) PHY_vars_UE_g[0]->lte_ue_common_vars.txdata[aa][i] = 0x00010001; - p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; + //p_exmimo_config->framing.tdd_config = TXRXSWITCH_TESTRX; } else { setup_eNB_buffers(PHY_vars_eNB_g[0],frame_parms,0);