2025-10-10 16:07:00 +08:00

1219 lines
31 KiB
C

/**
****************************************************************************************
*
* @file rwnx_config.h
*
* @brief Inclusion of appropriate config files.
*
* This file should be included each time an NX_xxx definition is needed.
* CFG_xxx macros must no be used in the code, only NX_xxx, defined in
* the included config files.
*
* Copyright (C) RivieraWaves 2011-2020
*
****************************************************************************************
*/
#ifndef _RWNX_CONFIG_H_
#define _RWNX_CONFIG_H_
/**
****************************************************************************************
* @addtogroup MACSW
* @{
* The CFG_xxx macros should be added on the compilation command line
* by the SCons scripts. Because it has been not implemented yet, any
* undefined option fall back on the default behavior.
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "sdkconfig.h"
#include "fhost_mac.h"
/*
****************************************************************************************
* starts of rwnx config *
****************************************************************************************
*/
#define CFG_VERIFICATION
#define CFG_EMB
#define CFG_SPLIT
#define CFG_UMAC
#define CFG_DBG CONFIG_WIFI6_IP_DEBUG
#define CFG_BCN
//#if CONFIG_CACHE_ENABLE
#undef __SHAREDRAM
//#define __SHAREDRAM __attribute__((section(".sram_nocache")))
//#else
#define __SHAREDRAM
//#endif
#if CONFIG_SOC_BK7256XX
/////bk7256 32K ITCM,important and normal function can pick to ITCM
#define __ITCM __attribute__((section(".itcm_sec_code ")))
#define __ITCM_N __attribute__((section(".itcm_sec_code ")))
#else
////other only 16K ITCM,pick the important one to ITCM
#define __ITCM __attribute__((section(".itcm_sec_code ")))
#define __ITCM_N
#endif
#if CONFIG_SOC_BK7256XX && !CONFIG_RWNX_NO_USE_DTCM
#define __DTCM __attribute__((section(".dtcm_sec_data ")))
#define __DTCM_BSS __attribute__((section(".dtcm_sec_bss ")))
#else
#define __DTCM
#define __DTCM_BSS
#endif
#if CONFIG_WIFI6
#define CFG_MAC_VER_V21
#if (CONFIG_SOC_BK7256XX)
#define CFG_MDM_VER_V31
#elif CONFIG_SOC_BK7236XX || CONFIG_SOC_BK7239XX || CONFIG_SOC_BK7286XX
#define CFG_MDM_VER_V32
#else
#define CFG_MDM_VER_V30
#endif
//#define CFG_IPC_VER_V11
#define CFG_PLF_VER_V30
#else
#define CFG_MAC_VER_V10
#define CFG_MDM_VER_V11
//#define CFG_IPC_VER_V11
#define CFG_PLF_VER_V20
#endif
/// A-MPDU TX fast retry support
#define NX_AMPDU_TX_FAST_RETRY 1
#define CFG_AMSDU_8K // change to 8K for HE pkt large than 4096, it may cause system crashed
#define CFG_STA_MAX CONFIG_WIFI_MAC_SUPPORT_STAS_MAX_NUM
#define CFG_SPC 16
#if CONFIG_SOC_BK7256XX
// decrease TXDESC count to reduce memory
#define CFG_TXDESC0 1
#define CFG_TXDESC1 32
#define CFG_TXDESC2 32
#define CFG_TXDESC3 4
#define CFG_TXDESC4 1
#elif CONFIG_SOC_BK7236XX || CONFIG_SOC_BK7239XX || CONFIG_SOC_BK7286XX
// BK_MAC doesn't alloc static memory for txdesc, but for ba agg txdesc (minimum 3)
#define CFG_TXDESC0 24
#define CFG_TXDESC1 32
#define CFG_TXDESC2 24
#define CFG_TXDESC3 24
#define CFG_TXDESC4 24
#else
#define CFG_TXDESC0 16
#define CFG_TXDESC1 16
#define CFG_TXDESC2 16
#define CFG_TXDESC3 16
#define CFG_TXDESC4 16
#endif
#define CFG_AGG
#define CFG_PS
#define CFG_DPSM
#define CFG_CMON
#define CFG_MROLE
#define CFG_HWSCAN
#define CFG_AUTOBCN
#define CFG_WAPI
#define CFG_FHOST
#define CFG_MU_CNT 1
//#define CFG_UAPSD
#define CFG_KEYCFG
#if CONFIG_WIFI6
#define CFG_HE
#define NX_HE 1
#endif
#define CFG_AMSDU
//#define CFG_REC
#define CFG_UF
#define CFG_MON_DATA
#define CFG_BFMEE
#define CFG_MU_RX
#define CFG_TWT 8
//#define CFG_TDLS
//#define CFG_ANT_DIV
/* hardware security unit, BK7236 doesn't Support */
//#define CFG_HSU 1
#define CFG_COEX
//#define CONFIG_RWNX_LWIP
//#define CFG_TG
//#define CFG_FHOST_MONITOR
//#define CFG_SMARTCONFIG
#if CONFIG_P2P
#define CFG_P2P 2
#if CONFIG_P2P_GO
#define CFG_P2P_GO
#endif //CONFIG_P2P_GO
#else //CONFIG_P2P
#define CFG_P2P 0
#endif //CONFIG_P2P
#if CONFIG_WIFI_FTM
#define CFG_FTM_INIT 1
#define CFG_FTM_RSP 1
#else
#define CFG_FTM_INIT 0
#define CFG_FTM_RSP 0
#endif
#if CONFIG_WIFI4
#define CFG_BWLEN
#if (!CONFIG_RF_OTA_TEST)
#define CFG_RC
#endif
#define CFG_BARX 8
#define CFG_BATX 5
//#define CFG_TDLS
//#define CFG_AMSDU
#define CFG_REORD_BUF 24
#endif // CONFIG_IEEE80211N
#if CONFIG_PMF
#define CFG_MFP
#endif
#if CONFIG_WPA_SME
#define NX_HOST_SME 1
#else
#define NX_HOST_SME 0
#endif
#define CFG_VIF_MAX 2
#if CFG_SUPPORT_MESH
#define CFG_MESH
//Number of supported Mesh Point Interfaces
#define CFG_MESH_VIF 2
//Number of supported Mesh Links (shared between the Mesh VIFs)
#define CFG_MESH_LINK 2
//Number of supported Mesh Paths
#define CFG_MESH_PATH 10
//Number of supported Mesh Proxy Information
#define CFG_MESH_PROXY 2
#endif
/*
****************************************************************************************
* ends of rwnx config *
****************************************************************************************
*/
/// Build for fully hosted partitioning
#ifdef CFG_FHOST
#define NX_FULLY_HOSTED 1
// No A-MSDU TX in fully hosted
#undef CFG_AMSDU
// A-MSDU de-aggregation enabled
#define CFG_DEAGG
#else // !CFG_FHOST
#define NX_FULLY_HOSTED 0
#endif // CFG_FHOST
// Features that must be enabled for MESH support
#ifdef CFG_MESH
#undef CFG_MROLE
#define CFG_MROLE
#undef CFG_BCN
#define CFG_BCN
#undef CFG_AUTOBCN
#define CFG_AUTOBCN
#undef CFG_MFP
#define CFG_MFP
#undef CFG_PS
#define CFG_PS
#endif //defined CFG_MESH
// Features that must be enabled for UMAC support
#ifdef CFG_UMAC
/// Whether UMAC is enable or not
#define NX_UMAC_PRESENT 1
#undef CFG_CMON
#define CFG_CMON
#undef CFG_HWSCAN
#define CFG_HWSCAN
#undef CFG_MROLE
#define CFG_MROLE
#undef CFG_AUTOBCN
#ifdef CFG_BCN
#define CFG_AUTOBCN
#endif
#else // !CFG_UMAC
/// Whether UMAC is enable or not
#define NX_UMAC_PRESENT 0
#endif // CFG_UMAC
#if BK_MAC
#define NX_CRM 1
#define NX_PTA 0
#endif
/**
*******************************************************************************
* @name MAC HW version
*******************************************************************************
*/
/// MAC version
#ifdef CFG_MAC_VER_V10
#define NX_MAC_VER 10
#elif defined CFG_MAC_VER_V20
#define NX_MAC_VER 20
#elif defined CFG_MAC_VER_V21
#define NX_MAC_VER 21
#endif
#if (NX_MAC_VER == 20)
#error "MAC version 20 is deprecated"
#endif
/// Flag indicating if the FW is compiled for a MAC HW supporting HE
#define NX_MAC_HE (NX_MAC_VER >= 20)
/// Flag indicating if the FW is compiled for a MAC HW implementing a RX ring buffer
#define NX_RX_RING (NX_MAC_VER >= 21)
/** @} MAC */
/**
*******************************************************************************
* @name Modem version
*******************************************************************************
*/
/// Modem version
#ifdef CFG_MDM_VER_V10
#define NX_MDM_VER 10
#elif defined CFG_MDM_VER_V11
#define NX_MDM_VER 11
#elif defined CFG_MDM_VER_V20
#define NX_MDM_VER 20
#elif defined CFG_MDM_VER_V21
#define NX_MDM_VER 21
#elif defined CFG_MDM_VER_V22
#define NX_MDM_VER 22
#elif defined CFG_MDM_VER_V30
#define NX_MDM_VER 30
#elif defined CFG_MDM_VER_V31
#define NX_MDM_VER 31
#elif defined CFG_MDM_VER_V32
#define NX_MDM_VER 32
#endif
/** @} Modem */
/**
*******************************************************************************
* @name Platform version
*******************************************************************************
*/
/// Platform version
#ifdef CFG_PLF_VER_V10
#define NX_PLF_VER 10
#elif defined CFG_PLF_VER_V20
#define NX_PLF_VER 20
#elif defined CFG_PLF_VER_V30
#define NX_PLF_VER 30
#endif
/** @} Platform */
/**
*******************************************************************************
* @name General Configuration
*******************************************************************************
*/
/// Max number of virtual interfaces managed. MAC HW is limited to 6, but the LMAC assumes
/// that this number is a power of 2, thus only 1, 2 or 4 are allowed
#define NX_VIRT_DEV_MAX CFG_VIF_MAX
#if (NX_VIRT_DEV_MAX & (NX_VIRT_DEV_MAX - 1))
#error "Not a power of 2"
#endif
#if (NX_VIRT_DEV_MAX > 4)
#error "Max number of VIF shall be 4"
#endif
/// Max number of peer devices managed
#define NX_REMOTE_STA_MAX CFG_STA_MAX
/// Heap size
#define NX_HEAP_SIZE (2048 + 2048 * NX_UMAC_PRESENT + 256 * NX_VIRT_DEV_MAX + 64 * NX_REMOTE_STA_MAX)
/** @} General */
/**
*******************************************************************************
* @name Beacon Configuration
*******************************************************************************
*/
/// Beaconing support
#ifdef CFG_BCN
#define NX_BEACONING 1
#else
#define NX_BEACONING 0
#endif
/// Autonomous beacon transmission support
#ifdef CFG_AUTOBCN
#define NX_BCN_AUTONOMOUS_TX 1
#else
#define NX_BCN_AUTONOMOUS_TX 0
#endif
/// Maximum size of a beacon frame
#define NX_BCNFRAME_LEN 512
/** @} Beacon */
/**
*******************************************************************************
* @name Power Save Configuration
*******************************************************************************
*/
/// UAPSD support
#ifdef CFG_UAPSD
#define NX_UAPSD 1
// If UAPSD is enabled, we force the legacy PS mode to be enabled
#undef CFG_PS
#define CFG_PS
#else
#define NX_UAPSD 0
#endif
/// DPSM support
#ifdef CFG_DPSM
#define NX_DPSM 1
// If DPSM is enabled, we force the legacy PS mode to be enabled
#undef CFG_PS
#define CFG_PS
#else
#define NX_DPSM 0
#endif
/// Legacy power save support
#ifdef CFG_PS
#define NX_POWERSAVE 1
#else
#define NX_POWERSAVE 0
#endif
/** @} Power Save */
/**
*******************************************************************************
* @name HE Configuration
*******************************************************************************
*/
// Disable HE support if FW is compiled for a 11n/ac only HW
#if NX_MDM_VER<30 || NX_MAC_VER<20
#undef CFG_HE
#endif
// HE not yet supported for softmac
#if !NX_UMAC_PRESENT
#undef CFG_HE
#endif
/// HE Support
#ifdef CFG_HE
#define NX_HE 1
// Force aggregation if HE is enabled
#undef CFG_AGG
#define CFG_AGG
// Force VHT support if HE is enabled
#undef CFG_VHT
#define CFG_VHT
// Force MFP support if HE is enabled, as it is mandatory for WiFi certification
#undef CFG_MFP
#define CFG_MFP
// Force Radio Measurement module
#define NX_RM 0
#else // !CFG_HE
#define NX_HE 0
#define NX_RM 0
#endif // CFG_HE
/** @} HE */
/**
*******************************************************************************
* @name TWT Configuration
*******************************************************************************
*/
#if NX_UMAC_PRESENT && NX_HE && CFG_TWT
/// TWT support
#define NX_TWT 1
/// Maximum Number of Flows
#define NX_TWT_FLOW_NB CFG_TWT
#else
#define NX_TWT 0
#define NX_TWT_FLOW_NB 0
#endif //NX_UMAC_PRESENT && NX_HE && defined CFG_TWT
/** @} TWT */
/**
*******************************************************************************
* @name VHT Configuration
*******************************************************************************
*/
#if NX_UMAC_PRESENT
/// VHT Support
#ifdef CFG_VHT
#define NX_VHT 1
// Force MFP support if VHT is enabled, as it is mandatory for 802.11ac WiFi certification
#undef CFG_MFP
#define CFG_MFP
#else // !CFG_VHT
#define NX_VHT 0
#endif // CFG_VHT
#endif // NX_UMAC_PRESENT
/** @} VHT */
/**
*******************************************************************************
* @name A-MSDU Configuration
*******************************************************************************
*/
/// Define the A-MSDU option for TX
#ifdef CFG_AMSDU
#define NX_AMSDU_TX 1
// Force the aggregation to be supported
#undef CFG_AGG
#define CFG_AGG
/// Number of payloads per TX descriptor
#define NX_TX_PAYLOAD_MAX 6
#else
#define NX_AMSDU_TX 0
/// Number of payloads per TX descriptor
#define NX_TX_PAYLOAD_MAX 0
#endif
/// Maximum size of A-MSDU supported in reception
#ifdef CFG_AMSDU_4K
#define RWNX_MAX_AMSDU_RX 4096
#elif defined CFG_AMSDU_8K
#define RWNX_MAX_AMSDU_RX 8192
#elif defined CFG_AMSDU_12K
#define RWNX_MAX_AMSDU_RX 12288
#endif
/** @} A-MSDU */
/**
*******************************************************************************
* @name A-MPDU Configuration
*******************************************************************************
*/
#ifdef CFG_AGG
/// A-MPDU TX support
#define NX_AMPDU_TX 1
/// A-MPDU TX dynamic choose retry ac support
#define NX_DYNAMIC_CHOOSE_RETRY_AC 0
#if NX_UMAC_PRESENT
/// Maximum number of TX Block Ack
#define NX_MAX_BA_TX CFG_BATX
#if (NX_MAX_BA_TX == 0)
#error "At least one BA TX agreement shall be allowed"
#endif
#else // !NX_UMAC_PRESENT
#define NX_MAX_BA_TX 0
#endif // NX_UMAC_PRESENT
#else // !CFG_AGG
#define NX_AMPDU_TX 0
#define NX_DYNAMIC_CHOOSE_RETRY_AC 0
#define NX_MAX_BA_TX 0
#undef CFG_BWLEN
#undef CFG_MU_CNT
#define CFG_MU_CNT 1
#endif // CFG_AGG
#if NX_UMAC_PRESENT
/// Maximum number of RX Block Ack
#define NX_MAX_BA_RX CFG_BARX
#define NX_AMPDU_RX CFG_BARX
/// RX Packet Reordering Buffer Size
#define NX_AMPDU_RX_BUF_SIZE CFG_REORD_BUF
#if (NX_AMPDU_RX && ((NX_AMPDU_RX_BUF_SIZE < 1) || (NX_AMPDU_RX_BUF_SIZE > 64)))
#error "Incorrect reordering buffer size"
#endif
/// A-MSDU de-aggregation support
#ifdef CFG_DEAGG
#define NX_AMSDU_DEAGG 1
#else
#define NX_AMSDU_DEAGG 0
#endif
#else // !NX_UMAC_PRESENT
/// RX Packet Reordering support
#define NX_AMPDU_RX 0
/// A-MSDU de-aggregation support
#define NX_AMSDU_DEAGG 0
#endif // NX_UMAC_PRESENT
/** @} A-MPDU */
/**
*******************************************************************************
* @name BeamForming Configuration
*******************************************************************************
*/
// We support only the VHT and HE calibration, so no need to compile the BFMER code if
// neither VHT nor HE is supported by the fullMAC.
// In softMAC we don't know if the host will use VHT/HE or not, so we keep this code
#if NX_UMAC_PRESENT && !NX_HE && !NX_VHT
#undef CFG_BFMER
#endif // NX_UMAC_PRESENT && !NX_HE && !NX_VHT
/// Beamformee support
#ifdef CFG_BFMEE
#define RW_BFMEE_EN 1
#else
#define RW_BFMEE_EN 0
// Disable MU-MIMO RX if Beamformee is not supported
#undef CFG_MU_RX
#endif
#ifdef CFG_BFMER
/// Beamformer support
#define RW_BFMER_EN 1
/// Maximum number of frames reserved for calibration
#define RW_BFR_TXFRAME_CNT CFG_MU_CNT
#else // !CFG_BFMER
#define RW_BFMER_EN 0
#define RW_BFR_TXFRAME_CNT 0
// Disable MU-MIMO TX if Beamformer is not supported
#undef CFG_MU_CNT
#define CFG_MU_CNT 1
#endif // CFG_BFMER
/// Number of users supported
#define RW_USER_MAX CFG_MU_CNT
/// MU-MIMO TX support
#define RW_MUMIMO_TX_EN (RW_USER_MAX > 1)
/// Support for up to one secondary user
#define RW_MUMIMO_SEC_USER1_EN (RW_USER_MAX > 1)
/// Support for up to two secondary users
#define RW_MUMIMO_SEC_USER2_EN (RW_USER_MAX > 2)
/// Support for up to three secondary users
#define RW_MUMIMO_SEC_USER3_EN (RW_USER_MAX > 3)
/// MU-MIMO RX support
#ifdef CFG_MU_RX
#define RW_MUMIMO_RX_EN 1
#else
#define RW_MUMIMO_RX_EN 0
#endif
/** @} BeamForming */
/**
*******************************************************************************
* @name P2P Configuration
*******************************************************************************
*/
#if CFG_P2P
/// P2P support
#define NX_P2P 1
/// Maximum number of simultaneous P2P connections
#define NX_P2P_VIF_MAX CFG_P2P
/// P2P GO Support
#ifdef CFG_P2P_GO
// AUTOBCN must be supported
#if !(defined CFG_AUTOBCN)
#error 'Autonomous Beacon TX feature (AUTOBCN) must be enabled'
#endif
#define NX_P2P_GO 1
#else
#define NX_P2P_GO 0
#endif //(GFG_P2P_GO)
#else
#define NX_P2P 0
#define NX_P2P_VIF_MAX 0
#define NX_P2P_GO 0
#endif //(CFG_P2P)
/** @} P2P */
/**
*******************************************************************************
* @name MESH Configuration
*******************************************************************************
*/
#ifdef CFG_MESH
/// Wireless Mesh Networking support
#define RW_MESH_EN (1)
/// UMAC support for MESH
#define RW_UMESH_EN (NX_UMAC_PRESENT)
/// Maximum Number of
#define RW_MESH_VIF_NB (CFG_MESH_VIF)
/// Maximum number of MESH link
#define RW_MESH_LINK_NB (CFG_MESH_LINK)
/// Maximum number of MESH path
#define RW_MESH_PATH_NB (CFG_MESH_PATH)
/// Maximum number of MESH proxy
#define RW_MESH_PROXY_NB (CFG_MESH_PROXY)
#else
#define RW_MESH_EN (0)
#define RW_UMESH_EN (0)
#define RW_MESH_VIF_NB (0)
#define RW_MESH_LINK_NB (0)
#define RW_MESH_PATH_NB (0)
#define RW_MESH_PROXY_NB (0)
#endif //defined CFG_MESH
/** @} MESH */
/**
*******************************************************************************
* @name TX Configuration
*******************************************************************************
*/
/// Minimal MPDU spacing we support in TX
#define NX_TX_MPDU_SPACING CFG_SPC
/// Number of TX queues in the LMAC
#define NX_TXQ_CNT (AC_MAX + NX_BEACONING)
/// Number of TX descriptors available in the system (BK)
#define NX_TXDESC_CNT0 CFG_TXDESC0
/// Number of TX descriptors available in the system (BE)
#define NX_TXDESC_CNT1 CFG_TXDESC1
/// Number of TX descriptors available in the system (VI)
#define NX_TXDESC_CNT2 CFG_TXDESC2
/// Number of TX descriptors available in the system (VO)
#define NX_TXDESC_CNT3 CFG_TXDESC3
#if (NX_BEACONING)
/// Number of TX descriptors available in the system (BCN)
#define NX_TXDESC_CNT4 CFG_TXDESC4
#endif
/// Number of TX frame descriptors and buffers available for frames generated internally
#define NX_TXFRAME_CNT (NX_VIRT_DEV_MAX + RW_BFR_TXFRAME_CNT + 1)
#if NX_TXFRAME_CNT < 2
#undef NX_TXFRAME_CNT
#define NX_TXFRAME_CNT 2
#endif
/// Maximum size of a TX frame generated internally
#if NX_UMAC_PRESENT
#if (NX_P2P)
#define NX_TXFRAME_LEN 384
#elif NX_RM
#define NX_TXFRAME_LEN 318
#else
#define NX_TXFRAME_LEN 256
#endif //(NX_P2P)
#else
#define NX_TXFRAME_LEN 128
#endif
/// Number of TX flow control credits allocated by default per RA/TID (UMAC only)
#define NX_DEFAULT_TX_CREDIT_CNT 32 //default 4
/** @} TX */
/**
*******************************************************************************
* @name RX Configuration
*******************************************************************************
*/
/// RX Payload buffer size
#define NX_RX_PAYLOAD_LEN 512
/// Maximum number of the longest A-MSDUs that can be stored at the same time
#if NX_UMAC_PRESENT && NX_VHT
#define NX_RX_LONG_MPDU_CNT 3
#else
#define NX_RX_LONG_MPDU_CNT 2
#endif
/// Number of RX payload descriptors - defined to be n times the maximum A-MSDU size
/// plus one extra one used for HW flow control
#define NX_RX_PAYLOAD_DESC_CNT ((RWNX_MAX_AMSDU_RX / NX_RX_PAYLOAD_LEN) * NX_RX_LONG_MPDU_CNT + 1)
/// Number of RX descriptors (SW and Header descriptors)
#define NX_RXDESC_CNT NX_RX_PAYLOAD_DESC_CNT
#if NX_AMSDU_DEAGG
/// Maximum number MSDUs supported in one received A-MSDU
#define NX_MAX_MSDU_PER_RX_AMSDU 8
#endif
/// Number of platform DMA descriptors in each RX payload descriptor
#if NX_AMSDU_DEAGG
#define NX_DMADESC_PER_RX_PDB_CNT NX_MAX_MSDU_PER_RX_AMSDU
#else
#define NX_DMADESC_PER_RX_PDB_CNT 1
#endif
/** @} RX */
/**
*******************************************************************************
* @name Radar Configuration
*******************************************************************************
*/
#ifdef CFG_RADAR
/// Radar enable software define
#define NX_RADAR_DETECT 1
/// Radar enable hardware define (i.e. used in registers file)
#define RW_RADAR_EN 1
#else
#define NX_RADAR_DETECT 0
#define RW_RADAR_EN 0
#endif
/** @} Radar */
/**
*******************************************************************************
* @name Unsupported HT Frame Logging Configuration
*******************************************************************************
*/
#ifdef CFG_UF
#if (NX_MDM_VER >= 20) && (NX_MDM_VER < 30)
/// Unsupported HT Frame Logging enable
#define NX_UF_EN 1
#else
#define NX_UF_EN 0
#endif
#else
#define NX_UF_EN 0
#endif
/** @} Unsupported HT Frame Logging */
/**
*******************************************************************************
* @name Monitor + Data interface Support
*******************************************************************************
*/
#if NX_UMAC_PRESENT && defined CFG_MON_DATA
#define NX_MON_DATA 1
#else
#define NX_MON_DATA 0
#endif
/** @} Monitor + Data interface Support */
/**
*******************************************************************************
* @name FTM Configuration
* @{
*******************************************************************************
*/
#if NX_UMAC_PRESENT
/// FTM intiator Support
#if CFG_FTM_INIT
#define NX_FTM_INITIATOR 1
#else // !CFG_FTM_INIT
#define NX_FTM_INITIATOR 0
#undef CFG_FTM_RSP
#endif // CFG_FTM_INIT
/// Fake FTM responder Support
#if CFG_FTM_RSP
#define NX_FAKE_FTM_RSP 0
#else // !CFG_FTM_RSP
#define NX_FAKE_FTM_RSP 0
#endif // CFG_FTM_RSP
#else
#undef CFG_FTM_INIT
#undef CFG_FTM_RSP
/// FTM intiator Support
#define NX_FTM_INITIATOR 0
/// Fake FTM responder Support
#define NX_FAKE_FTM_RSP 0
#endif // NX_UMAC_PRESENT
/** @} FTM */
/**
*******************************************************************************
* @name Debug Configuration
*******************************************************************************
*/
/// Debug dump forwarding
#ifdef CFG_DBGDUMP
#define NX_DEBUG_DUMP 1
#else
#define NX_DEBUG_DUMP 0
#endif
/// Debug key RAM forwarding
#ifdef CFG_DBGDUMPKEY
#define NX_DEBUG_DUMP_KEY 1
#else
#define NX_DEBUG_DUMP_KEY 0
#endif
/// Debug support
#define NX_DEBUG CFG_DBG
#define RW_BUS_HANG_WHEN_DOZE_DBG CFG_DBG
/// Debug print output
#if NX_DEBUG
#define NX_PRINT NX_PRINT_PRINTF
#define TEMP_DEBUG 1
#define BK_SAVE_DIAGS_INFO 1
#define DBG_TX_TIMEOUT 1
#else
#define NX_PRINT NX_PRINT_NONE
#define TEMP_DEBUG 0
#define BK_SAVE_DIAGS_INFO 0
#define DBG_TX_TIMEOUT 0
#endif
/// Trace Buffer Support
#ifdef CFG_TRACE
#define NX_TRACE 1
#else
#define NX_TRACE 0
#endif
/// Profiling support
#ifdef CFG_PROF
#define NX_PROFILING_ON 1
#else
#define NX_PROFILING_ON 0
#endif
/// System statistics support
#ifdef CFG_STATS
#define NX_SYS_STAT 1
#else
#define NX_SYS_STAT 0
#endif
/** @} Debug */
/**
*******************************************************************************
* @name Extra Configuration
*******************************************************************************
*/
/// Recovery support
#ifdef CFG_REC
#define NX_RECOVERY 1
#else
#define NX_RECOVERY 0
#endif
/// Connection monitoring support
#ifdef CFG_CMON
#define NX_CONNECTION_MONITOR 1
#else
#define NX_CONNECTION_MONITOR 0
#endif
/// Multi-role support (AP+STA, STA+STA)
#ifdef CFG_MROLE
#define NX_MULTI_ROLE 1
#else
#define NX_MULTI_ROLE 0
#endif
/// HW scan support
#ifdef CFG_HWSCAN
#define NX_HW_SCAN 1
#else
#define NX_HW_SCAN 0
#endif
/// MFP support (for UMAC only)
#if NX_UMAC_PRESENT && defined CFG_MFP
#define NX_MFP 1
#else
#define NX_MFP 0
#endif
/// WAPI support
#ifdef CFG_WAPI
#define RW_WAPI_EN 1
#else
#define RW_WAPI_EN 0
#endif
/// WLAN coexistence support
#ifdef CFG_COEX
#define RW_WLAN_COEX_EN 1
#else
#define RW_WLAN_COEX_EN 0
#endif
/// Compilation for a HW supporting Key RAM configuration
#ifdef CFG_KEYCFG
#define NX_KEY_RAM_CONFIG 1
#else
#define NX_KEY_RAM_CONFIG 0
#endif
/// TDLS support
#ifdef CFG_TDLS
#define NX_TDLS 1
#else
#define NX_TDLS 0
#endif
#ifdef CFG_BWLEN
/// per-BW length adaptation support
#define NX_BW_LEN_ADAPT 1
/// Number of steps for BW length adaptation
#define NX_BW_LEN_STEPS 4
#else
#define NX_BW_LEN_ADAPT 0
#define NX_BW_LEN_STEPS 1
#endif
/// HSU support. Possible values are:
/// - 0: Don't use HSU, use software implementation.
/// - 1: Use HSU and fallback to software implementation if not available.
/// - 2: Only use HSU. (runtime error is generated if HSU is not available)
#ifdef CFG_HSU
#define NX_HSU (CFG_HSU)
#define RW_HSU_SHA_EN 1
#define RW_HSU_IP_CHK_EN 1
#define RW_HSU_RSA_EN 1
#define RW_HSU_EPM_EN 1
#else
#define NX_HSU 0
#endif
/// Antenna Diversity support
#if NX_UMAC_PRESENT && defined CFG_ANT_DIV && (NX_MDM_VER < 30)
#define NX_ANT_DIV 1
#else
#define NX_ANT_DIV 0
#endif
/// Traffic generator support
#ifdef CFG_TG
#define NX_TG 1
#else
#define NX_TG 0
#endif
/// Monitor mode support
#ifdef CFG_FHOST_MONITOR
#define NX_FHOST_MONITOR 1
#else
#define NX_FHOST_MONITOR 0
#endif
/// Smartconfig support
#ifdef CFG_SMARTCONFIG
#undef NX_FHOST_MONITOR
#define NX_FHOST_MONITOR 1
#define NX_SMARTCONFIG 1
#else
#define NX_SMARTCONFIG 0
#endif
/// External crypto lib compiled
#ifdef CFG_CRYPTO
#define NX_CRYPTOLIB 1
#else
#define NX_CRYPTOLIB 0
#endif
/** @} Extra */
/**
*******************************************************************************
* @name Fw Features Configuration
* Features automatically enabled if required by the selected configuration
*******************************************************************************
*/
/// Channel Contexts support
#define NX_CHNL_CTXT (NX_HW_SCAN || NX_P2P)
/// Maximum number of operating channel contexts
#define NX_CHAN_CTXT_CNT 3
/// General Purpose DMA module
#if BK_MAC
#define NX_GP_DMA 0
#else
#define NX_GP_DMA (NX_CHNL_CTXT || NX_BCN_AUTONOMOUS_TX || NX_RADAR_DETECT || RW_BFMER_EN)
#endif
/// Internal handling of received frame
#define NX_RX_FRAME_HANDLING (NX_POWERSAVE || NX_CONNECTION_MONITOR || NX_UMAC_PRESENT || RW_BFMER_EN)
/// Internal frame generation support
#define NX_TX_FRAME (NX_POWERSAVE || NX_CONNECTION_MONITOR || NX_CHNL_CTXT || NX_BCN_AUTONOMOUS_TX || RW_BFMER_EN)
/// Traffic Detection per STA support
#define NX_TD_STA (RW_BFMER_EN || NX_TDLS || NX_HE)
/// Traffic Detection support
#define NX_TD (NX_DPSM || NX_CHNL_CTXT || NX_P2P_GO || NX_TD_STA)
/// MAC Management timer support
#define NX_MM_TIMER (NX_MULTI_ROLE || NX_CHNL_CTXT || NX_DPSM || NX_P2P || NX_UAPSD || RW_BFMER_EN || NX_BEACONING || NX_HE)
/** @} Features */
/**
*******************************************************************************
* @name Misc
*******************************************************************************
*/
/// Implement IEEE802.11ax-D2.0 (instead of D3.2)
#define NX_11AX_DRAFT_2_0 0
/// This macro appears in some generated header files, define it to avoid warning
#define RW_NX_LDPC_DEC 1
/// This macro appears in some generated header files, define it to avoid warning
#define RW_NX_AGC_SNR_EN 1
/// This macro appears in some generated header files, define it to avoid warning
#define RW_NX_IQ_COMP_EN 1
/// This macro appears in some generated header files, define it to avoid warning
#define RW_NX_FIQ_COMP_EN 1
/// This macro appears in some generated header files, define it to avoid warning
#define RW_NX_DERIV_80211B 1
/// This macro appears in some generated header files, define it to avoid warning
#define RW_KEY_EXTENDED 1
/// @} misc
#if BK_MAC
#define BK_NX_RC 1
/**
*******************************************************************************
* @name BEKEN Additional feature
*******************************************************************************
*/
/// add peak cancel function for tx data path
#define BK_NX_PEAK_CANCEL 1
/// add DPD for PA
#define BK_NX_DPD_EN 0
/// add Power Table for PA
#define BK_NX_PWRTBL_EN 0
/// test ahb access phy memory
#define TEST_AHB_ACCESS_PHY_MEM_EN 0
/// CSI
#if CONFIG_WIFI_CSI_EN
#define RW_NX_CSI 1
#endif
/// minimize rx buffer size: rx buffer is allocated after the mpdu len is
/// calculated and wants to push to rx queue
#define BK_MIN_RX_BUFSZ 1
/// fast connect with AP by bypassing join procedure
#if CONFIG_SM_FAST_CONNECT
#define SM_FAST_CONNECT 1
#endif
/// Enable Software TX Queue
#if CONFIG_RWNX_SW_TXQ
#define NX_SW_TXQ 1
#endif
/// @} beken
/// auto set keep alive period
#if CONFIG_MAC_RESET_BCMC_AUTO_MODE
#define MAC_RESET_BCMC_AUTO_MODE 1
#endif
/// auto set keep alive period
#if CONFIG_MAC_KEEP_ALIVE_PERIOD_AUTO_MODE
#define MAC_KEEP_ALIVE_PERIOD_AUTO_MODE 1
#endif
//Enable when mqtt and arp need align each other
#if CONFIG_MQTT_ARP_ALIGN_EN
#define MQTT_ARP_ALIGN_EN 1
#endif
/// protect dhcp in connected by receiving every DTIM
#if CONFIG_DHCP_PROTECT_IN_CONNECTED
#define DHCP_PROTECT_IN_CONNECTED 1
#endif
/// protect tcp in connected by receiving every DTIM
#if CONFIG_TCP_PROTECT_IN_CONNECTED
#define TCP_PROTECT_IN_CONNECTED 1
#endif
/// Optimize memory usage in macsw
#if CONFIG_BK_MEMORY_CUT_EN
#define BK_MEMORY_CUT_EN 1
#endif
/// enable HW beacon TIM element parser
#if CONFIG_NX_HW_PARSER_TIM_ELEMENT
#define NX_HW_PARSER_TIM_ELEMENT 1
#endif
/// read tim_beacon peer tsf ande local time from the register
#if CONFIG_TIM_TSF_FROM_REG
#define MM_TIM_TSF_FORM_REG 1
#endif
/// Dynamically changes CPU frequency
#if CONFIG_MAC_SUPPORT_DYNAMIC_CPU_FREQ
#define MAC_SUPPORT_DYNAMIC_CPU_FREQ 1
#endif
/// PM rosc calibration
#if CONFIG_MAC_PM_ROSC_CALI
#define MAC_PM_ROSC_CALI 0
#endif
/// Dynamic changes listen interval when media occurred
#if CONFIG_NX_MEDIA_DYNC_DTIM
#define NX_MEDIA_DYNC_DTIM 1
#endif
#if CONFIG_PER_PACKET_INFO_OUTPUT
#define PER_PACKET_INFO_OUTPUT 1
#endif
/// Enable frame retry in macsw
#if CONFIG_MAC_SFRAME_SOFTWARE_RETRY
#define MAC_SFRAME_SOFTWARE_RETRY 1
#endif
/// Debug dynamically: Read MAC/PHY debug port and save diag values to memory,
/// and save temporarily values
#if CONFIG_BK_MEM_DYNA_APPLY_EN
#define BK_MEM_DYNA_APPLY_EN 1
#endif
/// Dynamic changes listen interval when OTA
#if CONFIG_NX_OTA_DYNC_DTIM
#define NX_OTA_DYNC_DTIM 1
#endif
/// Dynamic changes listen interval when PS Null send fail
#define NX_PSNULL_FAIL_DYNC_DTIM 1
#if CONFIG_BK_NO_CHECK_RX_PN
#define BK_NO_CHECK_RX_PN 1
#endif
// interoperability
#if CONFIG_BK_INTEROPER
#define BK_INTEROPER 1
#endif
//Dynamic changes td window
#define MAC_SUPPORT_DYNAMIC_TD_WINDOW 1
//use ckmn for rosc
#define USE_CKMN 1
#endif
#endif // _RWNX_CONFIG_H_
/// @} MACSW