From 73cfa6bbb6017b1fdc73c620f4cfeeecc123dd22 Mon Sep 17 00:00:00 2001 From: WEI-TAI CHEN <kroempa@gmail.com> Date: Thu, 14 Jun 2018 06:02:26 -0700 Subject: [PATCH] - Maintain The Configuration Module - Create task for GAB_APP and GAN_RRC - Create the NR FAPI for P5 interface - *It could be build, but still have a lot of warning need to maintain --- cmake_targets/CMakeLists.txt | 48 +- cmake_targets/tools/build_helper | 11 +- cmake_targets/tools/generate_asn1 | 12 +- common/ran_context.h | 10 +- .../nfapi/public_inc/nfapi_nr_interface.h | 273 ++ .../nfapi/public_inc/nr_fapi_ue_interface.h | 3886 ---------------- .../nfapi/public_inc/nr_ue_fapi_interface.h | 3887 ++++++++++++++++ .../dlsch_llr_computation_avx2.c | 4034 ----------------- openair1/SIMULATION/ETH_TRANSPORT/extern.h | 1 + openair2/COMMON/rrc_messages_def.h | 1 + openair2/COMMON/rrc_messages_types.h | 4 +- openair2/COMMON/tasks_def.h | 4 + .../NR_RRC_paramsvalues.h} | 32 +- openair2/{ENB_APP => GNB_APP}/gnb_app.c | 30 +- openair2/{ENB_APP => GNB_APP}/gnb_app.h | 0 openair2/{ENB_APP => GNB_APP}/gnb_config.c | 1140 +++-- openair2/{ENB_APP => GNB_APP}/gnb_config.h | 32 +- openair2/{ENB_APP => GNB_APP}/gnb_paramdef.h | 664 ++- openair2/LAYER2/MAC/main.c | 154 +- openair2/LAYER2/NR_MAC_gNB/config.c | 243 + openair2/LAYER2/NR_MAC_gNB/mac.h | 96 + openair2/LAYER2/NR_MAC_gNB/mac_proto.h | 22 + openair2/LAYER2/NR_MAC_gNB/main.c | 124 + openair2/NR_PHY_INTERFACE/IF_Module.c | 131 + openair2/NR_PHY_INTERFACE/IF_Module.h | 139 + openair2/RRC/NR/MESSAGES/asn1_msg.c | 894 ++-- openair2/RRC/NR/MESSAGES/asn1_msg.h | 196 +- .../{L2_interface_NR.c => NR_L2_interface.c} | 0 openair2/RRC/NR/defs_NR.h | 573 --- openair2/RRC/NR/nr_rrc_common.c | 87 + openair2/RRC/NR/nr_rrc_defs.h | 333 ++ .../RRC/NR/{extern_NR.h => nr_rrc_extern.h} | 7 +- openair2/RRC/NR/nr_rrc_proto.h | 45 + .../RRC/NR/{rrc_types_NR.h => nr_rrc_types.h} | 0 openair2/RRC/NR/proto_NR.h | 0 openair2/RRC/NR/rrc_gNB.c | 148 +- openair2/UTIL/LOG/log.h | 4 + targets/COMMON/create_nr_tasks.c | 103 + targets/COMMON/create_nr_tasks.h | 33 + targets/RT/USER/nr-softmodem.c | 4 +- 40 files changed, 7401 insertions(+), 10004 deletions(-) create mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h delete mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h create mode 100644 nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h delete mode 100644 openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c rename openair2/{ENB_APP/NRRRC_paramsvalues.h => GNB_APP/NR_RRC_paramsvalues.h} (83%) rename openair2/{ENB_APP => GNB_APP}/gnb_app.c (91%) rename openair2/{ENB_APP => GNB_APP}/gnb_app.h (100%) rename openair2/{ENB_APP => GNB_APP}/gnb_config.c (71%) rename openair2/{ENB_APP => GNB_APP}/gnb_config.h (83%) rename openair2/{ENB_APP => GNB_APP}/gnb_paramdef.h (71%) create mode 100644 openair2/LAYER2/NR_MAC_gNB/mac.h create mode 100644 openair2/LAYER2/NR_MAC_gNB/mac_proto.h create mode 100644 openair2/LAYER2/NR_MAC_gNB/main.c create mode 100644 openair2/NR_PHY_INTERFACE/IF_Module.c rename openair2/RRC/NR/{L2_interface_NR.c => NR_L2_interface.c} (100%) delete mode 100644 openair2/RRC/NR/defs_NR.h create mode 100644 openair2/RRC/NR/nr_rrc_common.c create mode 100644 openair2/RRC/NR/nr_rrc_defs.h rename openair2/RRC/NR/{extern_NR.h => nr_rrc_extern.h} (95%) create mode 100644 openair2/RRC/NR/nr_rrc_proto.h rename openair2/RRC/NR/{rrc_types_NR.h => nr_rrc_types.h} (100%) delete mode 100644 openair2/RRC/NR/proto_NR.h create mode 100644 targets/COMMON/create_nr_tasks.c create mode 100644 targets/COMMON/create_nr_tasks.h diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 99eacb373d..261b51e548 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -350,7 +350,7 @@ add_custom_command ( add_list2_option(NR_RRC_ASN1_VERSION "NR_Rel15" "ASN.1 version of NR_RRC interface") if (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15") - set (NR_RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-Definitions.asn) + set (NR_RRC_GRAMMAR ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1c/ASN1_files/NR-RRC-38331-f10.asn) endif (${NR_RRC_ASN1_VERSION} STREQUAL "NR_Rel15") set (NR_RRC_FULL_DIR ${asn1_generated_dir}/${NR_RRC_ASN1_VERSION}) @@ -359,7 +359,7 @@ if(NOT EXISTS ${asn1c_call}) message( FATAL_ERROR "The script ${asn1c_call} must be present" ) endif(NOT EXISTS ${asn1c_call}) -message("calling ASN1C_PREFIX=NR_ asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR}") +message("calling ASN1C_PREFIX=NR_ asn1c -findirect-choice -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${RRC_FULL_DIR} ${RRC_GRAMMAR}") execute_process(COMMAND ${asn1c_call} ${NR_RRC_FULL_DIR} ${NR_RRC_GRAMMAR} @@ -388,8 +388,10 @@ file(GLOB nr_rrc_source ${NR_RRC_FULL_DIR}/*.c) file(GLOB nr_rrc_h ${NR_RRC_FULL_DIR}/*.h) set(nr_rrc_h ${nr_rrc_h} ${NR_RRC_FULL_DIR}/asn1_constants.h) set_source_files_properties(${nr_rrc_source} PROPERTIES COMPILE_FLAGS -w) # suppress warnings from generated code -add_library(NR_RRC_LIB ${nr_rrc_h} ${nr_rrc_source} - ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c) +add_library(NR_RRC_LIB + ${nr_rrc_h} + ${nr_rrc_source} + ${OPENAIR2_DIR}/RRC/NR/MESSAGES/asn1_msg.c) include_directories ("${NR_RRC_FULL_DIR}") # add the command to generate the source code @@ -433,6 +435,7 @@ execute_process(COMMAND mkdir -p ${S1AP_C_DIR} COMMAND env "ASN1C_PREFIX=S1AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${S1AP_C_DIR} ${S1AP_ASN_DIR}/${S1AP_ASN_FILES} RESULT_VARIABLE ret) + if (NOT ${ret} STREQUAL 0) message(FATAL_ERROR "${ret}: error") endif (NOT ${ret} STREQUAL 0) @@ -448,6 +451,7 @@ add_custom_command ( DEPENDS ${S1AP_ASN_DIR}/${S1AP_ASN_FILES} ) + add_library(S1AP_LIB ${S1AP_source} ${S1AP_DIR}/s1ap_common.c @@ -491,10 +495,19 @@ endif(${X2AP_VERSION} STREQUAL "R14") set(X2AP_ASN_DIR ${X2AP_DIR}/MESSAGES/ASN1/${ASN1RELDIR}) set(X2AP_C_DIR ${asn1_generated_dir}/X2AP_${ASN1RELDIR}) + message("calling asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES}") + execute_process(COMMAND mkdir -p ${X2AP_C_DIR} COMMAND env "ASN1C_PREFIX=X2AP_" asn1c -pdu=all -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example -D ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} RESULT_VARIABLE ret) + +#execute_process(COMMAND ${asn1c_call} +# ${X2AP_C_DIR} +# ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} +# X2AP +# RESULT_VARIABLE ret) + if (NOT ${ret} STREQUAL 0) message(FATAL_ERROR "${asn1c_call}: error") endif (NOT ${ret} STREQUAL 0) @@ -510,6 +523,13 @@ add_custom_command ( DEPENDS ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} ) +#add_custom_command ( +# OUTPUT ${X2AP_C_DIR}/X2AP_asn_constant.h +# COMMAND ${asn1c_call} ${X2AP_C_DIR} ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} X2AP +# COMMAND ${fix_asn1c_call} ${X2AP_C_DIR} X2AP ${X2AP_VERSION} +# DEPENDS ${X2AP_ASN_DIR}/${X2AP_ASN_FILES} +# ) + add_library(X2AP_LIB ${X2AP_source} ${X2AP_DIR}/x2ap_common.c @@ -794,6 +814,7 @@ include_directories("${OPENAIR_DIR}/targets/ARCH/COMMON") include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/USERSPACE/LIB/") include_directories("${OPENAIR_DIR}/targets/ARCH/EXMIMO/DEFS") include_directories("${OPENAIR2_DIR}/ENB_APP") +include_directories("${OPENAIR2_DIR}/GNB_APP") include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/MAC") include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/RRC") include_directories("${OPENAIR2_DIR}/ENB_APP/CONTROL_MODULES/PDCP") @@ -1299,12 +1320,15 @@ add_library(PHY_RU ${PHY_SRC_RU}) #Layer 2 library ##################### set(MAC_DIR ${OPENAIR2_DIR}/LAYER2/MAC) +set(NR_MAC_DIR ${OPENAIR2_DIR}/LAYER2/NR_MAC_gNB) set(PHY_INTERFACE_DIR ${OPENAIR2_DIR}/PHY_INTERFACE) +set(NR_PHY_INTERFACE_DIR ${OPENAIR2_DIR}/NR_PHY_INTERFACE) set(RLC_DIR ${OPENAIR2_DIR}/LAYER2/RLC) set(RLC_UM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/UM_v9.3.0) set(RLC_AM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/AM_v9.3.0) set(RLC_TM_DIR ${OPENAIR2_DIR}/LAYER2/RLC/TM_v9.3.0) set(RRC_DIR ${OPENAIR2_DIR}/RRC/LTE) +set(NR_RRC_DIR ${OPENAIR2_DIR}/RRC/NR) set(PDCP_DIR ${OPENAIR2_DIR}/LAYER2/PDCP_v10.1.0) set(L2_SRC ${OPENAIR2_DIR}/LAYER2/openair2_proc.c @@ -1350,6 +1374,8 @@ set(L2_SRC ${RRC_DIR}/L2_interface.c ${RRC_DIR}/L2_interface_common.c ${RRC_DIR}/L2_interface_ue.c + ${NR_RRC_DIR}/rrc_gNB.c + ${NR_RRC_DIR}/nr_rrc_common.c ) set(L2_SRC_UE @@ -1413,6 +1439,9 @@ set (MAC_SRC ${MAC_DIR}/pre_processor.c ${MAC_DIR}/config.c ${MAC_DIR}/config_ue.c + ${NR_PHY_INTERFACE_DIR}/IF_Module.c + ${NR_MAC_DIR}/main.c + ${NR_MAC_DIR}/config.c ) set (MAC_SRC_UE @@ -1430,10 +1459,16 @@ set (ENB_APP_SRC ${OPENAIR2_DIR}/ENB_APP/RRC_config_tools.c ) +set (GNB_APP_SRC + ${OPENAIR2_DIR}/GNB_APP/gnb_app.c + ${OPENAIR2_DIR}/GNB_APP/gnb_config.c + ) + add_library(L2 ${L2_SRC} ${MAC_SRC} - ${ENB_APP_SRC}) + ${ENB_APP_SRC} + ${GNB_APP_SRC}) # ${OPENAIR2_DIR}/RRC/L2_INTERFACE/openair_rrc_L2_interface.c) add_library(L2_UE @@ -2124,6 +2159,7 @@ add_executable(nr-softmodem ${OPENAIR_TARGETS}/RT/USER/nr-softmodem.c ${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c ${OPENAIR_TARGETS}/COMMON/create_tasks.c + ${OPENAIR_TARGETS}/COMMON/create_nr_tasks.c ${OPENAIR_TARGETS}/ARCH/COMMON/common_lib.c ${OPENAIR2_DIR}/RRC/NAS/nas_config.c ${OPENAIR2_DIR}/RRC/NAS/rb_config.c @@ -2142,7 +2178,7 @@ target_link_libraries (nr-softmodem -Wl,--start-group UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB SCHED_RU_LIB SCHED_NR_LIB PHY_NR PHY PHY_COMMON PHY_RU LFDS GTPV1U SECU_CN SECU_OSA ${ITTI_LIB} ${FLPT_MSG_LIB} ${ASYNC_IF_LIB} ${FLEXRAN_AGENT_LIB} LFDS7 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} - RRC_LIB S1AP_LIB S1AP_ENB L2 + RRC_LIB NR_RRC_LIB S1AP_LIB S1AP_ENB L2 NFAPI_COMMON_LIB NFAPI_LIB NFAPI_VNF_LIB NFAPI_PNF_LIB NFAPI_USER_LIB -Wl,--end-group z dl) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index f0ae7e79c8..29687ca5e8 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -277,7 +277,7 @@ check_install_usrp_uhd_driver(){ $SUDO apt-get -y --allow-unauthenticated install libuhd-dev libuhd003 uhd-host elif [[ "$OS_BASEDISTRO" == "fedora" ]]; then $SUDO $INSTALLER -y install python boost libusb-devel libusbx-devel boost-devel python-mako python-docutils cmake - $SUDO pip install requests + $SUDO -H pip install requests if [[ "$OS_DISTRO" == "rhel" ]] || [[ "$OS_DISTRO" == "centos" ]]; then # until EPEL repo hasn't bumped UHD driver to >=3.10 in EPEL, build driver from source $SUDO $INSTALLER -y remove uhd uhd-devel uhd-firmware @@ -460,8 +460,8 @@ check_install_additional_tools (){ #The packages below are already installed for Redhat distros (RHEL, CentOS, Fedora) if [[ "$OS_DISTRO" == "ubuntu" ]]; then - $SUDO pip install paramiko - $SUDO pip install pyroute2 colorama + $SUDO -H pip install paramiko + $SUDO -H pip install pyroute2 colorama log_netiface=$OPENAIR_DIR/cmake_targets/log/netiface_install_log.txt echo_info "Installing Netinterfaces package. The logfile for installation is in $log_netiface" ( @@ -659,10 +659,9 @@ install_asn1c_from_source(){ echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log " ( $SUDO rm -rf /tmp/asn1c - # GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c - git clone https://github.com/velichkov/asn1c /tmp/asn1c + git clone https://github.com/brchiu/asn1c /tmp/asn1c cd /tmp/asn1c - git checkout s1ap + git checkout velichkov_s1ap_plus_option_group test -f configure || autoreconf -iv ./configure make -j`nproc` diff --git a/cmake_targets/tools/generate_asn1 b/cmake_targets/tools/generate_asn1 index fb38455a12..b53a14114b 100755 --- a/cmake_targets/tools/generate_asn1 +++ b/cmake_targets/tools/generate_asn1 @@ -107,12 +107,16 @@ case "$module" in ;; NR_RRC ) export ASN1C_PREFIX=NR_ - asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + asn1c -gen-PER -fcompound-names -findirect-choice -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample ;; S1AP ) export ASN1C_PREFIX=S1AP_ asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample ;; + X2AP ) + export ASN1C_PREFIX=X2AP_ + asn1c -gen-PER -fcompound-names -no-gen-example fixed_grammar.asn 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + ;; esac @@ -129,12 +133,16 @@ case "$module" in ;; NR_RRC ) export ASN1C_PREFIX=NR_ - asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + asn1c -fcompound-names -findirect-choice -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample ;; S1AP ) export ASN1C_PREFIX=S1AP_ asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample ;; + X2AP ) + export ASN1C_PREFIX=X2AP_ + asn1c -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example $* 2>&1 | grep -v -- '->' | grep -v '^Compiled' |grep -v sample + ;; esac fi diff --git a/common/ran_context.h b/common/ran_context.h index a090ba1109..14db3056d3 100644 --- a/common/ran_context.h +++ b/common/ran_context.h @@ -50,7 +50,7 @@ #include "PHY/defs_L1_NB_IoT.h" #include "RRC/LTE/defs_NB_IoT.h" -#include "RRC/NR/defs_NR.h" +#include "RRC/NR/nr_rrc_defs.h" typedef struct { /// RAN context config file name @@ -69,14 +69,20 @@ typedef struct { int nb_macrlc_inst; /// Number of NB_IoT MACRLC instances in this node int nb_nb_iot_macrlc_inst; + /// Number of NR MACRLC instances in this node + int nb_nr_macrlc_inst; /// Number of component carriers per instance in this node int *nb_mac_CC; /// Number of L1 instances in this node int nb_L1_inst; /// Number of NB_IoT L1 instances in this node int nb_nb_iot_L1_inst; + /// Number of NR L1 instances in this node + int nb_nr_L1_inst; /// Number of Component Carriers per instance in this node int *nb_L1_CC; + /// Number of NR Component Carriers per instance in this node + int *nb_nr_L1_CC; /// Number of RU instances in this node int nb_RU; /// FlexRAN context variables @@ -97,6 +103,8 @@ typedef struct { struct eNB_MAC_INST_s **mac; /// NB_IoT MAC context variables struct eNB_MAC_INST_NB_IoT_s **nb_iot_mac; + /// NR MAC context variables + struct gNB_MAC_INST_s **nrmac; /// GTPu descriptor gtpv1u_data_t *gtpv1u_data_g; /// RU descriptors. These describe what each radio unit is supposed to do and contain the necessary functions for fronthaul interfaces diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h new file mode 100644 index 0000000000..fc35bc7619 --- /dev/null +++ b/nfapi/open-nFAPI/nfapi/public_inc/nfapi_nr_interface.h @@ -0,0 +1,273 @@ +#ifndef _NFAPI_INTERFACE_NR_H_ +#define _NFAPI_INTERFACE_NR_H_ + +#include "nfapi_interface.h" + +//These TLVs are used exclusively by nFAPI +typedef struct +{ + // These TLVs are used to setup the transport connection between VNF and PNF + // nfapi_ipv4_address_t p7_vnf_address_ipv4; + // nfapi_ipv6_address_t p7_vnf_address_ipv6; + // nfapi_uint16_tlv_t p7_vnf_port; + + // nfapi_ipv4_address_t p7_pnf_address_ipv4; + // nfapi_ipv6_address_t p7_pnf_address_ipv6; + // nfapi_uint16_tlv_t p7_pnf_port; + + // // These TLVs are used to setup the transport connection between VNF and PNF + // nfapi_uint8_tlv_t dl_ue_per_sf; + // nfapi_uint8_tlv_t ul_ue_per_sf; + + // These TLVs are used by PNF to report its RF capabilities to the VNF software + nfapi_rf_bands_t rf_bands; + + // These TLVs are used by the VNF to configure the synchronization with the PNF. + // nfapi_uint8_tlv_t timing_window; + // nfapi_uint8_tlv_t timing_info_mode; + // nfapi_uint8_tlv_t timing_info_period; + + // These TLVs are used by the VNF to configure the RF in the PNF + // nfapi_uint16_tlv_t max_transmit_power; + nfapi_uint16_tlv_t earfcn; + + // nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands; + // nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands; + // nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands; + // nfapi_uint8_tlv_t nmm_uplink_rssi_supported; + +} nfapi_nr_nfapi_t; + +#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x5100 +#define NFAPI_NR_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x5101 +#define NFAPI_NR_NFAPI_P7_VNF_PORT_TAG 0x5102 +#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x5103 +#define NFAPI_NR_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x5104 +#define NFAPI_NR_NFAPI_P7_PNF_PORT_TAG 0x5105 + +#define NFAPI_NR_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x510A +#define NFAPI_NR_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x510B +#define NFAPI_NR_NFAPI_RF_BANDS_TAG 0x5114 +#define NFAPI_NR_NFAPI_TIMING_WINDOW_TAG 0x511E +#define NFAPI_NR_NFAPI_TIMING_INFO_MODE_TAG 0x511F +#define NFAPI_NR_NFAPI_TIMING_INFO_PERIOD_TAG 0x5120 +#define NFAPI_NR_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x5128 +#define NFAPI_NR_NFAPI_EARFCN_TAG 0x5129 +#define NFAPI_NR_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x5130 +#define NFAPI_NR_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x5131 +#define NFAPI_NR_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x5132 +#define NFAPI_NR_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x5133 + +// P5 Message Structures +typedef struct { + nfapi_uint16_tlv_t numerology_index_mu; + nfapi_uint16_tlv_t duplex_mode; +} nfapi_nr_subframe_config_t; + +#define NFAPI_NR_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x5001 +#define NFAPI_NR_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x5002 +#define NFAPI_NR_SUBFRAME_CONFIG_PB_TAG 0x5003 +#define NFAPI_NR_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x5004 +#define NFAPI_NR_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x5005 +#define NFAPI_NR_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x5006 + +typedef struct { + nfapi_uint16_tlv_t tx_antenna_ports; + nfapi_uint16_tlv_t rx_antenna_ports; +} nfapi_nr_rf_config_t; + +#define NFAPI_NR_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x500A +#define NFAPI_NR_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x500B +#define NFAPI_NR_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x500C +#define NFAPI_NR_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x500D +#define NFAPI_NR_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x500E + +typedef struct { + nfapi_uint16_tlv_t physical_cell_id; + nfapi_uint16_tlv_t half_frame_index; + nfapi_uint16_tlv_t ssb_subcarrier_offset; + nfapi_uint16_tlv_t ssb_position_in_burst; + nfapi_uint16_tlv_t ssb_periodicity; + nfapi_uint16_tlv_t ss_pbch_block_power; + nfapi_uint16_tlv_t n_ssb_crb; +} nfapi_nr_sch_config_t; + +#define NFAPI_NR_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x501E +#define NFAPI_NR_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x501F +#define NFAPI_NR_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x5020 +#define NFAPI_NR_SCH_CONFIG_SSB_POSITION_IN_BURST 0x5021 +#define NFAPI_NR_SCH_CONFIG_SSB_PERIODICITY 0x5022 +#define NFAPI_NR_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x5023 +#define NFAPI_NR_SCH_CONFIG_N_SSB_CRB 0x5024 + + +typedef struct { + nfapi_uint16_tlv_t prach_RootSequenceIndex; ///// L1 parameter 'PRACHRootSequenceIndex' + nfapi_uint16_tlv_t prach_msg1_SubcarrierSpacing; ///// L1 parameter 'prach-Msg1SubcarrierSpacing' + nfapi_uint16_tlv_t restrictedSetConfig; + nfapi_uint16_tlv_t msg3_transformPrecoding; ///// L1 parameter 'msg3-tp' + /////////////////--------------------NR RACH-ConfigGeneric--------------------///////////////// + nfapi_uint16_tlv_t prach_ConfigurationIndex; ///// L1 parameter 'PRACHConfigurationIndex' + nfapi_uint16_tlv_t prach_msg1_FDM; ///// L1 parameter 'prach-FDM' + nfapi_uint16_tlv_t prach_msg1_FrequencyStart; ///// L1 parameter 'prach-frequency-start' + nfapi_uint16_tlv_t zeroCorrelationZoneConfig; + nfapi_uint16_tlv_t preambleReceivedTargetPower; +} nfapi_nr_rach_config_t; + +typedef struct { + //NR FrequencyInfoDL + nfapi_uint16_tlv_t absoluteFrequencySSB; + nfapi_uint16_tlv_t ssb_SubcarrierOffset; ///// L1 parameter 'kssb' + nfapi_uint16_tlv_t DL_FreqBandIndicatorNR; + nfapi_uint16_tlv_t DL_absoluteFrequencyPointA; ///// L1 parameter 'offset-ref-low-scs-ref-PRB' + //NR DL SCS-SpecificCarrier ///// L1 parameter 'offset-pointA-set' + nfapi_uint16_tlv_t DL_offsetToCarrier; ///// L1 parameter 'offset-pointA-low-scs ' + nfapi_uint16_tlv_t DL_SCS_SubcarrierSpacing; ///// L1 parameter 'ref-scs' + nfapi_uint16_tlv_t DL_SCS_SpecificCarrier_k0; ///// L1 parameter 'k0' + nfapi_uint16_tlv_t DL_carrierBandwidth; ///// L1 parameter 'BW' +} nfapi_nr_dl_frequencyinfo_t; + +typedef struct { + //NR BWP-DownlinkCommon + nfapi_uint16_tlv_t DL_locationAndBandwidth; ///// L1 parameter 'DL-BWP-loc' + nfapi_uint16_tlv_t DL_BWP_SubcarrierSpacing; ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1 + nfapi_uint16_tlv_t DL_BWP_prefix_type; +} nfapi_nr_bwp_dl_t; + +typedef struct { + //NR FrequencyInfoUL + nfapi_uint16_tlv_t UL_FreqBandIndicatorNR; + nfapi_uint16_tlv_t UL_absoluteFrequencyPointA; ///// L1 parameter 'offset-ref-low-scs-ref-PRB' + nfapi_uint16_tlv_t UL_additionalSpectrumEmission; + nfapi_uint16_tlv_t UL_p_Max; + nfapi_uint16_tlv_t UL_frequencyShift7p5khz; + //NR UL SCS-SpecificCarrier ///// L1 parameter 'offset-pointA-set' + nfapi_uint16_tlv_t UL_offsetToCarrier; ///// L1 parameter 'offset-pointA-low-scs ' + nfapi_uint16_tlv_t UL_SCS_SubcarrierSpacing; ///// L1 parameter 'ref-scs' + nfapi_uint16_tlv_t UL_SCS_SpecificCarrier_k0; ///// L1 parameter 'k0' + nfapi_uint16_tlv_t UL_carrierBandwidth; ///// L1 parameter 'BW' +} nfapi_nr_ul_frequencyinfo_t; + +typedef struct { + //NR BWP-UplinkCommon ///// L1 parameter 'initial-UL-BWP' + nfapi_uint16_tlv_t UL_locationAndBandwidth; ///// L1 parameter 'DL-BWP-loc' + nfapi_uint16_tlv_t UL_BWP_SubcarrierSpacing; ///// Corresponds to subcarrier spacing according to 38.211, Table 4.2-1 + nfapi_uint16_tlv_t UL_BWP_prefix_type; +} nfapi_nr_bwp_ul_t; + +typedef struct { + nfapi_uint16_tlv_t groupHoppingEnabledTransformPrecoding; ///// L1 parameter 'Group-hopping-enabled-Transform-precoding' + nfapi_uint16_tlv_t msg3_DeltaPreamble; ///// L1 parameter 'Delta-preamble-msg3' + nfapi_uint16_tlv_t p0_NominalWithGrant; ///// L1 parameter 'p0-nominal-pusch-withgrant' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_k2; ///// L1 parameter 'K2' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_mappingType; ///// L1 parameter 'Mapping-type' +} nfapi_nr_pusch_config_t; + +typedef struct { + nfapi_uint16_tlv_t pucch_GroupHopping; ///// L1 parameter 'PUCCH-GroupHopping' + nfapi_uint16_tlv_t p0_nominal; ///// L1 parameter 'p0-nominal-pucch' +} nfapi_nr_pucch_config_t; + +typedef struct { + nfapi_uint16_tlv_t TimeDomainResourceAllocation_k0; ///// L1 parameter 'K0' + nfapi_uint16_tlv_t TimeDomainResourceAllocation_mappingType; ///// L1 parameter 'Mapping-type' +} nfapi_nr_pdsch_config_t; + +typedef struct { + nfapi_uint16_tlv_t searchSpaceSIB1; ///// L1 parameter 'rmsi-SearchSpace' + nfapi_uint16_tlv_t searchSpaceOtherSystemInformation; ///// L1 parameter 'osi-SearchSpace' + nfapi_uint16_tlv_t pagingSearchSpace; ///// L1 parameter 'paging-SearchSpace' + nfapi_uint16_tlv_t ra_SearchSpace; ///// L1 parameter 'ra-SearchSpace' + nfapi_uint16_tlv_t rach_ra_ControlResourceSet; ///// L1 parameter 'rach-coreset-configuration' + nfapi_uint16_tlv_t common_controlResourceSetId; ///// L1 parameter 'CORESET-ID + nfapi_uint16_tlv_t common_ControlResourceSet_duration; ///// L1 parameter 'CORESET-time-duration' + nfapi_uint16_tlv_t cce_REG_MappingType; ///// L1 parameter 'CORESET-CCE-REG-mapping-type' + nfapi_uint16_tlv_t reg_BundleSize; ///// L1 parameter 'CORESET-REG-bundle-size' + nfapi_uint16_tlv_t interleaverSize; ///// L1 parameter 'CORESET-interleaver-size' + nfapi_uint16_tlv_t shiftIndex; ///// L1 parameter 'CORESET-shift-index' + nfapi_uint16_tlv_t precoderGranularity; ///// L1 parameter 'CORESET-precoder-granuality' + nfapi_uint16_tlv_t TCI_StateId; ///// L1 parameter 'TCI-StatesPDCCH' + nfapi_uint16_tlv_t tci_PresentInDCI; ///// L1 parameter 'TCI-PresentInDCI' + nfapi_uint16_tlv_t SearchSpaceId; + nfapi_uint16_tlv_t commonSearchSpaces_controlResourceSetId; + nfapi_uint16_tlv_t SearchSpace_monitoringSlotPeriodicityAndOffset; ///// L1 parameters 'Montoring-periodicity-PDCCH-slot' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel1; ///// L1 parameter 'Aggregation-level-1' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel2; ///// L1 parameter 'Aggregation-level-2' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel4; ///// L1 parameter 'Aggregation-level-4' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel8; ///// L1 parameter 'Aggregation-level-8' + nfapi_uint16_tlv_t SearchSpace_nrofCandidates_aggregationLevel16; ///// L1 parameter 'Aggregation-level-16' + nfapi_uint16_tlv_t Common_dci_Format2_0_nrofCandidates_SFI_And_aggregationLevel; ///// L1 parameters 'SFI-Num-PDCCH-cand' and 'SFI-Aggregation-Level' + nfapi_uint16_tlv_t Common_dci_Format2_3_monitoringPeriodicity; ///// L1 parameter 'SRS-monitoring-periodicity' + nfapi_uint16_tlv_t Common_dci_Format2_3_nrofPDCCH_Candidates; ///// L1 parameter 'SRS-Num-PDCCH-cand' + nfapi_uint16_tlv_t ue_Specific__dci_Formats; +} nfapi_nr_pdcch_config_t; + +typedef struct { + nfapi_uint16_tlv_t ssb_PositionsInBurst_PR; ///// L1 parameter 'SSB-Transmitted + nfapi_uint16_tlv_t ssb_periodicityServingCell; + nfapi_uint16_tlv_t dmrs_TypeA_Position; ///// Position of (first) DL DM-RS + nfapi_uint16_tlv_t NIA_SubcarrierSpacing; ///// Used only for non-initial access (e.g. SCells, PCell of SCG) + nfapi_uint16_tlv_t ss_PBCH_BlockPower; +} nfapi_nr_servingcellconfigcommon_t; + +typedef struct { +//NR TDD-UL-DL-ConfigCommon ///// L1 parameter 'UL-DL-configuration-common' + nfapi_uint16_tlv_t referenceSubcarrierSpacing; ///// L1 parameter 'reference-SCS' + nfapi_uint16_tlv_t dl_UL_TransmissionPeriodicity; ///// L1 parameter 'DL-UL-transmission-periodicity' + nfapi_uint16_tlv_t nrofDownlinkSlots; ///// L1 parameter 'number-of-DL-slots' + nfapi_uint16_tlv_t nrofDownlinkSymbols; ///// L1 parameter 'number-of-DL-symbols-common' + nfapi_uint16_tlv_t nrofUplinkSlots; ///// L1 parameter 'number-of-UL-slots' + nfapi_uint16_tlv_t nrofUplinkSymbols; ///// L1 parameter 'number-of-UL-symbols-common' +} nfapi_nr_tdd_ul_dl_config_t; + + +typedef struct { + //RateMatchPattern is used to configure one rate matching pattern for PDSCH ///// L1 parameter 'Resource-set-cekk' + nfapi_uint16_tlv_t rateMatchPatternId; + nfapi_uint16_tlv_t RateMatchPattern_patternType; + nfapi_uint16_tlv_t symbolsInResourceBlock; ///// L1 parameter 'rate-match-PDSCH-bitmap2 + nfapi_uint16_tlv_t periodicityAndPattern; ///// L1 parameter 'rate-match-PDSCH-bitmap3' + nfapi_uint16_tlv_t RateMatchPattern_controlResourceSet; + nfapi_uint16_tlv_t RateMatchPattern_subcarrierSpacing; ///// L1 parameter 'resource-pattern-scs' + nfapi_uint16_tlv_t RateMatchPattern_mode; +} nfapi_nr_ratematchpattern_t; + +typedef struct { + //NR RateMatchPatternLTE-CRS + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_carrierFreqDL; ///// L1 parameter 'center-subcarrier-location' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_carrierBandwidthDL; ///// L1 parameter 'BW' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_nrofCRS_Ports; ///// L1 parameter 'rate-match-resources-numb-LTE-CRS-antenna-port' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_v_Shift; ///// L1 parameter 'rate-match-resources-LTE-CRS-v-shift' + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_radioframeAllocationPeriod; + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_radioframeAllocationOffset; + nfapi_uint16_tlv_t RateMatchPatternLTE_CRS_subframeAllocation_choice; +} nfapi_nr_ratematchpattern_lte_crs_t; + + + + +typedef struct { + nfapi_p4_p5_message_header_t header; + uint8_t num_tlv; + nfapi_nr_subframe_config_t subframe_config; + nfapi_nr_rf_config_t rf_config; + nfapi_nr_sch_config_t sch_config; + nfapi_nr_rach_config_t rach_config; + nfapi_nr_dl_frequencyinfo_t dl_frequencyinfo; + nfapi_nr_bwp_dl_t bwp_dl; + nfapi_nr_ul_frequencyinfo_t ul_frequencyinfo; + nfapi_nr_bwp_ul_t bwp_ul; + nfapi_nr_pusch_config_t pusch_config; + nfapi_nr_pucch_config_t pucch_config; + nfapi_nr_pdsch_config_t pdsch_config; + nfapi_nr_pucch_config_t pdcch_config; + nfapi_nr_servingcellconfigcommon_t servingcellconfigcommon; + nfapi_nr_tdd_ul_dl_config_t tdd_ul_dl_config; + nfapi_nr_ratematchpattern_t ratematchpattern; + nfapi_nr_ratematchpattern_lte_crs_t ratematchpattern_lte_crs; + nfapi_nr_nfapi_t nfapi_config; + + nfapi_vendor_extension_tlv_t vendor_extension; +} nfapi_nr_config_request_t; + +#endif \ No newline at end of file diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h deleted file mode 100644 index fcfb7e7b25..0000000000 --- a/nfapi/open-nFAPI/nfapi/public_inc/nr_fapi_ue_interface.h +++ /dev/null @@ -1,3886 +0,0 @@ -/* - * Copyright 2017 Cisco Systems, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_ -#define _NFAPI_INTERFACE_NR_EXTENSION_H_ -#define _NFAPI_INTERFACE_H_ - -#include "stddef.h" - -// Constants - update based on implementation -#define NFAPI_MAX_PHY_RF_INSTANCES 2 -#define NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH 16 -#define NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH 3 -#define NFAPI_MAX_NUM_RF_BANDS 16 - -// The following definition control the size of arrays used in the interface. -// These may be changed if desired. They are used in the encoder to make sure -// that the user has not specified a 'count' larger than the max array, and also -// used by the decoder when decode an array. If the 'count' received is larger -// than the array it is to be stored in the decode fails. -#define NFAPI_MAX_NUM_ANTENNAS 8 -#define NFAPI_MAX_NUM_SUBBANDS 13 -#define NFAPI_MAX_BF_VECTORS 8 -#define NFAPI_MAX_CC 1 -#define NFAPI_MAX_NUM_PHYSICAL_ANTENNAS 8 -#define NFAPI_MAX_RSSI 8 -#define NFAPI_MAX_PSC_LIST 32 -#define NFAPI_MAX_PCI_LIST 32 -#define NFAPI_MAX_CARRIER_LIST 32 -#define NFAPI_MAX_ARFCN_LIST 128 -#define NFAPI_MAX_LTE_CELLS_FOUND 8 -#define NFAPI_MAX_UTRAN_CELLS_FOUND 8 -#define NFAPI_MAX_GSM_CELLS_FOUND 8 -#define NFAPI_MAX_NB_IOT_CELLS_FOUND 8 -#define NFAPI_MAX_SI_PERIODICITY 8 -#define NFAPI_MAX_SI_INDEX 8 -#define NFAPI_MAX_MIB_LENGTH 32 -#define NFAPI_MAX_SIB_LENGTH 256 -#define NFAPI_MAX_SI_LENGTH 256 -#define NFAPI_MAX_OPAQUE_DATA 64 -#define NFAPI_MAX_NUM_SCHEDULED_UES 8 // Used in the TPM structure -#define NFAPI_MAX_PNF_PHY 5 -#define NFAPI_MAX_PNF_PHY_RF_CONFIG 5 -#define NFAPI_MAX_PNF_RF 5 -#define NFAPI_MAX_NMM_FREQUENCY_BANDS 32 -#define NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS 100 -#define NFAPI_MAX_UL_DL_CONFIGURATIONS 5 -#define NFAPI_MAX_CSI_RS_RESOURCE_CONFIG 4 -#define NFAPI_MAX_ANTENNA_PORT_COUNT 8 -#define NFAPI_MAX_EPDCCH_PRB 8 -#define NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS 8 -#define NFAPI_MAX_NUMBER_ACK_NACK_TDD 8 -#define NFAPI_MAX_RO_DL 8 - -#define NFAPI_HEADER_LENGTH 8 -#define NFAPI_P7_HEADER_LENGTH 16 - -#define NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE 0xF000 -#define NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE 0xFFFF - -#define NFAPI_VERSION_3_0_11 0x000 -#define NFAPI_VERSION_3_0_12 0x001 - -// The IANA agreed port definition of the P5 SCTP VNF enpoint -// http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=7701 -#define NFAPI_P5_SCTP_PORT 7701 - -typedef unsigned int uint32_t; -typedef unsigned short uint16_t; -typedef unsigned char uint8_t; -typedef signed int int32_t; -typedef signed short int16_t; -typedef signed char int8_t; - -typedef struct { - uint16_t phy_id; - uint16_t message_id; - uint16_t message_length; - uint16_t spare; -} nfapi_p4_p5_message_header_t; - -typedef struct { - uint16_t phy_id; - uint16_t message_id; - uint16_t message_length; - uint16_t m_segment_sequence; /* This consists of 3 fields - namely, M, Segement & Sequence number*/ - uint32_t checksum; - uint32_t transmit_timestamp; -} nfapi_p7_message_header_t; - -#define NFAPI_PHY_ID_NA 0 - -//#define NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x80) >> 7 ) -//#define NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x70) >> 4 ) -#define NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x8000) >> 15 ) -#define NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x7F00) >> 8 ) -#define NFAPI_P7_GET_SEQUENCE(_mss) ( (_mss) & 0x00FF ) -#define NFAPI_P7_SET_MSS(_more, _segm, _sequ) ( (((_more) & 0x1) << 7) | (((_segm) & 0x7) << 4) | ((_sequ) & 0xF) ) - -typedef struct { - uint16_t tag; - uint16_t length; -} nfapi_tl_t; -#define NFAPI_TAG_LENGTH_PACKED_LEN 4 - -// Convenience methods to convert between SFN/SFN formats -#define NFAPI_SFNSF2DEC(_sfnsf) ((((_sfnsf) >> 4) * 10) + ((_sfnsf) & 0xF)) -#define NFAPI_SFNSFDEC2SFNSF(_sfnsf_dec) ((((_sfnsf_dec) / 10) << 4) | (((_sfnsf_dec) - (((_sfnsf_dec) / 10) * 10)) & 0xF)) - -#define NFAPI_SFNSF2SFN(_sfnsf) ((_sfnsf) >> 4) -#define NFAPI_SFNSF2SF(_sfnsf) ((_sfnsf) & 0xF) - -#define NFAPI_MAX_SFNSFDEC 10240 - -typedef nfapi_tl_t* nfapi_vendor_extension_tlv_t; - - -// nFAPI Message IDs -typedef enum { - NFAPI_DL_CONFIG_REQUEST = 0x0080, - NFAPI_UL_CONFIG_REQUEST, - NFAPI_SUBFRAME_INDICATION, - NFAPI_HI_DCI0_REQUEST, - NFAPI_TX_REQUEST, - NFAPI_HARQ_INDICATION, - NFAPI_CRC_INDICATION, - NFAPI_RX_ULSCH_INDICATION, - NFAPI_RACH_INDICATION, - NFAPI_SRS_INDICATION, - NFAPI_RX_SR_INDICATION, - NFAPI_RX_CQI_INDICATION, - NFAPI_LBT_DL_CONFIG_REQUEST, - NFAPI_LBT_DL_INDICATION, - NFAPI_NB_HARQ_INDICATION, - NFAPI_NRACH_INDICATION, - - NFAPI_PNF_PARAM_REQUEST = 0x0100, - NFAPI_PNF_PARAM_RESPONSE, - NFAPI_PNF_CONFIG_REQUEST, - NFAPI_PNF_CONFIG_RESPONSE, - NFAPI_PNF_START_REQUEST, - NFAPI_PNF_START_RESPONSE, - NFAPI_PNF_STOP_REQUEST, - NFAPI_PNF_STOP_RESPONSE, - NFAPI_PARAM_REQUEST, - NFAPI_PARAM_RESPONSE, - NFAPI_CONFIG_REQUEST, - NFAPI_CONFIG_RESPONSE, - NFAPI_START_REQUEST, - NFAPI_START_RESPONSE, - NFAPI_STOP_REQUEST, - NFAPI_STOP_RESPONSE, - NFAPI_MEASUREMENT_REQUEST, - NFAPI_MEASUREMENT_RESPONSE, - - NFAPI_UL_NODE_SYNC = 0x0180, - NFAPI_DL_NODE_SYNC, - NFAPI_TIMING_INFO, - - - NFAPI_RSSI_REQUEST = 0x0200, - NFAPI_RSSI_RESPONSE, - NFAPI_RSSI_INDICATION, - NFAPI_CELL_SEARCH_REQUEST, - NFAPI_CELL_SEARCH_RESPONSE, - NFAPI_CELL_SEARCH_INDICATION, - NFAPI_BROADCAST_DETECT_REQUEST, - NFAPI_BROADCAST_DETECT_RESPONSE, - NFAPI_BROADCAST_DETECT_INDICATION, - NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST, - NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE, - NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION, - NFAPI_SYSTEM_INFORMATION_REQUEST, - NFAPI_SYSTEM_INFORMATION_RESPONSE, - NFAPI_SYSTEM_INFORMATION_INDICATION, - NFAPI_NMM_STOP_REQUEST, - NFAPI_NMM_STOP_RESPONSE, - - NFAPI_VENDOR_EXT_MSG_MIN = 0x0300, - NFAPI_VENDOR_EXT_MSG_MAX = 0x03FF, - - - NFAPI_MAX_MESSAGE_ID, -} nfapi_message_id_e; - -// nFAPI Error Codes -typedef enum { - NFAPI_MSG_OK = 0, - NFAPI_MSG_INVALID_STATE, - NFAPI_MSG_INVALID_CONFIG, - NFAPI_SFN_OUT_OF_SYNC, - NFAPI_MSG_SUBFRAME_ERR, - NFAPI_MSG_BCH_MISSING, - NFAPI_MSG_INVALID_SFN, - NFAPI_MSG_HI_ERR, - NFAPI_MSG_TX_ERR, - - NFAPI_LBT_NO_PDU_IN_DL_REQ, - NFAPI_LBT_NO_VALID_CONFIG_REQ_RECEIVED, - NFAPI_FAPI_E_LBT_SF_SFN_PASSED_END_SF_SFN, - NFAPI_FAPI_E_LBT_OVERLAP, - NFAPI_MSG_BCH_PRESENT, - - NFAPI_NBIOT_UNEXPECTED_REQ, - - // This is special return code that indicates that a response has - // been send via P9 - NFAPI_MSG_P9_RESPONSE = 0xAA -} nfapi_error_code_e; - - -typedef enum { - NFAPI_P4_MSG_OK = 100, - NFAPI_P4_MSG_INVALID_STATE = 101, - NFAPI_P4_MSG_INVALID_CONFIG = 102, - NFAPI_P4_MSG_RAT_NOT_SUPPORTED = 103, - NFAPI_P4_MSG_NMM_STOP_OK = 200, - NFAPI_P4_MSG_NMM_STOP_IGNOREDED = 201, - NFAPI_P4_MSG_NMM_STOP_INVALID_STATE = 202, - NFAPI_P4_MSG_PROCEDURE_COMPLETE = 300, - NFAPI_P4_MSG_PROCEDURE_STOPPED = 301, - NFAPI_P4_MSG_PARTIAL_RESULTS = 302, - NFAPI_P4_MSG_TIMEOUT = 303 -} nfapi_p4_error_code_e; - -// nFAPI enums -typedef enum { - NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE = 0, - NFAPI_DL_CONFIG_BCH_PDU_TYPE, - NFAPI_DL_CONFIG_MCH_PDU_TYPE, - NFAPI_DL_CONFIG_DLSCH_PDU_TYPE, - NFAPI_DL_CONFIG_PCH_PDU_TYPE, - NFAPI_DL_CONFIG_PRS_PDU_TYPE, - NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE, - NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE, - NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE, - NFAPI_DL_CONFIG_NBCH_PDU_TYPE, - NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE, - NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE -} nfapi_dl_config_pdu_type_e; - -typedef enum { - NFAPI_DL_DCI_FORMAT_1 = 0, - NFAPI_DL_DCI_FORMAT_1A, - NFAPI_DL_DCI_FORMAT_1B, - NFAPI_DL_DCI_FORMAT_1C, - NFAPI_DL_DCI_FORMAT_1D, - NFAPI_DL_DCI_FORMAT_2, - NFAPI_DL_DCI_FORMAT_2A, - NFAPI_DL_DCI_FORMAT_2B, - NFAPI_DL_DCI_FORMAT_2C -} nfapi_dl_dci_format_e; - -typedef enum { - NFAPI_UL_DCI_FORMAT_0 = 0, - NFAPI_UL_DCI_FORMAT_3, - NFAPI_UL_DCI_FORMAT_3A, - NFAPI_UL_DCI_FORMAT_4 -} nfapi_ul_dci_format_e; - -typedef enum { - NFAPI_UL_CONFIG_ULSCH_PDU_TYPE = 0, - NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE, - NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE, - NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_SRS_PDU_TYPE, - NFAPI_UL_CONFIG_HARQ_BUFFER_PDU_TYPE, - NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE, - NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE, - NFAPI_UL_CONFIG_NULSCH_PDU_TYPE, - NFAPI_UL_CONFIG_NRACH_PDU_TYPE, -} nfapi_ul_config_pdu_type_e; - -typedef enum { - NFAPI_HI_DCI0_HI_PDU_TYPE = 0, - NFAPI_HI_DCI0_DCI_PDU_TYPE, - NFAPI_HI_DCI0_EPDCCH_DCI_PDU_TYPE, - NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE, - NFAPI_HI_DCI0_NPDCCH_DCI_PDU_TYPE, -} nfapi_hi_dci0_pdu_type_e; - -typedef enum { - NFAPI_HARQ_ACK = 1, - NFAPI_HARQ_NACK, - NFAPI_HARQ_ACK_OR_NACK, - NFAPI_HARQ_DTX, - NFAPI_HARQ_ACK_OR_DTX, - NFAPI_HARQ_NACK_OR_DTX, - NFAPI_HARQ_ACK_OR_NACK_OR_DTX -} nfapi_harq_type_e; - -typedef enum { - NFAPI_CSI_REPORT_TYPE_PERIODIC = 0, - NFAPI_CSI_REPORT_TYPE_APERIODIC -} nfapi_csi_report_type_e; - -typedef enum { - NFAPI_DL_BW_SUPPORTED_6 = 1, - NFAPI_DL_BW_SUPPORTED_15 = 2, - NFAPI_DL_BW_SUPPORTED_25 = 4, - NFAPI_DL_BW_SUPPORTED_50 = 8, - NFAPI_DL_BW_SUPPORTED_75 = 16, - NFAPI_DL_BW_SUPPORTED_100 = 32 -} nfapi_dl_bandwith_supported_e; - -typedef enum { - NFAPI_UL_BW_SUPPORTED_6 = 1, - NFAPI_UL_BW_SUPPORTED_15 = 2, - NFAPI_UL_BW_SUPPORTED_25 = 4, - NFAPI_UL_BW_SUPPORTED_50 = 8, - NFAPI_UL_BW_SUPPORTED_75 = 16, - NFAPI_UL_BW_SUPPORTED_100 = 32 -} nfapi_ul_bandwith_supported_e; - -typedef enum { - NFAPI_3GPP_REL_SUPPORTED_8 = 0, - NFAPI_3GPP_REL_SUPPORTED_9 = 1, - NFAPI_3GPP_REL_SUPPORTED_10 = 2, - NFAPI_3GPP_REL_SUPPORTED_11 = 4, - NFAPI_3GPP_REL_SUPPORTED_12 = 8, - NFAPI_3GPP_REL_SUPPORTED_15 = 64 -} nfapi_3gpp_release_supported_e; - - -typedef enum { - NFAPI_DUPLEXING_MODE_TDD = 0, - NFAPI_DUPLEXING_MODE_FDD = 1, - NFAPI_DUPLEXING_MODE_HD_FDD = 2, -} nfapi_duplexing_mode_e; - -typedef enum { - NFAPI_CP_NORMAL = 0, - NFAPI_CP_EXTENDED = 1 -} nfapi_cyclic_prefix_type_e; - -typedef enum { - NFAPI_RAT_TYPE_LTE = 0, - NFAPI_RAT_TYPE_UTRAN = 1, - NFAPI_RAT_TYPE_GERAN = 2, - NFAPI_RAT_TYPE_NB_IOT = 3, - NFAPI_RAT_TYPE_NR = 4 -} nfapi_rat_type_e; - -typedef enum { - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_BUNDLING, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_MULIPLEXING, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_SPECIAL_BUNDLING, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_CHANNEL_SELECTION, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_3, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_4, - NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_5 -} nfapi_harq_indication_tdd_ack_nackformat_e; - - -typedef enum { - NFAPI_LBT_DL_CONFIG_REQUEST_PDSCH_PDU_TYPE = 0, - NFAPI_LBT_DL_CONFIG_REQUEST_DRS_PDU_TYPE -} nfapi_lbt_dl_config_pdu_type_e; - -typedef enum { - NFAPI_LBT_DL_RSP_PDSCH_PDU_TYPE = 0, - NFAPI_LBT_DL_RSP_DRS_PDU_TYPE -} nfapi_lbt_dl_rsp_pdu_type_e; - -typedef struct { - nfapi_tl_t tl; - uint32_t length; - uint8_t value[NFAPI_MAX_OPAQUE_DATA]; -} nfapi_opaqaue_data_t; - -// Utility functions to turn enums into char* -const char* nfapi_error_code_to_str(nfapi_error_code_e value); - - -// P5 Sub Structures -typedef struct { - nfapi_tl_t tl; - uint8_t nfapi_sync_mode; - uint8_t location_mode; - uint16_t location_coordinates_length; - uint8_t location_coordinates[NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH]; - uint32_t dl_config_timing; - uint32_t tx_timing; - uint32_t ul_config_timing; - uint32_t hi_dci0_timing; - uint16_t maximum_number_phys; - uint16_t maximum_total_bandwidth; - uint8_t maximum_total_number_dl_layers; - uint8_t maximum_total_number_ul_layers; - uint8_t shared_bands; - uint8_t shared_pa; - int16_t maximum_total_power; - uint8_t oui[NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH]; -} nfapi_pnf_param_general_t; -#define NFAPI_PNF_PARAM_GENERAL_TAG 0x1000 - - - - - -typedef struct { - uint16_t rf_config_index; -} nfapi_rf_config_info_t; - -typedef struct { - uint16_t phy_config_index; - uint16_t number_of_rfs; - nfapi_rf_config_info_t rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG]; - uint16_t number_of_rf_exclusions; - nfapi_rf_config_info_t excluded_rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG]; - uint16_t downlink_channel_bandwidth_supported; - uint16_t uplink_channel_bandwidth_supported; - uint8_t number_of_dl_layers_supported; - uint8_t number_of_ul_layers_supported; - uint16_t maximum_3gpp_release_supported; - uint8_t nmm_modes_supported; -} nfapi_pnf_phy_info_t; - - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_t; -#define NFAPI_PNF_PHY_TAG 0x1001 - -typedef struct { - uint16_t phy_config_index; - uint16_t transmission_mode_7_supported; - uint16_t transmission_mode_8_supported; - uint16_t two_antenna_ports_for_pucch; - uint16_t transmission_mode_9_supported; - uint16_t simultaneous_pucch_pusch; - uint16_t four_layer_tx_with_tm3_and_tm4; -} nfapi_pnf_phy_rel10_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel10_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel10_t; -#define NFAPI_PNF_PHY_REL10_TAG 0x100A - -typedef struct { - uint16_t phy_config_index; - uint16_t edpcch_supported; - uint16_t multi_ack_csi_reporting; - uint16_t pucch_tx_diversity; - uint16_t ul_comp_supported; - uint16_t transmission_mode_5_supported; -} nfapi_pnf_phy_rel11_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel11_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel11_t; -#define NFAPI_PNF_PHY_REL11_TAG 0x100B - - -typedef struct { - uint16_t phy_config_index; - uint16_t csi_subframe_set; - uint16_t enhanced_4tx_codebook; - uint16_t drs_supported; - uint16_t ul_64qam_supported; - uint16_t transmission_mode_10_supported; - uint16_t alternative_bts_indices; -} nfapi_pnf_phy_rel12_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel12_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel12_t; -#define NFAPI_PNF_PHY_REL12_TAG 0x100C - -typedef struct { - uint16_t phy_config_index; - uint16_t pucch_format4_supported; - uint16_t pucch_format5_supported; - uint16_t more_than_5_ca_support; - uint16_t laa_supported; - uint16_t laa_ending_in_dwpts_supported; - uint16_t laa_starting_in_second_slot_supported; - uint16_t beamforming_supported; - uint16_t csi_rs_enhancement_supported; - uint16_t drms_enhancement_supported; - uint16_t srs_enhancement_supported; -} nfapi_pnf_phy_rel13_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel13_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel13_t; -#define NFAPI_PNF_PHY_REL13_TAG 0x100D - -typedef struct { - uint16_t phy_config_index; - uint16_t number_of_rfs; - nfapi_rf_config_info_t rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG]; - uint16_t number_of_rf_exclusions; - nfapi_rf_config_info_t excluded_rf_config[NFAPI_MAX_PNF_PHY_RF_CONFIG]; - uint8_t number_of_dl_layers_supported; - uint8_t number_of_ul_layers_supported; - uint16_t maximum_3gpp_release_supported; - uint8_t nmm_modes_supported; -} nfapi_pnf_phy_rel13_nb_iot_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel13_nb_iot_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel13_nb_iot_t; -#define NFAPI_PNF_PHY_REL13_NB_IOT_TAG 0x100E - -typedef struct { - uint16_t phy_config_index; -} nfapi_pnf_phy_rel15_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_phys; - nfapi_pnf_phy_rel15_info_t phy[NFAPI_MAX_PNF_PHY]; -} nfapi_pnf_phy_rel15_t; -#define NFAPI_PNF_PHY_REL15_TAG 0x100H - - -typedef struct { - uint16_t rf_config_index; - uint16_t band; - int16_t maximum_transmit_power; - int16_t minimum_transmit_power; - uint8_t number_of_antennas_suppported; - uint32_t minimum_downlink_frequency; - uint32_t maximum_downlink_frequency; - uint32_t minimum_uplink_frequency; - uint32_t maximum_uplink_frequency; -} nfapi_pnf_rf_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_rfs; - nfapi_pnf_rf_info_t rf[NFAPI_MAX_PNF_RF]; -} nfapi_pnf_rf_t; -#define NFAPI_PNF_RF_TAG 0x1002 - -typedef struct { - uint16_t phy_id; - uint16_t phy_config_index; - uint16_t rf_config_index; -} nfapi_phy_rf_config_info_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_phy_rf_config_info; - nfapi_phy_rf_config_info_t phy_rf_config[NFAPI_MAX_PHY_RF_INSTANCES]; -} nfapi_pnf_phy_rf_config_t; -#define NFAPI_PNF_PHY_RF_TAG 0x1003 - -// Generic strucutre for single tlv value. -typedef struct { - nfapi_tl_t tl; - uint16_t value; -} nfapi_uint16_tlv_t; - -typedef struct { - nfapi_tl_t tl; - int16_t value; -} nfapi_int16_tlv_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t value; -} nfapi_uint8_tlv_t; - -typedef struct { - nfapi_uint16_tlv_t phy_state; -} nfapi_l1_status; - -#define NFAPI_L1_STATUS_PHY_STATE_TAG 0x00FA - -typedef struct { - nfapi_uint16_tlv_t dl_bandwidth_support; - nfapi_uint16_tlv_t ul_bandwidth_support; - nfapi_uint16_tlv_t dl_modulation_support; - nfapi_uint16_tlv_t ul_modulation_support; - nfapi_uint16_tlv_t phy_antenna_capability; - nfapi_uint16_tlv_t release_capability; - nfapi_uint16_tlv_t mbsfn_capability; -} nfapi_phy_capabilities_t; - -#define NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG 0x00C8 -#define NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG 0x00C9 -#define NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG 0x00CA -#define NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG 0x00CB -#define NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG 0x00CC -#define NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG 0x00CD -#define NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG 0x00CE - - -typedef struct { - nfapi_uint16_tlv_t data_report_mode; - nfapi_uint16_tlv_t sfnsf; -} nfapi_l23_config_t; - - -#define NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG 0x00F0 -#define NFAPI_L23_CONFIG_SFNSF_TAG 0x00F1 - -typedef struct { - nfapi_uint16_tlv_t numerology_index_mu; - nfapi_uint16_tlv_t duplex_mode; - nfapi_uint16_tlv_t pcfich_power_offset; - nfapi_uint16_tlv_t pb; - nfapi_uint16_tlv_t dl_cyclic_prefix_type; - nfapi_uint16_tlv_t ul_cyclic_prefix_type; -} nfapi_subframe_config_t; - -#define NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x0001 -#define NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x0002 -#define NFAPI_SUBFRAME_CONFIG_PB_TAG 0x0003 -#define NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x0004 -#define NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x0005 -#define NFAPI_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x0006 - -typedef struct { - nfapi_uint16_tlv_t dl_channel_bandwidth; - nfapi_uint16_tlv_t ul_channel_bandwidth; - nfapi_uint16_tlv_t reference_signal_power; - nfapi_uint16_tlv_t tx_antenna_ports; - nfapi_uint16_tlv_t rx_antenna_ports; -} nfapi_rf_config_t; - -#define NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x000A -#define NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x000B -#define NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x000C -#define NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x000D -#define NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x000E - -typedef struct { - nfapi_uint16_tlv_t phich_resource; - nfapi_uint16_tlv_t phich_duration; - nfapi_uint16_tlv_t phich_power_offset; -} nfapi_phich_config_t; - -#define NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG 0x0014 -#define NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG 0x0015 -#define NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG 0x0016 - -typedef enum { - NFAPI_HALF_FRAME_INDEX_FIRST_HALF = 0, - NFAPI_HALF_FRAME_INDEX_SECOND_HALF = 1 -} nfapi_half_frame_index_e; - -typedef struct { - nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers; - nfapi_uint16_tlv_t secondary_synchronization_signal_epre_eprers; - nfapi_uint16_tlv_t physical_cell_id; - nfapi_half_frame_index_e half_frame_index; - nfapi_uint16_tlv_t ssb_subcarrier_offset; - nfapi_uint16_tlv_t ssb_position_in_burst; - nfapi_uint16_tlv_t ssb_periodicity; - nfapi_uint16_tlv_t ss_pbch_block_power; -} nfapi_sch_config_t; - -#define NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E -#define NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001F -#define NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x0020 -#define NFAPI_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x0021 -#define NFAPI_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x0022 -#define NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023 -#define NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024 -#define NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025 - -typedef struct { - nfapi_uint16_tlv_t configuration_index; - nfapi_uint16_tlv_t root_sequence_index; - nfapi_uint16_tlv_t zero_correlation_zone_configuration; - nfapi_uint16_tlv_t high_speed_flag; - nfapi_uint16_tlv_t frequency_offset; -} nfapi_prach_config_t; - -#define NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG 0x0028 -#define NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG 0x0029 -#define NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x002A -#define NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG 0x002B -#define NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG 0x002C - -typedef struct { - nfapi_uint16_tlv_t hopping_mode; - nfapi_uint16_tlv_t hopping_offset; - nfapi_uint16_tlv_t number_of_subbands; -} nfapi_pusch_config_t; - -#define NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG 0x0032 -#define NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG 0x0033 -#define NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG 0x0034 - -typedef struct { - nfapi_uint16_tlv_t delta_pucch_shift; - nfapi_uint16_tlv_t n_cqi_rb; - nfapi_uint16_tlv_t n_an_cs; - nfapi_uint16_tlv_t n1_pucch_an; -} nfapi_pucch_config_t; - -#define NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG 0x003C -#define NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG 0x003D -#define NFAPI_PUCCH_CONFIG_N_AN_CS_TAG 0x003E -#define NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG 0x003F - -typedef struct { - nfapi_uint16_tlv_t bandwidth_configuration; - nfapi_uint16_tlv_t max_up_pts; - nfapi_uint16_tlv_t srs_subframe_configuration; - nfapi_uint16_tlv_t srs_acknack_srs_simultaneous_transmission; -} nfapi_srs_config_t; - -#define NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG 0x0046 -#define NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG 0x0047 -#define NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG 0x0048 -#define NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG 0x0049 - -typedef struct { - nfapi_uint16_tlv_t uplink_rs_hopping; - nfapi_uint16_tlv_t group_assignment; - nfapi_uint16_tlv_t cyclic_shift_1_for_drms; -} nfapi_uplink_reference_signal_config_t; - -#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG 0x0050 -#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG 0x0051 -#define NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG 0x0052 - - -typedef struct { - nfapi_uint16_tlv_t ed_threshold_lbt_pdsch; - nfapi_uint16_tlv_t ed_threshold_lbt_drs; - nfapi_uint16_tlv_t pd_threshold; - nfapi_uint16_tlv_t multi_carrier_type; - nfapi_uint16_tlv_t multi_carrier_tx; - nfapi_uint16_tlv_t multi_carrier_freeze; - nfapi_uint16_tlv_t tx_antenna_ports_drs; - nfapi_uint16_tlv_t tx_power_drs; -} nfapi_laa_config_t; - -#define NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG 0x0064 -#define NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG 0x0065 -#define NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG 0x0066 -#define NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG 0x0067 -#define NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG 0x0068 -#define NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG 0x0069 -#define NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG 0x006A -#define NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG 0x006B - -typedef struct { - - nfapi_uint16_tlv_t pbch_repetitions_enable_r13; - nfapi_uint16_tlv_t prach_catm_root_sequence_index; - nfapi_uint16_tlv_t prach_catm_zero_correlation_zone_configuration; - nfapi_uint16_tlv_t prach_catm_high_speed_flag; - nfapi_uint16_tlv_t prach_ce_level_0_enable; - nfapi_uint16_tlv_t prach_ce_level_0_configuration_index; - nfapi_uint16_tlv_t prach_ce_level_0_frequency_offset; - nfapi_uint16_tlv_t prach_ce_level_0_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t prach_ce_level_0_starting_subframe_periodicity; - nfapi_uint16_tlv_t prach_ce_level_0_hopping_enable; - nfapi_uint16_tlv_t prach_ce_level_0_hopping_offset; - nfapi_uint16_tlv_t prach_ce_level_1_enable; - nfapi_uint16_tlv_t prach_ce_level_1_configuration_index; - nfapi_uint16_tlv_t prach_ce_level_1_frequency_offset; - nfapi_uint16_tlv_t prach_ce_level_1_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t prach_ce_level_1_starting_subframe_periodicity; - nfapi_uint16_tlv_t prach_ce_level_1_hopping_enable; - nfapi_uint16_tlv_t prach_ce_level_1_hopping_offset; - nfapi_uint16_tlv_t prach_ce_level_2_enable; - nfapi_uint16_tlv_t prach_ce_level_2_configuration_index; - nfapi_uint16_tlv_t prach_ce_level_2_frequency_offset; - nfapi_uint16_tlv_t prach_ce_level_2_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t prach_ce_level_2_starting_subframe_periodicity; - nfapi_uint16_tlv_t prach_ce_level_2_hopping_enable; - nfapi_uint16_tlv_t prach_ce_level_2_hopping_offset; - nfapi_uint16_tlv_t prach_ce_level_3_enable; - nfapi_uint16_tlv_t prach_ce_level_3_configuration_index; - nfapi_uint16_tlv_t prach_ce_level_3_frequency_offset; - nfapi_uint16_tlv_t prach_ce_level_3_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t prach_ce_level_3_starting_subframe_periodicity; - nfapi_uint16_tlv_t prach_ce_level_3_hopping_enable; - nfapi_uint16_tlv_t prach_ce_level_3_hopping_offset; - nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodea; - nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodeb; -} nfapi_emtc_config_t; - -#define NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG 0x0078 -#define NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG 0x0079 -#define NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x007A -#define NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG 0x007B -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG 0x007C -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG 0x007D -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG 0x007E -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x007F -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG 0x0080 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG 0x0081 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG 0x0082 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG 0x0083 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG 0x0084 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG 0x0085 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0086 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG 0x0087 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG 0x0088 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG 0x0089 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG 0x008A -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG 0x008B -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG 0x008C -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x008D -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG 0x008E -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG 0x008F -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG 0x0090 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG 0x0091 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG 0x0092 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG 0x0093 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0094 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG 0x0095 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG 0x0096 -#define NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG 0x0097 -#define NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG 0x0098 -#define NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG 0x0099 - -typedef struct { - nfapi_uint16_tlv_t operating_mode; - nfapi_uint16_tlv_t anchor; - nfapi_uint16_tlv_t prb_index; - nfapi_uint16_tlv_t control_region_size; - nfapi_uint16_tlv_t assumed_crs_aps; - nfapi_uint16_tlv_t nprach_config_0_enabled; - nfapi_uint16_tlv_t nprach_config_0_sf_periodicity; - nfapi_uint16_tlv_t nprach_config_0_start_time; - nfapi_uint16_tlv_t nprach_config_0_subcarrier_offset; - nfapi_uint16_tlv_t nprach_config_0_number_of_subcarriers; - nfapi_uint16_tlv_t nprach_config_0_cp_length; - nfapi_uint16_tlv_t nprach_config_0_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t nprach_config_1_enabled; - nfapi_uint16_tlv_t nprach_config_1_sf_periodicity; - nfapi_uint16_tlv_t nprach_config_1_start_time; - nfapi_uint16_tlv_t nprach_config_1_subcarrier_offset; - nfapi_uint16_tlv_t nprach_config_1_number_of_subcarriers; - nfapi_uint16_tlv_t nprach_config_1_cp_length; - nfapi_uint16_tlv_t nprach_config_1_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t nprach_config_2_enabled; - nfapi_uint16_tlv_t nprach_config_2_sf_periodicity; - nfapi_uint16_tlv_t nprach_config_2_start_time; - nfapi_uint16_tlv_t nprach_config_2_subcarrier_offset; - nfapi_uint16_tlv_t nprach_config_2_number_of_subcarriers; - nfapi_uint16_tlv_t nprach_config_2_cp_length; - nfapi_uint16_tlv_t nprach_config_2_number_of_repetitions_per_attempt; - nfapi_uint16_tlv_t three_tone_base_sequence; - nfapi_uint16_tlv_t six_tone_base_sequence; - nfapi_uint16_tlv_t twelve_tone_base_sequence; - nfapi_uint16_tlv_t three_tone_cyclic_shift; - nfapi_uint16_tlv_t six_tone_cyclic_shift; - nfapi_uint16_tlv_t dl_gap_config_enable; - nfapi_uint16_tlv_t dl_gap_threshold; - nfapi_uint16_tlv_t dl_gap_periodicity; - nfapi_uint16_tlv_t dl_gap_duration_coefficient; -} nfapi_nb_iot_config_t; - -#define NFAPI_NB_IOT_CONFIG_OPERATING_MODE_TAG 0x00A5 -#define NFAPI_NB_IOT_CONFIG_ANCHOR_TAG 0x00A6 -#define NFAPI_NB_IOT_CONFIG_PRB_INDEX_TAG 0x00A7 -#define NFAPI_NB_IOT_CONFIG_CONTROL_REGION_SIZE_TAG 0x00A8 -#define NFAPI_NB_IOT_CONFIG_ASSUMED_CRS_APS_TAG 0x00A9 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_ENABLED_TAG 0x00AA -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SF_PERIODICITY_TAG 0x00AB -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_START_TIME_TAG 0x00AC -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SUBCARRIER_OFFSET_TAG 0x00AD -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_SUBCARRIERS_TAG 0x00AE -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_CP_LENGTH_TAG 0x00AF -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B0 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_ENABLED_TAG 0x00B1 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SF_PERIODICITY_TAG 0x00B2 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_START_TIME_TAG 0x00B3 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SUBCARRIER_OFFSET_TAG 0x00B4 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_SUBCARRIERS_TAG 0x00B5 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_CP_LENGTH_TAG 0x00B6 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B7 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_ENABLED_TAG 0x00B8 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SF_PERIODICITY_TAG 0x00B9 -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_START_TIME_TAG 0x00BA -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SUBCARRIER_OFFSET_TAG 0x00BB -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_SUBCARRIERS_TAG 0x00BC -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_CP_LENGTH_TAG 0x00BD -#define NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00BE -#define NFAPI_NB_IOT_CONFIG_THREE_TONE_BASE_SEQUENCE_TAG 0x00BF -#define NFAPI_NB_IOT_CONFIG_SIX_TONE_BASE_SEQUENCE_TAG 0x00C0 -#define NFAPI_NB_IOT_CONFIG_TWELVE_TONE_BASE_SEQUENCE_TAG 0x00C1 -#define NFAPI_NB_IOT_CONFIG_THREE_TONE_CYCLIC_SHIFT_TAG 0x00C2 -#define NFAPI_NB_IOT_CONFIG_SIX_TONE_CYCLIC_SHIFT_TAG 0x00C3 -#define NFAPI_NB_IOT_CONFIG_DL_GAP_CONFIG_ENABLE_TAG 0x00C4 -#define NFAPI_NB_IOT_CONFIG_DL_GAP_THRESHOLD_TAG 0x00C5 -#define NFAPI_NB_IOT_CONFIG_DL_GAP_PERIODICITY_TAG 0x00C6 -#define NFAPI_NB_IOT_CONFIG_DL_GAP_DURATION_COEFFICIENT_TAG 0x00C7 - -typedef struct { - nfapi_uint16_tlv_t laa_support; - nfapi_uint16_tlv_t pd_sensing_lbt_support; - nfapi_uint16_tlv_t multi_carrier_lbt_support; - nfapi_uint16_tlv_t partial_sf_support; -} nfapi_laa_capability_t; - -#define NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG 0x00D1 -#define NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG 0x00D2 -#define NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG 0x00D3 -#define NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG 0x00D4 - -typedef struct { - nfapi_uint16_tlv_t nb_iot_support; - nfapi_uint16_tlv_t nb_iot_operating_mode_capability; -} nfapi_nb_iot_capability_t; - -#define NFAPI_LAA_CAPABILITY_NB_IOT_SUPPORT_TAG 0x00D5 -#define NFAPI_LAA_CAPABILITY_NB_IOT_OPERATING_MODE_CAPABILITY_TAG 0x00D6 - -typedef struct { - nfapi_uint16_tlv_t subframe_assignment; - nfapi_uint16_tlv_t special_subframe_patterns; -} nfapi_tdd_frame_structure_t; - -#define NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG 0x005A -#define NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG 0x005B - -typedef struct { - nfapi_tl_t tl; - uint16_t number_rf_bands; - uint16_t rf_band[NFAPI_MAX_NUM_RF_BANDS]; -} nfapi_rf_bands_t; -#define NFAPI_PHY_RF_BANDS_TAG 0x0114 - -#define NFAPI_IPV4_ADDRESS_LENGTH 4 -#define NFAPI_IPV6_ADDRESS_LENGTH 16 - -// Convience enum to allow the ip addres type to be distinguished -typedef enum { - NFAPI_IP_ADDRESS_IPV4 = 0, - NFAPI_IP_ADDRESS_IPV6 -} nfapi_ip_address_type_e; - -// The type could be infered from the length, but it is clearer in -// code to have a type variable set -typedef struct { - nfapi_tl_t tl; - uint8_t type; - union { - uint8_t ipv4_address[NFAPI_IPV4_ADDRESS_LENGTH]; - uint8_t ipv6_address[NFAPI_IPV6_ADDRESS_LENGTH]; - } u; -} nfapi_ip_address_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t address[NFAPI_IPV4_ADDRESS_LENGTH]; -} nfapi_ipv4_address_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t address[NFAPI_IPV6_ADDRESS_LENGTH]; -} nfapi_ipv6_address_t; - - - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_rf_bands; - uint16_t bands[NFAPI_MAX_NMM_FREQUENCY_BANDS]; -} nfapi_nmm_frequency_bands_t; - -//These TLVs are used exclusively by nFAPI -typedef struct -{ - // These TLVs are used to setup the transport connection between VNF and PNF - nfapi_ipv4_address_t p7_vnf_address_ipv4; - nfapi_ipv6_address_t p7_vnf_address_ipv6; - nfapi_uint16_tlv_t p7_vnf_port; - - nfapi_ipv4_address_t p7_pnf_address_ipv4; - nfapi_ipv6_address_t p7_pnf_address_ipv6; - nfapi_uint16_tlv_t p7_pnf_port; - - // These TLVs are used to setup the transport connection between VNF and PNF - nfapi_uint8_tlv_t dl_ue_per_sf; - nfapi_uint8_tlv_t ul_ue_per_sf; - - // These TLVs are used by PNF to report its RF capabilities to the VNF software - nfapi_rf_bands_t rf_bands; - - // These TLVs are used by the VNF to configure the synchronization with the PNF. - nfapi_uint8_tlv_t timing_window; - nfapi_uint8_tlv_t timing_info_mode; - nfapi_uint8_tlv_t timing_info_period; - - // These TLVs are used by the VNF to configure the RF in the PNF - nfapi_uint16_tlv_t max_transmit_power; - nfapi_uint16_tlv_t earfcn; - - nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands; - nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands; - nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands; - nfapi_uint8_tlv_t nmm_uplink_rssi_supported; - -} nfapi_nfapi_t; - -#define NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x0100 -#define NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x0101 -#define NFAPI_NFAPI_P7_VNF_PORT_TAG 0x0102 -#define NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x0103 -#define NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x0104 -#define NFAPI_NFAPI_P7_PNF_PORT_TAG 0x0105 - -#define NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x010A -#define NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x010B -#define NFAPI_NFAPI_RF_BANDS_TAG 0x0114 -#define NFAPI_NFAPI_TIMING_WINDOW_TAG 0x011E -#define NFAPI_NFAPI_TIMING_INFO_MODE_TAG 0x011F -#define NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG 0x0120 -#define NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x0128 -#define NFAPI_NFAPI_EARFCN_TAG 0x0129 -#define NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x0130 -#define NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x0131 -#define NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x0132 -#define NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x0133 - - -// P5 Message Structures -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_param_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_pnf_param_general_t pnf_param_general; - nfapi_pnf_phy_t pnf_phy; - nfapi_pnf_rf_t pnf_rf; - nfapi_pnf_phy_rel10_t pnf_phy_rel10; - nfapi_pnf_phy_rel11_t pnf_phy_rel11; - nfapi_pnf_phy_rel12_t pnf_phy_rel12; - nfapi_pnf_phy_rel13_t pnf_phy_rel13; - nfapi_pnf_phy_rel13_nb_iot_t pnf_phy_rel13_nb_iot; - nfapi_pnf_phy_rel15_t pnf_phy_rel15; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_param_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_pnf_phy_rf_config_t pnf_phy_rf_config; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_config_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_config_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_start_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_start_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_stop_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_pnf_stop_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_param_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t error_code; - uint8_t num_tlv; - // fdd or tdd in idle or configured tlvs - nfapi_l1_status l1_status; - nfapi_phy_capabilities_t phy_capabilities; - nfapi_laa_capability_t laa_capability; - nfapi_nb_iot_capability_t nb_iot_capability; - - nfapi_subframe_config_t subframe_config; - nfapi_rf_config_t rf_config; - nfapi_phich_config_t phich_config; - nfapi_sch_config_t sch_config; - nfapi_prach_config_t prach_config; - nfapi_pusch_config_t pusch_config; - nfapi_pucch_config_t pucch_config; - nfapi_srs_config_t srs_config; - nfapi_uplink_reference_signal_config_t uplink_reference_signal_config; - nfapi_tdd_frame_structure_t tdd_frame_structure_config; - nfapi_l23_config_t l23_config; - nfapi_nb_iot_config_t nb_iot_config; - - // addition nfapi tlvs as per table 2-16 in idle or configure - nfapi_nfapi_t nfapi_config; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_param_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t num_tlv; - nfapi_subframe_config_t subframe_config; - nfapi_rf_config_t rf_config; - nfapi_phich_config_t phich_config; - nfapi_sch_config_t sch_config; - nfapi_prach_config_t prach_config; - nfapi_pusch_config_t pusch_config; - nfapi_pucch_config_t pucch_config; - nfapi_srs_config_t srs_config; - nfapi_uplink_reference_signal_config_t uplink_reference_signal_config; - nfapi_laa_config_t laa_config; - nfapi_emtc_config_t emtc_config; - nfapi_tdd_frame_structure_t tdd_frame_structure_config; - nfapi_l23_config_t l23_config; - nfapi_nb_iot_config_t nb_iot_config; - - // addition nfapi tlvs as per table 2-16 in idle or configure - nfapi_nfapi_t nfapi_config; - - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_config_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_config_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_start_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_start_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_stop_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_stop_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_uint16_tlv_t dl_rs_tx_power; - nfapi_uint16_tlv_t received_interference_power; - nfapi_uint16_tlv_t thermal_noise_power; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_measurement_request_t; - -#define NFAPI_MEASUREMENT_REQUEST_DL_RS_XTX_POWER_TAG 0x1004 -#define NFAPI_MEASUREMENT_REQUEST_RECEIVED_INTERFERENCE_POWER_TAG 0x1005 -#define NFAPI_MEASUREMENT_REQUEST_THERMAL_NOISE_POWER_TAG 0x1006 - - - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_resource_blocks; - int16_t received_interference_power[NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS]; -} nfapi_received_interference_power_measurement_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_int16_tlv_t dl_rs_tx_power_measurement; - nfapi_received_interference_power_measurement_t received_interference_power_measurement; - nfapi_int16_tlv_t thermal_noise_power_measurement; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_measurement_response_t; - -#define NFAPI_MEASUREMENT_RESPONSE_DL_RS_POWER_MEASUREMENT_TAG 0x1007 -#define NFAPI_MEASUREMENT_RESPONSE_RECEIVED_INTERFERENCE_POWER_MEASUREMENT_TAG 0x1008 -#define NFAPI_MEASUREMENT_RESPONSE_THERMAL_NOISE_MEASUREMENT_TAG 0x1009 - -// P7 Sub Structures -typedef struct { - nfapi_tl_t tl; - uint8_t dci_format; - uint8_t cce_idx; - uint8_t aggregation_level; - uint16_t rnti; - uint8_t resource_allocation_type; - uint8_t virtual_resource_block_assignment_flag; - uint32_t resource_block_coding; - uint8_t mcs_1; - uint8_t redundancy_version_1; - uint8_t new_data_indicator_1; - uint8_t transport_block_to_codeword_swap_flag; - uint8_t mcs_2; - uint8_t redundancy_version_2; - uint8_t new_data_indicator_2; - uint8_t harq_process; - uint8_t tpmi; - uint8_t pmi; - uint8_t precoding_information; - uint8_t tpc; - uint8_t downlink_assignment_index; - uint8_t ngap; - uint8_t transport_block_size_index; - uint8_t downlink_power_offset; - uint8_t allocate_prach_flag; - uint8_t preamble_index; - uint8_t prach_mask_index; - uint8_t rnti_type; - uint16_t transmission_power; -} nfapi_dl_config_dci_dl_pdu_rel8_t; -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG 0x2001 - -typedef struct { - nfapi_tl_t tl; - uint8_t mcch_flag; - uint8_t mcch_change_notification; - uint8_t scrambling_identity; -} nfapi_dl_config_dci_dl_pdu_rel9_t; -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG 0x2002 - -typedef struct { - nfapi_tl_t tl; - uint8_t cross_carrier_scheduling_flag; - uint8_t carrier_indicator; - uint8_t srs_flag; - uint8_t srs_request; - uint8_t antenna_ports_scrambling_and_layers; - uint8_t total_dci_length_including_padding; - uint8_t n_dl_rb; -} nfapi_dl_config_dci_dl_pdu_rel10_t; -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG 0x2003 - - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_ack_resource_offset; - uint8_t pdsch_re_mapping_quasi_co_location_indicator; -} nfapi_dl_config_dci_dl_pdu_rel11_t; - -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG 0x2039 - - - -typedef struct { - nfapi_tl_t tl; - uint8_t primary_cell_type; - uint8_t ul_dl_configuration_flag; - uint8_t number_ul_dl_configurations; - uint8_t ul_dl_configuration_indication[NFAPI_MAX_UL_DL_CONFIGURATIONS]; -} nfapi_dl_config_dci_dl_pdu_rel12_t; - -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG 0x203a - - - -typedef struct { - uint8_t subband_index; - uint8_t scheduled_ues; - uint16_t precoding_value[NFAPI_MAX_NUM_PHYSICAL_ANTENNAS][NFAPI_MAX_NUM_SCHEDULED_UES]; -} nfapi_dl_config_dci_dl_tpm_subband_info_t; - -typedef struct { - uint8_t num_prb_per_subband; - uint8_t number_of_subbands; - uint8_t num_antennas; - nfapi_dl_config_dci_dl_tpm_subband_info_t subband_info[NFAPI_MAX_NUM_SUBBANDS]; -} nfapi_dl_config_dci_dl_tpm_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t laa_end_partial_sf_flag; - uint8_t laa_end_partial_sf_configuration; - uint8_t initial_lbt_sf; - uint8_t codebook_size_determination; - uint8_t drms_table_flag; - uint8_t tpm_struct_flag; - nfapi_dl_config_dci_dl_tpm_t tpm; -} nfapi_dl_config_dci_dl_pdu_rel13_t; - -#define NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG 0x203b - -typedef struct { - nfapi_dl_config_dci_dl_pdu_rel8_t dci_dl_pdu_rel8; - nfapi_dl_config_dci_dl_pdu_rel9_t dci_dl_pdu_rel9; - nfapi_dl_config_dci_dl_pdu_rel10_t dci_dl_pdu_rel10; - nfapi_dl_config_dci_dl_pdu_rel11_t dci_dl_pdu_rel11; - nfapi_dl_config_dci_dl_pdu_rel12_t dci_dl_pdu_rel12; - nfapi_dl_config_dci_dl_pdu_rel13_t dci_dl_pdu_rel13; -} nfapi_dl_config_dci_dl_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint16_t transmission_power; -} nfapi_dl_config_bch_pdu_rel8_t; -#define NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG 0x2004 - -typedef struct { - nfapi_dl_config_bch_pdu_rel8_t bch_pdu_rel8; -} nfapi_dl_config_bch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint16_t rnti; - uint8_t resource_allocation_type; - uint32_t resource_block_coding; - uint8_t modulation; - uint16_t transmission_power; - uint16_t mbsfn_area_id; -} nfapi_dl_config_mch_pdu_rel8_t; -#define NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG 0x2005 - -typedef struct { - nfapi_dl_config_mch_pdu_rel8_t mch_pdu_rel8; -} nfapi_dl_config_mch_pdu; - - -typedef struct { - uint8_t subband_index; - uint8_t num_antennas; - uint16_t bf_value[NFAPI_MAX_NUM_ANTENNAS]; -} nfapi_bf_vector_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint16_t rnti; - uint8_t resource_allocation_type; - uint8_t virtual_resource_block_assignment_flag; - uint32_t resource_block_coding; - uint8_t modulation; - uint8_t redundancy_version; - uint8_t transport_blocks; - uint8_t transport_block_to_codeword_swap_flag; - uint8_t transmission_scheme; - uint8_t number_of_layers; - uint8_t number_of_subbands; - uint8_t codebook_index[NFAPI_MAX_NUM_SUBBANDS]; - uint8_t ue_category_capacity; - uint8_t pa; - uint8_t delta_power_offset_index; - uint8_t ngap; - uint8_t nprb; - uint8_t transmission_mode; - uint8_t num_bf_prb_per_subband; - uint8_t num_bf_vector; - nfapi_bf_vector_t bf_vector[NFAPI_MAX_BF_VECTORS]; -} nfapi_dl_config_dlsch_pdu_rel8_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG 0x2006 - -typedef struct { - nfapi_tl_t tl; - uint8_t nscid; -} nfapi_dl_config_dlsch_pdu_rel9_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG 0x2007 - -typedef struct { - nfapi_tl_t tl; - uint8_t csi_rs_flag; - uint8_t csi_rs_resource_config_r10; - uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10; - uint8_t csi_rs_number_nzp_configuration; - uint8_t csi_rs_resource_config[NFAPI_MAX_CSI_RS_RESOURCE_CONFIG]; - uint8_t pdsch_start; -} nfapi_dl_config_dlsch_pdu_rel10_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG 0x2008 - -typedef struct { - nfapi_tl_t tl; - uint8_t drms_config_flag; - uint16_t drms_scrambling; - uint8_t csi_config_flag; - uint16_t csi_scrambling; - uint8_t pdsch_re_mapping_flag; - uint8_t pdsch_re_mapping_atenna_ports; - uint8_t pdsch_re_mapping_freq_shift; -} nfapi_dl_config_dlsch_pdu_rel11_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG 0x203C - -typedef struct { - nfapi_tl_t tl; - uint8_t altcqi_table_r12; - uint8_t maxlayers; - uint8_t n_dl_harq; -} nfapi_dl_config_dlsch_pdu_rel12_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG 0x203D - -typedef struct { - nfapi_tl_t tl; - uint8_t dwpts_symbols; - uint8_t initial_lbt_sf; - uint8_t ue_type; - uint8_t pdsch_payload_type; - uint16_t initial_transmission_sf_io; - uint8_t drms_table_flag; -} nfapi_dl_config_dlsch_pdu_rel13_t; -#define NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG 0x203E - -typedef struct { - nfapi_dl_config_dlsch_pdu_rel8_t dlsch_pdu_rel8; - nfapi_dl_config_dlsch_pdu_rel9_t dlsch_pdu_rel9; - nfapi_dl_config_dlsch_pdu_rel10_t dlsch_pdu_rel10; - nfapi_dl_config_dlsch_pdu_rel11_t dlsch_pdu_rel11; - nfapi_dl_config_dlsch_pdu_rel12_t dlsch_pdu_rel12; - nfapi_dl_config_dlsch_pdu_rel13_t dlsch_pdu_rel13; -} nfapi_dl_config_dlsch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint16_t p_rnti; - uint8_t resource_allocation_type; - uint8_t virtual_resource_block_assignment_flag; - uint32_t resource_block_coding; - uint8_t mcs; - uint8_t redundancy_version; - uint8_t number_of_transport_blocks; - uint8_t transport_block_to_codeword_swap_flag; - uint8_t transmission_scheme; - uint8_t number_of_layers; - uint8_t codebook_index; - uint8_t ue_category_capacity; - uint8_t pa; - uint16_t transmission_power; - uint8_t nprb; - uint8_t ngap; -} nfapi_dl_config_pch_pdu_rel8_t; -#define NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG 0x2009 - -typedef struct { - nfapi_tl_t tl; - uint8_t ue_mode; - uint16_t initial_transmission_sf_io; -} nfapi_dl_config_pch_pdu_rel13_t; -#define NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG 0x203F - -typedef struct { - nfapi_dl_config_pch_pdu_rel8_t pch_pdu_rel8; - nfapi_dl_config_pch_pdu_rel13_t pch_pdu_rel13; -} nfapi_dl_config_pch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t transmission_power; - uint8_t prs_bandwidth; - uint8_t prs_cyclic_prefix_type; - uint8_t prs_muting; -} nfapi_dl_config_prs_pdu_rel9_t; -#define NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG 0x200A - -typedef struct { - nfapi_dl_config_prs_pdu_rel9_t prs_pdu_rel9; -} nfapi_dl_config_prs_pdu; - -typedef struct { - nfapi_tl_t tl; - uint8_t csi_rs_antenna_port_count_r10; - uint8_t csi_rs_resource_config_r10; - uint16_t transmission_power; - uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10; - uint8_t csi_rs_number_of_nzp_configuration; - uint8_t csi_rs_resource_config[NFAPI_MAX_CSI_RS_RESOURCE_CONFIG]; -} nfapi_dl_config_csi_rs_pdu_rel10_t; -#define NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG 0x200B - -typedef struct { - nfapi_tl_t tl; - uint8_t csi_rs_class; - uint8_t cdm_type; - uint8_t num_bf_vector; - struct { - uint8_t csi_rs_resource_index; - uint16_t bf_value[NFAPI_MAX_ANTENNA_PORT_COUNT]; - } bf_vector[NFAPI_MAX_BF_VECTORS]; - -}nfapi_dl_config_csi_rs_pdu_rel13_t; -#define NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG 0x2040 - -typedef struct { - nfapi_dl_config_csi_rs_pdu_rel10_t csi_rs_pdu_rel10; - nfapi_dl_config_csi_rs_pdu_rel13_t csi_rs_pdu_rel13; -} nfapi_dl_config_csi_rs_pdu; - -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG 0x2001 -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG 0x2002 -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG 0x2003 -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG 0x2039 -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG 0x203a -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG 0x203b - -typedef struct { - nfapi_tl_t tl; - uint8_t epdcch_resource_assignment_flag; - uint16_t epdcch_id; - uint8_t epdcch_start_symbol; - uint8_t epdcch_num_prb; - uint8_t epdcch_prb_index[NFAPI_MAX_EPDCCH_PRB]; - nfapi_bf_vector_t bf_vector; -} nfapi_dl_config_epdcch_parameters_rel11_t; -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG 0x2041 - -typedef struct { - nfapi_tl_t tl; - uint8_t dwpts_symbols; - uint8_t initial_lbt_sf; -} nfapi_dl_config_epdcch_parameters_rel13_t; -#define NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG 0x2042 - -typedef struct { - nfapi_dl_config_dci_dl_pdu_rel8_t epdcch_pdu_rel8; - nfapi_dl_config_dci_dl_pdu_rel9_t epdcch_pdu_rel9; - nfapi_dl_config_dci_dl_pdu_rel10_t epdcch_pdu_rel10; - nfapi_dl_config_dci_dl_pdu_rel11_t epdcch_pdu_rel11; - nfapi_dl_config_dci_dl_pdu_rel12_t epdcch_pdu_rel12; - nfapi_dl_config_dci_dl_pdu_rel13_t epdcch_pdu_rel13; - nfapi_dl_config_epdcch_parameters_rel11_t epdcch_params_rel11; - nfapi_dl_config_epdcch_parameters_rel13_t epdcch_params_rel13; -} nfapi_dl_config_epdcch_pdu; - - -typedef struct { - nfapi_tl_t tl; - uint8_t mpdcch_narrow_band; - uint8_t number_of_prb_pairs; - uint8_t resource_block_assignment; - uint8_t mpdcch_tansmission_type; - uint8_t start_symbol; - uint8_t ecce_index; - uint8_t aggregation_level; - uint8_t rnti_type; - uint16_t rnti; - uint8_t ce_mode; - uint16_t drms_scrambling_init; - uint16_t initial_transmission_sf_io; - uint16_t transmission_power; - uint8_t dci_format; - uint16_t resource_block_coding; - uint8_t mcs; - uint8_t pdsch_reptition_levels; - uint8_t redundancy_version; - uint8_t new_data_indicator; - uint8_t harq_process; - uint8_t tpmi_length; - uint8_t tpmi; - uint8_t pmi_flag; - uint8_t pmi; - uint8_t harq_resource_offset; - uint8_t dci_subframe_repetition_number; - uint8_t tpc; - uint8_t downlink_assignment_index_length; - uint8_t downlink_assignment_index; - uint8_t allocate_prach_flag; - uint8_t preamble_index; - uint8_t prach_mask_index; - uint8_t starting_ce_level; - uint8_t srs_request; - uint8_t antenna_ports_and_scrambling_identity_flag; - uint8_t antenna_ports_and_scrambling_identity; - uint8_t frequency_hopping_enabled_flag; - uint8_t paging_direct_indication_differentiation_flag; - uint8_t direct_indication; - uint8_t total_dci_length_including_padding; - uint8_t number_of_tx_antenna_ports; - uint16_t precoding_value[NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS]; -} nfapi_dl_config_mpdcch_pdu_rel13_t; -#define NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG 0x205B - - -typedef struct { - nfapi_dl_config_mpdcch_pdu_rel13_t mpdcch_pdu_rel13; -} nfapi_dl_config_mpdcch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint16_t transmission_power; - uint16_t hyper_sfn_2_lsbs; -} nfapi_dl_config_nbch_pdu_rel13_t; - -#define NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG 0x205C - -typedef struct { - nfapi_dl_config_nbch_pdu_rel13_t nbch_pdu_rel13; -} nfapi_dl_config_nbch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint8_t ncce_index; - uint8_t aggregation_level; - uint8_t start_symbol; - uint8_t rnti_type; - uint16_t rnti; - uint8_t scrambling_reinitialization_batch_index; - uint8_t nrs_antenna_ports_assumed_by_the_ue; - uint8_t dci_format; - uint8_t scheduling_delay; - uint8_t resource_assignment; - uint8_t repetition_number; - uint8_t mcs; - uint8_t new_data_indicator; - uint8_t harq_ack_resource; - uint8_t npdcch_order_indication; - uint8_t starting_number_of_nprach_repetitions; - uint8_t subcarrier_indication_of_nprach; - uint8_t paging_direct_indication_differentation_flag; - uint8_t direct_indication; - uint8_t dci_subframe_repetition_number; - uint8_t total_dci_length_including_padding; -} nfapi_dl_config_npdcch_pdu_rel13_t; - -#define NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG 0x205D - -typedef struct { - nfapi_dl_config_npdcch_pdu_rel13_t npdcch_pdu_rel13; -} nfapi_dl_config_npdcch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t pdu_index; - uint8_t start_symbol; - uint8_t rnti_type; - uint16_t rnti; - uint16_t resource_assignment; - uint16_t repetition_number; - uint8_t modulation; - uint8_t number_of_subframes_for_resource_assignment; - uint8_t scrambling_sequence_initialization_cinit; - uint16_t sf_idx; - uint8_t nrs_antenna_ports_assumed_by_the_ue; -} nfapi_dl_config_ndlsch_pdu_rel13_t; - -#define NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG 0x205E - -typedef struct { - nfapi_dl_config_ndlsch_pdu_rel13_t ndlsch_pdu_rel13; -} nfapi_dl_config_ndlsch_pdu; - - -typedef struct { - uint8_t pdu_type; - uint8_t pdu_size; - union { - nfapi_dl_config_dci_dl_pdu dci_dl_pdu; - nfapi_dl_config_bch_pdu bch_pdu; - nfapi_dl_config_mch_pdu mch_pdu; - nfapi_dl_config_dlsch_pdu dlsch_pdu; - nfapi_dl_config_pch_pdu pch_pdu; - nfapi_dl_config_prs_pdu prs_pdu; - nfapi_dl_config_csi_rs_pdu csi_rs_pdu; - nfapi_dl_config_epdcch_pdu epdcch_pdu; - nfapi_dl_config_mpdcch_pdu mpdcch_pdu; - nfapi_dl_config_nbch_pdu nbch_pdu; - nfapi_dl_config_npdcch_pdu npdcch_pdu; - nfapi_dl_config_ndlsch_pdu ndlsch_pdu; - }; -} nfapi_dl_config_request_pdu_t; - -#define NFAPI_DL_CONFIG_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint8_t number_pdcch_ofdm_symbols; - uint8_t number_dci; - uint16_t number_pdu; - uint8_t number_pdsch_rnti; - uint16_t transmission_power_pcfich; - nfapi_dl_config_request_pdu_t* dl_config_pdu_list; -} nfapi_dl_config_request_body_t; -#define NFAPI_DL_CONFIG_REQUEST_BODY_TAG 0x2000 - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint16_t size; - uint16_t rnti; - uint8_t resource_block_start; - uint8_t number_of_resource_blocks; - uint8_t modulation_type; - uint8_t cyclic_shift_2_for_drms; - uint8_t frequency_hopping_enabled_flag; - uint8_t frequency_hopping_bits; - uint8_t new_data_indication; - uint8_t redundancy_version; - uint8_t harq_process_number; - uint8_t ul_tx_mode; - uint8_t current_tx_nb; - uint8_t n_srs; -} nfapi_ul_config_ulsch_pdu_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG 0x200D - -typedef struct { - nfapi_tl_t tl; - uint8_t resource_allocation_type; - uint32_t resource_block_coding; - uint8_t transport_blocks; - uint8_t transmission_scheme; - uint8_t number_of_layers; - uint8_t codebook_index; - uint8_t disable_sequence_hopping_flag; -} nfapi_ul_config_ulsch_pdu_rel10_t; -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL10_TAG 0x200E - - -typedef struct { - nfapi_tl_t tl; - uint8_t virtual_cell_id_enabled_flag; - uint16_t npusch_identity; - uint8_t dmrs_config_flag; - uint16_t ndmrs_csh_identity; -} nfapi_ul_config_ulsch_pdu_rel11_t; - -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL11_TAG 0x2043 - -typedef struct { - nfapi_tl_t tl; - uint8_t ue_type; - uint16_t total_number_of_repetitions; - uint16_t repetition_number; - uint16_t initial_transmission_sf_io; - uint8_t empty_symbols_due_to_re_tunning; -} nfapi_ul_config_ulsch_pdu_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG 0x2044 - -typedef struct { - nfapi_ul_config_ulsch_pdu_rel8_t ulsch_pdu_rel8; - nfapi_ul_config_ulsch_pdu_rel10_t ulsch_pdu_rel10; - nfapi_ul_config_ulsch_pdu_rel11_t ulsch_pdu_rel11; - nfapi_ul_config_ulsch_pdu_rel13_t ulsch_pdu_rel13; -} nfapi_ul_config_ulsch_pdu; - -typedef struct { - nfapi_tl_t tl; - uint8_t dl_cqi_pmi_size_rank_1; - uint8_t dl_cqi_pmi_size_rank_greater_1; - uint8_t ri_size; - uint8_t delta_offset_cqi; - uint8_t delta_offset_ri; -} nfapi_ul_config_cqi_ri_information_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL8_TAG 0x2010 - -typedef struct { - uint8_t dl_cqi_pmi_ri_size; - uint8_t control_type; -} nfapi_ul_config_periodic_cqi_pmi_ri_report_t; - -typedef struct { - uint8_t number_of_cc; - struct { - uint8_t ri_size; - uint8_t dl_cqi_pmi_size[8]; - } cc[NFAPI_MAX_CC]; -} nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t report_type; - uint8_t delta_offset_cqi; - uint8_t delta_offset_ri; - union { - nfapi_ul_config_periodic_cqi_pmi_ri_report_t periodic_cqi_pmi_ri_report; - nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t aperiodic_cqi_pmi_ri_report; - }; -} nfapi_ul_config_cqi_ri_information_rel9_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL9_TAG 0x2011 - -typedef struct { - uint16_t dl_cqi_pmi_ri_size_2; -} nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t; - -typedef struct { -} nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t report_type; // Convience parameter, not sent on the wire - union { - nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t periodic_cqi_pmi_ri_report; - nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t aperiodic_cqi_pmi_ri_report; - }; -} nfapi_ul_config_cqi_ri_information_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL13_TAG 0x2045 - -typedef struct { - nfapi_ul_config_cqi_ri_information_rel8_t cqi_ri_information_rel8; - nfapi_ul_config_cqi_ri_information_rel9_t cqi_ri_information_rel9; - nfapi_ul_config_cqi_ri_information_rel13_t cqi_ri_information_rel13; -} nfapi_ul_config_cqi_ri_information; - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_size; - uint8_t delta_offset_harq; - uint8_t ack_nack_mode; -} nfapi_ul_config_ulsch_harq_information_rel10_t; -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL10_TAG 0x2012 - -typedef struct { - nfapi_tl_t tl; - uint16_t harq_size_2; - uint8_t delta_offset_harq_2; -} nfapi_ul_config_ulsch_harq_information_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL13_TAG 0x2046 - -typedef struct { - nfapi_ul_config_ulsch_harq_information_rel10_t harq_information_rel10; - nfapi_ul_config_ulsch_harq_information_rel13_t harq_information_rel13; -} nfapi_ul_config_ulsch_harq_information; - -typedef struct { - nfapi_tl_t tl; - uint8_t n_srs_initial; - uint8_t initial_number_of_resource_blocks; -} nfapi_ul_config_initial_transmission_parameters_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG 0x200F - -typedef struct { - nfapi_ul_config_initial_transmission_parameters_rel8_t initial_transmission_parameters_rel8; -} nfapi_ul_config_initial_transmission_parameters; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_cqi_ri_information cqi_ri_information; - nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; -} nfapi_ul_config_ulsch_cqi_ri_pdu; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_ulsch_harq_information harq_information; - nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; -} nfapi_ul_config_ulsch_harq_pdu; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_cqi_ri_information cqi_ri_information; - nfapi_ul_config_ulsch_harq_information harq_information; - nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; -} nfapi_ul_config_ulsch_cqi_harq_ri_pdu; - - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint16_t rnti; -} nfapi_ul_config_ue_information_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG 0x2013 - -typedef struct { - nfapi_tl_t tl; - uint8_t virtual_cell_id_enabled_flag; - uint16_t npusch_identity; -} nfapi_ul_config_ue_information_rel11_t; - -#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL11_TAG 0x2047 - -typedef struct { - nfapi_tl_t tl; - uint8_t ue_type; - uint8_t empty_symbols; - uint16_t total_number_of_repetitions; - uint16_t repetition_number; -} nfapi_ul_config_ue_information_rel13_t; - -#define NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG 0x2048 - -typedef struct { - nfapi_ul_config_ue_information_rel8_t ue_information_rel8; - nfapi_ul_config_ue_information_rel11_t ue_information_rel11; - nfapi_ul_config_ue_information_rel13_t ue_information_rel13; -} nfapi_ul_config_ue_information; - -typedef struct { - nfapi_tl_t tl; - uint16_t pucch_index; - uint8_t dl_cqi_pmi_size; -} nfapi_ul_config_cqi_information_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG 0x2014 - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_pucch_resource; - uint16_t pucch_index_p1; -} nfapi_ul_config_cqi_information_rel10_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL10_TAG 0x2015 - -typedef struct { - nfapi_tl_t tl; - uint8_t csi_mode; - uint16_t dl_cqi_pmi_size_2; - uint8_t starting_prb; - uint8_t n_prb; - uint8_t cdm_index; - uint8_t n_srs; -} nfapi_ul_config_cqi_information_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL13_TAG 0x2049 - -typedef struct { - nfapi_ul_config_cqi_information_rel8_t cqi_information_rel8; - nfapi_ul_config_cqi_information_rel10_t cqi_information_rel10; - nfapi_ul_config_cqi_information_rel13_t cqi_information_rel13; -} nfapi_ul_config_cqi_information; - -typedef struct { - nfapi_tl_t tl; - uint16_t pucch_index; -} nfapi_ul_config_sr_information_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL8_TAG 0x2016 - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_pucch_resources; - uint16_t pucch_index_p1; -} nfapi_ul_config_sr_information_rel10_t; -#define NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL10_TAG 0x2017 - -typedef struct { - nfapi_ul_config_sr_information_rel8_t sr_information_rel8; - nfapi_ul_config_sr_information_rel10_t sr_information_rel10; -} nfapi_ul_config_sr_information; - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_size; - uint8_t ack_nack_mode; - uint8_t number_of_pucch_resources; - uint16_t n_pucch_1_0; - uint16_t n_pucch_1_1; - uint16_t n_pucch_1_2; - uint16_t n_pucch_1_3; -} nfapi_ul_config_harq_information_rel10_tdd_t; -#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG 0x2018 - - -typedef struct { - nfapi_tl_t tl; - uint16_t n_pucch_1_0; - uint8_t harq_size; -} nfapi_ul_config_harq_information_rel8_fdd_t; -#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG 0x2019 - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_size; - uint8_t ack_nack_mode; - uint8_t number_of_pucch_resources; - uint16_t n_pucch_1_0; - uint16_t n_pucch_1_1; - uint16_t n_pucch_1_2; - uint16_t n_pucch_1_3; -} nfapi_ul_config_harq_information_rel9_fdd_t; -#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG 0x201a - -typedef struct { - nfapi_tl_t tl; - uint8_t num_ant_ports; - uint16_t n_pucch_2_0; - uint16_t n_pucch_2_1; - uint16_t n_pucch_2_2; - uint16_t n_pucch_2_3; -} nfapi_ul_config_harq_information_rel11_t; -#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG 0x204A - -typedef struct { - nfapi_tl_t tl; - uint16_t harq_size_2; - uint8_t starting_prb; - uint8_t n_prb; - uint8_t cdm_index; - uint8_t n_srs; -} nfapi_ul_config_harq_information_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL13_TAG 0x204B - -typedef struct { - nfapi_ul_config_harq_information_rel10_tdd_t harq_information_rel10_tdd; - nfapi_ul_config_harq_information_rel8_fdd_t harq_information_rel8_fdd; - nfapi_ul_config_harq_information_rel9_fdd_t harq_information_rel9_fdd; - nfapi_ul_config_harq_information_rel11_t harq_information_rel11; - nfapi_ul_config_harq_information_rel13_t harq_information_rel13; -} nfapi_ul_config_harq_information; - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint16_t size; - uint16_t rnti; - uint8_t srs_bandwidth; - uint8_t frequency_domain_position; - uint8_t srs_hopping_bandwidth; - uint8_t transmission_comb; - uint16_t i_srs; - uint8_t sounding_reference_cyclic_shift; -} nfapi_ul_config_srs_pdu_rel8_t; -#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL8_TAG 0x201b - -typedef struct { - nfapi_tl_t tl; - uint8_t antenna_port; -} nfapi_ul_config_srs_pdu_rel10_t; -#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL10_TAG 0x201c - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_combs; -} nfapi_ul_config_srs_pdu_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL13_TAG 0x204c - -typedef struct { - nfapi_ul_config_srs_pdu_rel8_t srs_pdu_rel8; - nfapi_ul_config_srs_pdu_rel10_t srs_pdu_rel10; - nfapi_ul_config_srs_pdu_rel13_t srs_pdu_rel13; -} nfapi_ul_config_srs_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_cqi_information cqi_information; -} nfapi_ul_config_uci_cqi_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_sr_information sr_information; -} nfapi_ul_config_uci_sr_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_uci_harq_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_sr_information sr_information; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_uci_sr_harq_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_cqi_information cqi_information; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_uci_cqi_harq_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_cqi_information cqi_information; - nfapi_ul_config_sr_information sr_information; -} nfapi_ul_config_uci_cqi_sr_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_cqi_information cqi_information; - nfapi_ul_config_sr_information sr_information; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_uci_cqi_sr_harq_pdu; - -typedef struct { - nfapi_ul_config_ue_information ue_information; -} nfapi_ul_config_harq_buffer_pdu; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_cqi_information csi_information; -} nfapi_ul_config_ulsch_uci_csi_pdu; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_ulsch_uci_harq_pdu; - -typedef struct { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_cqi_information csi_information; - nfapi_ul_config_harq_information harq_information; -} nfapi_ul_config_ulsch_csi_uci_harq_pdu; - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_ack_resource; -} nfapi_ul_config_nb_harq_information_rel13_fdd_t; -#define NFAPI_UL_CONFIG_REQUEST_NB_HARQ_INFORMATION_REL13_FDD_TAG 0x2061 - -typedef struct { - nfapi_ul_config_nb_harq_information_rel13_fdd_t nb_harq_information_rel13_fdd; -} nfapi_ul_config_nb_harq_information; - -typedef struct { - nfapi_tl_t tl; - uint8_t nulsch_format; - uint32_t handle; - uint16_t size; - uint16_t rnti; - uint8_t subcarrier_indication; - uint8_t resource_assignment; - uint8_t mcs; - uint8_t redudancy_version; - uint8_t repetition_number; - uint8_t new_data_indication; - uint8_t n_srs; - uint16_t scrambling_sequence_initialization_cinit; - uint16_t sf_idx; - nfapi_ul_config_ue_information ue_information; - nfapi_ul_config_nb_harq_information nb_harq_information; -} nfapi_ul_config_nulsch_pdu_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_NULSCH_PDU_REL13_TAG 0x205F - -typedef struct { - nfapi_ul_config_nulsch_pdu_rel13_t nulsch_pdu_rel13; -} nfapi_ul_config_nulsch_pdu; - - -typedef struct { - nfapi_tl_t tl; - uint8_t nprach_config_0; - uint8_t nprach_config_1; - uint8_t nprach_config_2; -} nfapi_ul_config_nrach_pdu_rel13_t; -#define NFAPI_UL_CONFIG_REQUEST_NRACH_PDU_REL13_TAG 0x2067 - -typedef struct { - nfapi_ul_config_nrach_pdu_rel13_t nrach_pdu_rel13; -} nfapi_ul_config_nrach_pdu; - -typedef struct { - uint8_t pdu_type; - uint8_t pdu_size; - union { - nfapi_ul_config_ulsch_pdu ulsch_pdu; - nfapi_ul_config_ulsch_cqi_ri_pdu ulsch_cqi_ri_pdu; - nfapi_ul_config_ulsch_harq_pdu ulsch_harq_pdu; - nfapi_ul_config_ulsch_cqi_harq_ri_pdu ulsch_cqi_harq_ri_pdu; - nfapi_ul_config_uci_cqi_pdu uci_cqi_pdu; - nfapi_ul_config_uci_sr_pdu uci_sr_pdu; - nfapi_ul_config_uci_harq_pdu uci_harq_pdu; - nfapi_ul_config_uci_sr_harq_pdu uci_sr_harq_pdu; - nfapi_ul_config_uci_cqi_harq_pdu uci_cqi_harq_pdu; - nfapi_ul_config_uci_cqi_sr_pdu uci_cqi_sr_pdu; - nfapi_ul_config_uci_cqi_sr_harq_pdu uci_cqi_sr_harq_pdu; - nfapi_ul_config_srs_pdu srs_pdu; - nfapi_ul_config_harq_buffer_pdu harq_buffer_pdu; - nfapi_ul_config_ulsch_uci_csi_pdu ulsch_uci_csi_pdu; - nfapi_ul_config_ulsch_uci_harq_pdu ulsch_uci_harq_pdu; - nfapi_ul_config_ulsch_csi_uci_harq_pdu ulsch_csi_uci_harq_pdu; - nfapi_ul_config_nulsch_pdu nulsch_pdu; - nfapi_ul_config_nrach_pdu nrach_pdu; - }; -} nfapi_ul_config_request_pdu_t; - -#define NFAPI_UL_CONFIG_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_pdus; - uint8_t rach_prach_frequency_resources; - uint8_t srs_present; - nfapi_ul_config_request_pdu_t* ul_config_pdu_list; -} nfapi_ul_config_request_body_t; -#define NFAPI_UL_CONFIG_REQUEST_BODY_TAG 0x200C - -typedef struct { - nfapi_tl_t tl; - uint8_t resource_block_start; - uint8_t cyclic_shift_2_for_drms; - uint8_t hi_value; - uint8_t i_phich; - uint16_t transmission_power; -} nfapi_hi_dci0_hi_pdu_rel8_t; -#define NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG 0x201e - -typedef struct { - nfapi_tl_t tl; - uint8_t flag_tb2; - uint8_t hi_value_2; -} nfapi_hi_dci0_hi_pdu_rel10_t; -#define NFAPI_HI_DCI0_REQUEST_HI_PDU_REL10_TAG 0x201f - -typedef struct { - nfapi_hi_dci0_hi_pdu_rel8_t hi_pdu_rel8; - nfapi_hi_dci0_hi_pdu_rel10_t hi_pdu_rel10; -} nfapi_hi_dci0_hi_pdu; - -typedef struct { - nfapi_tl_t tl; - uint8_t dci_format; - uint8_t cce_index; - uint8_t aggregation_level; - uint16_t rnti; - uint8_t resource_block_start; - uint8_t number_of_resource_block; - uint8_t mcs_1; - uint8_t cyclic_shift_2_for_drms; - uint8_t frequency_hopping_enabled_flag; - uint8_t frequency_hopping_bits; - uint8_t new_data_indication_1; - uint8_t ue_tx_antenna_seleciton; - uint8_t tpc; - uint8_t cqi_csi_request; - uint8_t ul_index; - uint8_t dl_assignment_index; - uint32_t tpc_bitmap; - uint16_t transmission_power; -} nfapi_hi_dci0_dci_pdu_rel8_t; -#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG 0x2020 - -typedef struct { - nfapi_tl_t tl; - uint8_t cross_carrier_scheduling_flag; - uint8_t carrier_indicator; - uint8_t size_of_cqi_csi_feild; - uint8_t srs_flag; - uint8_t srs_request; - uint8_t resource_allocation_flag; - uint8_t resource_allocation_type; - uint32_t resource_block_coding; - uint8_t mcs_2; - uint8_t new_data_indication_2; - uint8_t number_of_antenna_ports; - uint8_t tpmi; - uint8_t total_dci_length_including_padding; - uint8_t n_ul_rb; -} nfapi_hi_dci0_dci_pdu_rel10_t; -#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL10_TAG 0x2021 - -typedef struct { - nfapi_tl_t tl; - uint8_t pscch_resource; - uint8_t time_resource_pattern; -} nfapi_hi_dci0_dci_pdu_rel12_t; - -#define NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL12_TAG 0x204D - -typedef struct { - nfapi_hi_dci0_dci_pdu_rel8_t dci_pdu_rel8; - nfapi_hi_dci0_dci_pdu_rel10_t dci_pdu_rel10; - nfapi_hi_dci0_dci_pdu_rel12_t dci_pdu_rel12; -} nfapi_hi_dci0_dci_pdu; - -typedef nfapi_hi_dci0_dci_pdu_rel8_t nfapi_hi_dci0_epdcch_dci_pdu_rel8_t; -#define NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL8_TAG 0x2020 - -typedef nfapi_hi_dci0_dci_pdu_rel10_t nfapi_hi_dci0_epdcch_dci_pdu_rel10_t; -#define NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL10_TAG 0x2021 - -typedef nfapi_dl_config_epdcch_parameters_rel11_t nfapi_hi_dci0_epdcch_parameters_rel11_t; -#define NFAPI_HI_DCI0_REQUEST_EPDCCH_PARAMETERS_REL11_TAG 0x2041 - -typedef struct { - nfapi_hi_dci0_epdcch_dci_pdu_rel8_t epdcch_dci_pdu_rel8; - nfapi_hi_dci0_epdcch_dci_pdu_rel10_t epdcch_dci_pdu_rel10; - nfapi_hi_dci0_epdcch_parameters_rel11_t epdcch_parameters_rel11; -} nfapi_hi_dci0_epdcch_dci_pdu; - - -typedef struct { - nfapi_tl_t tl; - uint8_t mpdcch_narrowband; - uint8_t number_of_prb_pairs; - uint8_t resource_block_assignment; - uint8_t mpdcch_transmission_type; - uint8_t start_symbol; - uint8_t ecce_index; - uint8_t aggreagation_level; - uint8_t rnti_type; - uint16_t rnti; - uint8_t ce_mode; - uint16_t drms_scrambling_init; - uint16_t initial_transmission_sf_io; - uint16_t transmission_power; - uint8_t dci_format; - uint8_t resource_block_start; - uint8_t number_of_resource_blocks; - uint8_t mcs; - uint8_t pusch_repetition_levels; - uint8_t frequency_hopping_flag; - uint8_t new_data_indication; - uint8_t harq_process; - uint8_t redudency_version; - uint8_t tpc; - uint8_t csi_request; - uint8_t ul_inex; - uint8_t dai_presence_flag; - uint8_t dl_assignment_index; - uint8_t srs_request; - uint8_t dci_subframe_repetition_number; - uint32_t tcp_bitmap; - uint8_t total_dci_length_include_padding; - uint8_t number_of_tx_antenna_ports; - uint16_t precoding_value[NFAPI_MAX_ANTENNA_PORT_COUNT]; -} nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t; -#define NFAPI_HI_DCI0_REQUEST_MPDCCH_DCI_PDU_REL13_TAG 0x204E - -typedef struct { - nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t mpdcch_dci_pdu_rel13; -} nfapi_hi_dci0_mpdcch_dci_pdu; - -typedef struct { - nfapi_tl_t tl; - uint8_t ncce_index; - uint8_t aggregation_level; - uint8_t start_symbol; - uint16_t rnti; - uint8_t scrambling_reinitialization_batch_index; - uint8_t nrs_antenna_ports_assumed_by_the_ue; - uint8_t subcarrier_indication; - uint8_t resource_assignment; - uint8_t scheduling_delay; - uint8_t mcs; - uint8_t redudancy_version; - uint8_t repetition_number; - uint8_t new_data_indicator; - uint8_t dci_subframe_repetition_number; -} nfapi_hi_dci0_npdcch_dci_pdu_rel13_t; - -#define NFAPI_HI_DCI0_REQUEST_NPDCCH_DCI_PDU_REL13_TAG 0x2062 - -typedef struct { - nfapi_hi_dci0_npdcch_dci_pdu_rel13_t npdcch_dci_pdu_rel13; -} nfapi_hi_dci0_npdcch_dci_pdu; - -typedef struct { - uint8_t pdu_type; - uint8_t pdu_size; - union { - nfapi_hi_dci0_hi_pdu hi_pdu; - nfapi_hi_dci0_dci_pdu dci_pdu; - nfapi_hi_dci0_epdcch_dci_pdu epdcch_dci_pdu; - nfapi_hi_dci0_mpdcch_dci_pdu mpdcch_dci_pdu; - nfapi_hi_dci0_npdcch_dci_pdu npdcch_dci_pdu; - }; -} nfapi_hi_dci0_request_pdu_t; - -#define NFAPI_HI_DCI0_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t sfnsf; - uint8_t number_of_dci; - uint8_t number_of_hi; - nfapi_hi_dci0_request_pdu_t* hi_dci0_pdu_list; -} nfapi_hi_dci0_request_body_t; -#define NFAPI_HI_DCI0_REQUEST_BODY_TAG 0x201D - -#define NFAPI_TX_MAX_SEGMENTS 32 -typedef struct { - uint16_t pdu_length; - uint16_t pdu_index; - uint8_t num_segments; - struct { - uint32_t segment_length; - uint8_t* segment_data; - } segments[NFAPI_TX_MAX_SEGMENTS]; -} nfapi_tx_request_pdu_t; - -#define NFAPI_TX_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_pdus; - nfapi_tx_request_pdu_t* tx_pdu_list; -} nfapi_tx_request_body_t; -#define NFAPI_TX_REQUEST_BODY_TAG 0x2022 - -// P7 Message Structures -typedef struct { - nfapi_p7_message_header_t header; - uint32_t t1; - int32_t delta_sfn_sf; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_dl_node_sync_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint32_t t1; - uint32_t t2; - uint32_t t3; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_ul_node_sync_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint32_t last_sfn_sf; - uint32_t time_since_last_timing_info; - uint32_t dl_config_jitter; - uint32_t tx_request_jitter; - uint32_t ul_config_jitter; - uint32_t hi_dci0_jitter; - int32_t dl_config_latest_delay; - int32_t tx_request_latest_delay; - int32_t ul_config_latest_delay; - int32_t hi_dci0_latest_delay; - int32_t dl_config_earliest_arrival; - int32_t tx_request_earliest_arrival; - int32_t ul_config_earliest_arrival; - int32_t hi_dci0_earliest_arrival; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_timing_info_t; - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint16_t rnti; -} nfapi_rx_ue_information; -#define NFAPI_RX_UE_INFORMATION_TAG 0x2038 - -typedef struct { - uint8_t value_0; - uint8_t value_1; -} nfapi_harq_indication_tdd_harq_data_bundling_t; - -typedef struct { - uint8_t value_0; - uint8_t value_1; - uint8_t value_2; - uint8_t value_3; -} nfapi_harq_indication_tdd_harq_data_multiplexing_t; - -typedef struct { - uint8_t value_0; -} nfapi_harq_indication_tdd_harq_data_special_bundling_t; - -typedef struct { - uint8_t value_0; -} nfapi_harq_indication_tdd_harq_data_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t mode; - uint8_t number_of_ack_nack; - union{ - nfapi_harq_indication_tdd_harq_data_bundling_t bundling; - nfapi_harq_indication_tdd_harq_data_multiplexing_t multiplex; - nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; - } harq_data; -} nfapi_harq_indication_tdd_rel8_t; -#define NFAPI_HARQ_INDICATION_TDD_REL8_TAG 0x2027 - -typedef struct { - nfapi_tl_t tl; - uint8_t mode; - uint8_t number_of_ack_nack; - union{ - nfapi_harq_indication_tdd_harq_data_t bundling; - nfapi_harq_indication_tdd_harq_data_t multiplex; - nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; - nfapi_harq_indication_tdd_harq_data_t channel_selection; - nfapi_harq_indication_tdd_harq_data_t format_3; - } harq_data[NFAPI_MAX_NUMBER_ACK_NACK_TDD]; -} nfapi_harq_indication_tdd_rel9_t; -#define NFAPI_HARQ_INDICATION_TDD_REL9_TAG 0x2028 - -typedef struct { - nfapi_tl_t tl; - uint8_t mode; - uint16_t number_of_ack_nack; - union{ - nfapi_harq_indication_tdd_harq_data_t bundling; - nfapi_harq_indication_tdd_harq_data_t multiplex; - nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; - nfapi_harq_indication_tdd_harq_data_t channel_selection; - nfapi_harq_indication_tdd_harq_data_t format_3; - nfapi_harq_indication_tdd_harq_data_t format_4; - nfapi_harq_indication_tdd_harq_data_t format_5; - } harq_data[NFAPI_MAX_NUMBER_ACK_NACK_TDD]; -} nfapi_harq_indication_tdd_rel13_t; -#define NFAPI_HARQ_INDICATION_TDD_REL13_TAG 0x204F - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_tb1; - uint8_t harq_tb2; -} nfapi_harq_indication_fdd_rel8_t; -#define NFAPI_HARQ_INDICATION_FDD_REL8_TAG 0x2029 - -#define NFAPI_HARQ_ACK_NACK_REL9_MAX 10 -typedef struct { - nfapi_tl_t tl; - uint8_t mode; - uint8_t number_of_ack_nack; - uint8_t harq_tb_n[NFAPI_HARQ_ACK_NACK_REL9_MAX]; -} nfapi_harq_indication_fdd_rel9_t; -#define NFAPI_HARQ_INDICATION_FDD_REL9_TAG 0x202a - -#define NFAPI_HARQ_ACK_NACK_REL13_MAX 22 // Need to check this max? -typedef struct { - nfapi_tl_t tl; - uint8_t mode; - uint16_t number_of_ack_nack; - uint8_t harq_tb_n[NFAPI_HARQ_ACK_NACK_REL13_MAX]; -} nfapi_harq_indication_fdd_rel13_t; -#define NFAPI_HARQ_INDICATION_FDD_REL13_TAG 0x2050 - -typedef struct { - nfapi_tl_t tl; - uint8_t ul_cqi; - uint8_t channel; -} nfapi_ul_cqi_information_t; -#define NFAPI_UL_CQI_INFORMATION_TAG 0x2052 - -// Only expect 1 harq_indication TLV.tag to be set -// Would this be a better a an union, but not clear which combinations -// are valid -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_harq_indication_tdd_rel8_t harq_indication_tdd_rel8; - nfapi_harq_indication_tdd_rel9_t harq_indication_tdd_rel9; - nfapi_harq_indication_tdd_rel13_t harq_indication_tdd_rel13; - nfapi_harq_indication_fdd_rel8_t harq_indication_fdd_rel8; - nfapi_harq_indication_fdd_rel9_t harq_indication_fdd_rel9; - nfapi_harq_indication_fdd_rel13_t harq_indication_fdd_rel13; - nfapi_ul_cqi_information_t ul_cqi_information; -} nfapi_harq_indication_pdu_t; - -#define NFAPI_HARQ_IND_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_harqs; - nfapi_harq_indication_pdu_t* harq_pdu_list; -} nfapi_harq_indication_body_t; -#define NFAPI_HARQ_INDICATION_BODY_TAG 0x2026 - -typedef struct { - nfapi_tl_t tl; - uint8_t crc_flag; -} nfapi_crc_indication_rel8_t; -#define NFAPI_CRC_INDICATION_REL8_TAG 0x202c - -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_crc_indication_rel8_t crc_indication_rel8; -} nfapi_crc_indication_pdu_t; - -#define NFAPI_CRC_IND_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_crcs; - nfapi_crc_indication_pdu_t* crc_pdu_list; -} nfapi_crc_indication_body_t; -#define NFAPI_CRC_INDICATION_BODY_TAG 0x202b - -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_ul_cqi_information_t ul_cqi_information; -} nfapi_sr_indication_pdu_t; - -#define NFAPI_SR_IND_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_srs; // Question : should this be srs - nfapi_sr_indication_pdu_t* sr_pdu_list; -} nfapi_sr_indication_body_t; -#define NFAPI_SR_INDICATION_BODY_TAG 0x202d - -// The data offset should be set to 0 or 1 before encoding -// If it is set to 1 the nfapi library will detemine the correct offset - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t data_offset; - uint8_t ul_cqi; - uint8_t ri; - uint16_t timing_advance; -} nfapi_cqi_indication_rel8_t; -#define NFAPI_CQI_INDICATION_REL8_TAG 0x202f - -#define NFAPI_CC_MAX 4 -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t data_offset; - uint8_t ul_cqi; - uint8_t number_of_cc_reported; - uint8_t ri[NFAPI_CC_MAX]; - uint16_t timing_advance; - uint16_t timing_advance_r9; -} nfapi_cqi_indication_rel9_t; -#define NFAPI_CQI_INDICATION_REL9_TAG 0x2030 - -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_cqi_indication_rel8_t cqi_indication_rel8; - nfapi_cqi_indication_rel9_t cqi_indication_rel9; - nfapi_ul_cqi_information_t ul_cqi_information; -} nfapi_cqi_indication_pdu_t; - -#define NFAPI_CQI_RAW_MAX_LEN 12 -typedef struct { - uint8_t pdu[NFAPI_CQI_RAW_MAX_LEN]; -} nfapi_cqi_indication_raw_pdu_t; - -#define NFAPI_CQI_IND_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_cqis; - nfapi_cqi_indication_pdu_t* cqi_pdu_list; - nfapi_cqi_indication_raw_pdu_t* cqi_raw_pdu_list; -} nfapi_cqi_indication_body_t; -#define NFAPI_CQI_INDICATION_BODY_TAG 0x202e - -typedef struct { - nfapi_tl_t tl; - uint16_t rnti; - uint8_t preamble; - uint16_t timing_advance; -} nfapi_preamble_pdu_rel8_t; -#define NFAPI_PREAMBLE_REL8_TAG 0x2032 - -typedef struct { - nfapi_tl_t tl; - uint16_t timing_advance_r9; -} nfapi_preamble_pdu_rel9_t; -#define NFAPI_PREAMBLE_REL9_TAG 0x2033 - -typedef struct { - nfapi_tl_t tl; - uint8_t rach_resource_type; -} nfapi_preamble_pdu_rel13_t; -#define NFAPI_PREAMBLE_REL13_TAG 0x2051 - -typedef struct { - uint16_t instance_length; - nfapi_preamble_pdu_rel8_t preamble_rel8; - nfapi_preamble_pdu_rel9_t preamble_rel9; - nfapi_preamble_pdu_rel13_t preamble_rel13; -} nfapi_preamble_pdu_t; - -#define NFAPI_PREAMBLE_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_preambles; - nfapi_preamble_pdu_t* preamble_list; -} nfapi_rach_indication_body_t; -#define NFAPI_RACH_INDICATION_BODY_TAG 0x2031 - -#define NFAPI_NUM_RB_MAX 1000 -typedef struct { - nfapi_tl_t tl; - uint16_t doppler_estimation; - uint16_t timing_advance; - uint8_t number_of_resource_blocks; - uint8_t rb_start; - uint8_t snr[NFAPI_NUM_RB_MAX]; -} nfapi_srs_indication_fdd_rel8_t; -#define NFAPI_SRS_INDICATION_FDD_REL8_TAG 0x2035 - -typedef struct { - nfapi_tl_t tl; - uint16_t timing_advance_r9; -} nfapi_srs_indication_fdd_rel9_t; -#define NFAPI_SRS_INDICATION_FDD_REL9_TAG 0x2036 - -typedef struct { - nfapi_tl_t tl; - uint8_t uppts_symbol; -} nfapi_srs_indication_ttd_rel10_t; -#define NFAPI_SRS_INDICATION_TDD_REL10_TAG 0x2037 - -typedef struct { - nfapi_tl_t tl; - uint16_t ul_rtoa; -} nfapi_srs_indication_fdd_rel11_t; -#define NFAPI_SRS_INDICATION_FDD_REL11_TAG 0x2053 - - -typedef struct { - nfapi_tl_t tl; - uint8_t num_prb_per_subband; - uint8_t number_of_subbands; - uint8_t num_atennas; - struct { - uint8_t subband_index; - uint16_t channel[NFAPI_MAX_NUM_PHYSICAL_ANTENNAS]; - } subands[NFAPI_MAX_NUM_SUBBANDS]; -} nfapi_tdd_channel_measurement_t; -#define NFAPI_TDD_CHANNEL_MEASUREMENT_TAG 0x2054 - -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_srs_indication_fdd_rel8_t srs_indication_fdd_rel8; - nfapi_srs_indication_fdd_rel9_t srs_indication_fdd_rel9; - nfapi_srs_indication_ttd_rel10_t srs_indication_tdd_rel10; - nfapi_srs_indication_fdd_rel11_t srs_indication_fdd_rel11; - nfapi_tdd_channel_measurement_t tdd_channel_measurement; -} nfapi_srs_indication_pdu_t; - -#define NFAPI_SRS_IND_MAX_PDU 16 -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_ues; - nfapi_srs_indication_pdu_t* srs_pdu_list; -} nfapi_srs_indication_body_t; -#define NFAPI_SRS_INDICATION_BODY_TAG 0x2034 - -typedef struct { - nfapi_tl_t tl; - uint16_t length; - uint16_t offset; - uint8_t ul_cqi; - uint16_t timing_advance; -} nfapi_rx_indication_rel8_t; -#define NFAPI_RX_INDICATION_REL8_TAG 0x2024 - -typedef struct { - nfapi_tl_t tl; - uint16_t timing_advance_r9; - } nfapi_rx_indication_rel9_t; -#define NFAPI_RX_INDICATION_REL9_TAG 0x2025 - -typedef struct { - nfapi_rx_ue_information rx_ue_information; - nfapi_rx_indication_rel8_t rx_indication_rel8; - nfapi_rx_indication_rel9_t rx_indication_rel9; - uint8_t* data; -} nfapi_rx_indication_pdu_t; - -#define NFAPI_RX_IND_MAX_PDU 100 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_pdus; - nfapi_rx_indication_pdu_t* rx_pdu_list; -} nfapi_rx_indication_body_t; -#define NFAPI_RX_INDICATION_BODY_TAG 0x2023 - -typedef struct { - nfapi_tl_t tl; - uint8_t harq_tb1; -} nfapi_nb_harq_indication_fdd_rel13_t; -#define NFAPI_NB_HARQ_INDICATION_FDD_REL13_TAG 0x2064 - -typedef struct { - uint16_t instance_length; - nfapi_rx_ue_information rx_ue_information; - nfapi_nb_harq_indication_fdd_rel13_t nb_harq_indication_fdd_rel13; - nfapi_ul_cqi_information_t ul_cqi_information; -} nfapi_nb_harq_indication_pdu_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_harqs; - nfapi_nb_harq_indication_pdu_t* nb_harq_pdu_list; -} nfapi_nb_harq_indication_body_t; -#define NFAPI_NB_HARQ_INDICATION_BODY_TAG 0x2063 - -typedef struct { - nfapi_tl_t tl; - uint16_t rnti; - uint8_t initial_sc; - uint16_t timing_advance; - uint8_t nrach_ce_level; -} nfapi_nrach_indication_pdu_rel13_t; -#define NFAPI_NRACH_INDICATION_REL13_TAG 0x2066 - -typedef struct { - nfapi_nrach_indication_pdu_rel13_t nrach_indication_rel13; -} nfapi_nrach_indication_pdu_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_initial_scs_detected; - nfapi_nrach_indication_pdu_t* nrach_pdu_list; -} nfapi_nrach_indication_body_t; -#define NFAPI_NRACH_INDICATION_BODY_TAG 0x2065 - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint32_t mp_cca; - uint32_t n_cca; - uint32_t offset; - uint32_t lte_txop_sf; - uint16_t txop_sfn_sf_end; - uint32_t lbt_mode; -} nfapi_lbt_pdsch_req_pdu_rel13_t; -#define NFAPI_LBT_PDSCH_REQ_PDU_REL13_TAG 0x2056 - -typedef struct { - nfapi_lbt_pdsch_req_pdu_rel13_t lbt_pdsch_req_pdu_rel13; -} nfapi_lbt_pdsch_req_pdu; - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint32_t offset; - uint16_t sfn_sf_end; - uint32_t lbt_mode; -} nfapi_lbt_drs_req_pdu_rel13_t; -#define NFAPI_LBT_DRS_REQ_PDU_REL13_TAG 0x2057 - -typedef struct { - nfapi_lbt_drs_req_pdu_rel13_t lbt_drs_req_pdu_rel13; -} nfapi_lbt_drs_req_pdu; - -typedef struct { - uint8_t pdu_type; - uint8_t pdu_size; - union { - nfapi_lbt_pdsch_req_pdu lbt_pdsch_req_pdu; - nfapi_lbt_drs_req_pdu lbt_drs_req_pdu; - }; -} nfapi_lbt_dl_config_request_pdu_t; - -#define NFAPI_LBT_DL_CONFIG_REQ_MAX_PDU 16 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_pdus; - nfapi_lbt_dl_config_request_pdu_t* lbt_dl_config_req_pdu_list; -} nfapi_lbt_dl_config_request_body_t; -#define NFAPI_LBT_DL_CONFIG_REQUEST_BODY_TAG 0x2055 - - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint32_t result; - uint32_t lte_txop_symbols; - uint32_t initial_partial_sf; -} nfapi_lbt_pdsch_rsp_pdu_rel13_t; -#define NFAPI_LBT_PDSCH_RSP_PDU_REL13_TAG 0x2059 - -typedef struct { - nfapi_lbt_pdsch_rsp_pdu_rel13_t lbt_pdsch_rsp_pdu_rel13; -} nfapi_lbt_pdsch_rsp_pdu; - -typedef struct { - nfapi_tl_t tl; - uint32_t handle; - uint32_t result; -} nfapi_lbt_drs_rsp_pdu_rel13_t; -#define NFAPI_LBT_DRS_RSP_PDU_REL13_TAG 0x205A - -typedef struct { - nfapi_lbt_drs_rsp_pdu_rel13_t lbt_drs_rsp_pdu_rel13; -} nfapi_lbt_drs_rsp_pdu; - - -typedef struct { - uint8_t pdu_type; - uint8_t pdu_size; - union { - nfapi_lbt_pdsch_rsp_pdu lbt_pdsch_rsp_pdu; - nfapi_lbt_drs_rsp_pdu lbt_drs_rsp_pdu; - }; -} nfapi_lbt_dl_indication_pdu_t; - -#define NFAPI_LBT_IND_MAX_PDU 16 -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_pdus; - nfapi_lbt_dl_indication_pdu_t* lbt_indication_pdu_list; -} nfapi_lbt_dl_indication_body_t; -#define NFAPI_LBT_DL_INDICATION_BODY_TAG 0x2058 - -typedef struct { -} nfapi_error_indication_msg_invalid_state; - -typedef struct { -} nfapi_error_indication_msg_bch_missing; - -typedef struct { - uint16_t recieved_sfn_sf; - uint16_t expected_sfn_sf; -} nfapi_error_indication_sfn_out_of_sync; - -typedef struct { - uint8_t sub_error_code; - uint8_t direction; - uint16_t rnti; - uint8_t pdu_type; -} nfapi_error_indication_msg_pdu_err; - -typedef struct { - uint16_t recieved_sfn_sf; - uint16_t expected_sfn_sf; -} nfapi_error_indication_msg_invalid_sfn; - -typedef struct { - uint8_t sub_error_code; - uint8_t phich_lowest_ul_rb_index; -} nfapi_error_indication_msg_hi_err; - -typedef struct { - uint8_t sub_error_code; - uint16_t pdu_index; -} nfapi_error_indication_msg_tx_err; - -// -// P4 Message Structures -// - -typedef struct { - nfapi_tl_t tl; - uint8_t frequency_band_indicator; - uint16_t measurement_period; - uint8_t bandwidth; - uint32_t timeout; - uint8_t number_of_earfcns; - uint16_t earfcn[NFAPI_MAX_CARRIER_LIST]; -} nfapi_lte_rssi_request_t; - -#define NFAPI_LTE_RSSI_REQUEST_TAG 0x3000 - -#define NFAPI_P4_START_TAG NFAPI_LTE_RSSI_REQUEST_TAG - -typedef struct { - nfapi_tl_t tl; - uint8_t frequency_band_indicator; - uint16_t measurement_period; - uint32_t timeout; - uint8_t number_of_uarfcns; - uint16_t uarfcn[NFAPI_MAX_CARRIER_LIST]; -} nfapi_utran_rssi_request_t; - -#define NFAPI_UTRAN_RSSI_REQUEST_TAG 0x3001 - -typedef struct { - uint16_t arfcn; - uint8_t direction; -} nfapi_arfcn_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t frequency_band_indicator; - uint16_t measurement_period; - uint32_t timeout; - uint8_t number_of_arfcns; - nfapi_arfcn_t arfcn[NFAPI_MAX_CARRIER_LIST]; -} nfapi_geran_rssi_request_t; - -#define NFAPI_GERAN_RSSI_REQUEST_TAG 0x3002 - - - -typedef struct { - uint16_t earfcn; - uint8_t number_of_ro_dl; - uint8_t ro_dl[NFAPI_MAX_RO_DL]; -} nfapi_earfcn_t; - -typedef struct { - nfapi_tl_t tl; - uint8_t frequency_band_indicator; - uint16_t measurement_period; - uint32_t timeout; - uint8_t number_of_earfcns; - nfapi_earfcn_t earfcn[NFAPI_MAX_CARRIER_LIST]; -} nfapi_nb_iot_rssi_request_t; - -#define NFAPI_NB_IOT_RSSI_REQUEST_TAG 0x3020 - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_rssi; - int16_t rssi[NFAPI_MAX_RSSI]; -} nfapi_rssi_indication_body_t; - -#define NFAPI_RSSI_INDICATION_TAG 0x3003 - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint8_t measurement_bandwidth; - uint8_t exhaustive_search; - uint32_t timeout; - uint8_t number_of_pci; - uint16_t pci[NFAPI_MAX_PCI_LIST]; -} nfapi_lte_cell_search_request_t; - -#define NFAPI_LTE_CELL_SEARCH_REQUEST_TAG 0x3004 - -typedef struct { - nfapi_tl_t tl; - uint16_t uarfcn; - uint8_t exhaustive_search; - uint32_t timeout; - uint8_t number_of_psc; - uint16_t psc[NFAPI_MAX_PSC_LIST]; -} nfapi_utran_cell_search_request_t; - -#define NFAPI_UTRAN_CELL_SEARCH_REQUEST_TAG 0x3005 - -typedef struct { - nfapi_tl_t tl; - uint32_t timeout; - uint8_t number_of_arfcn; - uint16_t arfcn[NFAPI_MAX_ARFCN_LIST]; -} nfapi_geran_cell_search_request_t; - -#define NFAPI_GERAN_CELL_SEARCH_REQUEST_TAG 0x3006 - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint8_t ro_dl; - uint8_t exhaustive_search; - uint32_t timeout; - uint8_t number_of_pci; - uint16_t pci[NFAPI_MAX_PCI_LIST]; -} nfapi_nb_iot_cell_search_request_t; - -#define NFAPI_NB_IOT_CELL_SEARCH_REQUEST_TAG 0x3021 - -typedef struct { - uint16_t pci; - uint8_t rsrp; - uint8_t rsrq; - int16_t frequency_offset; -} nfapi_lte_found_cell_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_lte_cells_found; - nfapi_lte_found_cell_t lte_found_cells[NFAPI_MAX_LTE_CELLS_FOUND]; -} nfapi_lte_cell_search_indication_t; - -#define NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007 - -typedef struct { - uint16_t psc; - uint8_t rscp; - uint8_t ecno; - int16_t frequency_offset; -} nfapi_utran_found_cell_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_utran_cells_found; - nfapi_utran_found_cell_t utran_found_cells[NFAPI_MAX_UTRAN_CELLS_FOUND]; -} nfapi_utran_cell_search_indication_t; - -#define NFAPI_UTRAN_CELL_SEARCH_INDICATION_TAG 0x3008 - -typedef struct { - uint16_t arfcn; - uint8_t bsic; - uint8_t rxlev; - uint8_t rxqual; - int16_t frequency_offset; - uint32_t sfn_offset; -} nfapi_gsm_found_cell_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_gsm_cells_found; - nfapi_gsm_found_cell_t gsm_found_cells[NFAPI_MAX_GSM_CELLS_FOUND]; -} nfapi_geran_cell_search_indication_t; - -#define NFAPI_GERAN_CELL_SEARCH_INDICATION_TAG 0x3009 - -typedef struct { - uint16_t pci; - uint8_t rsrp; - uint8_t rsrq; - int16_t frequency_offset; -} nfapi_nb_iot_found_cell_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t number_of_nb_iot_cells_found; - nfapi_nb_iot_found_cell_t nb_iot_found_cells[NFAPI_MAX_NB_IOT_CELLS_FOUND]; -} nfapi_nb_iot_cell_search_indication_t; - -#define NFAPI_NB_IOT_CELL_SEARCH_INDICATION_TAG 0x3022 - -typedef nfapi_opaqaue_data_t nfapi_pnf_cell_search_state_t; - -#define NFAPI_PNF_CELL_SEARCH_STATE_TAG 0x300A - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint16_t pci; - uint32_t timeout; -} nfapi_lte_broadcast_detect_request_t; - -#define NFAPI_LTE_BROADCAST_DETECT_REQUEST_TAG 0x300B - -typedef struct { - nfapi_tl_t tl; - uint16_t uarfcn; - uint16_t psc; - uint32_t timeout; -} nfapi_utran_broadcast_detect_request_t; - -#define NFAPI_UTRAN_BROADCAST_DETECT_REQUEST_TAG 0x300C - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint8_t ro_dl; - uint16_t pci; - uint32_t timeout; -} nfapi_nb_iot_broadcast_detect_request_t; - -#define NFAPI_NB_IOT_BROADCAST_DETECT_REQUEST_TAG 0x3023 - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_tx_antenna; - uint16_t mib_length; - uint8_t mib[NFAPI_MAX_MIB_LENGTH]; - uint32_t sfn_offset; -} nfapi_lte_broadcast_detect_indication_t; - -#define NFAPI_LTE_BROADCAST_DETECT_INDICATION_TAG 0x300E - -typedef struct { - nfapi_tl_t tl; - uint16_t mib_length; - uint8_t mib[NFAPI_MAX_MIB_LENGTH]; - uint32_t sfn_offset; -} nfapi_utran_broadcast_detect_indication_t; - -#define NFAPI_UTRAN_BROADCAST_DETECT_INDICATION_TAG 0x300F - - -typedef struct { - nfapi_tl_t tl; - uint8_t number_of_tx_antenna; - uint16_t mib_length; - uint8_t mib[NFAPI_MAX_MIB_LENGTH]; - uint32_t sfn_offset; -} nfapi_nb_iot_broadcast_detect_indication_t; - -#define NFAPI_NB_IOT_BROADCAST_DETECT_INDICATION_TAG 0x3024 - -#define NFAPI_PNF_CELL_BROADCAST_STATE_TAG 0x3010 - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint16_t pci; - uint16_t downlink_channel_bandwidth; - uint8_t phich_configuration; - uint8_t number_of_tx_antenna; - uint8_t retry_count; - uint32_t timeout; -} nfapi_lte_system_information_schedule_request_t; - -#define NFAPI_LTE_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3011 - - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint8_t ro_dl; - uint16_t pci; - uint8_t scheduling_info_sib1_nb; - uint32_t timeout; -} nfapi_nb_iot_system_information_schedule_request_t; - -#define NFAPI_NB_IOT_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3025 - -typedef nfapi_opaqaue_data_t nfapi_pnf_cell_broadcast_state_t; - -typedef struct { - uint8_t si_periodicity; - uint8_t si_index; -} nfapi_lte_system_information_si_periodicity_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint16_t pci; - uint16_t downlink_channel_bandwidth; - uint8_t phich_configuration; - uint8_t number_of_tx_antenna; - uint8_t number_of_si_periodicity; - nfapi_lte_system_information_si_periodicity_t si_periodicity[NFAPI_MAX_SI_PERIODICITY]; - uint8_t si_window_length; - uint32_t timeout; -} nfapi_lte_system_information_request_t; - -#define NFAPI_LTE_SYSTEM_INFORMATION_REQUEST_TAG 0x3014 - -typedef struct { - nfapi_tl_t tl; - uint16_t uarfcn; - uint16_t psc; - uint32_t timeout; -} nfapi_utran_system_information_request_t; - -#define NFAPI_UTRAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3015 - -typedef struct { - nfapi_tl_t tl; - uint16_t arfcn; - uint8_t bsic; - uint32_t timeout; -} nfapi_geran_system_information_request_t; - -#define NFAPI_GERAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3016 - -typedef struct { - uint8_t si_periodicity; - uint8_t si_repetition_pattern; - uint8_t si_tb_size; - uint8_t number_of_si_index; - uint8_t si_index[NFAPI_MAX_SI_INDEX]; -} nfapi_nb_iot_system_information_si_periodicity_t; - -typedef struct { - nfapi_tl_t tl; - uint16_t earfcn; - uint8_t ro_dl; - uint16_t pci; - uint8_t number_of_si_periodicity; - nfapi_nb_iot_system_information_si_periodicity_t si_periodicity[NFAPI_MAX_SI_PERIODICITY]; - uint8_t si_window_length; - uint32_t timeout; -} nfapi_nb_iot_system_information_request_t; - -#define NFAPI_NB_IOT_SYSTEM_INFORMATION_REQUEST_TAG 0x3027 - -typedef struct { - nfapi_tl_t tl; - uint8_t sib_type; - uint16_t sib_length; - uint8_t sib[NFAPI_MAX_SIB_LENGTH]; -} nfapi_lte_system_information_indication_t; - -#define NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG 0x3018 - -typedef struct { - nfapi_tl_t tl; - uint16_t sib_length; - uint8_t sib[NFAPI_MAX_SIB_LENGTH]; -} nfapi_utran_system_information_indication_t; - -#define NFAPI_UTRAN_SYSTEM_INFORMATION_INDICATION_TAG 0x3019 - -typedef struct { - nfapi_tl_t tl; - uint16_t si_length; - uint8_t si[NFAPI_MAX_SI_LENGTH]; -} nfapi_geran_system_information_indication_t; - -#define NFAPI_GERAN_SYSTEM_INFORMATION_INDICATION_TAG 0x301a - -typedef struct { - nfapi_tl_t tl; - uint8_t sib_type; - uint16_t sib_length; - uint8_t sib[NFAPI_MAX_SIB_LENGTH]; -} nfapi_nb_iot_system_information_indication_t; - -#define NFAPI_NB_IOT_SYSTEM_INFORMATION_INDICATION_TAG 0x3026 - - -// -// Top level NFAP messages -// - -// -// P7 -// - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_dl_config_request_body_t dl_config_request_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_dl_config_request_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_ul_config_request_body_t ul_config_request_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_ul_config_request_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_hi_dci0_request_body_t hi_dci0_request_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_hi_dci0_request_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_tx_request_body_t tx_request_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_tx_request_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; -} nfapi_subframe_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_harq_indication_body_t harq_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_harq_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_crc_indication_body_t crc_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_crc_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_sr_indication_body_t sr_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_sr_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_cqi_indication_body_t cqi_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_cqi_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_rach_indication_body_t rach_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_rach_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_srs_indication_body_t srs_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_srs_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_rx_indication_body_t rx_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_rx_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_nb_harq_indication_body_t nb_harq_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_nb_harq_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_nrach_indication_body_t nrach_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_nrach_indication_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_lbt_dl_config_request_body_t lbt_dl_config_request_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_lbt_dl_config_request_t; - -typedef struct { - nfapi_p7_message_header_t header; - uint16_t sfn_sf; - nfapi_lbt_dl_indication_body_t lbt_dl_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_lbt_dl_indication_t; - - -typedef struct { - nfapi_p7_message_header_t header; - uint8_t message_id; - uint8_t error_code; - union { - nfapi_error_indication_msg_invalid_state msg_invalid_state; - nfapi_error_indication_msg_bch_missing msg_bch_missing; - nfapi_error_indication_sfn_out_of_sync sfn_out_of_sync; - nfapi_error_indication_msg_pdu_err msg_pdu_err; - nfapi_error_indication_msg_invalid_sfn msg_invalid_sfn; - nfapi_error_indication_msg_hi_err msg_hi_err; - nfapi_error_indication_msg_tx_err msg_tx_err; - }; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_error_indication_t; - -// -// P4 Messages -// - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t rat_type; - union { - nfapi_lte_rssi_request_t lte_rssi_request; - nfapi_utran_rssi_request_t utran_rssi_request; - nfapi_geran_rssi_request_t geran_rssi_request; - nfapi_nb_iot_rssi_request_t nb_iot_rssi_request; - }; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_rssi_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_rssi_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_rssi_indication_body_t rssi_indication_body; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_rssi_indication_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t rat_type; - union { - nfapi_lte_cell_search_request_t lte_cell_search_request; - nfapi_utran_cell_search_request_t utran_cell_search_request; - nfapi_geran_cell_search_request_t geran_cell_search_request; - nfapi_nb_iot_cell_search_request_t nb_iot_cell_search_request; - }; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_cell_search_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_cell_search_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_lte_cell_search_indication_t lte_cell_search_indication; - nfapi_utran_cell_search_indication_t utran_cell_search_indication; - nfapi_geran_cell_search_indication_t geran_cell_search_indication; - nfapi_pnf_cell_search_state_t pnf_cell_search_state; - nfapi_nb_iot_cell_search_indication_t nb_iot_cell_search_indication; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_cell_search_indication_t; - - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t rat_type; - union { - nfapi_lte_broadcast_detect_request_t lte_broadcast_detect_request; - nfapi_utran_broadcast_detect_request_t utran_broadcast_detect_request; - nfapi_nb_iot_broadcast_detect_request_t nb_iot_broadcast_detect_request; - }; - nfapi_pnf_cell_search_state_t pnf_cell_search_state; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_broadcast_detect_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_broadcast_detect_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_lte_broadcast_detect_indication_t lte_broadcast_detect_indication; - nfapi_utran_broadcast_detect_indication_t utran_broadcast_detect_indication; - nfapi_nb_iot_broadcast_detect_indication_t nb_iot_broadcast_detect_indication; - nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_broadcast_detect_indication_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t rat_type; - union { - nfapi_lte_system_information_schedule_request_t lte_system_information_schedule_request; - nfapi_nb_iot_system_information_schedule_request_t nb_iot_system_information_schedule_request; - }; - nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_schedule_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_schedule_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_lte_system_information_indication_t lte_system_information_indication; - nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_schedule_indication_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint8_t rat_type; - union { - nfapi_lte_system_information_request_t lte_system_information_request; - nfapi_utran_system_information_request_t utran_system_information_request; - nfapi_geran_system_information_request_t geran_system_information_request; - nfapi_nb_iot_system_information_request_t nb_iot_system_information_request; - }; - nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_response_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_lte_system_information_indication_t lte_system_information_indication; - nfapi_utran_system_information_indication_t utran_system_information_indication; - nfapi_geran_system_information_indication_t geran_system_information_indication; - nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_system_information_indication_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_nmm_stop_request_t; - -typedef struct { - nfapi_p4_p5_message_header_t header; - uint32_t error_code; - nfapi_vendor_extension_tlv_t vendor_extension; -} nfapi_nmm_stop_response_t; - -// -// Configuration options for the encode decode functions -// - -/*! Configuration options for the p7 pack unpack functions - * - */ -typedef struct nfapi_p7_codec_config { - - /*! Optional call back to allow the user to define the memory allocator. - * \param size The size of the memory to allocate - * \return a pointer to a valid memory block or 0 if it has failed. - * - * If not set the nfapi unpack functions will use malloc - */ - void* (*allocate)(size_t size); - - /*! Optional call back to allow the user to define the memory deallocator. - * \param ptr A poiner to a memory block allocated by the allocate callback - * - * If not set the client should use free - */ - void (*deallocate)(void* ptr); - - /*! Optional call back function to handle unpacking vendor extension tlv. - * \param tl A pointer to a decoded tag length structure - * \param ppReadPackedMsg A handle to the read buffer. - * \param end The end of the read buffer - * \param ve A handle to a vendor extention structure that the call back should allocate if the structure can be decoded - * \param config A pointer to the p7 codec configuration - * \return return 0 if packed successfully, -1 if failed. - * - * If not set the tlv will be skipped - * - * Client should use the help methods in nfapi.h to decode the vendor extention. - * - * \todo Add code example - */ - int (*unpack_vendor_extension_tlv)(nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nfapi_p7_codec_config* config); - - /*! Optional call back function to handle packing vendor extension tlv. - * \param ve A pointer to a vendor extention structure. - * \param ppWritePackedMsg A handle to the write buffer - * \param end The end of the write buffer. The callee should make sure not to write beyond the end - * \param config A pointer to the p7 codec configuration - * \return return 0 if packed successfully, -1 if failed. - * - * If not set the the tlv will be skipped - * - * Client should use the help methods in nfapi.h to encode the vendor extention - * - * \todo Add code example - */ - int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nfapi_p7_codec_config* config); - - /*! Optional call back function to handle unpacking vendor extension messages. - * \param header A pointer to a decode P7 message header for the vendor extention message - * \param ppReadPackedMsg A handle to the encoded data buffer - * \param end A pointer to the end of the encoded data buffer - * \param config A pointer to the p7 codec configuration - * \return 0 if unpacked successfully, -1 if failed - * - * If not set the message will be ignored - * - * If the message if is unknown the function should return -1 - */ - int (*unpack_p7_vendor_extension)(nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nfapi_p7_codec_config* config); - - /*! Optional call back function to handle packing vendor extension messages. - * \param header A poiner to a P7 message structure for the venfor extention message - * \param ppWritePackedmsg A handle to the buffer to write the encoded message into - * \param end A pointer to the end of the buffer - * \param cofig A pointer to the p7 codec configuration - * \return 0 if packed successfully, -1 if failed - * - * If not set the the message will be ingored - * - * If the message if is unknown the function should return -1 - */ - int (*pack_p7_vendor_extension)(nfapi_p7_message_header_t* header, uint8_t **ppWritePackedmsg, uint8_t *end, struct nfapi_p7_codec_config* config); - - /*! Optional user data that will be passed back with callbacks - */ - void* user_data; - -} nfapi_p7_codec_config_t; - -/*! Configuration options for the p4 & p5 pack unpack functions - * - */ -typedef struct nfapi_p4_p5_codec_config { - - /*! Optional call back to allow the user to define the memory allocator. - * \param size The size of the memory to allocate - * \return a pointer to a valid memory block or 0 if it has failed. - * - * If not set the nfapi unpack functions will use malloc - */ - void* (*allocate)(size_t size); - - /*! Optional call back to allow the user to define the memory deallocator. - * \param ptr A poiner to a memory block allocated by the allocate callback - * - * If not set free will be used - */ - void (*deallocate)(void* ptr); - - /*! Optional call back function to handle unpacking vendor extension tlv. - * \param tl A pointer to a decoded tag length structure - * \param ppReadPackedMsg A handle to the data buffer to decode - * \param end A pointer to the end of the buffer - * \param ve A handle to a vendor extention structure that will be allocated by this callback - * \param config A pointer to the P4/P5 codec configuration - * \return 0 if unpacked successfully, -1 if failed - * - * If not set the tlv will be skipped - */ - int (*unpack_vendor_extension_tlv)(nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nfapi_p4_p5_codec_config* config); - - /*! Optional call back function to handle packing vendor extension tlv. - * \param ve - * \param ppWritePackedMsg A handle to the data buffer pack the tlv into - * \param end A pointer to the end of the buffer - * \param config A pointer to the P4/P5 codec configuration - * \return 0 if packed successfully, -1 if failed - * - * If not set the the tlv will be skipped - */ - int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config); - - /*! Optional call back function to handle unpacking vendor extension messages. - * \param header A pointer to a decode P4/P5 message header - * \param ppReadPackgedMsg A handle to the data buffer to decode - * \param end A pointer to the end of the buffer - * \param config A pointer to the P4/P5 codec configuration - * \return 0 if packed successfully, -1 if failed - * - * If not set the message will be ignored - */ - int (*unpack_p4_p5_vendor_extension)(nfapi_p4_p5_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config); - - /*! Optional call back function to handle packing vendor extension messages. - * \param header A pointer to the P4/P5 message header to be encoded - * \param ppWritePackedMsg A handle to the data buffer pack the message into - * \param end A pointer to the end of the buffer - * \param config A pointer to the P4/P5 codec configuration - * \return 0 if packed successfully, -1 if failed - * - * If not set the the message will be ingored - */ - int (*pack_p4_p5_vendor_extension)(nfapi_p4_p5_message_header_t* header, uint8_t **ppwritepackedmsg, uint8_t *end, struct nfapi_p4_p5_codec_config* config); - - /*! Optional user data that will be passed back with callbacks - */ - void* user_data; - -} nfapi_p4_p5_codec_config_t; - -// -// Functions -// - -/*! \brief Encodes an NFAPI P4 message to a buffer - * \param pMessageBuf A pointer to a nfapi p4 message structure - * \param messageBufLen The size of the p4 message structure - * \param pPackedBuf A pointer to the buffer that the p4 message will be packed into - * \param packedBufLen The size of the buffer - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will encode a nFAPI P4 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. - * - */ -int nfapi_p4_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Decodes a NFAPI P4 message header - * \param pMessageBuf A pointer to an encoded P4 message header - * \param messageBufLen The size of the encoded P4 message header - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf - */ -int nfapi_p4_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Decodes a NFAPI P4 message - * \param pMessageBuf A pointer to an encoded P4 message - * \param messageBufLen The size of the encoded P4 message - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p4 message structure pointer to by pUnpackedBuf - */ -int nfapi_p4_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Encodes an NFAPI P5 message to a buffer - * \param pMessageBuf A pointer to a nfapi p5 message structure - * \param messageBufLen The size of the p5 message structure - * \param pPackedBuf A pointer to the buffer that the p5 message will be packed into - * \param packedBufLen The size of the buffer - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will encode a nFAPI P5 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. - * - */ -int nfapi_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Decodes an NFAPI P5 message header - * \param pMessageBuf A pointer to an encoded P5 message header - * \param messageBufLen The size of the encoded P5 message header - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf - */ -int nfapi_p5_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Decodes a NFAPI P5 message - * \param pMessageBuf A pointer to an encoded P5 message - * \param messageBufLen The size of the encoded P5 message - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 message structure pointer to by pUnpackedBuf - */ -int nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p4_p5_codec_config_t* config); - -/*! \brief Encodes an NFAPI P7 message to a buffer - * \param pMessageBuf A pointer to a nfapi p7 message structure - * \param pPackedBuf A pointer to the buffer that the p7 message will be packed into - * \param packedBufLen The size of the buffer - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will encode a nFAPI P7 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. - * - */ -int nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nfapi_p7_codec_config_t* config); - -/*! \brief Decodes an NFAPI P7 message header - * \param pMessageBuf A pointer to an encoded P7 message header - * \param messageBufLen The size of the encoded P7 message header - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi_p7_message_header structure pointer to by pUnpackedBuf - - */ -int nfapi_p7_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p7_codec_config_t* config); - -/*! \brief Decodes a NFAPI P7 message - * \param pMessageBuf A pointer to an encoded P7 message - * \param messageBufLen The size of the encoded P7 message - * \param pUnpackedBuf A pointer to the nfapi_message_header - * \param unpackedBufLen The size of nfapi_message_header structure. - * \param config A pointer to the nfapi configuration structure - * \return 0 means success, -1 means failure. - * - * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p7 message structure pointer to by pUnpackedBuf - */ -int nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nfapi_p7_codec_config_t* config); - -/*! \brief Calculates the checksum of a message - * - * \param buffer Pointer to the packed message - * \param len The length of the message - * \return The checksum. If there is an error the function with return -1 - */ -uint32_t nfapi_p7_calculate_checksum(uint8_t* buffer, uint32_t len); - -/*! \brief Calculates & updates the checksum in the message - * - * \param buffer Pointer to the packed message - * \param len The length of the message - * \return 0 means success, -1 means failure. - */ -int nfapi_p7_update_checksum(uint8_t* buffer, uint32_t len); - -/*! \brief Updates the transmition time stamp in the p7 message header - * - * \param buffer Pointer to the packed message - * \param timestamp The time stamp value - * \return 0 means success, -1 means failure. - */ -int nfapi_p7_update_transmit_timestamp(uint8_t* buffer, uint32_t timestamp); - -#endif /* _NFAPI_INTERFACE_H_ */ diff --git a/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h b/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h new file mode 100644 index 0000000000..ecee7c02e3 --- /dev/null +++ b/nfapi/open-nFAPI/nfapi/public_inc/nr_ue_fapi_interface.h @@ -0,0 +1,3887 @@ +/* + * Copyright 2017 Cisco Systems, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef _NFAPI_INTERFACE_NR_EXTENSION_H_ +#define _NFAPI_INTERFACE_NR_EXTENSION_H_ +#define _NFAPI_INTERFACE_H_ + +#include "stddef.h" + +// Constants - update based on implementation +#define NR_NFAPI_MAX_PHY_RF_INSTANCES 2 +#define NR_NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH 16 +#define NR_NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH 3 +#define NR_NFAPI_MAX_NUM_RF_BANDS 16 + +// The following definition control the size of arrays used in the interface. +// These may be changed if desired. They are used in the encoder to make sure +// that the user has not specified a 'count' larger than the max array, and also +// used by the decoder when decode an array. If the 'count' received is larger +// than the array it is to be stored in the decode fails. +#define NR_NFAPI_MAX_NUM_ANTENNAS 8 +#define NR_NFAPI_MAX_NUM_SUBBANDS 13 +#define NR_NFAPI_MAX_BF_VECTORS 8 +#define NR_NFAPI_MAX_CC 1 +#define NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS 8 +#define NR_NFAPI_MAX_RSSI 8 +#define NR_NFAPI_MAX_PSC_LIST 32 +#define NR_NFAPI_MAX_PCI_LIST 32 +#define NR_NFAPI_MAX_CARRIER_LIST 32 +#define NR_NFAPI_MAX_ARFCN_LIST 128 +#define NR_NFAPI_MAX_LTE_CELLS_FOUND 8 +#define NR_NFAPI_MAX_UTRAN_CELLS_FOUND 8 +#define NR_NFAPI_MAX_GSM_CELLS_FOUND 8 +#define NR_NFAPI_MAX_NB_IOT_CELLS_FOUND 8 +#define NR_NFAPI_MAX_SI_PERIODICITY 8 +#define NR_NFAPI_MAX_SI_INDEX 8 +#define NR_NFAPI_MAX_MIB_LENGTH 32 +#define NR_NFAPI_MAX_SIB_LENGTH 256 +#define NR_NFAPI_MAX_SI_LENGTH 256 +#define NR_NFAPI_MAX_OPAQUE_DATA 64 +#define NR_NFAPI_MAX_NUM_SCHEDULED_UES 8 // Used in the TPM structure +#define NR_NFAPI_MAX_PNF_PHY 5 +#define NR_NFAPI_MAX_PNF_PHY_RF_CONFIG 5 +#define NR_NFAPI_MAX_PNF_RF 5 +#define NR_NFAPI_MAX_NMM_FREQUENCY_BANDS 32 +#define NR_NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS 100 +#define NR_NFAPI_MAX_UL_DL_CONFIGURATIONS 5 +#define NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG 4 +#define NR_NFAPI_MAX_ANTENNA_PORT_COUNT 8 +#define NR_NFAPI_MAX_EPDCCH_PRB 8 +#define NR_NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS 8 +#define NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD 8 +#define NR_NFAPI_MAX_RO_DL 8 + +#define NR_NFAPI_HEADER_LENGTH 8 +#define NR_NFAPI_P7_HEADER_LENGTH 16 + +#define NR_NFAPI_VENDOR_EXTENSION_MIN_TAG_VALUE 0xF000 +#define NR_NFAPI_VENDOR_EXTENSION_MAX_TAG_VALUE 0xFFFF + +#define NR_NFAPI_VERSION_3_0_11 0x000 +#define NR_NFAPI_VERSION_3_0_12 0x001 + +#define NR_NFAPI_HALF_FRAME_INDEX_FIRST_HALF 0 +#define NR_NFAPI_HALF_FRAME_INDEX_SECOND_HALF 1 + +// The IANA agreed port definition of the P5 SCTP VNF enpoint +// http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=7701 +#define NR_NFAPI_P5_SCTP_PORT 7701 + +typedef unsigned int uint32_t; +typedef unsigned short uint16_t; +typedef unsigned char uint8_t; +typedef signed int int32_t; +typedef signed short int16_t; +typedef signed char int8_t; + +typedef struct { + uint16_t phy_id; + uint16_t message_id; + uint16_t message_length; + uint16_t spare; +} nr_nfapi_p4_p5_message_header_t; + +typedef struct { + uint16_t phy_id; + uint16_t message_id; + uint16_t message_length; + uint16_t m_segment_sequence; /* This consists of 3 fields - namely, M, Segement & Sequence number*/ + uint32_t checksum; + uint32_t transmit_timestamp; +} nr_nfapi_p7_message_header_t; + +#define NR_NFAPI_PHY_ID_NA 0 + +//#define NR_NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x80) >> 7 ) +//#define NR_NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x70) >> 4 ) +#define NR_NFAPI_P7_GET_MORE(_mss) ( ((_mss) & 0x8000) >> 15 ) +#define NR_NFAPI_P7_GET_SEGMENT(_mss) ( ((_mss) & 0x7F00) >> 8 ) +#define NR_NFAPI_P7_GET_SEQUENCE(_mss) ( (_mss) & 0x00FF ) +#define NR_NFAPI_P7_SET_MSS(_more, _segm, _sequ) ( (((_more) & 0x1) << 7) | (((_segm) & 0x7) << 4) | ((_sequ) & 0xF) ) + +typedef struct { + uint16_t tag; + uint16_t length; +} nr_nfapi_tl_t; +#define NR_NFAPI_TAG_LENGTH_PACKED_LEN 4 + +// Convenience methods to convert between SFN/SFN formats +#define NR_NFAPI_SFNSF2DEC(_sfnsf) ((((_sfnsf) >> 4) * 10) + ((_sfnsf) & 0xF)) +#define NR_NFAPI_SFNSFDEC2SFNSF(_sfnsf_dec) ((((_sfnsf_dec) / 10) << 4) | (((_sfnsf_dec) - (((_sfnsf_dec) / 10) * 10)) & 0xF)) + +#define NR_NFAPI_SFNSF2SFN(_sfnsf) ((_sfnsf) >> 4) +#define NR_NFAPI_SFNSF2SF(_sfnsf) ((_sfnsf) & 0xF) + +#define NR_NFAPI_MAX_SFNSFDEC 10240 + +typedef nr_nfapi_tl_t* nr_nfapi_vendor_extension_tlv_t; + + +// nFAPI Message IDs +typedef enum { + NR_NFAPI_DL_CONFIG_REQUEST = 0x0080, + NR_NFAPI_UL_CONFIG_REQUEST, + NR_NFAPI_SUBFRAME_INDICATION, + NR_NFAPI_HI_DCI0_REQUEST, + NR_NFAPI_TX_REQUEST, + NR_NFAPI_HARQ_INDICATION, + NR_NFAPI_CRC_INDICATION, + NR_NFAPI_RX_ULSCH_INDICATION, + NR_NFAPI_RACH_INDICATION, + NR_NFAPI_SRS_INDICATION, + NR_NFAPI_RX_SR_INDICATION, + NR_NFAPI_RX_CQI_INDICATION, + NR_NFAPI_LBT_DL_CONFIG_REQUEST, + NR_NFAPI_LBT_DL_INDICATION, + NR_NFAPI_NB_HARQ_INDICATION, + NR_NFAPI_NRACH_INDICATION, + + NR_NFAPI_PNF_PARAM_REQUEST = 0x0100, + NR_NFAPI_PNF_PARAM_RESPONSE, + NR_NFAPI_PNF_CONFIG_REQUEST, + NR_NFAPI_PNF_CONFIG_RESPONSE, + NR_NFAPI_PNF_START_REQUEST, + NR_NFAPI_PNF_START_RESPONSE, + NR_NFAPI_PNF_STOP_REQUEST, + NR_NFAPI_PNF_STOP_RESPONSE, + NR_NFAPI_PARAM_REQUEST, + NR_NFAPI_PARAM_RESPONSE, + NR_NFAPI_CONFIG_REQUEST, + NR_NFAPI_CONFIG_RESPONSE, + NR_NFAPI_START_REQUEST, + NR_NFAPI_START_RESPONSE, + NR_NFAPI_STOP_REQUEST, + NR_NFAPI_STOP_RESPONSE, + NR_NFAPI_MEASUREMENT_REQUEST, + NR_NFAPI_MEASUREMENT_RESPONSE, + + NR_NFAPI_UL_NODE_SYNC = 0x0180, + NR_NFAPI_DL_NODE_SYNC, + NR_NFAPI_TIMING_INFO, + + + NR_NFAPI_RSSI_REQUEST = 0x0200, + NR_NFAPI_RSSI_RESPONSE, + NR_NFAPI_RSSI_INDICATION, + NR_NFAPI_CELL_SEARCH_REQUEST, + NR_NFAPI_CELL_SEARCH_RESPONSE, + NR_NFAPI_CELL_SEARCH_INDICATION, + NR_NFAPI_BROADCAST_DETECT_REQUEST, + NR_NFAPI_BROADCAST_DETECT_RESPONSE, + NR_NFAPI_BROADCAST_DETECT_INDICATION, + NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_REQUEST, + NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_RESPONSE, + NR_NFAPI_SYSTEM_INFORMATION_SCHEDULE_INDICATION, + NR_NFAPI_SYSTEM_INFORMATION_REQUEST, + NR_NFAPI_SYSTEM_INFORMATION_RESPONSE, + NR_NFAPI_SYSTEM_INFORMATION_INDICATION, + NR_NFAPI_NMM_STOP_REQUEST, + NR_NFAPI_NMM_STOP_RESPONSE, + + NR_NFAPI_VENDOR_EXT_MSG_MIN = 0x0300, + NR_NFAPI_VENDOR_EXT_MSG_MAX = 0x03FF, + + + NR_NFAPI_MAX_MESSAGE_ID, +} nr_nfapi_message_id_e; + +// nFAPI Error Codes +typedef enum { + NR_NFAPI_MSG_OK = 0, + NR_NFAPI_MSG_INVALID_STATE, + NR_NFAPI_MSG_INVALID_CONFIG, + NR_NFAPI_SFN_OUT_OF_SYNC, + NR_NFAPI_MSG_SUBFRAME_ERR, + NR_NFAPI_MSG_BCH_MISSING, + NR_NFAPI_MSG_INVALID_SFN, + NR_NFAPI_MSG_HI_ERR, + NR_NFAPI_MSG_TX_ERR, + + NR_NFAPI_LBT_NO_PDU_IN_DL_REQ, + NR_NFAPI_LBT_NO_VALID_CONFIG_REQ_RECEIVED, + NR_NFAPI_FAPI_E_LBT_SF_SFN_PASSED_END_SF_SFN, + NR_NFAPI_FAPI_E_LBT_OVERLAP, + NR_NFAPI_MSG_BCH_PRESENT, + + NR_NFAPI_NBIOT_UNEXPECTED_REQ, + + // This is special return code that indicates that a response has + // been send via P9 + NR_NFAPI_MSG_P9_RESPONSE = 0xAA +} nr_nfapi_error_code_e; + + +typedef enum { + NR_NFAPI_P4_MSG_OK = 100, + NR_NFAPI_P4_MSG_INVALID_STATE = 101, + NR_NFAPI_P4_MSG_INVALID_CONFIG = 102, + NR_NFAPI_P4_MSG_RAT_NOT_SUPPORTED = 103, + NR_NFAPI_P4_MSG_NMM_STOP_OK = 200, + NR_NFAPI_P4_MSG_NMM_STOP_IGNOREDED = 201, + NR_NFAPI_P4_MSG_NMM_STOP_INVALID_STATE = 202, + NR_NFAPI_P4_MSG_PROCEDURE_COMPLETE = 300, + NR_NFAPI_P4_MSG_PROCEDURE_STOPPED = 301, + NR_NFAPI_P4_MSG_PARTIAL_RESULTS = 302, + NR_NFAPI_P4_MSG_TIMEOUT = 303 +} nr_nfapi_p4_error_code_e; + +// nFAPI enums +typedef enum { + NR_NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE = 0, + NR_NFAPI_DL_CONFIG_BCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_MCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_DLSCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_PCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_PRS_PDU_TYPE, + NR_NFAPI_DL_CONFIG_CSI_RS_PDU_TYPE, + NR_NFAPI_DL_CONFIG_EPDCCH_DL_PDU_TYPE, + NR_NFAPI_DL_CONFIG_MPDCCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_NBCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_NPDCCH_PDU_TYPE, + NR_NFAPI_DL_CONFIG_NDLSCH_PDU_TYPE +} nr_nfapi_dl_config_pdu_type_e; + +typedef enum { + NR_NFAPI_DL_DCI_FORMAT_1 = 0, + NR_NFAPI_DL_DCI_FORMAT_1A, + NR_NFAPI_DL_DCI_FORMAT_1B, + NR_NFAPI_DL_DCI_FORMAT_1C, + NR_NFAPI_DL_DCI_FORMAT_1D, + NR_NFAPI_DL_DCI_FORMAT_2, + NR_NFAPI_DL_DCI_FORMAT_2A, + NR_NFAPI_DL_DCI_FORMAT_2B, + NR_NFAPI_DL_DCI_FORMAT_2C +} nr_nfapi_dl_dci_format_e; + +typedef enum { + NR_NFAPI_UL_DCI_FORMAT_0 = 0, + NR_NFAPI_UL_DCI_FORMAT_3, + NR_NFAPI_UL_DCI_FORMAT_3A, + NR_NFAPI_UL_DCI_FORMAT_4 +} nr_nfapi_ul_dci_format_e; + +typedef enum { + NR_NFAPI_UL_CONFIG_ULSCH_PDU_TYPE = 0, + NR_NFAPI_UL_CONFIG_ULSCH_CQI_RI_PDU_TYPE, + NR_NFAPI_UL_CONFIG_ULSCH_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_ULSCH_CQI_HARQ_RI_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_CQI_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_SR_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_SR_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_CQI_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_CQI_SR_PDU_TYPE, + NR_NFAPI_UL_CONFIG_UCI_CQI_SR_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_SRS_PDU_TYPE, + NR_NFAPI_UL_CONFIG_HARQ_BUFFER_PDU_TYPE, + NR_NFAPI_UL_CONFIG_ULSCH_UCI_CSI_PDU_TYPE, + NR_NFAPI_UL_CONFIG_ULSCH_UCI_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_ULSCH_CSI_UCI_HARQ_PDU_TYPE, + NR_NFAPI_UL_CONFIG_NULSCH_PDU_TYPE, + NR_NFAPI_UL_CONFIG_NRACH_PDU_TYPE, +} nr_nfapi_ul_config_pdu_type_e; + +typedef enum { + NR_NFAPI_HI_DCI0_HI_PDU_TYPE = 0, + NR_NFAPI_HI_DCI0_DCI_PDU_TYPE, + NR_NFAPI_HI_DCI0_EPDCCH_DCI_PDU_TYPE, + NR_NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE, + NR_NFAPI_HI_DCI0_NPDCCH_DCI_PDU_TYPE, +} nr_nfapi_hi_dci0_pdu_type_e; + +typedef enum { + NR_NFAPI_HARQ_ACK = 1, + NR_NFAPI_HARQ_NACK, + NR_NFAPI_HARQ_ACK_OR_NACK, + NR_NFAPI_HARQ_DTX, + NR_NFAPI_HARQ_ACK_OR_DTX, + NR_NFAPI_HARQ_NACK_OR_DTX, + NR_NFAPI_HARQ_ACK_OR_NACK_OR_DTX +} nr_nfapi_harq_type_e; + +typedef enum { + NR_NFAPI_CSI_REPORT_TYPE_PERIODIC = 0, + NR_NFAPI_CSI_REPORT_TYPE_APERIODIC +} nr_nfapi_csi_report_type_e; + +typedef enum { + NR_NFAPI_DL_BW_SUPPORTED_6 = 1, + NR_NFAPI_DL_BW_SUPPORTED_15 = 2, + NR_NFAPI_DL_BW_SUPPORTED_25 = 4, + NR_NFAPI_DL_BW_SUPPORTED_50 = 8, + NR_NFAPI_DL_BW_SUPPORTED_75 = 16, + NR_NFAPI_DL_BW_SUPPORTED_100 = 32 +} nr_nfapi_dl_bandwith_supported_e; + +typedef enum { + NR_NFAPI_UL_BW_SUPPORTED_6 = 1, + NR_NFAPI_UL_BW_SUPPORTED_15 = 2, + NR_NFAPI_UL_BW_SUPPORTED_25 = 4, + NR_NFAPI_UL_BW_SUPPORTED_50 = 8, + NR_NFAPI_UL_BW_SUPPORTED_75 = 16, + NR_NFAPI_UL_BW_SUPPORTED_100 = 32 +} nr_nfapi_ul_bandwith_supported_e; + +typedef enum { + NR_NFAPI_3GPP_REL_SUPPORTED_8 = 0, + NR_NFAPI_3GPP_REL_SUPPORTED_9 = 1, + NR_NFAPI_3GPP_REL_SUPPORTED_10 = 2, + NR_NFAPI_3GPP_REL_SUPPORTED_11 = 4, + NR_NFAPI_3GPP_REL_SUPPORTED_12 = 8, + NR_NFAPI_3GPP_REL_SUPPORTED_15 = 64 +} nr_nfapi_3gpp_release_supported_e; + + +typedef enum { + NR_NFAPI_DUPLEXING_MODE_TDD = 0, + NR_NFAPI_DUPLEXING_MODE_FDD = 1, + NR_NFAPI_DUPLEXING_MODE_HD_FDD = 2, +} nr_nfapi_duplexing_mode_e; + +typedef enum { + NR_NFAPI_CP_NORMAL = 0, + NR_NFAPI_CP_EXTENDED = 1 +} nr_nfapi_cyclic_prefix_type_e; + +typedef enum { + NR_NFAPI_RAT_TYPE_LTE = 0, + NR_NFAPI_RAT_TYPE_UTRAN = 1, + NR_NFAPI_RAT_TYPE_GERAN = 2, + NR_NFAPI_RAT_TYPE_NB_IOT = 3, + NR_NFAPI_RAT_TYPE_NR = 4 +} nr_nfapi_rat_type_e; + +typedef enum { + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_BUNDLING, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_MULIPLEXING, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_SPECIAL_BUNDLING, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_CHANNEL_SELECTION, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_3, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_4, + NR_NFAPI_HARQ_INDICATION_TDD_HARQ_ACK_NACK_FORMAT_FORMAT_5 +} nr_nfapi_harq_indication_tdd_ack_nackformat_e; + + +typedef enum { + NR_NFAPI_LBT_DL_CONFIG_REQUEST_PDSCH_PDU_TYPE = 0, + NR_NFAPI_LBT_DL_CONFIG_REQUEST_DRS_PDU_TYPE +} nr_nfapi_lbt_dl_config_pdu_type_e; + +typedef enum { + NR_NFAPI_LBT_DL_RSP_PDSCH_PDU_TYPE = 0, + NR_NFAPI_LBT_DL_RSP_DRS_PDU_TYPE +} nr_nfapi_lbt_dl_rsp_pdu_type_e; + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t length; + uint8_t value[NR_NFAPI_MAX_OPAQUE_DATA]; +} nr_nfapi_opaqaue_data_t; + +// Utility functions to turn enums into char* +const char* nr_nfapi_error_code_to_str(nr_nfapi_error_code_e value); + + +// P5 Sub Structures +typedef struct { + nr_nfapi_tl_t tl; + uint8_t nr_nfapi_sync_mode; + uint8_t location_mode; + uint16_t location_coordinates_length; + uint8_t location_coordinates[NR_NFAPI_PNF_PARAM_GENERAL_LOCATION_LENGTH]; + uint32_t dl_config_timing; + uint32_t tx_timing; + uint32_t ul_config_timing; + uint32_t hi_dci0_timing; + uint16_t maximum_number_phys; + uint16_t maximum_total_bandwidth; + uint8_t maximum_total_number_dl_layers; + uint8_t maximum_total_number_ul_layers; + uint8_t shared_bands; + uint8_t shared_pa; + int16_t maximum_total_power; + uint8_t oui[NR_NFAPI_PNF_PARAM_GENERAL_OUI_LENGTH]; +} nr_nfapi_pnf_param_general_t; +#define NR_NFAPI_PNF_PARAM_GENERAL_TAG 0x1000 + + + + + +typedef struct { + uint16_t rf_config_index; +} nr_nfapi_rf_config_info_t; + +typedef struct { + uint16_t phy_config_index; + uint16_t number_of_rfs; + nr_nfapi_rf_config_info_t rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG]; + uint16_t number_of_rf_exclusions; + nr_nfapi_rf_config_info_t excluded_rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG]; + uint16_t downlink_channel_bandwidth_supported; + uint16_t uplink_channel_bandwidth_supported; + uint8_t number_of_dl_layers_supported; + uint8_t number_of_ul_layers_supported; + uint16_t maximum_3gpp_release_supported; + uint8_t nmm_modes_supported; +} nr_nfapi_pnf_phy_info_t; + + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_t; +#define NR_NFAPI_PNF_PHY_TAG 0x1001 + +typedef struct { + uint16_t phy_config_index; + uint16_t transmission_mode_7_supported; + uint16_t transmission_mode_8_supported; + uint16_t two_antenna_ports_for_pucch; + uint16_t transmission_mode_9_supported; + uint16_t simultaneous_pucch_pusch; + uint16_t four_layer_tx_with_tm3_and_tm4; +} nr_nfapi_pnf_phy_rel10_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel10_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel10_t; +#define NR_NFAPI_PNF_PHY_REL10_TAG 0x100A + +typedef struct { + uint16_t phy_config_index; + uint16_t edpcch_supported; + uint16_t multi_ack_csi_reporting; + uint16_t pucch_tx_diversity; + uint16_t ul_comp_supported; + uint16_t transmission_mode_5_supported; +} nr_nfapi_pnf_phy_rel11_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel11_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel11_t; +#define NR_NFAPI_PNF_PHY_REL11_TAG 0x100B + + +typedef struct { + uint16_t phy_config_index; + uint16_t csi_subframe_set; + uint16_t enhanced_4tx_codebook; + uint16_t drs_supported; + uint16_t ul_64qam_supported; + uint16_t transmission_mode_10_supported; + uint16_t alternative_bts_indices; +} nr_nfapi_pnf_phy_rel12_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel12_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel12_t; +#define NR_NFAPI_PNF_PHY_REL12_TAG 0x100C + +typedef struct { + uint16_t phy_config_index; + uint16_t pucch_format4_supported; + uint16_t pucch_format5_supported; + uint16_t more_than_5_ca_support; + uint16_t laa_supported; + uint16_t laa_ending_in_dwpts_supported; + uint16_t laa_starting_in_second_slot_supported; + uint16_t beamforming_supported; + uint16_t csi_rs_enhancement_supported; + uint16_t drms_enhancement_supported; + uint16_t srs_enhancement_supported; +} nr_nfapi_pnf_phy_rel13_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel13_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel13_t; +#define NR_NFAPI_PNF_PHY_REL13_TAG 0x100D + +typedef struct { + uint16_t phy_config_index; + uint16_t number_of_rfs; + nr_nfapi_rf_config_info_t rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG]; + uint16_t number_of_rf_exclusions; + nr_nfapi_rf_config_info_t excluded_rf_config[NR_NFAPI_MAX_PNF_PHY_RF_CONFIG]; + uint8_t number_of_dl_layers_supported; + uint8_t number_of_ul_layers_supported; + uint16_t maximum_3gpp_release_supported; + uint8_t nmm_modes_supported; +} nr_nfapi_pnf_phy_rel13_nb_iot_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel13_nb_iot_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel13_nb_iot_t; +#define NR_NFAPI_PNF_PHY_REL13_NB_IOT_TAG 0x100E + +typedef struct { + uint16_t phy_config_index; +} nr_nfapi_pnf_phy_rel15_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_phys; + nr_nfapi_pnf_phy_rel15_info_t phy[NR_NFAPI_MAX_PNF_PHY]; +} nr_nfapi_pnf_phy_rel15_t; +#define NR_NFAPI_PNF_PHY_REL15_TAG 0x100H + + +typedef struct { + uint16_t rf_config_index; + uint16_t band; + int16_t maximum_transmit_power; + int16_t minimum_transmit_power; + uint8_t number_of_antennas_suppported; + uint32_t minimum_downlink_frequency; + uint32_t maximum_downlink_frequency; + uint32_t minimum_uplink_frequency; + uint32_t maximum_uplink_frequency; +} nr_nfapi_pnf_rf_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_rfs; + nr_nfapi_pnf_rf_info_t rf[NR_NFAPI_MAX_PNF_RF]; +} nr_nfapi_pnf_rf_t; +#define NR_NFAPI_PNF_RF_TAG 0x1002 + +typedef struct { + uint16_t phy_id; + uint16_t phy_config_index; + uint16_t rf_config_index; +} nr_nfapi_phy_rf_config_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_phy_rf_config_info; + nr_nfapi_phy_rf_config_info_t phy_rf_config[NR_NFAPI_MAX_PHY_RF_INSTANCES]; +} nr_nfapi_pnf_phy_rf_config_t; +#define NR_NFAPI_PNF_PHY_RF_TAG 0x1003 + +// Generic strucutre for single tlv value. +typedef struct { + nr_nfapi_tl_t tl; + uint16_t value; +} nr_nfapi_uint16_tlv_t; + +typedef struct { + nr_nfapi_tl_t tl; + int16_t value; +} nr_nfapi_int16_tlv_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t value; +} nr_nfapi_uint8_tlv_t; + +typedef struct { + nr_nfapi_uint16_tlv_t phy_state; +} nr_nfapi_l1_status; + +#define NR_NFAPI_L1_STATUS_PHY_STATE_TAG 0x00FA + +typedef struct { + nr_nfapi_uint16_tlv_t dl_bandwidth_support; + nr_nfapi_uint16_tlv_t ul_bandwidth_support; + nr_nfapi_uint16_tlv_t dl_modulation_support; + nr_nfapi_uint16_tlv_t ul_modulation_support; + nr_nfapi_uint16_tlv_t phy_antenna_capability; + nr_nfapi_uint16_tlv_t release_capability; + nr_nfapi_uint16_tlv_t mbsfn_capability; +} nr_nfapi_phy_capabilities_t; + +#define NR_NFAPI_PHY_CAPABILITIES_DL_BANDWIDTH_SUPPORT_TAG 0x00C8 +#define NR_NFAPI_PHY_CAPABILITIES_UL_BANDWIDTH_SUPPORT_TAG 0x00C9 +#define NR_NFAPI_PHY_CAPABILITIES_DL_MODULATION_SUPPORT_TAG 0x00CA +#define NR_NFAPI_PHY_CAPABILITIES_UL_MODULATION_SUPPORT_TAG 0x00CB +#define NR_NFAPI_PHY_CAPABILITIES_PHY_ANTENNA_CAPABILITY_TAG 0x00CC +#define NR_NFAPI_PHY_CAPABILITIES_RELEASE_CAPABILITY_TAG 0x00CD +#define NR_NFAPI_PHY_CAPABILITIES_MBSFN_CAPABILITY_TAG 0x00CE + + +typedef struct { + nr_nfapi_uint16_tlv_t data_report_mode; + nr_nfapi_uint16_tlv_t sfnsf; +} nr_nfapi_l23_config_t; + + +#define NR_NFAPI_L23_CONFIG_DATA_REPORT_MODE_TAG 0x00F0 +#define NR_NFAPI_L23_CONFIG_SFNSF_TAG 0x00F1 + +typedef struct { + nr_nfapi_uint16_tlv_t numerology_index_mu; + nr_nfapi_uint16_tlv_t duplex_mode; + nr_nfapi_uint16_tlv_t pcfich_power_offset; + nr_nfapi_uint16_tlv_t pb; + nr_nfapi_uint16_tlv_t dl_cyclic_prefix_type; + nr_nfapi_uint16_tlv_t ul_cyclic_prefix_type; +} nr_nfapi_subframe_config_t; + +#define NR_NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG 0x0001 +#define NR_NFAPI_SUBFRAME_CONFIG_PCFICH_POWER_OFFSET_TAG 0x0002 +#define NR_NFAPI_SUBFRAME_CONFIG_PB_TAG 0x0003 +#define NR_NFAPI_SUBFRAME_CONFIG_DL_CYCLIC_PREFIX_TYPE_TAG 0x0004 +#define NR_NFAPI_SUBFRAME_CONFIG_UL_CYCLIC_PREFIX_TYPE_TAG 0x0005 +#define NR_NFAPI_SUBFRAME_CONFIG_NUMEROLOGY_INDEX_MU_TAG 0x0006 + +typedef struct { + nr_nfapi_uint16_tlv_t dl_channel_bandwidth; + nr_nfapi_uint16_tlv_t ul_channel_bandwidth; + nr_nfapi_uint16_tlv_t reference_signal_power; + nr_nfapi_uint16_tlv_t tx_antenna_ports; + nr_nfapi_uint16_tlv_t rx_antenna_ports; +} nr_nfapi_rf_config_t; + +#define NR_NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG 0x000A +#define NR_NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG 0x000B +#define NR_NFAPI_RF_CONFIG_REFERENCE_SIGNAL_POWER_TAG 0x000C +#define NR_NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG 0x000D +#define NR_NFAPI_RF_CONFIG_RX_ANTENNA_PORTS_TAG 0x000E + +typedef struct { + nr_nfapi_uint16_tlv_t phich_resource; + nr_nfapi_uint16_tlv_t phich_duration; + nr_nfapi_uint16_tlv_t phich_power_offset; +} nr_nfapi_phich_config_t; + +#define NR_NFAPI_PHICH_CONFIG_PHICH_RESOURCE_TAG 0x0014 +#define NR_NFAPI_PHICH_CONFIG_PHICH_DURATION_TAG 0x0015 +#define NR_NFAPI_PHICH_CONFIG_PHICH_POWER_OFFSET_TAG 0x0016 + + +typedef struct { + nr_nfapi_uint16_tlv_t primary_synchronization_signal_epre_eprers; + nr_nfapi_uint16_tlv_t secondary_synchronization_signal_epre_eprers; + nr_nfapi_uint16_tlv_t physical_cell_id; + nr_nfapi_uint16_tlv_t half_frame_index; + nr_nfapi_uint16_tlv_t ssb_subcarrier_offset; + nr_nfapi_uint16_tlv_t ssb_position_in_burst; + nr_nfapi_uint16_tlv_t ssb_periodicity; + nr_nfapi_uint16_tlv_t ss_pbch_block_power; + nr_nfapi_uint16_tlv_t n_ssb_crb; +} nr_nfapi_sch_config_t; + +#define NR_NFAPI_SCH_CONFIG_PRIMARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001E +#define NR_NFAPI_SCH_CONFIG_SECONDARY_SYNCHRONIZATION_SIGNAL_EPRE_EPRERS_TAG 0x001F +#define NR_NFAPI_SCH_CONFIG_PHYSICAL_CELL_ID_TAG 0x0020 +#define NR_NFAPI_SCH_CONFIG_HALF_FRAME_INDEX_TAG 0x0021 +#define NR_NFAPI_SCH_CONFIG_SSB_SUBCARRIER_OFFSET_TAG 0x0022 +#define NR_NFAPI_SCH_CONFIG_SSB_POSITION_IN_BURST 0x0023 +#define NR_NFAPI_SCH_CONFIG_SSB_PERIODICITY 0x0024 +#define NR_NFAPI_SCH_CONFIG_SS_PBCH_BLOCK_POWER 0x0025 +#define NR_NFAPI_SCH_CONFIG_N_SSB_CRB 0x0025 + +typedef struct { + nr_nfapi_uint16_tlv_t configuration_index; + nr_nfapi_uint16_tlv_t root_sequence_index; + nr_nfapi_uint16_tlv_t zero_correlation_zone_configuration; + nr_nfapi_uint16_tlv_t high_speed_flag; + nr_nfapi_uint16_tlv_t frequency_offset; +} nr_nfapi_prach_config_t; + +#define NR_NFAPI_PRACH_CONFIG_CONFIGURATION_INDEX_TAG 0x0028 +#define NR_NFAPI_PRACH_CONFIG_ROOT_SEQUENCE_INDEX_TAG 0x0029 +#define NR_NFAPI_PRACH_CONFIG_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x002A +#define NR_NFAPI_PRACH_CONFIG_HIGH_SPEED_FLAG_TAG 0x002B +#define NR_NFAPI_PRACH_CONFIG_FREQUENCY_OFFSET_TAG 0x002C + +typedef struct { + nr_nfapi_uint16_tlv_t hopping_mode; + nr_nfapi_uint16_tlv_t hopping_offset; + nr_nfapi_uint16_tlv_t number_of_subbands; +} nr_nfapi_pusch_config_t; + +#define NR_NFAPI_PUSCH_CONFIG_HOPPING_MODE_TAG 0x0032 +#define NR_NFAPI_PUSCH_CONFIG_HOPPING_OFFSET_TAG 0x0033 +#define NR_NFAPI_PUSCH_CONFIG_NUMBER_OF_SUBBANDS_TAG 0x0034 + +typedef struct { + nr_nfapi_uint16_tlv_t delta_pucch_shift; + nr_nfapi_uint16_tlv_t n_cqi_rb; + nr_nfapi_uint16_tlv_t n_an_cs; + nr_nfapi_uint16_tlv_t n1_pucch_an; +} nr_nfapi_pucch_config_t; + +#define NR_NFAPI_PUCCH_CONFIG_DELTA_PUCCH_SHIFT_TAG 0x003C +#define NR_NFAPI_PUCCH_CONFIG_N_CQI_RB_TAG 0x003D +#define NR_NFAPI_PUCCH_CONFIG_N_AN_CS_TAG 0x003E +#define NR_NFAPI_PUCCH_CONFIG_N1_PUCCH_AN_TAG 0x003F + +typedef struct { + nr_nfapi_uint16_tlv_t bandwidth_configuration; + nr_nfapi_uint16_tlv_t max_up_pts; + nr_nfapi_uint16_tlv_t srs_subframe_configuration; + nr_nfapi_uint16_tlv_t srs_acknack_srs_simultaneous_transmission; +} nr_nfapi_srs_config_t; + +#define NR_NFAPI_SRS_CONFIG_BANDWIDTH_CONFIGURATION_TAG 0x0046 +#define NR_NFAPI_SRS_CONFIG_MAX_UP_PTS_TAG 0x0047 +#define NR_NFAPI_SRS_CONFIG_SRS_SUBFRAME_CONFIGURATION_TAG 0x0048 +#define NR_NFAPI_SRS_CONFIG_SRS_ACKNACK_SRS_SIMULTANEOUS_TRANSMISSION_TAG 0x0049 + +typedef struct { + nr_nfapi_uint16_tlv_t uplink_rs_hopping; + nr_nfapi_uint16_tlv_t group_assignment; + nr_nfapi_uint16_tlv_t cyclic_shift_1_for_drms; +} nr_nfapi_uplink_reference_signal_config_t; + +#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_UPLINK_RS_HOPPING_TAG 0x0050 +#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_GROUP_ASSIGNMENT_TAG 0x0051 +#define NR_NFAPI_UPLINK_REFERENCE_SIGNAL_CONFIG_CYCLIC_SHIFT_1_FOR_DRMS_TAG 0x0052 + + +typedef struct { + nr_nfapi_uint16_tlv_t ed_threshold_lbt_pdsch; + nr_nfapi_uint16_tlv_t ed_threshold_lbt_drs; + nr_nfapi_uint16_tlv_t pd_threshold; + nr_nfapi_uint16_tlv_t multi_carrier_type; + nr_nfapi_uint16_tlv_t multi_carrier_tx; + nr_nfapi_uint16_tlv_t multi_carrier_freeze; + nr_nfapi_uint16_tlv_t tx_antenna_ports_drs; + nr_nfapi_uint16_tlv_t tx_power_drs; +} nr_nfapi_laa_config_t; + +#define NR_NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_PDSCH_TAG 0x0064 +#define NR_NFAPI_LAA_CONFIG_ED_THRESHOLD_FOR_LBT_FOR_DRS_TAG 0x0065 +#define NR_NFAPI_LAA_CONFIG_PD_THRESHOLD_TAG 0x0066 +#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_TYPE_TAG 0x0067 +#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_TX_TAG 0x0068 +#define NR_NFAPI_LAA_CONFIG_MULTI_CARRIER_FREEZE_TAG 0x0069 +#define NR_NFAPI_LAA_CONFIG_TX_ANTENNA_PORTS_FOR_DRS_TAG 0x006A +#define NR_NFAPI_LAA_CONFIG_TRANSMISSION_POWER_FOR_DRS_TAG 0x006B + +typedef struct { + + nr_nfapi_uint16_tlv_t pbch_repetitions_enable_r13; + nr_nfapi_uint16_tlv_t prach_catm_root_sequence_index; + nr_nfapi_uint16_tlv_t prach_catm_zero_correlation_zone_configuration; + nr_nfapi_uint16_tlv_t prach_catm_high_speed_flag; + nr_nfapi_uint16_tlv_t prach_ce_level_0_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_0_configuration_index; + nr_nfapi_uint16_tlv_t prach_ce_level_0_frequency_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_0_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t prach_ce_level_0_starting_subframe_periodicity; + nr_nfapi_uint16_tlv_t prach_ce_level_0_hopping_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_0_hopping_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_1_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_1_configuration_index; + nr_nfapi_uint16_tlv_t prach_ce_level_1_frequency_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_1_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t prach_ce_level_1_starting_subframe_periodicity; + nr_nfapi_uint16_tlv_t prach_ce_level_1_hopping_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_1_hopping_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_2_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_2_configuration_index; + nr_nfapi_uint16_tlv_t prach_ce_level_2_frequency_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_2_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t prach_ce_level_2_starting_subframe_periodicity; + nr_nfapi_uint16_tlv_t prach_ce_level_2_hopping_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_2_hopping_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_3_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_3_configuration_index; + nr_nfapi_uint16_tlv_t prach_ce_level_3_frequency_offset; + nr_nfapi_uint16_tlv_t prach_ce_level_3_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t prach_ce_level_3_starting_subframe_periodicity; + nr_nfapi_uint16_tlv_t prach_ce_level_3_hopping_enable; + nr_nfapi_uint16_tlv_t prach_ce_level_3_hopping_offset; + nr_nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodea; + nr_nfapi_uint16_tlv_t pucch_interval_ulhoppingconfigcommonmodeb; +} nr_nfapi_emtc_config_t; + +#define NR_NFAPI_EMTC_CONFIG_PBCH_REPETITIONS_ENABLE_R13_TAG 0x0078 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_ROOT_SEQUENCE_INDEX_TAG 0x0079 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_ZERO_CORRELATION_ZONE_CONFIGURATION_TAG 0x007A +#define NR_NFAPI_EMTC_CONFIG_PRACH_CATM_HIGH_SPEED_FLAG 0x007B +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_ENABLE_TAG 0x007C +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_CONFIGURATION_INDEX_TAG 0x007D +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_FREQUENCY_OFFSET_TAG 0x007E +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x007F +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_STARTING_SUBFRAME_PERIODICITY_TAG 0x0080 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_ENABLE_TAG 0x0081 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_0_HOPPING_OFFSET_TAG 0x0082 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_ENABLE_TAG 0x0083 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_CONFIGURATION_INDEX_TAG 0x0084 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_FREQUENCY_OFFSET_TAG 0x0085 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0086 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_STARTING_SUBFRAME_PERIODICITY_TAG 0x0087 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_ENABLE_TAG 0x0088 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_1_HOPPING_OFFSET_TAG 0x0089 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_ENABLE_TAG 0x008A +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_CONFIGURATION_INDEX_TAG 0x008B +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_FREQUENCY_OFFSET_TAG 0x008C +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x008D +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_STARTING_SUBFRAME_PERIODICITY_TAG 0x008E +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_ENABLE_TAG 0x008F +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_2_HOPPING_OFFSET_TAG 0x0090 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_ENABLE_TAG 0x0091 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_CONFIGURATION_INDEX_TAG 0x0092 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_FREQUENCY_OFFSET_TAG 0x0093 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x0094 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_STARTING_SUBFRAME_PERIODICITY_TAG 0x0095 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_ENABLE_TAG 0x0096 +#define NR_NFAPI_EMTC_CONFIG_PRACH_CE_LEVEL_3_HOPPING_OFFSET_TAG 0x0097 +#define NR_NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEA_TAG 0x0098 +#define NR_NFAPI_EMTC_CONFIG_PUCCH_INTERVAL_ULHOPPINGCONFIGCOMMONMODEB_TAG 0x0099 + +typedef struct { + nr_nfapi_uint16_tlv_t operating_mode; + nr_nfapi_uint16_tlv_t anchor; + nr_nfapi_uint16_tlv_t prb_index; + nr_nfapi_uint16_tlv_t control_region_size; + nr_nfapi_uint16_tlv_t assumed_crs_aps; + nr_nfapi_uint16_tlv_t nprach_config_0_enabled; + nr_nfapi_uint16_tlv_t nprach_config_0_sf_periodicity; + nr_nfapi_uint16_tlv_t nprach_config_0_start_time; + nr_nfapi_uint16_tlv_t nprach_config_0_subcarrier_offset; + nr_nfapi_uint16_tlv_t nprach_config_0_number_of_subcarriers; + nr_nfapi_uint16_tlv_t nprach_config_0_cp_length; + nr_nfapi_uint16_tlv_t nprach_config_0_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t nprach_config_1_enabled; + nr_nfapi_uint16_tlv_t nprach_config_1_sf_periodicity; + nr_nfapi_uint16_tlv_t nprach_config_1_start_time; + nr_nfapi_uint16_tlv_t nprach_config_1_subcarrier_offset; + nr_nfapi_uint16_tlv_t nprach_config_1_number_of_subcarriers; + nr_nfapi_uint16_tlv_t nprach_config_1_cp_length; + nr_nfapi_uint16_tlv_t nprach_config_1_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t nprach_config_2_enabled; + nr_nfapi_uint16_tlv_t nprach_config_2_sf_periodicity; + nr_nfapi_uint16_tlv_t nprach_config_2_start_time; + nr_nfapi_uint16_tlv_t nprach_config_2_subcarrier_offset; + nr_nfapi_uint16_tlv_t nprach_config_2_number_of_subcarriers; + nr_nfapi_uint16_tlv_t nprach_config_2_cp_length; + nr_nfapi_uint16_tlv_t nprach_config_2_number_of_repetitions_per_attempt; + nr_nfapi_uint16_tlv_t three_tone_base_sequence; + nr_nfapi_uint16_tlv_t six_tone_base_sequence; + nr_nfapi_uint16_tlv_t twelve_tone_base_sequence; + nr_nfapi_uint16_tlv_t three_tone_cyclic_shift; + nr_nfapi_uint16_tlv_t six_tone_cyclic_shift; + nr_nfapi_uint16_tlv_t dl_gap_config_enable; + nr_nfapi_uint16_tlv_t dl_gap_threshold; + nr_nfapi_uint16_tlv_t dl_gap_periodicity; + nr_nfapi_uint16_tlv_t dl_gap_duration_coefficient; +} nr_nfapi_nb_iot_config_t; + +#define NR_NFAPI_NB_IOT_CONFIG_OPERATING_MODE_TAG 0x00A5 +#define NR_NFAPI_NB_IOT_CONFIG_ANCHOR_TAG 0x00A6 +#define NR_NFAPI_NB_IOT_CONFIG_PRB_INDEX_TAG 0x00A7 +#define NR_NFAPI_NB_IOT_CONFIG_CONTROL_REGION_SIZE_TAG 0x00A8 +#define NR_NFAPI_NB_IOT_CONFIG_ASSUMED_CRS_APS_TAG 0x00A9 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_ENABLED_TAG 0x00AA +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SF_PERIODICITY_TAG 0x00AB +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_START_TIME_TAG 0x00AC +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_SUBCARRIER_OFFSET_TAG 0x00AD +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_SUBCARRIERS_TAG 0x00AE +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_CP_LENGTH_TAG 0x00AF +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_0_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B0 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_ENABLED_TAG 0x00B1 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SF_PERIODICITY_TAG 0x00B2 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_START_TIME_TAG 0x00B3 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_SUBCARRIER_OFFSET_TAG 0x00B4 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_SUBCARRIERS_TAG 0x00B5 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_CP_LENGTH_TAG 0x00B6 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_1_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00B7 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_ENABLED_TAG 0x00B8 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SF_PERIODICITY_TAG 0x00B9 +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_START_TIME_TAG 0x00BA +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_SUBCARRIER_OFFSET_TAG 0x00BB +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_SUBCARRIERS_TAG 0x00BC +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_CP_LENGTH_TAG 0x00BD +#define NR_NFAPI_NB_IOT_CONFIG_NPRACH_CONFIG_2_NUMBER_OF_REPETITIONS_PER_ATTEMPT_TAG 0x00BE +#define NR_NFAPI_NB_IOT_CONFIG_THREE_TONE_BASE_SEQUENCE_TAG 0x00BF +#define NR_NFAPI_NB_IOT_CONFIG_SIX_TONE_BASE_SEQUENCE_TAG 0x00C0 +#define NR_NFAPI_NB_IOT_CONFIG_TWELVE_TONE_BASE_SEQUENCE_TAG 0x00C1 +#define NR_NFAPI_NB_IOT_CONFIG_THREE_TONE_CYCLIC_SHIFT_TAG 0x00C2 +#define NR_NFAPI_NB_IOT_CONFIG_SIX_TONE_CYCLIC_SHIFT_TAG 0x00C3 +#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_CONFIG_ENABLE_TAG 0x00C4 +#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_THRESHOLD_TAG 0x00C5 +#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_PERIODICITY_TAG 0x00C6 +#define NR_NFAPI_NB_IOT_CONFIG_DL_GAP_DURATION_COEFFICIENT_TAG 0x00C7 + +typedef struct { + nr_nfapi_uint16_tlv_t laa_support; + nr_nfapi_uint16_tlv_t pd_sensing_lbt_support; + nr_nfapi_uint16_tlv_t multi_carrier_lbt_support; + nr_nfapi_uint16_tlv_t partial_sf_support; +} nr_nfapi_laa_capability_t; + +#define NR_NFAPI_LAA_CAPABILITY_LAA_SUPPORT_TAG 0x00D1 +#define NR_NFAPI_LAA_CAPABILITY_PD_SENSING_LBT_SUPPORT_TAG 0x00D2 +#define NR_NFAPI_LAA_CAPABILITY_MULTI_CARRIER_LBT_SUPPORT_TAG 0x00D3 +#define NR_NFAPI_LAA_CAPABILITY_PARTIAL_SF_SUPPORT_TAG 0x00D4 + +typedef struct { + nr_nfapi_uint16_tlv_t nb_iot_support; + nr_nfapi_uint16_tlv_t nb_iot_operating_mode_capability; +} nr_nfapi_nb_iot_capability_t; + +#define NR_NFAPI_LAA_CAPABILITY_NB_IOT_SUPPORT_TAG 0x00D5 +#define NR_NFAPI_LAA_CAPABILITY_NB_IOT_OPERATING_MODE_CAPABILITY_TAG 0x00D6 + +typedef struct { + nr_nfapi_uint16_tlv_t subframe_assignment; + nr_nfapi_uint16_tlv_t special_subframe_patterns; +} nr_nfapi_tdd_frame_structure_t; + +#define NR_NFAPI_TDD_FRAME_STRUCTURE_SUBFRAME_ASSIGNMENT_TAG 0x005A +#define NR_NFAPI_TDD_FRAME_STRUCTURE_SPECIAL_SUBFRAME_PATTERNS_TAG 0x005B + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_rf_bands; + uint16_t rf_band[NR_NFAPI_MAX_NUM_RF_BANDS]; +} nr_nfapi_rf_bands_t; +#define NR_NFAPI_PHY_RF_BANDS_TAG 0x0114 + +#define NR_NFAPI_IPV4_ADDRESS_LENGTH 4 +#define NR_NFAPI_IPV6_ADDRESS_LENGTH 16 + +// Convience enum to allow the ip addres type to be distinguished +typedef enum { + NR_NFAPI_IP_ADDRESS_IPV4 = 0, + NR_NFAPI_IP_ADDRESS_IPV6 +} nr_nfapi_ip_address_type_e; + +// The type could be infered from the length, but it is clearer in +// code to have a type variable set +typedef struct { + nr_nfapi_tl_t tl; + uint8_t type; + union { + uint8_t ipv4_address[NR_NFAPI_IPV4_ADDRESS_LENGTH]; + uint8_t ipv6_address[NR_NFAPI_IPV6_ADDRESS_LENGTH]; + } u; +} nr_nfapi_ip_address_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t address[NR_NFAPI_IPV4_ADDRESS_LENGTH]; +} nr_nfapi_ipv4_address_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t address[NR_NFAPI_IPV6_ADDRESS_LENGTH]; +} nr_nfapi_ipv6_address_t; + + + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_rf_bands; + uint16_t bands[NR_NFAPI_MAX_NMM_FREQUENCY_BANDS]; +} nr_nfapi_nmm_frequency_bands_t; + +//These TLVs are used exclusively by nFAPI +typedef struct +{ + // These TLVs are used to setup the transport connection between VNF and PNF + nr_nfapi_ipv4_address_t p7_vnf_address_ipv4; + nr_nfapi_ipv6_address_t p7_vnf_address_ipv6; + nr_nfapi_uint16_tlv_t p7_vnf_port; + + nr_nfapi_ipv4_address_t p7_pnf_address_ipv4; + nr_nfapi_ipv6_address_t p7_pnf_address_ipv6; + nr_nfapi_uint16_tlv_t p7_pnf_port; + + // These TLVs are used to setup the transport connection between VNF and PNF + nr_nfapi_uint8_tlv_t dl_ue_per_sf; + nr_nfapi_uint8_tlv_t ul_ue_per_sf; + + // These TLVs are used by PNF to report its RF capabilities to the VNF software + nr_nfapi_rf_bands_t rf_bands; + + // These TLVs are used by the VNF to configure the synchronization with the PNF. + nr_nfapi_uint8_tlv_t timing_window; + nr_nfapi_uint8_tlv_t timing_info_mode; + nr_nfapi_uint8_tlv_t timing_info_period; + + // These TLVs are used by the VNF to configure the RF in the PNF + nr_nfapi_uint16_tlv_t max_transmit_power; + nr_nfapi_uint16_tlv_t earfcn; + + nr_nfapi_nmm_frequency_bands_t nmm_gsm_frequency_bands; + nr_nfapi_nmm_frequency_bands_t nmm_umts_frequency_bands; + nr_nfapi_nmm_frequency_bands_t nmm_lte_frequency_bands; + nr_nfapi_uint8_tlv_t nmm_uplink_rssi_supported; + +} nr_nfapi_nfapi_t; + +#define NR_NFAPI_NFAPI_P7_VNF_ADDRESS_IPV4_TAG 0x0100 +#define NR_NFAPI_NFAPI_P7_VNF_ADDRESS_IPV6_TAG 0x0101 +#define NR_NFAPI_NFAPI_P7_VNF_PORT_TAG 0x0102 +#define NR_NFAPI_NFAPI_P7_PNF_ADDRESS_IPV4_TAG 0x0103 +#define NR_NFAPI_NFAPI_P7_PNF_ADDRESS_IPV6_TAG 0x0104 +#define NR_NFAPI_NFAPI_P7_PNF_PORT_TAG 0x0105 + +#define NR_NFAPI_NFAPI_DOWNLINK_UES_PER_SUBFRAME_TAG 0x010A +#define NR_NFAPI_NFAPI_UPLINK_UES_PER_SUBFRAME_TAG 0x010B +#define NR_NFAPI_NFAPI_RF_BANDS_TAG 0x0114 +#define NR_NFAPI_NFAPI_TIMING_WINDOW_TAG 0x011E +#define NR_NFAPI_NFAPI_TIMING_INFO_MODE_TAG 0x011F +#define NR_NFAPI_NFAPI_TIMING_INFO_PERIOD_TAG 0x0120 +#define NR_NFAPI_NFAPI_MAXIMUM_TRANSMIT_POWER_TAG 0x0128 +#define NR_NFAPI_NFAPI_EARFCN_TAG 0x0129 +#define NR_NFAPI_NFAPI_NMM_GSM_FREQUENCY_BANDS_TAG 0x0130 +#define NR_NFAPI_NFAPI_NMM_UMTS_FREQUENCY_BANDS_TAG 0x0131 +#define NR_NFAPI_NFAPI_NMM_LTE_FREQUENCY_BANDS_TAG 0x0132 +#define NR_NFAPI_NFAPI_NMM_UPLINK_RSSI_SUPPORTED_TAG 0x0133 + + +// P5 Message Structures +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_param_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_pnf_param_general_t pnf_param_general; + nr_nfapi_pnf_phy_t pnf_phy; + nr_nfapi_pnf_rf_t pnf_rf; + nr_nfapi_pnf_phy_rel10_t pnf_phy_rel10; + nr_nfapi_pnf_phy_rel11_t pnf_phy_rel11; + nr_nfapi_pnf_phy_rel12_t pnf_phy_rel12; + nr_nfapi_pnf_phy_rel13_t pnf_phy_rel13; + nr_nfapi_pnf_phy_rel13_nb_iot_t pnf_phy_rel13_nb_iot; + nr_nfapi_pnf_phy_rel15_t pnf_phy_rel15; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_param_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_pnf_phy_rf_config_t pnf_phy_rf_config; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_config_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_config_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_start_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_start_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_stop_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_pnf_stop_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_param_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t error_code; + uint8_t num_tlv; + // fdd or tdd in idle or configured tlvs + nr_nfapi_l1_status l1_status; + nr_nfapi_phy_capabilities_t phy_capabilities; + nr_nfapi_laa_capability_t laa_capability; + nr_nfapi_nb_iot_capability_t nb_iot_capability; + + nr_nfapi_subframe_config_t subframe_config; + nr_nfapi_rf_config_t rf_config; + nr_nfapi_phich_config_t phich_config; + nr_nfapi_sch_config_t sch_config; + nr_nfapi_prach_config_t prach_config; + nr_nfapi_pusch_config_t pusch_config; + nr_nfapi_pucch_config_t pucch_config; + nr_nfapi_srs_config_t srs_config; + nr_nfapi_uplink_reference_signal_config_t uplink_reference_signal_config; + nr_nfapi_tdd_frame_structure_t tdd_frame_structure_config; + nr_nfapi_l23_config_t l23_config; + nr_nfapi_nb_iot_config_t nb_iot_config; + + // addition nfapi tlvs as per table 2-16 in idle or configure + nr_nfapi_nfapi_t nr_nfapi_config; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_param_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t num_tlv; + nr_nfapi_subframe_config_t subframe_config; + nr_nfapi_rf_config_t rf_config; + nr_nfapi_phich_config_t phich_config; + nr_nfapi_sch_config_t sch_config; + nr_nfapi_prach_config_t prach_config; + nr_nfapi_pusch_config_t pusch_config; + nr_nfapi_pucch_config_t pucch_config; + nr_nfapi_srs_config_t srs_config; + nr_nfapi_uplink_reference_signal_config_t uplink_reference_signal_config; + nr_nfapi_laa_config_t laa_config; + nr_nfapi_emtc_config_t emtc_config; + nr_nfapi_tdd_frame_structure_t tdd_frame_structure_config; + nr_nfapi_l23_config_t l23_config; + nr_nfapi_nb_iot_config_t nb_iot_config; + + // addition nfapi tlvs as per table 2-16 in idle or configure + nr_nfapi_nfapi_t nr_nfapi_config; + + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_config_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_config_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_start_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_start_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_stop_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_stop_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_uint16_tlv_t dl_rs_tx_power; + nr_nfapi_uint16_tlv_t received_interference_power; + nr_nfapi_uint16_tlv_t thermal_noise_power; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_measurement_request_t; + +#define NR_NFAPI_MEASUREMENT_REQUEST_DL_RS_XTX_POWER_TAG 0x1004 +#define NR_NFAPI_MEASUREMENT_REQUEST_RECEIVED_INTERFERENCE_POWER_TAG 0x1005 +#define NR_NFAPI_MEASUREMENT_REQUEST_THERMAL_NOISE_POWER_TAG 0x1006 + + + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_resource_blocks; + int16_t received_interference_power[NR_NFAPI_MAX_RECEIVED_INTERFERENCE_POWER_RESULTS]; +} nr_nfapi_received_interference_power_measurement_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_int16_tlv_t dl_rs_tx_power_measurement; + nr_nfapi_received_interference_power_measurement_t received_interference_power_measurement; + nr_nfapi_int16_tlv_t thermal_noise_power_measurement; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_measurement_response_t; + +#define NR_NFAPI_MEASUREMENT_RESPONSE_DL_RS_POWER_MEASUREMENT_TAG 0x1007 +#define NR_NFAPI_MEASUREMENT_RESPONSE_RECEIVED_INTERFERENCE_POWER_MEASUREMENT_TAG 0x1008 +#define NR_NFAPI_MEASUREMENT_RESPONSE_THERMAL_NOISE_MEASUREMENT_TAG 0x1009 + +// P7 Sub Structures +typedef struct { + nr_nfapi_tl_t tl; + uint8_t dci_format; + uint8_t cce_idx; + uint8_t aggregation_level; + uint16_t rnti; + uint8_t resource_allocation_type; + uint8_t virtual_resource_block_assignment_flag; + uint32_t resource_block_coding; + uint8_t mcs_1; + uint8_t redundancy_version_1; + uint8_t new_data_indicator_1; + uint8_t transport_block_to_codeword_swap_flag; + uint8_t mcs_2; + uint8_t redundancy_version_2; + uint8_t new_data_indicator_2; + uint8_t harq_process; + uint8_t tpmi; + uint8_t pmi; + uint8_t precoding_information; + uint8_t tpc; + uint8_t downlink_assignment_index; + uint8_t ngap; + uint8_t transport_block_size_index; + uint8_t downlink_power_offset; + uint8_t allocate_prach_flag; + uint8_t preamble_index; + uint8_t prach_mask_index; + uint8_t rnti_type; + uint16_t transmission_power; +} nr_nfapi_dl_config_dci_dl_pdu_rel8_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG 0x2001 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mcch_flag; + uint8_t mcch_change_notification; + uint8_t scrambling_identity; +} nr_nfapi_dl_config_dci_dl_pdu_rel9_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL9_TAG 0x2002 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t cross_carrier_scheduling_flag; + uint8_t carrier_indicator; + uint8_t srs_flag; + uint8_t srs_request; + uint8_t antenna_ports_scrambling_and_layers; + uint8_t total_dci_length_including_padding; + uint8_t n_dl_rb; +} nr_nfapi_dl_config_dci_dl_pdu_rel10_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL10_TAG 0x2003 + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_ack_resource_offset; + uint8_t pdsch_re_mapping_quasi_co_location_indicator; +} nr_nfapi_dl_config_dci_dl_pdu_rel11_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL11_TAG 0x2039 + + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t primary_cell_type; + uint8_t ul_dl_configuration_flag; + uint8_t number_ul_dl_configurations; + uint8_t ul_dl_configuration_indication[NR_NFAPI_MAX_UL_DL_CONFIGURATIONS]; +} nr_nfapi_dl_config_dci_dl_pdu_rel12_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL12_TAG 0x203a + + + +typedef struct { + uint8_t subband_index; + uint8_t scheduled_ues; + uint16_t precoding_value[NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS][NR_NFAPI_MAX_NUM_SCHEDULED_UES]; +} nr_nfapi_dl_config_dci_dl_tpm_subband_info_t; + +typedef struct { + uint8_t num_prb_per_subband; + uint8_t number_of_subbands; + uint8_t num_antennas; + nr_nfapi_dl_config_dci_dl_tpm_subband_info_t subband_info[NR_NFAPI_MAX_NUM_SUBBANDS]; +} nr_nfapi_dl_config_dci_dl_tpm_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t laa_end_partial_sf_flag; + uint8_t laa_end_partial_sf_configuration; + uint8_t initial_lbt_sf; + uint8_t codebook_size_determination; + uint8_t drms_table_flag; + uint8_t tpm_struct_flag; + nr_nfapi_dl_config_dci_dl_tpm_t tpm; +} nr_nfapi_dl_config_dci_dl_pdu_rel13_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL13_TAG 0x203b + +typedef struct { + nr_nfapi_dl_config_dci_dl_pdu_rel8_t dci_dl_pdu_rel8; + nr_nfapi_dl_config_dci_dl_pdu_rel9_t dci_dl_pdu_rel9; + nr_nfapi_dl_config_dci_dl_pdu_rel10_t dci_dl_pdu_rel10; + nr_nfapi_dl_config_dci_dl_pdu_rel11_t dci_dl_pdu_rel11; + nr_nfapi_dl_config_dci_dl_pdu_rel12_t dci_dl_pdu_rel12; + nr_nfapi_dl_config_dci_dl_pdu_rel13_t dci_dl_pdu_rel13; +} nr_nfapi_dl_config_dci_dl_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint16_t transmission_power; +} nr_nfapi_dl_config_bch_pdu_rel8_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG 0x2004 + +typedef struct { + nr_nfapi_dl_config_bch_pdu_rel8_t bch_pdu_rel8; +} nr_nfapi_dl_config_bch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint16_t rnti; + uint8_t resource_allocation_type; + uint32_t resource_block_coding; + uint8_t modulation; + uint16_t transmission_power; + uint16_t mbsfn_area_id; +} nr_nfapi_dl_config_mch_pdu_rel8_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_MCH_PDU_REL8_TAG 0x2005 + +typedef struct { + nr_nfapi_dl_config_mch_pdu_rel8_t mch_pdu_rel8; +} nr_nfapi_dl_config_mch_pdu; + + +typedef struct { + uint8_t subband_index; + uint8_t num_antennas; + uint16_t bf_value[NR_NFAPI_MAX_NUM_ANTENNAS]; +} nr_nfapi_bf_vector_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint16_t rnti; + uint8_t resource_allocation_type; + uint8_t virtual_resource_block_assignment_flag; + uint32_t resource_block_coding; + uint8_t modulation; + uint8_t redundancy_version; + uint8_t transport_blocks; + uint8_t transport_block_to_codeword_swap_flag; + uint8_t transmission_scheme; + uint8_t number_of_layers; + uint8_t number_of_subbands; + uint8_t codebook_index[NR_NFAPI_MAX_NUM_SUBBANDS]; + uint8_t ue_category_capacity; + uint8_t pa; + uint8_t delta_power_offset_index; + uint8_t ngap; + uint8_t nprb; + uint8_t transmission_mode; + uint8_t num_bf_prb_per_subband; + uint8_t num_bf_vector; + nr_nfapi_bf_vector_t bf_vector[NR_NFAPI_MAX_BF_VECTORS]; +} nr_nfapi_dl_config_dlsch_pdu_rel8_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG 0x2006 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t nscid; +} nr_nfapi_dl_config_dlsch_pdu_rel9_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL9_TAG 0x2007 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t csi_rs_flag; + uint8_t csi_rs_resource_config_r10; + uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10; + uint8_t csi_rs_number_nzp_configuration; + uint8_t csi_rs_resource_config[NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG]; + uint8_t pdsch_start; +} nr_nfapi_dl_config_dlsch_pdu_rel10_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG 0x2008 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t drms_config_flag; + uint16_t drms_scrambling; + uint8_t csi_config_flag; + uint16_t csi_scrambling; + uint8_t pdsch_re_mapping_flag; + uint8_t pdsch_re_mapping_atenna_ports; + uint8_t pdsch_re_mapping_freq_shift; +} nr_nfapi_dl_config_dlsch_pdu_rel11_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL11_TAG 0x203C + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t altcqi_table_r12; + uint8_t maxlayers; + uint8_t n_dl_harq; +} nr_nfapi_dl_config_dlsch_pdu_rel12_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL12_TAG 0x203D + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t dwpts_symbols; + uint8_t initial_lbt_sf; + uint8_t ue_type; + uint8_t pdsch_payload_type; + uint16_t initial_transmission_sf_io; + uint8_t drms_table_flag; +} nr_nfapi_dl_config_dlsch_pdu_rel13_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG 0x203E + +typedef struct { + nr_nfapi_dl_config_dlsch_pdu_rel8_t dlsch_pdu_rel8; + nr_nfapi_dl_config_dlsch_pdu_rel9_t dlsch_pdu_rel9; + nr_nfapi_dl_config_dlsch_pdu_rel10_t dlsch_pdu_rel10; + nr_nfapi_dl_config_dlsch_pdu_rel11_t dlsch_pdu_rel11; + nr_nfapi_dl_config_dlsch_pdu_rel12_t dlsch_pdu_rel12; + nr_nfapi_dl_config_dlsch_pdu_rel13_t dlsch_pdu_rel13; +} nr_nfapi_dl_config_dlsch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint16_t p_rnti; + uint8_t resource_allocation_type; + uint8_t virtual_resource_block_assignment_flag; + uint32_t resource_block_coding; + uint8_t mcs; + uint8_t redundancy_version; + uint8_t number_of_transport_blocks; + uint8_t transport_block_to_codeword_swap_flag; + uint8_t transmission_scheme; + uint8_t number_of_layers; + uint8_t codebook_index; + uint8_t ue_category_capacity; + uint8_t pa; + uint16_t transmission_power; + uint8_t nprb; + uint8_t ngap; +} nr_nfapi_dl_config_pch_pdu_rel8_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL8_TAG 0x2009 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t ue_mode; + uint16_t initial_transmission_sf_io; +} nr_nfapi_dl_config_pch_pdu_rel13_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_PCH_PDU_REL13_TAG 0x203F + +typedef struct { + nr_nfapi_dl_config_pch_pdu_rel8_t pch_pdu_rel8; + nr_nfapi_dl_config_pch_pdu_rel13_t pch_pdu_rel13; +} nr_nfapi_dl_config_pch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t transmission_power; + uint8_t prs_bandwidth; + uint8_t prs_cyclic_prefix_type; + uint8_t prs_muting; +} nr_nfapi_dl_config_prs_pdu_rel9_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_PRS_PDU_REL9_TAG 0x200A + +typedef struct { + nr_nfapi_dl_config_prs_pdu_rel9_t prs_pdu_rel9; +} nr_nfapi_dl_config_prs_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t csi_rs_antenna_port_count_r10; + uint8_t csi_rs_resource_config_r10; + uint16_t transmission_power; + uint16_t csi_rs_zero_tx_power_resource_config_bitmap_r10; + uint8_t csi_rs_number_of_nzp_configuration; + uint8_t csi_rs_resource_config[NR_NFAPI_MAX_CSI_RS_RESOURCE_CONFIG]; +} nr_nfapi_dl_config_csi_rs_pdu_rel10_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL10_TAG 0x200B + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t csi_rs_class; + uint8_t cdm_type; + uint8_t num_bf_vector; + struct { + uint8_t csi_rs_resource_index; + uint16_t bf_value[NR_NFAPI_MAX_ANTENNA_PORT_COUNT]; + } bf_vector[NR_NFAPI_MAX_BF_VECTORS]; + +} nr_nfapi_dl_config_csi_rs_pdu_rel13_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_CSI_RS_PDU_REL13_TAG 0x2040 + +typedef struct { + nr_nfapi_dl_config_csi_rs_pdu_rel10_t csi_rs_pdu_rel10; + nr_nfapi_dl_config_csi_rs_pdu_rel13_t csi_rs_pdu_rel13; +} nr_nfapi_dl_config_csi_rs_pdu; + +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL8_TAG 0x2001 +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL9_TAG 0x2002 +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL10_TAG 0x2003 +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL11_TAG 0x2039 +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL12_TAG 0x203a +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PDU_REL13_TAG 0x203b + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t epdcch_resource_assignment_flag; + uint16_t epdcch_id; + uint8_t epdcch_start_symbol; + uint8_t epdcch_num_prb; + uint8_t epdcch_prb_index[NR_NFAPI_MAX_EPDCCH_PRB]; + nr_nfapi_bf_vector_t bf_vector; +} nr_nfapi_dl_config_epdcch_parameters_rel11_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL11_TAG 0x2041 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t dwpts_symbols; + uint8_t initial_lbt_sf; +} nr_nfapi_dl_config_epdcch_parameters_rel13_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_EPDCCH_PARAM_REL13_TAG 0x2042 + +typedef struct { + nr_nfapi_dl_config_dci_dl_pdu_rel8_t epdcch_pdu_rel8; + nr_nfapi_dl_config_dci_dl_pdu_rel9_t epdcch_pdu_rel9; + nr_nfapi_dl_config_dci_dl_pdu_rel10_t epdcch_pdu_rel10; + nr_nfapi_dl_config_dci_dl_pdu_rel11_t epdcch_pdu_rel11; + nr_nfapi_dl_config_dci_dl_pdu_rel12_t epdcch_pdu_rel12; + nr_nfapi_dl_config_dci_dl_pdu_rel13_t epdcch_pdu_rel13; + nr_nfapi_dl_config_epdcch_parameters_rel11_t epdcch_params_rel11; + nr_nfapi_dl_config_epdcch_parameters_rel13_t epdcch_params_rel13; +} nr_nfapi_dl_config_epdcch_pdu; + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mpdcch_narrow_band; + uint8_t number_of_prb_pairs; + uint8_t resource_block_assignment; + uint8_t mpdcch_tansmission_type; + uint8_t start_symbol; + uint8_t ecce_index; + uint8_t aggregation_level; + uint8_t rnti_type; + uint16_t rnti; + uint8_t ce_mode; + uint16_t drms_scrambling_init; + uint16_t initial_transmission_sf_io; + uint16_t transmission_power; + uint8_t dci_format; + uint16_t resource_block_coding; + uint8_t mcs; + uint8_t pdsch_reptition_levels; + uint8_t redundancy_version; + uint8_t new_data_indicator; + uint8_t harq_process; + uint8_t tpmi_length; + uint8_t tpmi; + uint8_t pmi_flag; + uint8_t pmi; + uint8_t harq_resource_offset; + uint8_t dci_subframe_repetition_number; + uint8_t tpc; + uint8_t downlink_assignment_index_length; + uint8_t downlink_assignment_index; + uint8_t allocate_prach_flag; + uint8_t preamble_index; + uint8_t prach_mask_index; + uint8_t starting_ce_level; + uint8_t srs_request; + uint8_t antenna_ports_and_scrambling_identity_flag; + uint8_t antenna_ports_and_scrambling_identity; + uint8_t frequency_hopping_enabled_flag; + uint8_t paging_direct_indication_differentiation_flag; + uint8_t direct_indication; + uint8_t total_dci_length_including_padding; + uint8_t number_of_tx_antenna_ports; + uint16_t precoding_value[NR_NFAPI_MAX_TX_PHYSICAL_ANTENNA_PORTS]; +} nr_nfapi_dl_config_mpdcch_pdu_rel13_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_MPDCCH_PDU_REL13_TAG 0x205B + + +typedef struct { + nr_nfapi_dl_config_mpdcch_pdu_rel13_t mpdcch_pdu_rel13; +} nr_nfapi_dl_config_mpdcch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint16_t transmission_power; + uint16_t hyper_sfn_2_lsbs; +} nr_nfapi_dl_config_nbch_pdu_rel13_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_NBCH_PDU_REL13_TAG 0x205C + +typedef struct { + nr_nfapi_dl_config_nbch_pdu_rel13_t nbch_pdu_rel13; +} nr_nfapi_dl_config_nbch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint8_t ncce_index; + uint8_t aggregation_level; + uint8_t start_symbol; + uint8_t rnti_type; + uint16_t rnti; + uint8_t scrambling_reinitialization_batch_index; + uint8_t nrs_antenna_ports_assumed_by_the_ue; + uint8_t dci_format; + uint8_t scheduling_delay; + uint8_t resource_assignment; + uint8_t repetition_number; + uint8_t mcs; + uint8_t new_data_indicator; + uint8_t harq_ack_resource; + uint8_t npdcch_order_indication; + uint8_t starting_number_of_nprach_repetitions; + uint8_t subcarrier_indication_of_nprach; + uint8_t paging_direct_indication_differentation_flag; + uint8_t direct_indication; + uint8_t dci_subframe_repetition_number; + uint8_t total_dci_length_including_padding; +} nr_nfapi_dl_config_npdcch_pdu_rel13_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_NPDCCH_PDU_REL13_TAG 0x205D + +typedef struct { + nr_nfapi_dl_config_npdcch_pdu_rel13_t npdcch_pdu_rel13; +} nr_nfapi_dl_config_npdcch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t pdu_index; + uint8_t start_symbol; + uint8_t rnti_type; + uint16_t rnti; + uint16_t resource_assignment; + uint16_t repetition_number; + uint8_t modulation; + uint8_t number_of_subframes_for_resource_assignment; + uint8_t scrambling_sequence_initialization_cinit; + uint16_t sf_idx; + uint8_t nrs_antenna_ports_assumed_by_the_ue; +} nr_nfapi_dl_config_ndlsch_pdu_rel13_t; + +#define NR_NFAPI_DL_CONFIG_REQUEST_NDLSCH_PDU_REL13_TAG 0x205E + +typedef struct { + nr_nfapi_dl_config_ndlsch_pdu_rel13_t ndlsch_pdu_rel13; +} nr_nfapi_dl_config_ndlsch_pdu; + + +typedef struct { + uint8_t pdu_type; + uint8_t pdu_size; + union { + nr_nfapi_dl_config_dci_dl_pdu dci_dl_pdu; + nr_nfapi_dl_config_bch_pdu bch_pdu; + nr_nfapi_dl_config_mch_pdu mch_pdu; + nr_nfapi_dl_config_dlsch_pdu dlsch_pdu; + nr_nfapi_dl_config_pch_pdu pch_pdu; + nr_nfapi_dl_config_prs_pdu prs_pdu; + nr_nfapi_dl_config_csi_rs_pdu csi_rs_pdu; + nr_nfapi_dl_config_epdcch_pdu epdcch_pdu; + nr_nfapi_dl_config_mpdcch_pdu mpdcch_pdu; + nr_nfapi_dl_config_nbch_pdu nbch_pdu; + nr_nfapi_dl_config_npdcch_pdu npdcch_pdu; + nr_nfapi_dl_config_ndlsch_pdu ndlsch_pdu; + }; +} nr_nfapi_dl_config_request_pdu_t; + +#define NR_NFAPI_DL_CONFIG_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_pdcch_ofdm_symbols; + uint8_t number_dci; + uint16_t number_pdu; + uint8_t number_pdsch_rnti; + uint16_t transmission_power_pcfich; + nr_nfapi_dl_config_request_pdu_t* dl_config_pdu_list; +} nr_nfapi_dl_config_request_body_t; +#define NR_NFAPI_DL_CONFIG_REQUEST_BODY_TAG 0x2000 + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint16_t size; + uint16_t rnti; + uint8_t resource_block_start; + uint8_t number_of_resource_blocks; + uint8_t modulation_type; + uint8_t cyclic_shift_2_for_drms; + uint8_t frequency_hopping_enabled_flag; + uint8_t frequency_hopping_bits; + uint8_t new_data_indication; + uint8_t redundancy_version; + uint8_t harq_process_number; + uint8_t ul_tx_mode; + uint8_t current_tx_nb; + uint8_t n_srs; +} nr_nfapi_ul_config_ulsch_pdu_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL8_TAG 0x200D + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t resource_allocation_type; + uint32_t resource_block_coding; + uint8_t transport_blocks; + uint8_t transmission_scheme; + uint8_t number_of_layers; + uint8_t codebook_index; + uint8_t disable_sequence_hopping_flag; +} nr_nfapi_ul_config_ulsch_pdu_rel10_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL10_TAG 0x200E + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t virtual_cell_id_enabled_flag; + uint16_t npusch_identity; + uint8_t dmrs_config_flag; + uint16_t ndmrs_csh_identity; +} nr_nfapi_ul_config_ulsch_pdu_rel11_t; + +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL11_TAG 0x2043 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t ue_type; + uint16_t total_number_of_repetitions; + uint16_t repetition_number; + uint16_t initial_transmission_sf_io; + uint8_t empty_symbols_due_to_re_tunning; +} nr_nfapi_ul_config_ulsch_pdu_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_PDU_REL13_TAG 0x2044 + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu_rel8_t ulsch_pdu_rel8; + nr_nfapi_ul_config_ulsch_pdu_rel10_t ulsch_pdu_rel10; + nr_nfapi_ul_config_ulsch_pdu_rel11_t ulsch_pdu_rel11; + nr_nfapi_ul_config_ulsch_pdu_rel13_t ulsch_pdu_rel13; +} nr_nfapi_ul_config_ulsch_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t dl_cqi_pmi_size_rank_1; + uint8_t dl_cqi_pmi_size_rank_greater_1; + uint8_t ri_size; + uint8_t delta_offset_cqi; + uint8_t delta_offset_ri; +} nr_nfapi_ul_config_cqi_ri_information_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL8_TAG 0x2010 + +typedef struct { + uint8_t dl_cqi_pmi_ri_size; + uint8_t control_type; +} nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_t; + +typedef struct { + uint8_t number_of_cc; + struct { + uint8_t ri_size; + uint8_t dl_cqi_pmi_size[8]; + } cc[NR_NFAPI_MAX_CC]; +} nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t report_type; + uint8_t delta_offset_cqi; + uint8_t delta_offset_ri; + union { + nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_t periodic_cqi_pmi_ri_report; + nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_t aperiodic_cqi_pmi_ri_report; + }; +} nr_nfapi_ul_config_cqi_ri_information_rel9_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL9_TAG 0x2011 + +typedef struct { + uint16_t dl_cqi_pmi_ri_size_2; +} nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t; + +typedef struct { +} nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t report_type; // Convience parameter, not sent on the wire + union { + nr_nfapi_ul_config_periodic_cqi_pmi_ri_report_re13_t periodic_cqi_pmi_ri_report; + nr_nfapi_ul_config_aperiodic_cqi_pmi_ri_report_re13_t aperiodic_cqi_pmi_ri_report; + }; +} nr_nfapi_ul_config_cqi_ri_information_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_RI_INFORMATION_REL13_TAG 0x2045 + +typedef struct { + nr_nfapi_ul_config_cqi_ri_information_rel8_t cqi_ri_information_rel8; + nr_nfapi_ul_config_cqi_ri_information_rel9_t cqi_ri_information_rel9; + nr_nfapi_ul_config_cqi_ri_information_rel13_t cqi_ri_information_rel13; +} nr_nfapi_ul_config_cqi_ri_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_size; + uint8_t delta_offset_harq; + uint8_t ack_nack_mode; +} nr_nfapi_ul_config_ulsch_harq_information_rel10_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL10_TAG 0x2012 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t harq_size_2; + uint8_t delta_offset_harq_2; +} nr_nfapi_ul_config_ulsch_harq_information_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_ULSCH_HARQ_INFORMATION_REL13_TAG 0x2046 + +typedef struct { + nr_nfapi_ul_config_ulsch_harq_information_rel10_t harq_information_rel10; + nr_nfapi_ul_config_ulsch_harq_information_rel13_t harq_information_rel13; +} nr_nfapi_ul_config_ulsch_harq_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t n_srs_initial; + uint8_t initial_number_of_resource_blocks; +} nr_nfapi_ul_config_initial_transmission_parameters_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_INITIAL_TRANSMISSION_PARAMETERS_REL8_TAG 0x200F + +typedef struct { + nr_nfapi_ul_config_initial_transmission_parameters_rel8_t initial_transmission_parameters_rel8; +} nr_nfapi_ul_config_initial_transmission_parameters; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_cqi_ri_information cqi_ri_information; + nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; +} nr_nfapi_ul_config_ulsch_cqi_ri_pdu; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_ulsch_harq_information harq_information; + nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; +} nr_nfapi_ul_config_ulsch_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_cqi_ri_information cqi_ri_information; + nr_nfapi_ul_config_ulsch_harq_information harq_information; + nr_nfapi_ul_config_initial_transmission_parameters initial_transmission_parameters; +} nr_nfapi_ul_config_ulsch_cqi_harq_ri_pdu; + + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint16_t rnti; +} nr_nfapi_ul_config_ue_information_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL8_TAG 0x2013 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t virtual_cell_id_enabled_flag; + uint16_t npusch_identity; +} nr_nfapi_ul_config_ue_information_rel11_t; + +#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL11_TAG 0x2047 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t ue_type; + uint8_t empty_symbols; + uint16_t total_number_of_repetitions; + uint16_t repetition_number; +} nr_nfapi_ul_config_ue_information_rel13_t; + +#define NR_NFAPI_UL_CONFIG_REQUEST_UE_INFORMATION_REL13_TAG 0x2048 + +typedef struct { + nr_nfapi_ul_config_ue_information_rel8_t ue_information_rel8; + nr_nfapi_ul_config_ue_information_rel11_t ue_information_rel11; + nr_nfapi_ul_config_ue_information_rel13_t ue_information_rel13; +} nr_nfapi_ul_config_ue_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t pucch_index; + uint8_t dl_cqi_pmi_size; +} nr_nfapi_ul_config_cqi_information_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL8_TAG 0x2014 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_pucch_resource; + uint16_t pucch_index_p1; +} nr_nfapi_ul_config_cqi_information_rel10_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL10_TAG 0x2015 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t csi_mode; + uint16_t dl_cqi_pmi_size_2; + uint8_t starting_prb; + uint8_t n_prb; + uint8_t cdm_index; + uint8_t n_srs; +} nr_nfapi_ul_config_cqi_information_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_CQI_INFORMATION_REL13_TAG 0x2049 + +typedef struct { + nr_nfapi_ul_config_cqi_information_rel8_t cqi_information_rel8; + nr_nfapi_ul_config_cqi_information_rel10_t cqi_information_rel10; + nr_nfapi_ul_config_cqi_information_rel13_t cqi_information_rel13; +} nr_nfapi_ul_config_cqi_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t pucch_index; +} nr_nfapi_ul_config_sr_information_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL8_TAG 0x2016 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_pucch_resources; + uint16_t pucch_index_p1; +} nr_nfapi_ul_config_sr_information_rel10_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_SR_INFORMATION_REL10_TAG 0x2017 + +typedef struct { + nr_nfapi_ul_config_sr_information_rel8_t sr_information_rel8; + nr_nfapi_ul_config_sr_information_rel10_t sr_information_rel10; +} nr_nfapi_ul_config_sr_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_size; + uint8_t ack_nack_mode; + uint8_t number_of_pucch_resources; + uint16_t n_pucch_1_0; + uint16_t n_pucch_1_1; + uint16_t n_pucch_1_2; + uint16_t n_pucch_1_3; +} nr_nfapi_ul_config_harq_information_rel10_tdd_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL10_TDD_TAG 0x2018 + + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t n_pucch_1_0; + uint8_t harq_size; +} nr_nfapi_ul_config_harq_information_rel8_fdd_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL8_FDD_TAG 0x2019 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_size; + uint8_t ack_nack_mode; + uint8_t number_of_pucch_resources; + uint16_t n_pucch_1_0; + uint16_t n_pucch_1_1; + uint16_t n_pucch_1_2; + uint16_t n_pucch_1_3; +} nr_nfapi_ul_config_harq_information_rel9_fdd_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL9_FDD_TAG 0x201a + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t num_ant_ports; + uint16_t n_pucch_2_0; + uint16_t n_pucch_2_1; + uint16_t n_pucch_2_2; + uint16_t n_pucch_2_3; +} nr_nfapi_ul_config_harq_information_rel11_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL11_TAG 0x204A + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t harq_size_2; + uint8_t starting_prb; + uint8_t n_prb; + uint8_t cdm_index; + uint8_t n_srs; +} nr_nfapi_ul_config_harq_information_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_HARQ_INFORMATION_REL13_TAG 0x204B + +typedef struct { + nr_nfapi_ul_config_harq_information_rel10_tdd_t harq_information_rel10_tdd; + nr_nfapi_ul_config_harq_information_rel8_fdd_t harq_information_rel8_fdd; + nr_nfapi_ul_config_harq_information_rel9_fdd_t harq_information_rel9_fdd; + nr_nfapi_ul_config_harq_information_rel11_t harq_information_rel11; + nr_nfapi_ul_config_harq_information_rel13_t harq_information_rel13; +} nr_nfapi_ul_config_harq_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint16_t size; + uint16_t rnti; + uint8_t srs_bandwidth; + uint8_t frequency_domain_position; + uint8_t srs_hopping_bandwidth; + uint8_t transmission_comb; + uint16_t i_srs; + uint8_t sounding_reference_cyclic_shift; +} nr_nfapi_ul_config_srs_pdu_rel8_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL8_TAG 0x201b + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t antenna_port; +} nr_nfapi_ul_config_srs_pdu_rel10_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL10_TAG 0x201c + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_combs; +} nr_nfapi_ul_config_srs_pdu_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_SRS_PDU_REL13_TAG 0x204c + +typedef struct { + nr_nfapi_ul_config_srs_pdu_rel8_t srs_pdu_rel8; + nr_nfapi_ul_config_srs_pdu_rel10_t srs_pdu_rel10; + nr_nfapi_ul_config_srs_pdu_rel13_t srs_pdu_rel13; +} nr_nfapi_ul_config_srs_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_cqi_information cqi_information; +} nr_nfapi_ul_config_uci_cqi_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_sr_information sr_information; +} nr_nfapi_ul_config_uci_sr_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_uci_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_sr_information sr_information; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_uci_sr_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_cqi_information cqi_information; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_uci_cqi_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_cqi_information cqi_information; + nr_nfapi_ul_config_sr_information sr_information; +} nr_nfapi_ul_config_uci_cqi_sr_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_cqi_information cqi_information; + nr_nfapi_ul_config_sr_information sr_information; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_uci_cqi_sr_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ue_information ue_information; +} nr_nfapi_ul_config_harq_buffer_pdu; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_cqi_information csi_information; +} nr_nfapi_ul_config_ulsch_uci_csi_pdu; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_ulsch_uci_harq_pdu; + +typedef struct { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_cqi_information csi_information; + nr_nfapi_ul_config_harq_information harq_information; +} nr_nfapi_ul_config_ulsch_csi_uci_harq_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_ack_resource; +} nr_nfapi_ul_config_nb_harq_information_rel13_fdd_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_NB_HARQ_INFORMATION_REL13_FDD_TAG 0x2061 + +typedef struct { + nr_nfapi_ul_config_nb_harq_information_rel13_fdd_t nb_harq_information_rel13_fdd; +} nr_nfapi_ul_config_nb_harq_information; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t nulsch_format; + uint32_t handle; + uint16_t size; + uint16_t rnti; + uint8_t subcarrier_indication; + uint8_t resource_assignment; + uint8_t mcs; + uint8_t redudancy_version; + uint8_t repetition_number; + uint8_t new_data_indication; + uint8_t n_srs; + uint16_t scrambling_sequence_initialization_cinit; + uint16_t sf_idx; + nr_nfapi_ul_config_ue_information ue_information; + nr_nfapi_ul_config_nb_harq_information nb_harq_information; +} nr_nfapi_ul_config_nulsch_pdu_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_NULSCH_PDU_REL13_TAG 0x205F + +typedef struct { + nr_nfapi_ul_config_nulsch_pdu_rel13_t nulsch_pdu_rel13; +} nr_nfapi_ul_config_nulsch_pdu; + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t nprach_config_0; + uint8_t nprach_config_1; + uint8_t nprach_config_2; +} nr_nfapi_ul_config_nrach_pdu_rel13_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_NRACH_PDU_REL13_TAG 0x2067 + +typedef struct { + nr_nfapi_ul_config_nrach_pdu_rel13_t nrach_pdu_rel13; +} nr_nfapi_ul_config_nrach_pdu; + +typedef struct { + uint8_t pdu_type; + uint8_t pdu_size; + union { + nr_nfapi_ul_config_ulsch_pdu ulsch_pdu; + nr_nfapi_ul_config_ulsch_cqi_ri_pdu ulsch_cqi_ri_pdu; + nr_nfapi_ul_config_ulsch_harq_pdu ulsch_harq_pdu; + nr_nfapi_ul_config_ulsch_cqi_harq_ri_pdu ulsch_cqi_harq_ri_pdu; + nr_nfapi_ul_config_uci_cqi_pdu uci_cqi_pdu; + nr_nfapi_ul_config_uci_sr_pdu uci_sr_pdu; + nr_nfapi_ul_config_uci_harq_pdu uci_harq_pdu; + nr_nfapi_ul_config_uci_sr_harq_pdu uci_sr_harq_pdu; + nr_nfapi_ul_config_uci_cqi_harq_pdu uci_cqi_harq_pdu; + nr_nfapi_ul_config_uci_cqi_sr_pdu uci_cqi_sr_pdu; + nr_nfapi_ul_config_uci_cqi_sr_harq_pdu uci_cqi_sr_harq_pdu; + nr_nfapi_ul_config_srs_pdu srs_pdu; + nr_nfapi_ul_config_harq_buffer_pdu harq_buffer_pdu; + nr_nfapi_ul_config_ulsch_uci_csi_pdu ulsch_uci_csi_pdu; + nr_nfapi_ul_config_ulsch_uci_harq_pdu ulsch_uci_harq_pdu; + nr_nfapi_ul_config_ulsch_csi_uci_harq_pdu ulsch_csi_uci_harq_pdu; + nr_nfapi_ul_config_nulsch_pdu nulsch_pdu; + nr_nfapi_ul_config_nrach_pdu nrach_pdu; + }; +} nr_nfapi_ul_config_request_pdu_t; + +#define NR_NFAPI_UL_CONFIG_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_pdus; + uint8_t rach_prach_frequency_resources; + uint8_t srs_present; + nr_nfapi_ul_config_request_pdu_t* ul_config_pdu_list; +} nr_nfapi_ul_config_request_body_t; +#define NR_NFAPI_UL_CONFIG_REQUEST_BODY_TAG 0x200C + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t resource_block_start; + uint8_t cyclic_shift_2_for_drms; + uint8_t hi_value; + uint8_t i_phich; + uint16_t transmission_power; +} nr_nfapi_hi_dci0_hi_pdu_rel8_t; +#define NR_NFAPI_HI_DCI0_REQUEST_HI_PDU_REL8_TAG 0x201e + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t flag_tb2; + uint8_t hi_value_2; +} nr_nfapi_hi_dci0_hi_pdu_rel10_t; +#define NR_NFAPI_HI_DCI0_REQUEST_HI_PDU_REL10_TAG 0x201f + +typedef struct { + nr_nfapi_hi_dci0_hi_pdu_rel8_t hi_pdu_rel8; + nr_nfapi_hi_dci0_hi_pdu_rel10_t hi_pdu_rel10; +} nr_nfapi_hi_dci0_hi_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t dci_format; + uint8_t cce_index; + uint8_t aggregation_level; + uint16_t rnti; + uint8_t resource_block_start; + uint8_t number_of_resource_block; + uint8_t mcs_1; + uint8_t cyclic_shift_2_for_drms; + uint8_t frequency_hopping_enabled_flag; + uint8_t frequency_hopping_bits; + uint8_t new_data_indication_1; + uint8_t ue_tx_antenna_seleciton; + uint8_t tpc; + uint8_t cqi_csi_request; + uint8_t ul_index; + uint8_t dl_assignment_index; + uint32_t tpc_bitmap; + uint16_t transmission_power; +} nr_nfapi_hi_dci0_dci_pdu_rel8_t; +#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL8_TAG 0x2020 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t cross_carrier_scheduling_flag; + uint8_t carrier_indicator; + uint8_t size_of_cqi_csi_feild; + uint8_t srs_flag; + uint8_t srs_request; + uint8_t resource_allocation_flag; + uint8_t resource_allocation_type; + uint32_t resource_block_coding; + uint8_t mcs_2; + uint8_t new_data_indication_2; + uint8_t number_of_antenna_ports; + uint8_t tpmi; + uint8_t total_dci_length_including_padding; + uint8_t n_ul_rb; +} nr_nfapi_hi_dci0_dci_pdu_rel10_t; +#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL10_TAG 0x2021 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t pscch_resource; + uint8_t time_resource_pattern; +} nr_nfapi_hi_dci0_dci_pdu_rel12_t; + +#define NR_NFAPI_HI_DCI0_REQUEST_DCI_PDU_REL12_TAG 0x204D + +typedef struct { + nr_nfapi_hi_dci0_dci_pdu_rel8_t dci_pdu_rel8; + nr_nfapi_hi_dci0_dci_pdu_rel10_t dci_pdu_rel10; + nr_nfapi_hi_dci0_dci_pdu_rel12_t dci_pdu_rel12; +} nr_nfapi_hi_dci0_dci_pdu; + +typedef nr_nfapi_hi_dci0_dci_pdu_rel8_t nr_nfapi_hi_dci0_epdcch_dci_pdu_rel8_t; +#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL8_TAG 0x2020 + +typedef nr_nfapi_hi_dci0_dci_pdu_rel10_t nr_nfapi_hi_dci0_epdcch_dci_pdu_rel10_t; +#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_DCI_PDU_REL10_TAG 0x2021 + +typedef nr_nfapi_dl_config_epdcch_parameters_rel11_t nr_nfapi_hi_dci0_epdcch_parameters_rel11_t; +#define NR_NFAPI_HI_DCI0_REQUEST_EPDCCH_PARAMETERS_REL11_TAG 0x2041 + +typedef struct { + nr_nfapi_hi_dci0_epdcch_dci_pdu_rel8_t epdcch_dci_pdu_rel8; + nr_nfapi_hi_dci0_epdcch_dci_pdu_rel10_t epdcch_dci_pdu_rel10; + nr_nfapi_hi_dci0_epdcch_parameters_rel11_t epdcch_parameters_rel11; +} nr_nfapi_hi_dci0_epdcch_dci_pdu; + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mpdcch_narrowband; + uint8_t number_of_prb_pairs; + uint8_t resource_block_assignment; + uint8_t mpdcch_transmission_type; + uint8_t start_symbol; + uint8_t ecce_index; + uint8_t aggreagation_level; + uint8_t rnti_type; + uint16_t rnti; + uint8_t ce_mode; + uint16_t drms_scrambling_init; + uint16_t initial_transmission_sf_io; + uint16_t transmission_power; + uint8_t dci_format; + uint8_t resource_block_start; + uint8_t number_of_resource_blocks; + uint8_t mcs; + uint8_t pusch_repetition_levels; + uint8_t frequency_hopping_flag; + uint8_t new_data_indication; + uint8_t harq_process; + uint8_t redudency_version; + uint8_t tpc; + uint8_t csi_request; + uint8_t ul_inex; + uint8_t dai_presence_flag; + uint8_t dl_assignment_index; + uint8_t srs_request; + uint8_t dci_subframe_repetition_number; + uint32_t tcp_bitmap; + uint8_t total_dci_length_include_padding; + uint8_t number_of_tx_antenna_ports; + uint16_t precoding_value[NR_NFAPI_MAX_ANTENNA_PORT_COUNT]; +} nr_nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t; +#define NR_NFAPI_HI_DCI0_REQUEST_MPDCCH_DCI_PDU_REL13_TAG 0x204E + +typedef struct { + nr_nfapi_hi_dci0_mpdcch_dci_pdu_rel13_t mpdcch_dci_pdu_rel13; +} nr_nfapi_hi_dci0_mpdcch_dci_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t ncce_index; + uint8_t aggregation_level; + uint8_t start_symbol; + uint16_t rnti; + uint8_t scrambling_reinitialization_batch_index; + uint8_t nrs_antenna_ports_assumed_by_the_ue; + uint8_t subcarrier_indication; + uint8_t resource_assignment; + uint8_t scheduling_delay; + uint8_t mcs; + uint8_t redudancy_version; + uint8_t repetition_number; + uint8_t new_data_indicator; + uint8_t dci_subframe_repetition_number; +} nr_nfapi_hi_dci0_npdcch_dci_pdu_rel13_t; + +#define NR_NFAPI_HI_DCI0_REQUEST_NPDCCH_DCI_PDU_REL13_TAG 0x2062 + +typedef struct { + nr_nfapi_hi_dci0_npdcch_dci_pdu_rel13_t npdcch_dci_pdu_rel13; +} nr_nfapi_hi_dci0_npdcch_dci_pdu; + +typedef struct { + uint8_t pdu_type; + uint8_t pdu_size; + union { + nr_nfapi_hi_dci0_hi_pdu hi_pdu; + nr_nfapi_hi_dci0_dci_pdu dci_pdu; + nr_nfapi_hi_dci0_epdcch_dci_pdu epdcch_dci_pdu; + nr_nfapi_hi_dci0_mpdcch_dci_pdu mpdcch_dci_pdu; + nr_nfapi_hi_dci0_npdcch_dci_pdu npdcch_dci_pdu; + }; +} nr_nfapi_hi_dci0_request_pdu_t; + +#define NR_NFAPI_HI_DCI0_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t sfnsf; + uint8_t number_of_dci; + uint8_t number_of_hi; + nr_nfapi_hi_dci0_request_pdu_t* hi_dci0_pdu_list; +} nr_nfapi_hi_dci0_request_body_t; +#define NR_NFAPI_HI_DCI0_REQUEST_BODY_TAG 0x201D + +#define NR_NFAPI_TX_MAX_SEGMENTS 32 +typedef struct { + uint16_t pdu_length; + uint16_t pdu_index; + uint8_t num_segments; + struct { + uint32_t segment_length; + uint8_t* segment_data; + } segments[NR_NFAPI_TX_MAX_SEGMENTS]; +} nr_nfapi_tx_request_pdu_t; + +#define NR_NFAPI_TX_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_pdus; + nr_nfapi_tx_request_pdu_t* tx_pdu_list; +} nr_nfapi_tx_request_body_t; +#define NR_NFAPI_TX_REQUEST_BODY_TAG 0x2022 + +// P7 Message Structures +typedef struct { + nr_nfapi_p7_message_header_t header; + uint32_t t1; + int32_t delta_sfn_sf; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_dl_node_sync_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint32_t t1; + uint32_t t2; + uint32_t t3; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_ul_node_sync_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint32_t last_sfn_sf; + uint32_t time_since_last_timing_info; + uint32_t dl_config_jitter; + uint32_t tx_request_jitter; + uint32_t ul_config_jitter; + uint32_t hi_dci0_jitter; + int32_t dl_config_latest_delay; + int32_t tx_request_latest_delay; + int32_t ul_config_latest_delay; + int32_t hi_dci0_latest_delay; + int32_t dl_config_earliest_arrival; + int32_t tx_request_earliest_arrival; + int32_t ul_config_earliest_arrival; + int32_t hi_dci0_earliest_arrival; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_timing_info_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint16_t rnti; +} nr_nfapi_rx_ue_information; +#define NR_NFAPI_RX_UE_INFORMATION_TAG 0x2038 + +typedef struct { + uint8_t value_0; + uint8_t value_1; +} nr_nfapi_harq_indication_tdd_harq_data_bundling_t; + +typedef struct { + uint8_t value_0; + uint8_t value_1; + uint8_t value_2; + uint8_t value_3; +} nr_nfapi_harq_indication_tdd_harq_data_multiplexing_t; + +typedef struct { + uint8_t value_0; +} nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t; + +typedef struct { + uint8_t value_0; +} nr_nfapi_harq_indication_tdd_harq_data_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mode; + uint8_t number_of_ack_nack; + union{ + nr_nfapi_harq_indication_tdd_harq_data_bundling_t bundling; + nr_nfapi_harq_indication_tdd_harq_data_multiplexing_t multiplex; + nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; + } harq_data; +} nr_nfapi_harq_indication_tdd_rel8_t; +#define NR_NFAPI_HARQ_INDICATION_TDD_REL8_TAG 0x2027 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mode; + uint8_t number_of_ack_nack; + union{ + nr_nfapi_harq_indication_tdd_harq_data_t bundling; + nr_nfapi_harq_indication_tdd_harq_data_t multiplex; + nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; + nr_nfapi_harq_indication_tdd_harq_data_t channel_selection; + nr_nfapi_harq_indication_tdd_harq_data_t format_3; + } harq_data[NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD]; +} nr_nfapi_harq_indication_tdd_rel9_t; +#define NR_NFAPI_HARQ_INDICATION_TDD_REL9_TAG 0x2028 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mode; + uint16_t number_of_ack_nack; + union{ + nr_nfapi_harq_indication_tdd_harq_data_t bundling; + nr_nfapi_harq_indication_tdd_harq_data_t multiplex; + nr_nfapi_harq_indication_tdd_harq_data_special_bundling_t special_bundling; + nr_nfapi_harq_indication_tdd_harq_data_t channel_selection; + nr_nfapi_harq_indication_tdd_harq_data_t format_3; + nr_nfapi_harq_indication_tdd_harq_data_t format_4; + nr_nfapi_harq_indication_tdd_harq_data_t format_5; + } harq_data[NR_NFAPI_MAX_NUMBER_ACK_NACK_TDD]; +} nr_nfapi_harq_indication_tdd_rel13_t; +#define NR_NFAPI_HARQ_INDICATION_TDD_REL13_TAG 0x204F + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_tb1; + uint8_t harq_tb2; +} nr_nfapi_harq_indication_fdd_rel8_t; +#define NR_NFAPI_HARQ_INDICATION_FDD_REL8_TAG 0x2029 + +#define NR_NFAPI_HARQ_ACK_NACK_REL9_MAX 10 +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mode; + uint8_t number_of_ack_nack; + uint8_t harq_tb_n[NR_NFAPI_HARQ_ACK_NACK_REL9_MAX]; +} nr_nfapi_harq_indication_fdd_rel9_t; +#define NR_NFAPI_HARQ_INDICATION_FDD_REL9_TAG 0x202a + +#define NR_NFAPI_HARQ_ACK_NACK_REL13_MAX 22 // Need to check this max? +typedef struct { + nr_nfapi_tl_t tl; + uint8_t mode; + uint16_t number_of_ack_nack; + uint8_t harq_tb_n[NR_NFAPI_HARQ_ACK_NACK_REL13_MAX]; +} nr_nfapi_harq_indication_fdd_rel13_t; +#define NR_NFAPI_HARQ_INDICATION_FDD_REL13_TAG 0x2050 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t ul_cqi; + uint8_t channel; +} nr_nfapi_ul_cqi_information_t; +#define NR_NFAPI_UL_CQI_INFORMATION_TAG 0x2052 + +// Only expect 1 harq_indication TLV.tag to be set +// Would this be a better a an union, but not clear which combinations +// are valid +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_harq_indication_tdd_rel8_t harq_indication_tdd_rel8; + nr_nfapi_harq_indication_tdd_rel9_t harq_indication_tdd_rel9; + nr_nfapi_harq_indication_tdd_rel13_t harq_indication_tdd_rel13; + nr_nfapi_harq_indication_fdd_rel8_t harq_indication_fdd_rel8; + nr_nfapi_harq_indication_fdd_rel9_t harq_indication_fdd_rel9; + nr_nfapi_harq_indication_fdd_rel13_t harq_indication_fdd_rel13; + nr_nfapi_ul_cqi_information_t ul_cqi_information; +} nr_nfapi_harq_indication_pdu_t; + +#define NR_NFAPI_HARQ_IND_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_harqs; + nr_nfapi_harq_indication_pdu_t* harq_pdu_list; +} nr_nfapi_harq_indication_body_t; +#define NR_NFAPI_HARQ_INDICATION_BODY_TAG 0x2026 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t crc_flag; +} nr_nfapi_crc_indication_rel8_t; +#define NR_NFAPI_CRC_INDICATION_REL8_TAG 0x202c + +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_crc_indication_rel8_t crc_indication_rel8; +} nr_nfapi_crc_indication_pdu_t; + +#define NR_NFAPI_CRC_IND_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_crcs; + nr_nfapi_crc_indication_pdu_t* crc_pdu_list; +} nr_nfapi_crc_indication_body_t; +#define NR_NFAPI_CRC_INDICATION_BODY_TAG 0x202b + +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_ul_cqi_information_t ul_cqi_information; +} nr_nfapi_sr_indication_pdu_t; + +#define NR_NFAPI_SR_IND_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_srs; // Question : should this be srs + nr_nfapi_sr_indication_pdu_t* sr_pdu_list; +} nr_nfapi_sr_indication_body_t; +#define NR_NFAPI_SR_INDICATION_BODY_TAG 0x202d + +// The data offset should be set to 0 or 1 before encoding +// If it is set to 1 the nfapi library will detemine the correct offset + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t data_offset; + uint8_t ul_cqi; + uint8_t ri; + uint16_t timing_advance; +} nr_nfapi_cqi_indication_rel8_t; +#define NR_NFAPI_CQI_INDICATION_REL8_TAG 0x202f + +#define NR_NFAPI_CC_MAX 4 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t data_offset; + uint8_t ul_cqi; + uint8_t number_of_cc_reported; + uint8_t ri[NR_NFAPI_CC_MAX]; + uint16_t timing_advance; + uint16_t timing_advance_r9; +} nr_nfapi_cqi_indication_rel9_t; +#define NR_NFAPI_CQI_INDICATION_REL9_TAG 0x2030 + +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_cqi_indication_rel8_t cqi_indication_rel8; + nr_nfapi_cqi_indication_rel9_t cqi_indication_rel9; + nr_nfapi_ul_cqi_information_t ul_cqi_information; +} nr_nfapi_cqi_indication_pdu_t; + +#define NR_NFAPI_CQI_RAW_MAX_LEN 12 +typedef struct { + uint8_t pdu[NR_NFAPI_CQI_RAW_MAX_LEN]; +} nr_nfapi_cqi_indication_raw_pdu_t; + +#define NR_NFAPI_CQI_IND_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_cqis; + nr_nfapi_cqi_indication_pdu_t* cqi_pdu_list; + nr_nfapi_cqi_indication_raw_pdu_t* cqi_raw_pdu_list; +} nr_nfapi_cqi_indication_body_t; +#define NR_NFAPI_CQI_INDICATION_BODY_TAG 0x202e + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t rnti; + uint8_t preamble; + uint16_t timing_advance; +} nr_nfapi_preamble_pdu_rel8_t; +#define NR_NFAPI_PREAMBLE_REL8_TAG 0x2032 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t timing_advance_r9; +} nr_nfapi_preamble_pdu_rel9_t; +#define NR_NFAPI_PREAMBLE_REL9_TAG 0x2033 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t rach_resource_type; +} nr_nfapi_preamble_pdu_rel13_t; +#define NR_NFAPI_PREAMBLE_REL13_TAG 0x2051 + +typedef struct { + uint16_t instance_length; + nr_nfapi_preamble_pdu_rel8_t preamble_rel8; + nr_nfapi_preamble_pdu_rel9_t preamble_rel9; + nr_nfapi_preamble_pdu_rel13_t preamble_rel13; +} nr_nfapi_preamble_pdu_t; + +#define NR_NFAPI_PREAMBLE_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_preambles; + nr_nfapi_preamble_pdu_t* preamble_list; +} nr_nfapi_rach_indication_body_t; +#define NR_NFAPI_RACH_INDICATION_BODY_TAG 0x2031 + +#define NR_NFAPI_NUM_RB_MAX 1000 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t doppler_estimation; + uint16_t timing_advance; + uint8_t number_of_resource_blocks; + uint8_t rb_start; + uint8_t snr[NR_NFAPI_NUM_RB_MAX]; +} nr_nfapi_srs_indication_fdd_rel8_t; +#define NR_NFAPI_SRS_INDICATION_FDD_REL8_TAG 0x2035 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t timing_advance_r9; +} nr_nfapi_srs_indication_fdd_rel9_t; +#define NR_NFAPI_SRS_INDICATION_FDD_REL9_TAG 0x2036 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t uppts_symbol; +} nr_nfapi_srs_indication_ttd_rel10_t; +#define NR_NFAPI_SRS_INDICATION_TDD_REL10_TAG 0x2037 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t ul_rtoa; +} nr_nfapi_srs_indication_fdd_rel11_t; +#define NR_NFAPI_SRS_INDICATION_FDD_REL11_TAG 0x2053 + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t num_prb_per_subband; + uint8_t number_of_subbands; + uint8_t num_atennas; + struct { + uint8_t subband_index; + uint16_t channel[NR_NFAPI_MAX_NUM_PHYSICAL_ANTENNAS]; + } subands[NR_NFAPI_MAX_NUM_SUBBANDS]; +} nr_nfapi_tdd_channel_measurement_t; +#define NR_NFAPI_TDD_CHANNEL_MEASUREMENT_TAG 0x2054 + +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_srs_indication_fdd_rel8_t srs_indication_fdd_rel8; + nr_nfapi_srs_indication_fdd_rel9_t srs_indication_fdd_rel9; + nr_nfapi_srs_indication_ttd_rel10_t srs_indication_tdd_rel10; + nr_nfapi_srs_indication_fdd_rel11_t srs_indication_fdd_rel11; + nr_nfapi_tdd_channel_measurement_t tdd_channel_measurement; +} nr_nfapi_srs_indication_pdu_t; + +#define NR_NFAPI_SRS_IND_MAX_PDU 16 +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_ues; + nr_nfapi_srs_indication_pdu_t* srs_pdu_list; +} nr_nfapi_srs_indication_body_t; +#define NR_NFAPI_SRS_INDICATION_BODY_TAG 0x2034 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t length; + uint16_t offset; + uint8_t ul_cqi; + uint16_t timing_advance; +} nr_nfapi_rx_indication_rel8_t; +#define NR_NFAPI_RX_INDICATION_REL8_TAG 0x2024 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t timing_advance_r9; + } nr_nfapi_rx_indication_rel9_t; +#define NR_NFAPI_RX_INDICATION_REL9_TAG 0x2025 + +typedef struct { + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_rx_indication_rel8_t rx_indication_rel8; + nr_nfapi_rx_indication_rel9_t rx_indication_rel9; + uint8_t* data; +} nr_nfapi_rx_indication_pdu_t; + +#define NR_NFAPI_RX_IND_MAX_PDU 100 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_pdus; + nr_nfapi_rx_indication_pdu_t* rx_pdu_list; +} nr_nfapi_rx_indication_body_t; +#define NR_NFAPI_RX_INDICATION_BODY_TAG 0x2023 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t harq_tb1; +} nr_nfapi_nb_harq_indication_fdd_rel13_t; +#define NR_NFAPI_NB_HARQ_INDICATION_FDD_REL13_TAG 0x2064 + +typedef struct { + uint16_t instance_length; + nr_nfapi_rx_ue_information rx_ue_information; + nr_nfapi_nb_harq_indication_fdd_rel13_t nb_harq_indication_fdd_rel13; + nr_nfapi_ul_cqi_information_t ul_cqi_information; +} nr_nfapi_nb_harq_indication_pdu_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_harqs; + nr_nfapi_nb_harq_indication_pdu_t* nb_harq_pdu_list; +} nr_nfapi_nb_harq_indication_body_t; +#define NR_NFAPI_NB_HARQ_INDICATION_BODY_TAG 0x2063 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t rnti; + uint8_t initial_sc; + uint16_t timing_advance; + uint8_t nrach_ce_level; +} nr_nfapi_nrach_indication_pdu_rel13_t; +#define NR_NFAPI_NRACH_INDICATION_REL13_TAG 0x2066 + +typedef struct { + nr_nfapi_nrach_indication_pdu_rel13_t nrach_indication_rel13; +} nr_nfapi_nrach_indication_pdu_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_initial_scs_detected; + nr_nfapi_nrach_indication_pdu_t* nrach_pdu_list; +} nr_nfapi_nrach_indication_body_t; +#define NR_NFAPI_NRACH_INDICATION_BODY_TAG 0x2065 + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint32_t mp_cca; + uint32_t n_cca; + uint32_t offset; + uint32_t lte_txop_sf; + uint16_t txop_sfn_sf_end; + uint32_t lbt_mode; +} nr_nfapi_lbt_pdsch_req_pdu_rel13_t; +#define NR_NFAPI_LBT_PDSCH_REQ_PDU_REL13_TAG 0x2056 + +typedef struct { + nr_nfapi_lbt_pdsch_req_pdu_rel13_t lbt_pdsch_req_pdu_rel13; +} nr_nfapi_lbt_pdsch_req_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint32_t offset; + uint16_t sfn_sf_end; + uint32_t lbt_mode; +} nr_nfapi_lbt_drs_req_pdu_rel13_t; +#define NR_NFAPI_LBT_DRS_REQ_PDU_REL13_TAG 0x2057 + +typedef struct { + nr_nfapi_lbt_drs_req_pdu_rel13_t lbt_drs_req_pdu_rel13; +} nr_nfapi_lbt_drs_req_pdu; + +typedef struct { + uint8_t pdu_type; + uint8_t pdu_size; + union { + nr_nfapi_lbt_pdsch_req_pdu lbt_pdsch_req_pdu; + nr_nfapi_lbt_drs_req_pdu lbt_drs_req_pdu; + }; +} nr_nfapi_lbt_dl_config_request_pdu_t; + +#define NR_NFAPI_LBT_DL_CONFIG_REQ_MAX_PDU 16 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_pdus; + nr_nfapi_lbt_dl_config_request_pdu_t* lbt_dl_config_req_pdu_list; +} nr_nfapi_lbt_dl_config_request_body_t; +#define NR_NFAPI_LBT_DL_CONFIG_REQUEST_BODY_TAG 0x2055 + + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint32_t result; + uint32_t lte_txop_symbols; + uint32_t initial_partial_sf; +} nr_nfapi_lbt_pdsch_rsp_pdu_rel13_t; +#define NR_NFAPI_LBT_PDSCH_RSP_PDU_REL13_TAG 0x2059 + +typedef struct { + nr_nfapi_lbt_pdsch_rsp_pdu_rel13_t lbt_pdsch_rsp_pdu_rel13; +} nr_nfapi_lbt_pdsch_rsp_pdu; + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t handle; + uint32_t result; +} nr_nfapi_lbt_drs_rsp_pdu_rel13_t; +#define NR_NFAPI_LBT_DRS_RSP_PDU_REL13_TAG 0x205A + +typedef struct { + nr_nfapi_lbt_drs_rsp_pdu_rel13_t lbt_drs_rsp_pdu_rel13; +} nr_nfapi_lbt_drs_rsp_pdu; + + +typedef struct { + uint8_t pdu_type; + uint8_t pdu_size; + union { + nr_nfapi_lbt_pdsch_rsp_pdu lbt_pdsch_rsp_pdu; + nr_nfapi_lbt_drs_rsp_pdu lbt_drs_rsp_pdu; + }; +} nr_nfapi_lbt_dl_indication_pdu_t; + +#define NR_NFAPI_LBT_IND_MAX_PDU 16 +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_pdus; + nr_nfapi_lbt_dl_indication_pdu_t* lbt_indication_pdu_list; +} nr_nfapi_lbt_dl_indication_body_t; +#define NR_NFAPI_LBT_DL_INDICATION_BODY_TAG 0x2058 + +typedef struct { +} nr_nfapi_error_indication_msg_invalid_state; + +typedef struct { +} nr_nfapi_error_indication_msg_bch_missing; + +typedef struct { + uint16_t recieved_sfn_sf; + uint16_t expected_sfn_sf; +} nr_nfapi_error_indication_sfn_out_of_sync; + +typedef struct { + uint8_t sub_error_code; + uint8_t direction; + uint16_t rnti; + uint8_t pdu_type; +} nr_nfapi_error_indication_msg_pdu_err; + +typedef struct { + uint16_t recieved_sfn_sf; + uint16_t expected_sfn_sf; +} nr_nfapi_error_indication_msg_invalid_sfn; + +typedef struct { + uint8_t sub_error_code; + uint8_t phich_lowest_ul_rb_index; +} nr_nfapi_error_indication_msg_hi_err; + +typedef struct { + uint8_t sub_error_code; + uint16_t pdu_index; +} nr_nfapi_error_indication_msg_tx_err; + +// +// P4 Message Structures +// + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t frequency_band_indicator; + uint16_t measurement_period; + uint8_t bandwidth; + uint32_t timeout; + uint8_t number_of_earfcns; + uint16_t earfcn[NR_NFAPI_MAX_CARRIER_LIST]; +} nr_nfapi_lte_rssi_request_t; + +#define NR_NFAPI_LTE_RSSI_REQUEST_TAG 0x3000 + +#define NR_NFAPI_P4_START_TAG NR_NFAPI_LTE_RSSI_REQUEST_TAG + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t frequency_band_indicator; + uint16_t measurement_period; + uint32_t timeout; + uint8_t number_of_uarfcns; + uint16_t uarfcn[NR_NFAPI_MAX_CARRIER_LIST]; +} nr_nfapi_utran_rssi_request_t; + +#define NR_NFAPI_UTRAN_RSSI_REQUEST_TAG 0x3001 + +typedef struct { + uint16_t arfcn; + uint8_t direction; +} nr_nfapi_arfcn_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t frequency_band_indicator; + uint16_t measurement_period; + uint32_t timeout; + uint8_t number_of_arfcns; + nr_nfapi_arfcn_t arfcn[NR_NFAPI_MAX_CARRIER_LIST]; +} nr_nfapi_geran_rssi_request_t; + +#define NR_NFAPI_GERAN_RSSI_REQUEST_TAG 0x3002 + + + +typedef struct { + uint16_t earfcn; + uint8_t number_of_ro_dl; + uint8_t ro_dl[NR_NFAPI_MAX_RO_DL]; +} nr_nfapi_earfcn_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t frequency_band_indicator; + uint16_t measurement_period; + uint32_t timeout; + uint8_t number_of_earfcns; + nr_nfapi_earfcn_t earfcn[NR_NFAPI_MAX_CARRIER_LIST]; +} nr_nfapi_nb_iot_rssi_request_t; + +#define NR_NFAPI_NB_IOT_RSSI_REQUEST_TAG 0x3020 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_rssi; + int16_t rssi[NR_NFAPI_MAX_RSSI]; +} nr_nfapi_rssi_indication_body_t; + +#define NR_NFAPI_RSSI_INDICATION_TAG 0x3003 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint8_t measurement_bandwidth; + uint8_t exhaustive_search; + uint32_t timeout; + uint8_t number_of_pci; + uint16_t pci[NR_NFAPI_MAX_PCI_LIST]; +} nr_nfapi_lte_cell_search_request_t; + +#define NR_NFAPI_LTE_CELL_SEARCH_REQUEST_TAG 0x3004 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t uarfcn; + uint8_t exhaustive_search; + uint32_t timeout; + uint8_t number_of_psc; + uint16_t psc[NR_NFAPI_MAX_PSC_LIST]; +} nr_nfapi_utran_cell_search_request_t; + +#define NR_NFAPI_UTRAN_CELL_SEARCH_REQUEST_TAG 0x3005 + +typedef struct { + nr_nfapi_tl_t tl; + uint32_t timeout; + uint8_t number_of_arfcn; + uint16_t arfcn[NR_NFAPI_MAX_ARFCN_LIST]; +} nr_nfapi_geran_cell_search_request_t; + +#define NR_NFAPI_GERAN_CELL_SEARCH_REQUEST_TAG 0x3006 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint8_t ro_dl; + uint8_t exhaustive_search; + uint32_t timeout; + uint8_t number_of_pci; + uint16_t pci[NR_NFAPI_MAX_PCI_LIST]; +} nr_nfapi_nb_iot_cell_search_request_t; + +#define NR_NFAPI_NB_IOT_CELL_SEARCH_REQUEST_TAG 0x3021 + +typedef struct { + uint16_t pci; + uint8_t rsrp; + uint8_t rsrq; + int16_t frequency_offset; +} nr_nfapi_lte_found_cell_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_lte_cells_found; + nr_nfapi_lte_found_cell_t lte_found_cells[NR_NFAPI_MAX_LTE_CELLS_FOUND]; +} nr_nfapi_lte_cell_search_indication_t; + +#define NR_NFAPI_LTE_CELL_SEARCH_INDICATION_TAG 0x3007 + +typedef struct { + uint16_t psc; + uint8_t rscp; + uint8_t ecno; + int16_t frequency_offset; +} nr_nfapi_utran_found_cell_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_utran_cells_found; + nr_nfapi_utran_found_cell_t utran_found_cells[NR_NFAPI_MAX_UTRAN_CELLS_FOUND]; +} nr_nfapi_utran_cell_search_indication_t; + +#define NR_NFAPI_UTRAN_CELL_SEARCH_INDICATION_TAG 0x3008 + +typedef struct { + uint16_t arfcn; + uint8_t bsic; + uint8_t rxlev; + uint8_t rxqual; + int16_t frequency_offset; + uint32_t sfn_offset; +} nr_nfapi_gsm_found_cell_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_gsm_cells_found; + nr_nfapi_gsm_found_cell_t gsm_found_cells[NR_NFAPI_MAX_GSM_CELLS_FOUND]; +} nr_nfapi_geran_cell_search_indication_t; + +#define NR_NFAPI_GERAN_CELL_SEARCH_INDICATION_TAG 0x3009 + +typedef struct { + uint16_t pci; + uint8_t rsrp; + uint8_t rsrq; + int16_t frequency_offset; +} nr_nfapi_nb_iot_found_cell_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t number_of_nb_iot_cells_found; + nr_nfapi_nb_iot_found_cell_t nb_iot_found_cells[NR_NFAPI_MAX_NB_IOT_CELLS_FOUND]; +} nr_nfapi_nb_iot_cell_search_indication_t; + +#define NR_NFAPI_NB_IOT_CELL_SEARCH_INDICATION_TAG 0x3022 + +typedef nr_nfapi_opaqaue_data_t nr_nfapi_pnf_cell_search_state_t; + +#define NR_NFAPI_PNF_CELL_SEARCH_STATE_TAG 0x300A + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint16_t pci; + uint32_t timeout; +} nr_nfapi_lte_broadcast_detect_request_t; + +#define NR_NFAPI_LTE_BROADCAST_DETECT_REQUEST_TAG 0x300B + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t uarfcn; + uint16_t psc; + uint32_t timeout; +} nr_nfapi_utran_broadcast_detect_request_t; + +#define NR_NFAPI_UTRAN_BROADCAST_DETECT_REQUEST_TAG 0x300C + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint8_t ro_dl; + uint16_t pci; + uint32_t timeout; +} nr_nfapi_nb_iot_broadcast_detect_request_t; + +#define NR_NFAPI_NB_IOT_BROADCAST_DETECT_REQUEST_TAG 0x3023 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_tx_antenna; + uint16_t mib_length; + uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH]; + uint32_t sfn_offset; +} nr_nfapi_lte_broadcast_detect_indication_t; + +#define NR_NFAPI_LTE_BROADCAST_DETECT_INDICATION_TAG 0x300E + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t mib_length; + uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH]; + uint32_t sfn_offset; +} nr_nfapi_utran_broadcast_detect_indication_t; + +#define NR_NFAPI_UTRAN_BROADCAST_DETECT_INDICATION_TAG 0x300F + + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t number_of_tx_antenna; + uint16_t mib_length; + uint8_t mib[NR_NFAPI_MAX_MIB_LENGTH]; + uint32_t sfn_offset; +} nr_nfapi_nb_iot_broadcast_detect_indication_t; + +#define NR_NFAPI_NB_IOT_BROADCAST_DETECT_INDICATION_TAG 0x3024 + +#define NR_NFAPI_PNF_CELL_BROADCAST_STATE_TAG 0x3010 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint16_t pci; + uint16_t downlink_channel_bandwidth; + uint8_t phich_configuration; + uint8_t number_of_tx_antenna; + uint8_t retry_count; + uint32_t timeout; +} nr_nfapi_lte_system_information_schedule_request_t; + +#define NR_NFAPI_LTE_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3011 + + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint8_t ro_dl; + uint16_t pci; + uint8_t scheduling_info_sib1_nb; + uint32_t timeout; +} nr_nfapi_nb_iot_system_information_schedule_request_t; + +#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_SCHEDULE_REQUEST_TAG 0x3025 + +typedef nr_nfapi_opaqaue_data_t nr_nfapi_pnf_cell_broadcast_state_t; + +typedef struct { + uint8_t si_periodicity; + uint8_t si_index; +} nr_nfapi_lte_system_information_si_periodicity_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint16_t pci; + uint16_t downlink_channel_bandwidth; + uint8_t phich_configuration; + uint8_t number_of_tx_antenna; + uint8_t number_of_si_periodicity; + nr_nfapi_lte_system_information_si_periodicity_t si_periodicity[NR_NFAPI_MAX_SI_PERIODICITY]; + uint8_t si_window_length; + uint32_t timeout; +} nr_nfapi_lte_system_information_request_t; + +#define NR_NFAPI_LTE_SYSTEM_INFORMATION_REQUEST_TAG 0x3014 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t uarfcn; + uint16_t psc; + uint32_t timeout; +} nr_nfapi_utran_system_information_request_t; + +#define NR_NFAPI_UTRAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3015 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t arfcn; + uint8_t bsic; + uint32_t timeout; +} nr_nfapi_geran_system_information_request_t; + +#define NR_NFAPI_GERAN_SYSTEM_INFORMATION_REQUEST_TAG 0x3016 + +typedef struct { + uint8_t si_periodicity; + uint8_t si_repetition_pattern; + uint8_t si_tb_size; + uint8_t number_of_si_index; + uint8_t si_index[NR_NFAPI_MAX_SI_INDEX]; +} nr_nfapi_nb_iot_system_information_si_periodicity_t; + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t earfcn; + uint8_t ro_dl; + uint16_t pci; + uint8_t number_of_si_periodicity; + nr_nfapi_nb_iot_system_information_si_periodicity_t si_periodicity[NR_NFAPI_MAX_SI_PERIODICITY]; + uint8_t si_window_length; + uint32_t timeout; +} nr_nfapi_nb_iot_system_information_request_t; + +#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_REQUEST_TAG 0x3027 + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t sib_type; + uint16_t sib_length; + uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH]; +} nr_nfapi_lte_system_information_indication_t; + +#define NR_NFAPI_LTE_SYSTEM_INFORMATION_INDICATION_TAG 0x3018 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t sib_length; + uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH]; +} nr_nfapi_utran_system_information_indication_t; + +#define NR_NFAPI_UTRAN_SYSTEM_INFORMATION_INDICATION_TAG 0x3019 + +typedef struct { + nr_nfapi_tl_t tl; + uint16_t si_length; + uint8_t si[NR_NFAPI_MAX_SI_LENGTH]; +} nr_nfapi_geran_system_information_indication_t; + +#define NR_NFAPI_GERAN_SYSTEM_INFORMATION_INDICATION_TAG 0x301a + +typedef struct { + nr_nfapi_tl_t tl; + uint8_t sib_type; + uint16_t sib_length; + uint8_t sib[NR_NFAPI_MAX_SIB_LENGTH]; +} nr_nfapi_nb_iot_system_information_indication_t; + +#define NR_NFAPI_NB_IOT_SYSTEM_INFORMATION_INDICATION_TAG 0x3026 + + +// +// Top level NFAP messages +// + +// +// P7 +// + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_dl_config_request_body_t dl_config_request_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_dl_config_request_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_ul_config_request_body_t ul_config_request_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_ul_config_request_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_hi_dci0_request_body_t hi_dci0_request_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_hi_dci0_request_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_tx_request_body_t tx_request_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_tx_request_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; +} nr_nfapi_subframe_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_harq_indication_body_t harq_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_harq_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_crc_indication_body_t crc_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_crc_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_sr_indication_body_t sr_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_sr_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_cqi_indication_body_t cqi_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_cqi_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_rach_indication_body_t rach_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_rach_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_srs_indication_body_t srs_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_srs_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_rx_indication_body_t rx_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_rx_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_nb_harq_indication_body_t nb_harq_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_nb_harq_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_nrach_indication_body_t nrach_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_nrach_indication_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_lbt_dl_config_request_body_t lbt_dl_config_request_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_lbt_dl_config_request_t; + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint16_t sfn_sf; + nr_nfapi_lbt_dl_indication_body_t lbt_dl_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_lbt_dl_indication_t; + + +typedef struct { + nr_nfapi_p7_message_header_t header; + uint8_t message_id; + uint8_t error_code; + union { + nr_nfapi_error_indication_msg_invalid_state msg_invalid_state; + nr_nfapi_error_indication_msg_bch_missing msg_bch_missing; + nr_nfapi_error_indication_sfn_out_of_sync sfn_out_of_sync; + nr_nfapi_error_indication_msg_pdu_err msg_pdu_err; + nr_nfapi_error_indication_msg_invalid_sfn msg_invalid_sfn; + nr_nfapi_error_indication_msg_hi_err msg_hi_err; + nr_nfapi_error_indication_msg_tx_err msg_tx_err; + }; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_error_indication_t; + +// +// P4 Messages +// + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t rat_type; + union { + nr_nfapi_lte_rssi_request_t lte_rssi_request; + nr_nfapi_utran_rssi_request_t utran_rssi_request; + nr_nfapi_geran_rssi_request_t geran_rssi_request; + nr_nfapi_nb_iot_rssi_request_t nb_iot_rssi_request; + }; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_rssi_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_rssi_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_rssi_indication_body_t rssi_indication_body; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_rssi_indication_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t rat_type; + union { + nr_nfapi_lte_cell_search_request_t lte_cell_search_request; + nr_nfapi_utran_cell_search_request_t utran_cell_search_request; + nr_nfapi_geran_cell_search_request_t geran_cell_search_request; + nr_nfapi_nb_iot_cell_search_request_t nb_iot_cell_search_request; + }; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_cell_search_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_cell_search_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_lte_cell_search_indication_t lte_cell_search_indication; + nr_nfapi_utran_cell_search_indication_t utran_cell_search_indication; + nr_nfapi_geran_cell_search_indication_t geran_cell_search_indication; + nr_nfapi_pnf_cell_search_state_t pnf_cell_search_state; + nr_nfapi_nb_iot_cell_search_indication_t nb_iot_cell_search_indication; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_cell_search_indication_t; + + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t rat_type; + union { + nr_nfapi_lte_broadcast_detect_request_t lte_broadcast_detect_request; + nr_nfapi_utran_broadcast_detect_request_t utran_broadcast_detect_request; + nr_nfapi_nb_iot_broadcast_detect_request_t nb_iot_broadcast_detect_request; + }; + nr_nfapi_pnf_cell_search_state_t pnf_cell_search_state; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_broadcast_detect_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_broadcast_detect_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_lte_broadcast_detect_indication_t lte_broadcast_detect_indication; + nr_nfapi_utran_broadcast_detect_indication_t utran_broadcast_detect_indication; + nr_nfapi_nb_iot_broadcast_detect_indication_t nb_iot_broadcast_detect_indication; + nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_broadcast_detect_indication_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t rat_type; + union { + nr_nfapi_lte_system_information_schedule_request_t lte_system_information_schedule_request; + nr_nfapi_nb_iot_system_information_schedule_request_t nb_iot_system_information_schedule_request; + }; + nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_schedule_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_schedule_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_lte_system_information_indication_t lte_system_information_indication; + nr_nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_schedule_indication_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint8_t rat_type; + union { + nr_nfapi_lte_system_information_request_t lte_system_information_request; + nr_nfapi_utran_system_information_request_t utran_system_information_request; + nr_nfapi_geran_system_information_request_t geran_system_information_request; + nr_nfapi_nb_iot_system_information_request_t nb_iot_system_information_request; + }; + nr_nfapi_pnf_cell_broadcast_state_t pnf_cell_broadcast_state; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_response_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_lte_system_information_indication_t lte_system_information_indication; + nr_nfapi_utran_system_information_indication_t utran_system_information_indication; + nr_nfapi_geran_system_information_indication_t geran_system_information_indication; + nr_nfapi_nb_iot_system_information_indication_t nb_iot_system_information_indication; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_system_information_indication_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_nmm_stop_request_t; + +typedef struct { + nr_nfapi_p4_p5_message_header_t header; + uint32_t error_code; + nr_nfapi_vendor_extension_tlv_t vendor_extension; +} nr_nfapi_nmm_stop_response_t; + +// +// Configuration options for the encode decode functions +// + +/*! Configuration options for the p7 pack unpack functions + * + */ +typedef struct nr_nfapi_p7_codec_config { + + /*! Optional call back to allow the user to define the memory allocator. + * \param size The size of the memory to allocate + * \return a pointer to a valid memory block or 0 if it has failed. + * + * If not set the nfapi unpack functions will use malloc + */ + void* (*allocate)(size_t size); + + /*! Optional call back to allow the user to define the memory deallocator. + * \param ptr A poiner to a memory block allocated by the allocate callback + * + * If not set the client should use free + */ + void (*deallocate)(void* ptr); + + /*! Optional call back function to handle unpacking vendor extension tlv. + * \param tl A pointer to a decoded tag length structure + * \param ppReadPackedMsg A handle to the read buffer. + * \param end The end of the read buffer + * \param ve A handle to a vendor extention structure that the call back should allocate if the structure can be decoded + * \param config A pointer to the p7 codec configuration + * \return return 0 if packed successfully, -1 if failed. + * + * If not set the tlv will be skipped + * + * Client should use the help methods in nfapi.h to decode the vendor extention. + * + * \todo Add code example + */ + int (*unpack_vendor_extension_tlv)(nr_nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nr_nfapi_p7_codec_config* config); + + /*! Optional call back function to handle packing vendor extension tlv. + * \param ve A pointer to a vendor extention structure. + * \param ppWritePackedMsg A handle to the write buffer + * \param end The end of the write buffer. The callee should make sure not to write beyond the end + * \param config A pointer to the p7 codec configuration + * \return return 0 if packed successfully, -1 if failed. + * + * If not set the the tlv will be skipped + * + * Client should use the help methods in nfapi.h to encode the vendor extention + * + * \todo Add code example + */ + int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config); + + /*! Optional call back function to handle unpacking vendor extension messages. + * \param header A pointer to a decode P7 message header for the vendor extention message + * \param ppReadPackedMsg A handle to the encoded data buffer + * \param end A pointer to the end of the encoded data buffer + * \param config A pointer to the p7 codec configuration + * \return 0 if unpacked successfully, -1 if failed + * + * If not set the message will be ignored + * + * If the message if is unknown the function should return -1 + */ + int (*unpack_p7_vendor_extension)(nr_nfapi_p7_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config); + + /*! Optional call back function to handle packing vendor extension messages. + * \param header A poiner to a P7 message structure for the venfor extention message + * \param ppWritePackedmsg A handle to the buffer to write the encoded message into + * \param end A pointer to the end of the buffer + * \param cofig A pointer to the p7 codec configuration + * \return 0 if packed successfully, -1 if failed + * + * If not set the the message will be ingored + * + * If the message if is unknown the function should return -1 + */ + int (*pack_p7_vendor_extension)(nr_nfapi_p7_message_header_t* header, uint8_t **ppWritePackedmsg, uint8_t *end, struct nr_nfapi_p7_codec_config* config); + + /*! Optional user data that will be passed back with callbacks + */ + void* user_data; + +} nr_nfapi_p7_codec_config_t; + +/*! Configuration options for the p4 & p5 pack unpack functions + * + */ +typedef struct nr_nfapi_p4_p5_codec_config { + + /*! Optional call back to allow the user to define the memory allocator. + * \param size The size of the memory to allocate + * \return a pointer to a valid memory block or 0 if it has failed. + * + * If not set the nfapi unpack functions will use malloc + */ + void* (*allocate)(size_t size); + + /*! Optional call back to allow the user to define the memory deallocator. + * \param ptr A poiner to a memory block allocated by the allocate callback + * + * If not set free will be used + */ + void (*deallocate)(void* ptr); + + /*! Optional call back function to handle unpacking vendor extension tlv. + * \param tl A pointer to a decoded tag length structure + * \param ppReadPackedMsg A handle to the data buffer to decode + * \param end A pointer to the end of the buffer + * \param ve A handle to a vendor extention structure that will be allocated by this callback + * \param config A pointer to the P4/P5 codec configuration + * \return 0 if unpacked successfully, -1 if failed + * + * If not set the tlv will be skipped + */ + int (*unpack_vendor_extension_tlv)(nr_nfapi_tl_t* tl, uint8_t **ppReadPackedMsg, uint8_t *end, void** ve, struct nr_nfapi_p4_p5_codec_config* config); + + /*! Optional call back function to handle packing vendor extension tlv. + * \param ve + * \param ppWritePackedMsg A handle to the data buffer pack the tlv into + * \param end A pointer to the end of the buffer + * \param config A pointer to the P4/P5 codec configuration + * \return 0 if packed successfully, -1 if failed + * + * If not set the the tlv will be skipped + */ + int (*pack_vendor_extension_tlv)(void* ve, uint8_t **ppWritePackedMsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config); + + /*! Optional call back function to handle unpacking vendor extension messages. + * \param header A pointer to a decode P4/P5 message header + * \param ppReadPackgedMsg A handle to the data buffer to decode + * \param end A pointer to the end of the buffer + * \param config A pointer to the P4/P5 codec configuration + * \return 0 if packed successfully, -1 if failed + * + * If not set the message will be ignored + */ + int (*unpack_p4_p5_vendor_extension)(nr_nfapi_p4_p5_message_header_t* header, uint8_t **ppReadPackedMsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config); + + /*! Optional call back function to handle packing vendor extension messages. + * \param header A pointer to the P4/P5 message header to be encoded + * \param ppWritePackedMsg A handle to the data buffer pack the message into + * \param end A pointer to the end of the buffer + * \param config A pointer to the P4/P5 codec configuration + * \return 0 if packed successfully, -1 if failed + * + * If not set the the message will be ingored + */ + int (*pack_p4_p5_vendor_extension)(nr_nfapi_p4_p5_message_header_t* header, uint8_t **ppwritepackedmsg, uint8_t *end, struct nr_nfapi_p4_p5_codec_config* config); + + /*! Optional user data that will be passed back with callbacks + */ + void* user_data; + +} nr_nfapi_p4_p5_codec_config_t; + +// +// Functions +// + +/*! \brief Encodes an NFAPI P4 message to a buffer + * \param pMessageBuf A pointer to a nfapi p4 message structure + * \param messageBufLen The size of the p4 message structure + * \param pPackedBuf A pointer to the buffer that the p4 message will be packed into + * \param packedBufLen The size of the buffer + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will encode a nFAPI P4 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. + * + */ +int nr_nfapi_p4_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Decodes a NFAPI P4 message header + * \param pMessageBuf A pointer to an encoded P4 message header + * \param messageBufLen The size of the encoded P4 message header + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf + */ +int nr_nfapi_p4_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Decodes a NFAPI P4 message + * \param pMessageBuf A pointer to an encoded P4 message + * \param messageBufLen The size of the encoded P4 message + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p4 message structure pointer to by pUnpackedBuf + */ +int nr_nfapi_p4_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Encodes an NFAPI P5 message to a buffer + * \param pMessageBuf A pointer to a nfapi p5 message structure + * \param messageBufLen The size of the p5 message structure + * \param pPackedBuf A pointer to the buffer that the p5 message will be packed into + * \param packedBufLen The size of the buffer + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will encode a nFAPI P5 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. + * + */ +int nr_nfapi_p5_message_pack(void *pMessageBuf, uint32_t messageBufLen, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Decodes an NFAPI P5 message header + * \param pMessageBuf A pointer to an encoded P5 message header + * \param messageBufLen The size of the encoded P5 message header + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p4_p5_message_header structure pointer to by pUnpackedBuf + */ +int nr_nfapi_p5_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Decodes a NFAPI P5 message + * \param pMessageBuf A pointer to an encoded P5 message + * \param messageBufLen The size of the encoded P5 message + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p5 message structure pointer to by pUnpackedBuf + */ +int nr_nfapi_p5_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p4_p5_codec_config_t* config); + +/*! \brief Encodes an NFAPI P7 message to a buffer + * \param pMessageBuf A pointer to a nfapi p7 message structure + * \param pPackedBuf A pointer to the buffer that the p7 message will be packed into + * \param packedBufLen The size of the buffer + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will encode a nFAPI P7 message structure pointed to be pMessageBuf into a byte stream pointed to by pPackedBuf. + * + */ +int nr_nfapi_p7_message_pack(void *pMessageBuf, void *pPackedBuf, uint32_t packedBufLen, nr_nfapi_p7_codec_config_t* config); + +/*! \brief Decodes an NFAPI P7 message header + * \param pMessageBuf A pointer to an encoded P7 message header + * \param messageBufLen The size of the encoded P7 message header + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nr_nfapi_p7_message_header structure pointer to by pUnpackedBuf + + */ +int nr_nfapi_p7_message_header_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p7_codec_config_t* config); + +/*! \brief Decodes a NFAPI P7 message + * \param pMessageBuf A pointer to an encoded P7 message + * \param messageBufLen The size of the encoded P7 message + * \param pUnpackedBuf A pointer to the nr_nfapi_message_header + * \param unpackedBufLen The size of nr_nfapi_message_header structure. + * \param config A pointer to the nfapi configuration structure + * \return 0 means success, -1 means failure. + * + * The function will decode a byte stream pointed to by pMessageBuf into a nfapi p7 message structure pointer to by pUnpackedBuf + */ +int nr_nfapi_p7_message_unpack(void *pMessageBuf, uint32_t messageBufLen, void *pUnpackedBuf, uint32_t unpackedBufLen, nr_nfapi_p7_codec_config_t* config); + +/*! \brief Calculates the checksum of a message + * + * \param buffer Pointer to the packed message + * \param len The length of the message + * \return The checksum. If there is an error the function with return -1 + */ +uint32_t nr_nfapi_p7_calculate_checksum(uint8_t* buffer, uint32_t len); + +/*! \brief Calculates & updates the checksum in the message + * + * \param buffer Pointer to the packed message + * \param len The length of the message + * \return 0 means success, -1 means failure. + */ +int nr_nfapi_p7_update_checksum(uint8_t* buffer, uint32_t len); + +/*! \brief Updates the transmition time stamp in the p7 message header + * + * \param buffer Pointer to the packed message + * \param timestamp The time stamp value + * \return 0 means success, -1 means failure. + */ +int nr_nfapi_p7_update_transmit_timestamp(uint8_t* buffer, uint32_t timestamp); + +#endif /* _NFAPI_INTERFACE_H_ */ diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c deleted file mode 100644 index 588adfbc55..0000000000 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation_avx2.c +++ /dev/null @@ -1,4034 +0,0 @@ - /* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file PHY/LTE_TRANSPORT/dlsch_llr_computation.c - * \brief Top-level routines for LLR computation of the PDSCH physical channel from 36-211, V8.6 2009-03 - * \author R. Knopp, F. Kaltenberger,A. Bhamri, S. Aubert, S. Wagner, X Jiang - * \date 2011 - * \version 0.1 - * \company Eurecom - * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr,ankit.bhamri@eurecom.fr,sebastien.aubert@eurecom.fr, sebastian.wagner@eurecom.fr - * \note - * \warning - */ - -#include "PHY/defs.h" -#include "PHY/TOOLS/defs.h" -#include "PHY/extern.h" -#include "defs.h" -#include "extern.h" -#include "PHY/sse_intrin.h" - -int16_t ones256[16] __attribute__ ((aligned(32))) = {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; - -static __m256i rho_rpi __attribute__ ((aligned(32))); -static __m256i rho_rmi __attribute__ ((aligned(32))); -static __m256i rho_rpi_1_1 __attribute__ ((aligned(32))); -static __m256i rho_rpi_1_3 __attribute__ ((aligned(32))); -static __m256i rho_rpi_1_5 __attribute__ ((aligned(32))); -static __m256i rho_rpi_1_7 __attribute__ ((aligned(32))); -static __m256i rho_rpi_3_1 __attribute__ ((aligned(32))); -static __m256i rho_rpi_3_3 __attribute__ ((aligned(32))); -static __m256i rho_rpi_3_5 __attribute__ ((aligned(32))); -static __m256i rho_rpi_3_7 __attribute__ ((aligned(32))); -static __m256i rho_rpi_5_1 __attribute__ ((aligned(32))); -static __m256i rho_rpi_5_3 __attribute__ ((aligned(32))); -static __m256i rho_rpi_5_5 __attribute__ ((aligned(32))); -static __m256i rho_rpi_5_7 __attribute__ ((aligned(32))); -static __m256i rho_rpi_7_1 __attribute__ ((aligned(32))); -static __m256i rho_rpi_7_3 __attribute__ ((aligned(32))); -static __m256i rho_rpi_7_5 __attribute__ ((aligned(32))); -static __m256i rho_rpi_7_7 __attribute__ ((aligned(32))); -static __m256i rho_rmi_1_1 __attribute__ ((aligned(32))); -static __m256i rho_rmi_1_3 __attribute__ ((aligned(32))); -static __m256i rho_rmi_1_5 __attribute__ ((aligned(32))); -static __m256i rho_rmi_1_7 __attribute__ ((aligned(32))); -static __m256i rho_rmi_3_1 __attribute__ ((aligned(32))); -static __m256i rho_rmi_3_3 __attribute__ ((aligned(32))); -static __m256i rho_rmi_3_5 __attribute__ ((aligned(32))); -static __m256i rho_rmi_3_7 __attribute__ ((aligned(32))); -static __m256i rho_rmi_5_1 __attribute__ ((aligned(32))); -static __m256i rho_rmi_5_3 __attribute__ ((aligned(32))); -static __m256i rho_rmi_5_5 __attribute__ ((aligned(32))); -static __m256i rho_rmi_5_7 __attribute__ ((aligned(32))); -static __m256i rho_rmi_7_1 __attribute__ ((aligned(32))); -static __m256i rho_rmi_7_3 __attribute__ ((aligned(32))); -static __m256i rho_rmi_7_5 __attribute__ ((aligned(32))); -static __m256i rho_rmi_7_7 __attribute__ ((aligned(32))); - -static __m256i psi_r_m7_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_m7_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_m5_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_m3_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_m1_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_p1_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_p3_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_p5_p7 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_m7 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_m5 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_m3 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_m1 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_p1 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_p3 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_p5 __attribute__ ((aligned(32))); -static __m256i psi_r_p7_p7 __attribute__ ((aligned(32))); - -static __m256i psi_i_m7_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_m7_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_m5_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_m3_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_m1_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_p1_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_p3_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_p5_p7 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_m7 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_m5 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_m3 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_m1 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_p1 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_p3 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_p5 __attribute__ ((aligned(32))); -static __m256i psi_i_p7_p7 __attribute__ ((aligned(32))); - -static __m256i a_r_m7_m7 __attribute__ ((aligned(32))); -static __m256i a_r_m7_m5 __attribute__ ((aligned(32))); -static __m256i a_r_m7_m3 __attribute__ ((aligned(32))); -static __m256i a_r_m7_m1 __attribute__ ((aligned(32))); -static __m256i a_r_m7_p1 __attribute__ ((aligned(32))); -static __m256i a_r_m7_p3 __attribute__ ((aligned(32))); -static __m256i a_r_m7_p5 __attribute__ ((aligned(32))); -static __m256i a_r_m7_p7 __attribute__ ((aligned(32))); -static __m256i a_r_m5_m7 __attribute__ ((aligned(32))); -static __m256i a_r_m5_m5 __attribute__ ((aligned(32))); -static __m256i a_r_m5_m3 __attribute__ ((aligned(32))); -static __m256i a_r_m5_m1 __attribute__ ((aligned(32))); -static __m256i a_r_m5_p1 __attribute__ ((aligned(32))); -static __m256i a_r_m5_p3 __attribute__ ((aligned(32))); -static __m256i a_r_m5_p5 __attribute__ ((aligned(32))); -static __m256i a_r_m5_p7 __attribute__ ((aligned(32))); -static __m256i a_r_m3_m7 __attribute__ ((aligned(32))); -static __m256i a_r_m3_m5 __attribute__ ((aligned(32))); -static __m256i a_r_m3_m3 __attribute__ ((aligned(32))); -static __m256i a_r_m3_m1 __attribute__ ((aligned(32))); -static __m256i a_r_m3_p1 __attribute__ ((aligned(32))); -static __m256i a_r_m3_p3 __attribute__ ((aligned(32))); -static __m256i a_r_m3_p5 __attribute__ ((aligned(32))); -static __m256i a_r_m3_p7 __attribute__ ((aligned(32))); -static __m256i a_r_m1_m7 __attribute__ ((aligned(32))); -static __m256i a_r_m1_m5 __attribute__ ((aligned(32))); -static __m256i a_r_m1_m3 __attribute__ ((aligned(32))); -static __m256i a_r_m1_m1 __attribute__ ((aligned(32))); -static __m256i a_r_m1_p1 __attribute__ ((aligned(32))); -static __m256i a_r_m1_p3 __attribute__ ((aligned(32))); -static __m256i a_r_m1_p5 __attribute__ ((aligned(32))); -static __m256i a_r_m1_p7 __attribute__ ((aligned(32))); -static __m256i a_r_p1_m7 __attribute__ ((aligned(32))); -static __m256i a_r_p1_m5 __attribute__ ((aligned(32))); -static __m256i a_r_p1_m3 __attribute__ ((aligned(32))); -static __m256i a_r_p1_m1 __attribute__ ((aligned(32))); -static __m256i a_r_p1_p1 __attribute__ ((aligned(32))); -static __m256i a_r_p1_p3 __attribute__ ((aligned(32))); -static __m256i a_r_p1_p5 __attribute__ ((aligned(32))); -static __m256i a_r_p1_p7 __attribute__ ((aligned(32))); -static __m256i a_r_p3_m7 __attribute__ ((aligned(32))); -static __m256i a_r_p3_m5 __attribute__ ((aligned(32))); -static __m256i a_r_p3_m3 __attribute__ ((aligned(32))); -static __m256i a_r_p3_m1 __attribute__ ((aligned(32))); -static __m256i a_r_p3_p1 __attribute__ ((aligned(32))); -static __m256i a_r_p3_p3 __attribute__ ((aligned(32))); -static __m256i a_r_p3_p5 __attribute__ ((aligned(32))); -static __m256i a_r_p3_p7 __attribute__ ((aligned(32))); -static __m256i a_r_p5_m7 __attribute__ ((aligned(32))); -static __m256i a_r_p5_m5 __attribute__ ((aligned(32))); -static __m256i a_r_p5_m3 __attribute__ ((aligned(32))); -static __m256i a_r_p5_m1 __attribute__ ((aligned(32))); -static __m256i a_r_p5_p1 __attribute__ ((aligned(32))); -static __m256i a_r_p5_p3 __attribute__ ((aligned(32))); -static __m256i a_r_p5_p5 __attribute__ ((aligned(32))); -static __m256i a_r_p5_p7 __attribute__ ((aligned(32))); -static __m256i a_r_p7_m7 __attribute__ ((aligned(32))); -static __m256i a_r_p7_m5 __attribute__ ((aligned(32))); -static __m256i a_r_p7_m3 __attribute__ ((aligned(32))); -static __m256i a_r_p7_m1 __attribute__ ((aligned(32))); -static __m256i a_r_p7_p1 __attribute__ ((aligned(32))); -static __m256i a_r_p7_p3 __attribute__ ((aligned(32))); -static __m256i a_r_p7_p5 __attribute__ ((aligned(32))); -static __m256i a_r_p7_p7 __attribute__ ((aligned(32))); - -static __m256i a_i_m7_m7 __attribute__ ((aligned(32))); -static __m256i a_i_m7_m5 __attribute__ ((aligned(32))); -static __m256i a_i_m7_m3 __attribute__ ((aligned(32))); -static __m256i a_i_m7_m1 __attribute__ ((aligned(32))); -static __m256i a_i_m7_p1 __attribute__ ((aligned(32))); -static __m256i a_i_m7_p3 __attribute__ ((aligned(32))); -static __m256i a_i_m7_p5 __attribute__ ((aligned(32))); -static __m256i a_i_m7_p7 __attribute__ ((aligned(32))); -static __m256i a_i_m5_m7 __attribute__ ((aligned(32))); -static __m256i a_i_m5_m5 __attribute__ ((aligned(32))); -static __m256i a_i_m5_m3 __attribute__ ((aligned(32))); -static __m256i a_i_m5_m1 __attribute__ ((aligned(32))); -static __m256i a_i_m5_p1 __attribute__ ((aligned(32))); -static __m256i a_i_m5_p3 __attribute__ ((aligned(32))); -static __m256i a_i_m5_p5 __attribute__ ((aligned(32))); -static __m256i a_i_m5_p7 __attribute__ ((aligned(32))); -static __m256i a_i_m3_m7 __attribute__ ((aligned(32))); -static __m256i a_i_m3_m5 __attribute__ ((aligned(32))); -static __m256i a_i_m3_m3 __attribute__ ((aligned(32))); -static __m256i a_i_m3_m1 __attribute__ ((aligned(32))); -static __m256i a_i_m3_p1 __attribute__ ((aligned(32))); -static __m256i a_i_m3_p3 __attribute__ ((aligned(32))); -static __m256i a_i_m3_p5 __attribute__ ((aligned(32))); -static __m256i a_i_m3_p7 __attribute__ ((aligned(32))); -static __m256i a_i_m1_m7 __attribute__ ((aligned(32))); -static __m256i a_i_m1_m5 __attribute__ ((aligned(32))); -static __m256i a_i_m1_m3 __attribute__ ((aligned(32))); -static __m256i a_i_m1_m1 __attribute__ ((aligned(32))); -static __m256i a_i_m1_p1 __attribute__ ((aligned(32))); -static __m256i a_i_m1_p3 __attribute__ ((aligned(32))); -static __m256i a_i_m1_p5 __attribute__ ((aligned(32))); -static __m256i a_i_m1_p7 __attribute__ ((aligned(32))); -static __m256i a_i_p1_m7 __attribute__ ((aligned(32))); -static __m256i a_i_p1_m5 __attribute__ ((aligned(32))); -static __m256i a_i_p1_m3 __attribute__ ((aligned(32))); -static __m256i a_i_p1_m1 __attribute__ ((aligned(32))); -static __m256i a_i_p1_p1 __attribute__ ((aligned(32))); -static __m256i a_i_p1_p3 __attribute__ ((aligned(32))); -static __m256i a_i_p1_p5 __attribute__ ((aligned(32))); -static __m256i a_i_p1_p7 __attribute__ ((aligned(32))); -static __m256i a_i_p3_m7 __attribute__ ((aligned(32))); -static __m256i a_i_p3_m5 __attribute__ ((aligned(32))); -static __m256i a_i_p3_m3 __attribute__ ((aligned(32))); -static __m256i a_i_p3_m1 __attribute__ ((aligned(32))); -static __m256i a_i_p3_p1 __attribute__ ((aligned(32))); -static __m256i a_i_p3_p3 __attribute__ ((aligned(32))); -static __m256i a_i_p3_p5 __attribute__ ((aligned(32))); -static __m256i a_i_p3_p7 __attribute__ ((aligned(32))); -static __m256i a_i_p5_m7 __attribute__ ((aligned(32))); -static __m256i a_i_p5_m5 __attribute__ ((aligned(32))); -static __m256i a_i_p5_m3 __attribute__ ((aligned(32))); -static __m256i a_i_p5_m1 __attribute__ ((aligned(32))); -static __m256i a_i_p5_p1 __attribute__ ((aligned(32))); -static __m256i a_i_p5_p3 __attribute__ ((aligned(32))); -static __m256i a_i_p5_p5 __attribute__ ((aligned(32))); -static __m256i a_i_p5_p7 __attribute__ ((aligned(32))); -static __m256i a_i_p7_m7 __attribute__ ((aligned(32))); -static __m256i a_i_p7_m5 __attribute__ ((aligned(32))); -static __m256i a_i_p7_m3 __attribute__ ((aligned(32))); -static __m256i a_i_p7_m1 __attribute__ ((aligned(32))); -static __m256i a_i_p7_p1 __attribute__ ((aligned(32))); -static __m256i a_i_p7_p3 __attribute__ ((aligned(32))); -static __m256i a_i_p7_p5 __attribute__ ((aligned(32))); -static __m256i a_i_p7_p7 __attribute__ ((aligned(32))); - -static __m256i psi_a_m7_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_m7_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_m5_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_m3_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_m1_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_p1_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_p3_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_p5_p7 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_m7 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_m5 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_m3 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_m1 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_p1 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_p3 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_p5 __attribute__ ((aligned(32))); -static __m256i psi_a_p7_p7 __attribute__ ((aligned(32))); - -static __m256i a_sq_m7_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_m7_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_m5_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_m3_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_m1_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_p1_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_p3_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_p5_p7 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_m7 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_m5 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_m3 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_m1 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_p1 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_p3 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_p5 __attribute__ ((aligned(32))); -static __m256i a_sq_p7_p7 __attribute__ ((aligned(32))); - -static __m256i bit_met_m7_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_m7_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_m5_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_m3_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_m1_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_p1_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_p3_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_p5_p7 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_m7 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_m5 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_m3 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_m1 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_p1 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_p3 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_p5 __attribute__ ((aligned(32))); -static __m256i bit_met_p7_p7 __attribute__ ((aligned(32))); - -static __m256i y0_p_1_1 __attribute__ ((aligned(32))); -static __m256i y0_p_1_3 __attribute__ ((aligned(32))); -static __m256i y0_p_1_5 __attribute__ ((aligned(32))); -static __m256i y0_p_1_7 __attribute__ ((aligned(32))); -static __m256i y0_p_3_1 __attribute__ ((aligned(32))); -static __m256i y0_p_3_3 __attribute__ ((aligned(32))); -static __m256i y0_p_3_5 __attribute__ ((aligned(32))); -static __m256i y0_p_3_7 __attribute__ ((aligned(32))); -static __m256i y0_p_5_1 __attribute__ ((aligned(32))); -static __m256i y0_p_5_3 __attribute__ ((aligned(32))); -static __m256i y0_p_5_5 __attribute__ ((aligned(32))); -static __m256i y0_p_5_7 __attribute__ ((aligned(32))); -static __m256i y0_p_7_1 __attribute__ ((aligned(32))); -static __m256i y0_p_7_3 __attribute__ ((aligned(32))); -static __m256i y0_p_7_5 __attribute__ ((aligned(32))); -static __m256i y0_p_7_7 __attribute__ ((aligned(32))); -static __m256i y0_m_1_1 __attribute__ ((aligned(32))); -static __m256i y0_m_1_3 __attribute__ ((aligned(32))); -static __m256i y0_m_1_5 __attribute__ ((aligned(32))); -static __m256i y0_m_1_7 __attribute__ ((aligned(32))); -static __m256i y0_m_3_1 __attribute__ ((aligned(32))); -static __m256i y0_m_3_3 __attribute__ ((aligned(32))); -static __m256i y0_m_3_5 __attribute__ ((aligned(32))); -static __m256i y0_m_3_7 __attribute__ ((aligned(32))); -static __m256i y0_m_5_1 __attribute__ ((aligned(32))); -static __m256i y0_m_5_3 __attribute__ ((aligned(32))); -static __m256i y0_m_5_5 __attribute__ ((aligned(32))); -static __m256i y0_m_5_7 __attribute__ ((aligned(32))); -static __m256i y0_m_7_1 __attribute__ ((aligned(32))); -static __m256i y0_m_7_3 __attribute__ ((aligned(32))); -static __m256i y0_m_7_5 __attribute__ ((aligned(32))); -static __m256i y0_m_7_7 __attribute__ ((aligned(32))); - -static __m256i xmm0 __attribute__ ((aligned(32))); -static __m256i xmm1 __attribute__ ((aligned(32))); -static __m256i xmm2 __attribute__ ((aligned(32))); -static __m256i xmm3 __attribute__ ((aligned(32))); -static __m256i xmm4 __attribute__ ((aligned(32))); -static __m256i xmm5 __attribute__ ((aligned(32))); -static __m256i xmm6 __attribute__ ((aligned(32))); -static __m256i xmm7 __attribute__ ((aligned(32))); -static __m256i xmm8 __attribute__ ((aligned(32))); - -static __m256i y0r __attribute__ ((aligned(32))); -static __m256i y0i __attribute__ ((aligned(32))); -static __m256i y1r __attribute__ ((aligned(32))); -static __m256i y1i __attribute__ ((aligned(32))); -static __m256i y2r __attribute__ ((aligned(32))); -static __m256i y2i __attribute__ ((aligned(32))); - -static __m256i logmax_num_re0 __attribute__ ((aligned(32))); -static __m256i logmax_den_re0 __attribute__ ((aligned(32))); - -static __m256i tmp_result __attribute__ ((aligned(32))); -static __m256i tmp_result2 __attribute__ ((aligned(32))); -static __m256i tmp_result3 __attribute__ ((aligned(32))); -static __m256i tmp_result4 __attribute__ ((aligned(32))); - -//============================================================================================== -// Auxiliary Makros - -// calculate interference magnitude -#define interference_abs_epi16(psi,int_ch_mag,int_mag,c1,c2) tmp_result = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result2 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result = _mm256_and_si256(tmp_result,c1); tmp_result2 = _mm256_and_si256(tmp_result2,c2); int_mag = _mm256_or_si256(tmp_result,tmp_result2); - -// calculate interference magnitude -// tmp_result = ones in shorts corr. to interval 2<=x<=4, tmp_result2 interval < 2, tmp_result3 interval 4<x<6 and tmp_result4 interval x>6 -#define interference_abs_64qam_epi16(psi,int_ch_mag,int_two_ch_mag,int_three_ch_mag,a,c1,c3,c5,c7) tmp_result = _mm256_cmpgt_epi16(int_two_ch_mag,psi); tmp_result3 = _mm256_xor_si256(tmp_result,(*(__m256i*)&ones256[0])); tmp_result2 = _mm256_cmpgt_epi16(int_ch_mag,psi); tmp_result = _mm256_xor_si256(tmp_result,tmp_result2); tmp_result4 = _mm256_cmpgt_epi16(psi,int_three_ch_mag); tmp_result3 = _mm256_xor_si256(tmp_result3,tmp_result4); tmp_result = _mm256_and_si256(tmp_result,c3); tmp_result2 = _mm256_and_si256(tmp_result2,c1); tmp_result3 = _mm256_and_si256(tmp_result3,c5); tmp_result4 = _mm256_and_si256(tmp_result4,c7); tmp_result = _mm256_or_si256(tmp_result,tmp_result2); tmp_result3 = _mm256_or_si256(tmp_result3,tmp_result4); a = _mm256_or_si256(tmp_result,tmp_result3); - -// calculates psi_a = psi_r*a_r + psi_i*a_i -#define prodsum_psi_a_epi16(psi_r,a_r,psi_i,a_i,psi_a) tmp_result = _mm256_mulhi_epi16(psi_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(psi_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); psi_a = _mm256_adds_epi16(tmp_result,tmp_result2); - -// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor -#define square_a_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2); - -// calculates a_sq = int_ch_mag*(a_r^2 + a_i^2)*scale_factor for 64-QAM -#define square_a_64qam_epi16(a_r,a_i,int_ch_mag,scale_factor,a_sq) tmp_result = _mm256_mulhi_epi16(a_r,a_r); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result = _mm256_mulhi_epi16(tmp_result,scale_factor); tmp_result = _mm256_slli_epi16(tmp_result,3); tmp_result = _mm256_mulhi_epi16(tmp_result,int_ch_mag); tmp_result = _mm256_slli_epi16(tmp_result,1); tmp_result2 = _mm256_mulhi_epi16(a_i,a_i); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,scale_factor); tmp_result2 = _mm256_slli_epi16(tmp_result2,3); tmp_result2 = _mm256_mulhi_epi16(tmp_result2,int_ch_mag); tmp_result2 = _mm256_slli_epi16(tmp_result2,1); a_sq = _mm256_adds_epi16(tmp_result,tmp_result2); - -void seperate_real_imag_parts(__m256i *out_re, - __m256i *out_im, - __m256i in0, - __m256i in1) -{ - __m256i tmp0; - __m256i tmp1; - - in0 = _mm256_shufflelo_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - in0 = _mm256_shufflehi_epi16(in0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - in0 = _mm256_shuffle_epi32(in0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - in1 = _mm256_shufflelo_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - in1 = _mm256_shufflehi_epi16(in1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - in1 = _mm256_shuffle_epi32(in1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - //in0 = [Re(0,1,2,3) Im(0,1,2,3) Re(4,5,6,7) Im(4,5,6,7)] - //in0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)] - - tmp0 = _mm256_unpacklo_epi64(in0, in1); - //axmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)] - tmp0 = _mm256_permute4x64_epi64(tmp0,0xd8); // Re(rho) - - tmp1 = _mm256_unpackhi_epi64(in0, in1); - //axmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)] - tmp1 = _mm256_permute4x64_epi64(tmp1,0xd8); // Im(rho) - - *out_re = tmp0; - *out_im = tmp1; -} - -void qam64_qam16_avx2(short *stream0_in, - short *stream1_in, - short *ch_mag, - short *ch_mag_i, - short *stream0_out, - short *rho01, - int length - ) -{ - - /* - Author: S. Wagner - Date: 31-07-12 - - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 - - Output: - stream0_out: output LLRs for 1st stream - */ - -#if defined(__x86_64__) || defined(__i386__) - - __m256i *rho01_256i = (__m256i *)rho01; - __m256i *stream0_256i_in = (__m256i *)stream0_in; - __m256i *stream1_256i_in = (__m256i *)stream1_in; - __m256i *ch_mag_256i = (__m256i *)ch_mag; - __m256i *ch_mag_256i_i = (__m256i *)ch_mag_i; - - __m256i ONE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16) - __m256i THREE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16) - __m256i FIVE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15) - __m256i SEVEN_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(5/sqrt(42)*2^15) - __m256i FORTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14 - __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14 - __m256i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15) - __m256i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14 - __m256i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15) - __m256i NINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15) - __m256i THIRTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15) - __m256i FIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(6320)); // round(5/(4*sqrt(42))*2^15) - __m256i ONE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(1264)); // round(1/(4*sqrt(42))*2^15) - __m256i ONE_OVER_SQRT_10_Q15 = _mm256_broadcastw_epi16(_mm_set1_epi16(10362)); // round(1/sqrt(10)*2^15) - __m256i THREE_OVER_SQRT_10 = _mm256_broadcastw_epi16(_mm_set1_epi16(31086)); // round(3/sqrt(10)*2^15) - __m256i SQRT_10_OVER_FOUR = _mm256_broadcastw_epi16(_mm_set1_epi16(25905)); // round(sqrt(10)/4*2^15) - - - __m256i ch_mag_int; - __m256i ch_mag_des; - __m256i ch_mag_98_over_42_with_sigma2; - __m256i ch_mag_74_over_42_with_sigma2; - __m256i ch_mag_58_over_42_with_sigma2; - __m256i ch_mag_50_over_42_with_sigma2; - __m256i ch_mag_34_over_42_with_sigma2; - __m256i ch_mag_18_over_42_with_sigma2; - __m256i ch_mag_26_over_42_with_sigma2; - __m256i ch_mag_10_over_42_with_sigma2; - __m256i ch_mag_2_over_42_with_sigma2; - __m256i y0r_one_over_sqrt_21; - __m256i y0r_three_over_sqrt_21; - __m256i y0r_five_over_sqrt_21; - __m256i y0r_seven_over_sqrt_21; - __m256i y0i_one_over_sqrt_21; - __m256i y0i_three_over_sqrt_21; - __m256i y0i_five_over_sqrt_21; - __m256i y0i_seven_over_sqrt_21; - -#elif defined(__arm__) - -#endif - int i,j; - uint32_t len256 = (length)>>3; - - for (i=0; i<len256; i+=2) { - -#if defined(__x86_64__) || defined(__i386__) - // Get rho - /* - xmm0 = rho01_128i[i]; - xmm1 = rho01_128i[i+1]; - xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)] - //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)] - xmm2 = _mm_unpacklo_epi64(xmm0,xmm1); // Re(rho) - xmm3 = _mm_unpackhi_epi64(xmm0,xmm1); // Im(rho) - */ - seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]); - - rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho) - rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho) - - // Compute the different rhos - rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); - rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); - rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); - rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); - rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); - rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); - rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); - rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); - - rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1); - rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1); - rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2); - rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2); - - xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42); - xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42); - xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42); - xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42); - xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42); - xmm7 = _mm256_slli_epi16(xmm7, 1); - xmm8 = _mm256_slli_epi16(xmm8, 2); - - rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7); - rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42); - rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7); - rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42); - xmm4 = _mm256_slli_epi16(xmm4, 1); - rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42); - xmm4 = _mm256_slli_epi16(xmm4, 2); - rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7); - - // Rearrange interfering MF output - /* - xmm0 = stream1_128i_in[i]; - xmm1 = stream1_128i_in[i+1]; - xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)] - //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)] - y1r = _mm256_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)] - y1i = _mm256_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)] - */ - - seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]); - - // Psi_r calculation from rho_rpi or rho_rmi - xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16 - xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r); - psi_r_p7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r); - psi_r_p7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r); - psi_r_p7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r); - psi_r_p7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r); - psi_r_p7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r); - psi_r_p7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r); - psi_r_p7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r); - psi_r_p7_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r); - psi_r_p5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r); - psi_r_p5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r); - psi_r_p5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r); - psi_r_p5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r); - psi_r_p5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r); - psi_r_p5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r); - psi_r_p5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r); - psi_r_p5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r); - psi_r_p3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r); - psi_r_p3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r); - psi_r_p3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r); - psi_r_p3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r); - psi_r_p3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r); - psi_r_p3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r); - psi_r_p3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r); - psi_r_p3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r); - psi_r_p1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r); - psi_r_p1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r); - psi_r_p1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r); - psi_r_p1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r); - psi_r_p1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r); - psi_r_p1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r); - psi_r_p1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r); - psi_r_p1_m7 = _mm256_abs_epi16(xmm2); - - xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r); - psi_r_m1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r); - psi_r_m1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r); - psi_r_m1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r); - psi_r_m1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r); - psi_r_m1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r); - psi_r_m1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r); - psi_r_m1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r); - psi_r_m1_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r); - psi_r_m3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r); - psi_r_m3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r); - psi_r_m3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r); - psi_r_m3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r); - psi_r_m3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r); - psi_r_m3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r); - psi_r_m3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r); - psi_r_m3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r); - psi_r_m5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r); - psi_r_m5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r); - psi_r_m5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r); - psi_r_m5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r); - psi_r_m5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r); - psi_r_m5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r); - psi_r_m5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r); - psi_r_m5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r); - psi_r_m7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r); - psi_r_m7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r); - psi_r_m7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r); - psi_r_m7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r); - psi_r_m7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r); - psi_r_m7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r); - psi_r_m7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r); - psi_r_m7_m7 = _mm256_abs_epi16(xmm2); - - // Psi_i calculation from rho_rpi or rho_rmi - xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i); - psi_i_p7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i); - psi_i_p7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i); - psi_i_p7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i); - psi_i_p7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i); - psi_i_p7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i); - psi_i_p7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i); - psi_i_p7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i); - psi_i_p7_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i); - psi_i_p5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i); - psi_i_p5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i); - psi_i_p5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i); - psi_i_p5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i); - psi_i_p5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i); - psi_i_p5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i); - psi_i_p5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i); - psi_i_p5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i); - psi_i_p3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i); - psi_i_p3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i); - psi_i_p3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i); - psi_i_p3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i); - psi_i_p3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i); - psi_i_p3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i); - psi_i_p3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i); - psi_i_p3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i); - psi_i_p1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i); - psi_i_p1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i); - psi_i_p1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i); - psi_i_p1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i); - psi_i_p1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i); - psi_i_p1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i); - psi_i_p1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i); - psi_i_p1_m7 = _mm256_abs_epi16(xmm2); - - xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i); - psi_i_m1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i); - psi_i_m1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i); - psi_i_m1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i); - psi_i_m1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i); - psi_i_m1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i); - psi_i_m1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i); - psi_i_m1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i); - psi_i_m1_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i); - psi_i_m3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i); - psi_i_m3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i); - psi_i_m3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i); - psi_i_m3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i); - psi_i_m3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i); - psi_i_m3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i); - psi_i_m3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i); - psi_i_m3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i); - psi_i_m5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i); - psi_i_m5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i); - psi_i_m5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i); - psi_i_m5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i); - psi_i_m5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i); - psi_i_m5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i); - psi_i_m5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i); - psi_i_m5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i); - psi_i_m7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i); - psi_i_m7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i); - psi_i_m7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i); - psi_i_m7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i); - psi_i_m7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i); - psi_i_m7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i); - psi_i_m7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i); - psi_i_m7_m7 = _mm256_abs_epi16(xmm2); - -/* - // Rearrange desired MF output - xmm0 = stream0_128i_in[i]; - xmm1 = stream0_128i_in[i+1]; - xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)] - //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)] - y0r = _mm256_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)] - y0i = _mm256_unpackhi_epi64(xmm0,xmm1); -*/ - seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]); - - /* - // Rearrange desired channel magnitudes - xmm2 = ch_mag_128i[i]; // = [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2)]*(2/sqrt(10)) - xmm3 = ch_mag_128i[i+1]; // = [|h|^2(3),|h|^2(3),|h|^2(4),|h|^2(4)]*(2/sqrt(10)) - xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - ch_mag_des = _mm256_unpacklo_epi64(xmm2,xmm3); - */ - - seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]); - - // Rearrange interfering channel magnitudes - /* - xmm2 = ch_mag_128i_i[i]; - xmm3 = ch_mag_128i_i[i+1]; - xmm2 = _mm256_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm256_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm256_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm256_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - ch_mag_int = _mm256_unpacklo_epi64(xmm2,xmm3); - */ - - seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]); - - y0r_one_over_sqrt_21 = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42); - y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42); - y0r_five_over_sqrt_21 = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42); - y0r_five_over_sqrt_21 = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1); - y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42); - y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14 - - y0i_one_over_sqrt_21 = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42); - y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42); - y0i_five_over_sqrt_21 = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42); - y0i_five_over_sqrt_21 = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1); - y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42); - y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14 - - y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - - y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - - interference_abs_epi16(psi_r_p7_p7, ch_mag_int, a_r_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_p5, ch_mag_int, a_r_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_p3, ch_mag_int, a_r_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_p1, ch_mag_int, a_r_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_m1, ch_mag_int, a_r_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_m3, ch_mag_int, a_r_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_m5, ch_mag_int, a_r_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p7_m7, ch_mag_int, a_r_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_p7, ch_mag_int, a_r_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_p5, ch_mag_int, a_r_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_p3, ch_mag_int, a_r_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_p1, ch_mag_int, a_r_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_m1, ch_mag_int, a_r_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_m3, ch_mag_int, a_r_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_m5, ch_mag_int, a_r_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p5_m7, ch_mag_int, a_r_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p7, ch_mag_int, a_r_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p5, ch_mag_int, a_r_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p3, ch_mag_int, a_r_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_p1, ch_mag_int, a_r_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m1, ch_mag_int, a_r_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m3, ch_mag_int, a_r_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m5, ch_mag_int, a_r_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p3_m7, ch_mag_int, a_r_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_p7, ch_mag_int, a_r_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_p5, ch_mag_int, a_r_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_p3, ch_mag_int, a_r_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_p1, ch_mag_int, a_r_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m1, ch_mag_int, a_r_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m3, ch_mag_int, a_r_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m5, ch_mag_int, a_r_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_p1_m7, ch_mag_int, a_r_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p7, ch_mag_int, a_r_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p5, ch_mag_int, a_r_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p3, ch_mag_int, a_r_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_p1, ch_mag_int, a_r_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m1, ch_mag_int, a_r_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m3, ch_mag_int, a_r_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m5, ch_mag_int, a_r_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m1_m7, ch_mag_int, a_r_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p7, ch_mag_int, a_r_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p5, ch_mag_int, a_r_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p3, ch_mag_int, a_r_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_p1, ch_mag_int, a_r_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m1, ch_mag_int, a_r_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m3, ch_mag_int, a_r_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m5, ch_mag_int, a_r_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m3_m7, ch_mag_int, a_r_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_p7, ch_mag_int, a_r_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_p5, ch_mag_int, a_r_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_p3, ch_mag_int, a_r_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_p1, ch_mag_int, a_r_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_m1, ch_mag_int, a_r_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_m3, ch_mag_int, a_r_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_m5, ch_mag_int, a_r_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m5_m7, ch_mag_int, a_r_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_p7, ch_mag_int, a_r_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_p5, ch_mag_int, a_r_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_p3, ch_mag_int, a_r_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_p1, ch_mag_int, a_r_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_m1, ch_mag_int, a_r_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_m3, ch_mag_int, a_r_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_m5, ch_mag_int, a_r_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_r_m7_m7, ch_mag_int, a_r_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - - interference_abs_epi16(psi_i_p7_p7, ch_mag_int, a_i_p7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_p5, ch_mag_int, a_i_p7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_p3, ch_mag_int, a_i_p7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_p1, ch_mag_int, a_i_p7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_m1, ch_mag_int, a_i_p7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_m3, ch_mag_int, a_i_p7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_m5, ch_mag_int, a_i_p7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p7_m7, ch_mag_int, a_i_p7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_p7, ch_mag_int, a_i_p5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_p5, ch_mag_int, a_i_p5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_p3, ch_mag_int, a_i_p5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_p1, ch_mag_int, a_i_p5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_m1, ch_mag_int, a_i_p5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_m3, ch_mag_int, a_i_p5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_m5, ch_mag_int, a_i_p5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p5_m7, ch_mag_int, a_i_p5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p7, ch_mag_int, a_i_p3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p5, ch_mag_int, a_i_p3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p3, ch_mag_int, a_i_p3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_p1, ch_mag_int, a_i_p3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m1, ch_mag_int, a_i_p3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m3, ch_mag_int, a_i_p3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m5, ch_mag_int, a_i_p3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p3_m7, ch_mag_int, a_i_p3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p7, ch_mag_int, a_i_p1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p5, ch_mag_int, a_i_p1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p3, ch_mag_int, a_i_p1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_p1, ch_mag_int, a_i_p1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m1, ch_mag_int, a_i_p1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m3, ch_mag_int, a_i_p1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m5, ch_mag_int, a_i_p1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_p1_m7, ch_mag_int, a_i_p1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p7, ch_mag_int, a_i_m1_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p5, ch_mag_int, a_i_m1_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p3, ch_mag_int, a_i_m1_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_p1, ch_mag_int, a_i_m1_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m1, ch_mag_int, a_i_m1_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m3, ch_mag_int, a_i_m1_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m5, ch_mag_int, a_i_m1_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m1_m7, ch_mag_int, a_i_m1_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p7, ch_mag_int, a_i_m3_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p5, ch_mag_int, a_i_m3_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p3, ch_mag_int, a_i_m3_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_p1, ch_mag_int, a_i_m3_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m1, ch_mag_int, a_i_m3_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m3, ch_mag_int, a_i_m3_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m5, ch_mag_int, a_i_m3_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m3_m7, ch_mag_int, a_i_m3_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_p7, ch_mag_int, a_i_m5_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_p5, ch_mag_int, a_i_m5_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_p3, ch_mag_int, a_i_m5_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_p1, ch_mag_int, a_i_m5_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_m1, ch_mag_int, a_i_m5_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_m3, ch_mag_int, a_i_m5_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_m5, ch_mag_int, a_i_m5_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m5_m7, ch_mag_int, a_i_m5_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_p7, ch_mag_int, a_i_m7_p7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_p5, ch_mag_int, a_i_m7_p5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_p3, ch_mag_int, a_i_m7_p3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_p1, ch_mag_int, a_i_m7_p1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_m1, ch_mag_int, a_i_m7_m1, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_m3, ch_mag_int, a_i_m7_m3, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_m5, ch_mag_int, a_i_m7_m5, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - interference_abs_epi16(psi_i_m7_m7, ch_mag_int, a_i_m7_m7, ONE_OVER_SQRT_10_Q15, THREE_OVER_SQRT_10); - - // Calculation of a group of two terms in the bit metric involving product of psi and interference - prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7); - prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5); - prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3); - prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1); - prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1); - prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3); - prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5); - prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7); - prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7); - prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5); - prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3); - prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1); - prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1); - prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3); - prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5); - prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7); - prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7); - prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5); - prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5); - prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7); - prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7); - prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5); - prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5); - prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7); - prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7); - prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5); - prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5); - prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7); - prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7); - prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5); - prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); - prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5); - prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7); - prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7); - prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5); - prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3); - prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1); - prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1); - prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3); - prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5); - prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7); - prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7); - prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5); - prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3); - prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1); - prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1); - prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3); - prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5); - prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7); - - // Calculation of a group of two terms in the bit metric involving squares of interference - square_a_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p7); - square_a_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p5); - square_a_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p3); - square_a_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_p1); - square_a_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m1); - square_a_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m3); - square_a_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m5); - square_a_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p7_m7); - square_a_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p7); - square_a_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p5); - square_a_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p3); - square_a_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_p1); - square_a_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m1); - square_a_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m3); - square_a_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m5); - square_a_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p5_m7); - square_a_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p7); - square_a_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p5); - square_a_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p3); - square_a_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_p1); - square_a_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m1); - square_a_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m3); - square_a_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m5); - square_a_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p3_m7); - square_a_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p7); - square_a_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p5); - square_a_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p3); - square_a_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_p1); - square_a_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m1); - square_a_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m3); - square_a_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m5); - square_a_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_p1_m7); - square_a_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p7); - square_a_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p5); - square_a_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p3); - square_a_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_p1); - square_a_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m1); - square_a_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m3); - square_a_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m5); - square_a_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m1_m7); - square_a_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p7); - square_a_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p5); - square_a_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p3); - square_a_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_p1); - square_a_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m1); - square_a_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m3); - square_a_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m5); - square_a_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m3_m7); - square_a_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p7); - square_a_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p5); - square_a_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p3); - square_a_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_p1); - square_a_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m1); - square_a_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m3); - square_a_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m5); - square_a_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m5_m7); - square_a_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p7); - square_a_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p5); - square_a_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p3); - square_a_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_p1); - square_a_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m1); - square_a_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m3); - square_a_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m5); - square_a_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_10_OVER_FOUR, a_sq_m7_m7); - - // Computing different multiples of ||h0||^2 - // x=1, y=1 - ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42); - ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1); - // x=1, y=3 - ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42); - ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1); - // x=1, x=5 - ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42); - ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1); - // x=1, y=7 - ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1); - // x=3, y=3 - ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42); - ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1); - // x=3, y=5 - ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42); - ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1); - // x=3, y=7 - ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42); - ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2); - // x=5, y=5 - ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1); - // x=5, y=7 - ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42); - ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2); - // x=7, y=7 - ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42); - ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2); - - // Computing Metrics - xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7); - bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5); - bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3); - bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1); - bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1); - bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3); - bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5); - bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7); - bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7); - bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5); - bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3); - bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1); - bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1); - bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3); - bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5); - bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7); - bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7); - bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5); - bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3); - bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1); - bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1); - bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3); - bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5); - bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7); - bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7); - bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5); - bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3); - bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1); - bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1); - bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3); - bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5); - bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7); - bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7); - bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5); - bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3); - bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1); - bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1); - bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3); - bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5); - bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7); - bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7); - bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5); - bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3); - bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1); - bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1); - bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3); - bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5); - bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7); - bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7); - bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5); - bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3); - bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1); - bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1); - bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3); - bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5); - bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7); - bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7); - bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5); - bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3); - bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1); - bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1); - bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3); - bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5); - bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7); - bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - // Detection for 1st bit (LTE mapping) - // bit = 1 - xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5); - xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1); - xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3); - xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5); - xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1); - xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5); - xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1); - xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5); - xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3); - xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - // bit = 0 - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5); - xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1); - xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3); - xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1); - xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3); - xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1); - xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3); - xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5); - xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3); - xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 2nd bit (LTE mapping) - // bit = 1 - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - // bit = 0 - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 3rd bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 4th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - - // Detection for 5th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 6th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs - // RE 1 - j = 48*i; - stream0_out[j + 0] = ((short *)&y0r)[0]; - stream0_out[j + 1] = ((short *)&y1r)[0]; - stream0_out[j + 2] = ((short *)&y2r)[0]; - stream0_out[j + 3] = ((short *)&y0i)[0]; - stream0_out[j + 4] = ((short *)&y1i)[0]; - stream0_out[j + 5] = ((short *)&y2i)[0]; - // RE 2 - stream0_out[j + 6] = ((short *)&y0r)[1]; - stream0_out[j + 7] = ((short *)&y1r)[1]; - stream0_out[j + 8] = ((short *)&y2r)[1]; - stream0_out[j + 9] = ((short *)&y0i)[1]; - stream0_out[j + 10] = ((short *)&y1i)[1]; - stream0_out[j + 11] = ((short *)&y2i)[1]; - // RE 3 - stream0_out[j + 12] = ((short *)&y0r)[2]; - stream0_out[j + 13] = ((short *)&y1r)[2]; - stream0_out[j + 14] = ((short *)&y2r)[2]; - stream0_out[j + 15] = ((short *)&y0i)[2]; - stream0_out[j + 16] = ((short *)&y1i)[2]; - stream0_out[j + 17] = ((short *)&y2i)[2]; - // RE 4 - stream0_out[j + 18] = ((short *)&y0r)[3]; - stream0_out[j + 19] = ((short *)&y1r)[3]; - stream0_out[j + 20] = ((short *)&y2r)[3]; - stream0_out[j + 21] = ((short *)&y0i)[3]; - stream0_out[j + 22] = ((short *)&y1i)[3]; - stream0_out[j + 23] = ((short *)&y2i)[3]; - // RE 5 - stream0_out[j + 24] = ((short *)&y0r)[4]; - stream0_out[j + 25] = ((short *)&y1r)[4]; - stream0_out[j + 26] = ((short *)&y2r)[4]; - stream0_out[j + 27] = ((short *)&y0i)[4]; - stream0_out[j + 28] = ((short *)&y1i)[4]; - stream0_out[j + 29] = ((short *)&y2i)[4]; - // RE 6 - stream0_out[j + 30] = ((short *)&y0r)[5]; - stream0_out[j + 31] = ((short *)&y1r)[5]; - stream0_out[j + 32] = ((short *)&y2r)[5]; - stream0_out[j + 33] = ((short *)&y0i)[5]; - stream0_out[j + 34] = ((short *)&y1i)[5]; - stream0_out[j + 35] = ((short *)&y2i)[5]; - // RE 7 - stream0_out[j + 36] = ((short *)&y0r)[6]; - stream0_out[j + 37] = ((short *)&y1r)[6]; - stream0_out[j + 38] = ((short *)&y2r)[6]; - stream0_out[j + 39] = ((short *)&y0i)[6]; - stream0_out[j + 40] = ((short *)&y1i)[6]; - stream0_out[j + 41] = ((short *)&y2i)[6]; - // RE 8 - stream0_out[j + 42] = ((short *)&y0r)[7]; - stream0_out[j + 43] = ((short *)&y1r)[7]; - stream0_out[j + 44] = ((short *)&y2r)[7]; - stream0_out[j + 45] = ((short *)&y0i)[7]; - stream0_out[j + 46] = ((short *)&y1i)[7]; - stream0_out[j + 47] = ((short *)&y2i)[7]; - - // RE 9 - stream0_out[j + 48] = ((short *)&y0r)[8]; - stream0_out[j + 49] = ((short *)&y1r)[8]; - stream0_out[j + 50] = ((short *)&y2r)[8]; - stream0_out[j + 51] = ((short *)&y0i)[8]; - stream0_out[j + 52] = ((short *)&y1i)[8]; - stream0_out[j + 53] = ((short *)&y2i)[8]; - // RE 10 - stream0_out[j + 54] = ((short *)&y0r)[9]; - stream0_out[j + 55] = ((short *)&y1r)[9]; - stream0_out[j + 56] = ((short *)&y2r)[9]; - stream0_out[j + 57] = ((short *)&y0i)[9]; - stream0_out[j + 58] = ((short *)&y1i)[9]; - stream0_out[j + 59] = ((short *)&y2i)[9]; - // RE 11 - stream0_out[j + 60] = ((short *)&y0r)[10]; - stream0_out[j + 61] = ((short *)&y1r)[10]; - stream0_out[j + 62] = ((short *)&y2r)[10]; - stream0_out[j + 63] = ((short *)&y0i)[10]; - stream0_out[j + 64] = ((short *)&y1i)[10]; - stream0_out[j + 65] = ((short *)&y2i)[10]; - // RE 12 - stream0_out[j + 66] = ((short *)&y0r)[11]; - stream0_out[j + 67] = ((short *)&y1r)[11]; - stream0_out[j + 68] = ((short *)&y2r)[11]; - stream0_out[j + 69] = ((short *)&y0i)[11]; - stream0_out[j + 70] = ((short *)&y1i)[11]; - stream0_out[j + 71] = ((short *)&y2i)[11]; - // RE 13 - stream0_out[j + 72] = ((short *)&y0r)[12]; - stream0_out[j + 73] = ((short *)&y1r)[12]; - stream0_out[j + 74] = ((short *)&y2r)[12]; - stream0_out[j + 75] = ((short *)&y0i)[12]; - stream0_out[j + 76] = ((short *)&y1i)[12]; - stream0_out[j + 77] = ((short *)&y2i)[12]; - // RE 14 - stream0_out[j + 78] = ((short *)&y0r)[13]; - stream0_out[j + 79] = ((short *)&y1r)[13]; - stream0_out[j + 80] = ((short *)&y2r)[13]; - stream0_out[j + 81] = ((short *)&y0i)[13]; - stream0_out[j + 82] = ((short *)&y1i)[13]; - stream0_out[j + 83] = ((short *)&y2i)[13]; - // RE 15 - stream0_out[j + 84] = ((short *)&y0r)[14]; - stream0_out[j + 85] = ((short *)&y1r)[14]; - stream0_out[j + 86] = ((short *)&y2r)[14]; - stream0_out[j + 87] = ((short *)&y0i)[14]; - stream0_out[j + 88] = ((short *)&y1i)[14]; - stream0_out[j + 89] = ((short *)&y2i)[14]; - // RE 16 - stream0_out[j + 90] = ((short *)&y0r)[15]; - stream0_out[j + 91] = ((short *)&y1r)[15]; - stream0_out[j + 92] = ((short *)&y2r)[15]; - stream0_out[j + 93] = ((short *)&y0i)[15]; - stream0_out[j + 94] = ((short *)&y1i)[15]; - stream0_out[j + 95] = ((short *)&y2i)[15]; - -#elif defined(__arm__) - -#endif - } - -#if defined(__x86_64__) || defined(__i386__) - _mm_empty(); - _m_empty(); -#endif - -} - -void qam64_qam64_avx2(int32_t *stream0_in, - int32_t *stream1_in, - int32_t *ch_mag, - int32_t *ch_mag_i, - int16_t *stream0_out, - int32_t *rho01, - int length - ) -{ - - /* - Author: S. Wagner - Date: 28-02-17 - - Input: - stream0_in: MF filter for 1st stream, i.e., y0=h0'*y - stream1_in: MF filter for 2nd stream, i.e., y1=h1'*y - ch_mag: 4*h0/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - ch_mag_i: 4*h1/sqrt(42), [Re0 Im0 Re1 Im1] s.t. Im0=Re0, Im1=Re1, etc - rho01: Channel cross correlation, i.e., h1'*h0 - - Output: - stream0_out: output LLRs for 1st stream - */ - -#if defined(__x86_64__) || defined(__i386__) - - __m256i *rho01_256i = (__m256i *)rho01; - __m256i *stream0_256i_in = (__m256i *)stream0_in; - __m256i *stream1_256i_in = (__m256i *)stream1_in; - __m256i *ch_mag_256i = (__m256i *)ch_mag; - __m256i *ch_mag_256i_i = (__m256i *)ch_mag_i; - - __m256i ONE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(10112)); // round(1/sqrt(42)*2^16) - __m256i THREE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30337)); // round(3/sqrt(42)*2^16) - __m256i FIVE_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(25281)); // round(5/sqrt(42)*2^15) - __m256i SEVEN_OVER_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(17697)); // round(7/sqrt(42)*2^14) Q2.14 - __m256i ONE_OVER_SQRT_2 = _mm256_broadcastw_epi16(_mm_set1_epi16(23170)); // round(1/sqrt(2)*2^15) - __m256i ONE_OVER_SQRT_2_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(3575)); // round(1/sqrt(2*42)*2^15) - __m256i THREE_OVER_SQRT_2_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(10726)); // round(3/sqrt(2*42)*2^15) - __m256i FIVE_OVER_SQRT_2_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(17876)); // round(5/sqrt(2*42)*2^15) - __m256i SEVEN_OVER_SQRT_2_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(25027)); // round(7/sqrt(2*42)*2^15) - __m256i FORTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(30969)); // round(49/(4*sqrt(42))*2^14), Q2.14 - __m256i THIRTYSEVEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(23385)); // round(37/(4*sqrt(42))*2^14), Q2.14 - __m256i TWENTYFIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(31601)); // round(25/(4*sqrt(42))*2^15) - __m256i TWENTYNINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(18329)); // round(29/(4*sqrt(42))*2^15), Q2.14 - __m256i SEVENTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(21489)); // round(17/(4*sqrt(42))*2^15) - __m256i NINE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(11376)); // round(9/(4*sqrt(42))*2^15) - __m256i THIRTEEN_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(16433)); // round(13/(4*sqrt(42))*2^15) - __m256i FIVE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(6320)); // round(5/(4*sqrt(42))*2^15) - __m256i ONE_OVER_FOUR_SQRT_42 = _mm256_broadcastw_epi16(_mm_set1_epi16(1264)); // round(1/(4*sqrt(42))*2^15) - __m256i SQRT_42_OVER_FOUR = _mm256_broadcastw_epi16(_mm_set1_epi16(13272)); // round(sqrt(42)/4*2^13), Q3.12 - - __m256i ch_mag_des; - __m256i ch_mag_int; - __m256i ch_mag_98_over_42_with_sigma2; - __m256i ch_mag_74_over_42_with_sigma2; - __m256i ch_mag_58_over_42_with_sigma2; - __m256i ch_mag_50_over_42_with_sigma2; - __m256i ch_mag_34_over_42_with_sigma2; - __m256i ch_mag_18_over_42_with_sigma2; - __m256i ch_mag_26_over_42_with_sigma2; - __m256i ch_mag_10_over_42_with_sigma2; - __m256i ch_mag_2_over_42_with_sigma2; - __m256i y0r_one_over_sqrt_21; - __m256i y0r_three_over_sqrt_21; - __m256i y0r_five_over_sqrt_21; - __m256i y0r_seven_over_sqrt_21; - __m256i y0i_one_over_sqrt_21; - __m256i y0i_three_over_sqrt_21; - __m256i y0i_five_over_sqrt_21; - __m256i y0i_seven_over_sqrt_21; - __m256i ch_mag_int_with_sigma2; - __m256i two_ch_mag_int_with_sigma2; - __m256i three_ch_mag_int_with_sigma2; -#elif defined(__arm__) - -#endif - - int i,j; - uint32_t len256 = (length)>>3; - - for (i=0; i<len256; i+=2) { - -#if defined(__x86_64__) || defined(__i386__) - - // Get rho - /* - xmm0 = rho01_256i[i]; - xmm1 = rho01_256i[i+1]; - xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - //xmm0 = [Re(0,1,2,3) Im(0,1,2,3) Re(4,5,6,7) Im(4,5,6,7)] - //xmm0 = [Re(8,9,10,11) Im(8,9,10,11) Re(12,13,14,15) Im(12,13,14,15)] - - xmm2 = _mm256_unpacklo_epi64(xmm0, xmm1); - //xmm2 = [Re(0,1,2,3) Re(8,9,10,11) Re(4,5,6,7) Re(12,13,14,15)] - xmm2 = _mm256_permute4x64_epi64(xmm2,0xd8); // Re(rho) - - xmm3 = _mm256_unpackhi_epi64(xmm0, xmm1); - //xmm3 = [Im(0,1,2,3) Im(8,9,10,11) Im(4,5,6,7) Im(12,13,14,15)] - xmm3 = _mm256_permute4x64_epi64(xmm3,0xd8); // Im(rho) - */ - - seperate_real_imag_parts(&xmm2, &xmm3, rho01_256i[i], rho01_256i[i+1]); - - rho_rpi = _mm256_adds_epi16(xmm2,xmm3); // rho = Re(rho) + Im(rho) - rho_rmi = _mm256_subs_epi16(xmm2,xmm3); // rho* = Re(rho) - Im(rho) - - // Compute the different rhos - rho_rpi_1_1 = _mm256_mulhi_epi16(rho_rpi, ONE_OVER_SQRT_42); - rho_rmi_1_1 = _mm256_mulhi_epi16(rho_rmi, ONE_OVER_SQRT_42); - rho_rpi_3_3 = _mm256_mulhi_epi16(rho_rpi, THREE_OVER_SQRT_42); - rho_rmi_3_3 = _mm256_mulhi_epi16(rho_rmi, THREE_OVER_SQRT_42); - rho_rpi_5_5 = _mm256_mulhi_epi16(rho_rpi, FIVE_OVER_SQRT_42); - rho_rmi_5_5 = _mm256_mulhi_epi16(rho_rmi, FIVE_OVER_SQRT_42); - rho_rpi_7_7 = _mm256_mulhi_epi16(rho_rpi, SEVEN_OVER_SQRT_42); - rho_rmi_7_7 = _mm256_mulhi_epi16(rho_rmi, SEVEN_OVER_SQRT_42); - - rho_rpi_5_5 = _mm256_slli_epi16(rho_rpi_5_5, 1); - rho_rmi_5_5 = _mm256_slli_epi16(rho_rmi_5_5, 1); - rho_rpi_7_7 = _mm256_slli_epi16(rho_rpi_7_7, 2); - rho_rmi_7_7 = _mm256_slli_epi16(rho_rmi_7_7, 2); - - xmm4 = _mm256_mulhi_epi16(xmm2, ONE_OVER_SQRT_42); - xmm5 = _mm256_mulhi_epi16(xmm3, ONE_OVER_SQRT_42); - xmm6 = _mm256_mulhi_epi16(xmm3, THREE_OVER_SQRT_42); - xmm7 = _mm256_mulhi_epi16(xmm3, FIVE_OVER_SQRT_42); - xmm8 = _mm256_mulhi_epi16(xmm3, SEVEN_OVER_SQRT_42); - xmm7 = _mm256_slli_epi16(xmm7, 1); - xmm8 = _mm256_slli_epi16(xmm8, 2); - - rho_rpi_1_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_1_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_1_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_1_5 = _mm256_subs_epi16(xmm4, xmm7); - rho_rpi_1_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_1_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, THREE_OVER_SQRT_42); - rho_rpi_3_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_3_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_3_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_3_5 = _mm256_subs_epi16(xmm4, xmm7); - rho_rpi_3_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_3_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, FIVE_OVER_SQRT_42); - xmm4 = _mm256_slli_epi16(xmm4, 1); - rho_rpi_5_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_5_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_5_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_5_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_5_7 = _mm256_adds_epi16(xmm4, xmm8); - rho_rmi_5_7 = _mm256_subs_epi16(xmm4, xmm8); - - xmm4 = _mm256_mulhi_epi16(xmm2, SEVEN_OVER_SQRT_42); - xmm4 = _mm256_slli_epi16(xmm4, 2); - rho_rpi_7_1 = _mm256_adds_epi16(xmm4, xmm5); - rho_rmi_7_1 = _mm256_subs_epi16(xmm4, xmm5); - rho_rpi_7_3 = _mm256_adds_epi16(xmm4, xmm6); - rho_rmi_7_3 = _mm256_subs_epi16(xmm4, xmm6); - rho_rpi_7_5 = _mm256_adds_epi16(xmm4, xmm7); - rho_rmi_7_5 = _mm256_subs_epi16(xmm4, xmm7); - - // Rearrange interfering MF output - /* - xmm0 = stream1_256i_in[i]; - xmm1 = stream1_256i_in[i+1]; - xmm0 = _mm256_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm256_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - xmm1 = _mm256_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm256_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - - y1r = _mm256_unpacklo_epi64(xmm0, xmm1); - y1r = _mm256_permute4x64_epi64(y1r,0xd8); // Re(y1) - - y1i = _mm256_unpackhi_epi64(xmm0, xmm1); - y1i = _mm256_permute4x64_epi64(y1i,0xd8); // Im(y1) - */ - - seperate_real_imag_parts(&y1r, &y1i, stream1_256i_in[i], stream1_256i_in[i+1]); - - // Psi_r calculation from rho_rpi or rho_rmi - xmm0 = _mm256_broadcastw_epi16(_mm_set1_epi16(0));// ZERO for abs_pi16 - xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1r); - - psi_r_p7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1r); - psi_r_p7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1r); - psi_r_p7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1r); - psi_r_p7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1r); - psi_r_p7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1r); - psi_r_p7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1r); - psi_r_p7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1r); - psi_r_p7_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1r); - psi_r_p5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1r); - psi_r_p5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1r); - psi_r_p5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1r); - psi_r_p5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1r); - psi_r_p5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1r); - psi_r_p5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1r); - psi_r_p5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1r); - psi_r_p5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1r); - psi_r_p3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1r); - psi_r_p3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1r); - psi_r_p3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1r); - psi_r_p3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1r); - psi_r_p3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1r); - psi_r_p3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1r); - psi_r_p3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1r); - psi_r_p3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1r); - psi_r_p1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1r); - psi_r_p1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1r); - psi_r_p1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1r); - psi_r_p1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1r); - psi_r_p1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1r); - psi_r_p1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1r); - psi_r_p1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1r); - psi_r_p1_m7 = _mm256_abs_epi16(xmm2); - - xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1r); - psi_r_m1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1r); - psi_r_m1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1r); - psi_r_m1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1r); - psi_r_m1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1r); - psi_r_m1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1r); - psi_r_m1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1r); - psi_r_m1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1r); - psi_r_m1_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1r); - psi_r_m3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1r); - psi_r_m3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1r); - psi_r_m3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1r); - psi_r_m3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1r); - psi_r_m3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1r); - psi_r_m3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1r); - psi_r_m3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1r); - psi_r_m3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1r); - psi_r_m5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1r); - psi_r_m5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1r); - psi_r_m5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1r); - psi_r_m5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1r); - psi_r_m5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1r); - psi_r_m5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1r); - psi_r_m5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1r); - psi_r_m5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1r); - psi_r_m7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1r); - psi_r_m7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1r); - psi_r_m7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1r); - psi_r_m7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1r); - psi_r_m7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1r); - psi_r_m7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1r); - psi_r_m7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1r); - psi_r_m7_m7 = _mm256_abs_epi16(xmm2); - - // Psi_i calculation from rho_rpi or rho_rmi - xmm2 = _mm256_subs_epi16(rho_rmi_7_7, y1i); - psi_i_p7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_7, y1i); - psi_i_p7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_7, y1i); - psi_i_p7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_7, y1i); - psi_i_p7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_7, y1i); - psi_i_p7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_7, y1i); - psi_i_p7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_7, y1i); - psi_i_p7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_7, y1i); - psi_i_p7_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_5, y1i); - psi_i_p5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_5, y1i); - psi_i_p5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_5, y1i); - psi_i_p5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_5, y1i); - psi_i_p5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_5, y1i); - psi_i_p5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_5, y1i); - psi_i_p5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_5, y1i); - psi_i_p5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_5, y1i); - psi_i_p5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_3, y1i); - psi_i_p3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_3, y1i); - psi_i_p3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_3, y1i); - psi_i_p3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_3, y1i); - psi_i_p3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_3, y1i); - psi_i_p3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_3, y1i); - psi_i_p3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_3, y1i); - psi_i_p3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_3, y1i); - psi_i_p3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_7_1, y1i); - psi_i_p1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_5_1, y1i); - psi_i_p1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_3_1, y1i); - psi_i_p1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rmi_1_1, y1i); - psi_i_p1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_1_1, y1i); - psi_i_p1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_3_1, y1i); - psi_i_p1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_5_1, y1i); - psi_i_p1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rpi_7_1, y1i); - psi_i_p1_m7 = _mm256_abs_epi16(xmm2); - - xmm2 = _mm256_subs_epi16(rho_rpi_7_1, y1i); - psi_i_m1_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_1, y1i); - psi_i_m1_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_1, y1i); - psi_i_m1_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_1, y1i); - psi_i_m1_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_1, y1i); - psi_i_m1_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_1, y1i); - psi_i_m1_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_1, y1i); - psi_i_m1_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_1, y1i); - psi_i_m1_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_3, y1i); - psi_i_m3_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_3, y1i); - psi_i_m3_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_3, y1i); - psi_i_m3_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_3, y1i); - psi_i_m3_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_3, y1i); - psi_i_m3_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_3, y1i); - psi_i_m3_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_3, y1i); - psi_i_m3_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_3, y1i); - psi_i_m3_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_5, y1i); - psi_i_m5_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_5, y1i); - psi_i_m5_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_5, y1i); - psi_i_m5_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_5, y1i); - psi_i_m5_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_5, y1i); - psi_i_m5_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_5, y1i); - psi_i_m5_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_5, y1i); - psi_i_m5_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_5, y1i); - psi_i_m5_m7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_7_7, y1i); - psi_i_m7_p7 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_5_7, y1i); - psi_i_m7_p5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_3_7, y1i); - psi_i_m7_p3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_subs_epi16(rho_rpi_1_7, y1i); - psi_i_m7_p1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_1_7, y1i); - psi_i_m7_m1 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_3_7, y1i); - psi_i_m7_m3 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_5_7, y1i); - psi_i_m7_m5 = _mm256_abs_epi16(xmm2); - xmm2 = _mm256_adds_epi16(rho_rmi_7_7, y1i); - psi_i_m7_m7 = _mm256_abs_epi16(xmm2); - - /* - // Rearrange desired MF output - xmm0 = stream0_256i_in[i]; - xmm1 = stream0_256i_in[i+1]; - xmm0 = _mm_shufflelo_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm_shufflehi_epi16(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm0 = _mm_shuffle_epi32(xmm0,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shufflelo_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shufflehi_epi16(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm1 = _mm_shuffle_epi32(xmm1,0xd8); //_MM_SHUFFLE(0,2,1,3)); - //xmm0 = [Re(0,1) Re(2,3) Im(0,1) Im(2,3)] - //xmm1 = [Re(4,5) Re(6,7) Im(4,5) Im(6,7)] - y0r = _mm_unpacklo_epi64(xmm0,xmm1); // = [y0r(1),y0r(2),y0r(3),y0r(4)] - y0i = _mm_unpackhi_epi64(xmm0,xmm1); - */ - seperate_real_imag_parts(&y0r, &y0i, stream0_256i_in[i], stream0_256i_in[i+1]); - - // Rearrange desired channel magnitudes - // [|h|^2(1),|h|^2(1),|h|^2(2),|h|^2(2),...,,|h|^2(7),|h|^2(7)]*(2/sqrt(10)) - /* - xmm2 = ch_mag_256i[i]; - xmm3 = ch_mag_256i[i+1]; - xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - ch_mag_des = _mm_unpacklo_epi64(xmm2,xmm3); - */ - // xmm2 is dummy variable that contains the same values as ch_mag_des - seperate_real_imag_parts(&ch_mag_des, &xmm2, ch_mag_256i[i], ch_mag_256i[i+1]); - - - // Rearrange interfering channel magnitudes - /* - xmm2 = ch_mag_256i_i[i]; - xmm3 = ch_mag_256i_i[i+1]; - xmm2 = _mm_shufflelo_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm_shufflehi_epi16(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm2 = _mm_shuffle_epi32(xmm2,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shufflelo_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shufflehi_epi16(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - xmm3 = _mm_shuffle_epi32(xmm3,0xd8); //_MM_SHUFFLE(0,2,1,3)); - ch_mag_int = _mm_unpacklo_epi64(xmm2,xmm3); - */ - seperate_real_imag_parts(&ch_mag_int, &xmm2, ch_mag_256i_i[i], ch_mag_256i_i[i+1]); - - y0r_one_over_sqrt_21 = _mm256_mulhi_epi16(y0r, ONE_OVER_SQRT_42); - y0r_three_over_sqrt_21 = _mm256_mulhi_epi16(y0r, THREE_OVER_SQRT_42); - y0r_five_over_sqrt_21 = _mm256_mulhi_epi16(y0r, FIVE_OVER_SQRT_42); - y0r_five_over_sqrt_21 = _mm256_slli_epi16(y0r_five_over_sqrt_21, 1); - y0r_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0r, SEVEN_OVER_SQRT_42); - y0r_seven_over_sqrt_21 = _mm256_slli_epi16(y0r_seven_over_sqrt_21, 2); // Q2.14 - - y0i_one_over_sqrt_21 = _mm256_mulhi_epi16(y0i, ONE_OVER_SQRT_42); - y0i_three_over_sqrt_21 = _mm256_mulhi_epi16(y0i, THREE_OVER_SQRT_42); - y0i_five_over_sqrt_21 = _mm256_mulhi_epi16(y0i, FIVE_OVER_SQRT_42); - y0i_five_over_sqrt_21 = _mm256_slli_epi16(y0i_five_over_sqrt_21, 1); - y0i_seven_over_sqrt_21 = _mm256_mulhi_epi16(y0i, SEVEN_OVER_SQRT_42); - y0i_seven_over_sqrt_21 = _mm256_slli_epi16(y0i_seven_over_sqrt_21, 2); // Q2.14 - - - y0_p_7_1 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_7_3 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_7_5 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_7_7 = _mm256_adds_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_5_1 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_5_3 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_5_5 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_5_7 = _mm256_adds_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_3_1 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_3_3 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_3_5 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_3_7 = _mm256_adds_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_p_1_1 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - y0_p_1_3 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - y0_p_1_5 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - y0_p_1_7 = _mm256_adds_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - - y0_m_1_1 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_1_3 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_1_5 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_1_7 = _mm256_subs_epi16(y0r_one_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_3_1 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_3_3 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_3_5 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_3_7 = _mm256_subs_epi16(y0r_three_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_5_1 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_5_3 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_5_5 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_5_7 = _mm256_subs_epi16(y0r_five_over_sqrt_21, y0i_seven_over_sqrt_21); - y0_m_7_1 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_one_over_sqrt_21); - y0_m_7_3 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_three_over_sqrt_21); - y0_m_7_5 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_five_over_sqrt_21); - y0_m_7_7 = _mm256_subs_epi16(y0r_seven_over_sqrt_21, y0i_seven_over_sqrt_21); - - // Detection of interference term - ch_mag_int_with_sigma2 = _mm256_srai_epi16(ch_mag_int, 1); // *2 - two_ch_mag_int_with_sigma2 = ch_mag_int; // *4 - three_ch_mag_int_with_sigma2 = _mm256_adds_epi16(ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2); // *6 - - interference_abs_64qam_epi16(psi_r_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_r_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_r_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - - interference_abs_64qam_epi16(psi_i_p7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_p1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_p1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m1_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m1_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m3_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m3_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m5_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m5_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_p1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_p1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m1, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m1, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m3, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m3, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m5, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m5, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - interference_abs_64qam_epi16(psi_i_m7_m7, ch_mag_int_with_sigma2, two_ch_mag_int_with_sigma2, three_ch_mag_int_with_sigma2, a_i_m7_m7, ONE_OVER_SQRT_2_42, THREE_OVER_SQRT_2_42, FIVE_OVER_SQRT_2_42, - SEVEN_OVER_SQRT_2_42); - - // Calculation of a group of two terms in the bit metric involving product of psi and interference - prodsum_psi_a_epi16(psi_r_p7_p7, a_r_p7_p7, psi_i_p7_p7, a_i_p7_p7, psi_a_p7_p7); - prodsum_psi_a_epi16(psi_r_p7_p5, a_r_p7_p5, psi_i_p7_p5, a_i_p7_p5, psi_a_p7_p5); - prodsum_psi_a_epi16(psi_r_p7_p3, a_r_p7_p3, psi_i_p7_p3, a_i_p7_p3, psi_a_p7_p3); - prodsum_psi_a_epi16(psi_r_p7_p1, a_r_p7_p1, psi_i_p7_p1, a_i_p7_p1, psi_a_p7_p1); - prodsum_psi_a_epi16(psi_r_p7_m1, a_r_p7_m1, psi_i_p7_m1, a_i_p7_m1, psi_a_p7_m1); - prodsum_psi_a_epi16(psi_r_p7_m3, a_r_p7_m3, psi_i_p7_m3, a_i_p7_m3, psi_a_p7_m3); - prodsum_psi_a_epi16(psi_r_p7_m5, a_r_p7_m5, psi_i_p7_m5, a_i_p7_m5, psi_a_p7_m5); - prodsum_psi_a_epi16(psi_r_p7_m7, a_r_p7_m7, psi_i_p7_m7, a_i_p7_m7, psi_a_p7_m7); - prodsum_psi_a_epi16(psi_r_p5_p7, a_r_p5_p7, psi_i_p5_p7, a_i_p5_p7, psi_a_p5_p7); - prodsum_psi_a_epi16(psi_r_p5_p5, a_r_p5_p5, psi_i_p5_p5, a_i_p5_p5, psi_a_p5_p5); - prodsum_psi_a_epi16(psi_r_p5_p3, a_r_p5_p3, psi_i_p5_p3, a_i_p5_p3, psi_a_p5_p3); - prodsum_psi_a_epi16(psi_r_p5_p1, a_r_p5_p1, psi_i_p5_p1, a_i_p5_p1, psi_a_p5_p1); - prodsum_psi_a_epi16(psi_r_p5_m1, a_r_p5_m1, psi_i_p5_m1, a_i_p5_m1, psi_a_p5_m1); - prodsum_psi_a_epi16(psi_r_p5_m3, a_r_p5_m3, psi_i_p5_m3, a_i_p5_m3, psi_a_p5_m3); - prodsum_psi_a_epi16(psi_r_p5_m5, a_r_p5_m5, psi_i_p5_m5, a_i_p5_m5, psi_a_p5_m5); - prodsum_psi_a_epi16(psi_r_p5_m7, a_r_p5_m7, psi_i_p5_m7, a_i_p5_m7, psi_a_p5_m7); - prodsum_psi_a_epi16(psi_r_p3_p7, a_r_p3_p7, psi_i_p3_p7, a_i_p3_p7, psi_a_p3_p7); - prodsum_psi_a_epi16(psi_r_p3_p5, a_r_p3_p5, psi_i_p3_p5, a_i_p3_p5, psi_a_p3_p5); - prodsum_psi_a_epi16(psi_r_p3_p3, a_r_p3_p3, psi_i_p3_p3, a_i_p3_p3, psi_a_p3_p3); - prodsum_psi_a_epi16(psi_r_p3_p1, a_r_p3_p1, psi_i_p3_p1, a_i_p3_p1, psi_a_p3_p1); - prodsum_psi_a_epi16(psi_r_p3_m1, a_r_p3_m1, psi_i_p3_m1, a_i_p3_m1, psi_a_p3_m1); - prodsum_psi_a_epi16(psi_r_p3_m3, a_r_p3_m3, psi_i_p3_m3, a_i_p3_m3, psi_a_p3_m3); - prodsum_psi_a_epi16(psi_r_p3_m5, a_r_p3_m5, psi_i_p3_m5, a_i_p3_m5, psi_a_p3_m5); - prodsum_psi_a_epi16(psi_r_p3_m7, a_r_p3_m7, psi_i_p3_m7, a_i_p3_m7, psi_a_p3_m7); - prodsum_psi_a_epi16(psi_r_p1_p7, a_r_p1_p7, psi_i_p1_p7, a_i_p1_p7, psi_a_p1_p7); - prodsum_psi_a_epi16(psi_r_p1_p5, a_r_p1_p5, psi_i_p1_p5, a_i_p1_p5, psi_a_p1_p5); - prodsum_psi_a_epi16(psi_r_p1_p3, a_r_p1_p3, psi_i_p1_p3, a_i_p1_p3, psi_a_p1_p3); - prodsum_psi_a_epi16(psi_r_p1_p1, a_r_p1_p1, psi_i_p1_p1, a_i_p1_p1, psi_a_p1_p1); - prodsum_psi_a_epi16(psi_r_p1_m1, a_r_p1_m1, psi_i_p1_m1, a_i_p1_m1, psi_a_p1_m1); - prodsum_psi_a_epi16(psi_r_p1_m3, a_r_p1_m3, psi_i_p1_m3, a_i_p1_m3, psi_a_p1_m3); - prodsum_psi_a_epi16(psi_r_p1_m5, a_r_p1_m5, psi_i_p1_m5, a_i_p1_m5, psi_a_p1_m5); - prodsum_psi_a_epi16(psi_r_p1_m7, a_r_p1_m7, psi_i_p1_m7, a_i_p1_m7, psi_a_p1_m7); - prodsum_psi_a_epi16(psi_r_m1_p7, a_r_m1_p7, psi_i_m1_p7, a_i_m1_p7, psi_a_m1_p7); - prodsum_psi_a_epi16(psi_r_m1_p5, a_r_m1_p5, psi_i_m1_p5, a_i_m1_p5, psi_a_m1_p5); - prodsum_psi_a_epi16(psi_r_m1_p3, a_r_m1_p3, psi_i_m1_p3, a_i_m1_p3, psi_a_m1_p3); - prodsum_psi_a_epi16(psi_r_m1_p1, a_r_m1_p1, psi_i_m1_p1, a_i_m1_p1, psi_a_m1_p1); - prodsum_psi_a_epi16(psi_r_m1_m1, a_r_m1_m1, psi_i_m1_m1, a_i_m1_m1, psi_a_m1_m1); - prodsum_psi_a_epi16(psi_r_m1_m3, a_r_m1_m3, psi_i_m1_m3, a_i_m1_m3, psi_a_m1_m3); - prodsum_psi_a_epi16(psi_r_m1_m5, a_r_m1_m5, psi_i_m1_m5, a_i_m1_m5, psi_a_m1_m5); - prodsum_psi_a_epi16(psi_r_m1_m7, a_r_m1_m7, psi_i_m1_m7, a_i_m1_m7, psi_a_m1_m7); - prodsum_psi_a_epi16(psi_r_m3_p7, a_r_m3_p7, psi_i_m3_p7, a_i_m3_p7, psi_a_m3_p7); - prodsum_psi_a_epi16(psi_r_m3_p5, a_r_m3_p5, psi_i_m3_p5, a_i_m3_p5, psi_a_m3_p5); - prodsum_psi_a_epi16(psi_r_m3_p3, a_r_m3_p3, psi_i_m3_p3, a_i_m3_p3, psi_a_m3_p3); - prodsum_psi_a_epi16(psi_r_m3_p1, a_r_m3_p1, psi_i_m3_p1, a_i_m3_p1, psi_a_m3_p1); - prodsum_psi_a_epi16(psi_r_m3_m1, a_r_m3_m1, psi_i_m3_m1, a_i_m3_m1, psi_a_m3_m1); - prodsum_psi_a_epi16(psi_r_m3_m3, a_r_m3_m3, psi_i_m3_m3, a_i_m3_m3, psi_a_m3_m3); - prodsum_psi_a_epi16(psi_r_m3_m5, a_r_m3_m5, psi_i_m3_m5, a_i_m3_m5, psi_a_m3_m5); - prodsum_psi_a_epi16(psi_r_m3_m7, a_r_m3_m7, psi_i_m3_m7, a_i_m3_m7, psi_a_m3_m7); - prodsum_psi_a_epi16(psi_r_m5_p7, a_r_m5_p7, psi_i_m5_p7, a_i_m5_p7, psi_a_m5_p7); - prodsum_psi_a_epi16(psi_r_m5_p5, a_r_m5_p5, psi_i_m5_p5, a_i_m5_p5, psi_a_m5_p5); - prodsum_psi_a_epi16(psi_r_m5_p3, a_r_m5_p3, psi_i_m5_p3, a_i_m5_p3, psi_a_m5_p3); - prodsum_psi_a_epi16(psi_r_m5_p1, a_r_m5_p1, psi_i_m5_p1, a_i_m5_p1, psi_a_m5_p1); - prodsum_psi_a_epi16(psi_r_m5_m1, a_r_m5_m1, psi_i_m5_m1, a_i_m5_m1, psi_a_m5_m1); - prodsum_psi_a_epi16(psi_r_m5_m3, a_r_m5_m3, psi_i_m5_m3, a_i_m5_m3, psi_a_m5_m3); - prodsum_psi_a_epi16(psi_r_m5_m5, a_r_m5_m5, psi_i_m5_m5, a_i_m5_m5, psi_a_m5_m5); - prodsum_psi_a_epi16(psi_r_m5_m7, a_r_m5_m7, psi_i_m5_m7, a_i_m5_m7, psi_a_m5_m7); - prodsum_psi_a_epi16(psi_r_m7_p7, a_r_m7_p7, psi_i_m7_p7, a_i_m7_p7, psi_a_m7_p7); - prodsum_psi_a_epi16(psi_r_m7_p5, a_r_m7_p5, psi_i_m7_p5, a_i_m7_p5, psi_a_m7_p5); - prodsum_psi_a_epi16(psi_r_m7_p3, a_r_m7_p3, psi_i_m7_p3, a_i_m7_p3, psi_a_m7_p3); - prodsum_psi_a_epi16(psi_r_m7_p1, a_r_m7_p1, psi_i_m7_p1, a_i_m7_p1, psi_a_m7_p1); - prodsum_psi_a_epi16(psi_r_m7_m1, a_r_m7_m1, psi_i_m7_m1, a_i_m7_m1, psi_a_m7_m1); - prodsum_psi_a_epi16(psi_r_m7_m3, a_r_m7_m3, psi_i_m7_m3, a_i_m7_m3, psi_a_m7_m3); - prodsum_psi_a_epi16(psi_r_m7_m5, a_r_m7_m5, psi_i_m7_m5, a_i_m7_m5, psi_a_m7_m5); - prodsum_psi_a_epi16(psi_r_m7_m7, a_r_m7_m7, psi_i_m7_m7, a_i_m7_m7, psi_a_m7_m7); - - // Multiply by sqrt(2) - psi_a_p7_p7 = _mm256_mulhi_epi16(psi_a_p7_p7, ONE_OVER_SQRT_2); - psi_a_p7_p7 = _mm256_slli_epi16(psi_a_p7_p7, 2); - psi_a_p7_p5 = _mm256_mulhi_epi16(psi_a_p7_p5, ONE_OVER_SQRT_2); - psi_a_p7_p5 = _mm256_slli_epi16(psi_a_p7_p5, 2); - psi_a_p7_p3 = _mm256_mulhi_epi16(psi_a_p7_p3, ONE_OVER_SQRT_2); - psi_a_p7_p3 = _mm256_slli_epi16(psi_a_p7_p3, 2); - psi_a_p7_p1 = _mm256_mulhi_epi16(psi_a_p7_p1, ONE_OVER_SQRT_2); - psi_a_p7_p1 = _mm256_slli_epi16(psi_a_p7_p1, 2); - psi_a_p7_m1 = _mm256_mulhi_epi16(psi_a_p7_m1, ONE_OVER_SQRT_2); - psi_a_p7_m1 = _mm256_slli_epi16(psi_a_p7_m1, 2); - psi_a_p7_m3 = _mm256_mulhi_epi16(psi_a_p7_m3, ONE_OVER_SQRT_2); - psi_a_p7_m3 = _mm256_slli_epi16(psi_a_p7_m3, 2); - psi_a_p7_m5 = _mm256_mulhi_epi16(psi_a_p7_m5, ONE_OVER_SQRT_2); - psi_a_p7_m5 = _mm256_slli_epi16(psi_a_p7_m5, 2); - psi_a_p7_m7 = _mm256_mulhi_epi16(psi_a_p7_m7, ONE_OVER_SQRT_2); - psi_a_p7_m7 = _mm256_slli_epi16(psi_a_p7_m7, 2); - psi_a_p5_p7 = _mm256_mulhi_epi16(psi_a_p5_p7, ONE_OVER_SQRT_2); - psi_a_p5_p7 = _mm256_slli_epi16(psi_a_p5_p7, 2); - psi_a_p5_p5 = _mm256_mulhi_epi16(psi_a_p5_p5, ONE_OVER_SQRT_2); - psi_a_p5_p5 = _mm256_slli_epi16(psi_a_p5_p5, 2); - psi_a_p5_p3 = _mm256_mulhi_epi16(psi_a_p5_p3, ONE_OVER_SQRT_2); - psi_a_p5_p3 = _mm256_slli_epi16(psi_a_p5_p3, 2); - psi_a_p5_p1 = _mm256_mulhi_epi16(psi_a_p5_p1, ONE_OVER_SQRT_2); - psi_a_p5_p1 = _mm256_slli_epi16(psi_a_p5_p1, 2); - psi_a_p5_m1 = _mm256_mulhi_epi16(psi_a_p5_m1, ONE_OVER_SQRT_2); - psi_a_p5_m1 = _mm256_slli_epi16(psi_a_p5_m1, 2); - psi_a_p5_m3 = _mm256_mulhi_epi16(psi_a_p5_m3, ONE_OVER_SQRT_2); - psi_a_p5_m3 = _mm256_slli_epi16(psi_a_p5_m3, 2); - psi_a_p5_m5 = _mm256_mulhi_epi16(psi_a_p5_m5, ONE_OVER_SQRT_2); - psi_a_p5_m5 = _mm256_slli_epi16(psi_a_p5_m5, 2); - psi_a_p5_m7 = _mm256_mulhi_epi16(psi_a_p5_m7, ONE_OVER_SQRT_2); - psi_a_p5_m7 = _mm256_slli_epi16(psi_a_p5_m7, 2); - psi_a_p3_p7 = _mm256_mulhi_epi16(psi_a_p3_p7, ONE_OVER_SQRT_2); - psi_a_p3_p7 = _mm256_slli_epi16(psi_a_p3_p7, 2); - psi_a_p3_p5 = _mm256_mulhi_epi16(psi_a_p3_p5, ONE_OVER_SQRT_2); - psi_a_p3_p5 = _mm256_slli_epi16(psi_a_p3_p5, 2); - psi_a_p3_p3 = _mm256_mulhi_epi16(psi_a_p3_p3, ONE_OVER_SQRT_2); - psi_a_p3_p3 = _mm256_slli_epi16(psi_a_p3_p3, 2); - psi_a_p3_p1 = _mm256_mulhi_epi16(psi_a_p3_p1, ONE_OVER_SQRT_2); - psi_a_p3_p1 = _mm256_slli_epi16(psi_a_p3_p1, 2); - psi_a_p3_m1 = _mm256_mulhi_epi16(psi_a_p3_m1, ONE_OVER_SQRT_2); - psi_a_p3_m1 = _mm256_slli_epi16(psi_a_p3_m1, 2); - psi_a_p3_m3 = _mm256_mulhi_epi16(psi_a_p3_m3, ONE_OVER_SQRT_2); - psi_a_p3_m3 = _mm256_slli_epi16(psi_a_p3_m3, 2); - psi_a_p3_m5 = _mm256_mulhi_epi16(psi_a_p3_m5, ONE_OVER_SQRT_2); - psi_a_p3_m5 = _mm256_slli_epi16(psi_a_p3_m5, 2); - psi_a_p3_m7 = _mm256_mulhi_epi16(psi_a_p3_m7, ONE_OVER_SQRT_2); - psi_a_p3_m7 = _mm256_slli_epi16(psi_a_p3_m7, 2); - psi_a_p1_p7 = _mm256_mulhi_epi16(psi_a_p1_p7, ONE_OVER_SQRT_2); - psi_a_p1_p7 = _mm256_slli_epi16(psi_a_p1_p7, 2); - psi_a_p1_p5 = _mm256_mulhi_epi16(psi_a_p1_p5, ONE_OVER_SQRT_2); - psi_a_p1_p5 = _mm256_slli_epi16(psi_a_p1_p5, 2); - psi_a_p1_p3 = _mm256_mulhi_epi16(psi_a_p1_p3, ONE_OVER_SQRT_2); - psi_a_p1_p3 = _mm256_slli_epi16(psi_a_p1_p3, 2); - psi_a_p1_p1 = _mm256_mulhi_epi16(psi_a_p1_p1, ONE_OVER_SQRT_2); - psi_a_p1_p1 = _mm256_slli_epi16(psi_a_p1_p1, 2); - psi_a_p1_m1 = _mm256_mulhi_epi16(psi_a_p1_m1, ONE_OVER_SQRT_2); - psi_a_p1_m1 = _mm256_slli_epi16(psi_a_p1_m1, 2); - psi_a_p1_m3 = _mm256_mulhi_epi16(psi_a_p1_m3, ONE_OVER_SQRT_2); - psi_a_p1_m3 = _mm256_slli_epi16(psi_a_p1_m3, 2); - psi_a_p1_m5 = _mm256_mulhi_epi16(psi_a_p1_m5, ONE_OVER_SQRT_2); - psi_a_p1_m5 = _mm256_slli_epi16(psi_a_p1_m5, 2); - psi_a_p1_m7 = _mm256_mulhi_epi16(psi_a_p1_m7, ONE_OVER_SQRT_2); - psi_a_p1_m7 = _mm256_slli_epi16(psi_a_p1_m7, 2); - psi_a_m1_p7 = _mm256_mulhi_epi16(psi_a_m1_p7, ONE_OVER_SQRT_2); - psi_a_m1_p7 = _mm256_slli_epi16(psi_a_m1_p7, 2); - psi_a_m1_p5 = _mm256_mulhi_epi16(psi_a_m1_p5, ONE_OVER_SQRT_2); - psi_a_m1_p5 = _mm256_slli_epi16(psi_a_m1_p5, 2); - psi_a_m1_p3 = _mm256_mulhi_epi16(psi_a_m1_p3, ONE_OVER_SQRT_2); - psi_a_m1_p3 = _mm256_slli_epi16(psi_a_m1_p3, 2); - psi_a_m1_p1 = _mm256_mulhi_epi16(psi_a_m1_p1, ONE_OVER_SQRT_2); - psi_a_m1_p1 = _mm256_slli_epi16(psi_a_m1_p1, 2); - psi_a_m1_m1 = _mm256_mulhi_epi16(psi_a_m1_m1, ONE_OVER_SQRT_2); - psi_a_m1_m1 = _mm256_slli_epi16(psi_a_m1_m1, 2); - psi_a_m1_m3 = _mm256_mulhi_epi16(psi_a_m1_m3, ONE_OVER_SQRT_2); - psi_a_m1_m3 = _mm256_slli_epi16(psi_a_m1_m3, 2); - psi_a_m1_m5 = _mm256_mulhi_epi16(psi_a_m1_m5, ONE_OVER_SQRT_2); - psi_a_m1_m5 = _mm256_slli_epi16(psi_a_m1_m5, 2); - psi_a_m1_m7 = _mm256_mulhi_epi16(psi_a_m1_m7, ONE_OVER_SQRT_2); - psi_a_m1_m7 = _mm256_slli_epi16(psi_a_m1_m7, 2); - psi_a_m3_p7 = _mm256_mulhi_epi16(psi_a_m3_p7, ONE_OVER_SQRT_2); - psi_a_m3_p7 = _mm256_slli_epi16(psi_a_m3_p7, 2); - psi_a_m3_p5 = _mm256_mulhi_epi16(psi_a_m3_p5, ONE_OVER_SQRT_2); - psi_a_m3_p5 = _mm256_slli_epi16(psi_a_m3_p5, 2); - psi_a_m3_p3 = _mm256_mulhi_epi16(psi_a_m3_p3, ONE_OVER_SQRT_2); - psi_a_m3_p3 = _mm256_slli_epi16(psi_a_m3_p3, 2); - psi_a_m3_p1 = _mm256_mulhi_epi16(psi_a_m3_p1, ONE_OVER_SQRT_2); - psi_a_m3_p1 = _mm256_slli_epi16(psi_a_m3_p1, 2); - psi_a_m3_m1 = _mm256_mulhi_epi16(psi_a_m3_m1, ONE_OVER_SQRT_2); - psi_a_m3_m1 = _mm256_slli_epi16(psi_a_m3_m1, 2); - psi_a_m3_m3 = _mm256_mulhi_epi16(psi_a_m3_m3, ONE_OVER_SQRT_2); - psi_a_m3_m3 = _mm256_slli_epi16(psi_a_m3_m3, 2); - psi_a_m3_m5 = _mm256_mulhi_epi16(psi_a_m3_m5, ONE_OVER_SQRT_2); - psi_a_m3_m5 = _mm256_slli_epi16(psi_a_m3_m5, 2); - psi_a_m3_m7 = _mm256_mulhi_epi16(psi_a_m3_m7, ONE_OVER_SQRT_2); - psi_a_m3_m7 = _mm256_slli_epi16(psi_a_m3_m7, 2); - psi_a_m5_p7 = _mm256_mulhi_epi16(psi_a_m5_p7, ONE_OVER_SQRT_2); - psi_a_m5_p7 = _mm256_slli_epi16(psi_a_m5_p7, 2); - psi_a_m5_p5 = _mm256_mulhi_epi16(psi_a_m5_p5, ONE_OVER_SQRT_2); - psi_a_m5_p5 = _mm256_slli_epi16(psi_a_m5_p5, 2); - psi_a_m5_p3 = _mm256_mulhi_epi16(psi_a_m5_p3, ONE_OVER_SQRT_2); - psi_a_m5_p3 = _mm256_slli_epi16(psi_a_m5_p3, 2); - psi_a_m5_p1 = _mm256_mulhi_epi16(psi_a_m5_p1, ONE_OVER_SQRT_2); - psi_a_m5_p1 = _mm256_slli_epi16(psi_a_m5_p1, 2); - psi_a_m5_m1 = _mm256_mulhi_epi16(psi_a_m5_m1, ONE_OVER_SQRT_2); - psi_a_m5_m1 = _mm256_slli_epi16(psi_a_m5_m1, 2); - psi_a_m5_m3 = _mm256_mulhi_epi16(psi_a_m5_m3, ONE_OVER_SQRT_2); - psi_a_m5_m3 = _mm256_slli_epi16(psi_a_m5_m3, 2); - psi_a_m5_m5 = _mm256_mulhi_epi16(psi_a_m5_m5, ONE_OVER_SQRT_2); - psi_a_m5_m5 = _mm256_slli_epi16(psi_a_m5_m5, 2); - psi_a_m5_m7 = _mm256_mulhi_epi16(psi_a_m5_m7, ONE_OVER_SQRT_2); - psi_a_m5_m7 = _mm256_slli_epi16(psi_a_m5_m7, 2); - psi_a_m7_p7 = _mm256_mulhi_epi16(psi_a_m7_p7, ONE_OVER_SQRT_2); - psi_a_m7_p7 = _mm256_slli_epi16(psi_a_m7_p7, 2); - psi_a_m7_p5 = _mm256_mulhi_epi16(psi_a_m7_p5, ONE_OVER_SQRT_2); - psi_a_m7_p5 = _mm256_slli_epi16(psi_a_m7_p5, 2); - psi_a_m7_p3 = _mm256_mulhi_epi16(psi_a_m7_p3, ONE_OVER_SQRT_2); - psi_a_m7_p3 = _mm256_slli_epi16(psi_a_m7_p3, 2); - psi_a_m7_p1 = _mm256_mulhi_epi16(psi_a_m7_p1, ONE_OVER_SQRT_2); - psi_a_m7_p1 = _mm256_slli_epi16(psi_a_m7_p1, 2); - psi_a_m7_m1 = _mm256_mulhi_epi16(psi_a_m7_m1, ONE_OVER_SQRT_2); - psi_a_m7_m1 = _mm256_slli_epi16(psi_a_m7_m1, 2); - psi_a_m7_m3 = _mm256_mulhi_epi16(psi_a_m7_m3, ONE_OVER_SQRT_2); - psi_a_m7_m3 = _mm256_slli_epi16(psi_a_m7_m3, 2); - psi_a_m7_m5 = _mm256_mulhi_epi16(psi_a_m7_m5, ONE_OVER_SQRT_2); - psi_a_m7_m5 = _mm256_slli_epi16(psi_a_m7_m5, 2); - psi_a_m7_m7 = _mm256_mulhi_epi16(psi_a_m7_m7, ONE_OVER_SQRT_2); - psi_a_m7_m7 = _mm256_slli_epi16(psi_a_m7_m7, 2); - - // Calculation of a group of two terms in the bit metric involving squares of interference - square_a_64qam_epi16(a_r_p7_p7, a_i_p7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p7); - square_a_64qam_epi16(a_r_p7_p5, a_i_p7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p5); - square_a_64qam_epi16(a_r_p7_p3, a_i_p7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p3); - square_a_64qam_epi16(a_r_p7_p1, a_i_p7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_p1); - square_a_64qam_epi16(a_r_p7_m1, a_i_p7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m1); - square_a_64qam_epi16(a_r_p7_m3, a_i_p7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m3); - square_a_64qam_epi16(a_r_p7_m5, a_i_p7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m5); - square_a_64qam_epi16(a_r_p7_m7, a_i_p7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p7_m7); - square_a_64qam_epi16(a_r_p5_p7, a_i_p5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p7); - square_a_64qam_epi16(a_r_p5_p5, a_i_p5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p5); - square_a_64qam_epi16(a_r_p5_p3, a_i_p5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p3); - square_a_64qam_epi16(a_r_p5_p1, a_i_p5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_p1); - square_a_64qam_epi16(a_r_p5_m1, a_i_p5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m1); - square_a_64qam_epi16(a_r_p5_m3, a_i_p5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m3); - square_a_64qam_epi16(a_r_p5_m5, a_i_p5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m5); - square_a_64qam_epi16(a_r_p5_m7, a_i_p5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p5_m7); - square_a_64qam_epi16(a_r_p3_p7, a_i_p3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p7); - square_a_64qam_epi16(a_r_p3_p5, a_i_p3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p5); - square_a_64qam_epi16(a_r_p3_p3, a_i_p3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p3); - square_a_64qam_epi16(a_r_p3_p1, a_i_p3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_p1); - square_a_64qam_epi16(a_r_p3_m1, a_i_p3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m1); - square_a_64qam_epi16(a_r_p3_m3, a_i_p3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m3); - square_a_64qam_epi16(a_r_p3_m5, a_i_p3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m5); - square_a_64qam_epi16(a_r_p3_m7, a_i_p3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p3_m7); - square_a_64qam_epi16(a_r_p1_p7, a_i_p1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p7); - square_a_64qam_epi16(a_r_p1_p5, a_i_p1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p5); - square_a_64qam_epi16(a_r_p1_p3, a_i_p1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p3); - square_a_64qam_epi16(a_r_p1_p1, a_i_p1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_p1); - square_a_64qam_epi16(a_r_p1_m1, a_i_p1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m1); - square_a_64qam_epi16(a_r_p1_m3, a_i_p1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m3); - square_a_64qam_epi16(a_r_p1_m5, a_i_p1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m5); - square_a_64qam_epi16(a_r_p1_m7, a_i_p1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_p1_m7); - square_a_64qam_epi16(a_r_m1_p7, a_i_m1_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p7); - square_a_64qam_epi16(a_r_m1_p5, a_i_m1_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p5); - square_a_64qam_epi16(a_r_m1_p3, a_i_m1_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p3); - square_a_64qam_epi16(a_r_m1_p1, a_i_m1_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_p1); - square_a_64qam_epi16(a_r_m1_m1, a_i_m1_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m1); - square_a_64qam_epi16(a_r_m1_m3, a_i_m1_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m3); - square_a_64qam_epi16(a_r_m1_m5, a_i_m1_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m5); - square_a_64qam_epi16(a_r_m1_m7, a_i_m1_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m1_m7); - square_a_64qam_epi16(a_r_m3_p7, a_i_m3_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p7); - square_a_64qam_epi16(a_r_m3_p5, a_i_m3_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p5); - square_a_64qam_epi16(a_r_m3_p3, a_i_m3_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p3); - square_a_64qam_epi16(a_r_m3_p1, a_i_m3_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_p1); - square_a_64qam_epi16(a_r_m3_m1, a_i_m3_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m1); - square_a_64qam_epi16(a_r_m3_m3, a_i_m3_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m3); - square_a_64qam_epi16(a_r_m3_m5, a_i_m3_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m5); - square_a_64qam_epi16(a_r_m3_m7, a_i_m3_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m3_m7); - square_a_64qam_epi16(a_r_m5_p7, a_i_m5_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p7); - square_a_64qam_epi16(a_r_m5_p5, a_i_m5_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p5); - square_a_64qam_epi16(a_r_m5_p3, a_i_m5_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p3); - square_a_64qam_epi16(a_r_m5_p1, a_i_m5_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_p1); - square_a_64qam_epi16(a_r_m5_m1, a_i_m5_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m1); - square_a_64qam_epi16(a_r_m5_m3, a_i_m5_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m3); - square_a_64qam_epi16(a_r_m5_m5, a_i_m5_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m5); - square_a_64qam_epi16(a_r_m5_m7, a_i_m5_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m5_m7); - square_a_64qam_epi16(a_r_m7_p7, a_i_m7_p7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p7); - square_a_64qam_epi16(a_r_m7_p5, a_i_m7_p5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p5); - square_a_64qam_epi16(a_r_m7_p3, a_i_m7_p3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p3); - square_a_64qam_epi16(a_r_m7_p1, a_i_m7_p1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_p1); - square_a_64qam_epi16(a_r_m7_m1, a_i_m7_m1, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m1); - square_a_64qam_epi16(a_r_m7_m3, a_i_m7_m3, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m3); - square_a_64qam_epi16(a_r_m7_m5, a_i_m7_m5, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m5); - square_a_64qam_epi16(a_r_m7_m7, a_i_m7_m7, ch_mag_int, SQRT_42_OVER_FOUR, a_sq_m7_m7); - - // Computing different multiples of ||h0||^2 - // x=1, y=1 - ch_mag_2_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,ONE_OVER_FOUR_SQRT_42); - ch_mag_2_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_2_over_42_with_sigma2,1); - // x=1, y=3 - ch_mag_10_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FIVE_OVER_FOUR_SQRT_42); - ch_mag_10_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_10_over_42_with_sigma2,1); - // x=1, x=5 - ch_mag_26_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTEEN_OVER_FOUR_SQRT_42); - ch_mag_26_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_26_over_42_with_sigma2,1); - // x=1, y=7 - ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1); - // x=3, y=3 - ch_mag_18_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,NINE_OVER_FOUR_SQRT_42); - ch_mag_18_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_18_over_42_with_sigma2,1); - // x=3, y=5 - ch_mag_34_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,SEVENTEEN_OVER_FOUR_SQRT_42); - ch_mag_34_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_34_over_42_with_sigma2,1); - // x=3, y=7 - ch_mag_58_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYNINE_OVER_FOUR_SQRT_42); - ch_mag_58_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_58_over_42_with_sigma2,2); - // x=5, y=5 - ch_mag_50_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,TWENTYFIVE_OVER_FOUR_SQRT_42); - ch_mag_50_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_50_over_42_with_sigma2,1); - // x=5, y=7 - ch_mag_74_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,THIRTYSEVEN_OVER_FOUR_SQRT_42); - ch_mag_74_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_74_over_42_with_sigma2,2); - // x=7, y=7 - ch_mag_98_over_42_with_sigma2 = _mm256_mulhi_epi16(ch_mag_des,FORTYNINE_OVER_FOUR_SQRT_42); - ch_mag_98_over_42_with_sigma2 = _mm256_slli_epi16(ch_mag_98_over_42_with_sigma2,2); - - // Computing Metrics - xmm0 = _mm256_subs_epi16(psi_a_p7_p7, a_sq_p7_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_7); - bit_met_p7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p5, a_sq_p7_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_5); - bit_met_p7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p3, a_sq_p7_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_3); - bit_met_p7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_p1, a_sq_p7_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_7_1); - bit_met_p7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m1, a_sq_p7_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_1); - bit_met_p7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m3, a_sq_p7_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_3); - bit_met_p7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m5, a_sq_p7_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_5); - bit_met_p7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p7_m7, a_sq_p7_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_7_7); - bit_met_p7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p7, a_sq_p5_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_7); - bit_met_p5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p5, a_sq_p5_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_5); - bit_met_p5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p3, a_sq_p5_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_3); - bit_met_p5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_p1, a_sq_p5_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_5_1); - bit_met_p5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m1, a_sq_p5_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_1); - bit_met_p5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m3, a_sq_p5_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_3); - bit_met_p5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m5, a_sq_p5_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_5); - bit_met_p5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p5_m7, a_sq_p5_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_5_7); - bit_met_p5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p7, a_sq_p3_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_7); - bit_met_p3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p5, a_sq_p3_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_5); - bit_met_p3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p3, a_sq_p3_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_3); - bit_met_p3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_p1, a_sq_p3_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_3_1); - bit_met_p3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m1, a_sq_p3_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_1); - bit_met_p3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m3, a_sq_p3_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_3); - bit_met_p3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m5, a_sq_p3_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_5); - bit_met_p3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p3_m7, a_sq_p3_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_3_7); - bit_met_p3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p7, a_sq_p1_p7); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_7); - bit_met_p1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p5, a_sq_p1_p5); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_5); - bit_met_p1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p3, a_sq_p1_p3); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_3); - bit_met_p1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_p1, a_sq_p1_p1); - xmm1 = _mm256_adds_epi16(xmm0, y0_p_1_1); - bit_met_p1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m1, a_sq_p1_m1); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_1); - bit_met_p1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m3, a_sq_p1_m3); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_3); - bit_met_p1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m5, a_sq_p1_m5); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_5); - bit_met_p1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_p1_m7, a_sq_p1_m7); - xmm1 = _mm256_adds_epi16(xmm0, y0_m_1_7); - bit_met_p1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - - xmm0 = _mm256_subs_epi16(psi_a_m1_p7, a_sq_m1_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_7); - bit_met_m1_p7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p5, a_sq_m1_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_5); - bit_met_m1_p5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p3, a_sq_m1_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_3); - bit_met_m1_p3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_p1, a_sq_m1_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_1_1); - bit_met_m1_p1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m1, a_sq_m1_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_1); - bit_met_m1_m1 = _mm256_subs_epi16(xmm1, ch_mag_2_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m3, a_sq_m1_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_3); - bit_met_m1_m3 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m5, a_sq_m1_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_5); - bit_met_m1_m5 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m1_m7, a_sq_m1_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_1_7); - bit_met_m1_m7 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p7, a_sq_m3_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_7); - bit_met_m3_p7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p5, a_sq_m3_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_5); - bit_met_m3_p5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p3, a_sq_m3_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_3); - bit_met_m3_p3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_p1, a_sq_m3_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_3_1); - bit_met_m3_p1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m1, a_sq_m3_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_1); - bit_met_m3_m1 = _mm256_subs_epi16(xmm1, ch_mag_10_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m3, a_sq_m3_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_3); - bit_met_m3_m3 = _mm256_subs_epi16(xmm1, ch_mag_18_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m5, a_sq_m3_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_5); - bit_met_m3_m5 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m3_m7, a_sq_m3_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_3_7); - bit_met_m3_m7 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p7, a_sq_m5_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_7); - bit_met_m5_p7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p5, a_sq_m5_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_5); - bit_met_m5_p5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p3, a_sq_m5_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_3); - bit_met_m5_p3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_p1, a_sq_m5_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_5_1); - bit_met_m5_p1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m1, a_sq_m5_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_1); - bit_met_m5_m1 = _mm256_subs_epi16(xmm1, ch_mag_26_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m3, a_sq_m5_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_3); - bit_met_m5_m3 = _mm256_subs_epi16(xmm1, ch_mag_34_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m5, a_sq_m5_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_5); - bit_met_m5_m5 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m5_m7, a_sq_m5_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_5_7); - bit_met_m5_m7 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p7, a_sq_m7_p7); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_7); - bit_met_m7_p7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p5, a_sq_m7_p5); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_5); - bit_met_m7_p5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p3, a_sq_m7_p3); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_3); - bit_met_m7_p3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_p1, a_sq_m7_p1); - xmm1 = _mm256_subs_epi16(xmm0, y0_m_7_1); - bit_met_m7_p1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m1, a_sq_m7_m1); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_1); - bit_met_m7_m1 = _mm256_subs_epi16(xmm1, ch_mag_50_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m3, a_sq_m7_m3); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_3); - bit_met_m7_m3 = _mm256_subs_epi16(xmm1, ch_mag_58_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m5, a_sq_m7_m5); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_5); - bit_met_m7_m5 = _mm256_subs_epi16(xmm1, ch_mag_74_over_42_with_sigma2); - xmm0 = _mm256_subs_epi16(psi_a_m7_m7, a_sq_m7_m7); - xmm1 = _mm256_subs_epi16(xmm0, y0_p_7_7); - bit_met_m7_m7 = _mm256_subs_epi16(xmm1, ch_mag_98_over_42_with_sigma2); - - // Detection for 1st bit (LTE mapping) - // bit = 1 - xmm0 = _mm256_max_epi16(bit_met_m7_p7, bit_met_m7_p5); - xmm1 = _mm256_max_epi16(bit_met_m7_p3, bit_met_m7_p1); - xmm2 = _mm256_max_epi16(bit_met_m7_m1, bit_met_m7_m3); - xmm3 = _mm256_max_epi16(bit_met_m7_m5, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m5_p5); - xmm1 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m5_p1); - xmm2 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m5_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m5_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m3_p7, bit_met_m3_p5); - xmm1 = _mm256_max_epi16(bit_met_m3_p3, bit_met_m3_p1); - xmm2 = _mm256_max_epi16(bit_met_m3_m1, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m3_m5, bit_met_m3_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m1_p5); - xmm1 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m1_m3); - xmm3 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m1_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - // bit = 0 - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p7_p5); - xmm1 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p7_p1); - xmm2 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p7_m3); - xmm3 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_p7, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p5_p3, bit_met_p5_p1); - xmm2 = _mm256_max_epi16(bit_met_p5_m1, bit_met_p5_m3); - xmm3 = _mm256_max_epi16(bit_met_p5_m5, bit_met_p5_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p3_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p3_p1); - xmm2 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p3_m3); - xmm3 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p3_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_p7, bit_met_p1_p5); - xmm1 = _mm256_max_epi16(bit_met_p1_p3, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_p1_m1, bit_met_p1_m3); - xmm3 = _mm256_max_epi16(bit_met_p1_m5, bit_met_p1_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y0r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 2nd bit (LTE mapping) - // bit = 1 - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - // bit = 0 - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y1r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 3rd bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y2r = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 4th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m7_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y0i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - - // Detection for 5th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_m7_m7, bit_met_m7_m5); - xmm1 = _mm256_max_epi16(bit_met_m7_m3, bit_met_m7_m1); - xmm2 = _mm256_max_epi16(bit_met_m7_p1, bit_met_m7_p3); - xmm3 = _mm256_max_epi16(bit_met_m7_p5, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m1_m5); - xmm1 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m1_p3); - xmm3 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p1_m7, bit_met_p1_m5); - xmm1 = _mm256_max_epi16(bit_met_p1_m3, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_p1_p1, bit_met_p1_p3); - xmm3 = _mm256_max_epi16(bit_met_p1_p5, bit_met_p1_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p7_m5); - xmm1 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p7_m1); - xmm2 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p7_p3); - xmm3 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m5_m5); - xmm1 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m5_m1); - xmm2 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_m3_m7, bit_met_m3_m5); - xmm1 = _mm256_max_epi16(bit_met_m3_m3, bit_met_m3_m1); - xmm2 = _mm256_max_epi16(bit_met_m3_p1, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m3_p5, bit_met_m3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p3_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p3_m1); - xmm2 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p3_p3); - xmm3 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p3_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p5_m7, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p5_m3, bit_met_p5_m1); - xmm2 = _mm256_max_epi16(bit_met_p5_p1, bit_met_p5_p3); - xmm3 = _mm256_max_epi16(bit_met_p5_p5, bit_met_p5_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y1i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // Detection for 6th bit (LTE mapping) - xmm0 = _mm256_max_epi16(bit_met_p7_p7, bit_met_p5_p7); - xmm1 = _mm256_max_epi16(bit_met_p3_p7, bit_met_p1_p7); - xmm2 = _mm256_max_epi16(bit_met_m1_p7, bit_met_m3_p7); - xmm3 = _mm256_max_epi16(bit_met_m5_p7, bit_met_m7_p7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p1, bit_met_p5_p1); - xmm1 = _mm256_max_epi16(bit_met_p3_p1, bit_met_p1_p1); - xmm2 = _mm256_max_epi16(bit_met_m1_p1, bit_met_m3_p1); - xmm3 = _mm256_max_epi16(bit_met_m5_p1, bit_met_m5_p1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m1, bit_met_p5_m1); - xmm1 = _mm256_max_epi16(bit_met_p3_m1, bit_met_p1_m1); - xmm2 = _mm256_max_epi16(bit_met_m1_m1, bit_met_m3_m1); - xmm3 = _mm256_max_epi16(bit_met_m5_m1, bit_met_m7_m1); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m7, bit_met_p5_m7); - xmm1 = _mm256_max_epi16(bit_met_p3_m7, bit_met_p1_m7); - xmm2 = _mm256_max_epi16(bit_met_m1_m7, bit_met_m3_m7); - xmm3 = _mm256_max_epi16(bit_met_m5_m7, bit_met_m7_m7); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm4); - logmax_den_re0 = _mm256_max_epi16(logmax_den_re0, xmm5); - - xmm0 = _mm256_max_epi16(bit_met_p7_m5, bit_met_p5_m5); - xmm1 = _mm256_max_epi16(bit_met_p3_m5, bit_met_p1_m5); - xmm2 = _mm256_max_epi16(bit_met_m1_m5, bit_met_m3_m5); - xmm3 = _mm256_max_epi16(bit_met_m5_m5, bit_met_m7_m5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(xmm4, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_m3, bit_met_p5_m3); - xmm1 = _mm256_max_epi16(bit_met_p3_m3, bit_met_p1_m3); - xmm2 = _mm256_max_epi16(bit_met_m1_m3, bit_met_m3_m3); - xmm3 = _mm256_max_epi16(bit_met_m5_m3, bit_met_m7_m3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p3, bit_met_p5_p3); - xmm1 = _mm256_max_epi16(bit_met_p3_p3, bit_met_p1_p3); - xmm2 = _mm256_max_epi16(bit_met_m1_p3, bit_met_m3_p3); - xmm3 = _mm256_max_epi16(bit_met_m5_p3, bit_met_m7_p3); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - xmm0 = _mm256_max_epi16(bit_met_p7_p5, bit_met_p5_p5); - xmm1 = _mm256_max_epi16(bit_met_p3_p5, bit_met_p1_p5); - xmm2 = _mm256_max_epi16(bit_met_m1_p5, bit_met_m3_p5); - xmm3 = _mm256_max_epi16(bit_met_m5_p5, bit_met_m7_p5); - xmm4 = _mm256_max_epi16(xmm0, xmm1); - xmm5 = _mm256_max_epi16(xmm2, xmm3); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm4); - logmax_num_re0 = _mm256_max_epi16(logmax_num_re0, xmm5); - - y2i = _mm256_subs_epi16(logmax_num_re0, logmax_den_re0); - - // map to output stream, difficult to do in SIMD since we have 6 16bit LLRs - // RE 1 - j = 48*i; - stream0_out[j + 0] = ((short *)&y0r)[0]; - stream0_out[j + 1] = ((short *)&y1r)[0]; - stream0_out[j + 2] = ((short *)&y2r)[0]; - stream0_out[j + 3] = ((short *)&y0i)[0]; - stream0_out[j + 4] = ((short *)&y1i)[0]; - stream0_out[j + 5] = ((short *)&y2i)[0]; - // RE 2 - stream0_out[j + 6] = ((short *)&y0r)[1]; - stream0_out[j + 7] = ((short *)&y1r)[1]; - stream0_out[j + 8] = ((short *)&y2r)[1]; - stream0_out[j + 9] = ((short *)&y0i)[1]; - stream0_out[j + 10] = ((short *)&y1i)[1]; - stream0_out[j + 11] = ((short *)&y2i)[1]; - // RE 3 - stream0_out[j + 12] = ((short *)&y0r)[2]; - stream0_out[j + 13] = ((short *)&y1r)[2]; - stream0_out[j + 14] = ((short *)&y2r)[2]; - stream0_out[j + 15] = ((short *)&y0i)[2]; - stream0_out[j + 16] = ((short *)&y1i)[2]; - stream0_out[j + 17] = ((short *)&y2i)[2]; - // RE 4 - stream0_out[j + 18] = ((short *)&y0r)[3]; - stream0_out[j + 19] = ((short *)&y1r)[3]; - stream0_out[j + 20] = ((short *)&y2r)[3]; - stream0_out[j + 21] = ((short *)&y0i)[3]; - stream0_out[j + 22] = ((short *)&y1i)[3]; - stream0_out[j + 23] = ((short *)&y2i)[3]; - // RE 5 - stream0_out[j + 24] = ((short *)&y0r)[4]; - stream0_out[j + 25] = ((short *)&y1r)[4]; - stream0_out[j + 26] = ((short *)&y2r)[4]; - stream0_out[j + 27] = ((short *)&y0i)[4]; - stream0_out[j + 28] = ((short *)&y1i)[4]; - stream0_out[j + 29] = ((short *)&y2i)[4]; - // RE 6 - stream0_out[j + 30] = ((short *)&y0r)[5]; - stream0_out[j + 31] = ((short *)&y1r)[5]; - stream0_out[j + 32] = ((short *)&y2r)[5]; - stream0_out[j + 33] = ((short *)&y0i)[5]; - stream0_out[j + 34] = ((short *)&y1i)[5]; - stream0_out[j + 35] = ((short *)&y2i)[5]; - // RE 7 - stream0_out[j + 36] = ((short *)&y0r)[6]; - stream0_out[j + 37] = ((short *)&y1r)[6]; - stream0_out[j + 38] = ((short *)&y2r)[6]; - stream0_out[j + 39] = ((short *)&y0i)[6]; - stream0_out[j + 40] = ((short *)&y1i)[6]; - stream0_out[j + 41] = ((short *)&y2i)[6]; - // RE 8 - stream0_out[j + 42] = ((short *)&y0r)[7]; - stream0_out[j + 43] = ((short *)&y1r)[7]; - stream0_out[j + 44] = ((short *)&y2r)[7]; - stream0_out[j + 45] = ((short *)&y0i)[7]; - stream0_out[j + 46] = ((short *)&y1i)[7]; - stream0_out[j + 47] = ((short *)&y2i)[7]; - - // RE 9 - stream0_out[j + 48] = ((short *)&y0r)[8]; - stream0_out[j + 49] = ((short *)&y1r)[8]; - stream0_out[j + 50] = ((short *)&y2r)[8]; - stream0_out[j + 51] = ((short *)&y0i)[8]; - stream0_out[j + 52] = ((short *)&y1i)[8]; - stream0_out[j + 53] = ((short *)&y2i)[8]; - // RE 10 - stream0_out[j + 54] = ((short *)&y0r)[9]; - stream0_out[j + 55] = ((short *)&y1r)[9]; - stream0_out[j + 56] = ((short *)&y2r)[9]; - stream0_out[j + 57] = ((short *)&y0i)[9]; - stream0_out[j + 58] = ((short *)&y1i)[9]; - stream0_out[j + 59] = ((short *)&y2i)[9]; - // RE 11 - stream0_out[j + 60] = ((short *)&y0r)[10]; - stream0_out[j + 61] = ((short *)&y1r)[10]; - stream0_out[j + 62] = ((short *)&y2r)[10]; - stream0_out[j + 63] = ((short *)&y0i)[10]; - stream0_out[j + 64] = ((short *)&y1i)[10]; - stream0_out[j + 65] = ((short *)&y2i)[10]; - // RE 12 - stream0_out[j + 66] = ((short *)&y0r)[11]; - stream0_out[j + 67] = ((short *)&y1r)[11]; - stream0_out[j + 68] = ((short *)&y2r)[11]; - stream0_out[j + 69] = ((short *)&y0i)[11]; - stream0_out[j + 70] = ((short *)&y1i)[11]; - stream0_out[j + 71] = ((short *)&y2i)[11]; - // RE 13 - stream0_out[j + 72] = ((short *)&y0r)[12]; - stream0_out[j + 73] = ((short *)&y1r)[12]; - stream0_out[j + 74] = ((short *)&y2r)[12]; - stream0_out[j + 75] = ((short *)&y0i)[12]; - stream0_out[j + 76] = ((short *)&y1i)[12]; - stream0_out[j + 77] = ((short *)&y2i)[12]; - // RE 14 - stream0_out[j + 78] = ((short *)&y0r)[13]; - stream0_out[j + 79] = ((short *)&y1r)[13]; - stream0_out[j + 80] = ((short *)&y2r)[13]; - stream0_out[j + 81] = ((short *)&y0i)[13]; - stream0_out[j + 82] = ((short *)&y1i)[13]; - stream0_out[j + 83] = ((short *)&y2i)[13]; - // RE 15 - stream0_out[j + 84] = ((short *)&y0r)[14]; - stream0_out[j + 85] = ((short *)&y1r)[14]; - stream0_out[j + 86] = ((short *)&y2r)[14]; - stream0_out[j + 87] = ((short *)&y0i)[14]; - stream0_out[j + 88] = ((short *)&y1i)[14]; - stream0_out[j + 89] = ((short *)&y2i)[14]; - // RE 16 - stream0_out[j + 90] = ((short *)&y0r)[15]; - stream0_out[j + 91] = ((short *)&y1r)[15]; - stream0_out[j + 92] = ((short *)&y2r)[15]; - stream0_out[j + 93] = ((short *)&y0i)[15]; - stream0_out[j + 94] = ((short *)&y1i)[15]; - stream0_out[j + 95] = ((short *)&y2i)[15]; - -#elif defined(__arm__) - -#endif - - } - -#if defined(__x86_64__) || defined(__i386__) - _mm_empty(); - _m_empty(); -#endif -} diff --git a/openair1/SIMULATION/ETH_TRANSPORT/extern.h b/openair1/SIMULATION/ETH_TRANSPORT/extern.h index c01b5584e2..472a4545eb 100644 --- a/openair1/SIMULATION/ETH_TRANSPORT/extern.h +++ b/openair1/SIMULATION/ETH_TRANSPORT/extern.h @@ -33,6 +33,7 @@ #include <pthread.h> + extern unsigned char Emulation_status; extern unsigned char emu_tx_status; extern unsigned char emu_rx_status; diff --git a/openair2/COMMON/rrc_messages_def.h b/openair2/COMMON/rrc_messages_def.h index 08ea93f427..252b336c94 100644 --- a/openair2/COMMON/rrc_messages_def.h +++ b/openair2/COMMON/rrc_messages_def.h @@ -55,6 +55,7 @@ MESSAGE_DEF(RRC_STATE_IND, MESSAGE_PRIORITY_MED, RrcStateInd, // eNB: ENB_APP -> RRC messages MESSAGE_DEF(RRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED, RrcConfigurationReq, rrc_configuration_req) MESSAGE_DEF(NBIOTRRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED, NbIoTRrcConfigurationReq, nbiotrrc_configuration_req) +MESSAGE_DEF(NRRRC_CONFIGURATION_REQ, MESSAGE_PRIORITY_MED, gNB_RrcConfigurationReq, nrrrc_configuration_req) // UE: NAS -> RRC messages MESSAGE_DEF(NAS_KENB_REFRESH_REQ, MESSAGE_PRIORITY_MED, NasKenbRefreshReq, nas_kenb_refresh_req) diff --git a/openair2/COMMON/rrc_messages_types.h b/openair2/COMMON/rrc_messages_types.h index 93f1e4ea80..edf84fb73e 100644 --- a/openair2/COMMON/rrc_messages_types.h +++ b/openair2/COMMON/rrc_messages_types.h @@ -293,9 +293,9 @@ typedef struct NRRrcConfigurationReq_s { //NR FrequencyInfoUL long UL_FreqBandIndicatorNR[MAX_NUM_CCs]; long UL_absoluteFrequencyPointA[MAX_NUM_CCs]; - lte_prefix_type_t UL_additionalSpectrumEmission[MAX_NUM_CCs]; + long UL_additionalSpectrumEmission[MAX_NUM_CCs]; long UL_p_Max[MAX_NUM_CCs]; - long ULfrequencyShift7p5khz[MAX_NUM_CCs]; + long UL_frequencyShift7p5khz[MAX_NUM_CCs]; //NR UL SCS-SpecificCarrier uint32_t UL_offsetToCarrier[MAX_NUM_CCs]; diff --git a/openair2/COMMON/tasks_def.h b/openair2/COMMON/tasks_def.h index 92d1ff4128..00bbd5dcf0 100644 --- a/openair2/COMMON/tasks_def.h +++ b/openair2/COMMON/tasks_def.h @@ -44,6 +44,8 @@ TASK_DEF(TASK_RRC_ENB, TASK_PRIORITY_MED, 200) // Define here for now TASK_DEF(TASK_RRC_ENB_NB_IoT, TASK_PRIORITY_MED, 200) +TASK_DEF(TASK_RRC_GNB, TASK_PRIORITY_MED, 200) + /// S1ap task /// RAL task for ENB TASK_DEF(TASK_RAL_ENB, TASK_PRIORITY_MED, 200) @@ -59,6 +61,8 @@ TASK_DEF(TASK_X2AP, TASK_PRIORITY_MED, 200) TASK_DEF(TASK_SCTP, TASK_PRIORITY_MED, 200) /// eNB APP task TASK_DEF(TASK_ENB_APP, TASK_PRIORITY_MED, 200) +/// gNB APP task +TASK_DEF(TASK_GNB_APP, TASK_PRIORITY_MED, 200) /// eNB Agent task TASK_DEF(TASK_FLEXRAN_AGENT, TASK_PRIORITY_MED, 200) diff --git a/openair2/ENB_APP/NRRRC_paramsvalues.h b/openair2/GNB_APP/NR_RRC_paramsvalues.h similarity index 83% rename from openair2/ENB_APP/NRRRC_paramsvalues.h rename to openair2/GNB_APP/NR_RRC_paramsvalues.h index aae1fc3300..306095838d 100644 --- a/openair2/ENB_APP/NRRRC_paramsvalues.h +++ b/openair2/GNB_APP/NR_RRC_paramsvalues.h @@ -29,23 +29,21 @@ * \note * \warning */ -#ifndef __NRRRC_PARAMSVALUES__H__ -#define __NRRRC_PARAMSVALUES__H__ +#ifndef __NR_RRC_PARAMSVALUES__H__ +#define __NR_RRC_PARAMSVALUES__H__ /* cell configuration section name */ -#define GNB_CONFIG_STRING_GNB_LIST "gNBs" -/* component carriers configuration section name */ -#define GNB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers" - -#define GNB_CONFIG_STRING_FRAME_TYPE "frame_type" -#define GNB_CONFIG_STRING_DL_PREFIX_TYPE "DL_prefix_type" -#define GNB_CONFIG_STRING_UL_PREFIX_TYPE "UL_prefix_type" -#define GNB_CONFIG_STRING_EUTRA_BAND "eutra_band" -#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency" -#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset" -#define GNB_CONFIG_STRING_NID_CELL "Nid_cell" -#define GNB_CONFIG_STRING_N_RB_DL "N_RB_DL" -#define GNB_CONFIG_STRING_CELL_MBSFN "Nid_cell_mbsfn" - +#define GNB_CONFIG_STRING_GNB_LIST "gNBs" +/* component carriers configuration section name */ +#define GNB_CONFIG_STRING_COMPONENT_CARRIERS "component_carriers" + +#define GNB_CONFIG_STRING_FRAME_TYPE "frame_type" +#define GNB_CONFIG_STRING_DL_PREFIX_TYPE "DL_prefix_type" +#define GNB_CONFIG_STRING_UL_PREFIX_TYPE "UL_prefix_type" +#define GNB_CONFIG_STRING_EUTRA_BAND "eutra_band" +#define GNB_CONFIG_STRING_DOWNLINK_FREQUENCY "downlink_frequency" +#define GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET "uplink_frequency_offset" +#define GNB_CONFIG_STRING_NID_CELL "Nid_cell" +#define GNB_CONFIG_STRING_N_RB_DL "N_RB_DL" #define FRAMETYPE_OKVALUES {"FDD","TDD"} #define FRAMETYPE_MODVALUES { FDD, TDD} @@ -66,7 +64,7 @@ #define UETIMER_T300_OKVALUES {100,200,300,400,600,1000,1500,2000} #define UETT300(A) UE_TimersAndConstants__t300_ ## A -#define UETIMER_T300_MODVALUES { UETT300(ms100), UETT300(ms200),UETT300(ms300),UETT300(ms400),UETT300(ms600),UETT300(ms1000),UETT300(ms1500),UETT300(ms2000)} +#define UETIMER_T300_MODVALUES { UETT300(ms100), UETT300(ms200),UETT300(ms300),UETT300(ms400),UETT300(ms600),UETT300(ms1000),UETT300(ms1500),UETT300(ms2000)} #define UETIMER_T301_OKVALUES {100,200,300,400,600,1000,1500,2000} #define UETT301(A) UE_TimersAndConstants__t301_ ## A diff --git a/openair2/ENB_APP/gnb_app.c b/openair2/GNB_APP/gnb_app.c similarity index 91% rename from openair2/ENB_APP/gnb_app.c rename to openair2/GNB_APP/gnb_app.c index 15d5ef6fea..1261893631 100644 --- a/openair2/ENB_APP/gnb_app.c +++ b/openair2/GNB_APP/gnb_app.c @@ -84,14 +84,14 @@ static void configure_phy(module_id_t enb_id, const Enb_properties_array_t* enb_ */ /*------------------------------------------------------------------------------*/ -static void configure_nrrrc(uint32_t gnb_id) +static void configure_nr_rrc(uint32_t gnb_id) { MessageDef *msg_p = NULL; // int CC_id; msg_p = itti_alloc_new_message (TASK_GNB_APP, NRRRC_CONFIGURATION_REQ); - if (RC.nr_rrc[gnb_id]) { + if (RC.nrrrc[gnb_id]) { RCconfig_NRRRC(msg_p,gnb_id, RC.nrrrc[gnb_id]); @@ -112,16 +112,16 @@ static uint32_t gNB_app_register(uint32_t gnb_id_start, uint32_t gnb_id_end)//, for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { { - s1ap_register_gnb_req_t *s1ap_register_gNB; + s1ap_register_enb_req_t *s1ap_register_gNB; //Type Temporarily reuse /* note: there is an implicit relationship between the data structure and the message name */ - msg_p = itti_alloc_new_message (TASK_GNB_APP, S1AP_REGISTER_GNB_REQ); + msg_p = itti_alloc_new_message (TASK_GNB_APP, S1AP_REGISTER_ENB_REQ); //Message Temporarily reuse RCconfig_S1(msg_p, gnb_id); if (gnb_id == 0) RCconfig_gtpu(); - s1ap_register_gNB = &S1AP_REGISTER_GNB_REQ(msg_p); + s1ap_register_gNB = &S1AP_REGISTER_ENB_REQ(msg_p); //Message Temporarily reuse LOG_I(GNB_APP,"default drx %d\n",s1ap_register_gNB->default_drx); LOG_I(GNB_APP,"[gNB %d] gNB_app_register for instance %d\n", gnb_id, GNB_MODULE_ID_TO_INSTANCE(gnb_id)); @@ -150,8 +150,8 @@ void *gNB_app_task(void *args_p) long gnb_register_retry_timer_id; # endif uint32_t gnb_id; - MessageDef *msg_p = NULL; - const char *msg_name = NULL; + MessageDef *msg_p = NULL; + const char *msg_name = NULL; instance_t instance; int result; /* for no gcc warnings */ @@ -161,9 +161,9 @@ void *gNB_app_task(void *args_p) LOG_I(PHY, "%s() Task ready initialise structures\n", __FUNCTION__); - //RCconfig_L1(); + RCconfig_NR_L1(); - //RCconfig_macrlc(); + RCconfig_nr_macrlc(); LOG_I(PHY, "%s() RC.nb_L1_inst:%d\n", __FUNCTION__, RC.nb_L1_inst); @@ -175,14 +175,14 @@ void *gNB_app_task(void *args_p) LOG_I(GNB_APP,"Allocating gNB_RRC_INST for %d instances\n",RC.nb_nr_inst); - RC.rrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *)); - LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.rrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.rrc); + RC.nrrrc = (gNB_RRC_INST **)malloc(RC.nb_nr_inst*sizeof(gNB_RRC_INST *)); + LOG_I(PHY, "%s() RC.nb_nr_inst:%d RC.nrrrc:%p\n", __FUNCTION__, RC.nb_nr_inst, RC.nrrrc); for (gnb_id = gnb_id_start; (gnb_id < gnb_id_end) ; gnb_id++) { - RC.rrc[gnb_id] = (gNB_RRC_INST*)malloc(sizeof(gNB_RRC_INST)); - LOG_I(PHY, "%s() Creating RRC instance RC.rrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.rrc[gnb_id], gnb_id+1, gnb_id_end); - memset((void *)RC.rrc[gnb_id],0,sizeof(gNB_RRC_INST)); - configure_nrrrc(gnb_id); + RC.nrrrc[gnb_id] = (gNB_RRC_INST*)malloc(sizeof(gNB_RRC_INST)); + LOG_I(PHY, "%s() Creating RRC instance RC.nrrrc[%d]:%p (%d of %d)\n", __FUNCTION__, gnb_id, RC.nrrrc[gnb_id], gnb_id+1, gnb_id_end); + memset((void *)RC.nrrrc[gnb_id],0,sizeof(gNB_RRC_INST)); + configure_nr_rrc(gnb_id); } # if defined(ENABLE_USE_MME) diff --git a/openair2/ENB_APP/gnb_app.h b/openair2/GNB_APP/gnb_app.h similarity index 100% rename from openair2/ENB_APP/gnb_app.h rename to openair2/GNB_APP/gnb_app.h diff --git a/openair2/ENB_APP/gnb_config.c b/openair2/GNB_APP/gnb_config.c similarity index 71% rename from openair2/ENB_APP/gnb_config.c rename to openair2/GNB_APP/gnb_config.c index a52809b62c..f3b30a02b8 100644 --- a/openair2/ENB_APP/gnb_config.c +++ b/openair2/GNB_APP/gnb_config.c @@ -1,3 +1,32 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/* + enb_config.c + ------------------- + AUTHOR : Lionel GAUTHIER, navid nikaein, Laurent Winckel + COMPANY : EURECOM + EMAIL : Lionel.Gauthier@eurecom.fr, navid.nikaein@eurecom.fr +*/ + #include <string.h> #include <inttypes.h> @@ -18,7 +47,8 @@ // #include "SystemInformationBlockType2.h" // #include "LAYER2/MAC/extern.h" // #include "LAYER2/MAC/proto.h" -#include "PHY/extern.h" +#include "PHY/phy_extern.h" +#include "PHY/INIT/phy_init.h" #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h" #include "nfapi_vnf.h" #include "nfapi_pnf.h" @@ -29,6 +59,170 @@ #include "RRC_config_tools.h" #include "gnb_paramdef.h" +extern uint16_t sf_ahead; + +void RCconfig_NR_L1(void) { + int i,j; + paramdef_t L1_Params[] = L1PARAMS_DESC; + paramlist_def_t L1_ParamList = {CONFIG_STRING_L1_LIST,NULL,0}; + + + if (RC.gNB == NULL) { + RC.gNB = (PHY_VARS_gNB ***)malloc((1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**)); + LOG_I(NR_PHY,"RC.gNB = %p\n",RC.gNB); + memset(RC.gNB,0,(1+NUMBER_OF_gNB_MAX)*sizeof(PHY_VARS_gNB**)); + RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int)); + } + + config_getlist( &L1_ParamList,L1_Params,sizeof(L1_Params)/sizeof(paramdef_t), NULL); + + if (L1_ParamList.numelt > 0) { + + for (j = 0; j < RC.nb_nr_L1_inst; j++) { + RC.nb_nr_L1_CC[j] = *(L1_ParamList.paramarray[j][L1_CC_IDX].uptr); + + if (RC.gNB[j] == NULL) { + RC.gNB[j] = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*)); + LOG_I(NR_PHY,"RC.eNB[%d] = %p\n",j,RC.eNB[j]); + memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB*)); + } + + for (i=0;i<RC.nb_nr_L1_CC[j];i++) { + if (RC.gNB[j][i] == NULL) { + RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB)); + memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB)); + LOG_I(PHY,"RC.eNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]); + RC.gNB[j][i]->Mod_id = j; + RC.gNB[j][i]->CC_id = i; + } + } + + if(strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_mac") == 0) { + sf_ahead = 4; // Need 4 subframe gap between RX and TX + }else if (strcmp(*(L1_ParamList.paramarray[j][L1_TRANSPORT_N_PREFERENCE_IDX].strptr), "nfapi") == 0) { + RC.gNB[j][0]->eth_params_n.local_if_name = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_IF_NAME_IDX].strptr)); + RC.gNB[j][0]->eth_params_n.my_addr = strdup(*(L1_ParamList.paramarray[j][L1_LOCAL_N_ADDRESS_IDX].strptr)); + RC.gNB[j][0]->eth_params_n.remote_addr = strdup(*(L1_ParamList.paramarray[j][L1_REMOTE_N_ADDRESS_IDX].strptr)); + RC.gNB[j][0]->eth_params_n.my_portc = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTC_IDX].iptr); + RC.gNB[j][0]->eth_params_n.remote_portc = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTC_IDX].iptr); + RC.gNB[j][0]->eth_params_n.my_portd = *(L1_ParamList.paramarray[j][L1_LOCAL_N_PORTD_IDX].iptr); + RC.gNB[j][0]->eth_params_n.remote_portd = *(L1_ParamList.paramarray[j][L1_REMOTE_N_PORTD_IDX].iptr); + RC.gNB[j][0]->eth_params_n.transp_preference = ETH_UDP_MODE; + + sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2 + + RC.nb_nr_macrlc_inst = 1; // This is used by mac_top_init_gNB() + + // This is used by init_gNB_afterRU() + RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int)); + RC.nb_nr_CC[0]=1; + + RC.nb_nr_inst =1; // DJP - feptx_prec uses num_gNB but phy_init_RU uses nb_nr_inst + + LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_inst=1 this is because phy_init_RU() uses that to index and not RC.num_gNB - why the 2 similar variables?\n", __FUNCTION__); + LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_CC[0]=%d for init_gNB_afterRU()\n", __FUNCTION__, RC.nb_nr_CC[0]); + LOG_I(PHY,"%s() NFAPI PNF mode - RC.nb_nr_macrlc_inst:%d because used by mac_top_init_gNB()\n", __FUNCTION__, RC.nb_nr_macrlc_inst); + + mac_top_init_gNB(); + + configure_nfapi_pnf(RC.gNB[j][0]->eth_params_n.remote_addr, RC.gNB[j][0]->eth_params_n.remote_portc, RC.gNB[j][0]->eth_params_n.my_addr, RC.gNB[j][0]->eth_params_n.my_portd, RC.gNB[j][0]->eth_params_n .remote_portd); + }else { // other midhaul + } + }// for (j = 0; j < RC.nb_nr_L1_inst; j++) + printf("Initializing northbound interface for L1\n"); + l1_north_init_gNB(); + }else{ + LOG_I(PHY,"No " CONFIG_STRING_L1_LIST " configuration found"); + + // DJP need to create some structures for VNF + + j = 0; + + RC.nb_nr_L1_CC = malloc((1+RC.nb_nr_L1_inst)*sizeof(int)); // DJP - 1 lot then??? + + RC.nb_nr_L1_CC[j]=1; // DJP - hmmm + + if (RC.gNB[j] == NULL) { + RC.gNB[j] = (PHY_VARS_gNB **)malloc((1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB**)); + LOG_I(PHY,"RC.gNB[%d] = %p\n",j,RC.gNB[j]); + memset(RC.gNB[j],0,(1+MAX_NUM_CCs)*sizeof(PHY_VARS_gNB***)); + } + + for (i=0;i<RC.nb_nr_L1_CC[j];i++) { + if (RC.gNB[j][i] == NULL) { + RC.gNB[j][i] = (PHY_VARS_gNB *)malloc(sizeof(PHY_VARS_gNB)); + memset((void*)RC.gNB[j][i],0,sizeof(PHY_VARS_gNB)); + LOG_I(PHY,"RC.gNB[%d][%d] = %p\n",j,i,RC.gNB[j][i]); + RC.gNB[j][i]->Mod_id = j; + RC.gNB[j][i]->CC_id = i; + } + } // END for (i=0;i<RC.nb_nr_L1_CC[j];i++) + + } +} + +void RCconfig_nr_macrlc() { + int j; + + paramdef_t MacRLC_Params[] = MACRLCPARAMS_DESC; + paramlist_def_t MacRLC_ParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; + + config_getlist( &MacRLC_ParamList,MacRLC_Params,sizeof(MacRLC_Params)/sizeof(paramdef_t), NULL); + + if ( MacRLC_ParamList.numelt > 0) { + + RC.nb_macrlc_inst=MacRLC_ParamList.numelt; + mac_top_init_eNB(); + RC.nb_mac_CC = (int*)malloc(RC.nb_macrlc_inst*sizeof(int)); + + for (j=0;j<RC.nb_macrlc_inst;j++) { + RC.nb_mac_CC[j] = *(MacRLC_ParamList.paramarray[j][MACRLC_CC_IDX].iptr); + //RC.mac[j]->phy_test = *(MacRLC_ParamList.paramarray[j][MACRLC_PHY_TEST_IDX].iptr); + //printf("PHY_TEST = %d,%d\n", RC.mac[j]->phy_test, j); + + if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "local_RRC") == 0) { + // check number of instances is same as RRC/PDCP + + } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr), "cudu") == 0) { + RC.mac[j]->eth_params_n.local_if_name = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_IF_NAME_IDX].strptr)); + RC.mac[j]->eth_params_n.my_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_ADDRESS_IDX].strptr)); + RC.mac[j]->eth_params_n.remote_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_ADDRESS_IDX].strptr)); + RC.mac[j]->eth_params_n.my_portc = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTC_IDX].iptr); + RC.mac[j]->eth_params_n.remote_portc = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTC_IDX].iptr); + RC.mac[j]->eth_params_n.my_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_N_PORTD_IDX].iptr); + RC.mac[j]->eth_params_n.remote_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_N_PORTD_IDX].iptr);; + RC.mac[j]->eth_params_n.transp_preference = ETH_UDP_MODE; + } else { // other midhaul + AssertFatal(1==0,"MACRLC %d: %s unknown northbound midhaul\n",j, *(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_N_PREFERENCE_IDX].strptr)); + } + + if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "local_L1") == 0) { + + + } else if (strcmp(*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr), "nfapi") == 0) { + RC.mac[j]->eth_params_s.local_if_name = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_IF_NAME_IDX].strptr)); + RC.mac[j]->eth_params_s.my_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_ADDRESS_IDX].strptr)); + RC.mac[j]->eth_params_s.remote_addr = strdup(*(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_ADDRESS_IDX].strptr)); + RC.mac[j]->eth_params_s.my_portc = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTC_IDX].iptr); + RC.mac[j]->eth_params_s.remote_portc = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTC_IDX].iptr); + RC.mac[j]->eth_params_s.my_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_LOCAL_S_PORTD_IDX].iptr); + RC.mac[j]->eth_params_s.remote_portd = *(MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTD_IDX].iptr); + RC.mac[j]->eth_params_s.transp_preference = ETH_UDP_MODE; + + sf_ahead = 2; // Cannot cope with 4 subframes betweem RX and TX - set it to 2 + + printf("**************** vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc); + configure_nfapi_vnf(RC.mac[j]->eth_params_s.my_addr, RC.mac[j]->eth_params_s.my_portc); + printf("**************** RETURNED FROM configure_nfapi_vnf() vnf_port:%d\n", RC.mac[j]->eth_params_s.my_portc); + } else { // other midhaul + AssertFatal(1==0,"MACRLC %d: %s unknown southbound midhaul\n",j,*(MacRLC_ParamList.paramarray[j][MACRLC_TRANSPORT_S_PREFERENCE_IDX].strptr)); + } + }// j=0..num_inst + } else {// MacRLC_ParamList.numelt > 0 + AssertFatal (0, + "No " CONFIG_STRING_MACRLC_LIST " configuration found"); + } +} int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { @@ -186,6 +380,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { int32_t PDCCH_interleaverSize = 0; int32_t PDCCH_shiftIndex = 0; int32_t PDCCH_precoderGranularity = 0; + int32_t PDCCH_TCI_StateId = 0; char* tci_PresentInDCI = NULL; //NR PDCCH-ConfigCommon commonSearchSpaces @@ -223,6 +418,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { uint32_t RateMatchPatternLTE_CRS_radioframeAllocationOffset = 0; int32_t RateMatchPatternLTE_CRS_subframeAllocation_choice = 0; + int32_t srb1_timer_poll_retransmit = 0; + int32_t srb1_timer_reordering = 0; + int32_t srb1_timer_status_prohibit = 0; + int32_t srb1_poll_pdu = 0; + int32_t srb1_poll_byte = 0; + int32_t srb1_max_retx_threshold = 0; + int32_t my_int; paramdef_t GNBSParams[] = GNBSPARAMS_DESC; @@ -230,8 +432,8 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { paramdef_t GNBParams[] = GNBPARAMS_DESC; paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; ////////// Physical parameters - checkedparam_t config_check_CCparams[] = CCPARAMS_CHECK; - paramdef_t CCsParams[] = CCPARAMS_DESC; + checkedparam_t config_check_CCparams[] = NRCCPARAMS_CHECK; + paramdef_t CCsParams[] = NRCCPARAMS_DESC; paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; paramdef_t SRB1Params[] = SRB1PARAMS_DESC; @@ -313,7 +515,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { sprintf(gnbpath,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k), config_getlist( &CCsParamList,NULL,0,gnbpath); - LOG_I(NRRRC,"num component carriers %d \n", num_component_carriers); + LOG_I(NR_RRC,"num component carriers %d \n", num_component_carriers); if ( CCsParamList.numelt> 0) { @@ -386,16 +588,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { RC.config_file_name, i, frame_type); } - if (!prefix_type){ + if (!DL_prefix_type){ + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n", + RC.config_file_name, i, GNB_CONFIG_STRING_DL_PREFIX_TYPE); + }else if (strcmp(DL_prefix_type, "NORMAL") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = NORMAL; + }else if (strcmp(DL_prefix_type, "EXTENDED") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).DL_prefix_type[j] = EXTENDED; + }else { + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_prefix_type choice: NORMAL or EXTENDED !\n", + RC.config_file_name, i, DL_prefix_type); + } + + if (!UL_prefix_type){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d define %s: NORMAL,EXTENDED!\n", - RC.config_file_name, i, ENB_CONFIG_STRING_PREFIX_TYPE); - }else if (strcmp(prefix_type, "NORMAL") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = NORMAL; - }else if (strcmp(prefix_type, "EXTENDED") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prefix_type[j] = EXTENDED; + RC.config_file_name, i, GNB_CONFIG_STRING_UL_PREFIX_TYPE); + }else if (strcmp(UL_prefix_type, "NORMAL") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = NORMAL; + }else if (strcmp(UL_prefix_type, "EXTENDED") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_prefix_type[j] = EXTENDED; }else { - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prefix_type choice: NORMAL or EXTENDED !\n", - RC.config_file_name, i, prefix_type); + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_prefix_type choice: NORMAL or EXTENDED !\n", + RC.config_file_name, i, UL_prefix_type); } NRRRC_CONFIGURATION_REQ (msg_p).eutra_band[j] = eutra_band; @@ -462,7 +676,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { (SIB1_ssb_PeriodicityServingCell !=20) && (SIB1_ssb_PeriodicityServingCell !=40) && (SIB1_ssb_PeriodicityServingCell !=80) && - (SIB1_ssb_PeriodicityServingCell !=160)&&){ + (SIB1_ssb_PeriodicityServingCell !=160) ){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SIB1_ssb_PeriodicityServingCell choice: 5,10,20,40,80,160 !\n", RC.config_file_name, i, SIB1_ssb_PeriodicityServingCell); } @@ -507,15 +721,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(DL_SCS_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(DL_SCS_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, DL_SCS_SubcarrierSpacing); @@ -523,15 +737,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (DL_SCS_SpecificCarrier_k0) { case -6: - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n_6; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n_6; break; case 0: - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n0; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n0; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n6; + NRRRC_CONFIGURATION_REQ (msg_p).DL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n6; break; default: @@ -554,15 +768,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(DL_BWP_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(DL_BWP_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).DL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for DL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, DL_BWP_SubcarrierSpacing); @@ -605,10 +819,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { RC.config_file_name, i, UL_p_Max); } - if (strcmp(UL_frequencyShift7p5khz, "TRUE") == 0) { - RRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = FrequencyInfoUL__frequencyShift7p5khz_true; //enum true = 0 - }else if{ - RRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = 1;//false + if (strcmp(UL_frequencyShift7p5khz,"TRUE") == 0) { + NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = NR_FrequencyInfoUL__frequencyShift7p5khz_true; //enum true = 0 + }else{ + NRRRC_CONFIGURATION_REQ (msg_p).UL_frequencyShift7p5khz[j] = 1;//false } /////////////////////////////////NR UL SCS-SpecificCarrier/////////////////////////// @@ -619,30 +833,30 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(UL_SCS_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(UL_SCS_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_SCS_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, UL_SCS_SubcarrierSpacing); } switch (UL_SCS_SpecificCarrier_k0) { case -6: - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n_6; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n_6; break; case 0: - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n0; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n0; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = SCS_SpecificCarrier__k0_n6; + NRRRC_CONFIGURATION_REQ (msg_p).UL_SCS_SpecificCarrier_k0[j] = NR_SCS_SpecificCarrier__k0_n6; break; default: @@ -658,16 +872,6 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } - - //Not Sure the value selection - NRRRC_CONFIGURATION_REQ (msg_p).absoluteFrequencyPointA[j] = absoluteFrequencyPointA; - - NRRRC_CONFIGURATION_REQ (msg_p).ControlResourceSetId[j] = ControlResourceSetId; - if ((ControlResourceSetId <0) || (ControlResourceSetId > 11)){ - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ControlResourceSetId choice: 0..11 !\n", - RC.config_file_name, i, ControlResourceSetId); - } - /////////////////////////////////NR BWP-UplinkCommon/////////////////////////// NRRRC_CONFIGURATION_REQ (msg_p).UL_locationAndBandwidth[j] = UL_locationAndBandwidth; if ((UL_locationAndBandwidth <0) || (UL_locationAndBandwidth > 37949)){ @@ -676,15 +880,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(UL_BWP_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(UL_BWP_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).UL_BWP_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for UL_BWP_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, UL_BWP_SubcarrierSpacing); @@ -703,13 +907,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"shortBitmap")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap; }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"mediumBitmap")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap; }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"longBitmap")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap; }else if (strcmp(ServingCellConfigCommon_ssb_PositionsInBurst_PR,"NOTHING")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = ServingCellConfigCommon__ssb_PositionsInBurst_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_PositionsInBurst_PR[j] = NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_NOTHING; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for ServingCellConfigCommon_ssb_PositionsInBurst_PR choice !\n", RC.config_file_name, i, ServingCellConfigCommon_ssb_PositionsInBurst_PR); @@ -718,27 +922,27 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (ServingCellConfigCommon_ssb_periodicityServingCell) { case 5: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms5; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms5; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms10; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms10; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms20; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms20; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms40; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms40; break; case 80: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms80; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms80; break; case 160: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = ServingCellConfigCommon__ssb_periodicityServingCell_ms160; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_ssb_periodicityServingCell[j] = NR_ServingCellConfigCommon__ssb_periodicityServingCell_ms160; break; default: @@ -749,11 +953,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (ServingCellConfigCommon_dmrs_TypeA_Position) { case 2: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos2; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = ServingCellConfigCommon__dmrs_TypeA_Position_pos3; + NRRRC_CONFIGURATION_REQ (msg_p).ServingCellConfigCommon_dmrs_TypeA_Position[j] = NR_ServingCellConfigCommon__dmrs_TypeA_Position_pos3; break; default: @@ -763,15 +967,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(NIA_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(NIA_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(NIA_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(NIA_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(NIA_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).NIA_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for NIA_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, NIA_SubcarrierSpacing); } @@ -784,36 +988,36 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { /////////////////////////////////NR TDD-UL-DL-ConfigCommon/////////////////////////// if (strcmp(referenceSubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(referenceSubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(referenceSubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(referenceSubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(referenceSubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).referenceSubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for referenceSubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, referenceSubcarrierSpacing); } if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p5")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p5; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p5; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms0p625")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p625; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms0p625; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms1p25")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1p25; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms1p25; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms2p5")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2p5; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms2p5; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms5")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms5; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms5; }else if (strcmp(dl_UL_TransmissionPeriodicity,"ms10")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms10; + NRRRC_CONFIGURATION_REQ (msg_p).dl_UL_TransmissionPeriodicity[j] = NR_TDD_UL_DL_ConfigCommon__dl_UL_TransmissionPeriodicity_ms10; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for dl_UL_TransmissionPeriodicity choice: minusinfinity,ms0p5,ms0p625,ms1,ms1p25,ms2,ms2p5,ms5,ms10 !\n", RC.config_file_name, i, dl_UL_TransmissionPeriodicity); @@ -853,55 +1057,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneEighth")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth; switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth){ case 4: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n8; break; case 12: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n12; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n20; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n24; break; case 28: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n28; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n32; break; case 36: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n36; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n40; break; case 44: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n44; break; case 48: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n48; break; case 52: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n52; break; case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n56; break; case 60: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n60; break; case 64: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneEighth_n64; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", @@ -911,55 +1115,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneFourth")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth; switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth){ case 4: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n8; break; case 12: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n12; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n20; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n24; break; case 28: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n28; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n32; break; case 36: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n36; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n40; break; case 44: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n44; break; case 48: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n48; break; case 52: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n52; break; case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n56; break; case 60: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n60; break; case 64: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneFourth_n64; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", @@ -969,55 +1173,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"oneHalf")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf; switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf){ case 4: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n8; break; case 12: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n12; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n20; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n24; break; case 28: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n28; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n32; break; case 36: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n36; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n40; break; case 44: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n44; break; case 48: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n48; break; case 52: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n52; break; case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n56; break; case 60: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n60; break; case 64: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__oneHalf_n64; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", @@ -1027,55 +1231,55 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"one")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one; switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){ case 4: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n8; break; case 12: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n12; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n20; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n24; break; case 28: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n28; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n32; break; case 36: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n36; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n40; break; case 44: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n44; break; case 48: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n48; break; case 52: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n52; break; case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n56; break; case 60: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n60; break; case 64: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__one_n64; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", @@ -1085,31 +1289,31 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"two")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two; switch (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one){ case 4: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n8; break; case 12: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n12; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n20; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n24; break; case 28: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n28; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB__two_n32; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two choice: 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64!\n", @@ -1119,7 +1323,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"four")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four; NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four; if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four > 16)){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four choice: 1..16 !\n", @@ -1128,7 +1332,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"eight")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight; NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight; if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight > 8)){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight choice: 1..8 !\n", @@ -1137,7 +1341,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"sixteen")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen; NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[j] = rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen; if ((rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen < 1) || (rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen > 4)){ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen choice: 1..4 !\n", @@ -1145,7 +1349,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }//End sixteen }else if (strcmp(rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice,"NOTHING")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[j] = NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_NOTHING; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice: oneEighth,oneFourth,oneHalf,one,two,four,eight,sixteen !\n", RC.config_file_name, i, rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice); @@ -1156,31 +1360,31 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (rach_ra_Msg3SizeGroupA) { case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b56; break; case 144: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b144; break; case 208: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b208; break; case 256: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b256; break; case 282: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b282; break; case 480: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b480; break; case 640: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b640; break; case 800: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b800; break; case 1000: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_Msg3SizeGroupA[j] = NR_RACH_ConfigCommon__groupBconfigured__ra_Msg3SizeGroupA_b1000; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_Msg3SizeGroupA choice: 56,144,208,256,282,480,640,800,1000!\n", @@ -1189,21 +1393,21 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }// End switch (rach_ra_Msg3SizeGroupA) if (strcmp(rach_messagePowerOffsetGroupB,"minusinfinity")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_minusinfinity; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB0")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB0; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB5")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB5; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB8")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB8; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB10")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB10; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB12")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB12; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB15")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB15; }else if (strcmp(rach_messagePowerOffsetGroupB,"dB18")==0) { - RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18; + RRC_CONFIGURATION_REQ (msg_p).rach_messagePowerOffsetGroupB[j] = NR_RACH_ConfigCommon__groupBconfigured__messagePowerOffsetGroupB_dB18; }else{ AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for rach_messagePowerOffsetGroupB choice: minusinfinity,dB0,dB5,dB8,dB10,dB12,dB15,dB18!\n", RC.config_file_name, i, rach_messagePowerOffsetGroupB); @@ -1219,28 +1423,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (rach_ra_ContentionResolutionTimer) { case 8: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf8; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf16; break; case 24: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf24; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf32; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf40; break; case 48: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf48; break; case 56: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf56; break; case 64: - NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64; + NRRRC_CONFIGURATION_REQ (msg_p).rach_ra_ContentionResolutionTimer[j] = NR_RACH_ConfigCommon__ra_ContentionResolutionTimer_sf64; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for rach_ra_ContentionResolutionTimer choice: 8,16,24,32,40,48,56,64!\n", @@ -1262,37 +1466,37 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(prach_RootSequenceIndex_choice , "l839") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839; + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839; NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l839[j] = prach_RootSequenceIndex_l839; }else if (strcmp(prach_RootSequenceIndex_choice , "l139") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139; + NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_choice[j] = NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139; NRRRC_CONFIGURATION_REQ (msg_p).prach_RootSequenceIndex_l139[j] = prach_RootSequenceIndex_l139; }else { - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex !\n", - RC.config_file_name, i, prach_RootSequenceIndex); + AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_RootSequenceIndex_choice !\n", + RC.config_file_name, i, prach_RootSequenceIndex_choice); } if (strcmp(prach_msg1_SubcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(prach_msg1_SubcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_SubcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for prach_msg1_SubcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, prach_msg1_SubcarrierSpacing); } if (strcmp(restrictedSetConfig , "unrestrictedSet") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet; + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_unrestrictedSet; }else if (strcmp(restrictedSetConfig , "restrictedSetTypeA") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA; + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeA; }else if (strcmp(restrictedSetConfig , "restrictedSetTypeB") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB; + NRRRC_CONFIGURATION_REQ (msg_p).restrictedSetConfig[j] = NR_RACH_ConfigCommon__restrictedSetConfig_restrictedSetTypeB; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for restrictedSetConfig !\n", RC.config_file_name, i, restrictedSetConfig); @@ -1310,13 +1514,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(prach_msg1_FDM , "one") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_one; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_one; }else if (strcmp(prach_msg1_FDM , "two") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_two; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_two; }else if (strcmp(prach_msg1_FDM , "four") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_four; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_four; }else if (strcmp(prach_msg1_FDM , "eight") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = RACH_ConfigGeneric__msg1_FDM_eight; + NRRRC_CONFIGURATION_REQ (msg_p).prach_msg1_FDM[j] = NR_RACH_ConfigGeneric__msg1_FDM_eight; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for prach_msg1_FDM !\n", RC.config_file_name, i, prach_msg1_FDM); @@ -1342,37 +1546,37 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (preambleTransMax) { case 3: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n3; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n4; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n5; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n6; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n6; break; case 7: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n7; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n7; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n8; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n8; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n10; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n10; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n20; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n20; break; case 50: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n50; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n50; break; case 100: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n100; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n100; break; case 200: - NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = RACH_ConfigGeneric__preambleTransMax_n200; + NRRRC_CONFIGURATION_REQ (msg_p).preambleTransMax[j] = NR_RACH_ConfigGeneric__preambleTransMax_n200; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for preambleTransMax choice: 3,4,5,6,7,8,10,20,50,100,200 !\n", @@ -1381,13 +1585,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(powerRampingStep , "dB0") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB0; + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB0; }else if (strcmp(powerRampingStep , "dB2") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB2; + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB2; }else if (strcmp(powerRampingStep , "dB4") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB4; + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB4; }else if (strcmp(powerRampingStep , "dB6") == 0) { - NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = RACH_ConfigGeneric__powerRampingStep_dB6; + NRRRC_CONFIGURATION_REQ (msg_p).powerRampingStep[j] = NR_RACH_ConfigGeneric__powerRampingStep_dB6; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for powerRampingStep !\n", RC.config_file_name, i, powerRampingStep); @@ -1395,28 +1599,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch (ra_ResponseWindow) { case 1: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl1; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl2; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl2; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl4; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl8; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl8; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl10; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl10; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl20; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl20; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl40; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl40; break; case 80: - NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = RACH_ConfigGeneric__ra_ResponseWindow_sl80; + NRRRC_CONFIGURATION_REQ (msg_p).ra_ResponseWindow[j] = NR_RACH_ConfigGeneric__ra_ResponseWindow_sl80; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ra_ResponseWindow choice: 1,2,4,8,10,20,40,80 !\n", @@ -1449,9 +1653,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = PUSCH_TimeDomainResourceAllocation__mappingType_typeA; + NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeA; }else if (strcmp(PUSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = PUSCH_TimeDomainResourceAllocation__mappingType_typeB; + NRRRC_CONFIGURATION_REQ (msg_p).PUSCH_TimeDomainResourceAllocation_mappingType[j] = NR_PUSCH_TimeDomainResourceAllocation__mappingType_typeB; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PUSCH_TimeDomainResourceAllocation_mappingType !\n", RC.config_file_name, i, PUSCH_TimeDomainResourceAllocation_mappingType); @@ -1459,11 +1663,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { /////////////////////////////////NR PUCCH-ConfigCommon/////////////////////////// if (strcmp(pucch_GroupHopping , "neither") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_neither; + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = NR_PUCCH_ConfigCommon__pucch_GroupHopping_neither; }else if (strcmp(pucch_GroupHopping , "enable") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_enable; + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = NR_PUCCH_ConfigCommon__pucch_GroupHopping_enable; }else if (strcmp(pucch_GroupHopping , "disable") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = PUCCH_ConfigCommon__pucch_GroupHopping_disable; + NRRRC_CONFIGURATION_REQ (msg_p).pucch_GroupHopping[j] = NR_PUCCH_ConfigCommon__pucch_GroupHopping_disable; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for pucch_GroupHopping !\n", RC.config_file_name, i, pucch_GroupHopping); @@ -1483,9 +1687,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeA") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = PDSCH_TimeDomainResourceAllocation__mappingType_typeA; + NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeA; }else if (strcmp(PDSCH_TimeDomainResourceAllocation_mappingType , "typeB") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = PDSCH_TimeDomainResourceAllocation__mappingType_typeB; + NRRRC_CONFIGURATION_REQ (msg_p).PDSCH_TimeDomainResourceAllocation_mappingType[j] = NR_PDSCH_TimeDomainResourceAllocation__mappingType_typeB; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDSCH_TimeDomainResourceAllocation_mappingType !\n", RC.config_file_name, i, PDSCH_TimeDomainResourceAllocation_mappingType); @@ -1499,22 +1703,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(RateMatchPattern_patternType , "NOTHING") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = NR_RateMatchPattern__patternType_PR_NOTHING; }else if (strcmp(RateMatchPattern_patternType , "bitmaps") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_bitmaps; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = NR_RateMatchPattern__patternType_PR_bitmaps; }else if (strcmp(RateMatchPattern_patternType , "controlResourceSet") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = RateMatchPattern__patternType_PR_controlResourceSet; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_patternType[j] = NR_RateMatchPattern__patternType_PR_controlResourceSet; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_patternType !\n", RC.config_file_name, i, RateMatchPattern_patternType); } if (strcmp(symbolsInResourceBlock , "NOTHING") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_NOTHING; }else if (strcmp(symbolsInResourceBlock , "oneSlot") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot; + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot; }else if (strcmp(symbolsInResourceBlock , "twoSlots") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots; + NRRRC_CONFIGURATION_REQ (msg_p).symbolsInResourceBlock[j] = NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for symbolsInResourceBlock !\n", RC.config_file_name, i, symbolsInResourceBlock); @@ -1522,25 +1726,25 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(periodicityAndPattern){ case 2: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20; break; case 40: - NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40; + NRRRC_CONFIGURATION_REQ (msg_p).periodicityAndPattern[j] = NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for periodicityAndPattern choice: 2,4,5,8,10,20,40 !\n", @@ -1555,24 +1759,24 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz15")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz15; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz15; }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz30")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz30; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz30; }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz60")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz60; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz60; }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz120")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz120; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz120; }else if (strcmp(RateMatchPattern_subcarrierSpacing,"kHz240")==0) { - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = SubcarrierSpacing_kHz240; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_subcarrierSpacing[j] = NR_SubcarrierSpacing_kHz240; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for RateMatchPattern_subcarrierSpacing choice: minusinfinity,kHz15,kHz30,kHz60,kHz120,kHz240!\n", RC.config_file_name, i, RateMatchPattern_subcarrierSpacing); } if (strcmp(RateMatchPattern_mode , "dynamic") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = RateMatchPattern__mode_dynamic; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = NR_RateMatchPattern__mode_dynamic; }else if (strcmp(RateMatchPattern_mode , "semiStatic") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = RateMatchPattern__mode_semiStatic; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPattern_mode[j] = NR_RateMatchPattern__mode_semiStatic; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPattern_mode !\n", RC.config_file_name, i, RateMatchPattern_mode); @@ -1623,11 +1827,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(PDCCH_cce_REG_MappingType , "NOTHING") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = NR_ControlResourceSet__cce_REG_MappingType_PR_NOTHING; }else if (strcmp(PDCCH_cce_REG_MappingType , "interleaved") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_interleaved; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved; }else if (strcmp(PDCCH_cce_REG_MappingType , "nonInterleaved") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_cce_REG_MappingType[j] = NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_cce_REG_MappingType !\n", RC.config_file_name, i, PDCCH_cce_REG_MappingType); @@ -1635,13 +1839,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(PDCCH_reg_BundleSize){ case 2: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_reg_BundleSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_reg_BundleSize choice: 2,3,6 !\n", @@ -1651,13 +1855,13 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(PDCCH_interleaverSize){ case 2: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n3; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_interleaverSize[j] = NR_ControlResourceSet__cce_REG_MappingType__interleaved__reg_BundleSize_n6; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_interleaverSize choice: 2,3,6 !\n", @@ -1672,9 +1876,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(PDCCH_precoderGranularity , "sameAsREG-bundle") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = ControlResourceSet__precoderGranularity_sameAsREG_bundle; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = NR_ControlResourceSet__precoderGranularity_sameAsREG_bundle; }else if (strcmp(PDCCH_precoderGranularity , "allContiguousRBs") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = ControlResourceSet__precoderGranularity_allContiguousRBs; + NRRRC_CONFIGURATION_REQ (msg_p).PDCCH_precoderGranularity[j] = NR_ControlResourceSet__precoderGranularity_allContiguousRBs; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for PDCCH_precoderGranularity !\n", RC.config_file_name, i, PDCCH_precoderGranularity); @@ -1704,12 +1908,12 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl1") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[j] = NULL; }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl2") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl2; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl2 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl2>1)){ @@ -1718,7 +1922,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl4") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl4; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl4 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl4>3)){ @@ -1727,7 +1931,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl5") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl5; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl5 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl5>4)){ @@ -1736,7 +1940,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl8") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl8; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl8 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl8>7)){ @@ -1745,7 +1949,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl10") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl10; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl10 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl10>9)){ @@ -1754,7 +1958,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl16") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl16; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl16 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl16>15)){ @@ -1763,7 +1967,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "sl20") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20; NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[j] = SearchSpace_monitoringSlotPeriodicityAndOffset_sl20; if ((SearchSpace_monitoringSlotPeriodicityAndOffset_sl20 <0) || (SearchSpace_monitoringSlotPeriodicityAndOffset_sl20>19)){ @@ -1772,7 +1976,7 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } }else if (strcmp(SearchSpace_monitoringSlotPeriodicityAndOffset_choice , "UNABLE") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_monitoringSlotPeriodicityAndOffset_choice[j] = NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_NOTHING; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_monitoringSlotPeriodicityAndOffset_choice !\n", @@ -1782,28 +1986,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(SearchSpace_nrofCandidates_aggregationLevel1){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n0; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n3; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n6; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n6; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = SearchSpace__nrofCandidates__aggregationLevel1_n8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel1[j] = NR_SearchSpace__nrofCandidates__aggregationLevel1_n8; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel1 choice: 0,1,2,3,4,5,6,8 !\n", @@ -1813,28 +2017,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(SearchSpace_nrofCandidates_aggregationLevel2){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n0; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n3; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n6; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n6; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = SearchSpace__nrofCandidates__aggregationLevel2_n8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel2[j] = NR_SearchSpace__nrofCandidates__aggregationLevel2_n8; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel2 choice: 0,1,2,3,4,5,6,8 !\n", @@ -1844,28 +2048,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(SearchSpace_nrofCandidates_aggregationLevel4){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n0; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n3; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n6; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n6; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = SearchSpace__nrofCandidates__aggregationLevel4_n8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel4[j] = NR_SearchSpace__nrofCandidates__aggregationLevel4_n8; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel4 choice: 0,1,2,3,4,5,6,8 !\n", @@ -1875,28 +2079,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(SearchSpace_nrofCandidates_aggregationLevel8){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n0; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n3; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n6; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n6; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = SearchSpace__nrofCandidates__aggregationLevel8_n8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel8[j] = NR_SearchSpace__nrofCandidates__aggregationLevel8_n8; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel8 choice: 0,1,2,3,4,5,6,8 !\n", @@ -1906,28 +2110,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(SearchSpace_nrofCandidates_aggregationLevel16){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n0; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n1; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n2; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n3; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n4; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n5; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n5; break; case 6: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n6; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n6; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = SearchSpace__nrofCandidates__aggregationLevel16_n8; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_nrofCandidates_aggregationLevel16[j] = NR_SearchSpace__nrofCandidates__aggregationLevel16_n8; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_nrofCandidates_aggregationLevel16 choice: 0,1,2,3,4,5,6,8 !\n", @@ -1936,11 +2140,11 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(SearchSpace_searchSpaceType , "NOTHING") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_NOTHING; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = NR_SearchSpace__searchSpaceType_PR_NOTHING; }else if (strcmp(SearchSpace_searchSpaceType , "common") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_common; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = NR_SearchSpace__searchSpaceType_PR_common; }else if (strcmp(SearchSpace_searchSpaceType , "ue_Specific") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = SearchSpace__searchSpaceType_PR_ue_Specific; + NRRRC_CONFIGURATION_REQ (msg_p).SearchSpace_searchSpaceType[j] = NR_SearchSpace__searchSpaceType_PR_ue_Specific; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for SearchSpace_searchSpaceType !\n", RC.config_file_name, i, SearchSpace_searchSpaceType); @@ -1948,10 +2152,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel1_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1 choice: 1,2 !\n", @@ -1961,10 +2165,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel2_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2 choice: 1,2 !\n", @@ -1974,10 +2178,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel4_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4 choice: 1,2 !\n", @@ -1987,10 +2191,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel8_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8 choice: 1,2 !\n", @@ -2000,10 +2204,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_0__nrofCandidates_SFI__aggregationLevel16_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16 choice: 1,2 !\n", @@ -2013,28 +2217,28 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_3_monitoringPeriodicity){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n2; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n5; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n8; break; case 10: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n10; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n16; break; case 20: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_monitoringPeriodicity[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__monitoringPeriodicity_n20; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_monitoringPeriodicity choice: 1,2,4,5,8,10,16,20 !\n", @@ -2044,10 +2248,10 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(Common_dci_Format2_3_nrofPDCCH_Candidates){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2; + NRRRC_CONFIGURATION_REQ (msg_p).Common_dci_Format2_3_nrofPDCCH_Candidates[j] = NR_SearchSpace__searchSpaceType__common__dci_Format2_3__nrofPDCCH_Candidates_n2; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for Common_dci_Format2_3_nrofPDCCH_Candidates choice: 1,2 !\n", @@ -2056,9 +2260,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(ue_Specific__dci_Formats , "formats0-0-And-1-0") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0; + NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_0_And_1_0; }else if (strcmp(ue_Specific__dci_Formats , "formats0-1-And-1-1") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1; + NRRRC_CONFIGURATION_REQ (msg_p).ue_Specific__dci_Formats[j] = NR_SearchSpace__searchSpaceType__ue_Specific__dci_Formats_formats0_1_And_1_1; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for ue_Specific__dci_Formats !\n", RC.config_file_name, i, ue_Specific__dci_Formats); @@ -2068,22 +2272,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(RateMatchPatternLTE_CRS_carrierBandwidthDL){ case 6: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n6; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n6; break; case 15: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n15; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n15; break; case 25: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n25; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n25; break; case 50: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n50; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n50; break; case 75: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n75; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n75; break; case 100: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS__carrierBandwidthDL_n100; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = NR_RateMatchPatternLTE_CRS__carrierBandwidthDL_n100; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierBandwidthDL choice: 6,15,25,50,75,100 !\n", @@ -2091,21 +2295,15 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { break; } - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_carrierBandwidthDL[j] = RateMatchPatternLTE_CRS_carrierBandwidthDL; - if ((RateMatchPatternLTE_CRS_carrierBandwidthDL <0) || (RateMatchPatternLTE_CRS_carrierBandwidthDL>16383)){ - AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_carrierBandwidthDL choice: 0..16383 !\n", - RC.config_file_name, i, RateMatchPatternLTE_CRS_carrierBandwidthDL); - } - switch(RateMatchPatternLTE_CRS_nrofCRS_Ports){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n1; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n2; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n2; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = RateMatchPatternLTE_CRS__nrofCRS_Ports_n4; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_nrofCRS_Ports[j] = NR_RateMatchPatternLTE_CRS__nrofCRS_Ports_n4; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_nrofCRS_Ports choice: 1,2,4 !\n", @@ -2115,22 +2313,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(RateMatchPatternLTE_CRS_v_Shift){ case 0: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n0; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n0; break; case 1: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n1; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n2; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n2; break; case 3: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n3; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n3; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n4; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n4; break; case 5: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = RateMatchPatternLTE_CRS__v_Shift_n5; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_v_Shift[j] = NR_RateMatchPatternLTE_CRS__v_Shift_n5; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_v_Shift choice: 0,1,2,3,4,5 !\n", @@ -2140,22 +2338,22 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { switch(RateMatchPatternLTE_CRS_radioframeAllocationPeriod){ case 1: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n1; break; case 2: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n2; break; case 4: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n4; break; case 8: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n8; break; case 16: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n16; break; case 32: - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n32; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_radioframeAllocationPeriod[j] = NR_EUTRA_MBSFN_SubframeConfig__radioframeAllocationPeriod_n32; break; default: AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_radioframeAllocationPeriod choice: 1,2,4,8,16,32 !\n", @@ -2170,9 +2368,9 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { } if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "oneFrame") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = NR_EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame; }else if (strcmp(RateMatchPatternLTE_CRS_subframeAllocation_choice , "fourFrames") == 0){ - NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames; + NRRRC_CONFIGURATION_REQ (msg_p).RateMatchPatternLTE_CRS_subframeAllocation_choice[j] = NR_EUTRA_MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames; }else { AssertFatal (0,"Failed to parse gNB configuration file %s, gnb %d unknown value \"%d\" for RateMatchPatternLTE_CRS_subframeAllocation_choice !\n", RC.config_file_name, i, RateMatchPatternLTE_CRS_subframeAllocation_choice); @@ -2193,13 +2391,199 @@ int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc) { }//End RCconfig_NRRRC function -void NRRCConfig(void) { +int RCconfig_NR_S1(MessageDef *msg_p, uint32_t i) { + + int j,k = 0; + int gnb_id; + int32_t my_int; + const char* active_gnb[MAX_GNB]; + char *address = NULL; + char *cidr = NULL; + + // for no gcc warnings + + (void) my_int; + + memset((char*)active_gnb,0,MAX_GNB* sizeof(char*)); - // paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; - // paramlist_def_t L1ParamList = {CONFIG_STRING_L1_LIST,NULL,0}; - // paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0}; paramdef_t GNBSParams[] = GNBSPARAMS_DESC; - paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; + paramdef_t GNBParams[] = GNBPARAMS_DESC; + paramlist_def_t GNBParamList = {GNB_CONFIG_STRING_GNB_LIST,NULL,0}; + +/* get global parameters, defined outside any section in the config file */ + + config_get( GNBSParams,sizeof(GNBSParams)/sizeof(paramdef_t),NULL); + +#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME) + if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_NONE) == 0) { + asn_debug = 0; + asn1_xer_print = 0; + } else if (strcasecmp( *(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr), GNB_CONFIG_STRING_ASN1_VERBOSITY_INFO) == 0) { + asn_debug = 1; + asn1_xer_print = 1; + } else if (strcasecmp(*(GNBSParams[GNB_ASN1_VERBOSITY_IDX].strptr) , GNB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING) == 0) { + asn_debug = 1; + asn1_xer_print = 2; + } else { + asn_debug = 0; + asn1_xer_print = 0; + } + +#endif + + AssertFatal (i<GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt, + "Failed to parse config file %s, %uth attribute %s \n", + RC.config_file_name, i, GNB_CONFIG_STRING_ACTIVE_GNBS); + + + if (GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt>0) { + // Output a list of all gNBs. + config_getlist( &GNBParamList,GNBParams,sizeof(GNBParams)/sizeof(paramdef_t),NULL); + + + + + + if (GNBParamList.numelt > 0) { + for (k = 0; k < GNBParamList.numelt; k++) { + if (GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr == NULL) { + // Calculate a default gNB ID + +# if defined(ENABLE_USE_MME) + uint32_t hash; + + hash = s1ap_generate_eNB_id (); + gnb_id = k + (hash & 0xFFFF8); +# else + gnb_id = k; +# endif + } else { + gnb_id = *(GNBParamList.paramarray[k][GNB_GNB_ID_IDX].uptr); + } + + + // search if in active list + for (j=0; j < GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; j++) { + if (strcmp(GNBSParams[GNB_ACTIVE_GNBS_IDX].strlistptr[j], *(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)) == 0) { + paramdef_t S1Params[] = S1PARAMS_DESC; + paramlist_def_t S1ParamList = {GNB_CONFIG_STRING_MME_IP_ADDRESS,NULL,0}; + + paramdef_t SCTPParams[] = SCTPPARAMS_DESC; + paramdef_t NETParams[] = NETPARAMS_DESC; + char aprefix[MAX_OPTNAME_SIZE*2 + 8]; + + S1AP_REGISTER_ENB_REQ (msg_p).eNB_id = gnb_id; + + if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_MACRO_GNB") == 0) { + S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_MACRO_ENB; + } else if (strcmp(*(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr), "CELL_HOME_GNB") == 0) { + S1AP_REGISTER_ENB_REQ (msg_p).cell_type = CELL_HOME_ENB; + } else { + AssertFatal (0, + "Failed to parse gNB configuration file %s, gnb %d unknown value \"%s\" for cell_type choice: CELL_MACRO_GNB or CELL_HOME_GNB !\n", + RC.config_file_name, i, *(GNBParamList.paramarray[k][GNB_CELL_TYPE_IDX].strptr)); + } + + S1AP_REGISTER_ENB_REQ (msg_p).eNB_name = strdup(*(GNBParamList.paramarray[k][GNB_GNB_NAME_IDX].strptr)); + S1AP_REGISTER_ENB_REQ (msg_p).tac = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_TRACKING_AREA_CODE_IDX].strptr)); + S1AP_REGISTER_ENB_REQ (msg_p).mcc = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_COUNTRY_CODE_IDX].strptr)); + S1AP_REGISTER_ENB_REQ (msg_p).mnc = (uint16_t)atoi(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr)); + S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length = strlen(*(GNBParamList.paramarray[k][GNB_MOBILE_NETWORK_CODE_IDX].strptr)); + S1AP_REGISTER_ENB_REQ (msg_p).default_drx = 0; + AssertFatal((S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 2) || + (S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length == 3), + "BAD MNC DIGIT LENGTH %d", + S1AP_REGISTER_ENB_REQ (msg_p).mnc_digit_length); + + sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,k); + config_getlist( &S1ParamList,S1Params,sizeof(S1Params)/sizeof(paramdef_t),aprefix); + + S1AP_REGISTER_ENB_REQ (msg_p).nb_mme = 0; + + for (int l = 0; l < S1ParamList.numelt; l++) { + + S1AP_REGISTER_ENB_REQ (msg_p).nb_mme += 1; + + strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv4_address,*(S1ParamList.paramarray[l][GNB_MME_IPV4_ADDRESS_IDX].strptr)); + strcpy(S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[l].ipv6_address,*(S1ParamList.paramarray[l][GNB_MME_IPV6_ADDRESS_IDX].strptr)); + + if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_ACTIVE_IDX].strptr), "yes") == 0) { +#if defined(ENABLE_USE_MME) + EPC_MODE_ENABLED = 1; +#endif + } + if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv4") == 0) { + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1; + } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "ipv6") == 0) { + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1; + } else if (strcmp(*(S1ParamList.paramarray[l][GNB_MME_IP_ADDRESS_PREFERENCE_IDX].strptr), "no") == 0) { + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv4 = 1; + S1AP_REGISTER_ENB_REQ (msg_p).mme_ip_address[j].ipv6 = 1; + } + } + + + // SCTP SETTING + S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = SCTP_OUT_STREAMS; + S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = SCTP_IN_STREAMS; +# if defined(ENABLE_USE_MME) + sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_SCTP_CONFIG); + config_get( SCTPParams,sizeof(SCTPParams)/sizeof(paramdef_t),aprefix); + S1AP_REGISTER_ENB_REQ (msg_p).sctp_in_streams = (uint16_t)*(SCTPParams[GNB_SCTP_INSTREAMS_IDX].uptr); + S1AP_REGISTER_ENB_REQ (msg_p).sctp_out_streams = (uint16_t)*(SCTPParams[GNB_SCTP_OUTSTREAMS_IDX].uptr); +#endif + + sprintf(aprefix,"%s.[%i].%s",GNB_CONFIG_STRING_GNB_LIST,k,GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG); + // NETWORK_INTERFACES + config_get( NETParams,sizeof(NETParams)/sizeof(paramdef_t),aprefix); + + // S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1U = strdup(enb_interface_name_for_S1U); + cidr = *(NETParams[GNB_IPV4_ADDRESS_FOR_S1_MME_IDX].strptr); + address = strtok(cidr, "/"); + + S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv6 = 0; + S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4 = 1; + + strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, address); + + /* + in_addr_t ipv4_address; + + if (address) { + IPV4_STR_ADDR_TO_INT_NWBO ( address, ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB S1_U !\n" ); + } + strcpy(S1AP_REGISTER_ENB_REQ (msg_p).enb_ip_address.ipv4_address, inet_ntoa(ipv4_address)); + // S1AP_REGISTER_ENB_REQ (msg_p).enb_port_for_S1U = enb_port_for_S1U; + + + S1AP_REGISTER_ENB_REQ (msg_p).enb_interface_name_for_S1_MME = strdup(enb_interface_name_for_S1_MME); + cidr = enb_ipv4_address_for_S1_MME; + address = strtok(cidr, "/"); + + if (address) { + IPV4_STR_ADDR_TO_INT_NWBO ( address, S1AP_REGISTER_ENB_REQ(msg_p).enb_ipv4_address_for_S1_MME, "BAD IP ADDRESS FORMAT FOR eNB S1_MME !\n" ); + } +*/ + + + + + break; + } + } + } + } + } +return 0; +} + +void NRRCConfig(void) { + + paramlist_def_t MACRLCParamList = {CONFIG_STRING_MACRLC_LIST,NULL,0}; + paramlist_def_t L1ParamList = {CONFIG_STRING_L1_LIST,NULL,0}; + paramlist_def_t RUParamList = {CONFIG_STRING_RU_LIST,NULL,0}; + paramdef_t GNBSParams[] = GNBSPARAMS_DESC; + paramlist_def_t CCsParamList = {GNB_CONFIG_STRING_COMPONENT_CARRIERS,NULL,0}; char aprefix[MAX_OPTNAME_SIZE*2 + 8]; @@ -2213,15 +2597,15 @@ void NRRCConfig(void) { RC.nb_nr_inst = GNBSParams[GNB_ACTIVE_GNBS_IDX].numelt; if (RC.nb_nr_inst > 0) { - RC.nb_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int)); + RC.nb_nr_CC = (int *)malloc((1+RC.nb_nr_inst)*sizeof(int)); for (int i=0;i<RC.nb_nr_inst;i++) { sprintf(aprefix,"%s.[%i]",GNB_CONFIG_STRING_GNB_LIST,i); config_getlist( &CCsParamList,NULL,0, aprefix); - RC.nb_CC[i] = CCsParamList.numelt; + RC.nb_nr_CC[i] = CCsParamList.numelt; } } -/* + // Get num MACRLC instances config_getlist( &MACRLCParamList,NULL,0, NULL); RC.nb_macrlc_inst = MACRLCParamList.numelt; @@ -2232,7 +2616,7 @@ void NRRCConfig(void) { // Get num RU instances config_getlist( &RUParamList,NULL,0, NULL); RC.nb_RU = RUParamList.numelt; - */ + } diff --git a/openair2/ENB_APP/gnb_config.h b/openair2/GNB_APP/gnb_config.h similarity index 83% rename from openair2/ENB_APP/gnb_config.h rename to openair2/GNB_APP/gnb_config.h index 179f7ac03d..4d816a7b32 100644 --- a/openair2/ENB_APP/gnb_config.h +++ b/openair2/GNB_APP/gnb_config.h @@ -37,17 +37,15 @@ #include "commonDef.h" #include "platform_types.h" #include "platform_constants.h" -#include "PHY/impl_defs_lte.h" -#include "PHY/defs.h" +#include "PHY/defs_eNB.h" #include "s1ap_messages_types.h" -//#ifdef CMAKER -//#include "SystemInformationBlockType2.h" -//#include "rrc_messages_types.h" -//#else -//#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h" -//#endif + +#ifdef CMAKER +#include "rrc_messages_types.h" +#endif + #include "intertask_interface_types.h" -#include "RRC/NR/defs_NR.h" +#include "RRC/NR/nr_rrc_defs.h" #define IPV4_STR_ADDR_TO_INT_NWBO(AdDr_StR,NwBo,MeSsAgE ) do {\ struct in_addr inp;\ @@ -64,7 +62,7 @@ */ // Hard to find a defined value for max enb... -#define MAX_ENB 16 +#define MAX_GNB 16 /* typedef struct mme_ip_address_s { @@ -93,18 +91,18 @@ typedef struct ru_config_s { uint8_t if_compress; } ru_config_t; */ -//extern void RCconfig_RU(void); -//extern void RCconfig_flexran(void); -//extern void RCconfig_L1(void); -//extern void RCconfig_macrlc(void); -//extern int RCconfig_gtpu(void ); +extern void RCconfig_RU(void); +extern void RCconfig_flexran(void); +extern void RCconfig_NR_L1(void); +extern void RCconfig_nr_macrlc(void); +extern int RCconfig_gtpu(void ); extern void NRRCConfig(void); //void enb_config_display(void); //void ru_config_display(void); -int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc); -//int RCconfig_S1(MessageDef *msg_p, uint32_t i); +int RCconfig_NRRRC(MessageDef *msg_p, uint32_t i, gNB_RRC_INST *rrc); +int RCconfig_S1(MessageDef *msg_p, uint32_t i); #endif /* GNB_CONFIG_H_ */ /** @} */ diff --git a/openair2/ENB_APP/gnb_paramdef.h b/openair2/GNB_APP/gnb_paramdef.h similarity index 71% rename from openair2/ENB_APP/gnb_paramdef.h rename to openair2/GNB_APP/gnb_paramdef.h index 96a18fa2ea..45b45e744a 100644 --- a/openair2/ENB_APP/gnb_paramdef.h +++ b/openair2/GNB_APP/gnb_paramdef.h @@ -31,7 +31,7 @@ */ #include "common/config/config_paramdesc.h" -#include "NRRRC_paramsvalues.h" +#include "NR_RRC_paramsvalues.h" #define GNB_CONFIG_STRING_CC_NODE_FUNCTION "node_function" @@ -401,14 +401,170 @@ typedef enum { #define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET "RateMatchPatternLTE_CRS_radioframeAllocationOffset" #define GNB_CONFIG_STRING_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE "RateMatchPatternLTE_CRS_subframeAllocation_choice" +/* init for checkedparam_t structure */ + +#define NRCCPARAMS_CHECK { \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ + { .s5= {NULL }} , \ +} + + /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ /* component carriers configuration parameters */ /* optname helpstr paramflags XXXptr defXXXval type numelt checked_param */ /*---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ #define NRCCPARAMS_DESC { \ {GNB_CONFIG_STRING_FRAME_TYPE, NULL, 0, strptr:&frame_type, defstrval:"FDD", TYPE_STRING, 0}, \ -{GNB_CONFIG_STRING_DL_prefix_type, NULL, 0, strptr:&DL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ -{GNB_CONFIG_STRING_UL_prefix_type, NULL, 0, strptr:&UL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_DL_PREFIX_TYPE, NULL, 0, strptr:&DL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_UL_PREFIX_TYPE, NULL, 0, strptr:&UL_prefix_type, defstrval:"NORMAL", TYPE_STRING, 0}, \ {GNB_CONFIG_STRING_EUTRA_BAND, NULL, 0, iptr:&eutra_band, defintval:7, TYPE_UINT, 0}, \ {GNB_CONFIG_STRING_DOWNLINK_FREQUENCY, NULL, 0, i64ptr:(int64_t *)&downlink_frequency, defint64val:2680000000, TYPE_UINT64, 0}, \ {GNB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET, NULL, 0, iptr:&uplink_frequency_offset, defintval:-120000000, TYPE_INT, 0}, \ @@ -553,153 +709,355 @@ typedef enum { /* component carries configuration parameters name */ -#define ENB_CONFIG_FRAME_TYPE_IDX 0 -#define ENB_CONFIG_DL_PREFIX_TYPE_IDX 1 -#define ENB_CONFIG_UL_PREFIX_TYPE_IDX 1 -#define ENB_CONFIG_EUTRA_BAND_IDX 2 -#define ENB_CONFIG_DOWNLINK_FREQUENCY_IDX 3 -#define ENB_CONFIG_UPLINK_FREQUENCY_OFFSET_IDX 4 -#define ENB_CONFIG_NID_CELL_IDX 5 -#define ENB_CONFIG_N_RB_DL_IDX 6 -#define GNB_CONFIG_NB_ANT_PORTS_IDX -#define GNB_CONFIG_NB_ANT_TX_IDX -#define GNB_CONFIG_NB_ANT_RX_IDX -#define GNB_CONFIG_TX_GAIN_IDX -#define GNB_CONFIG_RX_GAIN_IDX -#define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX -#define GNB_CONFIG_MIB_SSB_SUBCARRIEROFFSET_IDX -#define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX -#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX -#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX -#define GNB_CONFIG_SIB1_SSB_PERIODICITYSERVINGCELL_IDX -#define GNB_CONFIG_SIB1_SS_PBCH_BLOCKPOWER_IDX -#define GNB_CONFIG_ABSOLUTEFREQUENCYSSB_IDX -#define GNB_CONFIG_SSB_SUBCARRIEROFFSET_IDX -#define GNB_CONFIG_DL_FREQBANDINDICATORNR_IDX -#define GNB_CONFIG_DL_ABSOLUTEFREQUENCYPOINTA_IDX -#define GNB_CONFIG_DL_OFFSETTOCARRIER_IDX -#define GNB_CONFIG_DL_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_DL_SCS_SPECIFICCARRIER_K0_IDX -#define GNB_CONFIG_DL_CARRIERBANDWIDTH_IDX -#define GNB_CONFIG_DL_LOCATIONANDBANDWIDTH_IDX -#define GNB_CONFIG_DL_BWP_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_DL_BWP_PREFIX_TYPE_IDX -#define GNB_CONFIG_UL_FREQBANDINDICATORNR_IDX -#define GNB_CONFIG_UL_ABSOLUTEFREQUENCYPOINTA_IDX -#define GNB_CONFIG_UL_ADDITIONALSPECTRUMEMISSION_IDX; -#define GNB_CONFIG_UL_P_MAX_IDX -#define GNB_CONFIG_UL_FREQUENCYSHIFT7P5KHZ_IDX -#define GNB_CONFIG_UL_OFFSETTOCARRIER_IDX -#define GNB_CONFIG_UL_SCS_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_UL_SCS_SPECIFICCARRIER_K0_IDX -#define GNB_CONFIG_UL_CARRIERBANDWIDTH_IDX -#define GNB_CONFIG_UL_LOCATIONANDBANDWIDTH_IDX -#define GNB_CONFIG_UL_BWP_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_UL_BWP_PREFIX_TYPE_IDX -#define GNB_CONFIG_SUBCARRIERSPACINGCOMMON_IDX -#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX -#define GNB_CONFIG_FREQUENCYOFFSETSSB_IDX -#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_POSITIONSINBURST_PR_IDX -#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL_IDX -#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION_IDX -#define GNB_CONFIG_NIA_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER_IDX -#define GNB_CONFIG_REFERENCESUBCARRIERSPACING_IDX -#define GNB_CONFIG_DL_UL_TRANSMISSIONPERIODICITY_IDX -#define GNB_CONFIG_NROFDOWNLINKSLOTS_IDX -#define GNB_CONFIG_NROFDOWNLINKSYMBOLS_IDX -#define GNB_CONFIG_NROFUPLINKSLOTS_IDX -#define GNB_CONFIG_NROFUPLINKSYMBOLS_IDX -#define GNB_CONFIG_RACH_TOTALNUMBEROFRA_PREAMBLES_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT_IDX -#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN_IDX -#define GNB_CONFIG_RACH_GROUPBCONFIGURED_IDX -#define GNB_CONFIG_RACH_RA_MSG3SIZEGROUPA_IDX -#define GNB_CONFIG_RACH_MESSAGEPOWEROFFSETGROUPB_IDX -#define GNB_CONFIG_RACH_NUMBEROFRA_PREAMBLESGROUPA_IDX -#define GNB_CONFIG_RACH_RA_CONTENTIONRESOLUTIONTIMER_IDX -#define GNB_CONFIG_RSRP_THRESHOLDSSB_IDX -#define GNB_CONFIG_RSRP_THRESHOLDSSB_SUL_IDX -#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_CHOICE_IDX -#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L839_IDX -#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L139_IDX -#define GNB_CONFIG_PRACH_MSG1_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_RESTRICTEDSETCONFIG_IDX -#define GNB_CONFIG_MSG3_TRANSFORMPRECODING_IDX -#define GNB_CONFIG_PRACH_CONFIGURATIONINDEX_IDX -#define GNB_CONFIG_PRACH_MSG1_FDM_IDX -#define GNB_CONFIG_PRACH_MSG1_FREQUENCYSTART_IDX -#define GNB_CONFIG_ZEROCORRELATIONZONECONFIG_IDX -#define GNB_CONFIG_PREAMBLERECEIVEDTARGETPOWER_IDX -#define GNB_CONFIG_PREAMBLETRANSMAX_IDX -#define GNB_CONFIG_POWERRAMPINGSTEP_IDX -#define GNB_CONFIG_RA_RESPONSEWINDOW_IDX -#define GNB_CONFIG_GROUPHOPPINGENABLEDTRANSFORMPRECODING_IDX -#define GNB_CONFIG_MSG3_DELTAPREAMBLE_IDX -#define GNB_CONFIG_P0_NOMINALWITHGRANT_IDX -#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2_IDX -#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX -#define GNB_CONFIG_PUCCH_GROUPHOPPING_IDX -#define GNB_CONFIG_P0_NOMINAL_IDX -#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0_IDX -#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX -#define GNB_CONFIG_RATEMATCHPATTERNID_IDX -#define GNB_CONFIG_RATEMATCHPATTERN_PATTERNTYPE_IDX -#define GNB_CONFIG_SYMBOLSINRESOURCEBLOCK_IDX -#define GNB_CONFIG_PERIODICITYANDPATTERN_IDX -#define GNB_CONFIG_RATEMATCHPATTERN_CONTROLRESOURCESET_IDX -#define GNB_CONFIG_RATEMATCHPATTERN_SUBCARRIERSPACING_IDX -#define GNB_CONFIG_RATEMATCHPATTERN_MODE_IDX -#define GNB_CONFIG_SEARCHSPACESIB1_IDX -#define GNB_CONFIG_SEARCHSPACEOTHERSYSTEMINFORMATION_IDX -#define GNB_CONFIG_PAGINGSEARCHSPACE_IDX -#define GNB_CONFIG_RA_SEARCHSPACE_IDX -#define GNB_CONFIG_RACH_RA_CONTROLRESOURCESET_IDX -#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESETID_IDX -#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESET_DURATION_IDX -#define GNB_CONFIG_PDCCH_CCE_REG_MAPPINGTYPE_IDX -#define GNB_CONFIG_PDCCH_REG_BUNDLESIZE_IDX -#define GNB_CONFIG_PDCCH_INTERLEAVERSIZE_IDX -#define GNB_CONFIG_PDCCH_SHIFTINDEX_IDX -#define GNB_CONFIG_PDCCH_PRECODERGRANULARITY_IDX -#define GNB_CONFIG_PDCCH_TCI_STATEID_IDX -#define GNB_CONFIG_TCI_PRESENTINDCI_IDX -#define GNB_CONFIG_SEARCHSPACEID_IDX -#define GNB_CONFIG_COMMONSEARCHSPACES_CONTROLRESOURCESETID_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16_IDX -#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20_IDX -#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1_IDX -#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2_IDX -#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4_IDX -#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8_IDX -#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16_IDX -#define GNB_CONFIG_SEARCHSPACE_SEARCHSPACETYPE_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX -#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX -#define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_V_SHIFT_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET_IDX -#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE_IDX \ No newline at end of file +#define GNB_CONFIG_FRAME_TYPE_IDX 0 +#define GNB_CONFIG_DL_PREFIX_TYPE_IDX 1 +#define GNB_CONFIG_UL_PREFIX_TYPE_IDX 2 +#define GNB_CONFIG_EUTRA_BAND_IDX 3 +#define GNB_CONFIG_DOWNLINK_FREQUENCY_IDX 4 +#define GNB_CONFIG_UPLINK_FREQUENCY_OFFSET_IDX 5 +#define GNB_CONFIG_NID_CELL_IDX 6 +#define GNB_CONFIG_N_RB_DL_IDX 7 +#define GNB_CONFIG_NB_ANT_PORTS_IDX 8 +#define GNB_CONFIG_NB_ANT_TX_IDX 9 +#define GNB_CONFIG_NB_ANT_RX_IDX 10 +#define GNB_CONFIG_TX_GAIN_IDX 11 +#define GNB_CONFIG_RX_GAIN_IDX 12 +#define GNB_CONFIG_MIB_SUBCARRIERSPACINGCOMMON_IDX 13 +#define GNB_CONFIG_MIB_SSB_SUBCARRIEROFFSET_IDX 14 +#define GNB_CONFIG_MIB_DMRS_TYPEA_POSITION_IDX 15 +#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX 16 +#define GNB_CONFIG_SIB1_FREQUENCYOFFSETSSB_IDX 17 +#define GNB_CONFIG_SIB1_SSB_PERIODICITYSERVINGCELL_IDX 18 +#define GNB_CONFIG_SIB1_SS_PBCH_BLOCKPOWER_IDX 19 +#define GNB_CONFIG_ABSOLUTEFREQUENCYSSB_IDX 20 +#define GNB_CONFIG_SSB_SUBCARRIEROFFSET_IDX 21 +#define GNB_CONFIG_DL_FREQBANDINDICATORNR_IDX 22 +#define GNB_CONFIG_DL_ABSOLUTEFREQUENCYPOINTA_IDX 23 +#define GNB_CONFIG_DL_OFFSETTOCARRIER_IDX 24 +#define GNB_CONFIG_DL_SUBCARRIERSPACING_IDX 25 +#define GNB_CONFIG_DL_SCS_SPECIFICCARRIER_K0_IDX 26 +#define GNB_CONFIG_DL_CARRIERBANDWIDTH_IDX 27 +#define GNB_CONFIG_DL_LOCATIONANDBANDWIDTH_IDX 28 +#define GNB_CONFIG_DL_BWP_SUBCARRIERSPACING_IDX 29 +#define GNB_CONFIG_DL_BWP_PREFIX_TYPE_IDX 30 +#define GNB_CONFIG_UL_FREQBANDINDICATORNR_IDX 31 +#define GNB_CONFIG_UL_ABSOLUTEFREQUENCYPOINTA_IDX 32 +#define GNB_CONFIG_UL_ADDITIONALSPECTRUMEMISSION_IDX; 33 +#define GNB_CONFIG_UL_P_MAX_IDX 34 +#define GNB_CONFIG_UL_FREQUENCYSHIFT7P5KHZ_IDX 35 +#define GNB_CONFIG_UL_OFFSETTOCARRIER_IDX 36 +#define GNB_CONFIG_UL_SCS_SUBCARRIERSPACING_IDX 37 +#define GNB_CONFIG_UL_SCS_SPECIFICCARRIER_K0_IDX 38 +#define GNB_CONFIG_UL_CARRIERBANDWIDTH_IDX 39 +#define GNB_CONFIG_UL_LOCATIONANDBANDWIDTH_IDX 41 +#define GNB_CONFIG_UL_BWP_SUBCARRIERSPACING_IDX 42 +#define GNB_CONFIG_UL_BWP_PREFIX_TYPE_IDX 43 +#define GNB_CONFIG_SUBCARRIERSPACINGCOMMON_IDX 44 +#define GNB_CONFIG_PDCCH_CONFIGSIB1_IDX 45 +#define GNB_CONFIG_FREQUENCYOFFSETSSB_IDX 46 +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_POSITIONSINBURST_PR_IDX 47 +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SSB_PERIODICITYSERVINGCELL_IDX 48 +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_DMRS_TYPEA_POSITION_IDX 49 +#define GNB_CONFIG_NIA_SUBCARRIERSPACING_IDX 50 +#define GNB_CONFIG_SERVINGCELLCONFIGCOMMON_SS_PBCH_BLOCKPOWER_IDX 51 +#define GNB_CONFIG_REFERENCESUBCARRIERSPACING_IDX 52 +#define GNB_CONFIG_DL_UL_TRANSMISSIONPERIODICITY_IDX 53 +#define GNB_CONFIG_NROFDOWNLINKSLOTS_IDX 54 +#define GNB_CONFIG_NROFDOWNLINKSYMBOLS_IDX 55 +#define GNB_CONFIG_NROFUPLINKSLOTS_IDX 56 +#define GNB_CONFIG_NROFUPLINKSYMBOLS_IDX 57 +#define GNB_CONFIG_RACH_TOTALNUMBEROFRA_PREAMBLES_IDX 58 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_CHOICE_IDX 59 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEEIGHTH_IDX 60 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEFOURTH_IDX 61 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONEHALF_IDX 62 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_ONE_IDX 63 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_TWO_IDX 64 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_FOUR_IDX 65 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_EIGHT_IDX 66 +#define GNB_CONFIG_RACH_SSB_PERRACH_OCCASIONANDCB_PREAMBLESPERSSB_SIXTEEN_IDX 67 +#define GNB_CONFIG_RACH_GROUPBCONFIGURED_IDX 68 +#define GNB_CONFIG_RACH_RA_MSG3SIZEGROUPA_IDX 69 +#define GNB_CONFIG_RACH_MESSAGEPOWEROFFSETGROUPB_IDX 70 +#define GNB_CONFIG_RACH_NUMBEROFRA_PREAMBLESGROUPA_IDX 71 +#define GNB_CONFIG_RACH_RA_CONTENTIONRESOLUTIONTIMER_IDX 72 +#define GNB_CONFIG_RSRP_THRESHOLDSSB_IDX 73 +#define GNB_CONFIG_RSRP_THRESHOLDSSB_SUL_IDX 74 +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_CHOICE_IDX 75 +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L839_IDX 76 +#define GNB_CONFIG_PRACH_ROOTSEQUENCEINDEX_L139_IDX 77 +#define GNB_CONFIG_PRACH_MSG1_SUBCARRIERSPACING_IDX 78 +#define GNB_CONFIG_RESTRICTEDSETCONFIG_IDX 79 +#define GNB_CONFIG_MSG3_TRANSFORMPRECODING_IDX 80 +#define GNB_CONFIG_PRACH_CONFIGURATIONINDEX_IDX 81 +#define GNB_CONFIG_PRACH_MSG1_FDM_IDX 82 +#define GNB_CONFIG_PRACH_MSG1_FREQUENCYSTART_IDX 83 +#define GNB_CONFIG_ZEROCORRELATIONZONECONFIG_IDX 84 +#define GNB_CONFIG_PREAMBLERECEIVEDTARGETPOWER_IDX 85 +#define GNB_CONFIG_PREAMBLETRANSMAX_IDX 86 +#define GNB_CONFIG_POWERRAMPINGSTEP_IDX 87 +#define GNB_CONFIG_RA_RESPONSEWINDOW_IDX 88 +#define GNB_CONFIG_GROUPHOPPINGENABLEDTRANSFORMPRECODING_IDX 89 +#define GNB_CONFIG_MSG3_DELTAPREAMBLE_IDX 90 +#define GNB_CONFIG_P0_NOMINALWITHGRANT_IDX 91 +#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_K2_IDX 92 +#define GNB_CONFIG_PUSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX 93 +#define GNB_CONFIG_PUCCH_GROUPHOPPING_IDX 94 +#define GNB_CONFIG_P0_NOMINAL_IDX 95 +#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_K0_IDX 96 +#define GNB_CONFIG_PDSCH_TIMEDOMAINRESOURCEALLOCATION_MAPPINGTYPE_IDX 97 +#define GNB_CONFIG_RATEMATCHPATTERNID_IDX 98 +#define GNB_CONFIG_RATEMATCHPATTERN_PATTERNTYPE_IDX 99 +#define GNB_CONFIG_SYMBOLSINRESOURCEBLOCK_IDX 100 +#define GNB_CONFIG_PERIODICITYANDPATTERN_IDX 101 +#define GNB_CONFIG_RATEMATCHPATTERN_CONTROLRESOURCESET_IDX 102 +#define GNB_CONFIG_RATEMATCHPATTERN_SUBCARRIERSPACING_IDX 103 +#define GNB_CONFIG_RATEMATCHPATTERN_MODE_IDX 104 +#define GNB_CONFIG_SEARCHSPACESIB1_IDX 105 +#define GNB_CONFIG_SEARCHSPACEOTHERSYSTEMINFORMATION_IDX 106 +#define GNB_CONFIG_PAGINGSEARCHSPACE_IDX 107 +#define GNB_CONFIG_RA_SEARCHSPACE_IDX 108 +#define GNB_CONFIG_RACH_RA_CONTROLRESOURCESET_IDX 109 +#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESETID_IDX 110 +#define GNB_CONFIG_PDCCH_COMMON_CONTROLRESOURCESET_DURATION_IDX 111 +#define GNB_CONFIG_PDCCH_CCE_REG_MAPPINGTYPE_IDX 112 +#define GNB_CONFIG_PDCCH_REG_BUNDLESIZE_IDX 113 +#define GNB_CONFIG_PDCCH_INTERLEAVERSIZE_IDX 114 +#define GNB_CONFIG_PDCCH_SHIFTINDEX_IDX 115 +#define GNB_CONFIG_PDCCH_PRECODERGRANULARITY_IDX 116 +#define GNB_CONFIG_PDCCH_TCI_STATEID_IDX 117 +#define GNB_CONFIG_TCI_PRESENTINDCI_IDX 118 +#define GNB_CONFIG_SEARCHSPACEID_IDX 119 +#define GNB_CONFIG_COMMONSEARCHSPACES_CONTROLRESOURCESETID_IDX 120 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_CHOICE_IDX 121 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL1_IDX 122 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL2_IDX 123 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL4_IDX 124 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL5_IDX 125 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL8_IDX 126 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL10_IDX 127 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL16_IDX 128 +#define GNB_CONFIG_SEARCHSPACE_MONITORINGSLOTPERIODICITYANDOFFSET_SL20_IDX 129 +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL1_IDX 130 +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL2_IDX 131 +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL4_IDX 132 +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL8_IDX 133 +#define GNB_CONFIG_SEARCHSPACE_NROFCANDIDATES_AGGREGATIONLEVEL16_IDX 134 +#define GNB_CONFIG_SEARCHSPACE_SEARCHSPACETYPE_IDX 135 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL1_IDX 136 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL2_IDX 137 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL4_IDX 138 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL8_IDX 139 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_0_NROFCANDIDATES_SFI_AGGREGATIONLEVEL16_IDX 140 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_MONITORINGPERIODICITY_IDX 141 +#define GNB_CONFIG_COMMON_DCI_FORMAT2_3_NROFPDCCH_CANDIDATES_IDX 142 +#define GNB_CONFIG_UE_SPECIFIC__DCI_FORMATS_IDX 143 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERFREQDL_IDX 144 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_CARRIERBANDWIDTHDL_IDX 145 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_NROFCRS_PORTS_IDX 146 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_V_SHIFT_IDX 147 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONPERIOD_IDX 148 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_RADIOFRAMEALLOCATIONOFFSET_IDX 149 +#define GNB_CONFIG_RATEMATCHPATTERNLTE_CRS_SUBFRAMEALLOCATION_CHOICE_IDX 150 + + +/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* SRB1 configuration parameters section name */ +#define GNB_CONFIG_STRING_SRB1 "srb1_parameters" + +/* SRB1 configuration parameters names */ +#define GNB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT "timer_poll_retransmit" +#define GNB_CONFIG_STRING_SRB1_TIMER_REORDERING "timer_reordering" +#define GNB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT "timer_status_prohibit" +#define GNB_CONFIG_STRING_SRB1_POLL_PDU "poll_pdu" +#define GNB_CONFIG_STRING_SRB1_POLL_BYTE "poll_byte" +#define GNB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD "max_retx_threshold" + +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* SRB1 configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define SRB1PARAMS_DESC { \ +{GNB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT, NULL, 0, iptr:&srb1_timer_poll_retransmit, defintval:80, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SRB1_TIMER_REORDERING, NULL, 0, iptr:&srb1_timer_reordering, defintval:35, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT, NULL, 0, iptr:&srb1_timer_status_prohibit, defintval:0, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SRB1_POLL_PDU, NULL, 0, iptr:&srb1_poll_pdu, defintval:4, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SRB1_POLL_BYTE, NULL, 0, iptr:&srb1_poll_byte, defintval:99999, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD, NULL, 0, iptr:&srb1_max_retx_threshold, defintval:4, TYPE_UINT, 0} \ +} +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/* MME configuration parameters section name */ +#define GNB_CONFIG_STRING_MME_IP_ADDRESS "mme_ip_address" + +/* SRB1 configuration parameters names */ + + +#define GNB_CONFIG_STRING_MME_IPV4_ADDRESS "ipv4" +#define GNB_CONFIG_STRING_MME_IPV6_ADDRESS "ipv6" +#define GNB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE "active" +#define GNB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE "preference" + + +/*-------------------------------------------------------------------------------------------------------------------------------------*/ +/* MME configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-------------------------------------------------------------------------------------------------------------------------------------*/ +#define S1PARAMS_DESC { \ +{GNB_CONFIG_STRING_MME_IPV4_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_MME_IPV6_ADDRESS, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE, NULL, 0, uptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +} + +#define GNB_MME_IPV4_ADDRESS_IDX 0 +#define GNB_MME_IPV6_ADDRESS_IDX 1 +#define GNB_MME_IP_ADDRESS_ACTIVE_IDX 2 +#define GNB_MME_IP_ADDRESS_PREFERENCE_IDX 3 +/*---------------------------------------------------------------------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------------------------------------------------------------------*/ +/* SCTP configuration parameters section name */ +#define GNB_CONFIG_STRING_SCTP_CONFIG "SCTP" + +/* SCTP configuration parameters names */ +#define GNB_CONFIG_STRING_SCTP_INSTREAMS "SCTP_INSTREAMS" +#define GNB_CONFIG_STRING_SCTP_OUTSTREAMS "SCTP_OUTSTREAMS" + + + +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* SRB1 configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define SCTPPARAMS_DESC { \ +{GNB_CONFIG_STRING_SCTP_INSTREAMS, NULL, 0, uptr:NULL, defintval:-1, TYPE_UINT, 0}, \ +{GNB_CONFIG_STRING_SCTP_OUTSTREAMS, NULL, 0, uptr:NULL, defintval:-1, TYPE_UINT, 0} \ +} + +#define GNB_SCTP_INSTREAMS_IDX 0 +#define GNB_SCTP_OUTSTREAMS_IDX 1 +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*-----------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* S1 interface configuration parameters section name */ +#define GNB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG "NETWORK_INTERFACES" + +#define GNB_INTERFACE_NAME_FOR_S1_MME_IDX 0 +#define GNB_IPV4_ADDRESS_FOR_S1_MME_IDX 1 +#define GNB_INTERFACE_NAME_FOR_S1U_IDX 2 +#define GNB_IPV4_ADDR_FOR_S1U_IDX 3 +#define GNB_PORT_FOR_S1U_IDX 4 + +/* S1 interface configuration parameters names */ +#define GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1_MME "GNB_INTERFACE_NAME_FOR_S1_MME" +#define GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_S1_MME "GNB_IPV4_ADDRESS_FOR_S1_MME" +#define GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U "GNB_INTERFACE_NAME_FOR_S1U" +#define GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U "GNB_IPV4_ADDRESS_FOR_S1U" +#define GNB_CONFIG_STRING_GNB_PORT_FOR_S1U "GNB_PORT_FOR_S1U" + +/*--------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* S1 interface configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*--------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define NETPARAMS_DESC { \ +{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1_MME, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_IPV4_ADDRESS_FOR_S1_MME, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:NULL, defstrval:NULL, TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_PORT_FOR_S1U, NULL, 0, uptr:NULL, defintval:2152L, TYPE_UINT, 0} \ +} + + + +/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* GTPU configuration parameters */ +/* optname helpstr paramflags XXXptr defXXXval type numelt */ +/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define GTPUPARAMS_DESC { \ +{GNB_CONFIG_STRING_GNB_INTERFACE_NAME_FOR_S1U, NULL, 0, strptr:&enb_interface_name_for_S1U, defstrval:"lo", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_IPV4_ADDR_FOR_S1U, NULL, 0, strptr:&enb_ipv4_address_for_S1U, defstrval:"127.0.0.1", TYPE_STRING, 0}, \ +{GNB_CONFIG_STRING_GNB_PORT_FOR_S1U, NULL, 0, uptr:&enb_port_for_S1U, defintval:2152, TYPE_UINT, 0} \ +} +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/* L1 configuration section names */ +#define CONFIG_STRING_L1_LIST "L1s" +#define CONFIG_STRING_L1_CONFIG "l1_config" + + + +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ +#define CONFIG_STRING_NETWORK_CONTROLLER_CONFIG "NETWORK_CONTROLLER" + +#define CONFIG_STRING_FLEXRAN_ENABLED "FLEXRAN_ENABLED" +#define CONFIG_STRING_FLEXRAN_INTERFACE_NAME "FLEXRAN_INTERFACE_NAME" +#define CONFIG_STRING_FLEXRAN_IPV4_ADDRESS "FLEXRAN_IPV4_ADDRESS" +#define CONFIG_STRING_FLEXRAN_PORT "FLEXRAN_PORT" +#define CONFIG_STRING_FLEXRAN_CACHE "FLEXRAN_CACHE" +#define CONFIG_STRING_FLEXRAN_AWAIT_RECONF "FLEXRAN_AWAIT_RECONF" + +#define FLEXRAN_ENABLED 0 +#define FLEXRAN_INTERFACE_NAME_IDX 1 +#define FLEXRAN_IPV4_ADDRESS_IDX 2 +#define FLEXRAN_PORT_IDX 3 +#define FLEXRAN_CACHE_IDX 4 +#define FLEXRAN_AWAIT_RECONF_IDX 5 + +#define FLEXRANPARAMS_DESC { \ +{CONFIG_STRING_FLEXRAN_ENABLED, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0}, \ +{CONFIG_STRING_FLEXRAN_INTERFACE_NAME, NULL, 0, strptr:NULL, defstrval:"lo", TYPE_STRING, 0}, \ +{CONFIG_STRING_FLEXRAN_IPV4_ADDRESS, NULL, 0, strptr:NULL, defstrval:"127.0.0.1", TYPE_STRING, 0}, \ +{CONFIG_STRING_FLEXRAN_PORT, NULL, 0, uptr:NULL, defintval:2210, TYPE_UINT, 0}, \ +{CONFIG_STRING_FLEXRAN_CACHE, NULL, 0, strptr:NULL, defstrval:"/mnt/oai_agent_cache", TYPE_STRING, 0}, \ +{CONFIG_STRING_FLEXRAN_AWAIT_RECONF, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0} \ +} + +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------------------------------------------------------------------------------*/ +/* MACRLC configuration section names */ +#define CONFIG_STRING_MACRLC_LIST "MACRLCs" +#define CONFIG_STRING_MACRLC_CONFIG "macrlc_config" + + +/* MACRLC configuration parameters names */ +#define CONFIG_STRING_MACRLC_CC "num_cc" +#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE "tr_n_preference" +#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME "local_n_if_name" +#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS "local_n_address" +#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS "remote_n_address" +#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC "local_n_portc" +#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC "remote_n_portc" +#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD "local_n_portd" +#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD "remote_n_portd" +#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE "tr_s_preference" +#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME "local_s_if_name" +#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS "local_s_address" +#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS "remote_s_address" +#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC "local_s_portc" +#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC "remote_s_portc" +#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD "local_s_portd" +#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD "remote_s_portd" +#define CONFIG_STRING_MACRLC_PHY_TEST_MODE "phy_test_mode" + + +#define MACRLC_CC_IDX 0 +#define MACRLC_TRANSPORT_N_PREFERENCE_IDX 1 +#define MACRLC_LOCAL_N_IF_NAME_IDX 2 +#define MACRLC_LOCAL_N_ADDRESS_IDX 3 +#define MACRLC_REMOTE_N_ADDRESS_IDX 4 +#define MACRLC_LOCAL_N_PORTC_IDX 5 +#define MACRLC_REMOTE_N_PORTC_IDX 6 +#define MACRLC_LOCAL_N_PORTD_IDX 7 +#define MACRLC_REMOTE_N_PORTD_IDX 8 +#define MACRLC_TRANSPORT_S_PREFERENCE_IDX 9 +#define MACRLC_LOCAL_S_IF_NAME_IDX 10 +#define MACRLC_LOCAL_S_ADDRESS_IDX 11 +#define MACRLC_REMOTE_S_ADDRESS_IDX 12 +#define MACRLC_LOCAL_S_PORTC_IDX 13 +#define MACRLC_REMOTE_S_PORTC_IDX 14 +#define MACRLC_LOCAL_S_PORTD_IDX 15 +#define MACRLC_REMOTE_S_PORTD_IDX 16 +#define MACRLC_PHY_TEST_IDX 17 \ No newline at end of file diff --git a/openair2/LAYER2/MAC/main.c b/openair2/LAYER2/MAC/main.c index 062ead2a20..5c9e5241b8 100644 --- a/openair2/LAYER2/MAC/main.c +++ b/openair2/LAYER2/MAC/main.c @@ -48,87 +48,85 @@ extern RAN_CONTEXT_t RC; void mac_top_init_eNB(void) { - - module_id_t i, j; - int list_el; - UE_list_t *UE_list; - eNB_MAC_INST *mac; - - LOG_I(MAC, "[MAIN] Init function start:nb_macrlc_inst=%d\n", - RC.nb_macrlc_inst); - - if (RC.nb_macrlc_inst > 0) { - RC.mac = - (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst * - sizeof(eNB_MAC_INST *)); - AssertFatal(RC.mac != NULL, - "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", - RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), - RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); - for (i = 0; i < RC.nb_macrlc_inst; i++) { - RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST)); - AssertFatal(RC.mac != NULL, - "can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", - RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), - RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); - LOG_D(MAC, - "[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n", - sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac); - bzero(RC.mac[i], sizeof(eNB_MAC_INST)); - RC.mac[i]->Mod_id = i; - for (j = 0; j < MAX_NUM_CCs; j++) { - RC.mac[i]->DL_req[j].dl_config_request_body. - dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j]; - RC.mac[i]->UL_req[j].ul_config_request_body. - ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j]; - for (int k = 0; k < 10; k++) - RC.mac[i]->UL_req_tmp[j][k]. - ul_config_request_body.ul_config_pdu_list = - RC.mac[i]->ul_config_pdu_list_tmp[j][k]; - RC.mac[i]->HI_DCI0_req[j]. - hi_dci0_request_body.hi_dci0_pdu_list = - RC.mac[i]->hi_dci0_pdu_list[j]; - RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list = - RC.mac[i]->tx_request_pdu[j]; - RC.mac[i]->ul_handle = 0; - } - } - - AssertFatal(rlc_module_init() == 0, - "Could not initialize RLC layer\n"); - - // These should be out of here later - pdcp_layer_init(); - - rrc_init_global_param(); - - } else { - RC.mac = NULL; - } - - // Initialize Linked-List for Active UEs + module_id_t i, j; + int list_el; + UE_list_t *UE_list; + eNB_MAC_INST *mac; + + LOG_I(MAC, "[MAIN] Init function start:nb_macrlc_inst=%d\n", + RC.nb_macrlc_inst); + + if (RC.nb_macrlc_inst > 0) { + + RC.mac = (eNB_MAC_INST **) malloc16(RC.nb_macrlc_inst *sizeof(eNB_MAC_INST *)); + + AssertFatal(RC.mac != NULL,"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", + RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), + RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); + for (i = 0; i < RC.nb_macrlc_inst; i++) { - mac = RC.mac[i]; - - - mac->if_inst = IF_Module_init(i); - - UE_list = &mac->UE_list; - - UE_list->num_UEs = 0; - UE_list->head = -1; - UE_list->head_ul = -1; - UE_list->avail = 0; - - for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) { - UE_list->next[list_el] = list_el + 1; - UE_list->next_ul[list_el] = list_el + 1; - } - - UE_list->next[list_el] = -1; - UE_list->next_ul[list_el] = -1; + RC.mac[i] = (eNB_MAC_INST *) malloc16(sizeof(eNB_MAC_INST)); + + AssertFatal(RC.mac != NULL,"can't ALLOCATE %zu Bytes for %d eNB_MAC_INST with size %zu \n", + RC.nb_macrlc_inst * sizeof(eNB_MAC_INST *), + RC.nb_macrlc_inst, sizeof(eNB_MAC_INST)); + + LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d eNB_MAC_INST @ %p\n",sizeof(eNB_MAC_INST), RC.nb_macrlc_inst, RC.mac); + + bzero(RC.mac[i], sizeof(eNB_MAC_INST)); + + RC.mac[i]->Mod_id = i; + + for (j = 0; j < MAX_NUM_CCs; j++) { + RC.mac[i]->DL_req[j].dl_config_request_body. + dl_config_pdu_list = RC.mac[i]->dl_config_pdu_list[j]; + RC.mac[i]->UL_req[j].ul_config_request_body. + ul_config_pdu_list = RC.mac[i]->ul_config_pdu_list[j]; + + for (int k = 0; k < 10; k++) + RC.mac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.mac[i]->ul_config_pdu_list_tmp[j][k]; + + RC.mac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list =RC.mac[i]->hi_dci0_pdu_list[j]; + RC.mac[i]->TX_req[j].tx_request_body.tx_pdu_list = + RC.mac[i]->tx_request_pdu[j]; + RC.mac[i]->ul_handle = 0; + + } + }//END for (i = 0; i < RC.nb_macrlc_inst; i++) + + AssertFatal(rlc_module_init() == 0, + "Could not initialize RLC layer\n"); + + // These should be out of here later + pdcp_layer_init(); + + rrc_init_global_param(); + + }else { + RC.mac = NULL; + } + + // Initialize Linked-List for Active UEs + for (i = 0; i < RC.nb_macrlc_inst; i++) { + + mac = RC.mac[i]; + mac->if_inst = IF_Module_init(i); + + UE_list = &mac->UE_list; + UE_list->num_UEs = 0; + UE_list->head = -1; + UE_list->head_ul = -1; + UE_list->avail = 0; + + for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) { + UE_list->next[list_el] = list_el + 1; + UE_list->next_ul[list_el] = list_el + 1; } + UE_list->next[list_el] = -1; + UE_list->next_ul[list_el] = -1; + } + } void mac_init_cell_params(int Mod_idP, int CC_idP) diff --git a/openair2/LAYER2/NR_MAC_gNB/config.c b/openair2/LAYER2/NR_MAC_gNB/config.c index e69de29bb2..3a2e81874c 100644 --- a/openair2/LAYER2/NR_MAC_gNB/config.c +++ b/openair2/LAYER2/NR_MAC_gNB/config.c @@ -0,0 +1,243 @@ +#include "COMMON/platform_types.h" +#include "COMMON/platform_constants.h" +#include "common/ran_context.h" + +#include "UTIL/LOG/log.h" +#include "UTIL/LOG/vcd_signal_dumper.h" + +#include "NR_BCCH-BCH-Message.h" +#include "NR_ServingCellConfigCommon.h" + +#include "LAYER2/NR_MAC_gNB/mac_proto.h" + +extern RAN_CONTEXT_t RC; +//extern int l2_init_gNB(void); +extern void mac_top_init_gNB(void); +extern uint8_t nfapi_mode; + +int32_t **rxdata; +int32_t **txdata; + +typedef struct eutra_bandentry_s { + int16_t band; + uint32_t ul_min; + uint32_t ul_max; + uint32_t dl_min; + uint32_t dl_max; + uint32_t N_OFFs_DL; +} eutra_bandentry_t; + +typedef struct band_info_s { + int nbands; + eutra_bandentry_t band_info[100]; +} band_info_t; + +static const eutra_bandentry_t eutra_bandtable[] = { + {1, 19200, 19800, 21100, 21700, 0}, + {2, 18500, 19100, 19300, 19900, 6000}, + {3, 17100, 17850, 18050, 18800, 12000}, + {4, 17100, 17550, 21100, 21550, 19500}, + {5, 8240, 8490, 8690, 8940, 24000}, + {6, 8300, 8400, 8750, 8850, 26500}, + {7, 25000, 25700, 26200, 26900, 27500}, + {8, 8800, 9150, 9250, 9600, 34500}, + {9, 17499, 17849, 18449, 18799, 38000}, + {10, 17100, 17700, 21100, 21700, 41500}, + {11, 14279, 14529, 14759, 15009, 47500}, + {12, 6980, 7160, 7280, 7460, 50100}, + {13, 7770, 7870, 7460, 7560, 51800}, + {14, 7880, 7980, 7580, 7680, 52800}, + {17, 7040, 7160, 7340, 7460, 57300}, + {18, 8150, 9650, 8600, 10100, 58500}, + {19, 8300, 8450, 8750, 8900, 60000}, + {20, 8320, 8620, 7910, 8210, 61500}, + {21, 14479, 14629, 14959, 15109, 64500}, + {22, 34100, 34900, 35100, 35900, 66000}, + {23, 20000, 20200, 21800, 22000, 75000}, + {24, 16126, 16605, 15250, 15590, 77000}, + {25, 18500, 19150, 19300, 19950, 80400}, + {26, 8140, 8490, 8590, 8940, 86900}, + {27, 8070, 8240, 8520, 8690, 90400}, + {28, 7030, 7580, 7580, 8130, 92100}, + {29, 0, 0, 7170, 7280, 96600}, + {30, 23050, 23250, 23500, 23600, 97700}, + {31, 45250, 34900, 46250, 35900, 98700}, + {32, 0, 0, 14520, 14960, 99200}, + {33, 19000, 19200, 19000, 19200, 36000}, + {34, 20100, 20250, 20100, 20250, 36200}, + {35, 18500, 19100, 18500, 19100, 36350}, + {36, 19300, 19900, 19300, 19900, 36950}, + {37, 19100, 19300, 19100, 19300, 37550}, + {38, 25700, 26200, 25700, 26300, 37750}, + {39, 18800, 19200, 18800, 19200, 38250}, + {40, 23000, 24000, 23000, 24000, 38650}, + {41, 24960, 26900, 24960, 26900, 39650}, + {42, 34000, 36000, 34000, 36000, 41590}, + {43, 36000, 38000, 36000, 38000, 43590}, + {44, 7030, 8030, 7030, 8030, 45590}, + {45, 14470, 14670, 14470, 14670, 46590}, + {46, 51500, 59250, 51500, 59250, 46790}, + {65, 19200, 20100, 21100, 22000, 65536}, + {66, 17100, 18000, 21100, 22000, 66436}, + {67, 0, 0, 7380, 7580, 67336}, + {68, 6980, 7280, 7530, 7830, 67536} +}; + + +uint32_t nr_to_earfcn(int eutra_bandP, uint32_t dl_CarrierFreq, uint32_t bw) +{ + + uint32_t dl_CarrierFreq_by_100k = dl_CarrierFreq / 100000; + int bw_by_100 = bw / 100; + + int i; + + AssertFatal(eutra_bandP < 69, "eutra_band %d > 68\n", eutra_bandP); + for (i = 0; i < 69 && eutra_bandtable[i].band != eutra_bandP; i++); + + AssertFatal(dl_CarrierFreq_by_100k >= eutra_bandtable[i].dl_min, + "Band %d, bw %u : DL carrier frequency %u Hz < %u\n", + eutra_bandP, bw, dl_CarrierFreq, + eutra_bandtable[i].dl_min); + AssertFatal(dl_CarrierFreq_by_100k <= + (eutra_bandtable[i].dl_max - bw_by_100), + "Band %d, bw %u: DL carrier frequency %u Hz > %d\n", + eutra_bandP, bw, dl_CarrierFreq, + eutra_bandtable[i].dl_max - bw_by_100); + + + return (dl_CarrierFreq_by_100k - eutra_bandtable[i].dl_min + + (eutra_bandtable[i].N_OFFs_DL / 10)); +} + + +void config_nr_mib(int Mod_idP, + int CC_idP, + int p_gNBP, + int subCarrierSpacingCommon, + uint32_t ssb_SubcarrierOffset, + int dmrs_TypeA_Position, + uint32_t pdcch_ConfigSIB1, + int cellBarred, + int intraFreqReselection + ){ + nfapi_nr_config_request_t *cfg = &RC.nrmac[Mod_idP]->config[CC_idP]; + + cfg->num_tlv=0; + + cfg->rf_config.tx_antenna_ports.value = p_gNBP; + cfg->rf_config.tx_antenna_ports.tl.tag = NFAPI_RF_CONFIG_TX_ANTENNA_PORTS_TAG; + cfg->num_tlv++; + + cfg->sch_config.ssb_subcarrier_offset.value = ssb_SubcarrierOffset; + + +} + +void config_common(int Mod_idP, + int CC_idP, + int eutra_bandP, + int dl_CarrierFreqP, + int dl_BandwidthP + ){ + + nfapi_nr_config_request_t *cfg = &RC.nrmac[Mod_idP]->config[CC_idP]; + + // FDD + cfg->subframe_config.duplex_mode.value = 1; + cfg->subframe_config.duplex_mode.tl.tag = NFAPI_SUBFRAME_CONFIG_DUPLEX_MODE_TAG; + cfg->num_tlv++; + + /// In NR DL and UL will be different band + cfg->nfapi_config.rf_bands.number_rf_bands = 1; + cfg->nfapi_config.rf_bands.rf_band[0] = eutra_bandP; + cfg->nfapi_config.rf_bands.tl.tag = NFAPI_PHY_RF_BANDS_TAG; + cfg->num_tlv++; + + cfg->nfapi_config.earfcn.value = nr_to_earfcn(eutra_bandP,dl_CarrierFreqP,dl_BandwidthP*180/100); + cfg->nfapi_config.earfcn.tl.tag = NFAPI_NFAPI_EARFCN_TAG; + cfg->num_tlv++; + + cfg->subframe_config.numerology_index_mu.value = 1; + //cfg->subframe_config.tl.tag = + //cfg->num_tlv++; + + cfg->dl_frequencyinfo.DL_carrierBandwidth.value = dl_BandwidthP; + cfg->dl_frequencyinfo.DL_carrierBandwidth.tl.tag = NFAPI_RF_CONFIG_DL_CHANNEL_BANDWIDTH_TAG; //temporary + cfg->num_tlv++; + LOG_E(PHY,"%s() dl_BandwidthP:%d\n", __FUNCTION__, dl_BandwidthP); + + cfg->ul_frequencyinfo.UL_carrierBandwidth.value = dl_BandwidthP; + cfg->ul_frequencyinfo.UL_carrierBandwidth.tl.tag = NFAPI_RF_CONFIG_UL_CHANNEL_BANDWIDTH_TAG; //temporary + cfg->num_tlv++; + + //cfg->sch_config.half_frame_index.value = 0; Fix in PHY + //cfg->sch_config.n_ssb_crb.value = 86; Fix in PHY + +} + +/*void config_servingcellconfigcommon(){ + +}*/ + +int rrc_mac_config_req_gNB(module_id_t Mod_idP, + int CC_idP, + int p_gNB, + int eutra_bandP, + int dl_CarrierFreqP, + int dl_BandwidthP, + NR_BCCH_BCH_Message_t *mib, + NR_ServingCellConfigCommon_t *servingcellconfigcommon + ){ + + + if( mib != NULL ){ + config_nr_mib(Mod_idP, + CC_idP, + p_gNB, + mib->message.choice.mib->subCarrierSpacingCommon, + mib->message.choice.mib->ssb_SubcarrierOffset, + mib->message.choice.mib->dmrs_TypeA_Position, + mib->message.choice.mib->pdcch_ConfigSIB1, + mib->message.choice.mib->cellBarred, + mib->message.choice.mib->intraFreqReselection + ); + }// END if( mib != NULL ) + + if( servingcellconfigcommon != NULL ){ + config_common(Mod_idP, + CC_idP, + eutra_bandP, + dl_CarrierFreqP, + dl_BandwidthP + ); + }//END if( servingcellconfigcommon != NULL ) + + + + LOG_E(MAC, "%s() %s:%d RC.nrmac[Mod_idP]->if_inst->PHY_config_req:%p\n", __FUNCTION__, __FILE__, __LINE__, RC.mac[Mod_idP]->if_inst->PHY_config_req); + + // if in nFAPI mode + if ( (nfapi_mode == 1 || nfapi_mode == 2) && (RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) ){ + while(RC.nrmac[Mod_idP]->if_inst->PHY_config_req == NULL) { + // DJP AssertFatal(RC.nrmac[Mod_idP]->if_inst->PHY_config_req != NULL,"if_inst->phy_config_request is null\n"); + usleep(100 * 1000); + printf("Waiting for PHY_config_req\n"); + } + } + + if (servingcellconfigcommon != NULL){ + NR_PHY_Config_t phycfg; + phycfg.Mod_id = Mod_idP; + phycfg.CC_id = CC_idP; + phycfg.cfg = &RC.nrmac[Mod_idP]->config[CC_idP]; + + if (RC.nrmac[Mod_idP]->if_inst->PHY_config_req) RC.nrmac[Mod_idP]->if_inst->PHY_config_req(&phycfg); + + VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RRC_MAC_CONFIG, VCD_FUNCTION_OUT); + } + + return(0); + +}// END rrc_mac_config_req_gNB + diff --git a/openair2/LAYER2/NR_MAC_gNB/mac.h b/openair2/LAYER2/NR_MAC_gNB/mac.h new file mode 100644 index 0000000000..3f686949be --- /dev/null +++ b/openair2/LAYER2/NR_MAC_gNB/mac.h @@ -0,0 +1,96 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file LAYER2/MAC/defs.h +* \brief MAC data structures, constant, and function prototype +* \author Navid Nikaein and Raymond Knopp +* \date 2011 +* \version 0.5 +* \email navid.nikaein@eurecom.fr + +*/ +/** @defgroup _oai2 openair2 Reference Implementation + * @ingroup _ref_implementation_ + * @{ + */ + +/*@}*/ + +#ifndef __LAYER2_NR_MAC_DEFS_H__ +#define __LAYER2_NR_MAC_DEFS_H__ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "COMMON/platform_constants.h" + +#include "NR_BCCH-BCH-Message.h" +#include "NR_ServingCellConfigCommon.h" + +#include "nfapi_nr_interface.h" + +#include "NR_PHY_INTERFACE/IF_Module.h" + +#include "PHY/TOOLS/time_meas.h" + +#include "PHY/defs_common.h" // for PRACH_RESOURCES_t + +#include "targets/ARCH/COMMON/common_lib.h" + +#include "LAYER2/MAC/mac.h" // temporary + +/*! \brief top level eNB MAC structure */ +typedef struct gNB_MAC_INST_s { + /// Ethernet parameters for northbound midhaul interface + eth_params_t eth_params_n; + /// Ethernet parameters for fronthaul interface + eth_params_t eth_params_s; + /// Module + module_id_t Mod_id; + /// frame counter + frame_t frame; + /// subframe counter + sub_frame_t subframe; + /// Pointer to IF module instance for PHY + NR_IF_Module_t *if_inst; + /// NFAPI Config Request Structure + nfapi_nr_config_request_t config[NFAPI_CC_MAX]; + /// NFAPI DL Config Request Structure + nfapi_dl_config_request_t DL_req[NFAPI_CC_MAX]; + /// NFAPI UL Config Request Structure, send to L1 4 subframes before processing takes place + nfapi_ul_config_request_t UL_req[NFAPI_CC_MAX]; + /// Preallocated DL pdu list + nfapi_dl_config_request_pdu_t dl_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_DL_PDU]; + /// Preallocated UL pdu list + nfapi_ul_config_request_pdu_t ul_config_pdu_list[NFAPI_CC_MAX][MAX_NUM_UL_PDU]; + /// NFAPI HI/DCI0 Config Request Structure + nfapi_hi_dci0_request_t HI_DCI0_req[NFAPI_CC_MAX]; + /// NFAPI DL PDU structure + nfapi_tx_request_t TX_req[NFAPI_CC_MAX]; + /// Common cell resources + COMMON_channels_t common_channels[NFAPI_CC_MAX]; + + + UE_list_t UE_list; +} gNB_MAC_INST; + +#endif /*__LAYER2_NR_MAC_DEFS_H__ */ diff --git a/openair2/LAYER2/NR_MAC_gNB/mac_proto.h b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h new file mode 100644 index 0000000000..6640882469 --- /dev/null +++ b/openair2/LAYER2/NR_MAC_gNB/mac_proto.h @@ -0,0 +1,22 @@ + +#ifndef __LAYER2_NR_MAC_PROTO_H__ +#define __LAYER2_NR_MAC_PROTO_H__ + +#include "mac.h" +#include "PHY/defs_nr_common.h" + + + +void mac_top_init_gNB(void); + +int rrc_mac_config_req_gNB(module_id_t Mod_idP, + int CC_id, + int p_gNB, + int eutra_bandP, + int dl_CarrierFreqP, + int dl_BandwidthP, + NR_BCCH_BCH_Message_t *mib, + NR_ServingCellConfigCommon_t *servingcellconfigcommon + ); + +#endif /*__LAYER2_NR_MAC_PROTO_H__*/ \ No newline at end of file diff --git a/openair2/LAYER2/NR_MAC_gNB/main.c b/openair2/LAYER2/NR_MAC_gNB/main.c new file mode 100644 index 0000000000..ed59db279a --- /dev/null +++ b/openair2/LAYER2/NR_MAC_gNB/main.c @@ -0,0 +1,124 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file main.c + * \brief top init of Layer 2 + * \author Navid Nikaein and Raymond Knopp + * \date 2010 - 2014 + * \version 1.0 + * \email: navid.nikaein@eurecom.fr + * @ingroup _mac + + */ + +#include "mac_proto.h" +#include "LAYER2/MAC/mac_extern.h" //temporary +#include "assertions.h" + +#include "LAYER2/PDCP_v10.1.0/pdcp.h" +#include "RRC/NR/nr_rrc_defs.h" +#include "UTIL/LOG/log.h" +//#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" + +#include "common/ran_context.h" + +extern RAN_CONTEXT_t RC; + + +void mac_top_init_gNB(void) +{ + module_id_t i, j; + int list_el; + UE_list_t *UE_list; + gNB_MAC_INST *nrmac; + + LOG_I(MAC, "[MAIN] Init function start:nb_nr_macrlc_inst=%d\n",RC.nb_nr_macrlc_inst); + + if (RC.nb_nr_macrlc_inst > 0) { + + RC.nrmac = (gNB_MAC_INST **) malloc16(RC.nb_nr_macrlc_inst *sizeof(gNB_MAC_INST *)); + + AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n", + RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *), + RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST)); + + for (i = 0; i < RC.nb_nr_macrlc_inst; i++) { + RC.nrmac[i] = (gNB_MAC_INST *) malloc16(sizeof(gNB_MAC_INST)); + + AssertFatal(RC.nrmac != NULL,"can't ALLOCATE %zu Bytes for %d gNB_MAC_INST with size %zu \n", + RC.nb_nr_macrlc_inst * sizeof(gNB_MAC_INST *), + RC.nb_nr_macrlc_inst, sizeof(gNB_MAC_INST)); + + LOG_D(MAC,"[MAIN] ALLOCATE %zu Bytes for %d gNB_MAC_INST @ %p\n",sizeof(gNB_MAC_INST), RC.nb_nr_macrlc_inst, RC.mac); + + bzero(RC.nrmac[i], sizeof(gNB_MAC_INST)); + + RC.nrmac[i]->Mod_id = i; + + /* + for (j = 0; j < MAX_NUM_CCs; j++) { + RC.nrmac[i]->DL_req[j].dl_config_request_body.dl_config_pdu_list = RC.nrmac[i]->dl_config_pdu_list[j]; + RC.nrmac[i]->UL_req[j].ul_config_request_body.ul_config_pdu_list = RC.nrmac[i]->ul_config_pdu_list[j]; + + for (int k = 0; k < 10; k++) + RC.nrmac[i]->UL_req_tmp[j][k].ul_config_request_body.ul_config_pdu_list =RC.nrmac[i]->ul_config_pdu_list_tmp[j][k]; + + RC.nrmac[i]->HI_DCI0_req[j].hi_dci0_request_body.hi_dci0_pdu_list = RC.nrmac[i]->hi_dci0_pdu_list[j]; + RC.nrmac[i]->TX_req[j].tx_request_body.tx_pdu_list = RC.nrmac[i]->tx_request_pdu[j]; + RC.nrmac[i]->ul_handle = 0; + } + */ + + }//END for (i = 0; i < RC.nb_nr_macrlc_inst; i++) + + AssertFatal(rlc_module_init() == 0,"Could not initialize RLC layer\n"); + + // These should be out of here later + pdcp_layer_init(); + + rrc_init_global_param(); + + }else { + RC.nrmac = NULL; + } + + // Initialize Linked-List for Active UEs + for (i = 0; i < RC.nb_nr_macrlc_inst; i++) { + + nrmac = RC.nrmac[i]; + nrmac->if_inst = NR_IF_Module_init(i); + + UE_list = &nrmac->UE_list; + UE_list->num_UEs = 0; + UE_list->head = -1; + UE_list->head_ul = -1; + UE_list->avail = 0; + + for (list_el = 0; list_el < MAX_MOBILES_PER_ENB - 1; list_el++) { + UE_list->next[list_el] = list_el + 1; + UE_list->next_ul[list_el] = list_el + 1; + } + + UE_list->next[list_el] = -1; + UE_list->next_ul[list_el] = -1; + } + +} \ No newline at end of file diff --git a/openair2/NR_PHY_INTERFACE/IF_Module.c b/openair2/NR_PHY_INTERFACE/IF_Module.c new file mode 100644 index 0000000000..10a2958705 --- /dev/null +++ b/openair2/NR_PHY_INTERFACE/IF_Module.c @@ -0,0 +1,131 @@ +#include "openair1/PHY/defs_eNB.h" +#include "openair2/NR_PHY_INTERFACE/IF_Module.h" +#include "openair1/PHY/phy_extern.h" +#include "LAYER2/MAC/mac_extern.h" +#include "LAYER2/NR_MAC_gNB/mac_proto.h" +#include "common/ran_context.h" + +#define MAX_IF_MODULES 100 + +NR_IF_Module_t *if_inst[MAX_IF_MODULES]; +NR_Sched_Rsp_t Sched_INFO[MAX_IF_MODULES][MAX_NUM_CCs]; + +extern int oai_nfapi_harq_indication(nfapi_harq_indication_t *harq_ind); +extern int oai_nfapi_crc_indication(nfapi_crc_indication_t *crc_ind); +extern int oai_nfapi_cqi_indication(nfapi_cqi_indication_t *cqi_ind); +extern int oai_nfapi_sr_indication(nfapi_sr_indication_t *ind); +extern int oai_nfapi_rx_ind(nfapi_rx_indication_t *ind); +extern uint8_t nfapi_mode; +extern uint16_t sf_ahead; + +void NR_UL_indication(NR_UL_IND_t *UL_info) +{ + + AssertFatal(UL_info!=NULL,"UL_INFO is null\n"); + +#ifdef DUMP_FAPI + dump_ul(UL_info); +#endif + + module_id_t module_id = UL_info->module_id; + int CC_id = UL_info->CC_id; + NR_Sched_Rsp_t *sched_info = &Sched_INFO[module_id][CC_id]; + NR_IF_Module_t *ifi = if_inst[module_id]; + gNB_MAC_INST *mac = RC.nrmac[module_id]; + + LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n", + UL_info->frame,UL_info->subframe, + module_id,CC_id, + UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs); + + if (nfapi_mode != 1) + { + if (ifi->CC_mask==0) { + ifi->current_frame = UL_info->frame; + ifi->current_subframe = UL_info->subframe; + } + else { + AssertFatal(UL_info->frame != ifi->current_frame,"CC_mask %x is not full and frame has changed\n",ifi->CC_mask); + AssertFatal(UL_info->subframe != ifi->current_subframe,"CC_mask %x is not full and subframe has changed\n",ifi->CC_mask); + } + ifi->CC_mask |= (1<<CC_id); + } + + + // clear DL/UL info for new scheduling round + clear_nfapi_information(RC.mac[module_id],CC_id, + UL_info->frame,UL_info->subframe); + + handle_rach(UL_info); + + handle_sr(UL_info); + + handle_cqi(UL_info); + + handle_harq(UL_info); + + // clear HI prior to handling ULSCH + mac->HI_DCI0_req[CC_id].hi_dci0_request_body.number_of_hi = 0; + + handle_ulsch(UL_info); + + if (nfapi_mode != 1) + { + if (ifi->CC_mask == ((1<<MAX_NUM_CCs)-1)) { + + eNB_dlsch_ulsch_scheduler(module_id, + (UL_info->frame+((UL_info->subframe>(9-sf_ahead))?1:0)) % 1024, + (UL_info->subframe+sf_ahead)%10); + + ifi->CC_mask = 0; + + sched_info->module_id = module_id; + sched_info->CC_id = CC_id; + sched_info->frame = (UL_info->frame + ((UL_info->subframe>(9-sf_ahead)) ? 1 : 0)) % 1024; + sched_info->subframe = (UL_info->subframe+sf_ahead)%10; + sched_info->DL_req = &mac->DL_req[CC_id]; + sched_info->HI_DCI0_req = &mac->HI_DCI0_req[CC_id]; + if ((mac->common_channels[CC_id].tdd_Config==NULL) || + (is_UL_sf(&mac->common_channels[CC_id],(sched_info->subframe+sf_ahead)%10)>0)) + sched_info->UL_req = &mac->UL_req[CC_id]; + else + sched_info->UL_req = NULL; + + sched_info->TX_req = &mac->TX_req[CC_id]; + +#ifdef DUMP_FAPI + dump_dl(sched_info); +#endif + + if (ifi->schedule_response) + { + AssertFatal(ifi->schedule_response!=NULL, + "schedule_response is null (mod %d, cc %d)\n", + module_id, + CC_id); + ifi->schedule_response(sched_info); + } + + LOG_D(PHY,"Schedule_response: SFN_SF:%d%d dl_pdus:%d\n",sched_info->frame,sched_info->subframe,sched_info->DL_req->dl_config_request_body.number_pdu); + } + } +} + +NR_IF_Module_t *NR_IF_Module_init(int Mod_id){ + + AssertFatal(Mod_id<MAX_MODULES,"Asking for Module %d > %d\n",Mod_id,MAX_IF_MODULES); + + LOG_D(PHY,"Installing callbacks for IF_Module - UL_indication\n"); + + if (if_inst[Mod_id]==NULL) { + if_inst[Mod_id] = (NR_IF_Module_t*)malloc(sizeof(NR_IF_Module_t)); + memset((void*)if_inst[Mod_id],0,sizeof(NR_IF_Module_t)); + + if_inst[Mod_id]->CC_mask=0; + if_inst[Mod_id]->UL_indication = NR_UL_indication; + + AssertFatal(pthread_mutex_init(&if_inst[Mod_id]->if_mutex,NULL)==0, + "allocation of if_inst[%d]->if_mutex fails\n",Mod_id); + } + return if_inst[Mod_id]; +} \ No newline at end of file diff --git a/openair2/NR_PHY_INTERFACE/IF_Module.h b/openair2/NR_PHY_INTERFACE/IF_Module.h index e69de29bb2..664ef8930d 100644 --- a/openair2/NR_PHY_INTERFACE/IF_Module.h +++ b/openair2/NR_PHY_INTERFACE/IF_Module.h @@ -0,0 +1,139 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file openair2/PHY_INTERFACE/IF_Module.h +* \brief data structures for PHY/MAC interface modules +* \author EURECOM/NTUST +* \date 2017 +* \version 0.1 +* \company Eurecom +* \email: raymond.knopp@eurecom.fr +* \note +* \warning +*/ +#ifndef __NR_IF_MODULE__H__ +#define __NR_IF_MODULE__H__ + +#include <stdint.h> +#include "nfapi_nr_interface.h" +#include "platform_constants.h" +#include "platform_types.h" + +#define MAX_NUM_DL_PDU 100 +#define MAX_NUM_UL_PDU 100 +#define MAX_NUM_HI_DCI0_PDU 100 +#define MAX_NUM_TX_REQUEST_PDU 100 + +#define MAX_NUM_HARQ_IND 100 +#define MAX_NUM_CRC_IND 100 +#define MAX_NUM_SR_IND 100 +#define MAX_NUM_CQI_IND 100 +#define MAX_NUM_RACH_IND 100 +#define MAX_NUM_SRS_IND 100 + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + int CC_id; + /// frame + frame_t frame; + /// subframe + sub_frame_t subframe; + + /// harq indication list + nfapi_harq_indication_t harq_ind; + + /// crc indication list + nfapi_crc_indication_t crc_ind; + + /// SR indication list + nfapi_sr_indication_t sr_ind; + + /// CQI indication list + nfapi_cqi_indication_body_t cqi_ind; + + /// RACH indication list + nfapi_rach_indication_t rach_ind; + +#ifdef Rel14 + /// RACH indication list for BR UEs + nfapi_rach_indication_t rach_ind_br; +#endif + + /// SRS indication list + nfapi_srs_indication_body_t srs_ind; + + /// RX indication + nfapi_rx_indication_t rx_ind; + +} NR_UL_IND_t; + +// Downlink subframe P7 + + +typedef struct{ + /// Module ID + module_id_t module_id; + /// CC ID + uint8_t CC_id; + /// frame + frame_t frame; + /// subframe + sub_frame_t subframe; + /// nFAPI DL Config Request + nfapi_dl_config_request_t *DL_req; + /// nFAPI UL Config Request + nfapi_ul_config_request_t *UL_req; + /// nFAPI HI_DCI Request + nfapi_hi_dci0_request_t *HI_DCI0_req; + /// Pointers to DL SDUs + nfapi_tx_request_t *TX_req; +} NR_Sched_Rsp_t; + +typedef struct { + uint8_t Mod_id; + int CC_id; + nfapi_nr_config_request_t *cfg; +} NR_PHY_Config_t; + +typedef struct NR_IF_Module_s{ +//define the function pointer + void (*UL_indication)(NR_UL_IND_t *UL_INFO); + void (*schedule_response)(NR_Sched_Rsp_t *Sched_INFO); + void (*PHY_config_req)(NR_PHY_Config_t* config_INFO); + uint32_t CC_mask; + uint16_t current_frame; + uint8_t current_subframe; + pthread_mutex_t if_mutex; +} NR_IF_Module_t; + +/*Initial */ +NR_IF_Module_t *NR_IF_Module_init(int Mod_id); + +void NR_IF_Module_kill(int Mod_id); + +void NR_UL_indication(NR_UL_IND_t *UL_INFO); + +/*Interface for Downlink, transmitting the DLSCH SDU, DCI SDU*/ +void NR_Schedule_Response(NR_Sched_Rsp_t *Sched_INFO); + +#endif /*_NFAPI_INTERFACE_NR_H_*/ \ No newline at end of file diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.c b/openair2/RRC/NR/MESSAGES/asn1_msg.c index 5844013462..f2481a4832 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.c +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.c @@ -28,7 +28,6 @@ * \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr */ -#ifdef USER_MODE #include <stdio.h> #include <sys/types.h> #include <stdlib.h> /* for atoi(3) */ @@ -36,52 +35,46 @@ #include <string.h> /* for strerror(3) */ #include <sysexits.h> /* for EX_* exit codes */ #include <errno.h> /* for errno */ -#else -#include <linux/module.h> /* Needed by all modules */ -#endif -#ifdef USER_MODE -//#include "RRC/LITE/defs.h" -//#include "COMMON/mac_rrc_primitives.h" #include "UTIL/LOG/log.h" -#endif #include <asn_application.h> #include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */ #include <per_encoder.h> -#include "RRC/NR/defs_NR.h" -//#include "RRC/LITE/extern.h" +#include "asn1_msg.h" +#include "RRC/NR/nr_rrc_defs.h" +#include "RRC/NR/nr_rrc_extern.h" -#if defined(Rel15) +#if defined(NR_Rel15) #include "assertions.h" //#include "RRCConnectionRequest.h" //#include "UL-CCCH-Message.h" -#include "UL-DCCH-Message.h" +#include "NR_UL-DCCH-Message.h" //#include "DL-CCCH-Message.h" -#include "DL-DCCH-Message.h" +#include "NR_DL-DCCH-Message.h" //#include "EstablishmentCause.h" //#include "RRCConnectionSetup.h" -#include "SRB-ToAddModList.h" -#include "DRB-ToAddModList.h" +#include "NR_SRB-ToAddModList.h" +#include "NR_DRB-ToAddModList.h" //#include "MCCH-Message.h" //#define MRB1 1 //#include "RRCConnectionSetupComplete.h" //#include "RRCConnectionReconfigurationComplete.h" //#include "RRCConnectionReconfiguration.h" -#include "MIB.h" +#include "NR_MIB.h" //#include "SystemInformation.h" -#include "SIB1.h" -#include "ServingCellConfigCommon.h" +#include "NR_SIB1.h" +#include "NR_ServingCellConfigCommon.h" //#include "SIB-Type.h" //#include "BCCH-DL-SCH-Message.h" //#include "PHY/defs.h" -#include "MeasObjectToAddModList.h" -#include "ReportConfigToAddModList.h" -#include "MeasIdToAddModList.h" +#include "NR_MeasObjectToAddModList.h" +#include "NR_ReportConfigToAddModList.h" +#include "NR_MeasIdToAddModList.h" #include "gnb_config.h" #endif @@ -92,7 +85,7 @@ #include "common/ran_context.h" //#include "PHY/defs.h" -#ifndef USER_MODE +/*#ifndef USER_MODE #define msg printk #ifndef errno int errno; @@ -101,7 +94,7 @@ int errno; # if !defined (msg) # define msg printf # endif -#endif +#endif*/ //#define XER_PRINT @@ -118,8 +111,8 @@ extern uint8_t usim_test; extern RAN_CONTEXT_t RC; -uint16_t two_tier_hexagonal_cellIds[7] = {0,1,2,4,5,7,8}; -uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8}, // CellId 0 +uint16_t two_tier_hexagonal_nr_cellIds[7] = {0,1,2,4,5,7,8}; +uint16_t two_tier_hexagonal_adjacent_nr_cellIds[7][6] = {{1,2,4,5,7,8}, // CellId 0 {11,18,2,0,8,15}, // CellId 1 {18,13,3,4,0,1}, // CellId 2 {2,3,14,6,5,0}, // CellId 4 @@ -132,7 +125,7 @@ uint16_t two_tier_hexagonal_adjacent_cellIds[7][6] = {{1,2,4,5,7,8}, // CellI * This is a helper function for xer_sprint, which directs all incoming data * into the provided string. */ -static int xer__print2s_NR (const void *buffer, size_t size, void *app_key) +static int xer__nr_print2s (const void *buffer, size_t size, void *app_key) { xer_sprint_string_t *string_buffer = (xer_sprint_string_t *) app_key; size_t string_remaining = string_buffer->string_size - string_buffer->string_index; @@ -149,7 +142,7 @@ static int xer__print2s_NR (const void *buffer, size_t size, void *app_key) return 0; } -int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr) +int xer_nr_sprint (char *string, size_t string_size, asn_TYPE_descriptor_t *td, void *sptr) { asn_enc_rval_t er; xer_sprint_string_t string_buffer; @@ -158,7 +151,7 @@ int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td, string_buffer.string_size = string_size; string_buffer.string_index = 0; - er = xer_encode(td, sptr, XER_F_BASIC, xer__print2s, &string_buffer); + er = xer_encode(td, sptr, XER_F_BASIC, xer__nr_print2s, &string_buffer); if (er.encoded < 0) { LOG_E(RRC, "xer_sprint encoding error (%zd)!", er.encoded); @@ -175,7 +168,7 @@ int xer_sprint_NR (char *string, size_t string_size, asn_TYPE_descriptor_t *td, uint16_t get_adjacent_cell_id_NR(uint8_t Mod_id,uint8_t index) { - return(two_tier_hexagonal_adjacent_cellIds[Mod_id][index]); + return(two_tier_hexagonal_adjacent_nr_cellIds[Mod_id][index]); } /* This only works for the hexagonal topology...need a more general function for other topologies */ @@ -184,7 +177,7 @@ uint8_t get_adjacent_cell_mod_id_NR(uint16_t phyCellId) uint8_t i; for(i=0; i<7; i++) { - if(two_tier_hexagonal_cellIds[i] == phyCellId) { + if(two_tier_hexagonal_nr_cellIds[i] == phyCellId) { return i; } } @@ -205,41 +198,44 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, asn_enc_rval_t enc_rval; - BCCH_BCH_Message_t *mib=&carrier->mib - memset(mib,0,sizeof(BCCH_BCH_Message_t)); - mib->message.present = BCCH_BCH_MessageType_PR_mib; + NR_BCCH_BCH_Message_t *mib = &carrier->mib; + memset(mib,0,sizeof(NR_BCCH_BCH_Message_t)); + mib->message.present = NR_BCCH_BCH_MessageType_PR_mib; + mib->message.choice.mib = CALLOC(1,sizeof(struct NR_MIB)); + memset(&mib->message.choice.mib,0,sizeof(struct NR_MIB)); + //36.331 SFN BIT STRING (SIZE (8) , 38.331 SFN BIT STRING (SIZE (6)) uint8_t sfn = (uint8_t)((frame>>4)&0x3f); - mib->message.choice.mib.systemFrameNumber.buf = &sfn; - mib->message.choice.mib.systemFrameNumber.size = 1; - mib->message.choice.mib.systemFrameNumber.bits_unused=0; + mib->message.choice.mib->systemFrameNumber.buf = &sfn; + mib->message.choice.mib->systemFrameNumber.size = 1; + mib->message.choice.mib->systemFrameNumber.bits_unused=0; //38.331 spare BIT STRING (SIZE (1)) - uint8_t *spare= calloc(1, sizeof(uint8_t)); + uint16_t *spare= calloc(1, sizeof(uint16_t)); if (spare == NULL) abort(); - mib->message.choice.mib.spare.buf = (uint8_t *)spare; - mib->message.choice.mib.spare.size = 1; - mib->message.choice.mib.spare.bits_unused = 7; // This makes a spare of 1 bits + mib->message.choice.mib->spare.buf = (uint8_t *)spare; + mib->message.choice.mib->spare.size = 1; + mib->message.choice.mib->spare.bits_unused = 7; // This makes a spare of 1 bits - mib->message.choice.mib.ssb_SubcarrierOffset = ssb_SubcarrierOffset; - mib->message.choice.mib.pdcch_ConfigSIB1 = pdcch_ConfigSIB1; + mib->message.choice.mib->ssb_SubcarrierOffset = ssb_SubcarrierOffset; + mib->message.choice.mib->pdcch_ConfigSIB1 = pdcch_ConfigSIB1; switch (subCarrierSpacingCommon) { case 15: - mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60; + mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs15or60; break; case 30: - mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120; + mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs30or120; break; case 60: - mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs15or60; + mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs15or60; break; case 120: - mib->message.choice.mib.subCarrierSpacingCommon = MIB__subCarrierSpacingCommon_scs30or120; + mib->message.choice.mib->subCarrierSpacingCommon = NR_MIB__subCarrierSpacingCommon_scs30or120; break; default: @@ -248,11 +244,11 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, switch (dmrs_TypeA_Position) { case 2: - mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos2; + mib->message.choice.mib->dmrs_TypeA_Position = NR_MIB__dmrs_TypeA_Position_pos2; break; case 3: - mib->message.choice.mib.dmrs_TypeA_Position = MIB__dmrs_TypeA_Position_pos3; + mib->message.choice.mib->dmrs_TypeA_Position = NR_MIB__dmrs_TypeA_Position_pos3; break; default: @@ -261,14 +257,15 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, } // assign_enum - mib->message.choice.mib.cellBarred = MIB__cellBarred_notBarred; + mib->message.choice.mib->cellBarred = NR_MIB__cellBarred_notBarred; // assign_enum - mib->message.choice.mib.intraFreqReselection = MIB__intraFreqReselection_notAllowed; + mib->message.choice.mib->intraFreqReselection = NR_MIB__intraFreqReselection_notAllowed; //encode MIB to data - enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_BCH_Message, + enc_rval = uper_encode_to_buffer(&asn_DEF_NR_BCCH_BCH_Message, + NULL, (void*)mib, carrier->MIB, 24); @@ -283,217 +280,6 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, return((enc_rval.encoded+7)/8); } -//------------------------------------------------------------------------------ - -uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier, - int Mod_id, - int CC_id - #if defined(ENABLE_ITTI) - , gNB_RrcConfigurationReq *configuration - #endif - ) -{ - - // SystemInformation_t systemInformation; - PLMN_IdentityInfo_t PLMN_identity_info; - MCC_MNC_Digit_t dummy_mcc[3],dummy_mnc[3]; - asn_enc_rval_t enc_rval; - SchedulingInfo_t schedulingInfo; - SIB_Type_t sib_type; - - uint8_t *buffer = carrier->SIB1; - BCCH_DL_SCH_Message_t *bcch_message = &carrier->siblock1; - SIB1_t **sib1 = &carrier->sib1; - - - memset(bcch_message,0,sizeof(BCCH_DL_SCH_Message_t)); - bcch_message->message.present = BCCH_DL_SCH_MessageType_PR_c1; - bcch_message->message.choice.c1.present = BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1; - // memcpy(&bcch_message.message.choice.c1.choice.systemInformationBlockType1,sib1,sizeof(SystemInformationBlockType1_t)); - - *sib1 = &bcch_message->message.choice.c1.choice.systemInformationBlockType1; - - memset(&PLMN_identity_info,0,sizeof(PLMN_IdentityInfo_t)); - memset(&schedulingInfo,0,sizeof(SchedulingInfo_t)); - memset(&sib_type,0,sizeof(SIB_Type_t)); - - - - PLMN_identity_info.plmn_Identity.mcc = CALLOC(1,sizeof(*PLMN_identity_info.plmn_Identity.mcc)); - memset(PLMN_identity_info.plmn_Identity.mcc,0,sizeof(*PLMN_identity_info.plmn_Identity.mcc)); - - asn_set_empty(&PLMN_identity_info.plmn_Identity.mcc->list);//.size=0; - -#if defined(ENABLE_ITTI) - dummy_mcc[0] = (configuration->mcc / 100) % 10; - dummy_mcc[1] = (configuration->mcc / 10) % 10; - dummy_mcc[2] = (configuration->mcc / 1) % 10; -#else - dummy_mcc[0] = 0; - dummy_mcc[1] = 0; - dummy_mcc[2] = 1; -#endif - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[0]); - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[1]); - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mcc->list,&dummy_mcc[2]); - - PLMN_identity_info.plmn_Identity.mnc.list.size=0; - PLMN_identity_info.plmn_Identity.mnc.list.count=0; -#if defined(ENABLE_ITTI) - - if (configuration->mnc >= 100) { - dummy_mnc[0] = (configuration->mnc / 100) % 10; - dummy_mnc[1] = (configuration->mnc / 10) % 10; - dummy_mnc[2] = (configuration->mnc / 1) % 10; - } else { - if (configuration->mnc_digit_length == 2) { - dummy_mnc[0] = (configuration->mnc / 10) % 10; - dummy_mnc[1] = (configuration->mnc / 1) % 10; - dummy_mnc[2] = 0xf; - } else { - dummy_mnc[0] = (configuration->mnc / 100) % 100; - dummy_mnc[1] = (configuration->mnc / 10) % 10; - dummy_mnc[2] = (configuration->mnc / 1) % 10; - } - } - -#else - dummy_mnc[0] = 0; - dummy_mnc[1] = 1; - dummy_mnc[2] = 0xf; -#endif - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[0]); - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[1]); - - if (dummy_mnc[2] != 0xf) { - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&dummy_mnc[2]); - } - - //assign_enum(&PLMN_identity_info.cellReservedForOperatorUse,PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved); - PLMN_identity_info.cellReservedForOperatorUse=PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved; - - ASN_SEQUENCE_ADD(&(*sib1)->cellAccessRelatedInfo.plmn_IdentityList.list,&PLMN_identity_info); - - - // 16 bits - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf = MALLOC(2); -#if defined(ENABLE_ITTI) - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[0] = (configuration->tac >> 8) & 0xff; - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[1] = (configuration->tac >> 0) & 0xff; -#else - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[0] = 0x00; - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.buf[1] = 0x01; -#endif - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.size=2; - (*sib1)->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0; - - // 28 bits - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf = MALLOC(8); -#if defined(ENABLE_ITTI) - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[0] = (configuration->cell_identity >> 20) & 0xff; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[1] = (configuration->cell_identity >> 12) & 0xff; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[2] = (configuration->cell_identity >> 4) & 0xff; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[3] = (configuration->cell_identity << 4) & 0xf0; -#else - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[0] = 0x00; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[1] = 0x00; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[2] = 0x00; - (*sib1)->cellAccessRelatedInfo.cellIdentity.buf[3] = 0x10; -#endif - (*sib1)->cellAccessRelatedInfo.cellIdentity.size=4; - (*sib1)->cellAccessRelatedInfo.cellIdentity.bits_unused=4; - - // assign_enum(&(*sib1)->cellAccessRelatedInfo.cellBarred,SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred); - (*sib1)->cellAccessRelatedInfo.cellBarred=SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred; - - // assign_enum(&(*sib1)->cellAccessRelatedInfo.intraFreqReselection,SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed); - (*sib1)->cellAccessRelatedInfo.intraFreqReselection=SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_notAllowed; - (*sib1)->cellAccessRelatedInfo.csg_Indication=0; - - (*sib1)->cellSelectionInfo.q_RxLevMin=-65; - (*sib1)->cellSelectionInfo.q_RxLevMinOffset=NULL; - //(*sib1)->p_Max = CALLOC(1, sizeof(P_Max_t)); - //*((*sib1)->p_Max) = 23; - (*sib1)->freqBandIndicator = -#if defined(ENABLE_ITTI) - configuration->eutra_band[CC_id]; -#else - 7; -#endif - - schedulingInfo.si_Periodicity=SchedulingInfo__si_Periodicity_rf8; - - // This is for SIB2/3 - sib_type=SIB_Type_sibType3; - ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); - ASN_SEQUENCE_ADD(&(*sib1)->schedulingInfoList.list,&schedulingInfo); - - // ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,NULL); - -#if defined(ENABLE_ITTI) - - if (configuration->frame_type[CC_id] == TDD) -#endif - { - (*sib1)->tdd_Config = CALLOC(1,sizeof(struct TDD_Config)); - - (*sib1)->tdd_Config->subframeAssignment = -#if defined(ENABLE_ITTI) - configuration->tdd_config[CC_id]; -#else - 3; -#endif - - (*sib1)->tdd_Config->specialSubframePatterns = -#if defined(ENABLE_ITTI) - configuration->tdd_config_s[CC_id]; -#else - 0; -#endif - } - - (*sib1)->si_WindowLength=SystemInformationBlockType1__si_WindowLength_ms20; - (*sib1)->systemInfoValueTag=0; - // (*sib1).nonCriticalExtension = calloc(1,sizeof(*(*sib1).nonCriticalExtension)); - -#ifdef XER_PRINT - xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (void*)bcch_message); -#endif - enc_rval = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message, - (void*)bcch_message, - buffer, - 100); - AssertFatal (enc_rval.encoded > 0, "ASN1 message encoding failed (%s, %lu)!\n", - enc_rval.failed_type->name, enc_rval.encoded); - -#if defined(ENABLE_ITTI) -# if !defined(DISABLE_XER_SPRINT) - { - char message_string[10000]; - size_t message_string_size; - - if ((message_string_size = xer_sprint(message_string, sizeof(message_string), &asn_DEF_BCCH_DL_SCH_Message, (void *)bcch_message)) > 0) { - MessageDef *msg_p; - - msg_p = itti_alloc_new_message_sized (TASK_RRC_ENB, RRC_DL_BCCH, message_string_size + sizeof (IttiMsgText)); - msg_p->ittiMsg.rrc_dl_bcch.size = message_string_size; - memcpy(&msg_p->ittiMsg.rrc_dl_bcch.text, message_string, message_string_size); - itti_send_msg_to_task(TASK_UNKNOWN, Mod_id, msg_p); - } - } -# endif -#endif - -#ifdef USER_MODE - LOG_D(RRC,"[eNB] SystemInformationBlockType1 Encoded %zd bits (%zd bytes)\n",enc_rval.encoded,(enc_rval.encoded+7)/8); -#endif - - if (enc_rval.encoded==-1) { - return(-1); - } - - return((enc_rval.encoded+7)/8); -} void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, int CC_id @@ -503,50 +289,53 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, ) { // ServingCellConfigCommon // - struct FrequencyInfoDL **frequencyinfordl = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->frequencyInfoDL; - BWP_DownlinkCommon_t **bwp_downlinkcommon = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->initialDownlinkBWP; - UplinkConfigCommon_t **uplinkconfigcommon = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->uplinkConfigCommon; - UplinkConfigCommon_t **supplementaryuplinkconfig = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->supplementaryUplinkConfig; + struct NR_FrequencyInfoDL **frequencyinfordl = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->frequencyInfoDL; + NR_BWP_DownlinkCommon_t **bwp_downlinkcommon = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->initialDownlinkBWP; + NR_UplinkConfigCommon_t **uplinkconfigcommon = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->uplinkConfigCommon; + NR_UplinkConfigCommon_t **supplementaryuplinkconfig = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->supplementaryUplinkConfig; + struct NR_ServingCellConfigCommon__ssb_PositionsInBurst **ssb_positionsinburst = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_PositionsInBurst; /////RateMatchPatternLTE_CRS_t **lte_crs_tomatcharound = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->lte_CRS_ToMatchAround; - struct ServingCellConfigCommon__rateMatchPatternToAddModList **ratematchpatterntoaddmodlist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToAddModList; - struct RateMatchPattern *ratematchpattern; - struct ServingCellConfigCommon__rateMatchPatternToReleaseList **ratematchpatterntoreleaselist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToReleaseList; - RateMatchPatternId_t *ratematchpatternid; + struct NR_ServingCellConfigCommon__rateMatchPatternToAddModList **ratematchpatterntoaddmodlist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToAddModList; + struct NR_RateMatchPattern *ratematchpattern; + struct NR_ServingCellConfigCommon__rateMatchPatternToReleaseList **ratematchpatterntoreleaselist = &RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->rateMatchPatternToReleaseList; + NR_RateMatchPatternId_t *ratematchpatternid; - struct TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon; - struct TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon2; + struct NR_TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon; + struct NR_TDD_UL_DL_ConfigCommon **tdd_ul_dl_configurationcommon2; // FrequencyInfoDL // - FreqBandIndicatorNR_t *dl_frequencyBandList; - struct SCS_SpecificCarrier *dl_scs_SpecificCarrierList; + NR_FreqBandIndicatorNR_t *dl_frequencyBandList; + struct NR_SCS_SpecificCarrier *dl_scs_SpecificCarrierList; // BWP_DownlinkCommon // - ControlResourceSet_t *bwp_dl_controlresourceset; - TCI_StateId_t *TCI_StateId; - SearchSpace_t *bwp_dl_searchspace; - struct PDSCH_TimeDomainResourceAllocation *bwp_dl_timedomainresourceallocation; + NR_ControlResourceSet_t *bwp_dl_controlresourceset; + NR_TCI_StateId_t *TCI_StateId; + NR_SearchSpace_t *bwp_dl_searchspace; + struct NR_PDSCH_TimeDomainResourceAllocation *bwp_dl_timedomainresourceallocation; // UplinkConfigCommon // - FreqBandIndicatorNR_t *ul_frequencyBandList; - struct SCS_SpecificCarrier *ul_scs_SpecificCarrierList; + NR_FreqBandIndicatorNR_t *ul_frequencyBandList; + struct NR_SCS_SpecificCarrier *ul_scs_SpecificCarrierList; // PUSCH_ConfigCommon // - struct PUSCH_TimeDomainResourceAllocation *pusch_configcommontimedomainresourceallocation; + struct NR_PUSCH_TimeDomainResourceAllocation *pusch_configcommontimedomainresourceallocation; //------------------------------------Start Fill ServingCellConfigCommon------------------------------------// - RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId = configuration->Nid_cell[CC_id]; + RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId = CALLOC(1,sizeof(NR_PhysCellId_t)); + memset(&RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId,0,sizeof(NR_PhysCellId_t)); + *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->physCellId) = configuration->Nid_cell[CC_id]; (*ssb_positionsinburst)->present = configuration->ServingCellConfigCommon_ssb_PositionsInBurst_PR[CC_id]; - if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap){ + if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_shortBitmap){ (*ssb_positionsinburst)->choice.shortBitmap.buf = MALLOC(1); (*ssb_positionsinburst)->choice.shortBitmap.size = 1; (*ssb_positionsinburst)->choice.shortBitmap.bits_unused = 4; (*ssb_positionsinburst)->choice.shortBitmap.buf[0] = 0x0f; - }else if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap){ + }else if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_mediumBitmap){ (*ssb_positionsinburst)->choice.mediumBitmap.buf = MALLOC(1); (*ssb_positionsinburst)->choice.mediumBitmap.size = 1; (*ssb_positionsinburst)->choice.mediumBitmap.bits_unused = 0; (*ssb_positionsinburst)->choice.mediumBitmap.buf[0] = 0xff; - }else if((*ssb_positionsinburst)->present == ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap){ + }else if((*ssb_positionsinburst)->present == NR_ServingCellConfigCommon__ssb_PositionsInBurst_PR_longBitmap){ (*ssb_positionsinburst)->choice.longBitmap.buf = MALLOC(8); (*ssb_positionsinburst)->choice.longBitmap.size = 8; (*ssb_positionsinburst)->choice.longBitmap.bits_unused = 0; @@ -560,118 +349,124 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, (*ssb_positionsinburst)->choice.longBitmap.buf[7] = 0xff; } - RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell = configuration->ServingCellConfigCommon_ssb_periodicityServingCell[CC_id]; + RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell = CALLOC(1,sizeof(long)); + *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ssb_periodicityServingCell) = configuration->ServingCellConfigCommon_ssb_periodicityServingCell[CC_id]; RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->dmrs_TypeA_Position = configuration->ServingCellConfigCommon_dmrs_TypeA_Position[CC_id]; - ratematchpattern = CALLOC(1,sizeof(struct RateMatchPattern)); - memset(&ratematchpattern,0,sizeof(struct RateMatchPattern)); + ratematchpattern = CALLOC(1,sizeof(struct NR_RateMatchPattern)); + memset(&ratematchpattern,0,sizeof(struct NR_RateMatchPattern)); ratematchpattern->rateMatchPatternId = configuration->rateMatchPatternId[CC_id]; ratematchpattern->patternType.present = configuration->RateMatchPattern_patternType[CC_id]; - if(ratematchpattern->patternType.present == RateMatchPattern__patternType_PR_bitmaps){ + if(ratematchpattern->patternType.present == NR_RateMatchPattern__patternType_PR_bitmaps){ + + ratematchpattern->patternType.choice.bitmaps = CALLOC(1,sizeof(struct NR_RateMatchPattern__patternType__bitmaps)); + memset(&ratematchpattern->patternType.choice.bitmaps,0,sizeof(struct NR_RateMatchPattern__patternType__bitmaps)); - ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf = MALLOC(35); - ratematchpattern->patternType.choice.bitmaps.resourceBlocks.size = 35; - ratematchpattern->patternType.choice.bitmaps.resourceBlocks.bits_unused = 5; - ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf[0] = 0x07; + ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf = MALLOC(35); + ratematchpattern->patternType.choice.bitmaps->resourceBlocks.size = 35; + ratematchpattern->patternType.choice.bitmaps->resourceBlocks.bits_unused = 5; + ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf[0] = 0x07; for (int i =1;i<=34;i++ ){ - ratematchpattern->patternType.choice.bitmaps.resourceBlocks.buf[i] =0xff; + ratematchpattern->patternType.choice.bitmaps->resourceBlocks.buf[i] =0xff; } - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present = configuration->symbolsInResourceBlock[CC_id]; - if(ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present == RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot){ - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf=MALLOC(2); - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.size=2; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.bits_unused=2; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf[0]=0x3f; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.oneSlot.buf[1]=0xff; - }else if(ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.present == RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots){ - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf=MALLOC(4); - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.size=4; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.bits_unused=4; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[0]=0x0f; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[1]=0xff; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[2]=0xff; - ratematchpattern->patternType.choice.bitmaps.symbolsInResourceBlock.choice.twoSlots.buf[3]=0xff; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present = configuration->symbolsInResourceBlock[CC_id]; + if(ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present == NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_oneSlot){ + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf=MALLOC(2); + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.size=2; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.bits_unused=2; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf[0]=0x3f; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.oneSlot.buf[1]=0xff; + }else if(ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.present == NR_RateMatchPattern__patternType__bitmaps__symbolsInResourceBlock_PR_twoSlots){ + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf=MALLOC(4); + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.size=4; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.bits_unused=4; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[0]=0x0f; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[1]=0xff; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[2]=0xff; + ratematchpattern->patternType.choice.bitmaps->symbolsInResourceBlock.choice.twoSlots.buf[3]=0xff; } - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern = CALLOC(1,sizeof(struct RateMatchPattern__patternType__bitmaps__periodicityAndPattern)); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present = configuration->periodicityAndPattern[CC_id]; - if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.buf = MALLOC(1); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.size = 1; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.bits_unused = 6; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n2.buf[0] =0x03; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.buf = MALLOC(1); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.size = 1; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.bits_unused = 4; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n4.buf[0] = 0x0f; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.buf = MALLOC(1); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.size = 1; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.bits_unused = 3; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n5.buf[0] = 0x1f; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.buf = MALLOC(1); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.size = 1; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.bits_unused = 0; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n8.buf[0] = 0xff; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf = MALLOC(2); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.size = 2; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.bits_unused = 6; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf[0] = 0x03; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n10.buf[1] = 0xff; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf = MALLOC(3); - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.size = 3; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.bits_unused = 4; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[0] = 0x0f; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[1] = 0xff; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n20.buf[2] = 0xff; - }else if(ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->present == RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40){ - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf = MALLOC(5) - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.size = 5; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.bits_unused = 0; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[0] = 0xff; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[1] = 0xff; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[2] = 0xff; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[3] = 0xff; - ratematchpattern->patternType.choice.bitmaps.periodicityAndPattern->choice.n40.buf[4] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern = CALLOC(1,sizeof(struct NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern)); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present = configuration->periodicityAndPattern[CC_id]; + if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n2){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.buf = MALLOC(1); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.size = 1; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.bits_unused = 6; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n2.buf[0] =0x03; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n4){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.buf = MALLOC(1); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.size = 1; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.bits_unused = 4; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n4.buf[0] = 0x0f; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n5){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.buf = MALLOC(1); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.size = 1; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.bits_unused = 3; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n5.buf[0] = 0x1f; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n8){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.buf = MALLOC(1); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.size = 1; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.bits_unused = 0; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n8.buf[0] = 0xff; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n10){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf = MALLOC(2); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.size = 2; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.bits_unused = 6; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf[0] = 0x03; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n10.buf[1] = 0xff; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n20){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf = MALLOC(3); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.size = 3; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.bits_unused = 4; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[0] = 0x0f; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[1] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n20.buf[2] = 0xff; + }else if(ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->present == NR_RateMatchPattern__patternType__bitmaps__periodicityAndPattern_PR_n40){ + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf = MALLOC(5); + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.size = 5; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.bits_unused = 0; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[0] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[1] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[2] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[3] = 0xff; + ratematchpattern->patternType.choice.bitmaps->periodicityAndPattern->choice.n40.buf[4] = 0xff; } - }else if(ratematchpattern->patternType.present == RateMatchPattern__patternType_PR_controlResourceSet){ - ratematchpattern->patternType.choice.controlResourceSet = RateMatchPattern_controlResourceSet[CC_id]; + }else if(ratematchpattern->patternType.present == NR_RateMatchPattern__patternType_PR_controlResourceSet){ + ratematchpattern->patternType.choice.controlResourceSet = configuration->RateMatchPattern_controlResourceSet[CC_id]; } - ratematchpattern->subcarrierSpacing = CALLOC(1,sizeof(SubcarrierSpacing_t)); - ratematchpattern->subcarrierSpacing = configuration->RateMatchPattern_subcarrierSpacing[CC_id]; + ratematchpattern->subcarrierSpacing = CALLOC(1,sizeof(NR_SubcarrierSpacing_t)); + *(ratematchpattern->subcarrierSpacing) = configuration->RateMatchPattern_subcarrierSpacing[CC_id]; ratematchpattern->mode = configuration->RateMatchPattern_mode[CC_id]; ASN_SEQUENCE_ADD(&(*ratematchpatterntoaddmodlist)->list,&ratematchpattern); - ratematchpatternid = CALLOC(1,sizeof(RateMatchPatternId_t)); - memset(&ratematchpatternid,0,sizeof(RateMatchPatternId_t)); - ratematchpatternid = configuration->rateMatchPatternId[CC_id]; + ratematchpatternid = CALLOC(1,sizeof(NR_RateMatchPatternId_t)); + memset(&ratematchpatternid,0,sizeof(NR_RateMatchPatternId_t)); + *(ratematchpatternid) = configuration->rateMatchPatternId[CC_id]; ASN_SEQUENCE_ADD(&(*ratematchpatterntoreleaselist)->list,&ratematchpatternid); - RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing = configuration->NIA_SubcarrierSpacing[CC_id]; + RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing = CALLOC(1,sizeof(NR_SubcarrierSpacing_t)); + *(RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->subcarrierSpacing) = configuration->NIA_SubcarrierSpacing[CC_id]; + RC.nrrrc[Mod_id]->carrier[CC_id].servingcellconfigcommon->ss_PBCH_BlockPower = configuration->ServingCellConfigCommon_ss_PBCH_BlockPower[CC_id]; //Fill FrequencyInfoDL // (*frequencyinfordl)->absoluteFrequencySSB = configuration->absoluteFrequencySSB[CC_id]; (*frequencyinfordl)->ssb_SubcarrierOffset = CALLOC(1,sizeof(long)); - (*frequencyinfordl)->ssb_SubcarrierOffset = configuration->ssb_SubcarrierOffset[CC_id]; + *((*frequencyinfordl)->ssb_SubcarrierOffset) = configuration->ssb_SubcarrierOffset[CC_id]; - dl_frequencyBandList = CALLOC(1,sizeof(FreqBandIndicatorNR_t)); - memset(&dl_frequencyBandList,0,sizeof(FreqBandIndicatorNR_t)); - dl_frequencyBandList = configuration->DL_FreqBandIndicatorNR[CC_id]; + dl_frequencyBandList = CALLOC(1,sizeof(NR_FreqBandIndicatorNR_t)); + memset(&dl_frequencyBandList,0,sizeof(NR_FreqBandIndicatorNR_t)); + *(dl_frequencyBandList) = configuration->DL_FreqBandIndicatorNR[CC_id]; ASN_SEQUENCE_ADD(&(*frequencyinfordl)->frequencyBandList.list,&dl_frequencyBandList); (*frequencyinfordl)->absoluteFrequencyPointA = configuration->DL_absoluteFrequencyPointA[CC_id]; - dl_scs_SpecificCarrierList = CALLOC(1,sizeof(struct SCS_SpecificCarrier)); - memset(&dl_scs_SpecificCarrierList,0,sizeof(struct SCS_SpecificCarrier)); + dl_scs_SpecificCarrierList = CALLOC(1,sizeof(struct NR_SCS_SpecificCarrier)); + memset(&dl_scs_SpecificCarrierList,0,sizeof(struct NR_SCS_SpecificCarrier)); dl_scs_SpecificCarrierList->offsetToCarrier = configuration->DL_offsetToCarrier[CC_id]; dl_scs_SpecificCarrierList->subcarrierSpacing = configuration->DL_SCS_SubcarrierSpacing[CC_id]; dl_scs_SpecificCarrierList->k0 = configuration->DL_SCS_SpecificCarrier_k0[CC_id]; @@ -684,26 +479,29 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, if(configuration->DL_BWP_prefix_type[CC_id]){ (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = CALLOC(1,sizeof(long)); - (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = BWP__cyclicPrefix_extended; + (*bwp_downlinkcommon)->genericParameters.cyclicPrefix = NR_BWP__cyclicPrefix_extended; } //Fill BWP_DownlinkCommon -> pdcch_ConfigCommon // - (*bwp_downlinkcommon)->pdcch_ConfigCommon = CALLOC(1,sizeof(struct PDCCH_ConfigCommon)); - (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceSIB1 = CALLOC(1,sizeof(SearchSpaceId_t)); - (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceOtherSystemInformation = CALLOC(1,sizeof(SearchSpaceId_t)); - (*bwp_downlinkcommon)->pdcch_ConfigCommon->pagingSearchSpace = CALLOC(1,sizeof(SearchSpaceId_t)); - (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_SearchSpace = CALLOC(1,sizeof(SearchSpaceId_t)); - (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_ControlResourceSet = CALLOC(1,sizeof(ControlResourceSetId_t)); - - (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceSIB1 = configuration->searchSpaceSIB1[CC_id]; - (*bwp_downlinkcommon)->pdcch_ConfigCommon->searchSpaceOtherSystemInformation = configuration->searchSpaceOtherSystemInformation[CC_id]; - (*bwp_downlinkcommon)->pdcch_ConfigCommon->pagingSearchSpace = configuration->pagingSearchSpace[CC_id]; - (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_SearchSpace = configuration->ra_SearchSpace[CC_id]; - (*bwp_downlinkcommon)->pdcch_ConfigCommon->ra_ControlResourceSet = configuration->rach_ra_ControlResourceSet[CC_id]; + (*bwp_downlinkcommon)->pdcch_ConfigCommon = CALLOC(1,sizeof(struct NR_SetupRelease_PDCCH_ConfigCommon)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->present = NR_SetupRelease_PDCCH_ConfigCommon_PR_setup; + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon)); + + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1 = CALLOC(1,sizeof(NR_SearchSpaceId_t)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation = CALLOC(1,sizeof(NR_SearchSpaceId_t)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->pagingSearchSpace = CALLOC(1,sizeof(NR_SearchSpaceId_t)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_SearchSpace = CALLOC(1,sizeof(NR_SearchSpaceId_t)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_ControlResourceSet = CALLOC(1,sizeof(NR_ControlResourceSetId_t)); + + *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceSIB1) = configuration->searchSpaceSIB1[CC_id]; + *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->searchSpaceOtherSystemInformation) = configuration->searchSpaceOtherSystemInformation[CC_id]; + *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->pagingSearchSpace) = configuration->pagingSearchSpace[CC_id]; + *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_SearchSpace) = configuration->ra_SearchSpace[CC_id]; + *((*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->ra_ControlResourceSet) = configuration->rach_ra_ControlResourceSet[CC_id]; //Fill BWP_DownlinkCommon -> pdcch_ConfigCommon -> ControlResourceSet list // - (*bwp_downlinkcommon)->pdcch_ConfigCommon->commonControlResourcesSets = CALLOC(1,sizeof(struct PDCCH_ConfigCommon__commonControlResourcesSets)); - bwp_dl_controlresourceset = CALLOC(1,sizeof(ControlResourceSet_t)); - memset(&bwp_dl_controlresourceset,0,sizeof(ControlResourceSet_t)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonControlResourcesSets = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon__commonControlResourcesSets)); + bwp_dl_controlresourceset = CALLOC(1,sizeof(NR_ControlResourceSet_t)); + memset(&bwp_dl_controlresourceset,0,sizeof(NR_ControlResourceSet_t)); bwp_dl_controlresourceset->controlResourceSetId = configuration->PDCCH_common_controlResourceSetId[CC_id]; //BIT STRING (SIZE (45)) bwp_dl_controlresourceset->frequencyDomainResources.buf =MALLOC(6); @@ -721,63 +519,64 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, bwp_dl_controlresourceset->cce_REG_MappingType.present = configuration->PDCCH_cce_REG_MappingType[CC_id]; - if(bwp_dl_controlresourceset->cce_REG_MappingType == ControlResourceSet__cce_REG_MappingType_PR_interleaved ){ - bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.reg_BundleSize = configuration->PDCCH_reg_BundleSize[CC_id]; - bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.interleaverSize = configuration->PDCCH_interleaverSize[CC_id]; - bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved.shiftIndex = configuration->PDCCH_shiftIndex[CC_id]; - }else if(bwp_dl_controlresourceset->cce_REG_MappingType == ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved){ - bwp_dl_controlresourceset->cce_REG_MappingType.choice.nonInterleaved = NULL; + if(bwp_dl_controlresourceset->cce_REG_MappingType.present == NR_ControlResourceSet__cce_REG_MappingType_PR_interleaved ){ + bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved = CALLOC(1,sizeof(struct NR_ControlResourceSet__cce_REG_MappingType__interleaved)); + bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->reg_BundleSize = configuration->PDCCH_reg_BundleSize[CC_id]; + bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->interleaverSize = configuration->PDCCH_interleaverSize[CC_id]; + bwp_dl_controlresourceset->cce_REG_MappingType.choice.interleaved->shiftIndex = configuration->PDCCH_shiftIndex[CC_id]; + }else if(bwp_dl_controlresourceset->cce_REG_MappingType.present == NR_ControlResourceSet__cce_REG_MappingType_PR_nonInterleaved){ + bwp_dl_controlresourceset->cce_REG_MappingType.choice.nonInterleaved = 0; } bwp_dl_controlresourceset->precoderGranularity = configuration->PDCCH_precoderGranularity[CC_id]; - bwp_dl_controlresourceset->tci_StatesPDCCH = CALLOC(1,sizeof(struct ControlResourceSet__tci_StatesPDCCH)); - TCI_StateId = CALLOC(1,sizeof(TCI_StateId_t)); - memset(&TCI_StateId,0,sizeof(TCI_StateId_t)); - TCI_StateId = configuration->PDCCH_TCI_StateId[CC_id]; + bwp_dl_controlresourceset->tci_StatesPDCCH = CALLOC(1,sizeof(struct NR_ControlResourceSet__tci_StatesPDCCH)); + TCI_StateId = CALLOC(1,sizeof(NR_TCI_StateId_t)); + memset(&TCI_StateId,0,sizeof(NR_TCI_StateId_t)); + *(TCI_StateId) = configuration->PDCCH_TCI_StateId[CC_id]; ASN_SEQUENCE_ADD(&bwp_dl_controlresourceset->tci_StatesPDCCH->list,&TCI_StateId); if(configuration->tci_PresentInDCI[CC_id]){ bwp_dl_controlresourceset->tci_PresentInDCI = CALLOC(1,sizeof(long)); - bwp_dl_controlresourceset->tci_PresentInDCI = ControlResourceSet__tci_PresentInDCI_enabled; + bwp_dl_controlresourceset->tci_PresentInDCI = NR_ControlResourceSet__tci_PresentInDCI_enabled; } - bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID = CALLOC(1,sizeof(pdcch_DMRS_ScramblingID)); + bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID = CALLOC(1,sizeof(BIT_STRING_t)); bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf = MALLOC(2); bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->size = 2; bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->bits_unused = 0; bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf[0] = 0xff; bwp_dl_controlresourceset->pdcch_DMRS_ScramblingID->buf[1] = 0xff; - ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->commonControlResourcesSets->list,&bwp_dl_controlresourceset); + ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonControlResourcesSets->list,&bwp_dl_controlresourceset); //Fill BWP_DownlinkCommon -> pdcch_ConfigCommon -> SearchSpace list // - (*bwp_downlinkcommon)->pdcch_ConfigCommon->commonSearchSpaces = CALLOC(1,sizeof(struct PDCCH_ConfigCommon__commonSearchSpaces)); + (*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonSearchSpaces = CALLOC(1,sizeof(struct NR_PDCCH_ConfigCommon__commonSearchSpaces)); - bwp_dl_searchspace = CALLOC(1,sizeof(SearchSpace_t)); - memset(&bwp_dl_searchspace,0,sizeof(SearchSpace_t)); + bwp_dl_searchspace = CALLOC(1,sizeof(NR_SearchSpace_t)); + memset(&bwp_dl_searchspace,0,sizeof(NR_SearchSpace_t)); bwp_dl_searchspace->searchSpaceId = configuration->SearchSpaceId[CC_id]; - bwp_dl_searchspace->controlResourceSetId = CALLOC(1,sizeof(ControlResourceSetId_t)); - bwp_dl_searchspace->controlResourceSetId = configuration->commonSearchSpaces_controlResourceSetId[CC_id]; + bwp_dl_searchspace->controlResourceSetId = CALLOC(1,sizeof(NR_ControlResourceSetId_t)); + *(bwp_dl_searchspace->controlResourceSetId) = configuration->commonSearchSpaces_controlResourceSetId[CC_id]; - bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset = CALLOC(1,sizeof(struct SearchSpace__monitoringSlotPeriodicityAndOffset)); + bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset = CALLOC(1,sizeof(struct NR_SearchSpace__monitoringSlotPeriodicityAndOffset)); bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_choice[CC_id]; - if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1){ + if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl1){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl1 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl1[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl2){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl2 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl2[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl4){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl4 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl4[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl5){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl5 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl5[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl8){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl8 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl8[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl10){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl10 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl10[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl16){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl16 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl16[CC_id]; - }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20){ + }else if(bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->present == NR_SearchSpace__monitoringSlotPeriodicityAndOffset_PR_sl20){ bwp_dl_searchspace->monitoringSlotPeriodicityAndOffset->choice.sl20 = configuration->SearchSpace_monitoringSlotPeriodicityAndOffset_sl20[CC_id]; } bwp_dl_searchspace->monitoringSymbolsWithinSlot = CALLOC(1,sizeof(BIT_STRING_t)); @@ -787,82 +586,89 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, bwp_dl_searchspace->monitoringSymbolsWithinSlot->buf[0]=0x3f; bwp_dl_searchspace->monitoringSymbolsWithinSlot->buf[1]=0xff; - bwp_dl_searchspace->nrofCandidates = CALLOC(1,sizeof(struct SearchSpace__nrofCandidates)); + bwp_dl_searchspace->nrofCandidates = CALLOC(1,sizeof(struct NR_SearchSpace__nrofCandidates)); bwp_dl_searchspace->nrofCandidates->aggregationLevel1 = configuration->SearchSpace_nrofCandidates_aggregationLevel1[CC_id]; bwp_dl_searchspace->nrofCandidates->aggregationLevel2 = configuration->SearchSpace_nrofCandidates_aggregationLevel2[CC_id]; bwp_dl_searchspace->nrofCandidates->aggregationLevel4 = configuration->SearchSpace_nrofCandidates_aggregationLevel4[CC_id]; bwp_dl_searchspace->nrofCandidates->aggregationLevel8 = configuration->SearchSpace_nrofCandidates_aggregationLevel8[CC_id]; bwp_dl_searchspace->nrofCandidates->aggregationLevel16 = configuration->SearchSpace_nrofCandidates_aggregationLevel16[CC_id]; - bwp_dl_searchspace->searchSpaceType = CALLOC(1,sizeof(struct SearchSpace__searchSpaceType)); + bwp_dl_searchspace->searchSpaceType = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType)); bwp_dl_searchspace->searchSpaceType->present = configuration->SearchSpace_searchSpaceType[CC_id]; - if(bwp_dl_searchspace->searchSpaceType->present == SearchSpace__searchSpaceType_PR_common){ - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0 = CALLOC(1,sizeof(struct SearchSpace__searchSpaceType__common__dci_Format2_0)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel1 = CALLOC(1,sizeof(long)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel2 = CALLOC(1,sizeof(long)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel4 = CALLOC(1,sizeof(long)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel8 = CALLOC(1,sizeof(long)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel16 = CALLOC(1,sizeof(long)); - - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel1 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel2 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel4 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel8 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_0->nrofCandidates_SFI.aggregationLevel16 = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[CC_id]; + if(bwp_dl_searchspace->searchSpaceType->present == NR_SearchSpace__searchSpaceType_PR_common){ + bwp_dl_searchspace->searchSpaceType->choice.common = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0 = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common__dci_Format2_0)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel1 = CALLOC(1,sizeof(long)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel2 = CALLOC(1,sizeof(long)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel4 = CALLOC(1,sizeof(long)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel8 = CALLOC(1,sizeof(long)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel16 = CALLOC(1,sizeof(long)); + + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel1) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel1[CC_id]; + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel2) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel2[CC_id]; + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel4) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel4[CC_id]; + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel8) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel8[CC_id]; + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_0->nrofCandidates_SFI.aggregationLevel16) = configuration->Common_dci_Format2_0_nrofCandidates_SFI_aggregationLevel16[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3 = CALLOC(1,sizeof(struct struct SearchSpace__searchSpaceType__common__dci_Format2_3)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->monitoringPeriodicity = CALLOC(1,sizeof(long)); - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->monitoringPeriodicity = configuration->Common_dci_Format2_3_monitoringPeriodicity[CC_id]; - bwp_dl_searchspace->searchSpaceType->choice.common.dci_Format2_3->nrofPDCCH_Candidates = configuration->Common_dci_Format2_3_nrofPDCCH_Candidates[CC_id]; - - }else if (bwp_dl_searchspace->searchSpaceType->present == SearchSpace__searchSpaceType_PR_ue_Specific){ - bwp_dl_searchspace->searchSpaceType->choice.ue_Specific.dci_Formats = configuration->dci_Formats[CC_id]; + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3 = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__common__dci_Format2_3)); + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->monitoringPeriodicity = CALLOC(1,sizeof(long)); + *(bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->monitoringPeriodicity) = configuration->Common_dci_Format2_3_monitoringPeriodicity[CC_id]; + bwp_dl_searchspace->searchSpaceType->choice.common->dci_Format2_3->nrofPDCCH_Candidates = configuration->Common_dci_Format2_3_nrofPDCCH_Candidates[CC_id]; + + }else if (bwp_dl_searchspace->searchSpaceType->present == NR_SearchSpace__searchSpaceType_PR_ue_Specific){ + bwp_dl_searchspace->searchSpaceType->choice.ue_Specific = CALLOC(1,sizeof(struct NR_SearchSpace__searchSpaceType__ue_Specific)); + bwp_dl_searchspace->searchSpaceType->choice.ue_Specific->dci_Formats = configuration->ue_Specific__dci_Formats[CC_id]; } - ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->commonSearchSpaces->list,&bwp_dl_searchspace); + ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdcch_ConfigCommon->choice.setup->commonSearchSpaces->list,&bwp_dl_searchspace); //Fill BWP_DownlinkCommon -> pdsch_ConfigCommon // - (*bwp_downlinkcommon)->pdsch_ConfigCommon = CALLOC(1,sizeof(struct PDSCH_ConfigCommon)); - (*bwp_downlinkcommon)->pdsch_ConfigCommon->pdsch_AllocationList = CALLOC(1,sizeof(struct PDSCH_ConfigCommon__pdsch_AllocationList)); - bwp_dl_timedomainresourceallocation->k0 = CALLOC(1,sizeof(long)); + (*bwp_downlinkcommon)->pdsch_ConfigCommon = CALLOC(1,sizeof(struct NR_SetupRelease_PDSCH_ConfigCommon)); + (*bwp_downlinkcommon)->pdsch_ConfigCommon->present = NR_SetupRelease_PDSCH_ConfigCommon_PR_setup; + (*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PDSCH_ConfigCommon)); + + (*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup->pdsch_AllocationList = CALLOC(1,sizeof(struct NR_PDSCH_ConfigCommon__pdsch_AllocationList)); - bwp_dl_timedomainresourceallocation->k0 = configuration->PDSCH_TimeDomainResourceAllocation_k0[CC_id]; + bwp_dl_timedomainresourceallocation = CALLOC(1,sizeof(struct NR_PDSCH_TimeDomainResourceAllocation)); + memset(&bwp_dl_timedomainresourceallocation,0,sizeof(struct NR_PDSCH_TimeDomainResourceAllocation)); + bwp_dl_timedomainresourceallocation->k0 = CALLOC(1,sizeof(long)); + *(bwp_dl_timedomainresourceallocation->k0) = configuration->PDSCH_TimeDomainResourceAllocation_k0[CC_id]; bwp_dl_timedomainresourceallocation->mappingType = configuration->PDSCH_TimeDomainResourceAllocation_mappingType[CC_id]; bwp_dl_timedomainresourceallocation->startSymbolAndLength.buf=MALLOC(1); bwp_dl_timedomainresourceallocation->startSymbolAndLength.size=1; bwp_dl_timedomainresourceallocation->startSymbolAndLength.bits_unused=1; bwp_dl_timedomainresourceallocation->startSymbolAndLength.buf[0]=0x7f; - ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdsch_ConfigCommon->pdsch_AllocationList->list,&bwp_dl_timedomainresourceallocation); + ASN_SEQUENCE_ADD(&(*bwp_downlinkcommon)->pdsch_ConfigCommon->choice.setup->pdsch_AllocationList->list,&bwp_dl_timedomainresourceallocation); //Fill UplinkConfigCommon // //Fill UplinkConfigCommon -> FrequencyInfoUL // - (*uplinkconfigcommon)->frequencyInfoUL = CALLOC(1,sizeof(struct FrequencyInfoUL)); - (*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList = CALLOC(1,sizeof(struct MultiFrequencyBandListNR)); + (*uplinkconfigcommon)->frequencyInfoUL = CALLOC(1,sizeof(struct NR_FrequencyInfoUL)); + (*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList = CALLOC(1,sizeof(struct NR_MultiFrequencyBandListNR)); - ul_frequencyBandList = CALLOC(1,sizeof(FreqBandIndicatorNR_t)); - memset(&ul_frequencyBandList,0,sizeof(FreqBandIndicatorNR_t)); - ul_frequencyBandList = configuration->UL_FreqBandIndicatorNR[CC_id]; + ul_frequencyBandList = CALLOC(1,sizeof(NR_FreqBandIndicatorNR_t)); + memset(&ul_frequencyBandList,0,sizeof(NR_FreqBandIndicatorNR_t)); + *(ul_frequencyBandList) = configuration->UL_FreqBandIndicatorNR[CC_id]; ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->frequencyBandList->list,&ul_frequencyBandList); - (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = CALLOC(1,sizeof(ARFCN_ValueNR_t)); - (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = configuration->UL_absoluteFrequencyPointA[CC_id]; + (*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA = CALLOC(1,sizeof(NR_ARFCN_ValueNR_t)); + *((*uplinkconfigcommon)->frequencyInfoUL->absoluteFrequencyPointA) = configuration->UL_absoluteFrequencyPointA[CC_id]; - ul_scs_SpecificCarrierList = CALLOC(1,sizeof(struct SCS_SpecificCarrier)); - memset(&dl_scs_SpecificCarrierList,0,sizeof(struct SCS_SpecificCarrier)); + ul_scs_SpecificCarrierList = CALLOC(1,sizeof(struct NR_SCS_SpecificCarrier)); + memset(&dl_scs_SpecificCarrierList,0,sizeof(struct NR_SCS_SpecificCarrier)); ul_scs_SpecificCarrierList->offsetToCarrier = configuration->UL_offsetToCarrier[CC_id]; ul_scs_SpecificCarrierList->subcarrierSpacing = configuration->UL_SCS_SubcarrierSpacing[CC_id]; ul_scs_SpecificCarrierList->k0 = configuration->UL_SCS_SpecificCarrier_k0[CC_id]; ul_scs_SpecificCarrierList->carrierBandwidth = configuration->UL_carrierBandwidth[CC_id]; - ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->scs_SpecificCarriers.list,&ul_scs_SpecificCarrierList); + ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->frequencyInfoUL->scs_SpecificCarriers.list,&ul_scs_SpecificCarrierList); - (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = CALLOC(1,sizeof(AdditionalSpectrumEmission_t)); - (*uplinkconfigcommon)->frequencyInfoUL->p_Max = CALLOC(1,sizeof(P_Max_t)); + (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = CALLOC(1,sizeof(NR_AdditionalSpectrumEmission_t)); + (*uplinkconfigcommon)->frequencyInfoUL->p_Max = CALLOC(1,sizeof(NR_P_Max_t)); (*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission = configuration->UL_additionalSpectrumEmission[CC_id]; - (*uplinkconfigcommon)->frequencyInfoUL->p_Max = configuration->UL_p_Max[CC_id]; - (*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz = configuration->UL_frequencyShift7p5khz[CC_id]; + *((*uplinkconfigcommon)->frequencyInfoUL->additionalSpectrumEmission) = configuration->UL_additionalSpectrumEmission[CC_id]; + *((*uplinkconfigcommon)->frequencyInfoUL->p_Max) = configuration->UL_p_Max[CC_id]; + *((*uplinkconfigcommon)->frequencyInfoUL->frequencyShift7p5khz) = configuration->UL_frequencyShift7p5khz[CC_id]; //Fill UplinkConfigCommon -> BWP-UplinkCommon // //Fill UplinkConfigCommon -> BWP-UplinkCommon -> genericParameters// @@ -871,141 +677,149 @@ void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, if(configuration->UL_BWP_prefix_type[CC_id]){ (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = BWP__cyclicPrefix_extended; + (*uplinkconfigcommon)->initialUplinkBWP->genericParameters.cyclicPrefix = NR_BWP__cyclicPrefix_extended; } //Fill UplinkConfigCommon -> BWP-UplinkCommon -> RACH_ConfigCommon// - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon = CALLOC(1,sizeof(RACH_ConfigCommon_t)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon = CALLOC(1,sizeof(NR_SetupRelease_RACH_ConfigCommon_t)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->present = NR_SetupRelease_RACH_ConfigCommon_PR_setup; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->totalNumberOfRA_Preambles = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->totalNumberOfRA_Preambles = configuration->rach_totalNumberOfRA_Preambles[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->totalNumberOfRA_Preambles = CALLOC(1,sizeof(long)); + *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->totalNumberOfRA_Preambles) = configuration->rach_totalNumberOfRA_Preambles[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB = CALLOC(1,sizeof(struct RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_choice[CC_id]; - if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[CC_id]; - }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[CC_id]; + if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneEighth){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneEighth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneEighth[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneFourth){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneFourth = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneFourth[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_oneHalf){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.oneHalf = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_oneHalf[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_one){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.one = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_one[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_two){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.two = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_two[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_four){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.four = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_four[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_eight){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.eight = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_eight[CC_id]; + }else if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->present == NR_RACH_ConfigCommon__ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR_sixteen){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ssb_perRACH_OccasionAndCB_PreamblesPerSSB->choice.sixteen = configuration->rach_ssb_perRACH_OccasionAndCB_PreamblesPerSSB_sixteen[CC_id]; } if(configuration->rach_groupBconfigured[CC_id]){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured = CALLOC(1,sizeof(struct RACH_ConfigCommon__groupBconfigured)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->ra_Msg3SizeGroupA = configuration->numberOfRA_PreamblesGroupA[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->messagePowerOffsetGroupB = configuration->rach_messagePowerOffsetGroupB[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->groupBconfigured->numberOfRA_PreamblesGroupA = configuration->rach_numberOfRA_PreamblesGroupA[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured = CALLOC(1,sizeof(struct NR_RACH_ConfigCommon__groupBconfigured)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->ra_Msg3SizeGroupA = configuration->rach_ra_Msg3SizeGroupA[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->messagePowerOffsetGroupB = configuration->rach_messagePowerOffsetGroupB[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->groupBconfigured->numberOfRA_PreamblesGroupA = configuration->rach_numberOfRA_PreamblesGroupA[CC_id]; } - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->ra_ContentionResolutionTimer = configuration->rach_ra_ContentionResolutionTimer[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->ra_ContentionResolutionTimer = configuration->rach_ra_ContentionResolutionTimer[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB = CALLOC(1,sizeof(RSRP_Range_t)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB_SUL = CALLOC(1,sizeof(RSRP_Range_t)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB = configuration->rsrp_ThresholdSSB[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rsrp_ThresholdSSB_SUL = configuration->rsrp_ThresholdSSB_SUL[CC_id]; - - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present = configuration->prach_RootSequenceIndex_choice[CC_id]; - if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present == RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.choice.l839 = configuration->prach_RootSequenceIndex_l839[CC_id]; - }else if ((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.present == RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->prach_RootSequenceIndex.choice.l139 = configuration->prach_RootSequenceIndex_l139[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB = CALLOC(1,sizeof(NR_RSRP_Range_t)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB_SUL = CALLOC(1,sizeof(NR_RSRP_Range_t)); + *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB) = configuration->rsrp_ThresholdSSB[CC_id]; + *((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rsrp_ThresholdSSB_SUL) = configuration->rsrp_ThresholdSSB_SUL[CC_id]; + + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present = configuration->prach_RootSequenceIndex_choice[CC_id]; + if((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present == NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l839){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.choice.l839 = configuration->prach_RootSequenceIndex_l839[CC_id]; + }else if ((*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.present == NR_RACH_ConfigCommon__prach_RootSequenceIndex_PR_l139){ + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->prach_RootSequenceIndex.choice.l139 = configuration->prach_RootSequenceIndex_l139[CC_id]; } - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg1_SubcarrierSpacing = configuration->prach_msg1_SubcarrierSpacing[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->restrictedSetConfig = configuration->restrictedSetConfig[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg1_SubcarrierSpacing = configuration->prach_msg1_SubcarrierSpacing[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->restrictedSetConfig = configuration->restrictedSetConfig[CC_id]; if(configuration->msg3_transformPrecoding[CC_id]){ - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg3_transformPrecoding = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->msg3_transformPrecoding = RACH_ConfigCommon__msg3_transformPrecoding_enabled; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoding = CALLOC(1,sizeof(long)); + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->msg3_transformPrecoding = NR_RACH_ConfigCommon__msg3_transformPrecoding_enabled; } //Fill UplinkConfigCommon -> BWP-UplinkCommon -> RACH_ConfigCommon -> RACH_ConfigGeneric_t// - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.prach_ConfigurationIndex = configuration->prach_ConfigurationIndex[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.msg1_FDM = configuration->prach_msg1_FDM[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.msg1_FrequencyStart = configuration->prach_msg1_FrequencyStart[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.zeroCorrelationZoneConfig = configuration->zeroCorrelationZoneConfig[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.preambleReceivedTargetPower = configuration->preambleReceivedTargetPower[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.preambleTransMax = configuration->preambleTransMax[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.powerRampingStep = configuration->powerRampingStep[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->rach_ConfigGeneric.ra_ResponseWindow = configuration->ra_ResponseWindow[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.prach_ConfigurationIndex = configuration->prach_ConfigurationIndex[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FDM = configuration->prach_msg1_FDM[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.msg1_FrequencyStart = configuration->prach_msg1_FrequencyStart[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.zeroCorrelationZoneConfig = configuration->zeroCorrelationZoneConfig[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleReceivedTargetPower = configuration->preambleReceivedTargetPower[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.preambleTransMax = configuration->preambleTransMax[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.powerRampingStep = configuration->powerRampingStep[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->rach_ConfigCommon->choice.setup->rach_ConfigGeneric.ra_ResponseWindow = configuration->ra_ResponseWindow[CC_id]; //Fill UplinkConfigCommon -> BWP-UplinkCommon -> PUSCH_ConfigCommon// - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon = CALLOC(1,sizeof(PUSCH_ConfigCommon_t)); + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon = CALLOC(1,sizeof(NR_SetupRelease_PUSCH_ConfigCommon_t)); + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->present = NR_SetupRelease_PUSCH_ConfigCommon_PR_setup; + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon)); + if(configuration->groupHoppingEnabledTransformPrecoding[CC_id]){ - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->groupHoppingEnabledTransformPrecoding = PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled; + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = CALLOC(1,sizeof(long)); + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->groupHoppingEnabledTransformPrecoding = NR_PUSCH_ConfigCommon__groupHoppingEnabledTransformPrecoding_enabled; } - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->pusch_AllocationList = CALLOC(1,sizeof(struct PUSCH_ConfigCommon__pusch_AllocationList)); - pusch_configcommontimedomainresourceallocation = CALLOC(1,sizeof(struct PUSCH_TimeDomainResourceAllocation)); - memset(&pusch_configcommontimedomainresourceallocation,0,sizeof(struct PUSCH_TimeDomainResourceAllocation)); + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_AllocationList = CALLOC(1,sizeof(struct NR_PUSCH_ConfigCommon__pusch_AllocationList)); + pusch_configcommontimedomainresourceallocation = CALLOC(1,sizeof(struct NR_PUSCH_TimeDomainResourceAllocation)); + memset(&pusch_configcommontimedomainresourceallocation,0,sizeof(struct NR_PUSCH_TimeDomainResourceAllocation)); pusch_configcommontimedomainresourceallocation->k2 = CALLOC(1,sizeof(long)); - pusch_configcommontimedomainresourceallocation->k2 = configuration->PUSCH_TimeDomainResourceAllocation_k2[CC_id]; + *(pusch_configcommontimedomainresourceallocation->k2) = configuration->PUSCH_TimeDomainResourceAllocation_k2[CC_id]; pusch_configcommontimedomainresourceallocation->mappingType = configuration->PUSCH_TimeDomainResourceAllocation_mappingType[CC_id]; pusch_configcommontimedomainresourceallocation->startSymbolAndLength.buf = MALLOC(1); pusch_configcommontimedomainresourceallocation->startSymbolAndLength.size = 1; pusch_configcommontimedomainresourceallocation->startSymbolAndLength.bits_unused = 1; pusch_configcommontimedomainresourceallocation->startSymbolAndLength.buf[0] = 0x7f; - ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->pusch_AllocationList->list,&pusch_configcommontimedomainresourceallocation); + ASN_SEQUENCE_ADD(&(*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->pusch_AllocationList->list,&pusch_configcommontimedomainresourceallocation); - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->msg3_DeltaPreamble = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->msg3_DeltaPreamble = configuration->msg3_DeltaPreamble[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->p0_NominalWithGrant = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->p0_NominalWithGrant = configuration->p0_NominalWithGrant[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble = CALLOC(1,sizeof(long)); + *((*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->msg3_DeltaPreamble) = configuration->msg3_DeltaPreamble[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->p0_NominalWithGrant = CALLOC(1,sizeof(long)); + *((*uplinkconfigcommon)->initialUplinkBWP->pusch_ConfigCommon->choice.setup->p0_NominalWithGrant) = configuration->p0_NominalWithGrant[CC_id]; //Fill UplinkConfigCommon -> BWP-UplinkCommon -> PUCCH_ConfigCommon// - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon = CALLOC(1,sizeof(PUCCH_ConfigCommon_t)); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon = CALLOC(1,sizeof(BIT_STRING_t)); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId = CALLOC(1,sizeof(BIT_STRING_t)); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->p0_nominal = CALLOC(1,sizeof(long)); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon = CALLOC(1,sizeof(struct NR_SetupRelease_PUCCH_ConfigCommon)); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->present = NR_SetupRelease_PUCCH_ConfigCommon_PR_setup; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup = CALLOC(1,sizeof(struct NR_PUCCH_ConfigCommon)); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_GroupHopping = configuration->pucch_GroupHopping[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->p0_nominal = configuration->p0_nominal[CC_id]; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon = CALLOC(1,sizeof(BIT_STRING_t)); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId = CALLOC(1,sizeof(BIT_STRING_t)); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal = CALLOC(1,sizeof(long)); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->buf = MALLOC(1); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->size = 1; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->bits_unused = 4; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->pucch_ResourceCommon->buf[0] = 0x0f; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_GroupHopping = configuration->pucch_GroupHopping[CC_id]; + *((*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->p0_nominal) = configuration->p0_nominal[CC_id]; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf = MALLOC(2); - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->size = 2 - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->bits_unused = 6; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf[0] = 0x03; - (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->hoppingId->buf[1] = 0xff; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->buf = MALLOC(1); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->size = 1; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->bits_unused = 4; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->pucch_ResourceCommon->buf[0] = 0x0f; + + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf = MALLOC(2); + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->size = 2; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->bits_unused = 6; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf[0] = 0x03; + (*uplinkconfigcommon)->initialUplinkBWP->pucch_ConfigCommon->choice.setup->hoppingId->buf[1] = 0xff; //Fill supplementaryUplinkConfig // - memcpy(&(*uplinkconfigcommon), &(*supplementaryuplinkconfig), sizeof(UplinkConfigCommon_t));//The Same structre + memcpy(&(*uplinkconfigcommon), &(*supplementaryuplinkconfig), sizeof(NR_UplinkConfigCommon_t));//The Same structre //Fill TDD_UL_DL_ConfigCommon // - (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing = CALLOC(1,sizeof(SubcarrierSpacing_t)); + (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing = CALLOC(1,sizeof(NR_SubcarrierSpacing_t)); (*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity = CALLOC(1,sizeof(long)); (*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots = CALLOC(1,sizeof(long)); (*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols = CALLOC(1,sizeof(long)); (*tdd_ul_dl_configurationcommon)->nrofUplinkSlots = CALLOC(1,sizeof(long)); (*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols = CALLOC(1,sizeof(long)); - (*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing = configuration->referenceSubcarrierSpacing[CC_id]; - (*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity = configuration->dl_UL_TransmissionPeriodicity[CC_id]; - (*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots = configuration->nrofDownlinkSlots[CC_id]; - (*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols = configuration->nrofDownlinkSymbols[CC_id]; - (*tdd_ul_dl_configurationcommon)->nrofUplinkSlots = configuration->nrofUplinkSlots[CC_id]; - (*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols = configuration->nrofUplinkSymbols[CC_id]; + *((*tdd_ul_dl_configurationcommon)->referenceSubcarrierSpacing) = configuration->referenceSubcarrierSpacing[CC_id]; + *((*tdd_ul_dl_configurationcommon)->dl_UL_TransmissionPeriodicity) = configuration->dl_UL_TransmissionPeriodicity[CC_id]; + *((*tdd_ul_dl_configurationcommon)->nrofDownlinkSlots) = configuration->nrofDownlinkSlots[CC_id]; + *((*tdd_ul_dl_configurationcommon)->nrofDownlinkSymbols) = configuration->nrofDownlinkSymbols[CC_id]; + *((*tdd_ul_dl_configurationcommon)->nrofUplinkSlots) = configuration->nrofUplinkSlots[CC_id]; + *((*tdd_ul_dl_configurationcommon)->nrofUplinkSymbols) = configuration->nrofUplinkSymbols[CC_id]; - memcpy(&(*tdd_ul_dl_configurationcommon), &(*tdd_ul_dl_configurationcommon2), sizeof(struct TDD_UL_DL_ConfigCommon));//The Same structre + memcpy(&(*tdd_ul_dl_configurationcommon), &(*tdd_ul_dl_configurationcommon2), sizeof(struct NR_TDD_UL_DL_ConfigCommon));//The Same structre } @@ -3223,7 +3037,7 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) UECapability.sdu_size, enc_rval.encoded + 7); { char *sdu; - //sdu = malloc (3 * UECapability.sdu_size + 1 ); ///* For '\0' + //sdu = malloc (3 * UECapability.sdu_size + 1 ); /// For '\0' for (i = 0; i < UECapability.sdu_size; i++) { sprintf (&sdu[3 * i], "%02x.", UECapability.sdu[i]); @@ -3235,4 +3049,4 @@ OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer_fname) return(&UECapability); } - +*/ diff --git a/openair2/RRC/NR/MESSAGES/asn1_msg.h b/openair2/RRC/NR/MESSAGES/asn1_msg.h index 640c86dade..67cb7e5887 100644 --- a/openair2/RRC/NR/MESSAGES/asn1_msg.h +++ b/openair2/RRC/NR/MESSAGES/asn1_msg.h @@ -28,7 +28,6 @@ * \email: raymond.knopp@eurecom.fr and navid.nikaein@eurecom.fr */ -#ifdef USER_MODE #include <stdio.h> #include <sys/types.h> #include <stdlib.h> /* for atoi(3) */ @@ -36,14 +35,11 @@ #include <string.h> /* for strerror(3) */ #include <sysexits.h> /* for EX_* exit codes */ #include <errno.h> /* for errno */ -#else -#include <linux/module.h> /* Needed by all modules */ -#endif #include <asn_application.h> #include <asn_internal.h> /* for _ASN_DEFAULT_STACK_MAX */ -#include "RRC/NR/defs_NR.h" +#include "RRC/NR/nr_rrc_defs.h" /* * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) @@ -81,194 +77,18 @@ uint8_t do_MIB_NR(rrc_gNB_carrier_data_t *carrier, @param configuration Pointer Configuration Request structure @return size of encoded bit stream in bytes*/ -uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration - ); +uint8_t do_SIB1_NR(rrc_gNB_carrier_data_t *carrier,int Mod_id,int CC_id, gNB_RrcConfigurationReq *configuration); -/** -\brief Generate a default configuration for SIB2/SIB3 in one System Information PDU (eNB). -@param Mod_id Index of eNB (used to derive some parameters) -@param buffer Pointer to PER-encoded ASN.1 description of SI PDU -@param systemInformation Pointer to asn1c C representation of SI PDU -@param sib2 Pointer (returned) to sib2 component withing SI PDU -@param sib3 Pointer (returned) to sib3 component withing SI PDU -@param sib13 Pointer (returned) to sib13 component withing SI PDU -@param MBMS_flag Indicates presence of MBMS system information (when 1) -@return size of encoded bit stream in bytes*/ - -/*uint8_t do_SIB23(uint8_t Mod_id, - int CC_id -#if defined(ENABLE_ITTI) - , RrcConfigurationReq *configuration -#endif - ); - -/** -\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This -routine only generates an mo-data establishment cause. -@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU -@param rv 5 byte random string or S-TMSI -@returns Size of encoded bit stream in bytes*/ - -/*uint8_t do_RRCConnectionRequest(uint8_t Mod_id, uint8_t *buffer,uint8_t *rv); - -/** \brief Generate an RRCConnectionSetupComplete UL-DCCH-Message (UE) -@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU -@returns Size of encoded bit stream in bytes*/ - -/*uint8_t do_RRCConnectionSetupComplete(uint8_t Mod_id, uint8_t* buffer, const uint8_t Transaction_id, const int dedicatedInfoNASLength, - const char* dedicatedInfoNAS); - -/** \brief Generate an RRCConnectionReconfigurationComplete UL-DCCH-Message (UE) -@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU -@returns Size of encoded bit stream in bytes*/ - -/*uint8_t -do_RRCConnectionReconfigurationComplete( - const protocol_ctxt_t* const ctxt_pP, - uint8_t* buffer, - const uint8_t Transaction_id -); - -/** -\brief Generate an RRCConnectionSetup DL-CCCH-Message (eNB). This routine configures SRB_ToAddMod (SRB1/SRB2) and -PhysicalConfigDedicated IEs. The latter does not enable periodic CQI reporting (PUCCH format 2/2a/2b) or SRS. -@param ctxt_pP Running context -@param ue_context_pP UE context -@param CC_id Component Carrier ID -@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU -@param transmission_mode Transmission mode for UE (1-9) -@param UE_id UE index for this message -@param Transaction_id Transaction_ID for this message -@param SRB_configList Pointer (returned) to SRB1_config/SRB2_config(later) IEs for this UE -@param physicalConfigDedicated Pointer (returned) to PhysicalConfigDedicated IE for this UE -@returns Size of encoded bit stream in bytes*/ -/*uint8_t -do_RRCConnectionSetup( - const protocol_ctxt_t* const ctxt_pP, - rrc_eNB_ue_context_t* const ue_context_pP, - int CC_id, - uint8_t* const buffer, - const uint8_t transmission_mode, - const uint8_t Transaction_id, - SRB_ToAddModList_t** SRB_configList, - struct PhysicalConfigDedicated** physicalConfigDedicated -); +void do_SERVINGCELLCONFIGCOMMON(uint8_t Mod_id, + int CC_id + #if defined(ENABLE_ITTI) + ,gNB_RrcConfigurationReq *configuration + #endif + ); -/** -\brief Generate an RRCConnectionReconfiguration DL-DCCH-Message (eNB). This routine configures SRBToAddMod (SRB2) and one DRBToAddMod -(DRB3). PhysicalConfigDedicated is not updated. -@param ctxt_pP Running context -@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU -@param Transaction_id Transaction_ID for this message -@param SRB_list Pointer to SRB List to be added/modified (NULL if no additions/modifications) -@param DRB_list Pointer to DRB List to be added/modified (NULL if no additions/modifications) -@param DRB_list2 Pointer to DRB List to be released (NULL if none to be released) -@param sps_Config Pointer to sps_Config to be modified (NULL if no modifications, or default if initial configuration) -@param physicalConfigDedicated Pointer to PhysicalConfigDedicated to be modified (NULL if no modifications) -@param MeasObj_list Pointer to MeasObj List to be added/modified (NULL if no additions/modifications) -@param ReportConfig_list Pointer to ReportConfig List (NULL if no additions/modifications) -@param QuantityConfig Pointer to QuantityConfig to be modified (NULL if no modifications) -@param MeasId_list Pointer to MeasID List (NULL if no additions/modifications) -@param mobilityInfo mobility control information for handover -@param speedStatePars speed state parameteres for handover -@param mac_MainConfig Pointer to Mac_MainConfig(NULL if no modifications) -@param measGapConfig Pointer to MeasGapConfig (NULL if no modifications) -@param cba_rnti RNTI for the cba transmission -@returns Size of encoded bit stream in bytes*/ - -/*uint16_t -do_RRCConnectionReconfiguration( - const protocol_ctxt_t* const ctxt_pP, - uint8_t *buffer, - uint8_t Transaction_id, - SRB_ToAddModList_t *SRB_list, - DRB_ToAddModList_t *DRB_list, - DRB_ToReleaseList_t *DRB_list2, - struct SPS_Config *sps_Config, - struct PhysicalConfigDedicated *physicalConfigDedicated, - MeasObjectToAddModList_t *MeasObj_list, - ReportConfigToAddModList_t *ReportConfig_list, - QuantityConfig_t *quantityConfig, - MeasIdToAddModList_t *MeasId_list, - MAC_MainConfig_t *mac_MainConfig, - MeasGapConfig_t *measGapConfig, - MobilityControlInfo_t *mobilityInfo, - struct MeasConfig__speedStatePars *speedStatePars, - RSRP_Range_t *rsrp, - C_RNTI_t *cba_rnti, - struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList* dedicatedInfoNASList -#if defined(Rel10) || defined(Rel14) - , SCellToAddMod_r10_t *SCell_config -#endif - ); - -/** -\brief Generate an RRCConnectionReestablishmentReject DL-CCCH-Message (eNB). -@param Mod_id Module ID of eNB -@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU -@returns Size of encoded bit stream in bytes*/ -/*uint8_t -do_RRCConnectionReestablishmentReject( - uint8_t Mod_id, - uint8_t* const buffer); - -/** -\brief Generate an RRCConnectionReject DL-CCCH-Message (eNB). -@param Mod_id Module ID of eNB -@param buffer Pointer to PER-encoded ASN.1 description of DL-CCCH-Message PDU -@returns Size of encoded bit stream in bytes*/ -/*uint8_t -do_RRCConnectionReject( - uint8_t Mod_id, - uint8_t* const buffer); - -/** -\brief Generate an RRCConnectionRequest UL-CCCH-Message (UE) based on random string or S-TMSI. This -routine only generates an mo-data establishment cause. -@param Mod_id Module ID of eNB -@param buffer Pointer to PER-encoded ASN.1 description of UL-DCCH-Message PDU -@param transaction_id Transaction index -@returns Size of encoded bit stream in bytes*/ - -/*uint8_t do_RRCConnectionRelease(uint8_t Mod_id, uint8_t *buffer,int Transaction_id); - -/*** - * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data) - * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU - * @returns Size of encoded bit stream in bytes -*/ -/*uint8_t do_MCCHMessage(uint8_t *buffer); -#if defined(Rel10) || defined(Rel14) -/*** - * \brief Generate an MCCH-Message (eNB). This routine configures MBSFNAreaConfiguration (PMCH-InfoList and Subframe Allocation for MBMS data) - * @param buffer Pointer to PER-encoded ASN.1 description of MCCH-Message PDU - * @returns Size of encoded bit stream in bytes -*/ -/*uint8_t do_MBSFNAreaConfig(uint8_t Mod_id, - uint8_t sync_area, - uint8_t *buffer, - MCCH_Message_t *mcch_message, - MBSFNAreaConfiguration_r9_t **mbsfnAreaConfiguration); -#endif -uint8_t do_MeasurementReport(uint8_t Mod_id, uint8_t *buffer,int measid,int phy_id,long rsrp_s,long rsrq_s,long rsrp_t,long rsrq_t); -uint8_t do_DLInformationTransfer(uint8_t Mod_id, uint8_t **buffer, uint8_t transaction_id, uint32_t pdu_length, uint8_t *pdu_buffer); -uint8_t do_ULInformationTransfer(uint8_t **buffer, uint32_t pdu_length, uint8_t *pdu_buffer); -OAI_UECapability_t *fill_ue_capability(char *UE_EUTRA_Capability_xer); -uint8_t -do_UECapabilityEnquiry( - const protocol_ctxt_t* const ctxt_pP, - uint8_t* const buffer, - const uint8_t Transaction_id -); -uint8_t do_SecurityModeCommand( - const protocol_ctxt_t* const ctxt_pP, - uint8_t* const buffer, - const uint8_t Transaction_id, - const uint8_t cipheringAlgorithm, - const uint8_t integrityProtAlgorithm); diff --git a/openair2/RRC/NR/L2_interface_NR.c b/openair2/RRC/NR/NR_L2_interface.c similarity index 100% rename from openair2/RRC/NR/L2_interface_NR.c rename to openair2/RRC/NR/NR_L2_interface.c diff --git a/openair2/RRC/NR/defs_NR.h b/openair2/RRC/NR/defs_NR.h deleted file mode 100644 index b1a37590be..0000000000 --- a/openair2/RRC/NR/defs_NR.h +++ /dev/null @@ -1,573 +0,0 @@ -/* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ - -/*! \file RRC/LITE/defs_NR.h -* \brief NR RRC struct definitions and function prototypes -* \author Navid Nikaein, Raymond Knopp -* \date 2010 - 2014, 2018 -* \version 1.0 -* \company Eurecom -* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr -*/ - -#ifndef __OPENAIR_RRC_DEFS_NR_H__ -#define __OPENAIR_RRC_DEFS_NR_H__ - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "collection/tree.h" -#include "rrc_types_NR.h" -#include "COMMON/platform_constants.h" -#include "COMMON/platform_types.h" - -//#include "COMMON/mac_rrc_primitives.h" -#if defined(NR_Rel15) -#include "NR_SIB1.h" -//#include "SystemInformation.h" -//#include "RRCConnectionReconfiguration.h" -#include "NR_RRCReconfigurationComplete.h" -#include "NR_RRCReconfiguration.h" -//#include "RRCConnectionReconfigurationComplete.h" -//#include "RRCConnectionSetup.h" -//#include "RRCConnectionSetupComplete.h" -//#include "RRCConnectionRequest.h" -//#include "RRCConnectionReestablishmentRequest.h" -//#include "BCCH-DL-SCH-Message.h" -#include "NR_BCCH-BCH-Message.h" -//#include "MCCH-Message.h" -//#include "MBSFNAreaConfiguration-r9.h" -//#include "SCellToAddMod-r10.h" -//#include "AS-Config.h" -//#include "AS-Context.h" -#include "NR_UE-NR-Capability.h" -#include "NR_MeasResults.h" -#include "NR_ServingCellConfigCommon.h" -#endif -//------------------- - -#if defined(ENABLE_ITTI) -# include "intertask_interface.h" -#endif - -/* TODO: be sure this include is correct. - * It solves a problem of compilation of the RRH GW, - * issue #186. - */ -#if !defined(ENABLE_ITTI) -# include "as_message.h" -#endif - -#if defined(ENABLE_USE_MME) -# include "commonDef.h" -#endif - -#if ENABLE_RAL -# include "collection/hashtable/obj_hashtable.h" -#endif - - - -/*I will change the name of the structure for compile purposes--> hope not to undo this process*/ - -typedef unsigned int uid_NR_t; -#define UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR (((NUMBER_OF_NR_UE_MAX/8)/sizeof(unsigned int)) + 1) - -typedef struct uid_linear_allocator_NR_s { - unsigned int bitmap[UID_LINEAR_ALLOCATOR_BITMAP_SIZE_NR]; -} uid_allocator_NR_t; - - -#define PROTOCOL_NRRRC_CTXT_UE_FMT PROTOCOL_CTXT_FMT -#define PROTOCOL_NRRRC_CTXT_UE_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) - -#define PROTOCOL_NRRRC_CTXT_FMT PROTOCOL_CTXT_FMT -#define PROTOCOL_NRRRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) - - -#define UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! -#define UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1 - -typedef enum { - NR_RRC_OK=0, - NR_RRC_ConnSetup_failed, - NR_RRC_PHY_RESYNCH, - NR_RRC_Handover_failed, - NR_RRC_HO_STARTED -} NR_RRC_status_t; - -typedef enum UE_STATE_NR_e { - NR_RRC_INACTIVE=0, - NR_RRC_IDLE, - NR_RRC_SI_RECEIVED, - NR_RRC_CONNECTED, - NR_RRC_RECONFIGURED, - NR_RRC_HO_EXECUTION -} NR_UE_STATE_t; - -typedef enum HO_STATE_NR_e { - NR_HO_IDLE=0, - NR_HO_MEASURMENT, - NR_HO_PREPARE, - NR_HO_CMD, // initiated by the src eNB - NR_HO_COMPLETE // initiated by the target eNB -} NR_HO_STATE_t; - -//#define NUMBER_OF_UE_MAX MAX_MOBILES_PER_RG -#define RRM_FREE(p) if ( (p) != NULL) { free(p) ; p=NULL ; } -#define RRM_MALLOC(t,n) (t *) malloc16( sizeof(t) * n ) -#define RRM_CALLOC(t,n) (t *) malloc16( sizeof(t) * n) -#define RRM_CALLOC2(t,s) (t *) malloc16( s ) - -#define MAX_MEAS_OBJ 6 -#define MAX_MEAS_CONFIG 6 -#define MAX_MEAS_ID 6 - -#define PAYLOAD_SIZE_MAX 1024 -#define RRC_BUF_SIZE 255 -#define UNDEF_SECURITY_MODE 0xff -#define NO_SECURITY_MODE 0x20 - -/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */ -#define RRC_TRANSACTION_IDENTIFIER_NUMBER 3 - -typedef struct { - unsigned short transport_block_size; /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */ - unsigned short max_transport_blocks; /*!< \brief Maximum PDU size in bytes provided by RLC to MAC layer interface */ - unsigned long Guaranteed_bit_rate; /*!< \brief Guaranteed Bit Rate (average) to be offered by MAC layer scheduling*/ - unsigned long Max_bit_rate; /*!< \brief Maximum Bit Rate that can be offered by MAC layer scheduling*/ - uint8_t Delay_class; /*!< \brief Delay class offered by MAC layer scheduling*/ - uint8_t Target_bler; /*!< \brief Target Average Transport Block Error rate*/ - uint8_t Lchan_t; /*!< \brief Logical Channel Type (BCCH,CCCH,DCCH,DTCH_B,DTCH,MRBCH)*/ -} __attribute__ ((__packed__)) LCHAN_DESC_NR; - -typedef struct UE_RRC_INFO_NR_s { - NR_UE_STATE_t State; - uint8_t SIB1systemInfoValueTag; - uint32_t SIStatus; - uint32_t SIcnt; -#if defined(Rel10) || defined(Rel14) - uint8_t MCCHStatus[8]; // MAX_MBSFN_AREA -#endif - uint8_t SIwindowsize; //!< Corresponds to the SIB1 si-WindowLength parameter. The unit is ms. Possible values are (final): 1,2,5,10,15,20,40 - uint8_t handoverTarget; - //HO_STATE_t ho_state; - uint16_t SIperiod; //!< Corresponds to the SIB1 si-Periodicity parameter (multiplied by 10). Possible values are (final): 80,160,320,640,1280,2560,5120 - unsigned short UE_index; - uint32_t T300_active; - uint32_t T300_cnt; - uint32_t T304_active; - uint32_t T304_cnt; - uint32_t T310_active; - uint32_t T310_cnt; - uint32_t N310_cnt; - uint32_t N311_cnt; - rnti_t rnti; -} __attribute__ ((__packed__)) UE_RRC_INFO_NR; - -typedef struct UE_S_TMSI_NR_s { - boolean_t presence; - mme_code_t mme_code; - m_tmsi_t m_tmsi; -} __attribute__ ((__packed__)) UE_S_TMSI_NR; - - -typedef enum e_rab_satus_NR_e { - E_RAB_STATUS_NEW_NR, - E_RAB_STATUS_DONE_NR, // from the eNB perspective - E_RAB_STATUS_ESTABLISHED_NR, // get the reconfigurationcomplete form UE - E_RAB_STATUS_FAILED_NR, -} e_rab_status_NR_t; - -typedef struct e_rab_param_NR_s { - e_rab_t param; - uint8_t status; - uint8_t xid; // transaction_id -} __attribute__ ((__packed__)) e_rab_param_NR_t; - - -typedef struct HANDOVER_INFO_NR_s { - uint8_t ho_prepare; - uint8_t ho_complete; - uint8_t modid_s; //module_idP of serving cell - uint8_t modid_t; //module_idP of target cell - uint8_t ueid_s; //UE index in serving cell - uint8_t ueid_t; //UE index in target cell - - // NR not define at this moment - //AS_Config_t as_config; /* these two parameters are taken from 36.331 section 10.2.2: HandoverPreparationInformation-r8-IEs */ - //AS_Context_t as_context; /* They are mandatory for HO */ - - uint8_t buf[RRC_BUF_SIZE]; /* ASN.1 encoded handoverCommandMessage */ - int size; /* size of above message in bytes */ -} HANDOVER_INFO_NR; - - -#define RRC_HEADER_SIZE_MAX 64 -#define RRC_BUFFER_SIZE_MAX 1024 - -typedef struct { - char Payload[RRC_BUFFER_SIZE_MAX]; - char Header[RRC_HEADER_SIZE_MAX]; - char payload_size; -} RRC_BUFFER_NR; - -#define RRC_BUFFER_SIZE_NR sizeof(RRC_BUFFER_NR) - - -typedef struct RB_INFO_NR_s { - uint16_t Rb_id; //=Lchan_id - LCHAN_DESC Lchan_desc[2]; - //MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT -} RB_INFO_NR; - -typedef struct SRB_INFO_NR_s { - uint16_t Srb_id; //=Lchan_id - RRC_BUFFER Rx_buffer; - RRC_BUFFER Tx_buffer; - LCHAN_DESC Lchan_desc[2]; - unsigned int Trans_id; - uint8_t Active; -} SRB_INFO_NR; - - -typedef struct RB_INFO_TABLE_ENTRY_NR_s { - RB_INFO_NR Rb_info; - uint8_t Active; - uint32_t Next_check_frame; - uint8_t Status; -} RB_INFO_TABLE_ENTRY_NR; - -typedef struct SRB_INFO_TABLE_ENTRY_NR_s { - SRB_INFO_NR Srb_info; - uint8_t Active; - uint8_t Status; - uint32_t Next_check_frame; -} SRB_INFO_TABLE_ENTRY_NR; - -typedef struct MEAS_REPORT_LIST_NR_s { - MeasId_t measId; - //CellsTriggeredList cellsTriggeredList;//OPTIONAL - uint32_t numberOfReportsSent; -} MEAS_REPORT_LIST_NR; - -typedef struct HANDOVER_INFO_UE_NR_s { - PhysCellId_t targetCellId; - uint8_t measFlag; -} HANDOVER_INFO_UE_NR; - -//NB-IoT eNB_RRC_UE_NB_IoT_s--(used as a context in eNB --> ue_context in rrc_eNB_ue_context)------ -typedef struct gNB_RRC_UE_s { - - uint8_t primaryCC_id; - - //SCellToAddMod_t sCell_config[2]; - - SRB_ToAddModList_t* SRB_configList;//for SRB1 and SRB1bis - SRB_ToAddModList_t* SRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER]; - DRB_ToAddModList_t* DRB_configList; //for all the DRBs - DRB_ToAddModList_t* DRB_configList2[RRC_TRANSACTION_IDENTIFIER_NUMBER]; //for the configured DRBs of a xid - uint8_t DRB_active[8];//in LTE was 8 - - // NR not define at this moment - //struct PhysicalConfigDedicated* physicalConfigDedicated_NR; - - struct SPS_Config* sps_Config; - MeasObjectToAddMod_t* MeasObj[MAX_MEAS_OBJ]; - struct ReportConfigToAddMod* ReportConfig[MAX_MEAS_CONFIG]; - struct QuantityConfig* QuantityConfig; - struct MeasIdToAddMod* MeasId[MAX_MEAS_ID]; - - // NR not define at this moment - //MAC_MainConfig_t* mac_MainConfig_NR; - - MeasGapConfig_t* measGapConfig; - - SRB_INFO_NR SI; - SRB_INFO_NR Srb0; - SRB_INFO_TABLE_ENTRY_NR Srb1; - SRB_INFO_TABLE_ENTRY_NR Srb2; - - MeasConfig_t* measConfig; - HANDOVER_INFO_NR* handover_info; - - -#if defined(ENABLE_SECURITY) - /* KeNB as derived from KASME received from EPC */ - uint8_t kenb[32]; -#endif - - /* Used integrity/ciphering algorithms */ - //Specs. TS 38.331 V15.1.0 pag 432 Change position of chipering enumerative w.r.t previous version - e_NR_CipheringAlgorithm ciphering_algorithm; - e_NR_IntegrityProtAlgorithm integrity_algorithm; - - uint8_t Status; - rnti_t rnti; - uint64_t random_ue_identity; - - - - /* Information from UE RRC ConnectionRequest */ - UE_S_TMSI_NR Initialue_identity_s_TMSI; - - /* NR not define at this moment - EstablishmentCause_t establishment_cause_NR; //different set for NB-IoT - */ - /* NR not define at this moment*/ - /* Information from UE RRC ConnectionReestablishmentRequest */ - //ReestablishmentCause_t reestablishment_cause_NR; //different set for NB_IoT - - /* UE id for initial connection to S1AP */ - uint16_t ue_initial_id; - - /* Information from S1AP initial_context_setup_req */ - uint32_t eNB_ue_s1ap_id :24; - - security_capabilities_t security_capabilities; - - /* Total number of e_rab already setup in the list */ //NAS list? - uint8_t setup_e_rabs; - /* Number of e_rab to be setup in the list */ //NAS list? - uint8_t nb_of_e_rabs; - /* list of e_rab to be setup by RRC layers */ - e_rab_param_NR_t e_rab[NB_RB_MAX_NB_IOT];//[S1AP_MAX_E_RAB]; - - // LG: For GTPV1 TUNNELS - uint32_t enb_gtp_teid[S1AP_MAX_E_RAB]; - transport_layer_addr_t enb_gtp_addrs[S1AP_MAX_E_RAB]; - rb_id_t enb_gtp_ebi[S1AP_MAX_E_RAB]; - - //Which timers are referring to? - uint32_t ul_failure_timer; - uint32_t ue_release_timer; - //threshold of the release timer--> set in RRCConnectionRelease - uint32_t ue_release_timer_thres; -} gNB_RRC_UE_t; -//-------------------------------------------------------------------------------- - -typedef uid_NR_t ue_uid_t; - - -//generally variable called: ue_context_pP -typedef struct rrc_gNB_ue_context_s { - - /* Tree related data */ - RB_ENTRY(rrc_gNB_ue_context_s) entries; - - /* Uniquely identifies the UE between MME and eNB within the eNB. - * This id is encoded on 24bits. - */ - rnti_t ue_id_rnti; - - // another key for protocol layers but should not be used as a key for RB tree - ue_uid_t local_uid; - - /* UE id for initial connection to S1AP */ - struct gNB_RRC_UE_s ue_context; //context of ue in the e-nB - -} rrc_gNB_ue_context_t; - - -//called "carrier"--> data from PHY layer -typedef struct { - - // buffer that contains the encoded messages - uint8_t *MIB; - uint8_t sizeof_MIB; - - uint8_t *SIB1; - uint8_t sizeof_SIB1; - - //implicit parameters needed - int Ncp; //cyclic prefix for DL - int Ncp_UL; //cyclic prefix for UL - int p_gNB; //number of tx antenna port - int p_rx_gNB; //number of receiving antenna ports - uint32_t dl_CarrierFreq; //detected by the UE - uint32_t ul_CarrierFreq; //detected by the UE - uint16_t physCellId; - - //are the only static one (memory has been already allocated) - BCCH_BCH_Message_t mib; - - NR_SIB1_t *sib1; - NR_ServingCellConfigCommon_t *servingcellconfigcommon; - - - SRB_INFO_NR SI; - SRB_INFO_NR Srb0; - -} rrc_gNB_carrier_data_t; -//--------------------------------------------------- - - - -//---NR---(completely change)--------------------- -typedef struct gNB_RRC_INST_s { - - eth_params_t eth_params_s; - rrc_gNB_carrier_data_t carrier[MAX_NUM_CCs]; - uid_allocator_NR_t uid_allocator; // for rrc_ue_head - RB_HEAD(rrc_ue_tree_NR_s, rrc_gNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti - - uint8_t HO_flag; - uint8_t Nb_ue; - - hash_table_t *initial_id2_s1ap_ids; // key is content is rrc_ue_s1ap_ids_t - hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t - - //RRC configuration -#if defined(ENABLE_ITTI) - gNB_RrcConfigurationReq configuration;//rrc_messages_types.h -#endif - - // other PLMN parameters - /// Mobile country code - int mcc; - /// Mobile network code - int mnc; - /// number of mnc digits - int mnc_digit_length; - - // other RAN parameters - int srb1_timer_poll_retransmit; - int srb1_poll_pdu; - int srb1_poll_byte; - int srb1_max_retx_threshold; - int srb1_timer_reordering; - int srb1_timer_status_prohibit; - int srs_enable[MAX_NUM_CCs]; - -} gNB_RRC_INST; - -//#define RRC_HEADER_SIZE_MAX_NR 64 -#define MAX_UE_CAPABILITY_SIZE_NR 255 - -//not needed for the moment -typedef struct OAI_UECapability_NR_s { - uint8_t sdu[MAX_UE_CAPABILITY_SIZE_NR]; - uint8_t sdu_size; -////NR------ - NR_UE_NR_Capability_t UE_Capability_NR; //replace the UE_EUTRA_Capability of LTE -} OAI_UECapability_NR_t; - - -typedef struct UE_RRC_INST_NR_s { - Rrc_State_NR_t RrcState; - Rrc_Sub_State_NR_t RrcSubState; -# if defined(ENABLE_USE_MME) - plmn_t plmnID; - Byte_t rat; - as_nas_info_t initialNasMsg; -# endif - OAI_UECapability_NR_t *UECap; - uint8_t *UECapability; - uint8_t UECapability_size; - - UE_RRC_INFO_NR Info[NB_SIG_CNX_UE]; - - SRB_INFO_NR Srb0[NB_SIG_CNX_UE]; - SRB_INFO_TABLE_ENTRY_NR Srb1[NB_CNX_UE]; - SRB_INFO_TABLE_ENTRY_NR Srb2[NB_CNX_UE]; - HANDOVER_INFO_UE_NR HandoverInfoUe; - /* - uint8_t *SIB1[NB_CNX_UE]; - uint8_t sizeof_SIB1[NB_CNX_UE]; - uint8_t *SI[NB_CNX_UE]; - uint8_t sizeof_SI[NB_CNX_UE]; - uint8_t SIB1Status[NB_CNX_UE]; - uint8_t SIStatus[NB_CNX_UE]; - SIB1_t *sib1[NB_CNX_UE]; - SystemInformation_t *si[NB_CNX_UE]; //!< Temporary storage for an SI message. Decoding happens in decode_SI(). - - SystemInformationBlockType2_t *sib2[NB_CNX_UE]; - SystemInformationBlockType3_t *sib3[NB_CNX_UE]; - SystemInformationBlockType4_t *sib4[NB_CNX_UE]; - SystemInformationBlockType5_t *sib5[NB_CNX_UE]; - SystemInformationBlockType6_t *sib6[NB_CNX_UE]; - SystemInformationBlockType7_t *sib7[NB_CNX_UE]; - SystemInformationBlockType8_t *sib8[NB_CNX_UE]; - SystemInformationBlockType9_t *sib9[NB_CNX_UE]; - SystemInformationBlockType10_t *sib10[NB_CNX_UE]; - SystemInformationBlockType11_t *sib11[NB_CNX_UE]; - -#if defined(Rel10) || defined(Rel14) - uint8_t MBMS_flag; - uint8_t *MCCH_MESSAGE[NB_CNX_UE]; - uint8_t sizeof_MCCH_MESSAGE[NB_CNX_UE]; - uint8_t MCCH_MESSAGEStatus[NB_CNX_UE]; - MBSFNAreaConfiguration_r9_t *mcch_message[NB_CNX_UE]; - SystemInformationBlockType12_r9_t *sib12[NB_CNX_UE]; - SystemInformationBlockType13_r9_t *sib13[NB_CNX_UE]; -#endif -#ifdef CBA - uint8_t num_active_cba_groups; - uint16_t cba_rnti[NUM_MAX_CBA_GROUP]; -#endif - uint8_t num_srb; - struct SRB_ToAddMod *SRB1_config[NB_CNX_UE]; - struct SRB_ToAddMod *SRB2_config[NB_CNX_UE]; - struct DRB_ToAddMod *DRB_config[NB_CNX_UE][8]; - rb_id_t *defaultDRB; // remember the ID of the default DRB - MeasObjectToAddMod_t *MeasObj[NB_CNX_UE][MAX_MEAS_OBJ]; - struct ReportConfigToAddMod *ReportConfig[NB_CNX_UE][MAX_MEAS_CONFIG]; - */ - struct QuantityConfig *QuantityConfig[NB_CNX_UE]; - /* - struct MeasIdToAddMod *MeasId[NB_CNX_UE][MAX_MEAS_ID]; - MEAS_REPORT_LIST *measReportList[NB_CNX_UE][MAX_MEAS_ID]; - uint32_t measTimer[NB_CNX_UE][MAX_MEAS_ID][6]; // 6 neighboring cells - RSRP_Range_t s_measure; - struct MeasConfig__speedStatePars *speedStatePars; - struct PhysicalConfigDedicated *physicalConfigDedicated[NB_CNX_UE]; - struct SPS_Config *sps_Config[NB_CNX_UE]; - MAC_MainConfig_t *mac_MainConfig[NB_CNX_UE]; - MeasGapConfig_t *measGapConfig[NB_CNX_UE]; - double filter_coeff_rsrp; // [7] ??? - double filter_coeff_rsrq; // [7] ??? - float rsrp_db[7]; - float rsrq_db[7]; - float rsrp_db_filtered[7]; - float rsrq_db_filtered[7]; -#if ENABLE_RAL - obj_hash_table_t *ral_meas_thresholds; - ral_transaction_id_t scan_transaction_id; -#endif -#if defined(ENABLE_SECURITY) - // KeNB as computed from parameters within USIM card // - uint8_t kenb[32]; -#endif - - // Used integrity/ciphering algorithms // - CipheringAlgorithm_r12_t ciphering_algorithm; - e_SecurityAlgorithmConfig__integrityProtAlgorithm integrity_algorithm; - */ -}UE_RRC_INST_NR; - - - - -#include "proto_NR.h" //should be put here otherwise compilation error - -#endif -/** @} */ diff --git a/openair2/RRC/NR/nr_rrc_common.c b/openair2/RRC/NR/nr_rrc_common.c new file mode 100644 index 0000000000..6902d753b3 --- /dev/null +++ b/openair2/RRC/NR/nr_rrc_common.c @@ -0,0 +1,87 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file rrc_common.c + * \brief rrc common procedures for eNB and UE + * \author Navid Nikaein and Raymond Knopp + * \date 2011 - 2014 + * \version 1.0 + * \company Eurecom + * \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr + */ + +#include "nr_rrc_defs.h" +#include "nr_rrc_extern.h" +#include "LAYER2/MAC/mac_extern.h" +#include "COMMON/openair_defs.h" +#include "COMMON/platform_types.h" +#include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" +#include "LAYER2/RLC/rlc.h" +#include "COMMON/mac_rrc_primitives.h" +#include "UTIL/LOG/log.h" +#include "asn1_msg.h" +#include "pdcp.h" +#include "UTIL/LOG/vcd_signal_dumper.h" +#include "rrc_eNB_UE_context.h" +#include "common/ran_context.h" + +#define DEBUG_NR_RRC 1 + +extern RAN_CONTEXT_t RC; +extern UE_MAC_INST *UE_mac_inst; +extern mui_t rrc_gNB_mui; + +//----------------------------------------------------------------------------- +int +nr_rrc_init_global_param( + void +) +//----------------------------------------------------------------------------- +{ + + rrc_rlc_register_rrc (rrc_data_ind, NULL); //register with rlc + + DCCH_LCHAN_DESC.transport_block_size = 4; + DCCH_LCHAN_DESC.max_transport_blocks = 16; + DCCH_LCHAN_DESC.Delay_class = 1; + DTCH_DL_LCHAN_DESC.transport_block_size = 52; + DTCH_DL_LCHAN_DESC.max_transport_blocks = 20; + DTCH_DL_LCHAN_DESC.Delay_class = 1; + DTCH_UL_LCHAN_DESC.transport_block_size = 52; + DTCH_UL_LCHAN_DESC.max_transport_blocks = 20; + DTCH_UL_LCHAN_DESC.Delay_class = 1; + + Rlc_info_um.rlc_mode = RLC_MODE_UM; + Rlc_info_um.rlc.rlc_um_info.timer_reordering = 5; + Rlc_info_um.rlc.rlc_um_info.sn_field_length = 10; + Rlc_info_um.rlc.rlc_um_info.is_mXch = 0; + //Rlc_info_um.rlc.rlc_um_info.sdu_discard_mode=16; + + Rlc_info_am_config.rlc_mode = RLC_MODE_AM; + Rlc_info_am_config.rlc.rlc_am_info.max_retx_threshold = 50; + Rlc_info_am_config.rlc.rlc_am_info.poll_pdu = 8; + Rlc_info_am_config.rlc.rlc_am_info.poll_byte = 1000; + Rlc_info_am_config.rlc.rlc_am_info.t_poll_retransmit = 15; + Rlc_info_am_config.rlc.rlc_am_info.t_reordering = 50; + Rlc_info_am_config.rlc.rlc_am_info.t_status_prohibit = 10; + + return 0; +} \ No newline at end of file diff --git a/openair2/RRC/NR/nr_rrc_defs.h b/openair2/RRC/NR/nr_rrc_defs.h new file mode 100644 index 0000000000..8675224d1d --- /dev/null +++ b/openair2/RRC/NR/nr_rrc_defs.h @@ -0,0 +1,333 @@ +/* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file RRC/LITE/defs_NR.h +* \brief NR RRC struct definitions and function prototypes +* \author Navid Nikaein, Raymond Knopp +* \date 2010 - 2014, 2018 +* \version 1.0 +* \company Eurecom +* \email: navid.nikaein@eurecom.fr, raymond.knopp@eurecom.fr +*/ + +#ifndef __OPENAIR_RRC_DEFS_NR_H__ +#define __OPENAIR_RRC_DEFS_NR_H__ + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "collection/tree.h" +#include "nr_rrc_types.h" + +#include "COMMON/platform_constants.h" +#include "COMMON/platform_types.h" +#include "RRC/LTE/rrc_defs.h" +//#include "LAYER2/RLC/rlc.h" + +//#include "COMMON/mac_rrc_primitives.h" +#if defined(NR_Rel15) +#include "NR_SIB1.h" +//#include "SystemInformation.h" +//#include "RRCConnectionReconfiguration.h" +#include "NR_RRCReconfigurationComplete.h" +#include "NR_RRCReconfiguration.h" +//#include "RRCConnectionReconfigurationComplete.h" +//#include "RRCConnectionSetup.h" +//#include "RRCConnectionSetupComplete.h" +//#include "RRCConnectionRequest.h" +//#include "RRCConnectionReestablishmentRequest.h" +//#include "BCCH-DL-SCH-Message.h" +#include "NR_BCCH-BCH-Message.h" +//#include "MCCH-Message.h" +//#include "MBSFNAreaConfiguration-r9.h" +//#include "SCellToAddMod-r10.h" +//#include "AS-Config.h" +//#include "AS-Context.h" +#include "NR_UE-NR-Capability.h" +#include "NR_MeasResults.h" +#include "NR_ServingCellConfigCommon.h" +#endif +//------------------- + +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +#endif + +/* TODO: be sure this include is correct. + * It solves a problem of compilation of the RRH GW, + * issue #186. + */ +#if !defined(ENABLE_ITTI) +# include "as_message.h" +#endif + +#if defined(ENABLE_USE_MME) +# include "commonDef.h" +#endif + + +/*I will change the name of the structure for compile purposes--> hope not to undo this process*/ + +typedef unsigned int uid_nr_t; +#define NR_UID_LINEAR_ALLOCATOR_BITMAP_SIZE (((NUMBER_OF_NR_UE_MAX/8)/sizeof(unsigned int)) + 1) + +typedef struct nr_uid_linear_allocator_s { + unsigned int bitmap[NR_UID_LINEAR_ALLOCATOR_BITMAP_SIZE]; +} nr_uid_allocator_t; + + +#define PROTOCOL_NR_RRC_CTXT_UE_FMT PROTOCOL_CTXT_FMT +#define PROTOCOL_NR_RRC_CTXT_UE_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) + +#define PROTOCOL_NR_RRC_CTXT_FMT PROTOCOL_CTXT_FMT +#define PROTOCOL_NR_RRC_CTXT_ARGS(CTXT_Pp) PROTOCOL_CTXT_ARGS(CTXT_Pp) + + +#define NR_UE_MODULE_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! +#define NR_UE_INDEX_INVALID ((module_id_t) ~0) // FIXME attention! depends on type uint8_t!!! used to be -1 + +typedef enum { + NR_RRC_OK=0, + NR_RRC_ConnSetup_failed, + NR_RRC_PHY_RESYNCH, + NR_RRC_Handover_failed, + NR_RRC_HO_STARTED +} NR_RRC_status_t; + +typedef enum UE_STATE_NR_e { + NR_RRC_INACTIVE=0, + NR_RRC_IDLE, + NR_RRC_SI_RECEIVED, + NR_RRC_CONNECTED, + NR_RRC_RECONFIGURED, + NR_RRC_HO_EXECUTION +} NR_UE_STATE_t; + + +//#define NUMBER_OF_NR_UE_MAX MAX_MOBILES_PER_RG +#define RRM_FREE(p) if ( (p) != NULL) { free(p) ; p=NULL ; } +#define RRM_MALLOC(t,n) (t *) malloc16( sizeof(t) * n ) +#define RRM_CALLOC(t,n) (t *) malloc16( sizeof(t) * n) +#define RRM_CALLOC2(t,s) (t *) malloc16( s ) + +#define MAX_MEAS_OBJ 6 +#define MAX_MEAS_CONFIG 6 +#define MAX_MEAS_ID 6 + +#define PAYLOAD_SIZE_MAX 1024 +#define RRC_BUF_SIZE 255 +#define UNDEF_SECURITY_MODE 0xff +#define NO_SECURITY_MODE 0x20 + +/* TS 36.331: RRC-TransactionIdentifier ::= INTEGER (0..3) */ +#define NR_RRC_TRANSACTION_IDENTIFIER_NUMBER 3 + +typedef struct { + unsigned short transport_block_size; /*!< \brief Minimum PDU size in bytes provided by RLC to MAC layer interface */ + unsigned short max_transport_blocks; /*!< \brief Maximum PDU size in bytes provided by RLC to MAC layer interface */ + unsigned long Guaranteed_bit_rate; /*!< \brief Guaranteed Bit Rate (average) to be offered by MAC layer scheduling*/ + unsigned long Max_bit_rate; /*!< \brief Maximum Bit Rate that can be offered by MAC layer scheduling*/ + uint8_t Delay_class; /*!< \brief Delay class offered by MAC layer scheduling*/ + uint8_t Target_bler; /*!< \brief Target Average Transport Block Error rate*/ + uint8_t Lchan_t; /*!< \brief Logical Channel Type (BCCH,CCCH,DCCH,DTCH_B,DTCH,MRBCH)*/ +} __attribute__ ((__packed__)) NR_LCHAN_DESC; + +typedef struct UE_RRC_INFO_NR_s { + NR_UE_STATE_t State; + uint8_t SIB1systemInfoValueTag; + uint32_t SIStatus; + uint32_t SIcnt; +#if defined(Rel10) || defined(Rel14) + uint8_t MCCHStatus[8]; // MAX_MBSFN_AREA +#endif + uint8_t SIwindowsize; //!< Corresponds to the SIB1 si-WindowLength parameter. The unit is ms. Possible values are (final): 1,2,5,10,15,20,40 + uint8_t handoverTarget; + //HO_STATE_t ho_state; + uint16_t SIperiod; //!< Corresponds to the SIB1 si-Periodicity parameter (multiplied by 10). Possible values are (final): 80,160,320,640,1280,2560,5120 + unsigned short UE_index; + uint32_t T300_active; + uint32_t T300_cnt; + uint32_t T304_active; + uint32_t T304_cnt; + uint32_t T310_active; + uint32_t T310_cnt; + uint32_t N310_cnt; + uint32_t N311_cnt; + rnti_t rnti; +} __attribute__ ((__packed__)) NR_UE_RRC_INFO; + +typedef struct UE_S_TMSI_NR_s { + boolean_t presence; + mme_code_t mme_code; + m_tmsi_t m_tmsi; +} __attribute__ ((__packed__)) NR_UE_S_TMSI; + + +typedef enum nr_e_rab_satus_e { + NR_E_RAB_STATUS_NEW, + NR_E_RAB_STATUS_DONE, // from the gNB perspective + NR_E_RAB_STATUS_ESTABLISHED, // get the reconfigurationcomplete form UE + NR_E_RAB_STATUS_FAILED, +} nr_e_rab_status_t; + +typedef struct nr_e_rab_param_s { + e_rab_t param; + uint8_t status; + uint8_t xid; // transaction_id +} __attribute__ ((__packed__)) nr_e_rab_param_t; + + +typedef struct HANDOVER_INFO_NR_s { + uint8_t ho_prepare; + uint8_t ho_complete; + uint8_t modid_s; //module_idP of serving cell + uint8_t modid_t; //module_idP of target cell + uint8_t ueid_s; //UE index in serving cell + uint8_t ueid_t; //UE index in target cell + + // NR not define at this moment + //AS_Config_t as_config; /* these two parameters are taken from 36.331 section 10.2.2: HandoverPreparationInformation-r8-IEs */ + //AS_Context_t as_context; /* They are mandatory for HO */ + + uint8_t buf[RRC_BUF_SIZE]; /* ASN.1 encoded handoverCommandMessage */ + int size; /* size of above message in bytes */ +} NR_HANDOVER_INFO; + + +#define NR_RRC_HEADER_SIZE_MAX 64 +#define NR_RRC_BUFFER_SIZE_MAX 1024 + +typedef struct { + char Payload[NR_RRC_BUFFER_SIZE_MAX]; + char Header[NR_RRC_HEADER_SIZE_MAX]; + char payload_size; +} NR_RRC_BUFFER; + +#define NR_RRC_BUFFER_SIZE sizeof(RRC_BUFFER_NR) + + +typedef struct RB_INFO_NR_s { + uint16_t Rb_id; //=Lchan_id + NR_LCHAN_DESC Lchan_desc[2]; + //MAC_MEAS_REQ_ENTRY *Meas_entry; //may not needed for NB-IoT +} NR_RB_INFO; + +typedef struct NR_SRB_INFO_s { + uint16_t Srb_id; //=Lchan_id + NR_RRC_BUFFER Rx_buffer; + NR_RRC_BUFFER Tx_buffer; + NR_LCHAN_DESC Lchan_desc[2]; + unsigned int Trans_id; + uint8_t Active; +} NR_SRB_INFO; + + +typedef struct RB_INFO_TABLE_ENTRY_NR_s { + NR_RB_INFO Rb_info; + uint8_t Active; + uint32_t Next_check_frame; + uint8_t Status; +} NR_RB_INFO_TABLE_ENTRY; + +typedef struct SRB_INFO_TABLE_ENTRY_NR_s { + NR_SRB_INFO Srb_info; + uint8_t Active; + uint8_t Status; + uint32_t Next_check_frame; +} NR_SRB_INFO_TABLE_ENTRY; + +//called "carrier"--> data from PHY layer +typedef struct { + + // buffer that contains the encoded messages + uint8_t *MIB; + uint8_t sizeof_MIB; + + uint8_t *SIB1; + uint8_t sizeof_SIB1; + + //implicit parameters needed + int physCellId; + int Ncp; //cyclic prefix for DL + int Ncp_UL; //cyclic prefix for UL + int p_gNB; //number of tx antenna port + int p_rx_gNB; //number of receiving antenna ports + uint32_t dl_CarrierFreq; //detected by the UE + uint32_t ul_CarrierFreq; //detected by the UE + + //are the only static one (memory has been already allocated) + NR_BCCH_BCH_Message_t mib; + + NR_SIB1_t *sib1; + NR_ServingCellConfigCommon_t *servingcellconfigcommon; + + + NR_SRB_INFO SI; + NR_SRB_INFO Srb0; + +} rrc_gNB_carrier_data_t; +//--------------------------------------------------- + + + +//---NR---(completely change)--------------------- +typedef struct gNB_RRC_INST_s { + + eth_params_t eth_params_s; + rrc_gNB_carrier_data_t carrier[MAX_NUM_CCs]; + nr_uid_allocator_t uid_allocator; // for rrc_ue_head + RB_HEAD(rrc_nr_ue_tree_s, rrc_gNB_ue_context_s) rrc_ue_head; // ue_context tree key search by rnti + + uint8_t Nb_ue; + + hash_table_t *initial_id2_s1ap_ids; // key is content is rrc_ue_s1ap_ids_t + hash_table_t *s1ap_id2_s1ap_ids ; // key is content is rrc_ue_s1ap_ids_t + + //RRC configuration +#if defined(ENABLE_ITTI) + gNB_RrcConfigurationReq configuration;//rrc_messages_types.h +#endif + + // other PLMN parameters + /// Mobile country code + int mcc; + /// Mobile network code + int mnc; + /// number of mnc digits + int mnc_digit_length; + + // other RAN parameters + int srb1_timer_poll_retransmit; + int srb1_poll_pdu; + int srb1_poll_byte; + int srb1_max_retx_threshold; + int srb1_timer_reordering; + int srb1_timer_status_prohibit; + int srs_enable[MAX_NUM_CCs]; + +} gNB_RRC_INST; + + +#include "nr_rrc_proto.h" //should be put here otherwise compilation error + +#endif +/** @} */ diff --git a/openair2/RRC/NR/extern_NR.h b/openair2/RRC/NR/nr_rrc_extern.h similarity index 95% rename from openair2/RRC/NR/extern_NR.h rename to openair2/RRC/NR/nr_rrc_extern.h index b45dbd11e9..b631e13025 100644 --- a/openair2/RRC/NR/extern_NR.h +++ b/openair2/RRC/NR/nr_rrc_extern.h @@ -30,16 +30,13 @@ #ifndef __OPENAIR_RRC_EXTERN_H__ #define __OPENAIR_RRC_EXTERN_H__ -#include "defs.h" +#include "nr_rrc_defs.h" #include "COMMON/mac_rrc_primitives.h" -#include "LAYER2/MAC/defs.h" -#include "LAYER2/MAC/extern.h" +#include "LAYER2/MAC/mac.h" #include "LAYER2/RLC/rlc.h" extern UE_RRC_INST *UE_rrc_inst; -#include "LAYER2/MAC/extern.h" - extern uint8_t DRB2LCHAN[8]; extern LogicalChannelConfig_t SRB1_logicalChannelConfig_defaultValue; diff --git a/openair2/RRC/NR/nr_rrc_proto.h b/openair2/RRC/NR/nr_rrc_proto.h new file mode 100644 index 0000000000..d381c7c5aa --- /dev/null +++ b/openair2/RRC/NR/nr_rrc_proto.h @@ -0,0 +1,45 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +/*! \file proto.h + * \brief RRC functions prototypes for eNB and UE + * \author Navid Nikaein and Raymond Knopp + * \date 2010 - 2014 + * \email navid.nikaein@eurecom.fr + * \version 1.0 + + */ +/** \addtogroup _rrc + * @{ + */ + +#include "RRC/NR/nr_rrc_defs.h" + +#include "flexran_agent_extern.h" + +int nr_rrc_init_global_param(void); + +#if defined(ENABLE_ITTI) +/**\brief RRC eNB task. + \param void *args_p Pointer on arguments to start the task. */ +void *rrc_gnb_task(void *args_p); + +#endif \ No newline at end of file diff --git a/openair2/RRC/NR/rrc_types_NR.h b/openair2/RRC/NR/nr_rrc_types.h similarity index 100% rename from openair2/RRC/NR/rrc_types_NR.h rename to openair2/RRC/NR/nr_rrc_types.h diff --git a/openair2/RRC/NR/proto_NR.h b/openair2/RRC/NR/proto_NR.h deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/openair2/RRC/NR/rrc_gNB.c b/openair2/RRC/NR/rrc_gNB.c index 4bc43a7d10..8c3f23754b 100644 --- a/openair2/RRC/NR/rrc_gNB.c +++ b/openair2/RRC/NR/rrc_gNB.c @@ -27,44 +27,40 @@ * \company Eurecom * \email: navid.nikaein@eurecom.fr and raymond.knopp@eurecom.fr */ -#define RRC_GNB +#define RRC_GNB_C #define RRC_GNB_C -#include "defs_NR.h" -#include "extern.h" +#include "nr_rrc_defs.h" +#include "nr_rrc_extern.h" #include "assertions.h" #include "common/ran_context.h" #include "asn1_conversions.h" #include "RRC/L2_INTERFACE/openair_rrc_L2_interface.h" #include "LAYER2/RLC/rlc.h" -#include "LAYER2/MAC/proto.h" +#include "LAYER2/MAC/mac_proto.h" #include "UTIL/LOG/log.h" #include "COMMON/mac_rrc_primitives.h" -#include "RRC/NR/asn1_msg.h" - -///ASN.1 header files -//#include "RRCConnectionRequest.h" -//#include "RRCConnectionReestablishmentRequest.h" -//#include "ReestablishmentCause.h" -#include "BCCH-BCH-Message.h" -//#include "UL-CCCH-Message.h" -//#include "DL-CCCH-Message.h" -#include "UL-DCCH-Message.h" -#include "DL-DCCH-Message.h" -//#include "TDD-Config.h" -//#include "HandoverCommand.h" -#include "MeasResults.h" +#include "RRC/NR/MESSAGES/asn1_msg.h" + + +#include "NR_BCCH-BCH-Message.h" +#include "NR_UL-DCCH-Message.h" +#include "NR_DL-DCCH-Message.h" + +#include "NR_MeasResults.h" -#include "pdcp.h" #include "rlc.h" -#include "SIMULATION/ETH_TRANSPORT/extern.h" #include "rrc_eNB_UE_context.h" #include "platform_types.h" #include "msc.h" #include "UTIL/LOG/vcd_signal_dumper.h" + #include "T.h" +//#if defined(Rel10) || defined(Rel14) +#include "MeasResults.h" +//#endif #include "RRC/NAS/nas_config.h" #include "RRC/NAS/rb_config.h" @@ -84,20 +80,22 @@ # endif #endif +#include "pdcp.h" #include "gtpv1u_eNB_task.h" #if defined(ENABLE_ITTI) # include "intertask_interface.h" #endif - + #if ENABLE_RAL # include "rrc_eNB_ral.h" #endif -#include "SIMULATION/TOOLS/defs.h" // for taus +#include "SIMULATION/TOOLS/sim.h" // for taus //#define XER_PRINT + extern RAN_CONTEXT_t RC; #ifdef PHY_EMUL @@ -124,7 +122,7 @@ openair_nrrrc_on( { int CC_id; - LOG_I(NR_RRC, PROTOCOL_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n", + LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_FMT" gNB:OPENAIR NR RRC IN....\n", PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { rrc_config_buffer (&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SI, BCCH, 1); @@ -154,8 +152,9 @@ init_NR_SI( // copy basic parameters RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].physCellId = configuration->Nid_cell[CC_id]; - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_eNB = configuration->nb_antenna_ports[CC_id]; - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->prefix_type[CC_id]; + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB = configuration->nb_antenna_ports[CC_id]; + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp = configuration->DL_prefix_type[CC_id]; + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp_UL = configuration->UL_prefix_type[CC_id]; RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq = configuration->downlink_frequency[CC_id]; RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].ul_CarrierFreq = configuration->downlink_frequency[CC_id]+ configuration->uplink_frequency_offset[CC_id]; @@ -174,18 +173,17 @@ init_NR_SI( ); ///SIB1 - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = 0; - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 = (uint8_t*) malloc16(32); - AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1! - = NULL,PROTOCOL_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = 0; + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 = (uint8_t*) malloc16(32); + AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].SIB1 != NULL,PROTOCOL_NR_RRC_CTXT_FMT" init_SI: FATAL, no memory for NR SIB1 allocated\n",PROTOCOL_RRC_CTXT_ARGS(ctxt_pP)); - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = do_SIB1_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id], +/* RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 = do_SIB1_NR(&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id], ctxt_pP->module_id, CC_id #if defined(ENABLE_ITTI) ,configuration #endif - ); + );*/ AssertFatal(RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sizeof_SIB1 != 255,"FATAL, RC.nrrrc[enb_mod_idP].carrier[CC_id].sizeof_SIB1 == 255"); @@ -198,16 +196,15 @@ init_NR_SI( - rrc_mac_config_req_gNB(ctxt_pP->module_id, CC_id, - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].physCellId, - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB, - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].Ncp, - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].sib1->freqBandIndicator, - RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, - 0, // rnti - (BCCH_BCH_Message_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].mib, - (ServingCellConfigCommon_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id]servingcellconfigcommon - ); + rrc_mac_config_req_gNB(ctxt_pP->module_id, + CC_id, + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].p_gNB, + configuration->eutra_band[CC_id], + RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].dl_CarrierFreq, + configuration->N_RB_DL[CC_id], + (NR_BCCH_BCH_Message_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].mib, + (NR_ServingCellConfigCommon_t *)&RC.nrrrc[ctxt_pP->module_id]->carrier[CC_id].servingcellconfigcommon + ); } @@ -216,7 +213,9 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu int CC_id; PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, gnb_mod_idP, GNB_FLAG_YES, NOT_A_RNTI, 0, 0,gnb_mod_idP); - LOG_I(NR_RRC,PROTOCOL_NRRRC_CTXT_FMT" Init...\n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt)); + LOG_I(NR_RRC, + PROTOCOL_NR_RRC_CTXT_FMT" Init...\n", + PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt)); #if OCP_FRAMEWORK while ( RC.nrrrc[gnb_mod_idP] == NULL ) { @@ -236,7 +235,7 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu RC.nrrrc[ctxt.module_id]->carrier[CC_id].Srb0.Active = 0; } - uid_linear_allocator_init(&nrrrc.nrrrc[ctxt.module_id]->uid_allocator); + uid_linear_allocator_init(&RC.nrrrc[ctxt.module_id]->uid_allocator); RB_INIT(&RC.nrrrc[ctxt.module_id]->rrc_ue_head); RC.nrrrc[ctxt.module_id]->initial_id2_s1ap_ids = hashtable_create (NUMBER_OF_UE_MAX * 2, NULL, NULL); @@ -246,7 +245,7 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu /// System Information INIT - LOG_I(NR_RRC, PROTOCOL_NRRRC_CTXT_FMT" Checking release \n",PROTOCOL_NRRRC_CTXT_ARGS(&ctxt)); + LOG_I(NR_RRC, PROTOCOL_NR_RRC_CTXT_FMT" Checking release \n",PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt)); #ifdef CBA @@ -260,8 +259,8 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu } LOG_D(NR_RRC, - PROTOCOL_NRRRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", - PROTOCOL_NRRRC_CTXT_ARGS(&ctxt), + PROTOCOL_NR_RRC_CTXT_FMT" Initialization of 4 cba_RNTI values (%x %x %x %x) num active groups %d\n", + PROTOCOL_NR_RRC_CTXT_ARGS(&ctxt), gnb_mod_idP, RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[0], RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[1], RC.nrrrc[ctxt.module_id]->carrier[CC_id].cba_rnti[2], @@ -278,18 +277,10 @@ char openair_rrc_gNB_configuration(const module_id_t gnb_mod_idP, gNB_RrcConfigu ,configuration #endif ); - for (int ue_id = 0; ue_id < NUMBER_OF_UE_MAX; ue_id++){ - RC.nrrrc[ctxt.module_id]->carrier[CC_id].sizeof_paging[ue_id] = 0; - RC.nrrrc[ctxt.module_id]->carrier[CC_id].paging[ue_id] = (uint8_t*) malloc16(256); - } - }//END for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) - //rrc_init_NR_global_param(); + nr_rrc_init_global_param(); - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - openair_rrc_top_init_gNB(RC.nrrrc[ctxt.module_id]->carrier[CC_id].MBMS_flag,0); - } openair_nrrrc_on(&ctxt); @@ -342,7 +333,7 @@ void* rrc_gnb_task(void* args_p){ /* Messages from S1AP */ case S1AP_DOWNLINK_NAS: - rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_eNB_mui); + rrc_eNB_process_S1AP_DOWNLINK_NAS(msg_p, msg_name_p, instance, &rrc_gNB_mui); break; case S1AP_INITIAL_CONTEXT_SETUP_REQ: @@ -410,48 +401,3 @@ void* rrc_gnb_task(void* args_p){ } #endif //END #if defined(ENABLE_ITTI) - -/*------------------------------------------------------------------------------*/ -void -openair_rrc_top_init_gNB(int eMBMS_active,uint8_t HO_active) -//----------------------------------------------------------------------------- -{ - - module_id_t module_id; - int CC_id; - - /* for no gcc warnings */ - (void)CC_id; - - LOG_D(RRC, "[OPENAIR][INIT] Init function start: NB_gNB_INST=%d\n", RC.nb_nr_inst); - - if (RC.nb_nr_inst > 0) { - LOG_I(RRC,"[gNB] handover active state is %d \n", HO_active); - - for (module_id=0; module_id<NB_gNB_INST; module_id++) { - RC.nrrrc[module_id]->HO_flag = (uint8_t)HO_active; - } - - #if defined(Rel10) || defined(Rel14) - LOG_I(RRC,"[gNB] eMBMS active state is %d \n", eMBMS_active); - - for (module_id=0; module_id<NB_gNB_INST; module_id++) { - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.nrrrc[module_id]->carrier[CC_id].MBMS_flag = (uint8_t)eMBMS_active; - } - } - - #endif - #ifdef CBA - - for (module_id=0; module_id<RC.nb_nr_inst; module_id++) { - for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) { - RC.nrrrc[module_id]->carrier[CC_id].num_active_cba_groups = cba_group_active; - } - } - - #endif - - }//END if (RC.nb_nr_inst > 0) - -} \ No newline at end of file diff --git a/openair2/UTIL/LOG/log.h b/openair2/UTIL/LOG/log.h index 00bc334de5..78fe0ee954 100644 --- a/openair2/UTIL/LOG/log.h +++ b/openair2/UTIL/LOG/log.h @@ -186,6 +186,10 @@ typedef enum { RRH, X2AP, MAX_LOG_COMPONENTS, + GNB_APP, + NR_RRC, + NR_MAC, + NR_PHY, } comp_name_t; diff --git a/targets/COMMON/create_nr_tasks.c b/targets/COMMON/create_nr_tasks.c new file mode 100644 index 0000000000..af047dd049 --- /dev/null +++ b/targets/COMMON/create_nr_tasks.c @@ -0,0 +1,103 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#if defined(ENABLE_ITTI) +# include "intertask_interface.h" +# include "create_nr_tasks.h" +# include "log.h" + +# ifdef OPENAIR2 +# if defined(ENABLE_USE_MME) +# include "sctp_eNB_task.h" +# include "s1ap_eNB.h" +# include "nas_ue_task.h" +# include "udp_eNB_task.h" +# include "gtpv1u_eNB_task.h" +# endif +# if ENABLE_RAL +# include "lteRALue.h" +# include "lteRALenb.h" +# endif +# include "RRC/NR/nr_rrc_defs.h" +# endif +# include "gnb_app.h" + +extern int emulate_rf; + +int create_gNB_tasks(uint32_t gnb_nb) +{ + LOG_D(GNB_APP, "%s(gnb_nb:%d\n", __FUNCTION__, gnb_nb); + + itti_wait_ready(1); + if (itti_create_task (TASK_L2L1, l2l1_task, NULL) < 0) { + LOG_E(PDCP, "Create task for L2L1 failed\n"); + return -1; + } + + if (gnb_nb > 0) { + /* Last task to create, others task must be ready before its start */ + if (itti_create_task (TASK_GNB_APP, gNB_app_task, NULL) < 0) { + LOG_E(GNB_APP, "Create task for gNB APP failed\n"); + return -1; + } + } + +# if defined(ENABLE_USE_MME) + if (gnb_nb > 0) { + if (itti_create_task (TASK_SCTP, sctp_eNB_task, NULL) < 0) { + LOG_E(SCTP, "Create task for SCTP failed\n"); + return -1; + } + + if (itti_create_task (TASK_S1AP, s1ap_eNB_task, NULL) < 0) { + LOG_E(S1AP, "Create task for S1AP failed\n"); + return -1; + } + if(!emulate_rf){ + if (itti_create_task (TASK_UDP, udp_eNB_task, NULL) < 0) { + LOG_E(UDP_, "Create task for UDP failed\n"); + return -1; + } + } + + if (itti_create_task (TASK_GTPV1_U, >pv1u_eNB_task, NULL) < 0) { + LOG_E(GTPU, "Create task for GTPV1U failed\n"); + return -1; + } + } + +# endif + + if (gnb_nb > 0) { + LOG_I(NR_RRC,"Creating NR RRC gNB Task\n"); + + if (itti_create_task (TASK_RRC_GNB, rrc_gnb_task, NULL) < 0) { + LOG_E(NR_RRC, "Create task for NR RRC gNB failed\n"); + return -1; + } + } + + + itti_wait_ready(0); + + return 0; +} +#endif diff --git a/targets/COMMON/create_nr_tasks.h b/targets/COMMON/create_nr_tasks.h new file mode 100644 index 0000000000..7f5961f5ae --- /dev/null +++ b/targets/COMMON/create_nr_tasks.h @@ -0,0 +1,33 @@ +/* + * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The OpenAirInterface Software Alliance licenses this file to You under + * the OAI Public License, Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.openairinterface.org/?page_id=698 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------------------- + * For more information about the OpenAirInterface (OAI) Software Alliance: + * contact@openairinterface.org + */ + +#ifndef CREATE_NR_TASKS_H_ +#define CREATE_NR_TASKS_H_ + +#if defined(ENABLE_ITTI) +/* External declaration of L2L1 task that depend on the target */ +extern void *l2l1_task(void *arg); + +int create_gNB_tasks(uint32_t gnb_nb); + +#endif + +#endif /* CREATE_TASKS_H_ */ diff --git a/targets/RT/USER/nr-softmodem.c b/targets/RT/USER/nr-softmodem.c index 506a34d81a..fc5790fe4e 100644 --- a/targets/RT/USER/nr-softmodem.c +++ b/targets/RT/USER/nr-softmodem.c @@ -76,7 +76,7 @@ unsigned short config_frames[4] = {2,9,11,13}; #if defined(ENABLE_ITTI) #include "intertask_interface_init.h" -#include "create_tasks.h" +#include "create_nr_tasks.h" #endif #include "PHY/INIT/phy_init.h" @@ -1048,7 +1048,7 @@ int main( int argc, char **argv ) if (RC.nb_inst > 0) { // don't create if node doesn't connect to RRC/S1/GTP - if (create_tasks(1) < 0) { + if (create_gNB_tasks(1) < 0) { printf("cannot create ITTI tasks\n"); exit(-1); // need a softer mode } -- GitLab