# This file allows user to override the factory
# defaults for the WLAN Driver

#############################################
# Power related configurations
#############################################
# Phy Mode (auto, b, g, n, etc)
# Valid values are 0-9, with 0 = Auto, 4 = 11n, 9 = 11ac
# 1 = 11abg, 2 = 11b, 3 = 11g, 5 = 11g only, 6 = 11n only
# 7 = 11b only 8 = 11ac only.
gDot11Mode=0

#############################################
# STA related general configurations
#############################################
# UAPSD service interval for VO,VI, BE, BK traffic
InfraUapsdVoSrvIntv=0
InfraUapsdViSrvIntv=0
InfraUapsdBeSrvIntv=0
InfraUapsdBkSrvIntv=0

# Flag to allow STA send AddTspec even when ACM is Off
gAddTSWhenACMIsOff=1

#############################################
# SAP related configurations
#############################################
#Enable OBSS protection
gEnableApOBSSProt=1

# RTS threshold
RTSThreshold=1048576

# 802.11d support
g11dSupportEnabled=0

# DFS Master Capability
gEnableDFSMasterCap=0

gNeighborLookupThreshold=76

# Legacy (non-ESE, non-802.11r) Fast Roaming Support
# To enable, set FastRoamEnabled=1
# To disable, set FastRoamEnabled=0
FastRoamEnabled=1

# Check if the AP to which we are roaming is better than current AP in
# terms of RSSI.  Checking is disabled if set to Zero.Otherwise it will
# use this value as to how better the RSSI of the new/roamable AP should
# be for roaming
RoamRssiDiff=3

#Channel Bonding
gChannelBondingMode24GHz=0
gChannelBondingMode5GHz=1

# Enable DFS channel roam
# 0: DISABLE, 1: ENABLED_NORMAL, 2: ENABLED_ACTIVE
gAllowDFSChannelRoam=1

# chain mask related params
#
# Set txchainmask and rxchainmask
# These parameters are used only if gEnable2x2 is 0
# Valid values are 1,2
# Set gSetTxChainmask1x1=1 or gSetRxChainmask1x1=1 to select chain0.
# Set gSetTxChainmask1x1=2 or gSetRxChainmask1x1=2 to select chain1.
gSetTxChainmask1x1=1
gSetRxChainmask1x1=1

# MCC to SCC Switch mode:
# 0-Disable
# 1-Enable
# 2-Force SCC if same band, with SAP restart
# 3-Force SCC if same band, without SAP restart by sending (E)CSA
# 4-Force SCC if same band (or) use SAP mandatory channel for DBS,
#   without SAP restart by sending (E)CSA
gWlanMccToSccSwitchMode = 3

# 1=enable tx STBC; 0=disable
gEnableTXSTBC=1

# 1=enable rx LDPC; 0=disable
gEnableRXLDPC=1

#Enable/Disable Tx beamformee in SAP mode
gEnableTxBFeeSAP=1

# Enable Tx beamforming in VHT20MHz
# Valid values are 0,1. If commented out, the default value is 0.
# 0=disable, 1=enable
gEnableTxBFin20MHz=1

# 802.11K support
gRrmEnable=1

#Enable Power Save offload
gEnablePowerSaveOffload=2

# Maximum Receive AMPDU size (VHT only. Valid values:
# 0->8k 1->16k 2->32k 3->64k 4->128k)
gVhtAmpduLenExponent=7

# Maximum MPDU length (VHT only. Valid values:
# 0->3895 octets, 1->7991 octets, 2->11454 octets)
gVhtMpduLen=2

#############################################
# P2P related configurations
#############################################
#Enable or Disable p2p device address administered
isP2pDeviceAddrAdministrated=0

#Mac address provisioning
#enable_mac_provision=1

#Enable VHT on 2.4Ghz
gEnableVhtFor24GHzBand=1

#############################################
# Offload related configurations
#############################################

# controlling the following offload patterns
# through ini parameter. Default value is 1
# to disable set it to zero. ssdp = 0
# Setup multicast pattern for mDNS 224.0.0.251,
# SSDP 239.255.255.250 and LLMNR 224.0.0.252
ssdp=0

