# 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
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

