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

# Enable IMPS or not
gEnableImps=1

# Enable/Disable Idle Scan
gEnableIdleScan=0

# Increase sleep duration (seconds) during IMPS
# 0 implies no periodic wake up from IMPS. Periodic wakeup is
# unnecessary if Idle Scan is disabled.
gImpsModSleepTime=0

# Enable BMPS or not
gEnableBmps=1

# Enable Close Loop or not
gEnableCloseLoop=1

# Enable suspend or not
# 1: Enable standby, 2: Enable Deep sleep, 3: Enable Mcast/Bcast Filter
gEnableSuspend=3

# Phy Mode (auto, b, g, n, etc)
gDot11Mode=0

# Handoff Enable(1) Disable(0)
gEnableHandoff=0

# CSR Roaming Enable(1) Disable(0)
gRoamingTime=0

# Assigned MAC Addresses - This will be used until NV items are in place
# Each byte of MAC address is represented in Hex format as XX
Intf0MacAddress=000AF58989FF
Intf1MacAddress=000AF58989FE
Intf2MacAddress=000AF58989FD
Intf3MacAddress=000AF58989FC

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

# Enable Firmware RSSI monitoring for roaming
gEnableFWRssiMonitoring=1

# Make 1x1 the default antenna configuration
gNumRxAnt=1

# Beacon filtering frequency (unit in beacon intervals)
gNthBeaconFilter=50

# Enable WAPI or not
# WAPIIsEnabled=0

# Flags to filter Mcast and Bcast RX packets.
# Value 0: No filtering, 1: Filter all Multicast.
# 2: Filter all Broadcast. 3: Filter all Mcast and Bcast
McastBcastFilter=3

# Flag to enable Active mode offload
gEnableActiveModeOffload=1

# Flag to enable HostARPOffload feature or not
hostArpOffload=1

# Flag to enable Host IPv6 NS Offload feature or not
hostNSOffload=1

#SoftAP Related Parameters
# AP MAc addr (obsolete)
gAPMacAddr=000AF58989EF

# Enable Random BSSID
gEnableApRandomBssid=1

# 802.11n Protection flag
gEnableApProt=1

# Enable OBSS protection
gEnableApOBSSProt=0

# Enable/Disable UAPSD for SoftAP
gEnableApUapsd=1

# Fixed Rate
gFixedRate=0

# Maximum Tx power
# gTxPowerCap=30

# Fragmentation Threshold
# gFragmentationThreshold=2346

# RTS threshold
RTSThreshold=2347

# Intra-BSS forward
gDisableIntraBssFwd=0

# WMM Enable/Disable
WmmIsEnabled=0

# 802.11d support
g11dSupportEnabled=1

# CCX Support and fast transition
CcxEnabled=0
FastTransitionEnabled=1
ImplicitQosIsEnabled=1
gNeighborScanTimerPeriod=200

gNeighborLookupThreshold=76
gNeighborReassocThreshold=81

gNeighborScanChannelMinTime=20
gNeighborScanChannelMaxTime=30
gMaxNeighborReqTries=3

# Legacy (non-CCX, non-802.11r) Fast Roaming Support
# To enable, set FastRoamEnabled=1, gEnableFWRssiMonitoring=1, FastTransitionEnabled=1
# To disable, set FastRoamEnabled=0, gEnableFWRssiMonitoring=0, FastTransitionEnabled=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

#Configure the RSSI gap that will be used to partition/categorize width of
#each  individual category (aka bucket).
gRssiCatGap=5

# SAP Country code
# Default Country Code is 2 bytes, 3rd byte is optional indoor or out door.
# Example
#   US Indoor, USI
#   Korea Outdoor, KRO
#   Japan without optional byte, JP
#   France without optional byte, FR
#gAPCntryCode=USI

#Short Guard Interval Enable/disable
gShortGI20Mhz=1
gShortGI40Mhz=1

#Auto Shutdown  Value in seconds. A value of 0 means Auto shutoff is disabled
gAPAutoShutOff=0

# SAP auto channel selection configuration
# 0 = disable auto channel selection
# 1 = enable auto channel selection, channel provided by supplicant will be ignored
gApAutoChannelSelection=0

# Listen Energy Detect Mode Configuration
# Valid values 0-128
# 128 means disable Energy Detect feature
# 0-9 are threshold code and 7 is recommended value from system if feature is to be enabled.
# 10-128 are reserved.
# The EDET threshold mapping is as follows in 3dB step:
# 0 = -60 dBm
# 1 = -63 dBm
# 2 = -66 dBm
# ...
# 7 = -81 dBm
# 8 = -84 dBm
# 9 = -87 dBm
# Note: Any of these settings are valid. Setting 0 would yield the highest power saving (in a noisy environment) at the cost of more range. The range impact is approximately #calculated as:
#
#  Range Loss  (dB)  =  EDET threshold level (dBm) + 97 dBm.
#
gEnablePhyAgcListenMode=128

#Preferred band (both or 2.4 only or 5 only)
BandCapability=0

#Forced Device Listen Interval in multiples of DTIM Period aligned to DTIM
gEnableModulatedDTIM=3

#Beacon Early Termination (1 = enable the BET feature, 0 = disable)
enableBeaconEarlyTermination=1
beaconEarlyTerminationWakeInterval=11

#Bluetooth Alternate Mac Phy (1 = enable the BT AMP feature, 0 = disable)
gEnableBtAmp=0

#Preferred channel to start BT AMP AP mode (0 means, any channel)
BtAmpPreferredChannel=0

#SOFTAP Channel Range selection
gAPChannelSelectStartChannel=1
gAPChannelSelectEndChannel=11

#SOFTAP Channel Range selection Operating band
# 0:2.4GHZ 1: LOW-5GHZ 2:MID-5GHZ 3:HIGH-5GHZ 4: 4.9HZ BAND
gAPChannelSelectOperatingBand=0

#Enable Keep alive with non-zero period value
gStaKeepAlivePeriod = 25

#If set will start with active scan after driver load, otherwise will start with
#passive scan to find out the domain
gEnableBypass11d=1

#If set to 0, will not scan DFS channels
gEnableDFSChnlScan=0

# Enable logp/SSR
gEnableLogp=1

# Disable HT40
gChannelBondingMode5GHz=0

# Enable Automatic Tx Power control
gEnableAutomaticTxPowerControl=1

# Derive P2P MAC address from primary MAC address
isP2pDeviceAddrAdministrated=1

# Disable channel 165 for Indonesia
gIgnore_Chan165=1

btcStaticLenLeBt=120000
btcStaticLenLeWlan=30000

gCountryCodePriority=1

gNumChanCombinedConc=255

# TDLS configuration
gEnableTDLSSupport=1
gEnableTDLSImplicitTrigger=1
gTDLSExternalControl=1
gTDLSTxStatsPeriod=500
gTDLSTxPacketThreshold=10
gTDLSDiscoveryPeriod=20000
gTDLSMaxDiscoveryAttempt=5
gTDLSIdleTimeout=40000
gTDLSRssiHysteresis=100
gTDLSRSSITriggerThreshold=-60
gTDLSIdlePacketThreshold=5
gTDLSRSSITeardownThreshold=-70

# Enable IPv6 RA filtering
gMCAddrListEnable=1

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