# Regulatory Setting; 0=STRICT; 1=CUSTOM
gRegulatoryChangeCountry=1

# Disable/Enable GreenAP
# 0 to disable, 1 to enable, default: 1
gEnableGreenAp=0

#Enable/Disable LPASS support
# 0 to disable, 1 to enable
gEnableLpassSupport=1

# Whether userspace country code setting shld have priority
gCountryCodePriority=1

# Enable or Disable Multi-user MIMO
# 1=Enable (default), 0=Disable
gEnableMuBformee=1

# Inactivity time (in ms) to end TX Service Period while in IBSS power save mode
gIbssTxSpEndInactivityTime=10

#############################################
# TDLS related configurations
#############################################
# Enable support for TDLS
#  0 - disable
#  1 - enable
gEnableTDLSSupport=1

# Enable support for Implicit Trigger of TDLS. That is, wlan driver shall
# initiate TDLS Discovery towards a peer whenever setup criteria (throughput
# and RSSI) is met and then will initiate teardown when teardown criteria
# (idle packet count and RSSI) is met.
#  0 - disable
#  1 - enable
gEnableTDLSImplicitTrigger=1

# Enable support for TDLS off-channel operation
#  0 - disable
#  1 - enable
# TDLS off-channel operation will be invoked when there is only one
# TDLS connection.
gEnableTDLSOffChannel=1

# Tx/Rx Packet threshold for initiating TDLS.
# This ini is used to configure the number of Tx/Rx packets during the period of
# gTDLSTxStatsPeriod when exceeded, a TDLS Discovery request is triggered.
gTDLSTxPacketThreshold=10

# Number of idle packet.
# This ini is used to configure the number of Tx/Rx packet, below which
# within last gTDLSTxStatsPeriod period is considered as idle condition.
gTDLSIdlePacketThreshold=1

# VHT Tx/Rx MCS values
# Valid values are 0,1,2. If commented out, the default value is 0.
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
gVhtRxMCS=2
gVhtTxMCS=2

# VHT Tx/Rx MCS values for 2x2
# Valid values are 0,1,2. If commented out, the default value is 0.
# 0=MCS0-7, 1=MCS0-8, 2=MCS0-9
gEnable2x2=1
gVhtRxMCS2x2=2
gVhtTxMCS2x2=2

#IPA config is a bit mask and following are the configurations.
#bit0 IPA Enable
#bit1 IPA PRE Filter enable
#bit2 IPv6 enable
#bit3 IPA Resource Manager (RM) enable
#bit4 IPA Clock scaling enable
#bit5 IPA uC ENABLE
#bit6 IPA uC STA ENABLE
#bit8 IPA Real Time Debugging
gIPAConfig=0x7d

# Enable Rx handling options
# Rx_thread=1 RPS=2(default for ROME) NAPI=4(default for ihelium)
# Rx_thread + NAPI = 5
rx_mode=5

# Enable(Tx) fastpath for data traffic.
# 1 - enable(default)  0 - disable
gEnableFastPath=1

# Enable TCP Segmentation Offload
# 1 - enable  0 - disable
TSOEnable=1

# Enable Generic Receive Offload
# LRO and GRO are exclusive to each other
# LRO support is deprecated on latest 4.9(SDM845) kernel
# 1 - enable(default)  0 - disable
GROEnable=1

# Enable HT MPDU Density
# 4 for 2 micro sec
ght_mpdu_density=4

# Enable flow steering to enable multiple CEs for Rx flows.
# Multiple Rx CEs<==>Multiple Rx IRQs<==>probably different CPUs.
# Parallel Rx paths.
# 1 - enable 0 - disable(default)
gEnableFlowSteering=1

# Time in microseconds after which a NAPI poll must yield
ce_service_max_yield_time=500

#Maximum number of HTT messages to be processed per NAPI poll
ce_service_max_rx_ind_flush=1

