diff --git a/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h b/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h index 937edfc595d33ab7fcec09a5527a1082974b638f..2b32113b856f1525945a9539abac1bc3bddbd110 100644 --- a/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h +++ b/nfapi/open-nFAPI/pnf/public_inc/nfapi_pnf_interface.h @@ -576,7 +576,7 @@ typedef struct //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_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; //TODO: check these two later diff --git a/nfapi/open-nFAPI/pnf/src/pnf_p7.c b/nfapi/open-nFAPI/pnf/src/pnf_p7.c index c11969927f252e4c3218d012ddb00f4f666987d7..519d3ad08f23bd04ecbadc26df1e91c44e2a76cd 100644 --- a/nfapi/open-nFAPI/pnf/src/pnf_p7.c +++ b/nfapi/open-nFAPI/pnf/src/pnf_p7.c @@ -934,12 +934,12 @@ int pnf_p7_slot_ind(pnf_p7_t* pnf_p7, uint16_t phy_id, uint16_t sfn, uint16_t sl } - if(tx_slot_buffer->ul_dci_req!= 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); LOG_D(PHY, "Process ul_dci SFN/slot %d.%d buffer index: %d \n",sfn_tx,slot_tx,buffer_index_tx); // pnf_phy_ul_dci_req() - (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 @@ -951,13 +951,6 @@ 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); } - if(tx_slot_buffer->ul_dci_req != 0) - { - deallocate_nfapi_ul_dci_request(tx_slot_buffer->ul_dci_req, pnf_p7); - tx_slot_buffer->ul_dci_req = 0; - } - - //checking in the rx slot buffers to see if a p7 msg is present. if(rx_slot_buffer->ul_tti_req != 0) @@ -1743,20 +1736,28 @@ void pnf_handle_ul_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_ } } - -void pnf_handle_ul_dci_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) +static void cp_nr_ul_dci_req(nfapi_nr_ul_dci_request_t* dst, const nfapi_nr_ul_dci_request_t* src) { - //NFAPI_TRACE(NFAPI_TRACE_INFO, "HI_DCI0.req Received\n"); + dst->header = src->header; + dst->SFN = src->SFN; + dst->Slot = src->Slot; + dst->numPdus = src->numPdus; - nfapi_nr_ul_dci_request_t* req = allocate_nfapi_ul_dci_request(pnf_p7); + for (int i = 0; i < dst->numPdus; ++i) { + nfapi_nr_ul_dci_request_pdus_t* dst_pdu = &dst->ul_dci_pdu_list[i]; + const nfapi_nr_ul_dci_request_pdus_t* src_pdu = &src->ul_dci_pdu_list[i]; - if(req == NULL) - { - NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to allocate nfapi_ul_dci_request structure\n"); - return; - } + dst_pdu->PDUType = src_pdu->PDUType; + dst_pdu->PDUSize = src_pdu->PDUSize; + dst_pdu->pdcch_pdu = src_pdu->pdcch_pdu; + } +} - int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, req, sizeof(nfapi_nr_ul_dci_request_t), &pnf_p7->_public.codec_config); +void pnf_handle_ul_dci_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) +{ + nfapi_nr_ul_dci_request_t req; + + int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, &req, sizeof(nfapi_nr_ul_dci_request_t), &pnf_p7->_public.codec_config); if(unpack_result == 0) { @@ -1766,31 +1767,20 @@ void pnf_handle_ul_dci_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) return; } - if(is_nr_p7_request_in_window(req->SFN,req->Slot,"ul_dci_request", pnf_p7)) + if(is_nr_p7_request_in_window(req.SFN,req.Slot,"ul_dci_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; - if(pnf_p7->slot_buffer[buffer_index].ul_dci_req!= 0) - { - //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] Freeing hi_dci0_req at index %d (%d/%d)", - // pMyPhyInfo->sfnSf, bufferIdx, - // SFNSF2SFN(dreq->sfn_sf), SFNSF2SF(dreq->sfn_sf)); + pnf_p7->slot_buffer[buffer_index].sfn = req.SFN; + cp_nr_ul_dci_req(&pnf_p7->slot_buffer[buffer_index].ul_dci_req, &req); - deallocate_nfapi_ul_dci_request(pnf_p7->slot_buffer[buffer_index].ul_dci_req, pnf_p7); - } - - pnf_p7->slot_buffer[buffer_index].sfn = req->SFN; - pnf_p7->slot_buffer[buffer_index].ul_dci_req = req; pnf_p7->stats.ul_dci_ontime++; } else { - //NFAPI_TRACE(NFAPI_TRACE_NOTE, "[%d] NOT storing hi_dci0_req SFN/SF %d/%d\n", pMyPhyInfo->sfnSf, SFNSF2SFN(req->sfn_sf), SFNSF2SF(req->sfn_sf)); - deallocate_nfapi_ul_dci_request(req, pnf_p7); - if(pnf_p7->_public.timing_info_mode_aperiodic) { pnf_p7->timing_info_aperiodic_send = 1; @@ -1808,7 +1798,6 @@ void pnf_handle_ul_dci_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7) else { NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack UL DCI req\n"); - deallocate_nfapi_ul_dci_request(req, pnf_p7); } }