Commit feadb949 authored by Roberto Louro Magueta's avatar Roberto Louro Magueta

Fix stack size limitation for 4-layers DL

parent ffe13ae5
......@@ -83,13 +83,13 @@ unsigned char offset_mumimo_llr_drange[29][3]={{8,8,8},{7,7,7},{7,7,7},{7,7,7},{
/* compute H_h_H matrix inversion up to 4x4 matrices */
uint8_t nr_zero_forcing_rx(uint32_t rx_size,
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
int32_t dl_ch_estimates_ext[][rx_size],
unsigned short nb_rb,
unsigned char n_rx,
unsigned char n_tx,//number of layer
unsigned char n_tx, // number of layer
unsigned char mod_order,
int shift,
unsigned char symbol,
......@@ -109,9 +109,9 @@ static int nr_dlsch_llr(uint32_t rx_size,
int16_t *layer_llr[NR_MAX_NB_LAYERS],
NR_DL_FRAME_PARMS *frame_parms,
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
NR_DL_UE_HARQ_t *dlsch0_harq,
NR_DL_UE_HARQ_t *dlsch1_harq,
unsigned char harq_pid,
......@@ -142,9 +142,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int32_t dl_ch_estimates_ext[][rx_size],
int32_t rxdataF_ext[][rx_size],
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP],
uint32_t llr_offset[NR_SYMBOLS_PER_SLOT],
int32_t *log2_maxh)
......@@ -633,9 +633,9 @@ void nr_dlsch_deinterleaving(uint8_t symbol,
void nr_dlsch_channel_compensation(uint32_t rx_size,
int32_t rxdataF_ext[][rx_size],
int32_t dl_ch_estimates_ext[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
int32_t rxdataF_comp[][rx_size],
int ***rho,
NR_DL_FRAME_PARMS *frame_parms,
......@@ -1723,14 +1723,15 @@ void nr_dlsch_extract_rbs(uint32_t rxdataF_sz,
void nr_dlsch_detection_mrc(uint32_t rx_size,
int32_t rxdataF_comp[][rx_size],
int ***rho,
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
short n_tx,
short n_rx,
unsigned char symbol,
unsigned short nb_rb,
int length) {
int length)
{
#if defined(__x86_64__)||defined(__i386__)
unsigned char aatx, aarx;
int i;
......@@ -2185,13 +2186,13 @@ void nr_conjch0_mult_ch1(int *ch0,
* */
uint8_t nr_zero_forcing_rx(uint32_t rx_size,
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
int32_t dl_ch_estimates_ext[][rx_size],
unsigned short nb_rb,
unsigned char n_rx,
unsigned char n_tx,//number of layer
unsigned char n_tx, // number of layer
unsigned char mod_order,
int shift,
unsigned char symbol,
......@@ -2387,9 +2388,9 @@ static int nr_dlsch_llr(uint32_t rx_size,
int16_t *layer_llr[NR_MAX_NB_LAYERS],
NR_DL_FRAME_PARMS *frame_parms,
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
NR_DL_UE_HARQ_t *dlsch0_harq,
NR_DL_UE_HARQ_t *dlsch1_harq,
unsigned char harq_pid,
......
......@@ -579,9 +579,9 @@ void nr_dlsch_extract_rbs(uint32_t rxdataF_sz,
void nr_dlsch_channel_compensation(uint32_t rx_size,
int32_t rxdataF_ext[][rx_size],
int32_t dl_ch_estimates_ext[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
int32_t rxdataF_comp[][rx_size],
int ***rho,
NR_DL_FRAME_PARMS *frame_parms,
......@@ -625,9 +625,9 @@ void nr_dlsch_channel_level_median(uint32_t rx_size,
void nr_dlsch_detection_mrc(uint32_t rx_size,
int32_t rxdataF_comp[][rx_size],
int ***rho,
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
short n_tx,
short n_rx,
unsigned char symbol,
......@@ -884,9 +884,9 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int32_t dl_ch_estimates_ext[][rx_size],
int32_t rxdataF_ext[][rx_size],
int32_t rxdataF_comp[][rx_size],
int32_t dl_ch_mag[][rx_size],
int32_t dl_ch_magb[][rx_size],
int32_t dl_ch_magr[][rx_size],
int32_t **dl_ch_mag,
int32_t **dl_ch_magb,
int32_t **dl_ch_magr,
c16_t rxdataF[][ue->frame_parms.samples_per_slot_wCP],
uint32_t llr_offset[NR_SYMBOLS_PER_SLOT],
int32_t *log2_maxh);
......
......@@ -657,14 +657,14 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
__attribute__ ((aligned(32))) int32_t rxdataF_comp[ue->frame_parms.nb_antennas_rx*dlsch0->Nl][rx_size];
memset(rxdataF_comp, 0, ue->frame_parms.nb_antennas_rx*dlsch0->Nl*rx_size*sizeof(int32_t));
__attribute__ ((aligned(32))) int32_t dl_ch_mag[ue->frame_parms.nb_antennas_rx*dlsch0->Nl][rx_size];
memset(dl_ch_mag, 0, ue->frame_parms.nb_antennas_rx*dlsch0->Nl*rx_size*sizeof(int32_t));
__attribute__ ((aligned(32))) int32_t dl_ch_magb[ue->frame_parms.nb_antennas_rx*dlsch0->Nl][rx_size];
memset(dl_ch_magb, 0, ue->frame_parms.nb_antennas_rx*dlsch0->Nl*rx_size*sizeof(int32_t));
__attribute__ ((aligned(32))) int32_t dl_ch_magr[ue->frame_parms.nb_antennas_rx*dlsch0->Nl][rx_size];
memset(dl_ch_magr, 0, ue->frame_parms.nb_antennas_rx*dlsch0->Nl*rx_size*sizeof(int32_t));
int32_t **dl_ch_mag = (int32_t **)malloc16_clear(dlsch0->Nl * ue->frame_parms.nb_antennas_rx * sizeof(int32_t *));
int32_t **dl_ch_magb = (int32_t **)malloc16_clear(dlsch0->Nl * ue->frame_parms.nb_antennas_rx * sizeof(int32_t *));
int32_t **dl_ch_magr = (int32_t **)malloc16_clear(dlsch0->Nl * ue->frame_parms.nb_antennas_rx * sizeof(int32_t *));
for (int i = 0; i < dlsch0->Nl * ue->frame_parms.nb_antennas_rx; i++) {
dl_ch_mag[i] = (int32_t *)malloc16_clear(sizeof(int32_t) * rx_size);
dl_ch_magb[i] = (int32_t *)malloc16_clear(sizeof(int32_t) * rx_size);
dl_ch_magr[i] = (int32_t *)malloc16_clear(sizeof(int32_t) * rx_size);
}
int32_t log2_maxh = 0;
start_meas(&ue->rx_pdsch_stats);
......@@ -724,6 +724,15 @@ int nr_ue_pdsch_procedures(PHY_VARS_NR_UE *ue,
memcpy(ue->phy_sim_pdsch_dl_ch_estimates_ext, dl_ch_estimates_ext, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx*dlsch0->Nl);
if (ue->phy_sim_pdsch_dl_ch_estimates)
memcpy(ue->phy_sim_pdsch_dl_ch_estimates, dl_ch_estimates_ext, sizeof(int32_t)*rx_size*ue->frame_parms.nb_antennas_rx*dlsch0->Nl);
for (int i = 0; i < dlsch0->Nl * ue->frame_parms.nb_antennas_rx; i++) {
free(dl_ch_mag[i]);
free(dl_ch_magb[i]);
free(dl_ch_magr[i]);
}
free(dl_ch_mag);
free(dl_ch_magb);
free(dl_ch_magr);
}
return 0;
}
......
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