# Maximum number of MSDUs the firmware will pack in one HTT_T2H_MSG_TYPE_RX_IN_ORD_PADDR_IND
maxMSDUsPerRxInd=8
################ Datapath feature set End ################

################ NAN feature set start ###################

# Enable NAN discovery (NAN 1.0)
# 1 - enable  0 - disable(default)
gEnableNanSupport=1
################ NAN feature set end #####################

hostscan_adaptive_dwell_mode=1

# Create another interface during driver load
gEnableConcurrentSTA=wlan1

#Enable/Disable dual MAC feature
# 0 - enable DBS
# 1 - disable DBS
# 2 - disable DBS for connection but keep DBS for scan
# 3 - disable DBS for connection but keep DBS scan with async
#     scan policy disabled
# 4 - enable DBS for connection as well as for scan with async
#     scan policy disabled
# 5 - enable DBS for connection but disable dbs for scan.
# 6 - enable DBS for connection but disable simultaneous scan from
#     upper layer (DBS scan remains enabled in FW).
gDualMacFeatureDisable=6

#Enable/Disable latency mode
# 0 disable
# 1 enable
wlm_latency_enable=1

# Enable/Disable NUD Tracking within driver
gEnableNUDTracking=0

# Configure hardware filter for DTIM mode
# The hardware filter is only effective in DTIM mode.
# Use this configuration to blanket drop broadcast/multicast packets at the hardware level
# without waking up the firmware
#
# Takes a bitmap of frame types to drop
#
# 0 = disable feature
# 1 = drop all broadcast frames, except ARP (default)
# 2 = drop all multicast frames, except ICMPv6
# 3 = drop all broadcast and multicast frames, except ARP and ICMPv6
gHwFilterMode=0

# Enables SNR Monitoring
# This ini is used to set default snr monitor
gEnableSNRMonitoring=1

# Control to enable TCP limit output byte
# This ini is used to enable dynamic configuration of TCP limit output bytes
# tcp_limit_output_bytes param.
# Enabling this will let driver post message to cnss-daemon,
# accordingly cnss-daemon will modify the tcp_limit_output_bytes.
gTcpLimitOutputEnable=0

# Enable Target Wake Time support.
# This ini is used to enable or disable TWT support.
enable_twt=0

# For NLO/PNO, enable MAWC based scan
# Enable/Disable the Motion Aided Wireless Connectivity based NLO using this parameter
mawc_nlo_enabled=0

# Force 1x1 when connecting to certain peer
# This INI when enabled will force 1x1 connection with certain peer.
gForce1x1Exception=0

# Enable/disable oce feature for STA
# This ini is used to enable/disable oce feature for STA
oce_sta_enable=0

# Enable/disable oce feature for SAP
# This ini is used to enable/disable oce feature for SAP
oce_sap_enable=0

# Set probe request rate
# This ini is used to set probe request rate to 5.5Mbps as per OCE requirement in 2.4G band
oce_enable_probe_req_rate=0

# HE caps Weightage to calculate best candidate
# This ini is used to increase/decrease HE caps weightage in best candidate selection.
# If AP supports HE caps, AP will get additional weightage with this param.
# Weightage will be given only if dot11mode is HE capable.
he_caps_weightage=0

# PCL Weightage to calculate best candidate
# This ini is used to increase/decrease PCL weightage in best candidate selection.
# If some APs are in PCL list, those AP will get addition weightage.
pcl_weightage=10

# Enable/disable esp feature
# This ini is used to enable/disable ESP(Estimated service parameters) IE parsing and decides
# whether firmware will include this in its scoring algo.
enable_esp_for_roam=0

# Bitmask to enable 11k offload to FW.
# This ini is used to set which of the 11k features is offloaded to FW
# Currently Neighbor Report Request is supported for offload and is enabled by default.
# B0: Offload 11k neighbor report requests
# B1-B31: Reserved
11k_offload_enable_bitmask=0

# Set channel selection logic for different concurrency combinations to DBS or inter band MCC.
# Default is DBS for STA+STA and STA+P2P.
#  0 - inter-band MCC
#  1 - DBS
#
# BIT 0: STA+STA
# BIT 1: STA+P2P
# BIT 2-31: Reserved
channel_select_logic_conc=0

