Move DLSCH/PDSCH variables to gNB
The next commit will remove msgDataTx. We can therefore not use msgDataTx to retain the PDSCH/DLSCH variables, and move them to the gNB. Note that the only reason for NR_gNB_DLSCH_t after this commit is to hold various large buffers (c, b, f). Future work could be done to remove this, in which case the array inside PHY_VARS_gNB could be deleted. On this occasion, clean up the use of init_DLSCH_struct() and reset_DLSCH_struct() (renamed destroy_DLSCH_struct()) and centralize their call in phy_init_nr_gNB()/phy_free_nr_gNB(), and correct simulators accordingly.
This commit is contained in:
@@ -361,7 +361,6 @@ void init_gNB_Tpool(int inst)
|
|||||||
notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t), 0, &gNB->L1_tx_out, NULL);
|
notifiedFIFO_elt_t *msgL1Tx = newNotifiedFIFO_elt(sizeof(processingData_L1tx_t), 0, &gNB->L1_tx_out, NULL);
|
||||||
processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
|
processingData_L1tx_t *msgDataTx = (processingData_L1tx_t *)NotifiedFifoData(msgL1Tx);
|
||||||
memset(msgDataTx, 0, sizeof(processingData_L1tx_t));
|
memset(msgDataTx, 0, sizeof(processingData_L1tx_t));
|
||||||
init_DLSCH_struct(gNB, msgDataTx);
|
|
||||||
// this will be removed when the msgDataTx is not necessary anymore
|
// this will be removed when the msgDataTx is not necessary anymore
|
||||||
gNB->msgDataTx = msgDataTx;
|
gNB->msgDataTx = msgDataTx;
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h"
|
#include "nfapi/open-nFAPI/fapi/inc/nr_fapi_p5_utils.h"
|
||||||
|
|
||||||
|
static void init_DLSCH_struct(PHY_VARS_gNB *gNB);
|
||||||
|
static void destroy_DLSCH_struct(const PHY_VARS_gNB *gNB);
|
||||||
|
|
||||||
int l1_north_init_gNB()
|
int l1_north_init_gNB()
|
||||||
{
|
{
|
||||||
AssertFatal(RC.nb_nr_L1_inst > 0, "Failed to init PHY callbacks: nb_nr_L1_inst = %d\n", RC.nb_nr_L1_inst);
|
AssertFatal(RC.nb_nr_L1_inst > 0, "Failed to init PHY callbacks: nb_nr_L1_inst = %d\n", RC.nb_nr_L1_inst);
|
||||||
@@ -155,6 +158,8 @@ void phy_init_nr_gNB(PHY_VARS_gNB *gNB)
|
|||||||
/// Transport init necessary for NR synchro
|
/// Transport init necessary for NR synchro
|
||||||
init_nr_transport(gNB);
|
init_nr_transport(gNB);
|
||||||
|
|
||||||
|
init_DLSCH_struct(gNB);
|
||||||
|
|
||||||
gNB->nr_srs_info = (nr_srs_info_t **)malloc16_clear(gNB->max_nb_srs * sizeof(nr_srs_info_t*));
|
gNB->nr_srs_info = (nr_srs_info_t **)malloc16_clear(gNB->max_nb_srs * sizeof(nr_srs_info_t*));
|
||||||
for (int id = 0; id < gNB->max_nb_srs; id++) {
|
for (int id = 0; id < gNB->max_nb_srs; id++) {
|
||||||
gNB->nr_srs_info[id] = (nr_srs_info_t *)malloc16_clear(sizeof(nr_srs_info_t));
|
gNB->nr_srs_info[id] = (nr_srs_info_t *)malloc16_clear(sizeof(nr_srs_info_t));
|
||||||
@@ -241,6 +246,8 @@ void phy_free_nr_gNB(PHY_VARS_gNB *gNB)
|
|||||||
|
|
||||||
reset_nr_transport(gNB);
|
reset_nr_transport(gNB);
|
||||||
|
|
||||||
|
destroy_DLSCH_struct(gNB);
|
||||||
|
|
||||||
NR_gNB_COMMON * common_vars = &gNB->common_vars;
|
NR_gNB_COMMON * common_vars = &gNB->common_vars;
|
||||||
for (int j = 0; j < common_vars->num_beams_period; j++) {
|
for (int j = 0; j < common_vars->num_beams_period; j++) {
|
||||||
if (common_vars->beam_id)
|
if (common_vars->beam_id)
|
||||||
@@ -401,29 +408,27 @@ void nr_phy_config_request(NR_PHY_Config_t *phy_config)
|
|||||||
init_timeshift_rotation(fp);
|
init_timeshift_rotation(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg)
|
static void init_DLSCH_struct(PHY_VARS_gNB *gNB)
|
||||||
{
|
{
|
||||||
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||||
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
||||||
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;
|
||||||
msg->num_pdsch_slot = 0;
|
gNB->dlsch = calloc(gNB->max_nb_pdsch, sizeof(*gNB->dlsch));
|
||||||
|
|
||||||
msg->dlsch = calloc(gNB->max_nb_pdsch, sizeof(*msg->dlsch));
|
|
||||||
for (int i = 0; i < gNB->max_nb_pdsch; i++) {
|
for (int i = 0; i < gNB->max_nb_pdsch; i++) {
|
||||||
LOG_D(PHY, "Allocating Transport Channel Buffers for DLSCH %d/%d\n", i, gNB->max_nb_pdsch);
|
LOG_D(PHY, "Allocating Transport Channel Buffers for DLSCH %d/%d\n", i, gNB->max_nb_pdsch);
|
||||||
msg->dlsch[i] = new_gNB_dlsch(fp, grid_size);
|
gNB->dlsch[i] = new_gNB_dlsch(fp, grid_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_DLSCH_struct(const PHY_VARS_gNB *gNB, processingData_L1tx_t *msg)
|
static void destroy_DLSCH_struct(const PHY_VARS_gNB *gNB)
|
||||||
{
|
{
|
||||||
const NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
const NR_DL_FRAME_PARMS *fp = &gNB->frame_parms;
|
||||||
const nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
const nfapi_nr_config_request_scf_t *cfg = &gNB->gNB_config;
|
||||||
const uint16_t grid_size = cfg->carrier_config.dl_grid_size[fp->numerology_index].value;
|
const uint16_t grid_size = cfg->carrier_config.dl_grid_size[fp->numerology_index].value;
|
||||||
for (int i = 0; i < gNB->max_nb_pdsch; i++) {
|
for (int i = 0; i < gNB->max_nb_pdsch; i++) {
|
||||||
free_gNB_dlsch(&msg->dlsch[i], grid_size, fp);
|
free_gNB_dlsch(&gNB->dlsch[i], grid_size, fp);
|
||||||
}
|
}
|
||||||
free(msg->dlsch);
|
free(gNB->dlsch);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_nr_transport(PHY_VARS_gNB *gNB)
|
void init_nr_transport(PHY_VARS_gNB *gNB)
|
||||||
|
|||||||
@@ -46,9 +46,6 @@ int l1_north_init_gNB(void);
|
|||||||
void init_nr_transport(PHY_VARS_gNB *gNB);
|
void init_nr_transport(PHY_VARS_gNB *gNB);
|
||||||
void reset_nr_transport(PHY_VARS_gNB *gNB);
|
void reset_nr_transport(PHY_VARS_gNB *gNB);
|
||||||
|
|
||||||
void init_DLSCH_struct(PHY_VARS_gNB *gNB, processingData_L1tx_t *msg);
|
|
||||||
void reset_DLSCH_struct(const PHY_VARS_gNB *gNB, processingData_L1tx_t *msg);
|
|
||||||
|
|
||||||
void RCconfig_nrUE_prs(void *cfg);
|
void RCconfig_nrUE_prs(void *cfg);
|
||||||
void init_nr_prs_ue_vars(PHY_VARS_NR_UE *ue);
|
void init_nr_prs_ue_vars(PHY_VARS_NR_UE *ue);
|
||||||
void nr_init_dl_harq_processes(NR_DL_UE_HARQ_t harq_list[2][NR_MAX_DLSCH_HARQ_PROCESSES], int number_of_processes, int num_rb);
|
void nr_init_dl_harq_processes(NR_DL_UE_HARQ_t harq_list[2][NR_MAX_DLSCH_HARQ_PROCESSES], int number_of_processes, int num_rb);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
void nr_fill_dlsch_dl_tti_req(processingData_L1tx_t *msgTx, nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu)
|
void nr_fill_dlsch_dl_tti_req(processingData_L1tx_t *msgTx, nfapi_nr_dl_tti_pdsch_pdu *pdsch_pdu)
|
||||||
{
|
{
|
||||||
NR_gNB_DLSCH_t *dlsch = &msgTx->dlsch[msgTx->num_pdsch_slot];
|
NR_gNB_DLSCH_t *dlsch = &msgTx->gNB->dlsch[msgTx->num_pdsch_slot];
|
||||||
/// DLSCH struct
|
/// DLSCH struct
|
||||||
memcpy((void*)&dlsch->pdsch_pdu, (void*)pdsch_pdu, sizeof(nfapi_nr_dl_tti_pdsch_pdu));
|
memcpy((void*)&dlsch->pdsch_pdu, (void*)pdsch_pdu, sizeof(nfapi_nr_dl_tti_pdsch_pdu));
|
||||||
AssertFatal(msgTx->num_pdsch_slot == pdsch_pdu->pdsch_pdu_rel15.pduIndex,
|
AssertFatal(msgTx->num_pdsch_slot == pdsch_pdu->pdsch_pdu_rel15.pduIndex,
|
||||||
@@ -53,7 +53,7 @@ void nr_fill_dlsch_tx_req(processingData_L1tx_t *msgTx, int idx, uint8_t *sdu)
|
|||||||
|
|
||||||
/* not sure if FAPI could transmit DL_TTI_req and TX_req in different orders.
|
/* not sure if FAPI could transmit DL_TTI_req and TX_req in different orders.
|
||||||
* for the moment, assume they are in the same order (and check!) */
|
* for the moment, assume they are in the same order (and check!) */
|
||||||
NR_gNB_DLSCH_t *dlsch = &msgTx->dlsch[idx];
|
NR_gNB_DLSCH_t *dlsch = &msgTx->gNB->dlsch[idx];
|
||||||
nfapi_nr_dl_tti_pdsch_pdu *pdsch = &dlsch->pdsch_pdu;
|
nfapi_nr_dl_tti_pdsch_pdu *pdsch = &dlsch->pdsch_pdu;
|
||||||
AssertFatal(pdsch->pdsch_pdu_rel15.pduIndex == idx, "PDSCH PDU index %d does not match %d\n", pdsch->pdsch_pdu_rel15.pduIndex, idx);
|
AssertFatal(pdsch->pdsch_pdu_rel15.pduIndex == idx, "PDSCH PDU index %d does not match %d\n", pdsch->pdsch_pdu_rel15.pduIndex, idx);
|
||||||
dlsch->pdu = sdu;
|
dlsch->pdu = sdu;
|
||||||
|
|||||||
@@ -386,6 +386,8 @@ typedef struct PHY_VARS_gNB_s {
|
|||||||
|
|
||||||
NR_gNB_COMMON common_vars;
|
NR_gNB_COMMON common_vars;
|
||||||
prach_list_t prach_list;
|
prach_list_t prach_list;
|
||||||
|
// TODO: can we remove c from NR_gNB_DLSCH_t and put it on the stack?
|
||||||
|
NR_gNB_DLSCH_t *dlsch;
|
||||||
NR_gNB_PRS prs_vars;
|
NR_gNB_PRS prs_vars;
|
||||||
NR_gNB_PUSCH *pusch_vars;
|
NR_gNB_PUSCH *pusch_vars;
|
||||||
NR_gNB_PUCCH_t *pucch;
|
NR_gNB_PUCCH_t *pucch;
|
||||||
@@ -580,7 +582,6 @@ typedef struct processingData_L1tx {
|
|||||||
/// corresponds to UL_dci_req->ul_dci_pdu_list
|
/// corresponds to UL_dci_req->ul_dci_pdu_list
|
||||||
nfapi_nr_dl_tti_pdcch_pdu ul_pdcch_pdu[NFAPI_NR_MAX_NB_CORESETS];
|
nfapi_nr_dl_tti_pdcch_pdu ul_pdcch_pdu[NFAPI_NR_MAX_NB_CORESETS];
|
||||||
nfapi_nr_dl_tti_csi_rs_pdu csirs_pdu[NFAPI_NR_MAX_NB_CORESETS];
|
nfapi_nr_dl_tti_csi_rs_pdu csirs_pdu[NFAPI_NR_MAX_NB_CORESETS];
|
||||||
NR_gNB_DLSCH_t *dlsch;
|
|
||||||
nfapi_nr_dl_tti_ssb_pdu ssb_pdu[64];
|
nfapi_nr_dl_tti_ssb_pdu ssb_pdu[64];
|
||||||
int n_ssb_pdu;
|
int n_ssb_pdu;
|
||||||
int n_csirs_pdu;
|
int n_csirs_pdu;
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ void phy_procedures_gNB_TX(processingData_L1tx_t *msgTx,
|
|||||||
if (msgTx->num_pdsch_slot > 0) {
|
if (msgTx->num_pdsch_slot > 0) {
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,1);
|
||||||
LOG_D(PHY, "PDSCH generation started (%d) in frame %d.%d\n", msgTx->num_pdsch_slot,frame,slot);
|
LOG_D(PHY, "PDSCH generation started (%d) in frame %d.%d\n", msgTx->num_pdsch_slot,frame,slot);
|
||||||
nr_generate_pdsch(gNB, msgTx->num_pdsch_slot, msgTx->dlsch, frame, slot);
|
nr_generate_pdsch(gNB, msgTx->num_pdsch_slot, gNB->dlsch, frame, slot);
|
||||||
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_GENERATE_DLSCH,0);
|
||||||
}
|
}
|
||||||
msgTx->num_pdsch_slot = 0;
|
msgTx->num_pdsch_slot = 0;
|
||||||
|
|||||||
@@ -439,9 +439,9 @@ int main(int argc, char **argv)
|
|||||||
nr_init_dl_harq_processes(UE->dl_harq_processes, 8, nb_rb);
|
nr_init_dl_harq_processes(UE->dl_harq_processes, 8, nb_rb);
|
||||||
|
|
||||||
unsigned char harq_pid = 0; //dlsch->harq_ids[subframe];
|
unsigned char harq_pid = 0; //dlsch->harq_ids[subframe];
|
||||||
processingData_L1tx_t msgDataTx;
|
processingData_L1tx_t msgDataTx = {0};
|
||||||
init_DLSCH_struct(gNB, &msgDataTx);
|
msgDataTx.gNB = gNB;
|
||||||
NR_gNB_DLSCH_t *dlsch = &msgDataTx.dlsch[0];
|
NR_gNB_DLSCH_t *dlsch = &msgDataTx.gNB->dlsch[0];
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &dlsch->pdsch_pdu.pdsch_pdu_rel15;
|
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &dlsch->pdsch_pdu.pdsch_pdu_rel15;
|
||||||
//time_stats_t *rm_stats, *te_stats, *i_stats;
|
//time_stats_t *rm_stats, *te_stats, *i_stats;
|
||||||
unsigned int TBS = 8424;
|
unsigned int TBS = 8424;
|
||||||
@@ -621,8 +621,6 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
free_channel_desc_scm(gNB2UE);
|
free_channel_desc_scm(gNB2UE);
|
||||||
|
|
||||||
reset_DLSCH_struct(gNB, &msgDataTx);
|
|
||||||
|
|
||||||
int nb_slots_to_set = (1 << mu) * NR_NUMBER_OF_SUBFRAMES_PER_FRAME;
|
int nb_slots_to_set = (1 << mu) * NR_NUMBER_OF_SUBFRAMES_PER_FRAME;
|
||||||
for (int i = 0; i < nb_slots_to_set; ++i)
|
for (int i = 0; i < nb_slots_to_set; ++i)
|
||||||
free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list);
|
free(gNB->gNB_config.tdd_table.max_tdd_periodicity_list[i].max_num_of_symbol_per_slot_list);
|
||||||
|
|||||||
@@ -976,9 +976,9 @@ int main(int argc, char **argv)
|
|||||||
initNotifiedFIFO(&gNB->L1_tx_out);
|
initNotifiedFIFO(&gNB->L1_tx_out);
|
||||||
// we create 2 threads for L1 tx processing
|
// we create 2 threads for L1 tx processing
|
||||||
processingData_L1tx_t *msgDataTx = malloc(sizeof(processingData_L1tx_t));
|
processingData_L1tx_t *msgDataTx = malloc(sizeof(processingData_L1tx_t));
|
||||||
init_DLSCH_struct(gNB, msgDataTx);
|
|
||||||
msgDataTx->slot = slot;
|
msgDataTx->slot = slot;
|
||||||
msgDataTx->frame = frame;
|
msgDataTx->frame = frame;
|
||||||
|
msgDataTx->gNB = gNB;
|
||||||
gNB->msgDataTx = msgDataTx;
|
gNB->msgDataTx = msgDataTx;
|
||||||
|
|
||||||
// Buffers to store internal memory of slot process
|
// Buffers to store internal memory of slot process
|
||||||
@@ -1058,7 +1058,7 @@ int main(int argc, char **argv)
|
|||||||
n_false_positive = 0;
|
n_false_positive = 0;
|
||||||
if (n_trials== 1) num_rounds = 1;
|
if (n_trials== 1) num_rounds = 1;
|
||||||
|
|
||||||
NR_gNB_DLSCH_t *gNB_dlsch = &msgDataTx->dlsch[0];
|
NR_gNB_DLSCH_t *gNB_dlsch = &msgDataTx->gNB->dlsch[0];
|
||||||
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &gNB_dlsch->pdsch_pdu.pdsch_pdu_rel15;
|
nfapi_nr_dl_tti_pdsch_pdu_rel15_t *rel15 = &gNB_dlsch->pdsch_pdu.pdsch_pdu_rel15;
|
||||||
|
|
||||||
for (trial = 0; trial < n_trials && !stop; trial++) {
|
for (trial = 0; trial < n_trials && !stop; trial++) {
|
||||||
|
|||||||
Reference in New Issue
Block a user