From c22fe2bab6b41dc60ffce028544c2d937e87784a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20da=20Silva?= Date: Thu, 2 Nov 2023 10:55:50 +0000 Subject: [PATCH 1/4] Fix PRACH PDU beamforming allocation to allocate at least 1 member, avoiding creating vector of size 0 --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 8f7a7c2804..952e9c06f9 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -941,11 +941,13 @@ static uint8_t pack_ul_tti_request_prach_pdu(nfapi_nr_prach_pdu_t *prach_pdu, ui prach_pdu->beamforming.dig_bf_interface = 0; if (prach_pdu->beamforming.prgs_list == NULL) { - prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); + prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs == 0 ? 1 : prach_pdu->beamforming.num_prgs, + sizeof(*prach_pdu->beamforming.prgs_list)); } if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL) { prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list = - calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); + calloc(prach_pdu->beamforming.dig_bf_interface == 0 ? 1 : prach_pdu->beamforming.dig_bf_interface, + sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); } prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = 0; @@ -4771,11 +4773,13 @@ static uint8_t unpack_ul_tti_request_prach_pdu(void *tlv, uint8_t **ppReadPacked } // TODO: ignoring beamforming tlv for now if (prach_pdu->beamforming.prgs_list == NULL) { - prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); + prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs == 0 ? 1 : prach_pdu->beamforming.num_prgs, + sizeof(*prach_pdu->beamforming.prgs_list)); } if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL) { prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list = - calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); + calloc(prach_pdu->beamforming.dig_bf_interface == 0 ? 1 : prach_pdu->beamforming.dig_bf_interface, + sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); } // Pack RX Beamforming PDU if (!(pull16(ppReadPackedMsg, &prach_pdu->beamforming.num_prgs, end) From f993b075f87c3d671ec489c65470502d4d5e010a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20da=20Silva?= Date: Tue, 7 Nov 2023 10:35:11 +0000 Subject: [PATCH 2/4] Change Prach PDU Beamforming allocation for pack/unpack procedures --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 43 ++++++++++++++------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 952e9c06f9..7a8d88c4d7 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -940,16 +940,19 @@ static uint8_t pack_ul_tti_request_prach_pdu(nfapi_nr_prach_pdu_t *prach_pdu, ui prach_pdu->beamforming.prg_size = 0; prach_pdu->beamforming.dig_bf_interface = 0; - if (prach_pdu->beamforming.prgs_list == NULL) { - prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs == 0 ? 1 : prach_pdu->beamforming.num_prgs, - sizeof(*prach_pdu->beamforming.prgs_list)); + if (prach_pdu->beamforming.prgs_list == NULL && prach_pdu->beamforming.num_prgs > 0) { + prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); + // If the first one is NULL, the other indexes, if existing, are most likely also NULL + if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL && prach_pdu->beamforming.dig_bf_interface > 0) { + for (int prg_idx = 0; prg_idx < prach_pdu->beamforming.num_prgs; prg_idx++) { + prach_pdu->beamforming.prgs_list[prg_idx].dig_bf_interface_list = + calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); + for (int dbi_idx = 0; dbi_idx < prach_pdu->beamforming.dig_bf_interface; dbi_idx++) { + prach_pdu->beamforming.prgs_list[prg_idx].dig_bf_interface_list[dbi_idx].beam_idx = 0; + } + } + } } - if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL) { - prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list = - calloc(prach_pdu->beamforming.dig_bf_interface == 0 ? 1 : prach_pdu->beamforming.dig_bf_interface, - sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); - } - prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list[0].beam_idx = 0; // Pack RX Beamforming PDU if (!(push16(prach_pdu->beamforming.num_prgs, ppWritePackedMsg, end) @@ -4771,22 +4774,22 @@ static uint8_t unpack_ul_tti_request_prach_pdu(void *tlv, uint8_t **ppReadPacked && pull8(ppReadPackedMsg, &prach_pdu->prach_start_symbol, end) && pull16(ppReadPackedMsg, &prach_pdu->num_cs, end))) { return 0; } - // TODO: ignoring beamforming tlv for now - if (prach_pdu->beamforming.prgs_list == NULL) { - prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs == 0 ? 1 : prach_pdu->beamforming.num_prgs, - sizeof(*prach_pdu->beamforming.prgs_list)); - } - if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL) { - prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list = - calloc(prach_pdu->beamforming.dig_bf_interface == 0 ? 1 : prach_pdu->beamforming.dig_bf_interface, - sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); - } - // Pack RX Beamforming PDU + // Unpack RX Beamforming PDU if (!(pull16(ppReadPackedMsg, &prach_pdu->beamforming.num_prgs, end) && pull16(ppReadPackedMsg, &prach_pdu->beamforming.prg_size, end) && pull8(ppReadPackedMsg, &prach_pdu->beamforming.dig_bf_interface, end))) { return 0; } + // TODO: ignoring beamforming tlv for now + if (prach_pdu->beamforming.num_prgs > 0) { + prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); + if (prach_pdu->beamforming.dig_bf_interface > 0) { + for(int prg_idx = 0; prg_idx < prach_pdu->beamforming.num_prgs;prg_idx++){ + prach_pdu->beamforming.prgs_list[prg_idx].dig_bf_interface_list = + calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); + } + } + } for (int prg = 0; prg < prach_pdu->beamforming.num_prgs; prg++) { for (int digBFInterface = 0; digBFInterface < prach_pdu->beamforming.dig_bf_interface; digBFInterface++) { if (!pull16(ppReadPackedMsg, &prach_pdu->beamforming.prgs_list[prg].dig_bf_interface_list[digBFInterface].beam_idx, end)) { From e6d3a367de8738e4cdd68472561182f9376636aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20da=20Silva?= Date: Tue, 7 Nov 2023 15:37:02 +0000 Subject: [PATCH 3/4] Remove PRACH PDU Beamforming allocation from pack procedure, Assert if it has values != 0 --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 7a8d88c4d7..21562a399e 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -32,6 +32,7 @@ #include #include #include +#include "assertions.h" #include #include @@ -934,24 +935,8 @@ static uint8_t pack_ul_tti_request_prach_pdu(nfapi_nr_prach_pdu_t *prach_pdu, ui return 0; } - // TODO: put these hardoded values elsewhere - // Beamforming - prach_pdu->beamforming.num_prgs = 0; - prach_pdu->beamforming.prg_size = 0; - prach_pdu->beamforming.dig_bf_interface = 0; - - if (prach_pdu->beamforming.prgs_list == NULL && prach_pdu->beamforming.num_prgs > 0) { - prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); - // If the first one is NULL, the other indexes, if existing, are most likely also NULL - if (prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list == NULL && prach_pdu->beamforming.dig_bf_interface > 0) { - for (int prg_idx = 0; prg_idx < prach_pdu->beamforming.num_prgs; prg_idx++) { - prach_pdu->beamforming.prgs_list[prg_idx].dig_bf_interface_list = - calloc(prach_pdu->beamforming.dig_bf_interface, sizeof(*prach_pdu->beamforming.prgs_list[0].dig_bf_interface_list)); - for (int dbi_idx = 0; dbi_idx < prach_pdu->beamforming.dig_bf_interface; dbi_idx++) { - prach_pdu->beamforming.prgs_list[prg_idx].dig_bf_interface_list[dbi_idx].beam_idx = 0; - } - } - } + if (prach_pdu->beamforming.num_prgs > 0 || prach_pdu->beamforming.prg_size > 0 || prach_pdu->beamforming.dig_bf_interface > 0) { + AssertFatal(1 == 0, "PRACH PDU Beamforming not supported yet"); } // Pack RX Beamforming PDU From fff5497f45de982bf44442b6e2c25234564ecb9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20da=20Silva?= Date: Thu, 9 Nov 2023 10:18:00 +0000 Subject: [PATCH 4/4] Remove leftover comment --- nfapi/open-nFAPI/nfapi/src/nfapi_p7.c | 1 - 1 file changed, 1 deletion(-) diff --git a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c index 21562a399e..e0868f8573 100644 --- a/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c +++ b/nfapi/open-nFAPI/nfapi/src/nfapi_p7.c @@ -4765,7 +4765,6 @@ static uint8_t unpack_ul_tti_request_prach_pdu(void *tlv, uint8_t **ppReadPacked && pull8(ppReadPackedMsg, &prach_pdu->beamforming.dig_bf_interface, end))) { return 0; } - // TODO: ignoring beamforming tlv for now if (prach_pdu->beamforming.num_prgs > 0) { prach_pdu->beamforming.prgs_list = calloc(prach_pdu->beamforming.num_prgs, sizeof(*prach_pdu->beamforming.prgs_list)); if (prach_pdu->beamforming.dig_bf_interface > 0) {