Commit 9d99f1e9 authored by hsum's avatar hsum Committed by Robert Schmidt

Refactor DL TTI request handling and improve code clarity

This commit refactors the DL TTI request handling in the PNF P7 module and enhances code clarity.

Changes made:
- Updated the definition of `dl_tti_req` in the `nfapi_pnf_interface.h` header file to directly store the `nfapi_nr_dl_tti_request_t` structure instead of a pointer.
- Refactored DL TTI request processing in the `pnf_handle_dl_tti_request` function in `pnf_p7.c` to simplify the code structure and improve readability.
- Introduced a static function, `cp_nr_dl_tti_req`, to copy DL TTI request structures, improving code modularity and reducing duplication.
- Updated DL TTI request handling to utilize the refactored logic.
- Removed unnecessary deallocation of DL TTI request in error handling path to prevent double deallocation.
parent 966c3942
...@@ -1167,9 +1167,6 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7, ...@@ -1167,9 +1167,6 @@ int pnf_phy_dl_tti_req(gNB_L1_rxtx_proc_t *proc, nfapi_pnf_p7_config_t *pnf_p7,
nr_schedule_dl_tti_req(gNB, DL_req); nr_schedule_dl_tti_req(gNB, DL_req);
if(DL_req->vendor_extension)
free(DL_req->vendor_extension);
return 0; return 0;
} }
......
...@@ -572,7 +572,7 @@ typedef struct ...@@ -572,7 +572,7 @@ typedef struct
{ {
int16_t sfn; int16_t sfn;
int16_t slot; int16_t slot;
nfapi_nr_dl_tti_request_t* dl_tti_req; nfapi_nr_dl_tti_request_t dl_tti_req;
nfapi_nr_ul_tti_request_t ul_tti_req; nfapi_nr_ul_tti_request_t ul_tti_req;
nfapi_nr_ul_dci_request_t ul_dci_req; nfapi_nr_ul_dci_request_t ul_dci_req;
nfapi_nr_tx_data_request_t tx_data_req; nfapi_nr_tx_data_request_t tx_data_req;
......
...@@ -907,11 +907,11 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl ...@@ -907,11 +907,11 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl
nfapi_pnf_p7_slot_buffer_t* tx_slot_buffer = &(pnf_p7->slot_buffer[buffer_index_tx]); nfapi_pnf_p7_slot_buffer_t* tx_slot_buffer = &(pnf_p7->slot_buffer[buffer_index_tx]);
if(tx_slot_buffer->dl_tti_req != 0 && tx_slot_buffer->dl_tti_req->SFN == sfn_tx && tx_slot_buffer->dl_tti_req->Slot == slot_tx) if(tx_slot_buffer->dl_tti_req.dl_tti_request_body.nPDUs > 0 && tx_slot_buffer->dl_tti_req.SFN == sfn_tx && tx_slot_buffer->dl_tti_req.Slot == slot_tx)
{ {
DevAssert(pnf_p7->_public.dl_tti_req_fn != NULL); DevAssert(pnf_p7->_public.dl_tti_req_fn != NULL);
// pnf_phy_dl_tti_req() // pnf_phy_dl_tti_req()
(pnf_p7->_public.dl_tti_req_fn)(NULL, &(pnf_p7->_public), tx_slot_buffer->dl_tti_req); (pnf_p7->_public.dl_tti_req_fn)(NULL, &(pnf_p7->_public), &tx_slot_buffer->dl_tti_req);
} }
if(tx_slot_buffer->ul_tti_req.n_pdus > 0 && tx_slot_buffer->ul_tti_req.SFN == sfn_tx && tx_slot_buffer->ul_tti_req.Slot == slot_tx) if(tx_slot_buffer->ul_tti_req.n_pdus > 0 && tx_slot_buffer->ul_tti_req.SFN == sfn_tx && tx_slot_buffer->ul_tti_req.Slot == slot_tx)
...@@ -928,12 +928,8 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl ...@@ -928,12 +928,8 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl
LOG_D(PHY, "Process tx_data SFN/slot %d.%d buffer index: %d \n",sfn_tx,slot_tx,buffer_index_tx); LOG_D(PHY, "Process tx_data SFN/slot %d.%d buffer index: %d \n",sfn_tx,slot_tx,buffer_index_tx);
// pnf_phy_tx_data_req() // pnf_phy_tx_data_req()
(pnf_p7->_public.tx_data_req_fn)(&(pnf_p7->_public), &tx_slot_buffer->tx_data_req); (pnf_p7->_public.tx_data_req_fn)(&(pnf_p7->_public), &tx_slot_buffer->tx_data_req);
//tx_slot_buffer->tx_data_req.SFN = -1; // to make sure it might not get
// executed accidentally
//tx_slot_buffer->tx_data_req.Slot = -1;
} }
if(tx_slot_buffer->ul_dci_req.numPdus > 0 && tx_slot_buffer->ul_dci_req.SFN == sfn_tx && tx_slot_buffer->ul_dci_req.Slot == slot_tx) if(tx_slot_buffer->ul_dci_req.numPdus > 0 && tx_slot_buffer->ul_dci_req.SFN == sfn_tx && tx_slot_buffer->ul_dci_req.Slot == slot_tx)
{ {
DevAssert(pnf_p7->_public.ul_dci_req_fn != NULL); DevAssert(pnf_p7->_public.ul_dci_req_fn != NULL);
...@@ -942,28 +938,14 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl ...@@ -942,28 +938,14 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl
(pnf_p7->_public.ul_dci_req_fn)(NULL, &(pnf_p7->_public), &tx_slot_buffer->ul_dci_req); (pnf_p7->_public.ul_dci_req_fn)(NULL, &(pnf_p7->_public), &tx_slot_buffer->ul_dci_req);
} }
//deallocate slot buffers after passing down the PDUs to PHY processing
if(tx_slot_buffer->dl_tti_req != 0)
{
deallocate_nfapi_dl_tti_request(tx_slot_buffer->dl_tti_req, pnf_p7);
tx_slot_buffer->dl_tti_req = 0;
LOG_D(PHY,"SFN/slot %d.%d Buffer index : %d freed \n",sfn_tx,slot_tx,buffer_index_tx);
}
//reset slot buffer //reset slot buffer
if ( rx_slot_buffer->dl_tti_req == 0 && if (rx_slot_buffer->ul_tti_req.n_pdus == 0)
rx_slot_buffer->ul_tti_req.n_pdus == 0)
{ {
pnf_p7->slot_buffer[buffer_index_rx].sfn = -1; pnf_p7->slot_buffer[buffer_index_rx].sfn = -1;
pnf_p7->slot_buffer[buffer_index_rx].slot = -1; pnf_p7->slot_buffer[buffer_index_rx].slot = -1;
} }
//printf("pnf_p7->_public.timing_info_mode_periodic:%d pnf_p7->timing_info_period_counter:%d pnf_p7->_public.timing_info_period:%d\n", pnf_p7->_public.timing_info_mode_periodic, pnf_p7->timing_info_period_counter, pnf_p7->_public.timing_info_period);
//printf("pnf_p7->_public.timing_info_mode_aperiodic:%d pnf_p7->timing_info_aperiodic_send:%d\n", pnf_p7->_public.timing_info_mode_aperiodic, pnf_p7->timing_info_aperiodic_send);
//printf("pnf_p7->timing_info_ms_counter:%d\n", pnf_p7->timing_info_ms_counter);
//send the periodic timing info if configured //send the periodic timing info if configured
if(pnf_p7->_public.timing_info_mode_periodic && (pnf_p7->timing_info_period_counter++) == pnf_p7->_public.timing_info_period) if(pnf_p7->_public.timing_info_mode_periodic && (pnf_p7->timing_info_period_counter++) == pnf_p7->_public.timing_info_period)
{ {
...@@ -1416,17 +1398,171 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy) ...@@ -1416,17 +1398,171 @@ uint8_t is_p7_request_in_window(uint16_t sfnsf, const char* name, pnf_p7_t* phy)
// P7 messages // P7 messages
void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) static void cp_nr_dl_tti_pdcch_pdu(nfapi_nr_dl_tti_pdcch_pdu_rel15_t* dst_pdcch_pdu,
const nfapi_nr_dl_tti_pdcch_pdu_rel15_t* src_pdcch_pdu)
{ {
//NFAPI_TRACE(NFAPI_TRACE_INFO, "DL_CONFIG.req Received\n"); if (dst_pdcch_pdu == NULL || src_pdcch_pdu == NULL) {
nfapi_nr_dl_tti_request_t* req = allocate_nfapi_dl_tti_request(pnf_p7);
if(req == NULL)
{
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to allocate nfapi_dl_tti_request structure\n");
return; return;
} }
int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, req, sizeof(nfapi_nr_dl_tti_request_t), &(pnf_p7->_public.codec_config)); dst_pdcch_pdu->BWPSize = src_pdcch_pdu->BWPSize;
dst_pdcch_pdu->BWPStart = src_pdcch_pdu->BWPStart;
dst_pdcch_pdu->SubcarrierSpacing = src_pdcch_pdu->SubcarrierSpacing;
dst_pdcch_pdu->CyclicPrefix = src_pdcch_pdu->CyclicPrefix;
dst_pdcch_pdu->StartSymbolIndex = src_pdcch_pdu->StartSymbolIndex;
dst_pdcch_pdu->DurationSymbols = src_pdcch_pdu->DurationSymbols;
memcpy(dst_pdcch_pdu->FreqDomainResource, src_pdcch_pdu->FreqDomainResource, sizeof(src_pdcch_pdu->FreqDomainResource));
dst_pdcch_pdu->CceRegMappingType = src_pdcch_pdu->CceRegMappingType;
dst_pdcch_pdu->RegBundleSize = src_pdcch_pdu->RegBundleSize;
dst_pdcch_pdu->InterleaverSize = src_pdcch_pdu->InterleaverSize;
dst_pdcch_pdu->CoreSetType = src_pdcch_pdu->CoreSetType;
dst_pdcch_pdu->ShiftIndex = src_pdcch_pdu->ShiftIndex;
dst_pdcch_pdu->precoderGranularity = src_pdcch_pdu->precoderGranularity;
dst_pdcch_pdu->numDlDci = src_pdcch_pdu->numDlDci;
for (int i = 0; i < src_pdcch_pdu->numDlDci; ++i) {
dst_pdcch_pdu->dci_pdu[i] = src_pdcch_pdu->dci_pdu[i];
}
}
static void cp_nr_dl_tti_pdsch_pdu(nfapi_nr_dl_tti_pdsch_pdu_rel15_t* dst_pdsch_pdu,
const nfapi_nr_dl_tti_pdsch_pdu_rel15_t* src_pdsch_pdu)
{
if (dst_pdsch_pdu == NULL || src_pdsch_pdu == NULL) {
return;
}
dst_pdsch_pdu->pduBitmap = src_pdsch_pdu->pduBitmap;
dst_pdsch_pdu->rnti = src_pdsch_pdu->rnti;
dst_pdsch_pdu->pduIndex = src_pdsch_pdu->pduIndex;
dst_pdsch_pdu->BWPSize = src_pdsch_pdu->BWPSize;
dst_pdsch_pdu->BWPStart = src_pdsch_pdu->BWPStart;
dst_pdsch_pdu->SubcarrierSpacing = src_pdsch_pdu->SubcarrierSpacing;
dst_pdsch_pdu->CyclicPrefix = src_pdsch_pdu->CyclicPrefix;
dst_pdsch_pdu->NrOfCodewords = src_pdsch_pdu->NrOfCodewords;
memcpy(dst_pdsch_pdu->targetCodeRate, src_pdsch_pdu->targetCodeRate, sizeof(src_pdsch_pdu->targetCodeRate));
memcpy(dst_pdsch_pdu->qamModOrder, src_pdsch_pdu->qamModOrder, sizeof(src_pdsch_pdu->qamModOrder));
memcpy(dst_pdsch_pdu->mcsIndex, src_pdsch_pdu->mcsIndex, sizeof(src_pdsch_pdu->mcsIndex));
memcpy(dst_pdsch_pdu->mcsTable, src_pdsch_pdu->mcsTable, sizeof(src_pdsch_pdu->mcsTable));
memcpy(dst_pdsch_pdu->rvIndex, src_pdsch_pdu->rvIndex, sizeof(src_pdsch_pdu->rvIndex));
memcpy(dst_pdsch_pdu->TBSize, src_pdsch_pdu->TBSize, sizeof(src_pdsch_pdu->TBSize));
dst_pdsch_pdu->dataScramblingId = src_pdsch_pdu->dataScramblingId;
dst_pdsch_pdu->nrOfLayers = src_pdsch_pdu->nrOfLayers;
dst_pdsch_pdu->transmissionScheme = src_pdsch_pdu->transmissionScheme;
dst_pdsch_pdu->refPoint = src_pdsch_pdu->refPoint;
dst_pdsch_pdu->dlDmrsSymbPos = src_pdsch_pdu->dlDmrsSymbPos;
dst_pdsch_pdu->dmrsConfigType = src_pdsch_pdu->dmrsConfigType;
dst_pdsch_pdu->dlDmrsScramblingId = src_pdsch_pdu->dlDmrsScramblingId;
dst_pdsch_pdu->SCID = src_pdsch_pdu->SCID;
dst_pdsch_pdu->numDmrsCdmGrpsNoData = src_pdsch_pdu->numDmrsCdmGrpsNoData;
dst_pdsch_pdu->dmrsPorts = src_pdsch_pdu->dmrsPorts;
dst_pdsch_pdu->resourceAlloc = src_pdsch_pdu->resourceAlloc;
memcpy(dst_pdsch_pdu->rbBitmap, src_pdsch_pdu->rbBitmap, sizeof(src_pdsch_pdu->rbBitmap));
dst_pdsch_pdu->rbStart = src_pdsch_pdu->rbStart;
dst_pdsch_pdu->rbSize = src_pdsch_pdu->rbSize;
dst_pdsch_pdu->VRBtoPRBMapping = src_pdsch_pdu->VRBtoPRBMapping;
dst_pdsch_pdu->StartSymbolIndex = src_pdsch_pdu->StartSymbolIndex;
dst_pdsch_pdu->NrOfSymbols = src_pdsch_pdu->NrOfSymbols;
dst_pdsch_pdu->PTRSPortIndex = src_pdsch_pdu->PTRSPortIndex;
dst_pdsch_pdu->PTRSTimeDensity = src_pdsch_pdu->PTRSTimeDensity;
dst_pdsch_pdu->PTRSFreqDensity = src_pdsch_pdu->PTRSFreqDensity;
dst_pdsch_pdu->PTRSReOffset = src_pdsch_pdu->PTRSReOffset;
dst_pdsch_pdu->nEpreRatioOfPDSCHToPTRS = src_pdsch_pdu->nEpreRatioOfPDSCHToPTRS;
dst_pdsch_pdu->precodingAndBeamforming = src_pdsch_pdu->precodingAndBeamforming;
dst_pdsch_pdu->maintenance_parms_v3 = src_pdsch_pdu->maintenance_parms_v3;
}
static void cp_nr_dl_tti_csi_rs_pdu(nfapi_nr_dl_tti_csi_rs_pdu_rel15_t* dst_csi_rs_pdu,
const nfapi_nr_dl_tti_csi_rs_pdu_rel15_t* src_csi_rs_pdu)
{
if (dst_csi_rs_pdu == NULL || src_csi_rs_pdu == NULL) {
return;
}
dst_csi_rs_pdu->bwp_size = src_csi_rs_pdu->bwp_size;
dst_csi_rs_pdu->bwp_start = src_csi_rs_pdu->bwp_start;
dst_csi_rs_pdu->subcarrier_spacing = src_csi_rs_pdu->subcarrier_spacing;
dst_csi_rs_pdu->cyclic_prefix = src_csi_rs_pdu->cyclic_prefix;
dst_csi_rs_pdu->start_rb = src_csi_rs_pdu->start_rb;
dst_csi_rs_pdu->nr_of_rbs = src_csi_rs_pdu->nr_of_rbs;
dst_csi_rs_pdu->csi_type = src_csi_rs_pdu->csi_type;
dst_csi_rs_pdu->row = src_csi_rs_pdu->row;
dst_csi_rs_pdu->freq_domain = src_csi_rs_pdu->freq_domain;
dst_csi_rs_pdu->symb_l0 = src_csi_rs_pdu->symb_l0;
dst_csi_rs_pdu->symb_l1 = src_csi_rs_pdu->symb_l1;
dst_csi_rs_pdu->cdm_type = src_csi_rs_pdu->cdm_type;
dst_csi_rs_pdu->freq_density = src_csi_rs_pdu->freq_density;
dst_csi_rs_pdu->scramb_id = src_csi_rs_pdu->scramb_id;
dst_csi_rs_pdu->power_control_offset = src_csi_rs_pdu->power_control_offset;
dst_csi_rs_pdu->power_control_offset_ss = src_csi_rs_pdu->power_control_offset_ss;
}
static void cp_nr_dl_tti_ssb_pdu(nfapi_nr_dl_tti_ssb_pdu_rel15_t* dst_ssb_pdu, const nfapi_nr_dl_tti_ssb_pdu_rel15_t* src_ssb_pdu)
{
if (dst_ssb_pdu == NULL || src_ssb_pdu == NULL) {
return;
}
dst_ssb_pdu->PhysCellId = src_ssb_pdu->PhysCellId;
dst_ssb_pdu->BetaPss = src_ssb_pdu->BetaPss;
dst_ssb_pdu->SsbBlockIndex = src_ssb_pdu->SsbBlockIndex;
dst_ssb_pdu->SsbSubcarrierOffset = src_ssb_pdu->SsbSubcarrierOffset;
dst_ssb_pdu->ssbOffsetPointA = src_ssb_pdu->ssbOffsetPointA;
dst_ssb_pdu->bchPayloadFlag = src_ssb_pdu->bchPayloadFlag;
dst_ssb_pdu->bchPayload = src_ssb_pdu->bchPayload;
dst_ssb_pdu->ssbRsrp = src_ssb_pdu->ssbRsrp;
dst_ssb_pdu->precoding_and_beamforming = src_ssb_pdu->precoding_and_beamforming;
}
static void cp_nr_dl_tti_req(nfapi_nr_dl_tti_request_t* dst, const nfapi_nr_dl_tti_request_t* src)
{
if (dst == NULL || src == NULL) {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "cp_nr_dl_tti_req: dst or src is NULL\n");
return;
}
dst->header = src->header;
dst->SFN = src->SFN;
dst->Slot = src->Slot;
// Copy dl_tti_request_body
dst->dl_tti_request_body.nPDUs = src->dl_tti_request_body.nPDUs;
dst->dl_tti_request_body.nGroup = src->dl_tti_request_body.nGroup;
// Iterate over dl_tti_pdu_list
for (int i = 0; i < dst->dl_tti_request_body.nPDUs; ++i) {
nfapi_nr_dl_tti_request_pdu_t* dst_pdu = &dst->dl_tti_request_body.dl_tti_pdu_list[i];
const nfapi_nr_dl_tti_request_pdu_t* src_pdu = &src->dl_tti_request_body.dl_tti_pdu_list[i];
dst_pdu->PDUType = src_pdu->PDUType;
dst_pdu->PDUSize = src_pdu->PDUSize;
// Copy union based on PDUType
switch (src_pdu->PDUType) {
case NFAPI_NR_DL_TTI_PDCCH_PDU_TYPE:
cp_nr_dl_tti_pdcch_pdu(&dst_pdu->pdcch_pdu.pdcch_pdu_rel15, &src_pdu->pdcch_pdu.pdcch_pdu_rel15);
break;
case NFAPI_NR_DL_TTI_PDSCH_PDU_TYPE:
cp_nr_dl_tti_pdsch_pdu(&dst_pdu->pdsch_pdu.pdsch_pdu_rel15, &src_pdu->pdsch_pdu.pdsch_pdu_rel15);
break;
case NFAPI_NR_DL_TTI_CSI_RS_PDU_TYPE:
cp_nr_dl_tti_csi_rs_pdu(&dst_pdu->csi_rs_pdu.csi_rs_pdu_rel15, &src_pdu->csi_rs_pdu.csi_rs_pdu_rel15);
break;
case NFAPI_NR_DL_TTI_SSB_PDU_TYPE:
cp_nr_dl_tti_ssb_pdu(&dst_pdu->ssb_pdu.ssb_pdu_rel15, &src_pdu->ssb_pdu.ssb_pdu_rel15);
break;
}
}
// Copy the nUe array
for (int i = 0; i < dst->dl_tti_request_body.nGroup; ++i) {
dst->dl_tti_request_body.nUe[i] = src->dl_tti_request_body.nUe[i];
}
// Copy the PduIdx array
for (int i = 0; i < dst->dl_tti_request_body.nPDUs; ++i) {
for (int j = 0; j < dst->dl_tti_request_body.nUe[i]; ++j) {
dst->dl_tti_request_body.PduIdx[i][j] = src->dl_tti_request_body.PduIdx[i][j];
}
}
// Copy vendor_extension
dst->vendor_extension = src->vendor_extension;
}
void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
{
// NFAPI_TRACE(NFAPI_TRACE_INFO, "DL_CONFIG.req Received\n");
nfapi_nr_dl_tti_request_t req;
int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(nfapi_nr_dl_tti_request_t), &(pnf_p7->_public.codec_config));
if(unpack_result == 0) if(unpack_result == 0)
{ {
...@@ -1436,42 +1572,27 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) ...@@ -1436,42 +1572,27 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
return; return;
} }
if(is_nr_p7_request_in_window(req->SFN,req->Slot, "dl_tti_request", pnf_p7)) if(is_nr_p7_request_in_window(req.SFN,req.Slot, "dl_tti_request", pnf_p7))
{ {
uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req->SFN,req->Slot); uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(req.SFN,req.Slot);
uint8_t buffer_index = sfn_slot_dec % 20; uint8_t buffer_index = sfn_slot_dec % 20;
struct timespec t; struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t); clock_gettime(CLOCK_MONOTONIC, &t);
NFAPI_TRACE(NFAPI_TRACE_DEBUG,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req->SFN, req->Slot, buffer_index); NFAPI_TRACE(NFAPI_TRACE_DEBUG,"%s() %ld.%09ld POPULATE DL_TTI_REQ current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n", __FUNCTION__, t.tv_sec, t.tv_nsec, pnf_p7->sfn,pnf_p7->slot, req.SFN, req.Slot, buffer_index);
// if there is already an dl_tti_req make sure we free it.
if(pnf_p7->slot_buffer[buffer_index].dl_tti_req != 0)
{
NFAPI_TRACE(NFAPI_TRACE_NOTE, "%s() is_nr_p7_request_in_window()=TRUE buffer_index occupied - free it first sfn_slot:%d buffer_index:%d\n", __FUNCTION__, NFAPI_SFNSLOT2DEC(req->SFN,req->Slot), buffer_index);
//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing dl_config_req at index %d (%d/%d)",
// pMyPhyInfo->sfnSf, bufferIdx,
// SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf));
deallocate_nfapi_dl_tti_request(pnf_p7->slot_buffer[buffer_index].dl_tti_req, pnf_p7);
}
// filling dl_tti_request in slot buffer // filling dl_tti_request in slot buffer
pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; pnf_p7->slot_buffer[buffer_index].sfn = req.SFN;
pnf_p7->slot_buffer[buffer_index].slot = req->Slot; pnf_p7->slot_buffer[buffer_index].slot = req.Slot;
pnf_p7->slot_buffer[buffer_index].dl_tti_req = req; cp_nr_dl_tti_req(&pnf_p7->slot_buffer[buffer_index].dl_tti_req, &req);
pnf_p7->stats.dl_tti_ontime++; pnf_p7->stats.dl_tti_ontime++;
} }
else else
{ {
//NFAPI_TRACE(NFAPI_TRACE_NOTE, "NOT storing dl_config_req SFN/SF %d\n", req->sfn_sf);
deallocate_nfapi_dl_tti_request(req, pnf_p7);
if(pnf_p7->_public.timing_info_mode_aperiodic) if(pnf_p7->_public.timing_info_mode_aperiodic)
{
pnf_p7->timing_info_aperiodic_send = 1; pnf_p7->timing_info_aperiodic_send = 1;
}
pnf_p7->stats.dl_tti_late++; pnf_p7->stats.dl_tti_late++;
} }
...@@ -1484,7 +1605,6 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) ...@@ -1484,7 +1605,6 @@ void pnf_handle_dl_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
else else
{ {
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack dl_tti_req"); NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack dl_tti_req");
deallocate_nfapi_dl_tti_request(req, pnf_p7);
} }
} }
......
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