# Protocol specific features

#features not required for GENOA IOT, compilation errors are there.
CONFIG_SUPPORT_11AX := y
CONFIG_160MHZ_SUPPORT := y
CONFIG_FEATURE_STATS_EXT := n
CONFIG_QCA_IBSS_SUPPORT := y
CONFIG_FEATURE_WLAN_FT_IEEE8021X := y
CONFIG_FEATURE_WLAN_FT_PSK := y

#required features
CONFIG_FEATURE_WLAN_RMC := n
CONFIG_QCACLD_WLAN_LFR2 := y
CONFIG_QCACLD_WLAN_LFR3 := n
CONFIG_QCOM_TDLS := y
CONFIG_QCACLD_FEATURE_GREEN_AP := n
CONFIG_QCOM_VOWIFI_11R := y
CONFIG_WLAN_FEATURE_FILS := y
CONFIG_WLAN_FEATURE_11W := y
CONFIG_QCOM_LTE_COEX := n
CONFIG_WLAN_FEATURE_LPSS := n
CONFIG_QCACLD_FEATURE_NAN := y
CONFIG_POWER_MANAGEMENT_OFFLOAD := y
CONFIG_LFR_SUBNET_DETECTION := y
CONFIG_MCC_TO_SCC_SWITCH := y
CONFIG_QCOM_ESE := n
CONFIG_WLAN_OPEN_P2P_INTERFACE := y
CONFIG_WLAN_CONV_SPECTRAL_ENABLE := n
CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY := y
CONFIG_WLAN_DFS_MASTER_ENABLE := y
CONFIG_WIFI_POS_CONVERGED := y
CONFIG_WIFI_POS_LEGACY := n
CONFIG_FEATURE_WLAN_WAPI := y
CONFIG_AGEIE_ON_SCAN_RESULTS := y
CONFIG_LEGACY_CHAN_ENUM := y
CONFIG_WLAN_PMO_ENABLE := y
CONFIG_CONVERGED_P2P_ENABLE := y
CONFIG_WLAN_POLICY_MGR_ENABLE := y
CONFIG_HDD_INIT_WITH_RTNL_LOCK := y
CONFIG_WLAN_FEATURE_TWT := n
CONFIG_WMI_CMD_STRINGS := y
CONFIG_SOFTAP_CHANNEL_RANGE := y
CONFIG_FEATURE_WLAN_SCAN_PNO := y
CONFIG_WLAN_FEATURE_DSRC := n
CONFIG_FEATURE_MONITOR_MODE_SUPPORT := n
CONFIG_DP_TRACE := y
CONFIG_QCACLD_FEATURE_METERING := n

#Flag to enable Dynamic Voltage WDCVS (Config Voltage Mode)
CONFIG_WLAN_DYNAMIC_CVM := n

#We might need to disable WEXT support in perf builds in future
CONFIG_WLAN_WEXT_SUPPORT_ENABLE := y
CONFIG_HOST_11D_SCAN := y

ifeq ($(CONFIG_ARCH_MSM8996), y)
CONFIG_CHANNEL_HOPPING_ALL_BANDS := y
endif

# Debug specific features
CONFIG_WLAN_LOGGING_BUFFERS_DYNAMICALLY := y
BUILD_DEBUG_VERSION := y
BUILD_DIAG_VERSION := n

CONFIG_REMOVE_PKT_LOG := n
CONFIG_FEATURE_HTC_CREDIT_HISTORY := y
CONFIG_TRACE_RECORD_FEATURE := y
CONFIG_WLAN_NUD_TRACKING := n
CONFIG_CP_STATS := n
CONFIG_FEATURE_FW_LOG_PARSING := n
CONFIG_PTT_SOCK_SVC_ENABLE := y
CONFIG_WMI_INTERFACE_EVENT_LOGGING := y
CONFIG_WLAN_FEATURE_LINK_LAYER_STATS := n
CONFIG_FEATURE_ROAM_DEBUG := y

CONFIG_WLAN_LOG_FATAL := y
CONFIG_WLAN_LOG_ERROR := y
CONFIG_WLAN_LOG_WARN := y
CONFIG_WLAN_LOG_INFO := y
CONFIG_WLAN_LOG_DEBUG := y

ifeq ($(CONFIG_REMOVE_PKT_LOG), y)
CONFIG_WDI_EVENT_ENABLE := n
else
CONFIG_WDI_EVENT_ENABLE := y
endif

PANIC_ON_BUG := y
WLAN_WARN_ON_ASSERT := y
CONFIG_WLAN_LOGGING_SOCK_SVC := y

#Flag to enable wbuff feature
CONFIG_WLAN_WBUFF := n

