From e5e4a7b14309d623e49f906066d754e2fd34f4cd Mon Sep 17 00:00:00 2001 From: Dan Pasanen Date: Mon, 13 Oct 2014 08:49:12 -0500 Subject: [PATCH] vs985: we use wcnss... Change-Id: I71439aeaaf2fb8af5f9fc0d46b9e0d2adbcc73c9 --- Android.mk | 20 ++ BoardConfig.mk | 11 + device.mk | 6 + wifi/WCNSS_cfg.dat | Bin 0 -> 10778 bytes wifi/WCNSS_qcom_cfg.ini | 421 ++++++++++++++++++++++++++++++++++++ wifi/WCNSS_qcom_wlan_nv.bin | Bin 0 -> 29816 bytes 6 files changed, 458 insertions(+) create mode 100644 wifi/WCNSS_cfg.dat create mode 100644 wifi/WCNSS_qcom_cfg.ini create mode 100644 wifi/WCNSS_qcom_wlan_nv.bin diff --git a/Android.mk b/Android.mk index 6a388c2..0495a1b 100644 --- a/Android.mk +++ b/Android.mk @@ -27,4 +27,24 @@ LOCAL_PATH := $(call my-dir) ifneq ($(filter vs985,$(TARGET_DEVICE)),) include $(call all-makefiles-under,$(LOCAL_PATH)) + +WCNSS_IMAGES := \ + wcnss.b00 wcnss.b01 wcnss.b02 wcnss.b04 wcnss.b06 \ + wcnss.b07 wcnss.b08 wcnss.b09 wcnss.mdt + +WCNSS_SYMLINKS := $(addprefix $(TARGET_OUT_VENDOR)/firmware/,$(notdir $(WCNSS_IMAGES))) +$(WCNSS_SYMLINKS): $(LOCAL_INSTALLED_MODULE) + @echo "WCNSS firmware link: $@" + @mkdir -p $(dir $@) + @rm -rf $@ + $(hide) ln -sf /firmware/wcnss/$(notdir $@) $@ + +ALL_DEFAULT_INSTALLED_MODULES += $(WCNSS_SYMLINKS) + +# Create a link for the WCNSS config file, which ends up as a writable +# version in /data/misc/wifi +$(shell mkdir -p $(TARGET_OUT)/etc/firmware/wlan/prima; \ + ln -sf /data/misc/wifi/WCNSS_qcom_cfg.ini \ + $(TARGET_OUT)/etc/firmware/wlan/prima/WCNSS_qcom_cfg.ini) + endif diff --git a/BoardConfig.mk b/BoardConfig.mk index 19ae4b9..6a3d3a0 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -28,5 +28,16 @@ BOARD_RECOVERYIMAGE_PARTITION_SIZE := 16777216 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2692743168 BOARD_USERDATAIMAGE_PARTITION_SIZE := 27325360128 +# Wifi +BOARD_HAS_QCOM_WLAN := true +BOARD_WLAN_DEVICE := qcwcn +WPA_SUPPLICANT_VERSION := VER_0_8_X +BOARD_WPA_SUPPLICANT_DRIVER := NL80211 +BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) +BOARD_HOSTAPD_PRIVATE_LIB := lib_driver_cmd_$(BOARD_WLAN_DEVICE) +TARGET_USES_WCNSS_CTRL := true +WIFI_DRIVER_FW_PATH_STA := "sta" +WIFI_DRIVER_FW_PATH_AP := "ap" + # inherit from the proprietary version -include vendor/lge/vs985/BoardConfigVendor.mk diff --git a/device.mk b/device.mk index e13c136..33c6ab8 100644 --- a/device.mk +++ b/device.mk @@ -22,5 +22,11 @@ $(call inherit-product-if-exists, vendor/lge/vs985/vs985-vendor.mk) # Overlays DEVICE_PACKAGE_OVERLAYS += $(LOCAL_PATH)/overlay +# Wifi +PRODUCT_COPY_FILES += \ + $(LOCAL_PATH)/wifi/WCNSS_cfg.dat:system/etc/firmware/wlan/prima/WCNSS_cfg.dat \ + $(LOCAL_PATH)/wifi/WCNSS_qcom_cfg.ini:system/etc/wifi/WCNSS_qcom_cfg.ini \ + $(LOCAL_PATH)/wifi/WCNSS_qcom_wlan_nv.bin:system/etc/firmware/wlan/prima/WCNSS_qcom_wlan_nv.bin + # common g3 $(call inherit-product, device/lge/g3-common/g3.mk) diff --git a/wifi/WCNSS_cfg.dat b/wifi/WCNSS_cfg.dat new file mode 100644 index 0000000000000000000000000000000000000000..46d4d7eac7cc633ebe5ab74e10d2a8f72b7ddfed GIT binary patch literal 10778 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 literal 0 HcmV?d00001 diff --git a/wifi/WCNSS_qcom_cfg.ini b/wifi/WCNSS_qcom_cfg.ini new file mode 100644 index 0000000..3449e49 --- /dev/null +++ b/wifi/WCNSS_qcom_cfg.ini @@ -0,0 +1,421 @@ +# 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 suspend or not + +# 1: Enable standby, 2: Enable Deep sleep, 3: Enable Mcast/Bcast Filter + +gEnableSuspend=3 + + +# Phy Mode (auto, b, g, n, etc) +# Valid values are 0-9, with 0 = Auto, 4 = 11n, 9 = 11ac +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 + + +# 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 abd Bcast RX packets. + +# Value 0: No filtering, 1: Filter all Multicast. + +# 2: Filter all Broadcast. 3: Filter all Mcast abd Bcast + +McastBcastFilter=0 + + +#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 + +gAPMacAddr=000AF589dcab + + +# 802.11n Protection flag + +gEnableApProt=1 + + +#Enable OBSS protection + +gEnableApOBSSProt=0 + + +#Enable/Disable UAPSD for SoftAP + +gEnableApUapsd=0 + + +# 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 +# disable 11d by cheolsook.lee@lge.com, 20121010 +g11dSupportEnabled=0 + +# 802.11h support + +g11hSupportEnabled=1 + +# CCX Support and fast transition +CcxEnabled=0 +FastTransitionEnabled=1 +ImplicitQosIsEnabled=1 +gNeighborScanTimerPeriod=200 + +gNeighborLookupThreshold=78 + +gNeighborScanChannelMinTime=20 +gNeighborScanChannelMaxTime=30 + +# Legacy (non-CCX, non-802.11r) Fast Roaming Support +# To enable, set FastRoamEnabled=1 +# To disable, set FastRoamEnabled=0 +FastRoamEnabled=1 +gEnableFWRssiMonitoring=1 +# To enable, set FastRoamEnabled=1, gEnableFWRssiMonitoring=1, FastTransitionEnabled=1 +# To disable, set FastRoamEnabled=0, gEnableFWRssiMonitoring=0, FastTransitionEnabled=0 + +#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=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 channel to start BT AMP AP mode (0 means, any channel) + +BtAmpPreferredChannel=0 + + +#Preferred band (both or 2.4 only or 5 only) + +BandCapability=0 + + +#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 + + +#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 + +#SoftAP HW mode +#eHDD_DOT11_MODE_AUTO = 0, //covers all things we support +#eHDD_DOT11_MODE_abg = 1, //11a/b/g only, no HT, no proprietary +#eHDD_DOT11_MODE_11b = 2, +#eHDD_DOT11_MODE_11g = 3, +#eHDD_DOT11_MODE_11n = 4, // 11a/b/g/n, HT 40 if gChannelBondingMode5GHz=1 +#eHDD_DOT11_MODE_11g_ONLY = 5, +#eHDD_DOT11_MODE_11n_ONLY = 6, +#eHDD_DOT11_MODE_11b_ONLY = 7, +# ifdef WLAN_FEATURE_11AC +#eHDD_DOT11_MODE_11ac_ONLY = 8, +#eHDD_DOT11_MODE_11ac = 9, +# endif +gSapDot11Mode=4 + +#Channel Bonding +gChannelBondingMode5GHz=1 + +# For Dynamic DTIM +gEnableModulatedDTIM=3 + +#Enable Keep alive with non-zero period value + +gStaKeepAlivePeriod = 30 + +#AP LINK MONITOR TIMEOUT is used for both SAP and GO mode. +#It is used to change the frequency of keep alive packets in the AP Link Monitor period which is by +#default 20s. Currently the keep alive packets are sent as an interval of 3s but after this change +#the keep alive packet frequency can be changed. + +#gApLinkMonitorPeriod = 3 + +#Enable Ap Keep Alive with non zero value in Secs +gApKeepAlivePeriod=25 + +#Enable P2P GO Keep Alive with non zero value in Secs +gGoKeepAlivePeriod=10 + +#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=1 + + +gVhtChannelWidth=2 +gEnableLogp=1 + + +# Enable Automatic Tx Power control + +gEnableAutomaticTxPowerControl=1 + +# 0 for OLPC 1 for CLPC and SCPC +gEnableCloseLoop=1 + +# Enable P2P administrated interface +isP2pDeviceAddrAdministrated=1 + +#Data Inactivity Timeout when in powersave (in ms) +gDataInactivityTimeout=200 + +# To disable MCS8/9 on only 2.5GHz(Case 01483285) +gEnableVhtFor24GHzBand=0 + +# 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 + +gEnableLpwrImgTransition=1 + +# Enable Tx beamforming +gTxBFEnable=1 + +# Enable Tx LDPC +#gTxLdpcEnable = 1 for HT mode, 2 for VHT mode,3 for both HT and VHT +gTxLdpcEnable=3 + +# Oxygen network (prop IE for IBSS) +gEnableOxygenNwk=0 +gFlexConnectPowerFactor=0 + +# Valid values are 2048,4096,8192 and so on +# Please don't use values other than the ones mentioned above +gMaxMediumTime=4096 + +# LGE_CHANGE_S, [WiFi][jaeoh.oh@lge.com], 2013-10-23, To improve running current consumption +# Set Listen Interval +gBmpsMinListenInterval=1 +gBmpsMaxListenInterval=10 +gBmpsModListenInterval=5 +gPowerUsage=Mod + +# LGE_CHANGE_S, Disable PNO feature +gPNOScanSupport=0 +# LGE_CHANGE_E, Disable PNO feature + +gScanResultAgeCount=3 + +# Disable CxM algorithm +# mwsCoexConfig1=1 // DISABLE_TDM +# mwsCoexConfig1=2 // WLAN_BACKOFF +# mwsCoexConfig1=4 // MODEM_BACKOFF +# mwsCoexConfig1=16 // DISABLE_SAR +mwsCoexConfig1=22 + +# TDLS configuration +gEnableTDLSSupport=1 +gEnableTDLSImplicitTrigger=0 +gTDLSTxStatsPeriod=5000 +gTDLSTxPacketThreshold=100 +gTDLSDiscoveryPeriod=20000 +gTDLSMaxDiscoveryAttempt=5 +gTDLSIdleTimeout=5000 +gTDLSRssiHysteresis=100 +gTDLSRSSITriggerThreshold=-75 +gTDLSIdlePacketThreshold=5 +gTDLSRSSITeardownThreshold=-75 + +END + +# Note: Configuration parser would not read anything past the END marker + diff --git a/wifi/WCNSS_qcom_wlan_nv.bin b/wifi/WCNSS_qcom_wlan_nv.bin new file mode 100644 index 0000000000000000000000000000000000000000..8ad4fdb254e3e51d20bf41c330997d561183ad32 GIT binary patch literal 29816 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 literal 0 HcmV?d00001