Merge remote-tracking branch 'origin/remove-xran-e' into integration_2026_w08 (!3936)
[FHI72] Remove support for xran E release All the use cases we tested with E release are working end-to-end with F release. The near future plan is to support K release which is ongoing in the MR !3444.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -69,11 +69,10 @@ Tested libxran releases:
|
|||||||
|
|
||||||
| Vendor |
|
| Vendor |
|
||||||
|-----------------------------------------|
|
|-----------------------------------------|
|
||||||
| `oran_e_maintenance_release_v1.0` |
|
|
||||||
| `oran_f_release_v1.0` |
|
| `oran_f_release_v1.0` |
|
||||||
|
|
||||||
|
|
||||||
**Note**: The libxran driver of OAI identifies the above E release version as "5.1.0" (E is fifth letter, then 1.0), and the above F release as "6.1.0".
|
**Note**: The libxran driver of OAI identifies the above F release version as "6.1.0" (F is the sixth letter, then 1.0).
|
||||||
|
|
||||||
### Configure your server
|
### Configure your server
|
||||||
|
|
||||||
@@ -375,14 +374,6 @@ cd ~/openairinterface5g/
|
|||||||
|
|
||||||
Download ORAN FHI DU library, checkout the correct version, and apply the correct patch (available in `oai_folder/cmake_targets/tools/oran_fhi_integration_patches`).
|
Download ORAN FHI DU library, checkout the correct version, and apply the correct patch (available in `oai_folder/cmake_targets/tools/oran_fhi_integration_patches`).
|
||||||
|
|
||||||
#### E release
|
|
||||||
```bash
|
|
||||||
git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git ~/phy
|
|
||||||
cd ~/phy
|
|
||||||
git checkout oran_e_maintenance_release_v1.0
|
|
||||||
git apply ~/openairinterface5g/cmake_targets/tools/oran_fhi_integration_patches/E/oaioran_E.patch
|
|
||||||
```
|
|
||||||
|
|
||||||
#### F release
|
#### F release
|
||||||
```bash
|
```bash
|
||||||
git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git ~/phy
|
git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git ~/phy
|
||||||
@@ -404,7 +395,6 @@ This feature is intended to enable experiments and future improvements on Arm sy
|
|||||||
```bash
|
```bash
|
||||||
cd ~/phy/fhi_lib/lib
|
cd ~/phy/fhi_lib/lib
|
||||||
make clean
|
make clean
|
||||||
RTE_SDK=~/dpdk-stable-20.11.9/ XRAN_DIR=~/phy/fhi_lib make XRAN_LIB_SO=1 # E release
|
|
||||||
WIRELESS_SDK_TOOLCHAIN=gcc RTE_SDK=~/dpdk-stable-20.11.9/ XRAN_DIR=~/phy/fhi_lib make XRAN_LIB_SO=1 # F release
|
WIRELESS_SDK_TOOLCHAIN=gcc RTE_SDK=~/dpdk-stable-20.11.9/ XRAN_DIR=~/phy/fhi_lib make XRAN_LIB_SO=1 # F release
|
||||||
...
|
...
|
||||||
[AR] build/libxran.so
|
[AR] build/libxran.so
|
||||||
@@ -967,7 +957,7 @@ Sample configuration files for OAI gNB, specific to the manufacturer of the radi
|
|||||||
4. Benetel 550 RU:
|
4. Benetel 550 RU:
|
||||||
[`gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf)
|
[`gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel550.conf)
|
||||||
[`gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf)
|
[`gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x2-benetel550.conf)
|
||||||
[`gnb.sa.band78.273prb.fhi72.2x2-benetel550-16b.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.2x2-benetel550-16b.conf) - only with E release; with F, UL U-plane fragmentation is not correct
|
[`gnb.sa.band78.273prb.fhi72.2x2-benetel550-16b.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.2x2-benetel550-16b.conf) - tested successfully with E release; with F, UL U-plane fragmentation is not correct
|
||||||
5. Metanoia RU:
|
5. Metanoia RU:
|
||||||
[`gnb.sa.band78.273prb.fhi72.4x4-metanoia.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-metanoia.conf)
|
[`gnb.sa.band78.273prb.fhi72.4x4-metanoia.conf`](../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-metanoia.conf)
|
||||||
|
|
||||||
|
|||||||
@@ -16,16 +16,15 @@ add_library(oran_fhlib_5g MODULE
|
|||||||
oran-init.c
|
oran-init.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set(E_VERSION 5.1.6)
|
|
||||||
set(F_VERSION 6.1.8)
|
set(F_VERSION 6.1.8)
|
||||||
|
|
||||||
find_package(xran REQUIRED)
|
find_package(xran REQUIRED)
|
||||||
if(xran_VERSION VERSION_EQUAL E_VERSION)
|
if(xran_VERSION MATCHES "5.*")
|
||||||
target_compile_definitions(oran_fhlib_5g PRIVATE E_RELEASE)
|
message(FATAL_ERROR "xran E release not supported starting from tag 2026.w08.\nPlease switch to F version ${F_VERSION}")
|
||||||
elseif(xran_VERSION VERSION_EQUAL F_VERSION)
|
elseif(xran_VERSION VERSION_EQUAL F_VERSION)
|
||||||
target_compile_definitions(oran_fhlib_5g PRIVATE F_RELEASE)
|
target_compile_definitions(oran_fhlib_5g PRIVATE F_RELEASE)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed ${E_VERSION} (E release) or ${F_VERSION} (F release)")
|
message(FATAL_ERROR "Found xran version ${xran_VERSION} but needed ${F_VERSION} (F release)")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Ignore xran-specific warning: we don't care/can't change the following warning, so suppress
|
# Ignore xran-specific warning: we don't care/can't change the following warning, so suppress
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ add_library(oran_fhlib_5g_mplane MODULE
|
|||||||
)
|
)
|
||||||
add_dependencies(oran_fhlib_5g_mplane oran_fhlib_5g)
|
add_dependencies(oran_fhlib_5g_mplane oran_fhlib_5g)
|
||||||
|
|
||||||
if(xran_VERSION VERSION_EQUAL E_VERSION)
|
if(xran_VERSION MATCHES "5.*")
|
||||||
target_compile_definitions(oran_fhlib_5g_mplane PRIVATE E_RELEASE)
|
message(FATAL_ERROR "xran E release not supported starting from tag 2026.w08.\nPlease switch to F version ${F_VERSION}")
|
||||||
elseif(xran_VERSION VERSION_EQUAL F_VERSION)
|
elseif(xran_VERSION VERSION_EQUAL F_VERSION)
|
||||||
target_compile_definitions(oran_fhlib_5g_mplane PRIVATE F_RELEASE)
|
target_compile_definitions(oran_fhlib_5g_mplane PRIVATE F_RELEASE)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+6
-44
@@ -94,7 +94,7 @@ void oai_xran_fh_rx_callback(void *pCallbackTag, xran_status_t status)
|
|||||||
LOG_D(HW, "rx_callback at %4d.%3d (subframe %d), rx_sym %d ru_id %d\n", frame, slot, subframe, rx_sym, ru_id);
|
LOG_D(HW, "rx_callback at %4d.%3d (subframe %d), rx_sym %d ru_id %d\n", frame, slot, subframe, rx_sym, ru_id);
|
||||||
|
|
||||||
if (rx_sym == 7) { // in F release this value is defined as XRAN_FULL_CB_SYM (full slot (offset + 7))
|
if (rx_sym == 7) { // in F release this value is defined as XRAN_FULL_CB_SYM (full slot (offset + 7))
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
for (int ru_idx = 0; ru_idx < num_ports; ru_idx++) {
|
for (int ru_idx = 0; ru_idx < num_ports; ru_idx++) {
|
||||||
struct xran_fh_config *fh_config = get_xran_fh_config(ru_idx);
|
struct xran_fh_config *fh_config = get_xran_fh_config(ru_idx);
|
||||||
oran_buf_list_t *bufs = get_xran_buffers(ru_idx);
|
oran_buf_list_t *bufs = get_xran_buffers(ru_idx);
|
||||||
@@ -415,22 +415,7 @@ int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot)
|
|||||||
uint8_t *pData;
|
uint8_t *pData;
|
||||||
struct xran_section_desc *p_sec_desc = NULL;
|
struct xran_section_desc *p_sec_desc = NULL;
|
||||||
struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm];
|
struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm];
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
uint32_t one_rb_size =
|
|
||||||
(((pRbElm->iqWidth == 0) || (pRbElm->iqWidth == 16)) ? (N_SC_PER_PRB * 2 * 2) : (3 * pRbElm->iqWidth + 1));
|
|
||||||
if (fh_init->mtu < num_totalRB * one_rb_size)
|
|
||||||
pData = bufs->dst[ant_id % nb_rx_per_ru][tti % XRAN_N_FE_BUF_LEN]
|
|
||||||
.pBuffers[sym_idx % XRAN_NUM_OF_SYMBOL_PER_SLOT]
|
|
||||||
.pData;
|
|
||||||
else {
|
|
||||||
p_sec_desc = pRbElm->p_sec_desc[sym_idx][0];
|
|
||||||
pData = p_sec_desc->pData;
|
|
||||||
}
|
|
||||||
numRB = num_totalRB;
|
|
||||||
startRB = start_totalRB;
|
|
||||||
{
|
|
||||||
{
|
|
||||||
#elif defined F_RELEASE
|
|
||||||
// UP_nRBSize & UP_nRBStart are for DL U-plane only
|
// UP_nRBSize & UP_nRBStart are for DL U-plane only
|
||||||
LOG_D(HW, "[%d.%d] idxElm[%d] startSym[%d]:numSym[%d] UP_startRB[%d]:UP_numRB[%d] sym_idx[%d] ant_id[%d] pRbElm->nRBStart[%d]:pRbElm->nRBSize[%d]\n", *frame, *slot, idxElm, pRbElm->nStartSymb, pRbElm->numSymb, pRbElm->UP_nRBStart, pRbElm->UP_nRBSize, sym_idx, ant_id, pRbElm->nRBStart, pRbElm->nRBSize);
|
LOG_D(HW, "[%d.%d] idxElm[%d] startSym[%d]:numSym[%d] UP_startRB[%d]:UP_numRB[%d] sym_idx[%d] ant_id[%d] pRbElm->nRBStart[%d]:pRbElm->nRBSize[%d]\n", *frame, *slot, idxElm, pRbElm->nStartSymb, pRbElm->numSymb, pRbElm->UP_nRBStart, pRbElm->UP_nRBSize, sym_idx, ant_id, pRbElm->nRBStart, pRbElm->nRBSize);
|
||||||
for (int idxDesc = 0; idxDesc < XRAN_MAX_FRAGMENT; idxDesc++) {
|
for (int idxDesc = 0; idxDesc < XRAN_MAX_FRAGMENT; idxDesc++) {
|
||||||
@@ -578,10 +563,7 @@ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp)
|
|||||||
for (uint32_t idxElm = 0; idxElm < pPrbMap->nPrbElm; idxElm++) {
|
for (uint32_t idxElm = 0; idxElm < pPrbMap->nPrbElm; idxElm++) {
|
||||||
struct xran_prb_elm *pRbElm = &pPrbMap->prbMap[idxElm];
|
struct xran_prb_elm *pRbElm = &pPrbMap->prbMap[idxElm];
|
||||||
int numRB, startRB;
|
int numRB, startRB;
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
numRB = pRbElm->nRBSize;
|
|
||||||
startRB = pRbElm->nRBStart;
|
|
||||||
#elif F_RELEASE
|
|
||||||
numRB = pRbElm->UP_nRBSize;
|
numRB = pRbElm->UP_nRBSize;
|
||||||
startRB = pRbElm->UP_nRBStart;
|
startRB = pRbElm->UP_nRBStart;
|
||||||
#endif
|
#endif
|
||||||
@@ -662,15 +644,11 @@ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp)
|
|||||||
p_prbMapElm->nBeamIndex = 0;
|
p_prbMapElm->nBeamIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// radio-transport fragmentation is not supported in both E and F releases;
|
// radio-transport fragmentation is not supported in xran F release;
|
||||||
// E-bit = 1 => each ethernet frame is considered as the last fragment;
|
// E-bit = 1 => each ethernet frame is considered as the last fragment;
|
||||||
// a group of PRBs per each symbol is encapsulated in one ethernet frame.
|
// a group of PRBs per each symbol is encapsulated in one ethernet frame.
|
||||||
// => seems that the RUs don't check for E-bit
|
// => seems that the RUs don't check for E-bit
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_idx][0];
|
|
||||||
int16_t startRB = p_prbMapElm->nRBStart;
|
|
||||||
int16_t numRB = p_prbMapElm->nRBSize;
|
|
||||||
#elif F_RELEASE
|
|
||||||
p_sec_desc = &p_prbMapElm->sec_desc[sym_idx][0];
|
p_sec_desc = &p_prbMapElm->sec_desc[sym_idx][0];
|
||||||
int16_t startRB = p_prbMapElm->UP_nRBStart;
|
int16_t startRB = p_prbMapElm->UP_nRBStart;
|
||||||
int16_t numRB = p_prbMapElm->UP_nRBSize;
|
int16_t numRB = p_prbMapElm->UP_nRBSize;
|
||||||
@@ -744,7 +722,7 @@ int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
/** @details Read PRACH and PUSCH data from xran buffers. If
|
/** @details Read PRACH and PUSCH data from xran buffers. If
|
||||||
* I/Q compression (bitwidth < 16 bits) is configured, deccompresses the data
|
* I/Q compression (bitwidth < 16 bits) is configured, deccompresses the data
|
||||||
* before writing. Prints ON TIME counters every 128 frames.
|
* before writing. Prints ON TIME counters every 128 frames.
|
||||||
@@ -843,20 +821,8 @@ int xran_fh_rx_read_slot_BySymbol(ru_info_t *ru, int *frame, int *slot)
|
|||||||
struct xran_prb_map *pRbMap = pPrbMap;
|
struct xran_prb_map *pRbMap = pPrbMap;
|
||||||
for (int idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
for (int idxElm = 0; idxElm < pRbMap->nPrbElm; idxElm++) {
|
||||||
struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm];
|
struct xran_prb_elm *pRbElm = &pRbMap->prbMap[idxElm];
|
||||||
#ifdef E_RELEASE
|
|
||||||
struct xran_section_desc *p_sec_desc = pRbElm->p_sec_desc[sym_idx][0];
|
|
||||||
uint32_t one_rb_size =
|
|
||||||
(((pRbElm->iqWidth == 0) || (pRbElm->iqWidth == 16)) ? (N_SC_PER_PRB * 2 * 2) : (3 * pRbElm->iqWidth + 1));
|
|
||||||
if (fh_init->mtu < pRbElm->nRBSize * one_rb_size)
|
|
||||||
pData = bufs->dst[ant_id % nb_rx_per_ru][tti % XRAN_N_FE_BUF_LEN]
|
|
||||||
.pBuffers[sym_idx % XRAN_NUM_OF_SYMBOL_PER_SLOT]
|
|
||||||
.pData;
|
|
||||||
else
|
|
||||||
pData = p_sec_desc->pData;
|
|
||||||
#elif defined F_RELEASE
|
|
||||||
struct xran_section_desc *p_sec_desc = &pRbElm->sec_desc[sym_idx][0];
|
struct xran_section_desc *p_sec_desc = &pRbElm->sec_desc[sym_idx][0];
|
||||||
pData = p_sec_desc->pData;
|
pData = p_sec_desc->pData;
|
||||||
#endif
|
|
||||||
ptr = pData;
|
ptr = pData;
|
||||||
pos = (int32_t *)(start_ptr + (4 * sym_idx * fftsize));
|
pos = (int32_t *)(start_ptr + (4 * sym_idx * fftsize));
|
||||||
if (ptr == NULL || pos == NULL)
|
if (ptr == NULL || pos == NULL)
|
||||||
@@ -1129,11 +1095,7 @@ int xran_fh_tx_send_slot_BySymbol(ru_info_t *ru, int frame, int slot, uint64_t t
|
|||||||
p_prbMapElm->nBeamIndex = 0;
|
p_prbMapElm->nBeamIndex = 0;
|
||||||
|
|
||||||
// assumes one fragment per symbol
|
// assumes one fragment per symbol
|
||||||
#ifdef E_RELEASE
|
|
||||||
p_sec_desc = p_prbMapElm->p_sec_desc[sym_id][0];
|
|
||||||
#elif F_RELEASE
|
|
||||||
p_sec_desc = &p_prbMapElm->sec_desc[sym_id][0];
|
p_sec_desc = &p_prbMapElm->sec_desc[sym_id][0];
|
||||||
#endif
|
|
||||||
|
|
||||||
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
dst = xran_add_hdr_offset(dst, p_prbMapElm->compMethod);
|
||||||
|
|
||||||
|
|||||||
+12
-15
@@ -124,7 +124,7 @@ static void print_fh_init_io_cfg(const struct xran_io_cfg *io_cfg)
|
|||||||
io_cfg->one_vf_cu_plane);
|
io_cfg->one_vf_cu_plane);
|
||||||
print_fh_eowd_cmn(io_cfg->id, &io_cfg->eowd_cmn[io_cfg->id]);
|
print_fh_eowd_cmn(io_cfg->id, &io_cfg->eowd_cmn[io_cfg->id]);
|
||||||
printf("eowd_port (filled within xran library)\n");
|
printf("eowd_port (filled within xran library)\n");
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
printf("\
|
printf("\
|
||||||
bbu_offload %d\n",
|
bbu_offload %d\n",
|
||||||
io_cfg->bbu_offload);
|
io_cfg->bbu_offload);
|
||||||
@@ -189,7 +189,7 @@ void print_fh_init(const struct xran_fh_init *fh_init)
|
|||||||
printf("\
|
printf("\
|
||||||
totalBfWeights %d\n",
|
totalBfWeights %d\n",
|
||||||
fh_init->totalBfWeights);
|
fh_init->totalBfWeights);
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
printf("\
|
printf("\
|
||||||
mlogxranenable %d\n\
|
mlogxranenable %d\n\
|
||||||
dlCpProcBurst %d\n",
|
dlCpProcBurst %d\n",
|
||||||
@@ -232,7 +232,7 @@ static void print_prach_config(const struct xran_prach_config *prach_conf)
|
|||||||
prach_conf->timeOffset,
|
prach_conf->timeOffset,
|
||||||
prach_conf->freqOffset,
|
prach_conf->freqOffset,
|
||||||
prach_conf->eAxC_offset);
|
prach_conf->eAxC_offset);
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
printf("\
|
printf("\
|
||||||
nPrachConfIdxLTE %d\n",
|
nPrachConfIdxLTE %d\n",
|
||||||
prach_conf->nPrachConfIdxLTE);
|
prach_conf->nPrachConfIdxLTE);
|
||||||
@@ -396,7 +396,7 @@ void print_fh_config(const struct xran_fh_config *fh_config)
|
|||||||
fh_config->GPS_Alpha,
|
fh_config->GPS_Alpha,
|
||||||
fh_config->GPS_Beta);
|
fh_config->GPS_Beta);
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
printf("\
|
printf("\
|
||||||
srsEnableCp %d\n\
|
srsEnableCp %d\n\
|
||||||
SrsDelaySym %d\n",
|
SrsDelaySym %d\n",
|
||||||
@@ -429,7 +429,7 @@ void print_fh_config(const struct xran_fh_config *fh_config)
|
|||||||
fh_config->max_sections_per_slot,
|
fh_config->max_sections_per_slot,
|
||||||
fh_config->max_sections_per_symbol);
|
fh_config->max_sections_per_symbol);
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
printf("\
|
printf("\
|
||||||
RunSlotPrbMapBySymbolEnable %d\n\
|
RunSlotPrbMapBySymbolEnable %d\n\
|
||||||
LiteOnIgnoreUPSectionIdEnable %d\n\
|
LiteOnIgnoreUPSectionIdEnable %d\n\
|
||||||
@@ -456,7 +456,7 @@ static uint64_t get_u64_mask(const paramdef_t *pd)
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
char bbdev_dev[32] = "";
|
char bbdev_dev[32] = "";
|
||||||
char bbdev_vfio_vf_token[64] = "";
|
char bbdev_vfio_vf_token[64] = "";
|
||||||
#endif
|
#endif
|
||||||
@@ -478,7 +478,7 @@ static bool set_fh_io_cfg(struct xran_io_cfg *io_cfg, const paramdef_t *fhip, in
|
|||||||
for (int i = 0; i < num_dev; ++i) {
|
for (int i = 0; i < num_dev; ++i) {
|
||||||
io_cfg->dpdk_dev[i] = strdup(gpd(fhip, nump, ORAN_CONFIG_DPDK_DEVICES)->strlistptr[i]); // VFs devices
|
io_cfg->dpdk_dev[i] = strdup(gpd(fhip, nump, ORAN_CONFIG_DPDK_DEVICES)->strlistptr[i]); // VFs devices
|
||||||
}
|
}
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
io_cfg->bbdev_dev[0] = NULL; // BBDev dev name; max devices = 1
|
io_cfg->bbdev_dev[0] = NULL; // BBDev dev name; max devices = 1
|
||||||
io_cfg->bbdev_vfio_vf_token[0] = NULL; // BBDev dev token; max devices = 1
|
io_cfg->bbdev_vfio_vf_token[0] = NULL; // BBDev dev token; max devices = 1
|
||||||
char *shlibversion = NULL; // version of the LDPC coding library
|
char *shlibversion = NULL; // version of the LDPC coding library
|
||||||
@@ -512,9 +512,6 @@ static bool set_fh_io_cfg(struct xran_io_cfg *io_cfg, const paramdef_t *fhip, in
|
|||||||
} else {
|
} else {
|
||||||
io_cfg->bbdev_mode = XRAN_BBDEV_NOT_USED; // DPDK for BBDev
|
io_cfg->bbdev_mode = XRAN_BBDEV_NOT_USED; // DPDK for BBDev
|
||||||
}
|
}
|
||||||
#elif defined(E_RELEASE)
|
|
||||||
io_cfg->bbdev_dev[0] = NULL; // BBDev dev name; max devices = 1
|
|
||||||
io_cfg->bbdev_mode = XRAN_BBDEV_NOT_USED; // DPDK for BBDev
|
|
||||||
#endif
|
#endif
|
||||||
int dpdk_iova_mode_idx = config_paramidx_fromname((paramdef_t *)fhip, nump, ORAN_CONFIG_DPDK_IOVA_MODE);
|
int dpdk_iova_mode_idx = config_paramidx_fromname((paramdef_t *)fhip, nump, ORAN_CONFIG_DPDK_IOVA_MODE);
|
||||||
AssertFatal(dpdk_iova_mode_idx >= 0,"Index for dpdk_iova_mode config option not found!");
|
AssertFatal(dpdk_iova_mode_idx >= 0,"Index for dpdk_iova_mode config option not found!");
|
||||||
@@ -559,7 +556,7 @@ static bool set_fh_io_cfg(struct xran_io_cfg *io_cfg, const paramdef_t *fhip, in
|
|||||||
/* eCPRI OWDM per port variables for O-DU; this parameter is filled within xran library */
|
/* eCPRI OWDM per port variables for O-DU; this parameter is filled within xran library */
|
||||||
// eowd_port[0][XRAN_VF_MAX]
|
// eowd_port[0][XRAN_VF_MAX]
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
io_cfg->bbu_offload = 0; // enable packet handling on BBU cores
|
io_cfg->bbu_offload = 0; // enable packet handling on BBU cores
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -759,7 +756,7 @@ static bool set_fh_init(void *mplane_api, struct xran_fh_init *fh_init, enum xra
|
|||||||
fh_init->filePrefix = strdup(*gpd(fhip, nump, ORAN_CONFIG_FILE_PREFIX)->strptr);
|
fh_init->filePrefix = strdup(*gpd(fhip, nump, ORAN_CONFIG_FILE_PREFIX)->strptr);
|
||||||
fh_init->totalBfWeights = 0; // only used if id = O_RU (for emulation); C-plane extension types; section 5.4.6 of CUS spec
|
fh_init->totalBfWeights = 0; // only used if id = O_RU (for emulation); C-plane extension types; section 5.4.6 of CUS spec
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
fh_init->mlogxranenable = 0; // enable mlog; 0 -> disabled
|
fh_init->mlogxranenable = 0; // enable mlog; 0 -> disabled
|
||||||
fh_init->dlCpProcBurst = 0; /* 1 -> DL CP processing will be done on single symbol,
|
fh_init->dlCpProcBurst = 0; /* 1 -> DL CP processing will be done on single symbol,
|
||||||
0 -> DL CP processing will be spread across all allowed symbols and multiple cores to reduce burstiness */
|
0 -> DL CP processing will be spread across all allowed symbols and multiple cores to reduce burstiness */
|
||||||
@@ -804,7 +801,7 @@ static bool set_fh_prach_config(void *mplane_api,
|
|||||||
prach_config->numPrbc = 0;
|
prach_config->numPrbc = 0;
|
||||||
prach_config->timeOffset = 0;
|
prach_config->timeOffset = 0;
|
||||||
prach_config->freqOffset = 0;
|
prach_config->freqOffset = 0;
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
prach_config->nPrachConfIdxLTE = 0; // used only if DSS enabled and technology is XRAN_RAN_LTE
|
prach_config->nPrachConfIdxLTE = 0; // used only if DSS enabled and technology is XRAN_RAN_LTE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -969,7 +966,7 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c
|
|||||||
fh_config->srsEnable = 0; // enable SRS; used only if XRAN_CATEGORY_B
|
fh_config->srsEnable = 0; // enable SRS; used only if XRAN_CATEGORY_B
|
||||||
// For LiteOn E release, no need to take care of prach eAxC_offset. xran lib is hacked to handle it.
|
// For LiteOn E release, no need to take care of prach eAxC_offset. xran lib is hacked to handle it.
|
||||||
bool liteon_prach_eAxC_offset = false;
|
bool liteon_prach_eAxC_offset = false;
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
fh_config->srsEnableCp = 0; // enable SRS CP; used only if XRAN_CATEGORY_B
|
fh_config->srsEnableCp = 0; // enable SRS CP; used only if XRAN_CATEGORY_B
|
||||||
fh_config->SrsDelaySym = 0; // number of SRS delay symbols; used only if XRAN_CATEGORY_B
|
fh_config->SrsDelaySym = 0; // number of SRS delay symbols; used only if XRAN_CATEGORY_B
|
||||||
fh_config->RunSlotPrbMapBySymbolEnable = *gpd(fhp, nfh, ORAN_CONFIG_RunSlotPrbMapBySymbol)->uptr; // enable RunSlotPrbMapBySymbol
|
fh_config->RunSlotPrbMapBySymbolEnable = *gpd(fhp, nfh, ORAN_CONFIG_RunSlotPrbMapBySymbol)->uptr; // enable RunSlotPrbMapBySymbol
|
||||||
@@ -1017,7 +1014,7 @@ static bool set_fh_config(void *mplane_api, int ru_idx, int num_rus, enum xran_c
|
|||||||
fh_config->max_sections_per_slot = 0; // not used in xran
|
fh_config->max_sections_per_slot = 0; // not used in xran
|
||||||
fh_config->max_sections_per_symbol = 0; // not used in xran
|
fh_config->max_sections_per_symbol = 0; // not used in xran
|
||||||
|
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
fh_config->dssEnable = 0; // enable DSS (extension-9)
|
fh_config->dssEnable = 0; // enable DSS (extension-9)
|
||||||
fh_config->dssPeriod = 0; // DSS pattern period for LTE/NR
|
fh_config->dssPeriod = 0; // DSS pattern period for LTE/NR
|
||||||
// fh_config->technology[XRAN_MAX_DSS_PERIODICITY] // technology array represents slot is LTE(0)/NR(1); used only if DSS enabled
|
// fh_config->technology[XRAN_MAX_DSS_PERIODICITY] // technology array represents slot is LTE(0)/NR(1); used only if DSS enabled
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ static void oran_allocate_cplane_buffers(void *instHandle,
|
|||||||
struct xran_flat_buffer buf[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
|
struct xran_flat_buffer buf[XRAN_MAX_ANTENNA_NR][XRAN_N_FE_BUF_LEN],
|
||||||
uint32_t ant,
|
uint32_t ant,
|
||||||
uint32_t sect,
|
uint32_t sect,
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
uint32_t mtu,
|
uint32_t mtu,
|
||||||
const struct xran_fh_config *fh_config,
|
const struct xran_fh_config *fh_config,
|
||||||
#endif
|
#endif
|
||||||
@@ -208,17 +208,6 @@ static void oran_allocate_cplane_buffers(void *instHandle,
|
|||||||
{
|
{
|
||||||
xran_status_t status;
|
xran_status_t status;
|
||||||
uint32_t count1 = 0;
|
uint32_t count1 = 0;
|
||||||
|
|
||||||
#ifdef E_RELEASE
|
|
||||||
uint32_t count2 = 0;
|
|
||||||
uint32_t poolSec;
|
|
||||||
uint32_t numBufsSec = next_power_2(XRAN_N_FE_BUF_LEN * ant * XRAN_NUM_OF_SYMBOL_PER_SLOT * sect * XRAN_MAX_FRAGMENT);
|
|
||||||
uint32_t bufSizeSec = sizeof(struct xran_section_desc);
|
|
||||||
status = xran_bm_init(instHandle, &poolSec, numBufsSec, bufSizeSec);
|
|
||||||
AssertFatal(XRAN_STATUS_SUCCESS == status, "Failed at xran_bm_init(), status %d\n", status);
|
|
||||||
printf("xran_bm_init() hInstance %p poolIdx %u elements %u size %u\n", instHandle, poolSec, numBufsSec, bufSizeSec);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
uint32_t poolPrb;
|
uint32_t poolPrb;
|
||||||
uint32_t numBufsPrb = next_power_2(XRAN_N_FE_BUF_LEN * ant * XRAN_NUM_OF_SYMBOL_PER_SLOT) - 1;
|
uint32_t numBufsPrb = next_power_2(XRAN_N_FE_BUF_LEN * ant * XRAN_NUM_OF_SYMBOL_PER_SLOT) - 1;
|
||||||
uint32_t bufSizePrb = size_of_prb_map;
|
uint32_t bufSizePrb = size_of_prb_map;
|
||||||
@@ -247,34 +236,7 @@ static void oran_allocate_cplane_buffers(void *instHandle,
|
|||||||
// get mixed slot map if in TDD and in mixed slot
|
// get mixed slot map if in TDD and in mixed slot
|
||||||
if (prb_conf->nTddPeriod != 0 && (j % prb_conf->nTddPeriod) == prb_conf->mixed_slot_index)
|
if (prb_conf->nTddPeriod != 0 && (j % prb_conf->nTddPeriod) == prb_conf->mixed_slot_index)
|
||||||
src = &prb_conf->mixedSlotMap;
|
src = &prb_conf->mixedSlotMap;
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
/* as per E release sample app, the memory is copied up to size_of_prb_map
|
|
||||||
which translates to >= sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm)*5,
|
|
||||||
but we assume that RB allocation is done as 1 RE/UE so the total memory size is sizeof(struct xran_prb_map);
|
|
||||||
this is improved in F release */
|
|
||||||
struct xran_prb_map *p_rb_map = (struct xran_prb_map *)ptr;
|
|
||||||
memcpy(p_rb_map, src, sizeof(*src));
|
|
||||||
|
|
||||||
for (uint32_t elm_id = 0; elm_id < p_rb_map->nPrbElm; ++elm_id) {
|
|
||||||
struct xran_prb_elm *pPrbElem = &p_rb_map->prbMap[elm_id];
|
|
||||||
for (uint32_t k = 0; k < XRAN_NUM_OF_SYMBOL_PER_SLOT; ++k) {
|
|
||||||
for (uint32_t m = 0; m < XRAN_MAX_FRAGMENT; ++m) {
|
|
||||||
void *sd_ptr;
|
|
||||||
void *sd_mb;
|
|
||||||
status = xran_bm_allocate_buffer(instHandle, poolSec, &sd_ptr, &sd_mb);
|
|
||||||
AssertFatal(XRAN_STATUS_SUCCESS == status,
|
|
||||||
"Failed at xran_bm_allocate_buffer(), status %d m %d k %d elm_id %d\n",
|
|
||||||
status,
|
|
||||||
m,
|
|
||||||
k,
|
|
||||||
elm_id);
|
|
||||||
count2++;
|
|
||||||
pPrbElem->p_sec_desc[k][m] = sd_ptr;
|
|
||||||
memset(sd_ptr, 0, sizeof(struct xran_section_desc));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#elif defined F_RELEASE
|
|
||||||
if (fh_config->RunSlotPrbMapBySymbolEnable) {
|
if (fh_config->RunSlotPrbMapBySymbolEnable) {
|
||||||
xran_init_PrbMap_by_symbol_from_cfg(src, ptr, mtu, fh_config->nDLRBs);
|
xran_init_PrbMap_by_symbol_from_cfg(src, ptr, mtu, fh_config->nDLRBs);
|
||||||
} else {
|
} else {
|
||||||
@@ -284,9 +246,6 @@ static void oran_allocate_cplane_buffers(void *instHandle,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("xran_bm_allocate_buffer() hInstance %p poolIdx %u count %u\n", instHandle, poolPrb, count1);
|
printf("xran_bm_allocate_buffer() hInstance %p poolIdx %u count %u\n", instHandle, poolPrb, count1);
|
||||||
#ifdef E_RELEASE
|
|
||||||
printf("xran_bm_allocate_buffer() hInstance %p poolIdx %u count %u\n", instHandle, poolSec, count2);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callback not actively used */
|
/* callback not actively used */
|
||||||
@@ -299,7 +258,7 @@ static void oran_allocate_buffers(void *handle,
|
|||||||
int xran_inst,
|
int xran_inst,
|
||||||
int num_sectors,
|
int num_sectors,
|
||||||
oran_port_instance_t *portInstances,
|
oran_port_instance_t *portInstances,
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
uint32_t mtu,
|
uint32_t mtu,
|
||||||
#endif
|
#endif
|
||||||
const struct xran_fh_config *fh_config)
|
const struct xran_fh_config *fh_config)
|
||||||
@@ -355,9 +314,7 @@ static void oran_allocate_buffers(void *handle,
|
|||||||
.mixedSlotMap = ulPmMixed,
|
.mixedSlotMap = ulPmMixed,
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
uint32_t size_of_prb_map = sizeof(struct xran_prb_map) + sizeof(struct xran_prb_elm) * (xran_max_sections_per_slot - 1);
|
|
||||||
#elif defined F_RELEASE
|
|
||||||
uint32_t size_of_prb_map;
|
uint32_t size_of_prb_map;
|
||||||
if (fh_config->RunSlotPrbMapBySymbolEnable) {
|
if (fh_config->RunSlotPrbMapBySymbolEnable) {
|
||||||
// For Liteon FR2 with RunSlotPrbMapBySymbolEnable, xran_prb_map will have xran_prb_elm prbMap[14]
|
// For Liteon FR2 with RunSlotPrbMapBySymbolEnable, xran_prb_map will have xran_prb_elm prbMap[14]
|
||||||
@@ -378,7 +335,7 @@ static void oran_allocate_buffers(void *handle,
|
|||||||
bl->bufs.tx_prbmap,
|
bl->bufs.tx_prbmap,
|
||||||
xran_max_antenna_nr,
|
xran_max_antenna_nr,
|
||||||
xran_max_sections_per_slot,
|
xran_max_sections_per_slot,
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
mtu,
|
mtu,
|
||||||
fh_config,
|
fh_config,
|
||||||
#endif
|
#endif
|
||||||
@@ -393,7 +350,7 @@ static void oran_allocate_buffers(void *handle,
|
|||||||
bl->bufs.rx_prbmap,
|
bl->bufs.rx_prbmap,
|
||||||
xran_max_antenna_nr,
|
xran_max_antenna_nr,
|
||||||
xran_max_sections_per_slot,
|
xran_max_sections_per_slot,
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
mtu,
|
mtu,
|
||||||
fh_config,
|
fh_config,
|
||||||
#endif
|
#endif
|
||||||
@@ -462,10 +419,7 @@ int *oai_oran_initialize(struct xran_fh_init *xran_fh_init, struct xran_fh_confi
|
|||||||
struct xran_cb_tag tag = {.cellId = sector, .oXuId = o_xu_id};
|
struct xran_cb_tag tag = {.cellId = sector, .oXuId = o_xu_id};
|
||||||
pi->prach_tag = tag;
|
pi->prach_tag = tag;
|
||||||
pi->pusch_tag = tag;
|
pi->pusch_tag = tag;
|
||||||
#ifdef E_RELEASE
|
#if defined F_RELEASE
|
||||||
LOG_W(HW, "Please be aware that E release support will be removed in the future. Consider switching to F release.\n");
|
|
||||||
oran_allocate_buffers(gxran_handle, o_xu_id, 1, pi, &xran_fh_config[o_xu_id]);
|
|
||||||
#elif defined F_RELEASE
|
|
||||||
oran_allocate_buffers(gxran_handle, o_xu_id, 1, pi, xran_fh_init->mtu, &xran_fh_config[o_xu_id]);
|
oran_allocate_buffers(gxran_handle, o_xu_id, 1, pi, xran_fh_init->mtu, &xran_fh_config[o_xu_id]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ void oran_fh_if4p5_south_in(RU_t *ru, int *frame, int *slot)
|
|||||||
start_meas(&ru->rx_fhaul);
|
start_meas(&ru->rx_fhaul);
|
||||||
struct xran_fh_config *fh_cfg = get_xran_fh_config(0);
|
struct xran_fh_config *fh_cfg = get_xran_fh_config(0);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
if (fh_cfg->RunSlotPrbMapBySymbolEnable)
|
if (fh_cfg->RunSlotPrbMapBySymbolEnable)
|
||||||
ret = xran_fh_rx_read_slot_BySymbol(&ru_info, &f, &sl);
|
ret = xran_fh_rx_read_slot_BySymbol(&ru_info, &f, &sl);
|
||||||
else
|
else
|
||||||
@@ -291,7 +291,7 @@ void oran_fh_if4p5_south_out(RU_t *ru, int frame, int slot, uint64_t timestamp)
|
|||||||
|
|
||||||
struct xran_fh_config *fh_cfg = get_xran_fh_config(0);
|
struct xran_fh_config *fh_cfg = get_xran_fh_config(0);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
if (fh_cfg->RunSlotPrbMapBySymbolEnable)
|
if (fh_cfg->RunSlotPrbMapBySymbolEnable)
|
||||||
ret = xran_fh_tx_send_slot_BySymbol(&ru_info, frame, slot, timestamp);
|
ret = xran_fh_tx_send_slot_BySymbol(&ru_info, frame, slot, timestamp);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -60,12 +60,12 @@ typedef struct ru_info_s {
|
|||||||
* @param frame output of the frame which has been read.
|
* @param frame output of the frame which has been read.
|
||||||
* @param slot output of the slot which has been read. */
|
* @param slot output of the slot which has been read. */
|
||||||
int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot);
|
int xran_fh_rx_read_slot(ru_info_t *ru, int *frame, int *slot);
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
int xran_fh_rx_read_slot_BySymbol(ru_info_t *ru, int *frame, int *slot);
|
int xran_fh_rx_read_slot_BySymbol(ru_info_t *ru, int *frame, int *slot);
|
||||||
#endif
|
#endif
|
||||||
/** @brief Writes TX data (PDSCH) of given slot. */
|
/** @brief Writes TX data (PDSCH) of given slot. */
|
||||||
int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp);
|
int xran_fh_tx_send_slot(ru_info_t *ru, int frame, int slot, uint64_t timestamp);
|
||||||
#ifdef F_RELEASE
|
#if defined F_RELEASE
|
||||||
int xran_fh_tx_send_slot_BySymbol(ru_info_t *ru, int frame, int slot, uint64_t timestamp);
|
int xran_fh_tx_send_slot_BySymbol(ru_info_t *ru, int frame, int slot, uint64_t timestamp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user