Commit 59e9e2e8 authored by gabrielC's avatar gabrielC

Merge tag '2017.w15' into ue_dlsch_dual_buffer_fix

parents 8f758785 c124e32a
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2,4 +2,6 @@ This directory contains files related to initialization of variables/structures ...@@ -2,4 +2,6 @@ This directory contains files related to initialization of variables/structures
init_top.c : initialize top-level variables and signal buffers, FFT twiddle factors, etc. init_top.c : initialize top-level variables and signal buffers, FFT twiddle factors, etc.
lte_init.c : LTE specific initlization routines (DLSCH/ULSCH signal buffers for RX, data buffers for TX, etc.) lte_init.c : LTE specific initlization routines (DLSCH/ULSCH signal buffers for RX, data buffers for TX, etc.)
init.c : non-LTE initialization routines (to be removed) lte_param_init.c: used only in unitary simulations. initializes the global variables eNB and UE.
lte_parms.c: contains init_frame_parms to initialize frame parameters structure
...@@ -230,7 +230,7 @@ typedef struct DCI1A_10MHz_TDD_1_6 DCI1A_10MHz_TDD_1_6_t; ...@@ -230,7 +230,7 @@ typedef struct DCI1A_10MHz_TDD_1_6 DCI1A_10MHz_TDD_1_6_t;
/// DCI Format Type 0 (20 MHz,TDD1-6, 27 bits) /// DCI Format Type 0 (20 MHz,TDD1-6, 27 bits)
struct DCI0_20MHz_TDD_1_6 { struct DCI0_20MHz_TDD_1_6 {
/// Padding /// Padding
uint32_t padding:2; uint32_t padding:3;
/// CQI request /// CQI request
uint32_t cqi_req:1; uint32_t cqi_req:1;
/// DAI /// DAI
......
This folder contains the software for the device driver of CBMIMO1 and the physical layer signal processing. This folder contains the software for the device driver of CBMIMO1 and the physical layer signal processing.
|-- ARCH // contains drivers for hardware
| |-- CBMIMO1 // contains everything related to CBMIMO1
| | `-- DEVICE_DRIVER
| | |-- Makefile // main Makefile used to compile the driver; usually invoked from the top level Makefile
| | |-- cbmimo1_device.c // main file for device driver (initializes the card, bigphys, main variables)
| | |-- cbmimo1_device.h
| | |-- cbmimo1_dma.c
| | |-- cbmimo1_fileops.c // file that processes IOCTL commands coming from the userspace control utility (USERSPACE_TOOLS/OPENAIR_RF/)
| | |-- cbmimo1_generate_fs4.c // generates test signals (DEBUGGING)
| | |-- cbmimo1_generate_ofdm.c // generates test signals (DEBUGGING)
| | |-- cbmimo1_get_frame.c // code to grab a frame from the card
| | |-- cbmimo1_init.c // code to set up the registers of the card
| | |-- cbmimo1_pci.h
| | |-- cbmimo1_proc.c // generates the proc entries /proc/openair1/bch_stats and /proc/openair1/openair1_state
| | |-- cbmimo1_rf_cntl.c // controls the RF chipset on the card
| | |-- cbmimo1_test.c
| | |-- from_grlib_softconfig.h
| | |-- from_grlib_softregs.h
| | |-- defs.h
| | |-- extern.h
| | `-- vars.h
| |-- COMMON // common for all hardware (mainly bigphys)
| |-- EXPRESS_MIMO // contains everything related to EXPRESS MIMO
|-- DOCS // Documentation
| |-- DOXYGEN // Automaitcally generated DOXYGEN documentation in latex and html
| `-- PAPERS // papers related to openair1
|-- EMOS // this contains everything related to Eurecom MIMO Openair Sounder (EMOS)
| |-- DOC
| |-- DUMP // program that dumps channel estimate to disk using a FIFO
| |-- GUI
| |-- MATLAB // Matlab code to process measurements
| |-- SIM // EMOS simulator (for DEBUGGING)
| `-- UTIL
|-- MAC_INTERFACE // interface with MAC layer (in openair2)
|-- PHY // contains all signal processing related to physical layer (used in real-time AND simulation) |-- PHY // contains all signal processing related to physical layer (used in real-time AND simulation)
General remarks: every directory contains at least defs.h (for declaration of structure and functions), vars.h (for definitions of variables), and extern.h (variables are defined only once in cbmimo1_device.c (for real-time HW operation) or a top-level simulation (in SIMULATION/xxx), if variables are needed in another file, use extern.h) General remarks: every directory contains at least defs.h (for declaration of structure and functions), vars.h (for definitions of variables), and extern.h (variables are defined only once in cbmimo1_device.c (for real-time HW operation) or a top-level simulation (in SIMULATION/xxx), if variables are needed in another file, use extern.h)
...@@ -57,17 +22,19 @@ General remarks: every directory contains at least defs.h (for declaration of st ...@@ -57,17 +22,19 @@ General remarks: every directory contains at least defs.h (for declaration of st
| |-- spec_defs_top.h | |-- spec_defs_top.h
| |-- types.h | |-- types.h
| `-- vars.h | `-- vars.h
|-- SCHED // schedules the different PHY functions according to the nodes role (CH=BS, MR=UE) |-- SCHED // schedules the different PHY functions according to the nodes role
| |-- defs.h | |-- defs.h
| |-- extern.h | |-- extern.h
| |-- phy_procedures.c // non-LTE PHY procedures this is used in synchronized mode to schedule the slot processing
| |-- phy_procedures_emos.c // non-LTE PHY procedures for EMOS | |-- phy_procedures_emos.c // non-LTE PHY procedures for EMOS
| |-- phy_procedures_emos.h | |-- phy_procedures_emos.h
| |-- phy_procedures_lte_eNb.c // LTE PHY procedures for eNB (from 36-213) | |-- phy_procedures_lte_eNb.c // LTE PHY procedures for eNB (from 36-213)
| |-- phy_procedures_lte_ue.c // LTE PHY procedures for UE (from 36-213) | |-- phy_procedures_lte_ue.c // LTE PHY procedures for UE (from 36-213)
| |-- phy_procedures_lte_common.c // LTE PHY procedures common for UE and eNB (from 36-213)
| |-- phy_mac_stub.c //MAC stub that generates channels when used in phy-test-mode
| |-- pucch_pc.c // power control for PUCCH
| |-- pusch_pc.c // power control for PUSCH
| |-- srs_pc.c // power control for SRS
| |-- rt_compat.h | |-- rt_compat.h
| |-- sched.c // contains the top level scheduler (only for CBMIMO1 HW)
| |-- sched_lte.c // same as sched.c for LTE (only for CBMIMO1 HW)
| `-- vars.h | `-- vars.h
|-- SIMULATION // contains simulation routines to test PHY |-- SIMULATION // contains simulation routines to test PHY
| |-- LTE_PHY // LTE simulation testbenches for unitary simulation of transport/physical channels | |-- LTE_PHY // LTE simulation testbenches for unitary simulation of transport/physical channels
...@@ -76,17 +43,9 @@ General remarks: every directory contains at least defs.h (for declaration of st ...@@ -76,17 +43,9 @@ General remarks: every directory contains at least defs.h (for declaration of st
| | |-- dlsim.c // PDSCH simulation testbench | | |-- dlsim.c // PDSCH simulation testbench
| | |-- ulsim.c // PUSCH simulation testbench | | |-- ulsim.c // PUSCH simulation testbench
| | |-- pucchsim.c // PUCCH simulation testbench | | |-- pucchsim.c // PUCCH simulation testbench
| |-- LTE_PHY_L2 // LTE simulation testbench for full system simulation (PHY,MAC,RLC,RRC,PDCP)
| `-- TOOLS
| |-- RF | |-- RF
|-- USERSPACE_TOOLS // tools that run in userspace (not kernel) | |-- ETH_TRANSPORT
| |-- OCTAVE | `-- TOOLS
| | |-- AGILE_RF_TOOLS // octave tools to test agile RF
| | |-- CBMIMO1_TOOLS // octave interface for CBMIMO1
| | |-- GPIB // octave tools to control signal generator (used for calibration)
| | `-- PHY_SIM // octave implementation of sync
| |-- OPENAIR_RF // tool to interface with the device driver using IOCTL
| |-- SCOPE // tool to visualize data from PHY (channel estimates, IQ plots, etc.). Communicates with kernel module using shared memory.
| `-- SENSING // tools related to sensing
...@@ -70,7 +70,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) ...@@ -70,7 +70,7 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
uint32_t bcch_pdu; uint32_t bcch_pdu;
uint64_t dlsch_pdu; uint64_t dlsch_pdu;
LOG_I(PHY,"frame %d, subframe %d, transmission_mode %d\n",proc->frame_tx,proc->subframe_tx,transmission_mode); LOG_D(PHY,"frame %d, subframe %d, transmission_mode %d\n",proc->frame_tx,proc->subframe_tx,transmission_mode);
DCI_pdu->Num_common_dci = 0; DCI_pdu->Num_common_dci = 0;
DCI_pdu->Num_ue_spec_dci=0; DCI_pdu->Num_ue_spec_dci=0;
...@@ -380,25 +380,25 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc) ...@@ -380,25 +380,25 @@ void fill_dci(DCI_PDU *DCI_pdu,PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc)
if (eNB->frame_parms.frame_type == FDD) { if (eNB->frame_parms.frame_type == FDD) {
DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_20MHz_FDD_t; DCI_pdu->dci_alloc[0].dci_length = sizeof_DCI1_20MHz_FDD_t;
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc; //computeRIV(100,10,3); harq_pid_value = ( ((proc->frame_tx * 10) + subframe) % 8 );
if (!(subframe&1)) // even subframe
dci_ndi_toggle_tmp = &(dci_ndi_toggle_even[harq_pid_value]);
else // odd subframe
dci_ndi_toggle_tmp = &(dci_ndi_toggle_odd[harq_pid_value]);
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rballoc = 0x1ffffff; //rballoc; //computeRIV(100,10,3);
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC = 0; ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5; ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->harq_pid = harq_pid_value;
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs; ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs;
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28); ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = (*dci_ndi_toggle_tmp);
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->ndi = subframe / 5;
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv = 0; ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rv = 0;
((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rah = 0; ((DCI1_20MHz_FDD_t *)&dlsch_pdu)->rah = 0;
(*dci_ndi_toggle_tmp) = ((*dci_ndi_toggle_tmp) + 1) & 1;
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_FDD_t)); memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_20MHz_FDD_t));
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rballoc = rballoc;
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->TPC = 0;
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->harq_pid = subframe % 5;
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = eNB->target_ue_dl_mcs;
//((DCI1_5MHz_FDD_t *)&dlsch_pdu)->mcs = (unsigned char) ((eNB->frame%1024)%28);
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->ndi = subframe/5;
((DCI1_5MHz_FDD_t *)&dlsch_pdu)->rv = 0;
memcpy((void*)&DCI_pdu->dci_alloc[0].dci_pdu[0],(void *)&dlsch_pdu,sizeof(DCI1_5MHz_TDD_t));
/* /*
//user2 //user2
DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t; DCI_pdu->dci_alloc[1].dci_length = sizeof_DCI1_5MHz_TDD_t;
......
...@@ -885,7 +885,7 @@ abort(); ...@@ -885,7 +885,7 @@ abort();
rb_table_index=UE_template->pre_allocated_rb_table_index_ul; rb_table_index=UE_template->pre_allocated_rb_table_index_ul;
} else { } else {
mcs=10;//cmin (10, openair_daq_vars.target_ue_ul_mcs); mcs=10;//cmin (10, openair_daq_vars.target_ue_ul_mcs);
rb_table_index=13; // for PHR rb_table_index=5; // for PHR
} }
UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs; UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2=mcs;
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
# define RLC_AM_MIN_SEGMENT_SIZE_REQUEST 8 # define RLC_AM_MIN_SEGMENT_SIZE_REQUEST 8
/** Max SDUs that can fit in a PDU. */ /** Max SDUs that can fit in a PDU. */
# define RLC_AM_MAX_SDU_IN_PDU 32 # define RLC_AM_MAX_SDU_IN_PDU 128
/** Max fragments for a SDU. */ /** Max fragments for a SDU. */
# define RLC_AM_MAX_SDU_FRAGMENTS 32 # define RLC_AM_MAX_SDU_FRAGMENTS 32
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
// UM_Window_Size = 512 when a 10 bit SN is configured and UM_Window_Size = 0 // UM_Window_Size = 512 when a 10 bit SN is configured and UM_Window_Size = 0
// when the receiving UM RLC entity is configured for MCCH or MTCH. // when the receiving UM RLC entity is configured for MCCH or MTCH.
// li field (values shifted 1 bit left) // li field (values shifted 1 bit left)
# define RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU 24 # define RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU 128
//---------------------------------------------------------- //----------------------------------------------------------
// Events defined for state model of the acknowledged mode entity // Events defined for state model of the acknowledged mode entity
/** Internal event defined for state model of the RLC UM. */ /** Internal event defined for state model of the RLC UM. */
......
...@@ -183,7 +183,7 @@ int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_liP, ...@@ -183,7 +183,7 @@ int rlc_um_read_length_indicators(unsigned char**data_ppP, rlc_um_e_li_t* e_liP,
// AssertFatal(*data_size_pP >= 0, "Invalid data_size!"); // AssertFatal(*data_size_pP >= 0, "Invalid data_size!");
} }
if (*num_li_pP >= RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU) { if (*num_li_pP > RLC_UM_SEGMENT_NB_MAX_LI_PER_PDU) {
return -1; return -1;
} }
} }
......
...@@ -34,7 +34,7 @@ eNBs = ...@@ -34,7 +34,7 @@ eNBs =
downlink_frequency = 2680000000L; downlink_frequency = 2680000000L;
uplink_frequency_offset = -120000000; uplink_frequency_offset = -120000000;
Nid_cell = 0; Nid_cell = 0;
N_RB_DL = 50; N_RB_DL = 25;
Nid_cell_mbsfn = 0; Nid_cell_mbsfn = 0;
nb_antenna_ports = 1; nb_antenna_ports = 1;
nb_antennas_tx = 1; nb_antennas_tx = 1;
...@@ -62,7 +62,7 @@ eNBs = ...@@ -62,7 +62,7 @@ eNBs =
pusch_nDMRS1 = 0; pusch_nDMRS1 = 0;
phich_duration = "NORMAL"; phich_duration = "NORMAL";
phich_resource = "ONESIXTH"; phich_resource = "ONESIXTH";
srs_enable = "ENABLE"; srs_enable = "DISABLE";
srs_BandwidthConfig =2; srs_BandwidthConfig =2;
srs_SubframeConfig =13; srs_SubframeConfig =13;
srs_ackNackST ="DISABLE"; srs_ackNackST ="DISABLE";
......
...@@ -1388,11 +1388,6 @@ int main( int argc, char **argv ) { ...@@ -1388,11 +1388,6 @@ int main( int argc, char **argv ) {
memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs); memset(tx_max_power,0,sizeof(int)*MAX_NUM_CCs);
char command_line[500];
sprintf(command_line,"git log -1");
if (background_system(command_line) != 0)
printf("ERROR failed command '%s'", command_line);
set_latency_target(); set_latency_target();
// set default parameters // set default parameters
...@@ -1524,6 +1519,12 @@ int main( int argc, char **argv ) { ...@@ -1524,6 +1519,12 @@ int main( int argc, char **argv ) {
check_clock(); check_clock();
#ifndef PACKAGE_VERSION
# define PACKAGE_VERSION "UNKNOWN-EXPERIMENTAL"
#endif
LOG_I(HW, "Version: %s\n", PACKAGE_VERSION);
// init the parameters // init the parameters
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment