diff --git a/common/openairinterface5g_limits.h b/common/openairinterface5g_limits.h index 79f3d6b8dd..f420722350 100644 --- a/common/openairinterface5g_limits.h +++ b/common/openairinterface5g_limits.h @@ -19,7 +19,6 @@ # define NUMBER_OF_NR_SCH_STATS_MAX 16 # define NUMBER_OF_NR_PUCCH_MAX 16 -# define NUMBER_OF_NR_SR_MAX 16 # define NUMBER_OF_NR_PDCCH_MAX 16 #define MAX_MANAGED_ENB_PER_MOBILE 2 diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c index 4f07e79a78..8a3d879231 100644 --- a/nfapi/oai_integration/nfapi_pnf.c +++ b/nfapi/oai_integration/nfapi_pnf.c @@ -1212,7 +1212,6 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, else if (dl_tti_pdu_list[i].PDUType == NFAPI_NR_DL_TTI_SSB_PDU_TYPE) { //NFAPI_TRACE(NFAPI_TRACE_INFO, "%s() PDU:%d BCH: pdu_index:%u pdu_length:%d sdu_length:%d BCH_SDU:%x,%x,%x\n", __FUNCTION__, i, pdu_index, bch_pdu->bch_pdu_rel8.length, tx_request_pdu[sfn][sf][pdu_index]->segments[0].segment_length, sdu[0], sdu[1], sdu[2]); handle_nr_nfapi_ssb_pdu(msgTx, sfn, slot, &dl_tti_pdu_list[i]); - gNB->pbch_configured=1; } else if (dl_tti_pdu_list[i].PDUType == NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE) { nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu = &dl_tti_pdu_list[i].pdsch_pdu; diff --git a/openair1/PHY/INIT/nr_init.c b/openair1/PHY/INIT/nr_init.c index f4329a354e..61ba1bd49f 100644 --- a/openair1/PHY/INIT/nr_init.c +++ b/openair1/PHY/INIT/nr_init.c @@ -30,10 +30,6 @@ #include "PHY/NR_TRANSPORT/nr_transport_proto.h" #include "PHY/NR_TRANSPORT/nr_transport_common_proto.h" #include "openair1/PHY/MODULATION/nr_modulation.h" -/*#include "RadioResourceConfigCommonSIB.h" -#include "RadioResourceConfigDedicated.h" -#include "TDD-Config.h" -#include "MBSFN-SubframeConfigList.h"*/ #include "openair1/PHY/defs_RU.h" #include "openair1/PHY/CODING/nrLDPC_extern.h" #include "assertions.h" @@ -634,8 +630,6 @@ int phy_init_nr_gNB(PHY_VARS_gNB *gNB, /// Transport init necessary for NR synchro init_nr_transport(gNB); - gNB->first_run_I0_measurements = 1; - common_vars->txdataF = (int32_t **)malloc16(Ptx*sizeof(int32_t*)); common_vars->rxdataF = (int32_t **)malloc16(Prx*sizeof(int32_t*)); /* Do NOT allocate per-antenna txdataF/rxdataF: the gNB gets a pointer to the @@ -905,7 +899,6 @@ void nr_phy_config_request_sim(PHY_VARS_gNB *gNB, gNB_config->tdd_table.tdd_period.value = 0; //gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED; - gNB->mac_enabled = 1; if (mu==0) { fp->dl_CarrierFreq = 2600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value); fp->ul_CarrierFreq = 2600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000); @@ -944,7 +937,6 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config) { nfapi_nr_config_request_scf_t *gNB_config = &RC.gNB[Mod_id]->gNB_config; memcpy((void*)gNB_config,phy_config->cfg,sizeof(*phy_config->cfg)); - RC.gNB[Mod_id]->mac_enabled = 1; uint64_t dl_bw_khz = (12*gNB_config->carrier_config.dl_grid_size[gNB_config->ssb_config.scs_common.value].value)*(15<ssb_config.scs_common.value); fp->dl_CarrierFreq = ((dl_bw_khz>>1) + gNB_config->carrier_config.dl_frequency.value)*1000 ; @@ -1000,7 +992,7 @@ void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg) { for (int i=0; inumber_of_nr_dlsch_max; i++) { LOG_I(PHY,"Allocating Transport Channel Buffers for DLSCH %d/%d\n",i,gNB->number_of_nr_dlsch_max); for (int j=0; jdlsch[i][j] = new_gNB_dlsch(fp,1,16,NSOFT,0,grid_size); + msg->dlsch[i][j] = new_gNB_dlsch(fp, grid_size); AssertFatal(msg->dlsch[i][j]!=NULL,"Can't initialize dlsch %d \n", i); } } @@ -1021,8 +1013,6 @@ void init_nr_transport(PHY_VARS_gNB *gNB) { NR_DL_FRAME_PARMS *fp = &gNB->frame_parms; LOG_I(PHY, "Initialise nr transport\n"); - memset(gNB->num_pdsch_rnti, 0, sizeof(uint16_t)*80); - for (int i=0; ipucch[i] = new_gNB_pucch(); diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c index f095fec965..fa3c961a29 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch.c @@ -544,7 +544,6 @@ void nr_generate_pdsch(processingData_L1tx_t *msgTx, }// port loop stop_meas(&gNB->dlsch_precoding_stats); - dlsch->slot_tx[slot]=0; // TODO: handle precoding // this maps the layers onto antenna ports diff --git a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c index 658bae243f..853c20ca57 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_dlsch_coding.c @@ -80,10 +80,6 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, free(harq->c); free(harq->pdu); - for (int aa = 0; aa < 64; aa++) - free(dlsch->calib_dl_ch_estimates[aa]); - free(dlsch->calib_dl_ch_estimates); - int nb_codewords = NR_MAX_NB_LAYERS > 4 ? 2 : 1; for (int q=0; qmod_symbs[q]); @@ -103,10 +99,6 @@ void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, } NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms, - unsigned char Kmimo, - unsigned char Mdlharq, - uint32_t Nsoft, - uint8_t abstraction_flag, uint16_t N_RB) { int max_layers = (frame_parms->nb_antennas_txnb_antennas_tx : NR_MAX_NB_LAYERS; @@ -122,9 +114,6 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms, NR_gNB_DLSCH_t *dlsch = malloc16(sizeof(NR_gNB_DLSCH_t)); AssertFatal(dlsch, "cannot allocate dlsch\n"); bzero(dlsch,sizeof(NR_gNB_DLSCH_t)); - dlsch->Kmimo = Kmimo; - dlsch->Mdlharq = Mdlharq; - dlsch->Nsoft = Nsoft; int txdataf_size = frame_parms->N_RB_DL*NR_SYMBOLS_PER_SLOT*NR_NB_SC_PER_RB*8; // max pdsch encoded length for each layer @@ -149,17 +138,6 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms, for (int q=0; qmod_symbs[q] = (int32_t *)malloc16(txdataf_size*max_layers*sizeof(int32_t)); - dlsch->calib_dl_ch_estimates = (int32_t **)malloc16(64*sizeof(int32_t *)); - - for (int aa=0; aa<64; aa++) { - dlsch->calib_dl_ch_estimates[aa] = (int32_t *)malloc16(OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*sizeof(int32_t)); - } - - for (int i=0; i<20; i++) { - dlsch->harq_ids[0][i] = 0; - dlsch->harq_ids[1][i] = 0; - } - NR_DL_gNB_HARQ_t *harq = &dlsch->harq_process; bzero(harq, sizeof(NR_DL_gNB_HARQ_t)); harq->b = malloc16(dlsch_bytes); @@ -190,13 +168,8 @@ NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms, void clean_gNB_dlsch(NR_gNB_DLSCH_t *dlsch) { AssertFatal(dlsch!=NULL,"dlsch is null\n"); - unsigned char Mdlharq = dlsch->Mdlharq; dlsch->rnti = 0; dlsch->active = 0; - for (int i=0; i<10; i++) { - dlsch->harq_ids[0][i] = Mdlharq; - dlsch->harq_ids[1][i] = Mdlharq; - } } void ldpc8blocks( void *p) { diff --git a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h index ec65ee4a00..6d1b2e34c0 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h +++ b/openair1/PHY/NR_TRANSPORT/nr_transport_proto.h @@ -108,10 +108,6 @@ int nr_generate_pbch(nfapi_nr_dl_tti_ssb_pdu *ssb_pdu, void nr_init_pbch_interleaver(uint8_t *interleaver); NR_gNB_DLSCH_t *new_gNB_dlsch(NR_DL_FRAME_PARMS *frame_parms, - unsigned char Kmimo, - unsigned char Mdlharq, - uint32_t Nsoft, - uint8_t abstraction_flag, uint16_t N_RB); void free_gNB_dlsch(NR_gNB_DLSCH_t **dlschptr, uint16_t N_RB, const NR_DL_FRAME_PARMS* frame_parms); diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c index c51ec29b77..76c568cf36 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_decoding.c @@ -119,42 +119,24 @@ NR_gNB_ULSCH_t *new_gNB_ulsch(uint8_t max_ldpc_iterations, uint16_t N_RB_UL) void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch) { - unsigned char i, j; + if (ulsch) { ulsch->harq_mask = 0; - ulsch->bundling = 0; - ulsch->beta_offset_cqi_times8 = 0; - ulsch->beta_offset_ri_times8 = 0; - ulsch->beta_offset_harqack_times8 = 0; - ulsch->Msg3_active = 0; - ulsch->Msg3_flag = 0; - ulsch->Msg3_subframe = 0; - ulsch->Msg3_frame = 0; ulsch->rnti = 0; ulsch->rnti_type = 0; - ulsch->cyclicShift = 0; - ulsch->cooperation_flag = 0; ulsch->max_ldpc_iterations = 0; ulsch->last_iteration_cnt = 0; - for (i=0; iharq_processes[i]){ /// Nfapi ULSCH PDU //nfapi_nr_ul_config_ulsch_pdu ulsch_pdu; ulsch->harq_processes[i]->frame=0; ulsch->harq_processes[i]->slot=0; ulsch->harq_processes[i]->round=0; - ulsch->harq_processes[i]->TPC=0; - ulsch->harq_processes[i]->mimo_mode=0; - ulsch->harq_processes[i]->dci_alloc=0; - ulsch->harq_processes[i]->rar_alloc=0; ulsch->harq_processes[i]->status=NR_SCH_IDLE; - ulsch->harq_processes[i]->subframe_scheduling_flag=0; - ulsch->harq_processes[i]->previous_first_rb=0; ulsch->harq_processes[i]->handled=0; - ulsch->harq_processes[i]->delta_TF=0; - ulsch->harq_processes[i]->TBS=0; /// Pointer to the payload (38.212 V15.4.0 section 5.1) //uint8_t *b; @@ -170,37 +152,6 @@ void clean_gNB_ulsch(NR_gNB_ULSCH_t *ulsch) /// code blocks after bit selection in rate matching for LDPC code (38.212 V15.4.0 section 5.4.2.1) //int16_t e[MAX_NUM_NR_ULSCH_SEGMENTS][3*8448]; ulsch->harq_processes[i]->E=0; - - - ulsch->harq_processes[i]->n_DMRS=0; - ulsch->harq_processes[i]->n_DMRS2=0; - ulsch->harq_processes[i]->previous_n_DMRS=0; - - - ulsch->harq_processes[i]->cqi_crc_status=0; - for (j=0;jharq_processes[i]->o[j]=0; - ulsch->harq_processes[i]->uci_format=0; - ulsch->harq_processes[i]->Or1=0; - ulsch->harq_processes[i]->Or2=0; - ulsch->harq_processes[i]->o_RI[0]=0; ulsch->harq_processes[i]->o_RI[1]=0; - ulsch->harq_processes[i]->O_RI=0; - ulsch->harq_processes[i]->o_ACK[0]=0; ulsch->harq_processes[i]->o_ACK[1]=0; - ulsch->harq_processes[i]->o_ACK[2]=0; ulsch->harq_processes[i]->o_ACK[3]=0; - ulsch->harq_processes[i]->O_ACK=0; - ulsch->harq_processes[i]->V_UL_DAI=0; - /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27) - //int8_t q[MAX_CQI_PAYLOAD]; - ulsch->harq_processes[i]->o_RCC=0; - /// coded and interleaved CQI bits - //int8_t o_w[(MAX_CQI_BITS+8)*3]; - /// coded CQI bits - //int8_t o_d[96+((MAX_CQI_BITS+8)*3)]; - for (j=0;jharq_processes[i]->q_ACK[j]=0; - for (j=0;jharq_processes[i]->q_RI[j]=0; - /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled - //uint8_t h[MAX_NUM_CHANNEL_BITS]; - /// soft bits for each received segment ("w"-sequence)(for definition see 36-212 V8.6 2009-03, p.15) - //int16_t w[MAX_NUM_NR_ULSCH_SEGMENTS][3*(6144+64)]; } } } diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index bd2c6a9c59..14eadefbaf 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -415,7 +415,7 @@ void nr_ulsch_scale_channel(int **ul_ch_estimates_ext, // Determine scaling amplitude based the symbol - ch_amp = 1024*8; //((pilots) ? (ulsch_gNB->sqrt_rho_b) : (ulsch_gNB->sqrt_rho_a)); + ch_amp = 1024*8; LOG_D(PHY,"Scaling PUSCH Chest in OFDM symbol %d by %d, pilots %d nb_rb %d NCP %d symbol %d\n", symbol, ch_amp, is_dmrs_symbol, nb_rb, frame_parms->Ncp, symbol); // printf("Scaling PUSCH Chest in OFDM symbol %d by %d\n",symbol_mod,ch_amp); diff --git a/openair1/PHY/NR_TRANSPORT/pucch_rx.c b/openair1/PHY/NR_TRANSPORT/pucch_rx.c index 7940b481de..905e03801c 100644 --- a/openair1/PHY/NR_TRANSPORT/pucch_rx.c +++ b/openair1/PHY/NR_TRANSPORT/pucch_rx.c @@ -75,13 +75,15 @@ int nr_find_pucch(uint16_t rnti, AssertFatal(gNB!=NULL,"gNB is null\n"); int index = -1; - for (int i=0; ipucch[i]!=NULL,"gNB->pucch[%d] is null\n",i); - if ((gNB->pucch[i]->active >0) && - (gNB->pucch[i]->pucch_pdu.rnti==rnti) && - (gNB->pucch[i]->frame==frame) && - (gNB->pucch[i]->slot==slot)) return(i); - else if ((gNB->pucch[i]->active == 0) && (index==-1)) index=i; + for (int i = 0; i < NUMBER_OF_NR_PUCCH_MAX; i++) { + AssertFatal(gNB->pucch[i] != NULL,"gNB->pucch[%d] is null\n",i); + if ((gNB->pucch[i]->active > 0) && + (gNB->pucch[i]->pucch_pdu.rnti == rnti) && + (gNB->pucch[i]->frame == frame) && + (gNB->pucch[i]->slot == slot)) + return(i); + else if ((gNB->pucch[i]->active == 0) && (index == -1)) + index=i; } if (index==-1) @@ -97,15 +99,16 @@ void nr_fill_pucch(PHY_VARS_gNB *gNB, if (NFAPI_MODE == NFAPI_MODE_PNF) gNB->pucch[0]->active = 0; //check if ture in monolithic mode int id = nr_find_pucch(pucch_pdu->rnti,frame,slot,gNB); - AssertFatal( (id>=0) && (id= 0) && (id < NUMBER_OF_NR_PUCCH_MAX), "invalid id found for pucch !!! rnti %04x id %d\n",pucch_pdu->rnti,id); NR_gNB_PUCCH_t *pucch = gNB->pucch[id]; pucch->frame = frame; pucch->slot = slot; pucch->active = 1; - if (pucch->pucch_pdu.format_type > 0) LOG_D(PHY,"Programming PUCCH[%d] for %d.%d, format %d, nb_harq %d, nb_sr %d, nb_csi %d\n",id, - pucch->frame,pucch->slot,pucch->pucch_pdu.format_type,pucch->pucch_pdu.bit_len_harq,pucch->pucch_pdu.sr_flag,pucch->pucch_pdu.bit_len_csi_part1); + if (pucch->pucch_pdu.format_type > 0) + LOG_D(PHY,"Programming PUCCH[%d] for %d.%d, format %d, nb_harq %d, nb_sr %d, nb_csi %d\n",id, + pucch->frame,pucch->slot,pucch->pucch_pdu.format_type,pucch->pucch_pdu.bit_len_harq,pucch->pucch_pdu.sr_flag,pucch->pucch_pdu.bit_len_csi_part1); memcpy((void*)&pucch->pucch_pdu, (void*)pucch_pdu, sizeof(nfapi_nr_pucch_pdu_t)); } diff --git a/openair1/PHY/defs_gNB.h b/openair1/PHY/defs_gNB.h index fca93b29c7..04ece4f0d9 100644 --- a/openair1/PHY/defs_gNB.h +++ b/openair1/PHY/defs_gNB.h @@ -95,8 +95,6 @@ typedef struct { uint32_t frame; /// Subframe where current HARQ round was sent uint32_t subframe; - /// MIMO mode for this DLSCH - MIMO_mode_t mimo_mode; /// Interleaver outputs uint8_t *f; /// LDPC lifting size @@ -165,38 +163,14 @@ typedef struct { int32_t **mod_symbs; /// beamforming weights for UE-spec transmission (antenna ports 5 or 7..14), for each codeword, maximum 4 layers? int32_t ***ue_spec_bf_weights; - /// dl channel estimates (estimated from ul channel estimates) - int32_t **calib_dl_ch_estimates; /// Allocated RNTI (0 means DLSCH_t is not currently used) uint16_t rnti; /// Active flag for baseband transmitter processing uint8_t active; /// HARQ process mask, indicates which processes are currently active uint16_t harq_mask; - /// Indicator of TX activation per subframe. Used during PUCCH detection for ACK/NAK. - uint8_t slot_tx[80]; - /// First CCE of last PDSCH scheduling per subframe. Again used during PUCCH detection for ACK/NAK. - uint8_t nCCE[10]; - /// Process ID's per subframe. Used to associate received ACKs on PUSCH/PUCCH to DLSCH harq process ids - uint8_t harq_ids[2][80]; - /// Window size (in outgoing transport blocks) for fine-grain rate adaptation - uint8_t ra_window_size; - /// First-round error threshold for fine-grain rate adaptation - uint8_t error_threshold; /// Number of soft channel bits uint32_t G; - /// Codebook index for this dlsch (0,1,2,3) - uint8_t codebook_index; - /// Maximum number of HARQ processes - uint8_t Mdlharq; - /// MIMO transmission mode indicator for this sub-frame - uint8_t Kmimo; - /// Nsoft parameter related to UE Category - uint32_t Nsoft; - /// amplitude of PDSCH (compared to RS) in symbols without pilots - int16_t sqrt_rho_a; - /// amplitude of PDSCH (compared to RS) in symbols containing pilots - int16_t sqrt_rho_b; } NR_gNB_DLSCH_t; typedef struct { @@ -240,35 +214,11 @@ typedef struct { /// Index of current HARQ round for this DLSCH uint8_t round; bool new_rx; - /// Last TPC command - uint8_t TPC; - /// MIMO mode for this DLSCH - MIMO_mode_t mimo_mode; - /// Flag indicating that this ULSCH has been allocated by a DCI (otherwise it is a retransmission based on PHICH NAK) - uint8_t dci_alloc; - /// Flag indicating that this ULSCH has been allocated by a RAR (otherwise it is a retransmission based on PHICH NAK or DCI) - uint8_t rar_alloc; /// Status Flag indicating for this ULSCH (idle,active,disabled) NR_SCH_status_t status; - /// Subframe scheduling indicator (i.e. Transmission opportunity indicator) - uint8_t subframe_scheduling_flag; - /// Subframe cba scheduling indicator (i.e. CBA Transmission opportunity indicator) - uint8_t subframe_cba_scheduling_flag; - /// PHICH active flag - uint8_t phich_active; - /// PHICH ACK - uint8_t phich_ACK; - /// First Allocated RB - previous scheduling. This is needed for PHICH generation which is done after a new scheduling - uint16_t previous_first_rb; /// Flag to indicate that the UL configuration has been handled. Used to remove a stale ULSCH when frame wraps around uint8_t handled; - /// Flag to indicate that this ULSCH is for calibration information sent from UE (i.e. no MAC SDU to pass up) - // int calibration_flag; - /// delta_TF for power control - int32_t delta_TF; - - - /////////////////////// ulsch decoding /////////////////////// + /////////////////////// ulsch decoding /////////////////////// /// Transport block size (This is A from 38.212 V15.4.0 section 5.1) uint32_t TBS; /// Pointer to the payload (38.212 V15.4.0 section 5.1) @@ -291,56 +241,6 @@ typedef struct { uint32_t E; /// Number of segments processed so far uint32_t processedSegments; - ////////////////////////////////////////////////////////////// - - - /////////////////////////// DMRS ///////////////////////////// - /// n_DMRS for cyclic shift of DMRS (36.213 Table 9.1.2-2) - uint8_t n_DMRS; - /// n_DMRS 2 for cyclic shift of DMRS (36.211 Table 5.5.1.1.-1) - uint8_t n_DMRS2; - /// n_DMRS for cyclic shift of DMRS (36.213 Table 9.1.2-2) - previous scheduling - /// This is needed for PHICH generation which - /// is done after a new scheduling - uint8_t previous_n_DMRS; - ////////////////////////////////////////////////////////////// - - - ///////////////////// UCI multiplexing /////////////////////// - /// CQI CRC status - uint8_t cqi_crc_status; - /// Pointer to CQI data - uint8_t o[MAX_CQI_BYTES]; - /// Format of CQI data - UCI_format_t uci_format; - /// Length of CQI data under RI=1 assumption(bits) - uint8_t Or1; - /// Length of CQI data under RI=2 assumption(bits) - uint8_t Or2; - /// Rank information - uint8_t o_RI[2]; - /// Length of rank information (bits) - uint8_t O_RI; - /// Pointer to ACK - uint8_t o_ACK[4]; - /// Length of ACK information (bits) - uint8_t O_ACK; - /// The value of DAI in DCI format 0 - uint8_t V_UL_DAI; - /// "q" sequences for CQI/PMI (for definition see 36-212 V8.6 2009-03, p.27) - int8_t q[MAX_CQI_PAYLOAD]; - /// number of coded CQI bits after interleaving - uint8_t o_RCC; - /// coded and interleaved CQI bits - int8_t o_w[(MAX_CQI_BITS+8)*3]; - /// coded CQI bits - int8_t o_d[96+((MAX_CQI_BITS+8)*3)]; - /// coded ACK bits - int16_t q_ACK[MAX_ACK_PAYLOAD]; - /// coded RI bits - int16_t q_RI[MAX_RI_PAYLOAD]; - /// Temporary h sequence to flag PUSCH_x/PUSCH_y symbols which are not scrambled - uint8_t h[MAX_NUM_CHANNEL_BITS]; /// Last index of LLR buffer that contains information. /// Used for computing LDPC decoder R int llrLen; @@ -353,30 +253,10 @@ typedef struct { NR_UL_gNB_HARQ_t *harq_processes[NR_MAX_ULSCH_HARQ_PROCESSES]; /// HARQ process mask, indicates which processes are currently active uint16_t harq_mask; - /// ACK/NAK Bundling flag - uint8_t bundling; - /// beta_offset_cqi times 8 - uint16_t beta_offset_cqi_times8; - /// beta_offset_ri times 8 - uint16_t beta_offset_ri_times8; - /// beta_offset_harqack times 8 - uint16_t beta_offset_harqack_times8; - /// Flag to indicate that gNB awaits UE Msg3 - uint8_t Msg3_active; - /// Flag to indicate that gNB should decode UE Msg3 - uint8_t Msg3_flag; - /// Subframe for Msg3 - uint8_t Msg3_subframe; - /// Frame for Msg3 - uint32_t Msg3_frame; /// Allocated RNTI for this ULSCH uint16_t rnti; /// RNTI type uint8_t rnti_type; - /// cyclic shift for DM RS - uint8_t cyclicShift; - /// for cooperative communication - uint8_t cooperation_flag; /// Maximum number of LDPC iterations uint8_t max_ldpc_iterations; /// number of iterations used in last LDPC decoding @@ -734,13 +614,9 @@ typedef struct PHY_VARS_gNB_s { /// NFAPI PRACH information nfapi_nr_prach_indication_preamble_t preamble_list[MAX_NUM_NR_RX_PRACH_PREAMBLES]; - //Sched_Rsp_t Sched_INFO; nfapi_nr_ul_tti_request_t UL_tti_req; nfapi_nr_uci_indication_t uci_indication; - // nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu; - // nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu; - uint16_t num_pdsch_rnti[80]; NR_gNB_PBCH pbch; NR_gNB_COMMON common_vars; NR_gNB_PRACH prach_vars; @@ -752,8 +628,6 @@ typedef struct PHY_VARS_gNB_s { NR_gNB_UL_PDCCH_t ul_pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX]; NR_gNB_DLSCH_t *dlsch[NUMBER_OF_NR_DLSCH_MAX][2]; // Nusers times two spatial streams NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX]; // [Nusers times] - NR_gNB_DLSCH_t *dlsch_SI,*dlsch_ra,*dlsch_p; - NR_gNB_DLSCH_t *dlsch_PCH; /// statistics for DLSCH measurement collection NR_gNB_SCH_STATS_t dlsch_stats[NUMBER_OF_NR_SCH_STATS_MAX]; /// statistics for ULSCH measurement collection @@ -767,9 +641,6 @@ typedef struct PHY_VARS_gNB_s { /// CSI variables nr_csi_info_t *nr_csi_info; - uint8_t pbch_configured; - char gNB_generate_rar; - // PUCCH0 Look-up table for cyclic-shifts NR_gNB_PUCCH0_LUT_t pucch0_lut; @@ -801,43 +672,20 @@ typedef struct PHY_VARS_gNB_s { /// PRS sequence uint32_t ****nr_gold_prs; - /// Indicator set to 0 after first SR - uint8_t first_sr[NUMBER_OF_NR_SR_MAX]; - /// PRACH root sequence uint32_t X_u[64][839]; - uint32_t max_peak_val; - /// OFDM symbol offset divisor for UL uint32_t ofdm_offset_divisor; - /// \brief sinr for all subcarriers of the current link (used only for abstraction). - /// first index: ? [0..N_RB_DL*12[ - double *sinr_dB; - /// N0 (used for abstraction) - double N0; - - unsigned char first_run_I0_measurements; int ldpc_offload_flag; - unsigned char is_secondary_gNB; // primary by default - unsigned char is_init_sync; /// Flag to tell if initial synchronization is performed. This affects how often the secondary eNB will listen to the PSS from the primary system. - unsigned char has_valid_precoder; /// Flag to tell if secondary eNB has channel estimates to create NULL-beams from, and this B/F vector is created. - unsigned char PgNB_id; /// id of Primary eNB - - /// hold the precoder for NULL beam to the primary user - int **dl_precoder_SgNB[3]; - char log2_maxp; /// holds the maximum channel/precoder coefficient - int max_ldpc_iterations; /// indicate the channel estimation technique in time domain int chest_time; /// indicate the channel estimation technique in freq domain int chest_freq; - /// if ==0 enables phy only test mode - int mac_enabled; /// counter to average prach energh over first 100 prach opportunities int prach_energy_counter; @@ -909,7 +757,7 @@ typedef struct PHY_VARS_gNB_s { int nbDecode; int number_of_nr_dlsch_max; int number_of_nr_ulsch_max; - void * scopeData; + void *scopeData; /// structure for analyzing high-level RT measurements rt_L1_profiling_t rt_L1_profiling; } PHY_VARS_gNB; diff --git a/openair1/SIMULATION/NR_PHY/dlsim.c b/openair1/SIMULATION/NR_PHY/dlsim.c index 68f63d9512..dd0c207920 100644 --- a/openair1/SIMULATION/NR_PHY/dlsim.c +++ b/openair1/SIMULATION/NR_PHY/dlsim.c @@ -1003,7 +1003,6 @@ int main(int argc, char **argv) // generate signal AssertFatal(input_fd==NULL,"Not ready for input signal file\n"); - gNB->pbch_configured = 1; //Configure UE rrc.carrier.MIB = (uint8_t*) malloc(4); diff --git a/openair1/SIMULATION/NR_PHY/pbchsim.c b/openair1/SIMULATION/NR_PHY/pbchsim.c index d8514dee51..1985e70e26 100644 --- a/openair1/SIMULATION/NR_PHY/pbchsim.c +++ b/openair1/SIMULATION/NR_PHY/pbchsim.c @@ -137,7 +137,6 @@ void nr_phy_config_request_sim_pbchsim(PHY_VARS_gNB *gNB, gNB_config->tdd_table.tdd_period.value = 0; //gNB_config->subframe_config.dl_cyclic_prefix_type.value = (fp->Ncp == NORMAL) ? NFAPI_CP_NORMAL : NFAPI_CP_EXTENDED; - gNB->mac_enabled = 1; fp->dl_CarrierFreq = 3600000000;//from_nrarfcn(gNB_config->nfapi_config.rf_bands.rf_band[0],gNB_config->nfapi_config.nrarfcn.value); fp->ul_CarrierFreq = 3600000000;//fp->dl_CarrierFreq - (get_uldl_offset(gNB_config->nfapi_config.rf_bands.rf_band[0])*100000); if (mu>2) fp->nr_band = 257;