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

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

#Enable/disable FILS discovery for SAP
oce_enable_fils_discovery_sap=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

#Enable/disable probe request deferral as per OCE spec
oce_enable_probe_req_deferral=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

# Enable/Disable separate wifi aware interface
nan_separate_iface_support=1

# Config Thermal mitigation
gThrottleDutyCycleLevel0=0
gThrottleDutyCycleLevel1=0
gThrottleDutyCycleLevel2=10
gThrottleDutyCycleLevel3=30
gThrottleDutyCycleLevel4=50
gThrottleDutyCycleLevel5=70

# Enable/Disable conversion from SARV1 to SARV2
gEnableSARV1toSARV2=1

#This ini is used to enable/disable ESE feature
EseEnabled=1

END

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