# other features
WLAN_OPEN_SOURCE := y
CONFIG_ATH_PERF_PWR_OFFLOAD := y
CONFIG_ATH_BUS_PM := n
CONFIG_ATH_SUPPORT_FLOWMAC_MODULE := n
CONFIG_ATH_SUPPORT_SPECTRAL := n
CONFIG_LITTLE_ENDIAN := y
CONFIG_ATH_PCIE_ACCESS_DEBUG := n
CONFIG_QCA_SIGNED_SPLIT_BINARY_SUPPORT := n
CONFIG_QCA_SINGLE_BINARY_SUPPORT := n
CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC := y
CONFIG_FEATURE_SECURE_FIRMWARE := n
CONFIG_WLAN_FEATURE_PACKET_FILTERING := n
CONFIG_WLAN_NS_OFFLOAD := y
CONFIG_FEATURE_WLAN_RA_FILTERING:= y
ifeq ($(CONFIG_POWER_MANAGEMENT_OFFLOAD), y)
CONFIG_FEATURE_WLAN_LPHB := y
endif
CONFIG_FEATURE_WLAN_EXTSCAN := n
CONFIG_MCL := y
CONFIG_REG_CLIENT := y
CONFIG_WLAN_OFFLOAD_PACKETS := y
CONFIG_WLAN_SYNC_TSF := y
CONFIG_WLAN_FEATURE_DISA := n
CONFIG_WLAN_FEATURE_FIPS := y
CONFIG_WLAN_FEATURE_SAE := y
CONFIG_CHNL_MATRIX_RESTRICTION := n
CONFIG_WLAN_ALLOCATE_GLOBAL_BUFFERS_DYNAMICALLY := y
CONFIG_WLAN_FEATURE_BMI := n

#Flags to enable/disable vendor commands
CONFIG_FEATURE_RSSI_MONITOR := n
CONFIG_FEATURE_BSS_TRANSITION := n
CONFIG_FEATURE_STATION_INFO := n
CONFIG_FEATURE_TX_POWER := n
CONFIG_FEATURE_OTA_TEST := n
CONFIG_FEATURE_ACTIVE_TOS := n
CONFIG_FEATURE_SAR_LIMITS := y
CONFIG_FEATURE_CONCURRENCY_MATRIX := n
CONFIG_FEATURE_SAP_COND_CHAN_SWITCH := n
CONFIG_FEATURE_P2P_LISTEN_OFFLOAD := n

#Flags to enable/disable WMI APIs
CONFIG_WMI_ROAM_SUPPORT := y
CONFIG_WMI_CONCURRENCY_SUPPORT := y
CONFIG_WMI_STA_SUPPORT := y

ifeq ($(CONFIG_ARCH_SDM845), y)
ifeq ($(CONFIG_IPA_OFFLOAD), y)
CONFIG_ENABLE_SMMU_S1_TRANSLATION := y
endif
endif

#Data Path specific features
CONFIG_TX_CREDIT_RECLAIM_SUPPORT := n
CONFIG_CHECKSUM_OFFLOAD := y
CONFIG_QCA_SUPPORT_TX_THROTTLE := y

ifeq ($(CONFIG_POWER_MANAGEMENT_OFFLOAD), y)
CONFIG_GTK_OFFLOAD := y
endif
CONFIG_QCACLD_FEATURE_APF := y

#Flag to enable SARv1 -> SARv2 conversion
CONFIG_WLAN_FEATURE_SARV1_TO_SARV2 := n

ifneq ($(DEVELOPER_DISABLE_BUILD_TIMESTAMP), y)
ifneq ($(WLAN_DISABLE_BUILD_TAG), y)
CONFIG_BUILD_TAG := y
endif
endif

#Buffer allocations dynamically
ifeq ($(CONFIG_WLAN_ALLOCATE_GLOBAL_BUFFERS_DYNAMICALLY), y)
CONFIG_WLAN_DFS_STATIC_MEM_ALLOC := n
endif

# WoW filer configs
CONFIG_CFG_PMO_WOW_FILTERS_MAX := 16

# Offload configs
CONFIG_CFG_GTK_OFFLOAD_MAX_VDEV := 2
CONFIG_CFG_ROAM_OFFLOAD_MAX_VDEV := 1

# Max Periodic Tx Pattern Config
CONFIG_CFG_MAX_PERIODIC_TX_PTRNS := 2

# Max Sta Vdev Config
CONFIG_CFG_MAX_STA_VDEVS := 2

# Additional peers sent to firmware
CONFIG_CFG_NUM_OF_ADDITIONAL_FW_PEERS := 0

# Number of TDLS peers that each Tdls vdev can track
CONFIG_CFG_NUM_OF_TDLS_CONN_TABLE_ENTRIES := 4

# Number of vdevs supported at one time, used for allocating memory
CONFIG_WLAN_MAX_VDEVS := 3

#Number of STA sessions max connected to our SAP, used for allocating memory
#should never be less then number of max peers - INI
CONFIG_SIR_SAP_MAX_NUM_PEERS := 10

#Max no of offloaded beaconing entities supported
CONFIG_BEACON_TX_OFFLOAD_MAX_VDEV := 3

#Beacon offload config
CONFIG_WMI_BCN_OFFLOAD := y

###################################
