added PDCCH lists to L1 processing to remove race condition between FAPI and L1 threads
This commit is contained in:
@@ -506,6 +506,13 @@ void init_nr_transport(PHY_VARS_gNB *gNB) {
|
|||||||
LOG_I(PHY, "Initialise nr transport\n");
|
LOG_I(PHY, "Initialise nr transport\n");
|
||||||
uint16_t grid_size = cfg->carrier_config.dl_grid_size[fp->numerology_index].value;
|
uint16_t grid_size = cfg->carrier_config.dl_grid_size[fp->numerology_index].value;
|
||||||
|
|
||||||
|
for (i=0; i <NUMBER_OF_NR_PDCCH_MAX; i++) {
|
||||||
|
LOG_I(PHY,"Initializing PDCCH list for PDCCH %d/%d\n",i,NUMBER_OF_NR_PDCCH_MAX);
|
||||||
|
gNB->pdcch_pdu[i].frame=-1;
|
||||||
|
LOG_I(PHY,"Initializing UL PDCCH list for UL PDCCH %d/%d\n",i,NUMBER_OF_NR_PDCCH_MAX);
|
||||||
|
gNB->ul_pdcch_pdu[i].frame=-1;
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0; i<NUMBER_OF_NR_PUCCH_MAX; i++) {
|
for (i=0; i<NUMBER_OF_NR_PUCCH_MAX; i++) {
|
||||||
LOG_I(PHY,"Allocating Transport Channel Buffers for PUCCH %d/%d\n",i,NUMBER_OF_NR_PUCCH_MAX);
|
LOG_I(PHY,"Allocating Transport Channel Buffers for PUCCH %d/%d\n",i,NUMBER_OF_NR_PUCCH_MAX);
|
||||||
gNB->pucch[i] = new_gNB_pucch();
|
gNB->pucch[i] = new_gNB_pucch();
|
||||||
|
|||||||
@@ -154,8 +154,10 @@ void nr_pdcch_scrambling(uint32_t *in,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
|
||||||
nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu,
|
uint8_t nr_generate_dci_top(PHY_VARS_gNB *gNB,
|
||||||
|
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
||||||
|
nfapi_nr_dl_tti_pdcch_pdu *ul_dci_pdu,
|
||||||
uint32_t **gold_pdcch_dmrs,
|
uint32_t **gold_pdcch_dmrs,
|
||||||
int32_t *txdataF,
|
int32_t *txdataF,
|
||||||
int16_t amp,
|
int16_t amp,
|
||||||
@@ -180,15 +182,17 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
|||||||
|
|
||||||
|
|
||||||
if (pdcch_pdu) pdcch_pdu_rel15 = &pdcch_pdu->pdcch_pdu_rel15;
|
if (pdcch_pdu) pdcch_pdu_rel15 = &pdcch_pdu->pdcch_pdu_rel15;
|
||||||
else if (ul_dci_pdu) pdcch_pdu_rel15 = &ul_dci_pdu->pdcch_pdu.pdcch_pdu_rel15;
|
else if (ul_dci_pdu) pdcch_pdu_rel15 = &ul_dci_pdu->pdcch_pdu_rel15;
|
||||||
|
|
||||||
|
nr_fill_cce_list(gNB,0,pdcch_pdu_rel15);
|
||||||
|
|
||||||
get_coreset_rballoc(pdcch_pdu_rel15->FreqDomainResource,&n_rb,&rb_offset);
|
get_coreset_rballoc(pdcch_pdu_rel15->FreqDomainResource,&n_rb,&rb_offset);
|
||||||
|
|
||||||
// compute rb_offset and n_prb based on frequency allocation
|
// compute rb_offset and n_prb based on frequency allocation
|
||||||
|
|
||||||
if (pdcch_pdu_rel15->CoreSetType == NFAPI_NR_CSET_CONFIG_MIB_SIB1) {
|
if (pdcch_pdu_rel15->CoreSetType == NFAPI_NR_CSET_CONFIG_MIB_SIB1) {
|
||||||
cset_start_sc = frame_parms.first_carrier_offset + (frame_parms.ssb_start_subcarrier/NR_NB_SC_PER_RB +
|
cset_start_sc = frame_parms.first_carrier_offset +
|
||||||
rb_offset)*NR_NB_SC_PER_RB;
|
(frame_parms.ssb_start_subcarrier/NR_NB_SC_PER_RB + rb_offset)*NR_NB_SC_PER_RB;
|
||||||
} else
|
} else
|
||||||
cset_start_sc = frame_parms.first_carrier_offset + rb_offset*NR_NB_SC_PER_RB;
|
cset_start_sc = frame_parms.first_carrier_offset + rb_offset*NR_NB_SC_PER_RB;
|
||||||
|
|
||||||
@@ -324,6 +328,7 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
|||||||
k -= frame_parms.ofdm_symbol_size;
|
k -= frame_parms.ofdm_symbol_size;
|
||||||
} // m
|
} // m
|
||||||
} // reg_idx
|
} // reg_idx
|
||||||
|
|
||||||
} // for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++)
|
} // for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ uint16_t nr_get_dci_size(nfapi_nr_dci_format_e format,
|
|||||||
nfapi_nr_rnti_type_e rnti_type,
|
nfapi_nr_rnti_type_e rnti_type,
|
||||||
uint16_t N_RB);
|
uint16_t N_RB);
|
||||||
|
|
||||||
uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
uint8_t nr_generate_dci_top(PHY_VARS_gNB *gNB,
|
||||||
nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu,
|
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
|
||||||
uint32_t **gold_pdcch_dmrs,
|
nfapi_nr_dl_tti_pdcch_pdu *ul_pdcch_pdu,
|
||||||
|
uint32_t **gold_pdcch_dmrs,
|
||||||
int32_t *txdataF,
|
int32_t *txdataF,
|
||||||
int16_t amp,
|
int16_t amp,
|
||||||
NR_DL_FRAME_PARMS frame_parms);
|
NR_DL_FRAME_PARMS frame_parms);
|
||||||
@@ -42,15 +43,21 @@ void nr_pdcch_scrambling(uint32_t *in,
|
|||||||
uint32_t n_RNTI,
|
uint32_t n_RNTI,
|
||||||
uint32_t *out);
|
uint32_t *out);
|
||||||
|
|
||||||
|
int16_t find_nr_pdcch(int frame,int slot, PHY_VARS_gNB *gNB,find_type_t type);
|
||||||
|
|
||||||
void nr_fill_dci(PHY_VARS_gNB *gNB,
|
void nr_fill_dci(PHY_VARS_gNB *gNB,
|
||||||
int frame,
|
int frame,
|
||||||
int slot);
|
int slot,
|
||||||
|
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu);
|
||||||
|
|
||||||
|
int16_t find_nr_ul_dci(int frame,int slot, PHY_VARS_gNB *gNB,find_type_t type);
|
||||||
|
|
||||||
void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
|
void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
|
||||||
int frame,
|
int frame,
|
||||||
int slot);
|
int slot,
|
||||||
|
nfapi_nr_ul_dci_request_pdus_t *pdcch_pdu);
|
||||||
|
|
||||||
void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m);
|
void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m,nfapi_nr_dl_tti_pdcch_pdu_rel15_t *);
|
||||||
|
|
||||||
void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset);
|
void get_coreset_rballoc(uint8_t *FreqDomainResource,int *n_rb,int *rb_offset);
|
||||||
|
|
||||||
|
|||||||
@@ -118,15 +118,11 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint16_t n_shift, uint8_t m) {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
|
void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m, nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15) {
|
||||||
|
|
||||||
nr_cce_t* cce;
|
nr_cce_t* cce;
|
||||||
nr_reg_t* reg;
|
nr_reg_t* reg;
|
||||||
nfapi_nr_dl_tti_pdcch_pdu_rel15_t* pdcch_pdu_rel15;
|
|
||||||
if (gNB->pdcch_pdu != NULL)
|
|
||||||
pdcch_pdu_rel15 = &gNB->pdcch_pdu->pdcch_pdu_rel15;
|
|
||||||
else
|
|
||||||
pdcch_pdu_rel15 = &gNB->ul_dci_pdu->pdcch_pdu.pdcch_pdu_rel15;
|
|
||||||
int bsize = pdcch_pdu_rel15->RegBundleSize;
|
int bsize = pdcch_pdu_rel15->RegBundleSize;
|
||||||
int R = pdcch_pdu_rel15->InterleaverSize;
|
int R = pdcch_pdu_rel15->InterleaverSize;
|
||||||
int n_shift = pdcch_pdu_rel15->ShiftIndex;
|
int n_shift = pdcch_pdu_rel15->ShiftIndex;
|
||||||
@@ -143,6 +139,8 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
|
|||||||
int N_reg = n_rb * pdcch_pdu_rel15->DurationSymbols;
|
int N_reg = n_rb * pdcch_pdu_rel15->DurationSymbols;
|
||||||
int C=-1;
|
int C=-1;
|
||||||
|
|
||||||
|
AssertFatal(N_reg > 0,"N_reg cannot be 0\n");
|
||||||
|
|
||||||
for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++) {
|
for (int d=0;d<pdcch_pdu_rel15->numDlDci;d++) {
|
||||||
int L = pdcch_pdu_rel15->dci_pdu.AggregationLevel[d];
|
int L = pdcch_pdu_rel15->dci_pdu.AggregationLevel[d];
|
||||||
|
|
||||||
@@ -204,14 +202,38 @@ void nr_fill_cce_list(PHY_VARS_gNB *gNB, uint8_t m) {
|
|||||||
ret |= ((field>>i)&1)<<(size-i-1);
|
ret |= ((field>>i)&1)<<(size-i-1);
|
||||||
return ret;
|
return ret;
|
||||||
}*/
|
}*/
|
||||||
|
int16_t find_nr_pdcch(int frame,int slot, PHY_VARS_gNB *gNB,find_type_t type) {
|
||||||
|
|
||||||
|
uint16_t i;
|
||||||
|
int16_t first_free_index=-1;
|
||||||
|
|
||||||
|
AssertFatal(gNB!=NULL,"gNB is null\n");
|
||||||
|
for (i=0; i<NUMBER_OF_NR_PDCCH_MAX; i++) {
|
||||||
|
LOG_D(PHY,"searching for frame.slot %d.%d : pdcch_index %d frame.slot %d.%d, first_free_index %d\n", frame,slot,i,gNB->pdcch_pdu[i].frame,gNB->pdcch_pdu[i].slot,first_free_index);
|
||||||
|
if ((gNB->pdcch_pdu[i].frame == frame) &&
|
||||||
|
(gNB->pdcch_pdu[i].slot==slot)) return i;
|
||||||
|
else if ( gNB->pdcch_pdu[i].frame==-1 && first_free_index==-1) first_free_index=i;
|
||||||
|
}
|
||||||
|
if (type == SEARCH_EXIST) return -1;
|
||||||
|
|
||||||
|
return first_free_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void nr_fill_dci(PHY_VARS_gNB *gNB,
|
void nr_fill_dci(PHY_VARS_gNB *gNB,
|
||||||
int frame,
|
int frame,
|
||||||
int slot) {
|
int slot,
|
||||||
|
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu) {
|
||||||
|
|
||||||
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &gNB->pdcch_pdu->pdcch_pdu_rel15;
|
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &pdcch_pdu->pdcch_pdu_rel15;
|
||||||
NR_gNB_DLSCH_t *dlsch;
|
NR_gNB_DLSCH_t *dlsch;
|
||||||
|
|
||||||
|
int pdcch_id = find_nr_pdcch(frame,slot,gNB,SEARCH_EXIST_OR_FREE);
|
||||||
|
AssertFatal(pdcch_id>=0 && pdcch_id<NUMBER_OF_NR_PDCCH_MAX,"Cannot find space for PDCCH, exiting\n");
|
||||||
|
memcpy((void*)&gNB->pdcch_pdu[pdcch_id].pdcch_pdu,(void*)pdcch_pdu,sizeof(*pdcch_pdu));
|
||||||
|
gNB->pdcch_pdu[pdcch_id].frame = frame;
|
||||||
|
gNB->pdcch_pdu[pdcch_id].slot = slot;
|
||||||
|
|
||||||
for (int i=0;i<pdcch_pdu_rel15->numDlDci;i++) {
|
for (int i=0;i<pdcch_pdu_rel15->numDlDci;i++) {
|
||||||
|
|
||||||
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
|
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
|
||||||
@@ -234,7 +256,7 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
|
|||||||
dlsch->harq_mask |= (1<<harq_pid);
|
dlsch->harq_mask |= (1<<harq_pid);
|
||||||
dlsch->rnti = pdcch_pdu_rel15->dci_pdu.RNTI[i];
|
dlsch->rnti = pdcch_pdu_rel15->dci_pdu.RNTI[i];
|
||||||
|
|
||||||
nr_fill_cce_list(gNB,0);
|
// nr_fill_cce_list(gNB,0);
|
||||||
/*
|
/*
|
||||||
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
|
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
|
||||||
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
|
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
|
||||||
@@ -243,19 +265,45 @@ void nr_fill_dci(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int16_t find_nr_ul_dci(int frame,int slot, PHY_VARS_gNB *gNB,find_type_t type) {
|
||||||
|
|
||||||
|
uint16_t i;
|
||||||
|
int16_t first_free_index=-1;
|
||||||
|
|
||||||
|
AssertFatal(gNB!=NULL,"gNB is null\n");
|
||||||
|
for (i=0; i<NUMBER_OF_NR_PDCCH_MAX; i++) {
|
||||||
|
LOG_D(PHY,"searching for frame.slot %d.%d : ul_pdcch_index %d frame.slot %d.%d, first_free_index %d\n", frame,slot,i,gNB->ul_pdcch_pdu[i].frame,gNB->ul_pdcch_pdu[i].slot,first_free_index);
|
||||||
|
if ((gNB->ul_pdcch_pdu[i].frame == frame) &&
|
||||||
|
(gNB->ul_pdcch_pdu[i].slot==slot)) return i;
|
||||||
|
else if (gNB->ul_pdcch_pdu[i].frame==-1 && first_free_index==-1) first_free_index=i;
|
||||||
|
}
|
||||||
|
if (type == SEARCH_EXIST) return -1;
|
||||||
|
|
||||||
|
return first_free_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
|
void nr_fill_ul_dci(PHY_VARS_gNB *gNB,
|
||||||
int frame,
|
int frame,
|
||||||
int slot) {
|
int slot,
|
||||||
|
nfapi_nr_ul_dci_request_pdus_t *pdcch_pdu) {
|
||||||
|
|
||||||
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &gNB->ul_dci_pdu->pdcch_pdu.pdcch_pdu_rel15;
|
nfapi_nr_dl_tti_pdcch_pdu_rel15_t *pdcch_pdu_rel15 = &pdcch_pdu->pdcch_pdu.pdcch_pdu_rel15;
|
||||||
|
|
||||||
|
int pdcch_id = find_nr_ul_dci(frame,slot,gNB,SEARCH_EXIST_OR_FREE);
|
||||||
|
AssertFatal(pdcch_id>=0 && pdcch_id<NUMBER_OF_NR_PDCCH_MAX,"Cannot find space for UL PDCCH, exiting\n");
|
||||||
|
memcpy((void*)&gNB->ul_pdcch_pdu[pdcch_id].pdcch_pdu,(void*)pdcch_pdu,sizeof(*pdcch_pdu));
|
||||||
|
gNB->ul_pdcch_pdu[pdcch_id].frame = frame;
|
||||||
|
gNB->ul_pdcch_pdu[pdcch_id].slot = slot;
|
||||||
|
|
||||||
for (int i=0;i<pdcch_pdu_rel15->numDlDci;i++) {
|
for (int i=0;i<pdcch_pdu_rel15->numDlDci;i++) {
|
||||||
|
|
||||||
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
|
//uint64_t *dci_pdu = (uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[i];
|
||||||
|
|
||||||
// if there's no DL DCI then generate CCE list
|
// if there's no DL DCI then generate CCE list
|
||||||
nr_fill_cce_list(gNB,0);
|
// nr_fill_cce_list(gNB,0);
|
||||||
/*
|
/*
|
||||||
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
|
LOG_D(PHY, "DCI PDU: [0]->0x%lx \t [1]->0x%lx \n",dci_pdu[0], dci_pdu[1]);
|
||||||
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
|
LOG_D(PHY, "DCI type %d payload (size %d) generated on candidate %d\n", dci_alloc->pdcch_params.dci_format, dci_alloc->size, cand_idx);
|
||||||
|
|||||||
+15
-2
@@ -112,6 +112,17 @@ typedef struct {
|
|||||||
uint32_t F;
|
uint32_t F;
|
||||||
} NR_DL_gNB_HARQ_t;
|
} NR_DL_gNB_HARQ_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int frame;
|
||||||
|
int slot;
|
||||||
|
nfapi_nr_dl_tti_pdcch_pdu pdcch_pdu;
|
||||||
|
} NR_gNB_PDCCH_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int frame;
|
||||||
|
int slot;
|
||||||
|
nfapi_nr_ul_dci_request_pdus_t pdcch_pdu;
|
||||||
|
} NR_gNB_UL_PDCCH_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/// Pointers to 16 HARQ processes for the DLSCH
|
/// Pointers to 16 HARQ processes for the DLSCH
|
||||||
@@ -676,8 +687,8 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
nfapi_nr_ul_tti_request_t UL_tti_req;
|
nfapi_nr_ul_tti_request_t UL_tti_req;
|
||||||
nfapi_nr_uci_indication_t uci_indication;
|
nfapi_nr_uci_indication_t uci_indication;
|
||||||
|
|
||||||
nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu;
|
// nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu;
|
||||||
nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu;
|
// nfapi_nr_ul_dci_request_pdus_t *ul_dci_pdu;
|
||||||
nfapi_nr_dl_tti_ssb_pdu ssb_pdu;
|
nfapi_nr_dl_tti_ssb_pdu ssb_pdu;
|
||||||
|
|
||||||
int num_pdsch_rnti;
|
int num_pdsch_rnti;
|
||||||
@@ -687,6 +698,8 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
NR_gNB_PRACH prach_vars;
|
NR_gNB_PRACH prach_vars;
|
||||||
NR_gNB_PUSCH *pusch_vars[NUMBER_OF_NR_ULSCH_MAX];
|
NR_gNB_PUSCH *pusch_vars[NUMBER_OF_NR_ULSCH_MAX];
|
||||||
NR_gNB_PUCCH_t *pucch[NUMBER_OF_NR_PUCCH_MAX];
|
NR_gNB_PUCCH_t *pucch[NUMBER_OF_NR_PUCCH_MAX];
|
||||||
|
NR_gNB_PDCCH_t pdcch_pdu[NUMBER_OF_NR_PDCCH_MAX];
|
||||||
|
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_DLSCH_t *dlsch[NUMBER_OF_NR_DLSCH_MAX][2]; // Nusers times two spatial streams
|
||||||
NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX][2]; // [Nusers times][2 codewords]
|
NR_gNB_ULSCH_t *ulsch[NUMBER_OF_NR_ULSCH_MAX][2]; // [Nusers times][2 codewords]
|
||||||
NR_gNB_DLSCH_t *dlsch_SI,*dlsch_ra,*dlsch_p;
|
NR_gNB_DLSCH_t *dlsch_SI,*dlsch_ra,*dlsch_p;
|
||||||
|
|||||||
@@ -94,9 +94,9 @@ void handle_nfapi_nr_pdcch_pdu(PHY_VARS_gNB *gNB,
|
|||||||
LOG_D(PHY,"Frame %d, Slot %d: DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d\n",frame,slot, slot, pdcch_pdu->pdcch_pdu_rel15.numDlDci);
|
LOG_D(PHY,"Frame %d, Slot %d: DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d\n",frame,slot, slot, pdcch_pdu->pdcch_pdu_rel15.numDlDci);
|
||||||
|
|
||||||
// copy dci configuration into gNB structure
|
// copy dci configuration into gNB structure
|
||||||
gNB->pdcch_pdu = pdcch_pdu;
|
// gNB->pdcch_pdu = pdcch_pdu;
|
||||||
|
|
||||||
nr_fill_dci(gNB,frame,slot);
|
nr_fill_dci(gNB,frame,slot,pdcch_pdu);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -109,9 +109,9 @@ void handle_nfapi_nr_ul_dci_pdu(PHY_VARS_gNB *gNB,
|
|||||||
LOG_D(PHY,"Frame %d, Slot %d: UL DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d\n",frame,slot, slot, ul_dci_request_pdu->pdcch_pdu.pdcch_pdu_rel15.numDlDci);
|
LOG_D(PHY,"Frame %d, Slot %d: UL DCI processing - proc:slot_tx:%d pdcch_pdu_rel15->numDlDci:%d\n",frame,slot, slot, ul_dci_request_pdu->pdcch_pdu.pdcch_pdu_rel15.numDlDci);
|
||||||
|
|
||||||
// copy dci configuration into gNB structure
|
// copy dci configuration into gNB structure
|
||||||
gNB->ul_dci_pdu = ul_dci_request_pdu;
|
// gNB->ul_dci_pdu = ul_dci_request_pdu;
|
||||||
|
|
||||||
nr_fill_ul_dci(gNB,frame,slot);
|
nr_fill_ul_dci(gNB,frame,slot,ul_dci_request_pdu);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +159,6 @@ void nr_schedule_response(NR_Sched_Rsp_t *Sched_INFO){
|
|||||||
gNB->dlsch[i][0]->rnti=0;
|
gNB->dlsch[i][0]->rnti=0;
|
||||||
gNB->dlsch[i][0]->harq_mask=0;
|
gNB->dlsch[i][0]->harq_mask=0;
|
||||||
}
|
}
|
||||||
gNB->pdcch_pdu = NULL;
|
|
||||||
gNB->ul_dci_pdu = NULL;
|
|
||||||
gNB->pbch_configured=0;
|
gNB->pbch_configured=0;
|
||||||
|
|
||||||
for (int i=0;i<number_dl_pdu;i++) {
|
for (int i=0;i<number_dl_pdu;i++) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
#include "PHY/NR_TRANSPORT/nr_transport_proto.h"
|
||||||
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
#include "PHY/NR_TRANSPORT/nr_dlsch.h"
|
||||||
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
|
#include "PHY/NR_TRANSPORT/nr_ulsch.h"
|
||||||
|
#include "PHY/NR_TRANSPORT/nr_dci.h"
|
||||||
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
|
#include "PHY/NR_ESTIMATION/nr_ul_estimation.h"
|
||||||
#include "PHY/NR_UE_TRANSPORT/pucch_nr.h"
|
#include "PHY/NR_UE_TRANSPORT/pucch_nr.h"
|
||||||
#include "SCHED/sched_eNB.h"
|
#include "SCHED/sched_eNB.h"
|
||||||
@@ -160,22 +161,34 @@ void phy_procedures_gNB_TX(PHY_VARS_gNB *gNB,
|
|||||||
}
|
}
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_gNB_COMMON_TX,0);
|
||||||
|
|
||||||
|
int pdcch_pdu_id=find_nr_pdcch(frame,slot,gNB,SEARCH_EXIST);
|
||||||
|
int ul_pdcch_pdu_id=find_nr_ul_dci(frame,slot,gNB,SEARCH_EXIST);
|
||||||
|
|
||||||
if (gNB->pdcch_pdu || gNB->ul_dci_pdu) {
|
LOG_D(PHY,"[gNB %d] Frame %d slot %d, pdcch_pdu_id %d, ul_pdcch_pdu_id %d\n",
|
||||||
LOG_I(PHY, "[gNB %d] Frame %d slot %d Calling nr_generate_dci_top (number of UL/DL DCI %d/%d)\n",
|
gNB->Mod_id,frame,slot,pdcch_pdu_id,ul_pdcch_pdu_id);
|
||||||
|
|
||||||
|
if (pdcch_pdu_id >= 0 || ul_pdcch_pdu_id >= 0) {
|
||||||
|
LOG_D(PHY, "[gNB %d] Frame %d slot %d Calling nr_generate_dci_top (number of UL/DL DCI %d/%d)\n",
|
||||||
gNB->Mod_id, frame, slot,
|
gNB->Mod_id, frame, slot,
|
||||||
gNB->ul_dci_pdu==NULL?0:gNB->ul_dci_pdu->pdcch_pdu.pdcch_pdu_rel15.numDlDci,
|
ul_pdcch_pdu_id==0?0:gNB->ul_pdcch_pdu[ul_pdcch_pdu_id].pdcch_pdu.pdcch_pdu.pdcch_pdu_rel15.numDlDci,
|
||||||
gNB->pdcch_pdu==NULL?0:gNB->pdcch_pdu->pdcch_pdu_rel15.numDlDci);
|
pdcch_pdu_id==0?0:gNB->pdcch_pdu[pdcch_pdu_id].pdcch_pdu.pdcch_pdu_rel15.numDlDci);
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,1);
|
||||||
|
|
||||||
nr_generate_dci_top(gNB->pdcch_pdu,
|
nr_generate_dci_top(gNB,
|
||||||
gNB->ul_dci_pdu,
|
pdcch_pdu_id>=0 ? &gNB->pdcch_pdu[pdcch_pdu_id].pdcch_pdu : NULL,
|
||||||
|
ul_pdcch_pdu_id>=0 ? &gNB->ul_pdcch_pdu[ul_pdcch_pdu_id].pdcch_pdu.pdcch_pdu : NULL,
|
||||||
gNB->nr_gold_pdcch_dmrs[slot],
|
gNB->nr_gold_pdcch_dmrs[slot],
|
||||||
&gNB->common_vars.txdataF[0][txdataF_offset],
|
&gNB->common_vars.txdataF[0][txdataF_offset],
|
||||||
AMP, *fp);
|
AMP, *fp);
|
||||||
|
|
||||||
|
// free up entry in pdcch tables
|
||||||
|
if (pdcch_pdu_id>=0) gNB->pdcch_pdu[pdcch_pdu_id].frame = -1;
|
||||||
|
if (ul_pdcch_pdu_id>=0) gNB->ul_pdcch_pdu[ul_pdcch_pdu_id].frame = -1;
|
||||||
|
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_gNB_PDCCH_TX,0);
|
||||||
|
if (pdcch_pdu_id >= 0) gNB->pdcch_pdu[pdcch_pdu_id].frame = -1;
|
||||||
|
if (ul_pdcch_pdu_id >= 0) gNB->ul_pdcch_pdu[ul_pdcch_pdu_id].frame = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<gNB->num_pdsch_rnti; i++) {
|
for (int i=0; i<gNB->num_pdsch_rnti; i++) {
|
||||||
|
|||||||
@@ -101,9 +101,9 @@
|
|||||||
|
|
||||||
#define NUMBER_OF_NR_DLSCH_MAX 2//16
|
#define NUMBER_OF_NR_DLSCH_MAX 2//16
|
||||||
#define NUMBER_OF_NR_ULSCH_MAX 2//16
|
#define NUMBER_OF_NR_ULSCH_MAX 2//16
|
||||||
#define NUMBER_OF_NR_PUCCH_MAX 2
|
#define NUMBER_OF_NR_PUCCH_MAX 16
|
||||||
#define NUMBER_OF_NR_SR_MAX 16
|
#define NUMBER_OF_NR_SR_MAX 16
|
||||||
|
#define NUMBER_OF_NR_PDCCH_MAX 16
|
||||||
|
|
||||||
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
#define MAX_MANAGED_ENB_PER_MOBILE 2
|
||||||
#define MAX_MANAGED_GNB_PER_MOBILE 2
|
#define MAX_MANAGED_GNB_PER_MOBILE 2
|
||||||
|
|||||||
Reference in New Issue
Block a user