Merge branch 'feature-21-TM7' of https://gitlab.eurecom.fr/oai/openairinterface5g into feature-21-TM7
This commit is contained in:
@@ -24,9 +24,9 @@
|
|||||||
|
|
||||||
|
|
||||||
// Maximum number of concurrently supported cards
|
// Maximum number of concurrently supported cards
|
||||||
//
|
// defined in openair_common_lib.h
|
||||||
#define MAX_CARDS 16
|
//#define MAX_CARDS 16
|
||||||
#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
//#define INIT_ZEROS {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
|
|
||||||
/** PCIe subsystem configuration Space
|
/** PCIe subsystem configuration Space
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
|
|
||||||
exmimo_pci_interface_bot_virtual_t openair0_exmimo_pci[MAX_CARDS]; // contains userspace pointers for each card
|
exmimo_pci_interface_bot_virtual_t openair0_exmimo_pci[MAX_CARDS]; // contains userspace pointers for each card
|
||||||
|
|
||||||
char *bigshm_top[MAX_CARDS] = INIT_ZEROS;
|
char *bigshm_top[MAX_CARDS];
|
||||||
|
|
||||||
int openair0_fd;
|
int openair0_fd;
|
||||||
int openair0_num_antennas[MAX_CARDS];
|
int openair0_num_antennas[MAX_CARDS];
|
||||||
@@ -126,7 +126,8 @@ int openair0_open(void)
|
|||||||
|
|
||||||
//printf("bigshm_top_kvirtptr (MAX_CARDS %d): %p %p %p %p\n", MAX_CARDS,bigshm_top_kvirtptr[0], bigshm_top_kvirtptr[1], bigshm_top_kvirtptr[2], bigshm_top_kvirtptr[3]);
|
//printf("bigshm_top_kvirtptr (MAX_CARDS %d): %p %p %p %p\n", MAX_CARDS,bigshm_top_kvirtptr[0], bigshm_top_kvirtptr[1], bigshm_top_kvirtptr[2], bigshm_top_kvirtptr[3]);
|
||||||
|
|
||||||
|
for( card=0; card < MAX_CARDS; card++)
|
||||||
|
bigshm_top[card] = NULL;
|
||||||
|
|
||||||
for( card=0; card < openair0_num_detected_cards; card++) {
|
for( card=0; card < openair0_num_detected_cards; card++) {
|
||||||
bigshm_top[card] = (char *)mmap( NULL,
|
bigshm_top[card] = (char *)mmap( NULL,
|
||||||
@@ -530,6 +531,7 @@ int trx_exmimo_read(openair0_device *device, openair0_timestamp *ptimestamp, voi
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = pthread_mutex_lock(&exm->watchdog_mutex);
|
||||||
|
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case EINVAL:
|
case EINVAL:
|
||||||
@@ -558,8 +560,6 @@ int trx_exmimo_read(openair0_device *device, openair0_timestamp *ptimestamp, voi
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pthread_mutex_lock(&exm->watchdog_mutex);
|
|
||||||
|
|
||||||
ts = exm->ts;
|
ts = exm->ts;
|
||||||
if (exm->wait_first_read==1) {
|
if (exm->wait_first_read==1) {
|
||||||
exm->wait_first_read=0;
|
exm->wait_first_read=0;
|
||||||
|
|||||||
+48
-50
@@ -277,75 +277,73 @@ static inline void wait_sync(char *thread_name) {
|
|||||||
void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
|
void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
|
||||||
{
|
{
|
||||||
|
|
||||||
unsigned int aa,slot_offset, slot_offset_F;
|
unsigned int aa,slot_offset;
|
||||||
int dummy_tx_b[7680*4] __attribute__((aligned(32)));
|
//int dummy_tx_b[7680*4] __attribute__((aligned(32)));
|
||||||
int i, tx_offset;
|
int i, tx_offset;
|
||||||
int slot_sizeF = (phy_vars_eNB->lte_frame_parms.ofdm_symbol_size)*
|
//int slot_sizeF = (phy_vars_eNB->frame_parms.ofdm_symbol_size)* ((phy_vars_eNB->frame_parms.Ncp==1) ? 6 : 7);
|
||||||
((phy_vars_eNB->lte_frame_parms.Ncp==1) ? 6 : 7);
|
|
||||||
int len;
|
int len;
|
||||||
|
//int slot_offset_F = (subframe<<1)*slot_sizeF;
|
||||||
|
|
||||||
slot_offset_F = (subframe<<1)*slot_sizeF;
|
slot_offset = subframe*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
slot_offset = subframe*phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
|
||||||
|
|
||||||
|
|
||||||
if ((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_DL)||
|
if ((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_DL)||
|
||||||
((subframe_select(&phy_vars_eNB->lte_frame_parms,subframe)==SF_S))) {
|
((subframe_select(&phy_vars_eNB->frame_parms,subframe)==SF_S))) {
|
||||||
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
|
// LOG_D(HW,"Frame %d: Generating slot %d\n",frame,next_slot);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,1);
|
||||||
|
|
||||||
do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars,
|
do_OFDM_mod_symbol(&phy_vars_eNB->common_vars,
|
||||||
0,
|
0,
|
||||||
subframe<<1,
|
subframe<<1,
|
||||||
&phy_vars_eNB->lte_frame_parms);
|
&phy_vars_eNB->frame_parms);
|
||||||
|
|
||||||
// if S-subframe generate first slot only
|
// if S-subframe generate first slot only
|
||||||
if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL) {
|
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL) {
|
||||||
do_OFDM_mod_symbol(&phy_vars_eNB->lte_eNB_common_vars,
|
do_OFDM_mod_symbol(&phy_vars_eNB->common_vars,
|
||||||
0,
|
0,
|
||||||
1+(subframe<<1),
|
1+(subframe<<1),
|
||||||
&phy_vars_eNB->lte_frame_parms);
|
&phy_vars_eNB->frame_parms);
|
||||||
}
|
}
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_ENB_OFDM_MODULATION,0);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
|
for (aa=0; aa<phy_vars_eNB->frame_parms.nb_antennas_tx; aa++) {
|
||||||
if (phy_vars_eNB->lte_frame_parms.Ncp == EXTENDED) {
|
if (phy_vars_eNB->frame_parms.Ncp == EXTENDED) {
|
||||||
PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
|
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
|
||||||
dummy_tx_b,
|
dummy_tx_b,
|
||||||
phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
|
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
||||||
6,
|
6,
|
||||||
phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
|
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
PHY_ofdm_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
PHY_ofdm_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
||||||
dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1),
|
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
||||||
phy_vars_eNB->lte_frame_parms.ofdm_symbol_size,
|
phy_vars_eNB->frame_parms.ofdm_symbol_size,
|
||||||
6,
|
6,
|
||||||
phy_vars_eNB->lte_frame_parms.nb_prefix_samples,
|
phy_vars_eNB->frame_parms.nb_prefix_samples,
|
||||||
CYCLIC_PREFIX);
|
CYCLIC_PREFIX);
|
||||||
} else {
|
} else {
|
||||||
normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F],
|
normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F],
|
||||||
dummy_tx_b,
|
dummy_tx_b,
|
||||||
7,
|
7,
|
||||||
&(phy_vars_eNB->lte_frame_parms));
|
&(phy_vars_eNB->frame_parms));
|
||||||
// if S-subframe generate first slot only
|
// if S-subframe generate first slot only
|
||||||
if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_DL)
|
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_DL)
|
||||||
normal_prefix_mod(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
normal_prefix_mod(&phy_vars_eNB->common_vars.txdataF[0][aa][slot_offset_F+slot_sizeF],
|
||||||
dummy_tx_b+(phy_vars_eNB->lte_frame_parms.samples_per_tti>>1),
|
dummy_tx_b+(phy_vars_eNB->frame_parms.samples_per_tti>>1),
|
||||||
7,
|
7,
|
||||||
&(phy_vars_eNB->lte_frame_parms));
|
&(phy_vars_eNB->frame_parms));
|
||||||
}
|
}
|
||||||
} */
|
} */
|
||||||
|
|
||||||
for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx; aa++) {
|
for (aa=0; aa<phy_vars_eNB->frame_parms.nb_antennas_tx; aa++) {
|
||||||
// if S-subframe generate first slot only
|
// if S-subframe generate first slot only
|
||||||
if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S)
|
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S)
|
||||||
len = phy_vars_eNB->lte_frame_parms.samples_per_tti>>1;
|
len = phy_vars_eNB->frame_parms.samples_per_tti>>1;
|
||||||
else
|
else
|
||||||
len = phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
len = phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
/*
|
/*
|
||||||
for (i=0;i<len;i+=4) {
|
for (i=0;i<len;i+=4) {
|
||||||
dummy_tx_b[i] = 0x100;
|
dummy_tx_b[i] = 0x100;
|
||||||
@@ -358,42 +356,42 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
|
|||||||
|
|
||||||
|
|
||||||
if (tx_offset<0)
|
if (tx_offset<0)
|
||||||
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti))
|
if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti))
|
||||||
tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
/* ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<<openair0_cfg[0].iq_txshift;
|
/* ((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[0] = ((short*)dummy_tx_b)[2*i]<<openair0_cfg[0].iq_txshift;
|
||||||
|
|
||||||
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<<openair0_cfg[0].iq_txshift; */
|
((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[1] = ((short*)dummy_tx_b)[2*i+1]<<openair0_cfg[0].iq_txshift; */
|
||||||
|
|
||||||
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[0]<<openair0_cfg[0].iq_txshift;
|
((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[0] = ((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[0]<<openair0_cfg[0].iq_txshift;
|
||||||
|
|
||||||
((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1] = ((short*)&phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset])[1]<<openair0_cfg[0].iq_txshift;
|
((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[1] = ((short*)&phy_vars_eNB->common_vars.txdata[0][aa][tx_offset])[1]<<openair0_cfg[0].iq_txshift;
|
||||||
}
|
}
|
||||||
// if S-subframe switch to RX in second subframe
|
// if S-subframe switch to RX in second subframe
|
||||||
if (subframe_select(&phy_vars_eNB->lte_frame_parms,subframe) == SF_S) {
|
if (subframe_select(&phy_vars_eNB->frame_parms,subframe) == SF_S) {
|
||||||
for (i=0; i<len; i++) {
|
for (i=0; i<len; i++) {
|
||||||
phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset++] = 0x00010001;
|
phy_vars_eNB->common_vars.txdata[0][aa][tx_offset++] = 0x00010001;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((((phy_vars_eNB->lte_frame_parms.tdd_config==0) ||
|
if ((((phy_vars_eNB->frame_parms.tdd_config==0) ||
|
||||||
(phy_vars_eNB->lte_frame_parms.tdd_config==1) ||
|
(phy_vars_eNB->frame_parms.tdd_config==1) ||
|
||||||
(phy_vars_eNB->lte_frame_parms.tdd_config==2) ||
|
(phy_vars_eNB->frame_parms.tdd_config==2) ||
|
||||||
(phy_vars_eNB->lte_frame_parms.tdd_config==6)) &&
|
(phy_vars_eNB->frame_parms.tdd_config==6)) &&
|
||||||
(subframe==0)) || (subframe==5)) {
|
(subframe==0)) || (subframe==5)) {
|
||||||
// turn on tx switch N_TA_offset before
|
// turn on tx switch N_TA_offset before
|
||||||
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
|
//LOG_D(HW,"subframe %d, time to switch to tx (N_TA_offset %d, slot_offset %d) \n",subframe,phy_vars_eNB->N_TA_offset,slot_offset);
|
||||||
for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
|
for (i=0; i<phy_vars_eNB->N_TA_offset; i++) {
|
||||||
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2;
|
tx_offset = (int)slot_offset+time_offset[aa]+i-phy_vars_eNB->N_TA_offset/2;
|
||||||
if (tx_offset<0)
|
if (tx_offset<0)
|
||||||
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
tx_offset += LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti))
|
if (tx_offset>=(LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti))
|
||||||
tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->lte_frame_parms.samples_per_tti;
|
tx_offset -= LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*phy_vars_eNB->frame_parms.samples_per_tti;
|
||||||
|
|
||||||
phy_vars_eNB->lte_eNB_common_vars.txdata[0][aa][tx_offset] = 0x00000000;
|
phy_vars_eNB->common_vars.txdata[0][aa][tx_offset] = 0x00000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1121,13 +1121,13 @@ static void get_options (int argc, char **argv)
|
|||||||
frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id];
|
frame_parms[CC_id]->N_RB_DL = enb_properties->properties[i]->N_RB_DL[CC_id];
|
||||||
frame_parms[CC_id]->N_RB_UL = enb_properties->properties[i]->N_RB_DL[CC_id];
|
frame_parms[CC_id]->N_RB_UL = enb_properties->properties[i]->N_RB_DL[CC_id];
|
||||||
frame_parms[CC_id]->nb_antennas_tx = enb_properties->properties[i]->nb_antennas_tx[CC_id];
|
frame_parms[CC_id]->nb_antennas_tx = enb_properties->properties[i]->nb_antennas_tx[CC_id];
|
||||||
frame_parms[CC_id]->nb_antennas_tx_eNB = enb_properties->properties[i]->nb_antenna_ports[CC_id];
|
frame_parms[CC_id]->nb_antenna_ports_eNB = enb_properties->properties[i]->nb_antenna_ports[CC_id];
|
||||||
frame_parms[CC_id]->nb_antennas_rx = enb_properties->properties[i]->nb_antennas_rx[CC_id];
|
frame_parms[CC_id]->nb_antennas_rx = enb_properties->properties[i]->nb_antennas_rx[CC_id];
|
||||||
|
|
||||||
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_ConfigIndex = enb_properties->properties[i]->prach_config_index[CC_id];
|
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_ConfigIndex = enb_properties->properties[i]->prach_config_index[CC_id];
|
||||||
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset = enb_properties->properties[i]->prach_freq_offset[CC_id];
|
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset = enb_properties->properties[i]->prach_freq_offset[CC_id];
|
||||||
|
|
||||||
frame_parms[CC_id]->mode1_flag = (frame_parms[CC_id]->nb_antennas_tx_eNB == 1) ? 1 : 0;
|
frame_parms[CC_id]->mode1_flag = (frame_parms[CC_id]->nb_antenna_ports_eNB == 1) ? 1 : 0;
|
||||||
frame_parms[CC_id]->threequarter_fs = threequarter_fs;
|
frame_parms[CC_id]->threequarter_fs = threequarter_fs;
|
||||||
|
|
||||||
//} // j
|
//} // j
|
||||||
@@ -1225,7 +1225,7 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
|||||||
frame_parms[CC_id]->Ncp_UL = NORMAL;
|
frame_parms[CC_id]->Ncp_UL = NORMAL;
|
||||||
frame_parms[CC_id]->Nid_cell = 0;
|
frame_parms[CC_id]->Nid_cell = 0;
|
||||||
frame_parms[CC_id]->num_MBSFN_config = 0;
|
frame_parms[CC_id]->num_MBSFN_config = 0;
|
||||||
frame_parms[CC_id]->nb_antennas_tx_eNB = 1;
|
frame_parms[CC_id]->nb_antenna_ports_eNB = 1;
|
||||||
frame_parms[CC_id]->nb_antennas_tx = 1;
|
frame_parms[CC_id]->nb_antennas_tx = 1;
|
||||||
frame_parms[CC_id]->nb_antennas_rx = 1;
|
frame_parms[CC_id]->nb_antennas_rx = 1;
|
||||||
|
|
||||||
@@ -1524,7 +1524,7 @@ int main( int argc, char **argv )
|
|||||||
if (UE_flag==1) {
|
if (UE_flag==1) {
|
||||||
frame_parms[CC_id]->nb_antennas_tx = 1;
|
frame_parms[CC_id]->nb_antennas_tx = 1;
|
||||||
frame_parms[CC_id]->nb_antennas_rx = 1;
|
frame_parms[CC_id]->nb_antennas_rx = 1;
|
||||||
frame_parms[CC_id]->nb_antennas_tx_eNB = 1; //initial value overwritten by initial sync later
|
frame_parms[CC_id]->nb_antenna_ports_eNB = 1; //initial value overwritten by initial sync later
|
||||||
}
|
}
|
||||||
|
|
||||||
init_ul_hopping(frame_parms[CC_id]);
|
init_ul_hopping(frame_parms[CC_id]);
|
||||||
|
|||||||
Reference in New Issue
Block a user