Commit f84a5c16 authored by hsum's avatar hsum Committed by Robert Schmidt

Refactor UL TTI request handling and add clarity to function logic

This commit refactors the UL TTI request handling in the PNF P7 module and improves the clarity of function logic.

Changes made:
- Refactored UL TTI request handling to simplify code structure and improve readability.
- Introduced a static function, `cp_nr_ul_tti_req`, to copy UL TTI request structures, improving code modularity and reducing duplication.
- Updated UL TTI request processing to utilize the refactored logic.
- Removed unnecessary deallocation of UL TTI request in error handling path to prevent double deallocation.

Additionally, the commit enhances comments and debug traces for better understanding of the code flow and debugging.
parent 4e18c7b3
......@@ -570,14 +570,12 @@ typedef struct
typedef struct
{
//uint16_t sfn_slot
int16_t sfn;
int16_t slot;
//TODO: Change P7 structs to NR
nfapi_nr_dl_tti_request_t* dl_tti_req;//nfapi_dl_config_request_t* dl_config_req;
nfapi_nr_ul_tti_request_t* ul_tti_req;//nfapi_ul_config_request_t* ul_config_req;
nfapi_nr_ul_dci_request_t ul_dci_req;//nfapi_hi_dci0_request_t* hi_dci0_req;
nfapi_nr_tx_data_request_t tx_data_req;//nfapi_tx_request_t* tx_req;
nfapi_nr_dl_tti_request_t* dl_tti_req;
nfapi_nr_ul_tti_request_t ul_tti_req;
nfapi_nr_ul_dci_request_t ul_dci_req;
nfapi_nr_tx_data_request_t tx_data_req;
//TODO: check these two later
//nfapi_lbt_dl_config_request_t* lbt_dl_config_req;
......
......@@ -914,11 +914,11 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl
(pnf_p7->_public.dl_tti_req_fn)(NULL, &(pnf_p7->_public), tx_slot_buffer->dl_tti_req);
}
if(tx_slot_buffer->ul_tti_req != 0)
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)
{
DevAssert(pnf_p7->_public.ul_tti_req_fn != NULL);
// pnf_phy_ul_tti_req()
(pnf_p7->_public.ul_tti_req_fn)(NULL, &(pnf_p7->_public), tx_slot_buffer->ul_tti_req);
(pnf_p7->_public.ul_tti_req_fn)(NULL, &(pnf_p7->_public), &tx_slot_buffer->ul_tti_req);
}
if(tx_slot_buffer->tx_data_req.SFN == sfn_tx && tx_slot_buffer->tx_data_req.Slot == slot_tx)
......@@ -951,19 +951,10 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl
LOG_D(PHY,"SFN/slot %d.%d Buffer index : %d freed \n",sfn_tx,slot_tx,buffer_index_tx);
}
//checking in the rx slot buffers to see if a p7 msg is present.
if(rx_slot_buffer->ul_tti_req != 0)
{
deallocate_nfapi_ul_tti_request(rx_slot_buffer->ul_tti_req, pnf_p7);
rx_slot_buffer->ul_tti_req = 0;
}
//reset slot buffer
if ( rx_slot_buffer->dl_tti_req == 0 &&
rx_slot_buffer->ul_tti_req == 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].slot = -1;
......@@ -1588,20 +1579,236 @@ void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
}
}
void cp_nr_ul_tti_req_prach_pdu(const nfapi_nr_prach_pdu_t* src_prach_pdu, nfapi_nr_prach_pdu_t* dst_prach_pdu)
{
dst_prach_pdu->phys_cell_id = src_prach_pdu->phys_cell_id;
dst_prach_pdu->num_prach_ocas = src_prach_pdu->num_prach_ocas;
dst_prach_pdu->prach_format = src_prach_pdu->prach_format;
dst_prach_pdu->num_ra = src_prach_pdu->num_ra;
dst_prach_pdu->prach_start_symbol = src_prach_pdu->prach_start_symbol;
dst_prach_pdu->num_cs = src_prach_pdu->num_cs;
dst_prach_pdu->beamforming.trp_scheme = src_prach_pdu->beamforming.trp_scheme;
dst_prach_pdu->beamforming.num_prgs = src_prach_pdu->beamforming.num_prgs;
dst_prach_pdu->beamforming.prg_size = src_prach_pdu->beamforming.prg_size;
dst_prach_pdu->beamforming.dig_bf_interface = src_prach_pdu->beamforming.dig_bf_interface;
if (src_prach_pdu->beamforming.num_prgs > 0) {
dst_prach_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx =
src_prach_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx;
}
}
void cp_nr_ul_tti_req_pusch_pdu(const nfapi_nr_pusch_pdu_t* src_pusch_pdu, nfapi_nr_pusch_pdu_t* dst_pusch_pdu)
{
// Copy common fields
dst_pusch_pdu->pdu_bit_map = src_pusch_pdu->pdu_bit_map;
dst_pusch_pdu->rnti = src_pusch_pdu->rnti;
dst_pusch_pdu->handle = src_pusch_pdu->handle;
dst_pusch_pdu->bwp_size = src_pusch_pdu->bwp_size;
dst_pusch_pdu->bwp_start = src_pusch_pdu->bwp_start;
dst_pusch_pdu->subcarrier_spacing = src_pusch_pdu->subcarrier_spacing;
dst_pusch_pdu->cyclic_prefix = src_pusch_pdu->cyclic_prefix;
dst_pusch_pdu->target_code_rate = src_pusch_pdu->target_code_rate;
dst_pusch_pdu->qam_mod_order = src_pusch_pdu->qam_mod_order;
dst_pusch_pdu->mcs_index = src_pusch_pdu->mcs_index;
dst_pusch_pdu->mcs_table = src_pusch_pdu->mcs_table;
dst_pusch_pdu->transform_precoding = src_pusch_pdu->transform_precoding;
dst_pusch_pdu->data_scrambling_id = src_pusch_pdu->data_scrambling_id;
dst_pusch_pdu->nrOfLayers = src_pusch_pdu->nrOfLayers;
dst_pusch_pdu->ul_dmrs_symb_pos = src_pusch_pdu->ul_dmrs_symb_pos;
dst_pusch_pdu->dmrs_config_type = src_pusch_pdu->dmrs_config_type;
dst_pusch_pdu->ul_dmrs_scrambling_id = src_pusch_pdu->ul_dmrs_scrambling_id;
dst_pusch_pdu->pusch_identity = src_pusch_pdu->pusch_identity;
dst_pusch_pdu->scid = src_pusch_pdu->scid;
dst_pusch_pdu->num_dmrs_cdm_grps_no_data = src_pusch_pdu->num_dmrs_cdm_grps_no_data;
dst_pusch_pdu->dmrs_ports = src_pusch_pdu->dmrs_ports;
dst_pusch_pdu->resource_alloc = src_pusch_pdu->resource_alloc;
memcpy(dst_pusch_pdu->rb_bitmap, src_pusch_pdu->rb_bitmap, sizeof(src_pusch_pdu->rb_bitmap));
dst_pusch_pdu->rb_start = src_pusch_pdu->rb_start;
dst_pusch_pdu->rb_size = src_pusch_pdu->rb_size;
dst_pusch_pdu->vrb_to_prb_mapping = src_pusch_pdu->vrb_to_prb_mapping;
dst_pusch_pdu->frequency_hopping = src_pusch_pdu->frequency_hopping;
dst_pusch_pdu->tx_direct_current_location = src_pusch_pdu->tx_direct_current_location;
dst_pusch_pdu->uplink_frequency_shift_7p5khz = src_pusch_pdu->uplink_frequency_shift_7p5khz;
dst_pusch_pdu->start_symbol_index = src_pusch_pdu->start_symbol_index;
dst_pusch_pdu->nr_of_symbols = src_pusch_pdu->nr_of_symbols;
// Copy optional data if present
if (src_pusch_pdu->pdu_bit_map & 0x01) // data
memcpy(&dst_pusch_pdu->pusch_data, &src_pusch_pdu->pusch_data, sizeof(nfapi_nr_pusch_data_t));
if (src_pusch_pdu->pdu_bit_map & 0x10) // UCI
memcpy(&dst_pusch_pdu->pusch_uci, &src_pusch_pdu->pusch_uci, sizeof(nfapi_nr_pusch_uci_t));
if (src_pusch_pdu->pdu_bit_map & 0x100) { // PTRS
// Copy the PUSCH PTRS fields directly
dst_pusch_pdu->pusch_ptrs.num_ptrs_ports = src_pusch_pdu->pusch_ptrs.num_ptrs_ports;
dst_pusch_pdu->pusch_ptrs.ptrs_time_density = src_pusch_pdu->pusch_ptrs.ptrs_time_density;
dst_pusch_pdu->pusch_ptrs.ptrs_freq_density = src_pusch_pdu->pusch_ptrs.ptrs_freq_density;
dst_pusch_pdu->pusch_ptrs.ul_ptrs_power = src_pusch_pdu->pusch_ptrs.ul_ptrs_power;
for (int j = 0; j < src_pusch_pdu->pusch_ptrs.num_ptrs_ports; j++) {
dst_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_port_index = src_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_port_index;
dst_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_dmrs_port = src_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_dmrs_port;
dst_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_re_offset = src_pusch_pdu->pusch_ptrs.ptrs_ports_list[j].ptrs_re_offset;
}
}
if (src_pusch_pdu->pdu_bit_map & 0x1000) // DFTS
memcpy(&dst_pusch_pdu->dfts_ofdm, &src_pusch_pdu->dfts_ofdm, sizeof(nfapi_nr_dfts_ofdm_t));
dst_pusch_pdu->beamforming.trp_scheme = src_pusch_pdu->beamforming.trp_scheme;
dst_pusch_pdu->beamforming.num_prgs = src_pusch_pdu->beamforming.num_prgs;
dst_pusch_pdu->beamforming.prg_size = src_pusch_pdu->beamforming.prg_size;
dst_pusch_pdu->beamforming.dig_bf_interface = src_pusch_pdu->beamforming.dig_bf_interface;
if (src_pusch_pdu->beamforming.num_prgs > 0)
dst_pusch_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx =
src_pusch_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx;
memcpy(&dst_pusch_pdu->maintenance_parms_v3,
&src_pusch_pdu->maintenance_parms_v3,
sizeof(nfapi_v3_pdsch_maintenance_parameters_t));
}
void cp_nr_ul_tti_req_pucch_pdu(const nfapi_nr_pucch_pdu_t* src_pucch_pdu, nfapi_nr_pucch_pdu_t* dst_pucch_pdu)
{
// Copy common fields
dst_pucch_pdu->rnti = src_pucch_pdu->rnti;
dst_pucch_pdu->handle = src_pucch_pdu->handle;
dst_pucch_pdu->bwp_size = src_pucch_pdu->bwp_size;
dst_pucch_pdu->bwp_start = src_pucch_pdu->bwp_start;
dst_pucch_pdu->subcarrier_spacing = src_pucch_pdu->subcarrier_spacing;
dst_pucch_pdu->cyclic_prefix = src_pucch_pdu->cyclic_prefix;
dst_pucch_pdu->format_type = src_pucch_pdu->format_type;
dst_pucch_pdu->multi_slot_tx_indicator = src_pucch_pdu->multi_slot_tx_indicator;
dst_pucch_pdu->pi_2bpsk = src_pucch_pdu->pi_2bpsk;
dst_pucch_pdu->prb_start = src_pucch_pdu->prb_start;
dst_pucch_pdu->prb_size = src_pucch_pdu->prb_size;
dst_pucch_pdu->start_symbol_index = src_pucch_pdu->start_symbol_index;
dst_pucch_pdu->nr_of_symbols = src_pucch_pdu->nr_of_symbols;
dst_pucch_pdu->freq_hop_flag = src_pucch_pdu->freq_hop_flag;
dst_pucch_pdu->second_hop_prb = src_pucch_pdu->second_hop_prb;
dst_pucch_pdu->group_hop_flag = src_pucch_pdu->group_hop_flag;
dst_pucch_pdu->sequence_hop_flag = src_pucch_pdu->sequence_hop_flag;
dst_pucch_pdu->hopping_id = src_pucch_pdu->hopping_id;
dst_pucch_pdu->initial_cyclic_shift = src_pucch_pdu->initial_cyclic_shift;
dst_pucch_pdu->data_scrambling_id = src_pucch_pdu->data_scrambling_id;
dst_pucch_pdu->time_domain_occ_idx = src_pucch_pdu->time_domain_occ_idx;
dst_pucch_pdu->pre_dft_occ_idx = src_pucch_pdu->pre_dft_occ_idx;
dst_pucch_pdu->pre_dft_occ_len = src_pucch_pdu->pre_dft_occ_len;
dst_pucch_pdu->add_dmrs_flag = src_pucch_pdu->add_dmrs_flag;
dst_pucch_pdu->dmrs_scrambling_id = src_pucch_pdu->dmrs_scrambling_id;
dst_pucch_pdu->dmrs_cyclic_shift = src_pucch_pdu->dmrs_cyclic_shift;
dst_pucch_pdu->sr_flag = src_pucch_pdu->sr_flag;
dst_pucch_pdu->bit_len_harq = src_pucch_pdu->bit_len_harq;
dst_pucch_pdu->bit_len_csi_part1 = src_pucch_pdu->bit_len_csi_part1;
dst_pucch_pdu->bit_len_csi_part2 = src_pucch_pdu->bit_len_csi_part2;
dst_pucch_pdu->beamforming.trp_scheme = src_pucch_pdu->beamforming.trp_scheme;
dst_pucch_pdu->beamforming.num_prgs = src_pucch_pdu->beamforming.num_prgs;
dst_pucch_pdu->beamforming.prg_size = src_pucch_pdu->beamforming.prg_size;
dst_pucch_pdu->beamforming.dig_bf_interface = src_pucch_pdu->beamforming.dig_bf_interface;
if (src_pucch_pdu->beamforming.num_prgs > 0)
dst_pucch_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx =
src_pucch_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx;
}
void cp_nr_ul_tti_req_srs_pdu(const nfapi_nr_srs_pdu_t* src_srs_pdu, nfapi_nr_srs_pdu_t* dst_srs_pdu)
{
dst_srs_pdu->rnti = src_srs_pdu->rnti;
dst_srs_pdu->handle = src_srs_pdu->handle;
dst_srs_pdu->bwp_size = src_srs_pdu->bwp_size;
dst_srs_pdu->bwp_start = src_srs_pdu->bwp_start;
dst_srs_pdu->subcarrier_spacing = src_srs_pdu->subcarrier_spacing;
dst_srs_pdu->cyclic_prefix = src_srs_pdu->cyclic_prefix;
dst_srs_pdu->num_ant_ports = src_srs_pdu->num_ant_ports;
dst_srs_pdu->num_symbols = src_srs_pdu->num_symbols;
dst_srs_pdu->num_repetitions = src_srs_pdu->num_repetitions;
dst_srs_pdu->time_start_position = src_srs_pdu->time_start_position;
dst_srs_pdu->config_index = src_srs_pdu->config_index;
dst_srs_pdu->sequence_id = src_srs_pdu->sequence_id;
dst_srs_pdu->bandwidth_index = src_srs_pdu->bandwidth_index;
dst_srs_pdu->comb_size = src_srs_pdu->comb_size;
dst_srs_pdu->comb_offset = src_srs_pdu->comb_offset;
dst_srs_pdu->cyclic_shift = src_srs_pdu->cyclic_shift;
dst_srs_pdu->frequency_position = src_srs_pdu->frequency_position;
dst_srs_pdu->frequency_shift = src_srs_pdu->frequency_shift;
dst_srs_pdu->frequency_hopping = src_srs_pdu->frequency_hopping;
dst_srs_pdu->group_or_sequence_hopping = src_srs_pdu->group_or_sequence_hopping;
dst_srs_pdu->resource_type = src_srs_pdu->resource_type;
dst_srs_pdu->t_srs = src_srs_pdu->t_srs;
dst_srs_pdu->t_offset = src_srs_pdu->t_offset;
// beamforming
dst_srs_pdu->beamforming.trp_scheme = src_srs_pdu->beamforming.trp_scheme;
dst_srs_pdu->beamforming.num_prgs = src_srs_pdu->beamforming.num_prgs;
dst_srs_pdu->beamforming.prg_size = src_srs_pdu->beamforming.prg_size;
dst_srs_pdu->beamforming.dig_bf_interface = src_srs_pdu->beamforming.dig_bf_interface;
dst_srs_pdu->beamforming.prgs_list = src_srs_pdu->beamforming.prgs_list;
if (src_srs_pdu->beamforming.num_prgs > 0)
dst_srs_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx =
src_srs_pdu->beamforming.prgs_list->dig_bf_interface_list->beam_idx;
// srs_parameters_v4
dst_srs_pdu->srs_parameters_v4.srs_bandwidth_size = src_srs_pdu->srs_parameters_v4.srs_bandwidth_size;
dst_srs_pdu->srs_parameters_v4.symbol_list->srs_bandwidth_start = src_srs_pdu->srs_parameters_v4.symbol_list->srs_bandwidth_start;
dst_srs_pdu->srs_parameters_v4.symbol_list->sequence_group = src_srs_pdu->srs_parameters_v4.symbol_list->sequence_group;
dst_srs_pdu->srs_parameters_v4.symbol_list->sequence_number = src_srs_pdu->srs_parameters_v4.symbol_list->sequence_number;
dst_srs_pdu->srs_parameters_v4.usage = src_srs_pdu->srs_parameters_v4.usage;
memcpy(dst_srs_pdu->srs_parameters_v4.report_type,
src_srs_pdu->srs_parameters_v4.report_type,
sizeof(src_srs_pdu->srs_parameters_v4.report_type));
dst_srs_pdu->srs_parameters_v4.singular_Value_representation = src_srs_pdu->srs_parameters_v4.singular_Value_representation;
dst_srs_pdu->srs_parameters_v4.iq_representation = src_srs_pdu->srs_parameters_v4.iq_representation;
dst_srs_pdu->srs_parameters_v4.prg_size = src_srs_pdu->srs_parameters_v4.prg_size;
dst_srs_pdu->srs_parameters_v4.num_total_ue_antennas = src_srs_pdu->srs_parameters_v4.num_total_ue_antennas;
dst_srs_pdu->srs_parameters_v4.ue_antennas_in_this_srs_resource_set =
src_srs_pdu->srs_parameters_v4.ue_antennas_in_this_srs_resource_set;
dst_srs_pdu->srs_parameters_v4.sampled_ue_antennas = src_srs_pdu->srs_parameters_v4.sampled_ue_antennas;
dst_srs_pdu->srs_parameters_v4.report_scope = src_srs_pdu->srs_parameters_v4.report_scope;
dst_srs_pdu->srs_parameters_v4.num_ul_spatial_streams_ports = src_srs_pdu->srs_parameters_v4.num_ul_spatial_streams_ports;
memcpy(dst_srs_pdu->srs_parameters_v4.Ul_spatial_stream_ports,
src_srs_pdu->srs_parameters_v4.Ul_spatial_stream_ports,
sizeof(src_srs_pdu->srs_parameters_v4.Ul_spatial_stream_ports));
}
static void cp_nr_ul_tti_req(nfapi_nr_ul_tti_request_t* dst, const nfapi_nr_ul_tti_request_t* src)
{
dst->header = src->header;
dst->SFN = src->SFN;
dst->Slot = src->Slot;
dst->n_pdus = src->n_pdus;
dst->rach_present = src->rach_present;
dst->n_ulsch = src->n_ulsch;
dst->n_ulcch = src->n_ulcch;
dst->n_group = src->n_group;
// LOG_I(PHY,"cp_nr_ul_tti_req: dst->n_pdus=%d\n", dst->n_pdus);
for (int i = 0; i < dst->n_pdus; ++i) {
dst->pdus_list[i].pdu_type = src->pdus_list[i].pdu_type;
dst->pdus_list[i].pdu_size = src->pdus_list[i].pdu_size;
switch (src->pdus_list[i].pdu_type) {
case 0: // PRACH PDU
cp_nr_ul_tti_req_prach_pdu(&src->pdus_list[i].prach_pdu, &dst->pdus_list[i].prach_pdu);
break;
case 1: // PUSCH PDU
cp_nr_ul_tti_req_pusch_pdu(&src->pdus_list[i].pusch_pdu, &dst->pdus_list[i].pusch_pdu);
break;
case 2: // PUCCH PDU
cp_nr_ul_tti_req_pucch_pdu(&src->pdus_list[i].pucch_pdu, &dst->pdus_list[i].pucch_pdu);
break;
case 3: // SRS PDU
cp_nr_ul_tti_req_srs_pdu(&src->pdus_list[i].srs_pdu, &dst->pdus_list[i].srs_pdu);
break;
}
}
for (int i = 0; i < dst->n_group; ++i) {
dst->groups_list[i].n_ue = src->groups_list[i].n_ue;
for (int j = 0; j < src->groups_list[i].n_ue; ++j) {
dst->groups_list[i].ue_list[j].pdu_idx = src->groups_list[i].ue_list[j].pdu_idx;
}
}
}
void pnf_handle_ul_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
{
//NFAPI_TRACE(NFAPI_TRACE_INFO, "UL_CONFIG.req Received\n");
nfapi_nr_ul_tti_request_t* req = allocate_nfapi_ul_tti_request(pnf_p7);
if(req == NULL)
{
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to allocate nfapi_ul_tti_request structure\n");
return;
}
int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, req, sizeof(nfapi_nr_ul_tti_request_t), &(pnf_p7->_public.codec_config));
nfapi_nr_ul_tti_request_t req;
int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(nfapi_nr_ul_tti_request_t), &(pnf_p7->_public.codec_config));
if(unpack_result == 0)
{
......@@ -1611,42 +1818,28 @@ void pnf_handle_ul_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
return;
}
if(is_nr_p7_request_in_window(req->SFN,req->Slot, "ul_tti_request", pnf_p7))
if(is_nr_p7_request_in_window(req.SFN,req.Slot, "ul_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);
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
NFAPI_TRACE(NFAPI_TRACE_DEBUG,"%s() %ld.%09ld POPULATE UL_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(pnf_p7->slot_buffer[buffer_index].ul_tti_req != 0)
{
//NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing ul_config_req at index %d (%d/%d)",
// pMyPhyInfo->sfnSf, bufferIdx,
// SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf));
deallocate_nfapi_ul_tti_request(pnf_p7->slot_buffer[buffer_index].ul_tti_req, pnf_p7);
}
NFAPI_TRACE(NFAPI_TRACE_DEBUG,"%s() %ld.%09ld POPULATE UL_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);
//filling slot buffer
pnf_p7->slot_buffer[buffer_index].sfn = req->SFN;
pnf_p7->slot_buffer[buffer_index].slot = req->Slot;
pnf_p7->slot_buffer[buffer_index].ul_tti_req = req;
pnf_p7->slot_buffer[buffer_index].sfn = req.SFN;
pnf_p7->slot_buffer[buffer_index].slot = req.Slot;
cp_nr_ul_tti_req(&pnf_p7->slot_buffer[buffer_index].ul_tti_req, &req);
pnf_p7->stats.ul_tti_ontime++;
}
else
{
NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] NOT storing ul_tti_req OUTSIDE OF TRANSMIT BUFFER WINDOW SFN/SLOT %d\n", NFAPI_SFNSLOT2DEC(pnf_p7->sfn,pnf_p7->slot), NFAPI_SFNSLOT2DEC(req->SFN,req->Slot));
deallocate_nfapi_ul_tti_request(req, pnf_p7);
NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] NOT storing ul_tti_req OUTSIDE OF TRANSMIT BUFFER WINDOW SFN/SLOT %d\n", NFAPI_SFNSLOT2DEC(pnf_p7->sfn,pnf_p7->slot), NFAPI_SFNSLOT2DEC(req.SFN,req.Slot));
if(pnf_p7->_public.timing_info_mode_aperiodic)
{
pnf_p7->timing_info_aperiodic_send = 1;
}
pnf_p7->stats.ul_tti_late++;
}
......@@ -1660,7 +1853,6 @@ void pnf_handle_ul_tti_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
else
{
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack ul_tti_req\n");
deallocate_nfapi_ul_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