Handle UL_TTI.request more efficiently
Same as parent. Co-authored-by: hsum <ming-hong.hsu@eurecom.fr> Co-authored-by: chenyi <Yi-Quan.Chen@eurecom.fr> Co-authored-by: Rúben Soares Silva <rsilva@allbesmart.pt>
This commit is contained in:
committed by
Robert Schmidt
co-authored by
chenyi
Rúben Soares Silva
parent
282ee77104
commit
cba2f92c8a
@@ -575,7 +575,7 @@ typedef struct
|
||||
uint16_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_tti_request_t ul_tti_req;
|
||||
nfapi_nr_ul_dci_request_t ul_dci_req;
|
||||
nfapi_nr_tx_data_request_t tx_data_req;
|
||||
|
||||
|
||||
@@ -185,13 +185,6 @@ void deallocate_nfapi_dl_config_request(nfapi_dl_config_request_t* req, pnf_p7_t
|
||||
pnf_p7_free(pnf_p7, req);
|
||||
}
|
||||
|
||||
nfapi_nr_ul_tti_request_t* allocate_nfapi_ul_tti_request(pnf_p7_t* pnf_p7)
|
||||
{
|
||||
void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_nr_ul_tti_request_t));
|
||||
//printf("%s() ptr:%p\n", __FUNCTION__, ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
nfapi_ul_config_request_t* allocate_nfapi_ul_config_request(pnf_p7_t* pnf_p7)
|
||||
{
|
||||
void *ptr= pnf_p7_malloc(pnf_p7, sizeof(nfapi_ul_config_request_t));
|
||||
@@ -199,23 +192,6 @@ nfapi_ul_config_request_t* allocate_nfapi_ul_config_request(pnf_p7_t* pnf_p7)
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void deallocate_nfapi_ul_tti_request(nfapi_nr_ul_tti_request_t* req, pnf_p7_t* pnf_p7)
|
||||
{
|
||||
//printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->ul_config_request_body.ul_config_pdu_list);
|
||||
/*if(pnf_p7->_public.codec_config.deallocate)
|
||||
{
|
||||
(pnf_p7->_public.codec_config.deallocate)(req->pdus_list);
|
||||
(pnf_p7->_public.codec_config.deallocate)(req->groups_list);
|
||||
}
|
||||
else
|
||||
{
|
||||
free(req->pdus_list);
|
||||
free(req->groups_list);
|
||||
}
|
||||
*/
|
||||
pnf_p7_free(pnf_p7, req);
|
||||
}
|
||||
|
||||
void deallocate_nfapi_ul_config_request(nfapi_ul_config_request_t* req, pnf_p7_t* pnf_p7)
|
||||
{
|
||||
//printf("%s() SFN/SF:%d %s req:%p pdu_list:%p\n", __FUNCTION__, NFAPI_SFNSF2DEC(req->sfn_sf), pnf_p7->_public.codec_config.deallocate ? "DEALLOCATE" : "FREE", req, req->ul_config_request_body.ul_config_pdu_list);
|
||||
@@ -883,11 +859,12 @@ 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);
|
||||
tx_slot_buffer->ul_tti_req.SFN = -1;
|
||||
tx_slot_buffer->ul_tti_req.Slot = -1;
|
||||
}
|
||||
|
||||
if(tx_slot_buffer->tx_data_req.Number_of_PDUs > 0 && tx_slot_buffer->tx_data_req.SFN == sfn_tx && tx_slot_buffer->tx_data_req.Slot == slot_tx)
|
||||
@@ -916,19 +893,9 @@ 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)
|
||||
if ( rx_slot_buffer->dl_tti_req == 0)
|
||||
{
|
||||
pnf_p7->slot_buffer[buffer_index_rx].sfn = -1;
|
||||
pnf_p7->slot_buffer[buffer_index_rx].slot = -1;
|
||||
@@ -1512,80 +1479,52 @@ void pnf_handle_dl_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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");
|
||||
uint16_t frame, slot;
|
||||
if (peek_nr_nfapi_p7_sfn_slot(pRecvMsg, recvMsgLen, &frame, &slot)) {
|
||||
if (pthread_mutex_lock(&(pnf_p7->mutex)) != 0) {
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to lock mutex\n");
|
||||
return;
|
||||
}
|
||||
|
||||
nfapi_nr_ul_tti_request_t* req = allocate_nfapi_ul_tti_request(pnf_p7);
|
||||
if (check_nr_nfapi_p7_slot_type(frame, slot, "UL_TTI.request", NR_UPLINK_SLOT)
|
||||
&& is_nr_p7_request_in_window(frame, slot, "ul_tti_request", pnf_p7)) {
|
||||
uint32_t sfn_slot_dec = NFAPI_SFNSLOT2DEC(frame, slot);
|
||||
uint8_t buffer_index = (sfn_slot_dec % 20);
|
||||
pnf_p7->slot_buffer[buffer_index].sfn = frame;
|
||||
pnf_p7->slot_buffer[buffer_index].slot = slot;
|
||||
nfapi_nr_ul_tti_request_t* req = &pnf_p7->slot_buffer[buffer_index].ul_tti_req;
|
||||
pnf_p7->stats.ul_tti_ontime++;
|
||||
|
||||
if(req == NULL)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to allocate nfapi_ul_tti_request structure\n");
|
||||
return;
|
||||
}
|
||||
NFAPI_TRACE(NFAPI_TRACE_DEBUG,
|
||||
"POPULATE UL_TTI.request current tx sfn/slot:%d.%d p7 msg sfn/slot: %d.%d buffer_index:%d\n",
|
||||
pnf_p7->sfn,
|
||||
pnf_p7->slot,
|
||||
frame,
|
||||
slot,
|
||||
buffer_index);
|
||||
|
||||
int unpack_result = nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, req, sizeof(nfapi_nr_ul_tti_request_t), &(pnf_p7->_public.codec_config));
|
||||
if (nfapi_nr_p7_message_unpack(pRecvMsg, recvMsgLen, req, sizeof(*req), &(pnf_p7->_public.codec_config)) != 0)
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "failed to unpack UL_TTI.request\n");
|
||||
} 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(frame, slot));
|
||||
if (pnf_p7->_public.timing_info_mode_aperiodic)
|
||||
pnf_p7->timing_info_aperiodic_send = 1;
|
||||
|
||||
if(unpack_result == 0)
|
||||
{
|
||||
if(pthread_mutex_lock(&(pnf_p7->mutex)) != 0)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to lock mutex\n");
|
||||
return;
|
||||
}
|
||||
pnf_p7->stats.ul_tti_late++;
|
||||
}
|
||||
|
||||
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);
|
||||
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);
|
||||
}
|
||||
|
||||
//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->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);
|
||||
|
||||
if(pnf_p7->_public.timing_info_mode_aperiodic)
|
||||
{
|
||||
pnf_p7->timing_info_aperiodic_send = 1;
|
||||
}
|
||||
|
||||
pnf_p7->stats.ul_tti_late++;
|
||||
}
|
||||
|
||||
if(pthread_mutex_unlock(&(pnf_p7->mutex)) != 0)
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to unlock mutex\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack ul_tti_req\n");
|
||||
deallocate_nfapi_ul_tti_request(req, pnf_p7);
|
||||
}
|
||||
if (pthread_mutex_unlock(&(pnf_p7->mutex)) != 0) {
|
||||
NFAPI_TRACE(NFAPI_TRACE_INFO, "failed to unlock mutex\n");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
NFAPI_TRACE(NFAPI_TRACE_ERROR, "Failed to unpack ul_tti_req\n");
|
||||
}
|
||||
}
|
||||
|
||||
void pnf_handle_ul_config_request(void* pRecvMsg, int recvMsgLen, pnf_p7_t* pnf_p7)
|
||||
|
||||
Reference in New Issue
Block a user