# Configure BTM
# Bit 0: Enable/Disable the BTM offload. Set this to 1 will enable and 0 will disable BTM offload.
# BIT 2, 1: Action on non matching candidate with cache. If a BTM request is received from AP
#           then the candidate AP's may/may-not be present in the firmware scan cache.
#           Based on below config firmware will decide whether to forward BTM frame to host or
#           consume with firmware and proceed with Roaming to candidate AP.
#
#           00 scan and consume
#           01 no scan and forward to host
#           10, 11 reserved
# BIT 5, 4, 3: Roaming handoff decisions on multiple candidates match
#              000 match if exact BSSIDs are found
#              001 match if at least one top priority BSSID only
#              010, 011, 100, 101, 110, 111 reserved
# BIT 6: Set this to 1 will send BTM query frame and 0 not sent.
# BIT 7-31: Reserved
btm_offload_config=0

#Timer waiting for interface up from the upper layer
gInterfaceChangeWait=2000

# Set external ACS Policy to Mandatory
acs_policy=1

# Set Modulated Dtim
gEnableModulatedDTIM=2

# Enable NAN datapath
genable_nan_datapath=1

# Set MaxLIModulate Dtim
gMaxLIModulatedDTIM=6

# Used for ignore peer infrormation
gIgnorePeerErpInfo=1

# DBS Scan Selection
gdbs_scan_selection=5,4,1,16,4,1

# 0 - Disallow STA+SAP SCC on LTE coex channel
# 1 - Allow STA+SAP SCC on LTE coex channel
g_sta_sap_scc_on_lte_coex_chan=1

# Tx Chain Mask for CCK
gCckChainMaskEnable=1

# Tx Chain Mask for 1SS
gTxChainMask1ss=0

# TPC power
gSelfGenFrmPwr=3

# Enable LFR3 subnet detection
gLFRSubnetDetectionEnable=0

#Enable APF in Active mode
gActiveUcBpfMode=2

# Control MC/BC active APF mode
gActiveMcBcBpfMode=1

# Enable or disable Probe Req Information Element whitelist. When enabled, IEs corresponding to bits
# set in bitmaps are allowed in probe request, all others removed while device is unassociated
# with an AP
# 1=Enable, 0=Disable (default)
g_enable_probereq_whitelist_ies=1

# ie bitmap examples: <bitmap_name>=<value> [<Allowed Information elements>]
#    g_probe_req_ie_bitmap_0=0x80000009 #[0, 3, 31]
#    g_probe_req_ie_bitmap_0=0x00000000 #[] (default)
#    g_probe_req_ie_bitmap_1=0x80000009 #[32, 35, 63]
g_probe_req_ie_bitmap_0=0x0000000B
g_probe_req_ie_bitmap_1=0x00040000
# g_probe_req_ie_bitmap_2=0x00000000
# g_probe_req_ie_bitmap_3=0x00000000
# g_probe_req_ie_bitmap_4=0x00000000
# g_probe_req_ie_bitmap_5=0x00000000
g_probe_req_ie_bitmap_6=0x20000000
# g_probe_req_ie_bitmap_7=0x00000000

# Used to specify vendor specific OUIs
gProbeReqOUIs=0050F208

# enable 11d in world mode
enable_11d_in_world_mode=1

# WLM flags setting for low level
wlm_latency_flags_low=0xc08

#Enable/Disable chain selection optimization for one chain dtim
#Min: 0
#MAX: 30
gEnableDTIMSelectionDiversity=3

# Enable/Disable rtt sta mac randomization
enable_rtt_mac_randomization=1

# Set max time for active 2G channel scan
active_max_channel_time_2g=40

# To config roaming scan policy
roaming_scan_policy=1

# Config DPTRACE
gDptraceConfig=1,6,2,126

# Enable/Disable peer unmap confirmation support in Host
gEnablePeerUnmapConfSupport=1

END

# Note: Configuration parser would not read anything past the END marker

