Ver código fonte

mac80211: rebase ontop of v4.18.5

Signed-off-by: John Crispin <[email protected]>
John Crispin 7 anos atrás
pai
commit
d9eefa7a70
100 arquivos alterados com 24 adições e 11848 exclusões
  1. 24 4
      package/kernel/mac80211/Makefile
  2. 0 11
      package/kernel/mac80211/patches/007-fix-linux-verification-h.patch
  3. 0 10
      package/kernel/mac80211/patches/008-fix-genl-family-id.patch
  4. 0 34
      package/kernel/mac80211/patches/015-ipw200-mtu.patch
  5. 0 47
      package/kernel/mac80211/patches/080-ath10k_thermal_config.patch
  6. 0 111
      package/kernel/mac80211/patches/081-ath10k-calibration-variant.patch
  7. 0 36
      package/kernel/mac80211/patches/082-ath10k-suppress-Unknown-eventid-36925-warnings.patch
  8. 0 45
      package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch
  9. 0 237
      package/kernel/mac80211/patches/160-ath10k-search-all-IEs-for-variant-before-falling-back.patch
  10. 0 72
      package/kernel/mac80211/patches/300-v4.15-ath10k-fix-build-errors-with-CONFIG_PM.patch
  11. 0 37
      package/kernel/mac80211/patches/301-v4.15-mac80211-properly-free-requested-but-not-started-TX-.patch
  12. 0 25
      package/kernel/mac80211/patches/302-v4.15-mac80211-mesh-drop-frames-appearing-to-be-from-us.patch
  13. 0 60
      package/kernel/mac80211/patches/303-v4.15-0001-brcmfmac-handle-FWHALT-mailbox-indication.patch
  14. 0 133
      package/kernel/mac80211/patches/303-v4.15-0002-brcmfmac-disable-packet-filtering-in-promiscuous-mod.patch
  15. 0 133
      package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch
  16. 0 31
      package/kernel/mac80211/patches/303-v4.15-0004-brcmfmac-use-msecs_to_jiffies-instead-of-calculation.patch
  17. 0 83
      package/kernel/mac80211/patches/303-v4.15-0005-brcmfmac-get-rid-of-brcmf_cfg80211_escan-function.patch
  18. 0 86
      package/kernel/mac80211/patches/303-v4.15-0006-brcmfmac-get-rid-of-struct-brcmf_cfg80211_info-activ.patch
  19. 0 55
      package/kernel/mac80211/patches/303-v4.15-0007-brcmfmac-move-configuration-of-probe-request-IEs.patch
  20. 0 434
      package/kernel/mac80211/patches/304-v4.15-brcmfmac-add-CLM-download-support.patch
  21. 0 37
      package/kernel/mac80211/patches/305-v4.15-brcmfmac-change-driver-unbind-order-of-the-sdio-func.patch
  22. 0 33
      package/kernel/mac80211/patches/306-v4.15-brcmfmac-Avoid-build-error-with-make-W-1.patch
  23. 0 40
      package/kernel/mac80211/patches/307-v4.15-brcmfmac-fix-CLM-load-error-for-legacy-chips-when-us.patch
  24. 0 103
      package/kernel/mac80211/patches/308-v4.16-0001-ath9k-move-spectral-scan-support-under-a-separate-co.patch
  25. 0 91
      package/kernel/mac80211/patches/309-v4.16-0002-ath10k-move-spectral-scan-support-under-a-separate-c.patch
  26. 0 25
      package/kernel/mac80211/patches/310-v4.16-ath9k-discard-undersized-packets.patch
  27. 0 39
      package/kernel/mac80211/patches/311-v4.16-0001-brcmfmac-Fix-parameter-order-in-brcmf_sdiod_f0_write.patch
  28. 0 105
      package/kernel/mac80211/patches/311-v4.16-0002-brcmfmac-Register-sizes-on-hardware-are-not-dependen.patch
  29. 0 179
      package/kernel/mac80211/patches/311-v4.16-0003-brcmfmac-Split-brcmf_sdiod_regrw_helper-up.patch
  30. 0 62
      package/kernel/mac80211/patches/311-v4.16-0004-brcmfmac-Clean-up-brcmf_sdiod_set_sbaddr_window.patch
  31. 0 91
      package/kernel/mac80211/patches/311-v4.16-0005-brcmfmac-Remove-dead-IO-code.patch
  32. 0 61
      package/kernel/mac80211/patches/311-v4.16-0006-brcmfmac-Remove-bandaid-for-SleepCSR.patch
  33. 0 344
      package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch
  34. 0 28
      package/kernel/mac80211/patches/311-v4.16-0008-brcmfmac-Fix-asymmetric-IO-functions.patch
  35. 0 53
      package/kernel/mac80211/patches/311-v4.16-0009-brcmfmac-Remove-noisy-debugging.patch
  36. 0 58
      package/kernel/mac80211/patches/311-v4.16-0010-brcmfmac-Rename-bcmerror-to-err.patch
  37. 0 143
      package/kernel/mac80211/patches/312-v4.16-0001-brcmfmac-Split-brcmf_sdiod_buffrw-function-up.patch
  38. 0 34
      package/kernel/mac80211/patches/312-v4.16-0002-brcmfmac-whitespace-fixes-in-brcmf_sdiod_send_buf.patch
  39. 0 36
      package/kernel/mac80211/patches/312-v4.16-0003-brcmfmac-Clarify-if-using-braces.patch
  40. 0 831
      package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch
  41. 0 59
      package/kernel/mac80211/patches/312-v4.16-0005-brcmfmac-Tidy-register-definitions-a-little.patch
  42. 0 190
      package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch
  43. 0 32
      package/kernel/mac80211/patches/312-v4.16-0007-brcmfmac-remove-unnecessary-call-to-brcmf_sdiod_set_.patch
  44. 0 134
      package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch
  45. 0 26
      package/kernel/mac80211/patches/312-v4.16-0009-brcmfmac-Remove-unused-macro.patch
  46. 0 128
      package/kernel/mac80211/patches/312-v4.16-0010-brcmfmac-Remove-repeated-calls-to-brcmf_chip_get_cor.patch
  47. 0 44
      package/kernel/mac80211/patches/313-v4.16-0001-brcmfmac-enlarge-buffer-size-of-caps-to-512-bytes.patch
  48. 0 227
      package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch
  49. 0 33
      package/kernel/mac80211/patches/314-v4.16-0002-brcmfmac-Rename-buscore-to-core-for-consistency.patch
  50. 0 82
      package/kernel/mac80211/patches/314-v4.16-0003-brcmfmac-stabilise-the-value-of-sbwad-in-use-for-som.patch
  51. 0 45
      package/kernel/mac80211/patches/314-v4.16-0004-brcmfmac-Correctly-handle-accesses-to-SDIO-func0.patch
  52. 0 111
      package/kernel/mac80211/patches/314-v4.16-0005-brcmfmac-Remove-func0-from-function-array.patch
  53. 0 40
      package/kernel/mac80211/patches/314-v4.16-0006-brcmfmac-More-efficient-and-slightly-easier-to-read-.patch
  54. 0 347
      package/kernel/mac80211/patches/314-v4.16-0007-brcmfmac-Replace-function-index-with-function-pointe.patch
  55. 0 53
      package/kernel/mac80211/patches/314-v4.16-0008-brcmfmac-Clean-up-interrupt-macros.patch
  56. 0 27
      package/kernel/mac80211/patches/315-v4.16-0001-brcmfmac-Support-43455-save-restore-SR-feature-if-FW.patch
  57. 0 1043
      package/kernel/mac80211/patches/316-v4.16-0001-brcmfmac-Remove-array-of-functions.patch
  58. 0 31
      package/kernel/mac80211/patches/316-v4.16-0002-brcmfmac-add-comment-block-in-brcmf_sdio_buscore_rea.patch
  59. 0 137
      package/kernel/mac80211/patches/316-v4.16-0003-brcmfmac-rename-brcmf_sdiod_buff_-read-write-functio.patch
  60. 0 59
      package/kernel/mac80211/patches/317-v4.16-0001-brcmfmac-Use-zeroing-memory-allocator-than-allocator.patch
  61. 0 26
      package/kernel/mac80211/patches/318-v4.17-mac80211-round-IEEE80211_TX_STATUS_HEADROOM-up-to-mu.patch
  62. 0 21
      package/kernel/mac80211/patches/319-v4.17-0001-mac80211-drop-frames-with-unexpected-DS-bits-from-fa.patch
  63. 0 25
      package/kernel/mac80211/patches/319-v4.17-0002-mac80211-support-AP-4-addr-mode-fast-rx.patch
  64. 0 53
      package/kernel/mac80211/patches/319-v4.17-0003-mac80211-support-fast-rx-with-incompatible-PS-capabi.patch
  65. 0 34
      package/kernel/mac80211/patches/319-v4.17-0004-mac80211-support-station-4-addr-mode-fast-rx.patch
  66. 0 256
      package/kernel/mac80211/patches/320-v4.17-mac80211-support-A-MSDU-in-fast-rx.patch
  67. 0 68
      package/kernel/mac80211/patches/321-v4.16-0001-brcmfmac-assure-bcdc-dcmd-api-does-not-return-value-.patch
  68. 0 186
      package/kernel/mac80211/patches/321-v4.16-0002-brcmfmac-separate-firmware-errors-from-i-o-errors.patch
  69. 0 92
      package/kernel/mac80211/patches/322-v4.16-0001-brcmfmac-add-possibility-to-obtain-firmware-error.patch
  70. 0 64
      package/kernel/mac80211/patches/322-v4.16-0002-brcmfmac-fix-P2P_DEVICE-ethernet-address-generation.patch
  71. 0 157
      package/kernel/mac80211/patches/323-v4.16-0001-brcmfmac-drop-Inter-Access-Point-Protocol-packets-by.patch
  72. 0 29
      package/kernel/mac80211/patches/324-v4.16-0001-brcmfmac-Fix-check-for-ISO3166-code.patch
  73. 0 45
      package/kernel/mac80211/patches/325-v4.17-0001-brcmfmac-move-brcmf_bus_preinit-call-just-after-chan.patch
  74. 0 69
      package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch
  75. 0 106
      package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch
  76. 0 41
      package/kernel/mac80211/patches/325-v4.17-0004-brcmfmac-usb-call-brcmf_usb_up-during-brcmf_bus_prei.patch
  77. 0 130
      package/kernel/mac80211/patches/325-v4.17-0005-brcmfmac-move-brcmf_attach-function-in-core.c.patch
  78. 0 190
      package/kernel/mac80211/patches/325-v4.17-0006-brcmfmac-remove-brcmf_bus_started-from-bus-api.patch
  79. 0 64
      package/kernel/mac80211/patches/325-v4.17-0007-brcmfmac-change-log-level-for-some-low-level-sdio-fu.patch
  80. 0 126
      package/kernel/mac80211/patches/325-v4.17-0008-brcmfmac-remove-duplicate-pointer-variable-from-brcm.patch
  81. 0 27
      package/kernel/mac80211/patches/326-v4.17-0001-brcmfmac-reject-too-long-PSK.patch
  82. 0 31
      package/kernel/mac80211/patches/327-v4.17-0001-brcmfmac-do-not-convert-linux-error-to-firmware-erro.patch
  83. 0 203
      package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch
  84. 0 69
      package/kernel/mac80211/patches/327-v4.17-0003-brcmfmac-use-brcmf_chip_name-for-consistency.patch
  85. 0 452
      package/kernel/mac80211/patches/327-v4.17-0004-brcmfmac-allocate-struct-brcmf_pub-instance-using-wi.patch
  86. 0 349
      package/kernel/mac80211/patches/327-v4.17-0005-brcmfmac-use-wiphy-debugfs-dir-entry.patch
  87. 0 286
      package/kernel/mac80211/patches/327-v4.17-0006-brcmfmac-derive-firmware-filenames-from-basename-map.patch
  88. 0 574
      package/kernel/mac80211/patches/327-v4.17-0007-brcmfmac-pass-struct-in-brcmf_fw_get_firmwares.patch
  89. 0 328
      package/kernel/mac80211/patches/327-v4.17-0008-brcmfmac-introduce-brcmf_fw_alloc_request-function.patch
  90. 0 231
      package/kernel/mac80211/patches/327-v4.17-0009-brcmfmac-add-extension-to-.get_fwname-callbacks.patch
  91. 0 92
      package/kernel/mac80211/patches/327-v4.17-0010-brcmfmac-get-rid-of-brcmf_fw_map_chip_to_name.patch
  92. 0 44
      package/kernel/mac80211/patches/327-v4.17-0011-brcmfmac-get-rid-of-brcmf_fw_get_full_name.patch
  93. 0 23
      package/kernel/mac80211/patches/327-v4.17-0012-brcmfmac-add-kerneldoc-for-struct-brcmf_bus-msgbuf.patch
  94. 0 81
      package/kernel/mac80211/patches/328-v4.17-0001-brcmfmac-fix-firmware-request-processing-if-nvram-lo.patch
  95. 0 48
      package/kernel/mac80211/patches/329-v4.18-0001-brcmfmac-add-support-for-BCM4366E-chipset.patch
  96. 0 34
      package/kernel/mac80211/patches/330-v4.18-0001-brcmfmac-check-p2pdev-mac-address-uniqueness.patch
  97. 0 76
      package/kernel/mac80211/patches/330-v4.18-0002-brcmfmac-reports-boottime_ns-while-informing-bss.patch
  98. 0 43
      package/kernel/mac80211/patches/330-v4.18-0003-brcmfmac-use-nl80211_band-directly-to-get-ieee80211-.patch
  99. 0 76
      package/kernel/mac80211/patches/330-v4.18-0004-brcmfmac-constify-firmware-mapping-tables.patch
  100. 0 74
      package/kernel/mac80211/patches/330-v4.18-0005-brcmfmac-add-hostready-indication.patch

+ 24 - 4
package/kernel/mac80211/Makefile

@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=2017-11-01
-PKG_RELEASE:=9
+PKG_VERSION:=v4.18.5
+PKG_RELEASE:=1
 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
-PKG_HASH:=8437ab7886b988c8152e7a4db30b7f41009e49a3b2cb863edd05da1ecd7eb05a
+PKG_HASH:=9c13660e98b9397260266f98c9db76bdad2b48462cb376b5862dfbd18369edf2
 
 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
@@ -1116,7 +1116,7 @@ endef
 define KernelPackage/mt7601u
   $(call KernelPackage/mac80211/Default)
   TITLE:=MT7601U-based USB dongles Wireless Driver
-  DEPENDS+= +kmod-mac80211 +@DRIVER_11N_SUPPORT @USB_SUPPORT +kmod-usb-core +mt7601u-firmware
+  DEPENDS+= @BROKEN +kmod-mac80211 +@DRIVER_11N_SUPPORT @USB_SUPPORT +kmod-usb-core +mt7601u-firmware
   FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
   AUTOLOAD:=$(call AutoProbe,mt7601u)
 endef
@@ -1839,6 +1839,26 @@ ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
   endif
 endif
 
+define Build/Patch
+	$(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/build,build/)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/subsys,subsys/)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/ath,ath/)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/rt2x00,rt2x00/)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/mwl,mwl/)
+	$(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/brcm,brcm/)
+	$(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used)
+endef
+
+define Quilt/Refresh/Package
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/build,build/)
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/subsys,subsys/)
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/ath,ath/)
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/rt2x00,rt2x00/)
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/mwl,mwl/)
+	$(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR)/brcm,brcm/)
+endef
+
 define Build/Compile
 	$(SH_FUNC) var2file "$(call shvar,mac80211_config)" $(PKG_BUILD_DIR)/.config
 	$(MAKE) $(MAKE_OPTS) allnoconfig

+ 0 - 11
package/kernel/mac80211/patches/007-fix-linux-verification-h.patch

@@ -1,11 +0,0 @@
---- a/backport-include/linux/verification.h
-+++ b/backport-include/linux/verification.h
-@@ -1,7 +1,7 @@
- #ifndef __BP_VERIFICATION_H
- #define __BP_VERIFICATION_H
- #include <linux/version.h>
--#ifndef CPTCFG_BPAUTO_BUILD_SYSTEM_DATA_VERIFICATION
-+#if LINUX_VERSION_IS_GEQ(4,7,0) && !defined(CPTCFG_BPAUTO_BUILD_SYSTEM_DATA_VERIFICATION)
- #include_next <linux/verification.h>
- #else
- #include <linux/key.h>

+ 0 - 10
package/kernel/mac80211/patches/008-fix-genl-family-id.patch

@@ -1,10 +0,0 @@
---- a/compat/backport-4.12.c
-+++ b/compat/backport-4.12.c
-@@ -224,6 +224,7 @@ int bp_extack_genl_register_family(struc
- 	}
- 
- 	/* copy this since the family might access it directly */
-+	family->id = copy->family.id;
- 	family->attrbuf = copy->family.attrbuf;
- 	family->mcgrp_offset = copy->family.mcgrp_offset;
- 

+ 0 - 34
package/kernel/mac80211/patches/015-ipw200-mtu.patch

@@ -1,34 +0,0 @@
---- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
-@@ -11506,6 +11506,15 @@ static const struct attribute_group ipw_
- 	.attrs = ipw_sysfs_entries,
- };
- 
-+#if LINUX_VERSION_IS_LESS(4,10,0)
-+static int __change_mtu(struct net_device *ndev, int new_mtu){
-+	if (new_mtu < 68 || new_mtu > LIBIPW_DATA_LEN)
-+		return -EINVAL;
-+	ndev->mtu = new_mtu;
-+	return 0;
-+}
-+#endif
-+
- #ifdef CPTCFG_IPW2200_PROMISCUOUS
- static int ipw_prom_open(struct net_device *dev)
- {
-@@ -11554,15 +11563,6 @@ static netdev_tx_t ipw_prom_hard_start_x
- 	return NETDEV_TX_OK;
- }
- 
--#if LINUX_VERSION_IS_LESS(4,10,0)
--static int __change_mtu(struct net_device *ndev, int new_mtu){
--	if (new_mtu < 68 || new_mtu > LIBIPW_DATA_LEN)
--		return -EINVAL;
--	ndev->mtu = new_mtu;
--	return 0;
--}
--#endif
--
- static const struct net_device_ops ipw_prom_netdev_ops = {
- #if LINUX_VERSION_IS_LESS(4,10,0)
- 	.ndo_change_mtu = __change_mtu,

+ 0 - 47
package/kernel/mac80211/patches/080-ath10k_thermal_config.patch

@@ -1,47 +0,0 @@
---- a/drivers/net/wireless/ath/ath10k/Kconfig
-+++ b/drivers/net/wireless/ath/ath10k/Kconfig
-@@ -65,6 +65,12 @@ config ATH10K_TRACING
- 	---help---
- 	  Select this to ath10k use tracing infrastructure.
- 
-+config ATH10K_THERMAL
-+	bool "Atheros ath10k thermal monitoring support"
-+	depends on THERMAL
-+	---help---
-+	  Select this to ath10k use hwmon for thermal measurement.
-+
- config ATH10K_DFS_CERTIFIED
- 	bool "Atheros DFS support for certified platforms"
- 	depends on ATH10K && CFG80211_CERTIFICATION_ONUS
---- a/drivers/net/wireless/ath/ath10k/Makefile
-+++ b/drivers/net/wireless/ath/ath10k/Makefile
-@@ -17,7 +17,7 @@ ath10k_core-y += mac.o \
- ath10k_core-$(CPTCFG_ATH10K_DEBUGFS) += spectral.o
- ath10k_core-$(CPTCFG_NL80211_TESTMODE) += testmode.o
- ath10k_core-$(CPTCFG_ATH10K_TRACING) += trace.o
--ath10k_core-$(CONFIG_THERMAL) += thermal.o
-+ath10k_core-$(CPTCFG_ATH10K_THERMAL) += thermal.o
- ath10k_core-$(CPTCFG_MAC80211_DEBUGFS) += debugfs_sta.o
- ath10k_core-$(CONFIG_PM) += wow.o
- 
---- a/drivers/net/wireless/ath/ath10k/thermal.h
-+++ b/drivers/net/wireless/ath/ath10k/thermal.h
-@@ -36,7 +36,7 @@ struct ath10k_thermal {
- 	int temperature;
- };
- 
--#if IS_REACHABLE(CONFIG_THERMAL)
-+#if IS_REACHABLE(CPTCFG_ATH10K_THERMAL)
- int ath10k_thermal_register(struct ath10k *ar);
- void ath10k_thermal_unregister(struct ath10k *ar);
- void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
---- a/local-symbols
-+++ b/local-symbols
-@@ -139,6 +139,7 @@ ATH10K_SDIO=
- ATH10K_USB=
- ATH10K_DEBUG=
- ATH10K_DEBUGFS=
-+ATH10K_THERMAL=
- ATH10K_TRACING=
- ATH10K_DFS_CERTIFIED=
- WCN36XX=

+ 0 - 111
package/kernel/mac80211/patches/081-ath10k-calibration-variant.patch

@@ -1,111 +0,0 @@
-From d06f26c5c8a41f246a9c40862a77a55725cedbd3 Mon Sep 17 00:00:00 2001
-From: Sven Eckelmann <[email protected]>
-Date: Fri, 8 Dec 2017 11:37:42 +0100
-Subject: ath10k: search DT for qcom,ath10k-calibration-variant
-
-Board Data File (BDF) is loaded upon driver boot-up procedure. The right
-board data file is identified on QCA4019 using bus, bmi-chip-id and
-bmi-board-id.
-
-The problem, however, can occur when the (default) board data file cannot
-fulfill with the vendor requirements and it is necessary to use a different
-board data file.
-
-This problem was solved for SMBIOS by adding a special SMBIOS type 0xF8.
-Something similar has to be provided for systems without SMBIOS but with
-device trees. No solution was specified by QCA and therefore a new one has
-to be found for ath10k.
-
-The device tree requires addition strings to define the variant name
-
-    wifi@a000000 {
-    	status = "okay";
-    	qcom,ath10k-calibration-variant = "RT-AC58U";
-    };
-
-    wifi@a800000 {
-    	status = "okay";
-    	qcom,ath10k-calibration-variant = "RT-AC58U";
-    };
-
-This would create the boarddata identifiers for the board-2.bin search
-
- *  bus=ahb,bmi-chip-id=0,bmi-board-id=16,variant=RT-AC58U
- *  bus=ahb,bmi-chip-id=0,bmi-board-id=17,variant=RT-AC58U
-
-Signed-off-by: Sven Eckelmann <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/ath/ath10k/core.c | 40 ++++++++++++++++++++++++++++------
- 1 file changed, 33 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/ath/ath10k/core.c
-+++ b/drivers/net/wireless/ath/ath10k/core.c
-@@ -860,6 +860,28 @@ static int ath10k_core_check_smbios(stru
- 	return 0;
- }
- 
-+static int ath10k_core_check_dt(struct ath10k *ar)
-+{
-+	struct device_node *node;
-+	const char *variant = NULL;
-+
-+	node = ar->dev->of_node;
-+	if (!node)
-+		return -ENOENT;
-+
-+	of_property_read_string(node, "qcom,ath10k-calibration-variant",
-+				&variant);
-+	if (!variant)
-+		return -ENODATA;
-+
-+	if (strscpy(ar->id.bdf_ext, variant, sizeof(ar->id.bdf_ext)) < 0)
-+		ath10k_dbg(ar, ATH10K_DBG_BOOT,
-+			   "bdf variant string is longer than the buffer can accommodate (variant: %s)\n",
-+			    variant);
-+
-+	return 0;
-+}
-+
- static int ath10k_download_and_run_otp(struct ath10k *ar)
- {
- 	u32 result, address = ar->hw_params.patch_load_addr;
-@@ -1231,19 +1253,19 @@ static int ath10k_core_create_board_name
- 	/* strlen(',variant=') + strlen(ar->id.bdf_ext) */
- 	char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
- 
-+	if (ar->id.bdf_ext[0] != '\0')
-+		scnprintf(variant, sizeof(variant), ",variant=%s",
-+			  ar->id.bdf_ext);
-+
- 	if (ar->id.bmi_ids_valid) {
- 		scnprintf(name, name_len,
--			  "bus=%s,bmi-chip-id=%d,bmi-board-id=%d",
-+			  "bus=%s,bmi-chip-id=%d,bmi-board-id=%d%s",
- 			  ath10k_bus_str(ar->hif.bus),
- 			  ar->id.bmi_chip_id,
--			  ar->id.bmi_board_id);
-+			  ar->id.bmi_board_id, variant);
- 		goto out;
- 	}
- 
--	if (ar->id.bdf_ext[0] != '\0')
--		scnprintf(variant, sizeof(variant), ",variant=%s",
--			  ar->id.bdf_ext);
--
- 	scnprintf(name, name_len,
- 		  "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x%s",
- 		  ath10k_bus_str(ar->hif.bus),
-@@ -2343,7 +2365,11 @@ static int ath10k_core_probe_fw(struct a
- 
- 	ret = ath10k_core_check_smbios(ar);
- 	if (ret)
--		ath10k_dbg(ar, ATH10K_DBG_BOOT, "bdf variant name not set.\n");
-+		ath10k_dbg(ar, ATH10K_DBG_BOOT, "SMBIOS bdf variant name not set.\n");
-+
-+	ret = ath10k_core_check_dt(ar);
-+	if (ret)
-+		ath10k_dbg(ar, ATH10K_DBG_BOOT, "DT bdf variant name not set.\n");
- 
- 	ret = ath10k_core_fetch_board_file(ar);
- 	if (ret) {

+ 0 - 36
package/kernel/mac80211/patches/082-ath10k-suppress-Unknown-eventid-36925-warnings.patch

@@ -1,36 +0,0 @@
-From 606204bb863fa3b0bb54929d79b4dc46338f9180 Mon Sep 17 00:00:00 2001
-From: Sathishkumar Muruganandam <[email protected]>
-Date: Tue, 27 Mar 2018 11:26:46 +0300
-Subject: [PATCH] ath10k: suppress "Unknown eventid: 36925" warnings
-
-FW has Smart Logging feature enabled by default for detecting failures
-and processing FATAL_CONDITION_EVENTID (36925 - 0x903D) back to host.
-
-Since ath10k doesn't implement the Smart Logging and FATAL CONDITION
-EVENT processing yet, suppressing the unknown event ID warning by moving
-this under ATH10K_DBG_WMI.
-
-Simulated the same issue by having associated STA powered off when
-ping flood was running from AP backbone. This triggerd STA KICKOUT
-in AP followed by FATAL CONDITION event 36925.
-
-Issue was reproduced and verified in below DUT
-------------------------------------------------
-AP mode of OpenWRT QCA9984 running 6.0.8 with FW ver 10.4-3.5.3-00053
-
-Signed-off-by: Sathishkumar Muruganandam <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/ath/ath10k/wmi.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/wireless/ath/ath10k/wmi.c
-+++ b/drivers/net/wireless/ath/ath10k/wmi.c
-@@ -5462,6 +5462,7 @@ static void ath10k_wmi_10_4_op_rx(struct
- 	case WMI_10_4_WOW_WAKEUP_HOST_EVENTID:
- 	case WMI_10_4_PEER_RATECODE_LIST_EVENTID:
- 	case WMI_10_4_WDS_PEER_EVENTID:
-+	case WMI_10_4_DEBUG_FATAL_CONDITION_EVENTID:
- 		ath10k_dbg(ar, ATH10K_DBG_WMI,
- 			   "received event id %d not implemented\n", id);
- 		break;

+ 0 - 45
package/kernel/mac80211/patches/090-Revert-rt2800-use-TXOP_BACKOFF-for-probe-frames.patch

@@ -1,45 +0,0 @@
-From patchwork Mon May 28 11:25:06 2018
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: Revert "rt2800: use TXOP_BACKOFF for probe frames"
-From: Stanislaw Gruszka <[email protected]>
-X-Patchwork-Id: 10431861
-Message-Id: <[email protected]>
-To: [email protected]
-Date: Mon, 28 May 2018 13:25:06 +0200
-
-This reverts commit fb47ada8dc3c30c8e7b415da155742b49536c61e.
-
-In some situations when we set TXOP_BACKOFF, the probe frame is
-not sent at all. What it worse then sending probe frame as part
-of AMPDU and can degrade 11n performance to 11g rates.
-
-Cc: [email protected]
-Signed-off-by: Stanislaw Gruszka <[email protected]>
----
- drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.c
-@@ -372,16 +372,15 @@ static void rt2x00queue_create_tx_descri
- 
- 	/*
- 	 * Determine IFS values
--	 * - Use TXOP_BACKOFF for probe and management frames except beacons
-+	 * - Use TXOP_BACKOFF for management frames except beacons
- 	 * - Use TXOP_SIFS for fragment bursts
- 	 * - Use TXOP_HTTXOP for everything else
- 	 *
- 	 * Note: rt2800 devices won't use CTS protection (if used)
- 	 * for frames not transmitted with TXOP_HTTXOP
- 	 */
--	if ((ieee80211_is_mgmt(hdr->frame_control) &&
--	     !ieee80211_is_beacon(hdr->frame_control)) ||
--	    (tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE))
-+	if (ieee80211_is_mgmt(hdr->frame_control) &&
-+	    !ieee80211_is_beacon(hdr->frame_control))
- 		txdesc->u.ht.txop = TXOP_BACKOFF;
- 	else if (!(tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT))
- 		txdesc->u.ht.txop = TXOP_SIFS;

+ 0 - 237
package/kernel/mac80211/patches/160-ath10k-search-all-IEs-for-variant-before-falling-back.patch

@@ -1,237 +0,0 @@
-From: Thomas Hebb <[email protected]>
-Subject: [PATCH] ath10k: search all IEs for variant before falling back
-Date: Wed, 21 Feb 2018 11:43:39 -0500
-
-commit f2593cb1b291 ("ath10k: Search SMBIOS for OEM board file
-extension") added a feature to ath10k that allows Board Data File
-(BDF) conflicts between multiple devices that use the same device IDs
-but have different calibration requirements to be resolved by allowing
-a "variant" string to be stored in SMBIOS [and later device tree, added
-by commit d06f26c5c8a4 ("ath10k: search DT for qcom,ath10k-calibration-
-variant")] that gets appended to the ID stored in board-2.bin.
-
-This original patch had a regression, however. Namely that devices with
-a variant present in SMBIOS that didn't need custom BDFs could no longer
-find the default BDF, which has no variant appended. The patch was
-reverted and re-applied with a fix for this issue in commit 1657b8f84ed9
-("search SMBIOS for OEM board file extension").
-
-But the fix to fall back to a default BDF introduced another issue: the
-driver currently parses IEs in board-2.bin one by one, and for each one
-it first checks to see if it matches the ID with the variant appended.
-If it doesn't, it checks to see if it matches the "fallback" ID with no
-variant. If a matching BDF is found at any point during this search, the
-search is terminated and that BDF is used. The issue is that it's very
-possible (and is currently the case for board-2.bin files present in the
-ath10k-firmware repository) for the default BDF to occur in an earlier
-IE than the variant-specific BDF. In this case, the current code will
-happily choose the default BDF even though a better-matching BDF is
-present later in the file.
-
-This patch fixes the issue by first searching the entire file for the ID
-with variant, and searching for the fallback ID only if that search
-fails. It also includes some code cleanup in the area, as
-ath10k_core_fetch_board_data_api_n() no longer does its own string
-mangling to remove the variant from an ID, instead leaving that job to a
-new flag passed to ath10k_core_create_board_name().
-
-I've tested this patch on a QCA4019 and verified that the driver behaves
-correctly for 1) both fallback and variant BDFs present, 2) only fallback
-BDF present, and 3) no matching BDFs present.
-
-Fixes: 1657b8f84ed9 ("ath10k: search SMBIOS for OEM board file extension")
-Signed-off-by: Thomas Hebb <[email protected]>
----
- drivers/net/wireless/ath/ath10k/core.c | 134 ++++++++++++++++++---------------
- 1 file changed, 72 insertions(+), 62 deletions(-)
-
---- a/drivers/net/wireless/ath/ath10k/core.c
-+++ b/drivers/net/wireless/ath/ath10k/core.c
-@@ -1132,14 +1132,61 @@ out:
- 	return ret;
- }
- 
-+static int ath10k_core_search_bd(struct ath10k *ar,
-+				 const char *boardname,
-+				 const u8 *data,
-+				 size_t len)
-+{
-+	size_t ie_len;
-+	struct ath10k_fw_ie *hdr;
-+	int ret = -ENOENT, ie_id;
-+
-+	while (len > sizeof(struct ath10k_fw_ie)) {
-+		hdr = (struct ath10k_fw_ie *)data;
-+		ie_id = le32_to_cpu(hdr->id);
-+		ie_len = le32_to_cpu(hdr->len);
-+
-+		len -= sizeof(*hdr);
-+		data = hdr->data;
-+
-+		if (len < ALIGN(ie_len, 4)) {
-+			ath10k_err(ar, "invalid length for board ie_id %d ie_len %zu len %zu\n",
-+				   ie_id, ie_len, len);
-+			return -EINVAL;
-+		}
-+
-+		switch (ie_id) {
-+		case ATH10K_BD_IE_BOARD:
-+			ret = ath10k_core_parse_bd_ie_board(ar, data, ie_len,
-+							    boardname);
-+			if (ret == -ENOENT)
-+				/* no match found, continue */
-+				break;
-+
-+			/* either found or error, so stop searching */
-+			goto out;
-+		}
-+
-+		/* jump over the padding */
-+		ie_len = ALIGN(ie_len, 4);
-+
-+		len -= ie_len;
-+		data += ie_len;
-+	}
-+
-+out:
-+	/* return result of parse_bd_ie_board() or -ENOENT */
-+	return ret;
-+}
-+
- static int ath10k_core_fetch_board_data_api_n(struct ath10k *ar,
- 					      const char *boardname,
-+					      const char *fallback_boardname,
- 					      const char *filename)
- {
--	size_t len, magic_len, ie_len;
--	struct ath10k_fw_ie *hdr;
-+	size_t len, magic_len;
- 	const u8 *data;
--	int ret, ie_id;
-+	int ret;
- 
- 	ar->normal_mode_fw.board = ath10k_fetch_fw_file(ar,
- 							ar->hw_params.fw.dir,
-@@ -1177,69 +1224,23 @@ static int ath10k_core_fetch_board_data_
- 	data += magic_len;
- 	len -= magic_len;
- 
--	while (len > sizeof(struct ath10k_fw_ie)) {
--		hdr = (struct ath10k_fw_ie *)data;
--		ie_id = le32_to_cpu(hdr->id);
--		ie_len = le32_to_cpu(hdr->len);
--
--		len -= sizeof(*hdr);
--		data = hdr->data;
--
--		if (len < ALIGN(ie_len, 4)) {
--			ath10k_err(ar, "invalid length for board ie_id %d ie_len %zu len %zu\n",
--				   ie_id, ie_len, len);
--			ret = -EINVAL;
--			goto err;
--		}
-+	/* attempt to find boardname in the IE list */
-+	ret = ath10k_core_search_bd(ar, boardname, data, len);
- 
--		switch (ie_id) {
--		case ATH10K_BD_IE_BOARD:
--			ret = ath10k_core_parse_bd_ie_board(ar, data, ie_len,
--							    boardname);
--			if (ret == -ENOENT && ar->id.bdf_ext[0] != '\0') {
--				/* try default bdf if variant was not found */
--				char *s, *v = ",variant=";
--				char boardname2[100];
--
--				strlcpy(boardname2, boardname,
--					sizeof(boardname2));
--
--				s = strstr(boardname2, v);
--				if (s)
--					*s = '\0';  /* strip ",variant=%s" */
--
--				ret = ath10k_core_parse_bd_ie_board(ar, data,
--								    ie_len,
--								    boardname2);
--			}
-+	/* if we didn't find it and have a fallback name, try that */
-+	if (ret == -ENOENT && fallback_boardname)
-+		ret = ath10k_core_search_bd(ar, fallback_boardname, data, len);
- 
--			if (ret == -ENOENT)
--				/* no match found, continue */
--				break;
--			else if (ret)
--				/* there was an error, bail out */
--				goto err;
--
--			/* board data found */
--			goto out;
--		}
--
--		/* jump over the padding */
--		ie_len = ALIGN(ie_len, 4);
--
--		len -= ie_len;
--		data += ie_len;
--	}
--
--out:
--	if (!ar->normal_mode_fw.board_data || !ar->normal_mode_fw.board_len) {
-+	if (ret == -ENOENT) {
- 		ath10k_err(ar,
- 			   "failed to fetch board data for %s from %s/%s\n",
- 			   boardname, ar->hw_params.fw.dir, filename);
- 		ret = -ENODATA;
--		goto err;
- 	}
- 
-+	if (ret)
-+		goto err;
-+
- 	return 0;
- 
- err:
-@@ -1248,12 +1249,12 @@ err:
- }
- 
- static int ath10k_core_create_board_name(struct ath10k *ar, char *name,
--					 size_t name_len)
-+					 size_t name_len, bool with_variant)
- {
- 	/* strlen(',variant=') + strlen(ar->id.bdf_ext) */
- 	char variant[9 + ATH10K_SMBIOS_BDF_EXT_STR_LENGTH] = { 0 };
- 
--	if (ar->id.bdf_ext[0] != '\0')
-+	if (with_variant && ar->id.bdf_ext[0] != '\0')
- 		scnprintf(variant, sizeof(variant), ",variant=%s",
- 			  ar->id.bdf_ext);
- 
-@@ -1279,17 +1280,26 @@ out:
- 
- static int ath10k_core_fetch_board_file(struct ath10k *ar)
- {
--	char boardname[100];
-+	char boardname[100], fallback_boardname[100];
- 	int ret;
- 
--	ret = ath10k_core_create_board_name(ar, boardname, sizeof(boardname));
-+	ret = ath10k_core_create_board_name(ar, boardname,
-+					    sizeof(boardname), true);
- 	if (ret) {
- 		ath10k_err(ar, "failed to create board name: %d", ret);
- 		return ret;
- 	}
- 
-+	ret = ath10k_core_create_board_name(ar, fallback_boardname,
-+					    sizeof(boardname), false);
-+	if (ret) {
-+		ath10k_err(ar, "failed to create fallback board name: %d", ret);
-+		return ret;
-+	}
-+
- 	ar->bd_api = 2;
- 	ret = ath10k_core_fetch_board_data_api_n(ar, boardname,
-+						 fallback_boardname,
- 						 ATH10K_BOARD_API2_FILE);
- 	if (!ret)
- 		goto success;

+ 0 - 72
package/kernel/mac80211/patches/300-v4.15-ath10k-fix-build-errors-with-CONFIG_PM.patch

@@ -1,72 +0,0 @@
-From: Brian Norris <[email protected]>
-Date: Thu, 19 Oct 2017 11:45:19 -0700
-Subject: [PATCH] ath10k: fix build errors with !CONFIG_PM
-
-Build errors have been reported with CONFIG_PM=n:
-
-drivers/net/wireless/ath/ath10k/pci.c:3416:8: error: implicit
-declaration of function 'ath10k_pci_suspend'
-[-Werror=implicit-function-declaration]
-
-drivers/net/wireless/ath/ath10k/pci.c:3428:8: error: implicit
-declaration of function 'ath10k_pci_resume'
-[-Werror=implicit-function-declaration]
-
-These are caused by the combination of the following two commits:
-
-6af1de2e4ec4 ("ath10k: mark PM functions as __maybe_unused")
-96378bd2c6cd ("ath10k: fix core PCI suspend when WoWLAN is supported but
-disabled")
-
-Both build fine on their own.
-
-But now that ath10k_pci_pm_{suspend,resume}() is compiled
-unconditionally, we should also compile ath10k_pci_{suspend,resume}()
-unconditionally.
-
-And drop the #ifdef around ath10k_pci_hif_{suspend,resume}() too; they
-are trivial (empty), so we're not saving much space by compiling them
-out. And the alternatives would be to sprinkle more __maybe_unused, or
-spread the #ifdef's further.
-
-Build tested with the following combinations:
-CONFIG_PM=y && CONFIG_PM_SLEEP=y
-CONFIG_PM=y && CONFIG_PM_SLEEP=n
-CONFIG_PM=n
-
-Fixes: 96378bd2c6cd ("ath10k: fix core PCI suspend when WoWLAN is supported but disabled")
-Fixes: 096ad2a15fd8 ("Merge branch 'ath-next'")
-Signed-off-by: Brian Norris <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
-
---- a/drivers/net/wireless/ath/ath10k/pci.c
-+++ b/drivers/net/wireless/ath/ath10k/pci.c
-@@ -2577,8 +2577,6 @@ void ath10k_pci_hif_power_down(struct at
- 	 */
- }
- 
--#ifdef CONFIG_PM
--
- static int ath10k_pci_hif_suspend(struct ath10k *ar)
- {
- 	/* Nothing to do; the important stuff is in the driver suspend. */
-@@ -2627,7 +2625,6 @@ static int ath10k_pci_resume(struct ath1
- 
- 	return ret;
- }
--#endif
- 
- static bool ath10k_pci_validate_cal(void *data, size_t size)
- {
-@@ -2782,10 +2779,8 @@ static const struct ath10k_hif_ops ath10
- 	.power_down		= ath10k_pci_hif_power_down,
- 	.read32			= ath10k_pci_read32,
- 	.write32		= ath10k_pci_write32,
--#ifdef CONFIG_PM
- 	.suspend		= ath10k_pci_hif_suspend,
- 	.resume			= ath10k_pci_hif_resume,
--#endif
- 	.fetch_cal_eeprom	= ath10k_pci_hif_fetch_cal_eeprom,
- };
- 

+ 0 - 37
package/kernel/mac80211/patches/301-v4.15-mac80211-properly-free-requested-but-not-started-TX-.patch

@@ -1,37 +0,0 @@
-From: Johannes Berg <[email protected]>
-Date: Mon, 20 Nov 2017 17:01:44 +0100
-Subject: [PATCH] mac80211: properly free requested-but-not-started TX agg
- sessions
-
-When deleting a station or otherwise tearing down all aggregation
-sessions, make sure to delete requested but not yet started ones,
-to avoid the following scenario:
-
- * session is requested, added to tid_start_tx[]
- * ieee80211_ba_session_work() runs, gets past BLOCK_BA check
- * ieee80211_sta_tear_down_BA_sessions() runs, locks &sta->ampdu_mlme.mtx,
-   e.g. while deleting the station - deleting all active sessions
- * ieee80211_ba_session_work() continues since tear down flushes it, and
-   calls ieee80211_tx_ba_session_handle_start() for the new session, arms
-   the timer for it
- * station deletion continues to __cleanup_single_sta() and frees the
-   session struct, while the timer is armed
-
-Reported-by: Fengguang Wu <[email protected]>
-Signed-off-by: Johannes Berg <[email protected]>
----
-
---- a/net/mac80211/agg-tx.c
-+++ b/net/mac80211/agg-tx.c
-@@ -330,6 +330,11 @@ int ___ieee80211_stop_tx_ba_session(stru
- 
- 	spin_lock_bh(&sta->lock);
- 
-+	/* free struct pending for start, if present */
-+	tid_tx = sta->ampdu_mlme.tid_start_tx[tid];
-+	kfree(tid_tx);
-+	sta->ampdu_mlme.tid_start_tx[tid] = NULL;
-+
- 	tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
- 	if (!tid_tx) {
- 		spin_unlock_bh(&sta->lock);

+ 0 - 25
package/kernel/mac80211/patches/302-v4.15-mac80211-mesh-drop-frames-appearing-to-be-from-us.patch

@@ -1,25 +0,0 @@
-From: Johannes Berg <[email protected]>
-Date: Thu, 4 Jan 2018 15:51:53 +0100
-Subject: [PATCH] mac80211: mesh: drop frames appearing to be from us
-
-If there are multiple mesh stations with the same MAC address,
-they will both get confused and start throwing warnings.
-
-Obviously in this case nothing can actually work anyway, so just
-drop frames that look like they're from ourselves early on.
-
-Reported-by: Gui Iribarren <[email protected]>
-Signed-off-by: Johannes Berg <[email protected]>
----
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3632,6 +3632,8 @@ static bool ieee80211_accept_frame(struc
- 		}
- 		return true;
- 	case NL80211_IFTYPE_MESH_POINT:
-+		if (ether_addr_equal(sdata->vif.addr, hdr->addr2))
-+			return false;
- 		if (multicast)
- 			return true;
- 		return ether_addr_equal(sdata->vif.addr, hdr->addr1);

+ 0 - 60
package/kernel/mac80211/patches/303-v4.15-0001-brcmfmac-handle-FWHALT-mailbox-indication.patch

@@ -1,60 +0,0 @@
-From 2fd3877b5bb7d39782c3205a1dcda02023b8514a Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:31 +0100
-Subject: [PATCH] brcmfmac: handle FWHALT mailbox indication
-
-The firmware uses a mailbox to communicate to the host what is going
-on. In the driver we validate the bit received. Various people seen
-the following message:
-
- brcmfmac: brcmf_sdio_hostmail: Unknown mailbox data content: 0x40012
-
-Bit 4 is cause of this message, but this actually indicates the firmware
-has halted. Handle this bit by giving a more meaningful error message.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -260,10 +260,11 @@ struct rte_console {
- #define I_HMB_HOST_INT	I_HMB_SW3	/* Miscellaneous Interrupt */
- 
- /* tohostmailboxdata */
--#define HMB_DATA_NAKHANDLED	1	/* retransmit NAK'd frame */
--#define HMB_DATA_DEVREADY	2	/* talk to host after enable */
--#define HMB_DATA_FC		4	/* per prio flowcontrol update flag */
--#define HMB_DATA_FWREADY	8	/* fw ready for protocol activity */
-+#define HMB_DATA_NAKHANDLED	0x0001	/* retransmit NAK'd frame */
-+#define HMB_DATA_DEVREADY	0x0002	/* talk to host after enable */
-+#define HMB_DATA_FC		0x0004	/* per prio flowcontrol update flag */
-+#define HMB_DATA_FWREADY	0x0008	/* fw ready for protocol activity */
-+#define HMB_DATA_FWHALT		0x0010	/* firmware halted */
- 
- #define HMB_DATA_FCDATA_MASK	0xff000000
- #define HMB_DATA_FCDATA_SHIFT	24
-@@ -1094,6 +1095,10 @@ static u32 brcmf_sdio_hostmail(struct br
- 			  offsetof(struct sdpcmd_regs, tosbmailbox));
- 	bus->sdcnt.f1regdata += 2;
- 
-+	/* dongle indicates the firmware has halted/crashed */
-+	if (hmb_data & HMB_DATA_FWHALT)
-+		brcmf_err("mailbox indicates firmware halted\n");
-+
- 	/* Dongle recomposed rx frames, accept them again */
- 	if (hmb_data & HMB_DATA_NAKHANDLED) {
- 		brcmf_dbg(SDIO, "Dongle reports NAK handled, expect rtx of %d\n",
-@@ -1151,6 +1156,7 @@ static u32 brcmf_sdio_hostmail(struct br
- 			 HMB_DATA_NAKHANDLED |
- 			 HMB_DATA_FC |
- 			 HMB_DATA_FWREADY |
-+			 HMB_DATA_FWHALT |
- 			 HMB_DATA_FCDATA_MASK | HMB_DATA_VERSION_MASK))
- 		brcmf_err("Unknown mailbox data content: 0x%02x\n",
- 			  hmb_data);

+ 0 - 133
package/kernel/mac80211/patches/303-v4.15-0002-brcmfmac-disable-packet-filtering-in-promiscuous-mod.patch

@@ -1,133 +0,0 @@
-From 6c219b0088158da839a5be63c5b3d96c145501d2 Mon Sep 17 00:00:00 2001
-From: Franky Lin <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:32 +0100
-Subject: [PATCH] brcmfmac: disable packet filtering in promiscuous mode
-
-Disable arp and nd offload to allow all packets sending to host.
-
-Reported-by: Phil Elwell <[email protected]>
-Tested-by: Phil Elwell <[email protected]>
-Reviewed-by: Arend Van Spriel <[email protected]>
-Signed-off-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 41 ----------------------
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 38 ++++++++++++++++++++
- .../wireless/broadcom/brcm80211/brcmfmac/core.h    |  1 +
- 3 files changed, 39 insertions(+), 41 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -472,47 +472,6 @@ send_key_to_dongle(struct brcmf_if *ifp,
- 	return err;
- }
- 
--static s32
--brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable)
--{
--	s32 err;
--	u32 mode;
--
--	if (enable)
--		mode = BRCMF_ARP_OL_AGENT | BRCMF_ARP_OL_PEER_AUTO_REPLY;
--	else
--		mode = 0;
--
--	/* Try to set and enable ARP offload feature, this may fail, then it  */
--	/* is simply not supported and err 0 will be returned                 */
--	err = brcmf_fil_iovar_int_set(ifp, "arp_ol", mode);
--	if (err) {
--		brcmf_dbg(TRACE, "failed to set ARP offload mode to 0x%x, err = %d\n",
--			  mode, err);
--		err = 0;
--	} else {
--		err = brcmf_fil_iovar_int_set(ifp, "arpoe", enable);
--		if (err) {
--			brcmf_dbg(TRACE, "failed to configure (%d) ARP offload err = %d\n",
--				  enable, err);
--			err = 0;
--		} else
--			brcmf_dbg(TRACE, "successfully configured (%d) ARP offload to 0x%x\n",
--				  enable, mode);
--	}
--
--	err = brcmf_fil_iovar_int_set(ifp, "ndoe", enable);
--	if (err) {
--		brcmf_dbg(TRACE, "failed to configure (%d) ND offload err = %d\n",
--			  enable, err);
--		err = 0;
--	} else
--		brcmf_dbg(TRACE, "successfully configured (%d) ND offload to 0x%x\n",
--			  enable, mode);
--
--	return err;
--}
--
- static void
- brcmf_cfg80211_update_proto_addr_mode(struct wireless_dev *wdev)
- {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -71,6 +71,43 @@ struct brcmf_if *brcmf_get_ifp(struct br
- 	return ifp;
- }
- 
-+void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable)
-+{
-+	s32 err;
-+	u32 mode;
-+
-+	if (enable)
-+		mode = BRCMF_ARP_OL_AGENT | BRCMF_ARP_OL_PEER_AUTO_REPLY;
-+	else
-+		mode = 0;
-+
-+	/* Try to set and enable ARP offload feature, this may fail, then it  */
-+	/* is simply not supported and err 0 will be returned                 */
-+	err = brcmf_fil_iovar_int_set(ifp, "arp_ol", mode);
-+	if (err) {
-+		brcmf_dbg(TRACE, "failed to set ARP offload mode to 0x%x, err = %d\n",
-+			  mode, err);
-+	} else {
-+		err = brcmf_fil_iovar_int_set(ifp, "arpoe", enable);
-+		if (err) {
-+			brcmf_dbg(TRACE, "failed to configure (%d) ARP offload err = %d\n",
-+				  enable, err);
-+		} else {
-+			brcmf_dbg(TRACE, "successfully configured (%d) ARP offload to 0x%x\n",
-+				  enable, mode);
-+		}
-+	}
-+
-+	err = brcmf_fil_iovar_int_set(ifp, "ndoe", enable);
-+	if (err) {
-+		brcmf_dbg(TRACE, "failed to configure (%d) ND offload err = %d\n",
-+			  enable, err);
-+	} else {
-+		brcmf_dbg(TRACE, "successfully configured (%d) ND offload to 0x%x\n",
-+			  enable, mode);
-+	}
-+}
-+
- static void _brcmf_set_multicast_list(struct work_struct *work)
- {
- 	struct brcmf_if *ifp;
-@@ -134,6 +171,7 @@ static void _brcmf_set_multicast_list(st
- 	if (err < 0)
- 		brcmf_err("Setting BRCMF_C_SET_PROMISC failed, %d\n",
- 			  err);
-+	brcmf_configure_arp_nd_offload(ifp, !cmd_value);
- }
- 
- #if IS_ENABLED(CONFIG_IPV6)
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-@@ -203,6 +203,7 @@ int brcmf_netdev_wait_pend8021x(struct b
- /* Return pointer to interface name */
- char *brcmf_ifname(struct brcmf_if *ifp);
- struct brcmf_if *brcmf_get_ifp(struct brcmf_pub *drvr, int ifidx);
-+void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable);
- int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
- struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bsscfgidx, s32 ifidx,
- 			      bool is_p2pdev, const char *name, u8 *mac_addr);

+ 0 - 133
package/kernel/mac80211/patches/303-v4.15-0003-brcmfmac-cleanup-brcmf_cfg80211_escan-function.patch

@@ -1,133 +0,0 @@
-From 8c6efda22f5f9f73fc948f517424466be01ae84d Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:33 +0100
-Subject: [PATCH] brcmfmac: cleanup brcmf_cfg80211_escan() function
-
-The function brcmf_cfg80211_escan() was always called with a non-null
-request parameter and null pointer for this_ssid parameter. Clean up
-the function removing the dead code path.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 76 ++++------------------
- 1 file changed, 11 insertions(+), 65 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -1072,18 +1072,10 @@ brcmf_do_escan(struct brcmf_if *ifp, str
- 
- static s32
- brcmf_cfg80211_escan(struct wiphy *wiphy, struct brcmf_cfg80211_vif *vif,
--		     struct cfg80211_scan_request *request,
--		     struct cfg80211_ssid *this_ssid)
-+		     struct cfg80211_scan_request *request)
- {
--	struct brcmf_if *ifp = vif->ifp;
- 	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
--	struct cfg80211_ssid *ssids;
--	u32 passive_scan;
--	bool escan_req;
--	bool spec_scan;
- 	s32 err;
--	struct brcmf_ssid_le ssid_le;
--	u32 SSID_len;
- 
- 	brcmf_dbg(SCAN, "START ESCAN\n");
- 
-@@ -1101,8 +1093,8 @@ brcmf_cfg80211_escan(struct wiphy *wiphy
- 			  cfg->scan_status);
- 		return -EAGAIN;
- 	}
--	if (test_bit(BRCMF_VIF_STATUS_CONNECTING, &ifp->vif->sme_state)) {
--		brcmf_err("Connecting: status (%lu)\n", ifp->vif->sme_state);
-+	if (test_bit(BRCMF_VIF_STATUS_CONNECTING, &vif->sme_state)) {
-+		brcmf_err("Connecting: status (%lu)\n", vif->sme_state);
- 		return -EAGAIN;
- 	}
- 
-@@ -1110,63 +1102,17 @@ brcmf_cfg80211_escan(struct wiphy *wiphy
- 	if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif)
- 		vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif;
- 
--	escan_req = false;
--	if (request) {
--		/* scan bss */
--		ssids = request->ssids;
--		escan_req = true;
--	} else {
--		/* scan in ibss */
--		/* we don't do escan in ibss */
--		ssids = this_ssid;
--	}
--
- 	cfg->scan_request = request;
- 	set_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status);
--	if (escan_req) {
--		cfg->escan_info.run = brcmf_run_escan;
--		err = brcmf_p2p_scan_prep(wiphy, request, vif);
--		if (err)
--			goto scan_out;
--
--		err = brcmf_do_escan(vif->ifp, request);
--		if (err)
--			goto scan_out;
--	} else {
--		brcmf_dbg(SCAN, "ssid \"%s\", ssid_len (%d)\n",
--			  ssids->ssid, ssids->ssid_len);
--		memset(&ssid_le, 0, sizeof(ssid_le));
--		SSID_len = min_t(u8, sizeof(ssid_le.SSID), ssids->ssid_len);
--		ssid_le.SSID_len = cpu_to_le32(0);
--		spec_scan = false;
--		if (SSID_len) {
--			memcpy(ssid_le.SSID, ssids->ssid, SSID_len);
--			ssid_le.SSID_len = cpu_to_le32(SSID_len);
--			spec_scan = true;
--		} else
--			brcmf_dbg(SCAN, "Broadcast scan\n");
--
--		passive_scan = cfg->active_scan ? 0 : 1;
--		err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PASSIVE_SCAN,
--					    passive_scan);
--		if (err) {
--			brcmf_err("WLC_SET_PASSIVE_SCAN error (%d)\n", err);
--			goto scan_out;
--		}
--		brcmf_scan_config_mpc(ifp, 0);
--		err = brcmf_fil_cmd_data_set(ifp, BRCMF_C_SCAN, &ssid_le,
--					     sizeof(ssid_le));
--		if (err) {
--			if (err == -EBUSY)
--				brcmf_dbg(INFO, "BUSY: scan for \"%s\" canceled\n",
--					  ssid_le.SSID);
--			else
--				brcmf_err("WLC_SCAN error (%d)\n", err);
--
--			brcmf_scan_config_mpc(ifp, 1);
--			goto scan_out;
--		}
--	}
-+
-+	cfg->escan_info.run = brcmf_run_escan;
-+	err = brcmf_p2p_scan_prep(wiphy, request, vif);
-+	if (err)
-+		goto scan_out;
-+
-+	err = brcmf_do_escan(vif->ifp, request);
-+	if (err)
-+		goto scan_out;
- 
- 	/* Arm scan timeout timer */
- 	mod_timer(&cfg->escan_timeout, jiffies +
-@@ -1191,7 +1137,7 @@ brcmf_cfg80211_scan(struct wiphy *wiphy,
- 	if (!check_vif_up(vif))
- 		return -EIO;
- 
--	err = brcmf_cfg80211_escan(wiphy, vif, request, NULL);
-+	err = brcmf_cfg80211_escan(wiphy, vif, request);
- 
- 	if (err)
- 		brcmf_err("scan error (%d)\n", err);

+ 0 - 31
package/kernel/mac80211/patches/303-v4.15-0004-brcmfmac-use-msecs_to_jiffies-instead-of-calculation.patch

@@ -1,31 +0,0 @@
-From df2d8388bc96c0f29d27d121f2a4cd054f8b3900 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:34 +0100
-Subject: [PATCH] brcmfmac: use msecs_to_jiffies() instead of calculation using
- HZ
-
-Minor cleanup using provided macro to convert milliseconds interval
-to jiffies in brcmf_cfg80211_escan().
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -1115,8 +1115,8 @@ brcmf_cfg80211_escan(struct wiphy *wiphy
- 		goto scan_out;
- 
- 	/* Arm scan timeout timer */
--	mod_timer(&cfg->escan_timeout, jiffies +
--			BRCMF_ESCAN_TIMER_INTERVAL_MS * HZ / 1000);
-+	mod_timer(&cfg->escan_timeout,
-+		  jiffies + msecs_to_jiffies(BRCMF_ESCAN_TIMER_INTERVAL_MS));
- 
- 	return 0;
- 

+ 0 - 83
package/kernel/mac80211/patches/303-v4.15-0005-brcmfmac-get-rid-of-brcmf_cfg80211_escan-function.patch

@@ -1,83 +0,0 @@
-From 588378f15cff285ac81c929239ccba01d7f71d50 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:35 +0100
-Subject: [PATCH] brcmfmac: get rid of brcmf_cfg80211_escan() function
-
-The function brcmf_cfg80211_escan() is only called by brcmf_cfg80211_scan()
-so there is no reason to split in two function especially since the latter
-does not do an awful lot.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 34 +++++++---------------
- 1 file changed, 10 insertions(+), 24 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -1071,13 +1071,16 @@ brcmf_do_escan(struct brcmf_if *ifp, str
- }
- 
- static s32
--brcmf_cfg80211_escan(struct wiphy *wiphy, struct brcmf_cfg80211_vif *vif,
--		     struct cfg80211_scan_request *request)
-+brcmf_cfg80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
- {
- 	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
--	s32 err;
-+	struct brcmf_cfg80211_vif *vif;
-+	s32 err = 0;
- 
--	brcmf_dbg(SCAN, "START ESCAN\n");
-+	brcmf_dbg(TRACE, "Enter\n");
-+	vif = container_of(request->wdev, struct brcmf_cfg80211_vif, wdev);
-+	if (!check_vif_up(vif))
-+		return -EIO;
- 
- 	if (test_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status)) {
- 		brcmf_err("Scanning already: status (%lu)\n", cfg->scan_status);
-@@ -1102,6 +1105,8 @@ brcmf_cfg80211_escan(struct wiphy *wiphy
- 	if (vif == cfg->p2p.bss_idx[P2PAPI_BSSCFG_DEVICE].vif)
- 		vif = cfg->p2p.bss_idx[P2PAPI_BSSCFG_PRIMARY].vif;
- 
-+	brcmf_dbg(SCAN, "START ESCAN\n");
-+
- 	cfg->scan_request = request;
- 	set_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status);
- 
-@@ -1121,31 +1126,12 @@ brcmf_cfg80211_escan(struct wiphy *wiphy
- 	return 0;
- 
- scan_out:
-+	brcmf_err("scan error (%d)\n", err);
- 	clear_bit(BRCMF_SCAN_STATUS_BUSY, &cfg->scan_status);
- 	cfg->scan_request = NULL;
- 	return err;
- }
- 
--static s32
--brcmf_cfg80211_scan(struct wiphy *wiphy, struct cfg80211_scan_request *request)
--{
--	struct brcmf_cfg80211_vif *vif;
--	s32 err = 0;
--
--	brcmf_dbg(TRACE, "Enter\n");
--	vif = container_of(request->wdev, struct brcmf_cfg80211_vif, wdev);
--	if (!check_vif_up(vif))
--		return -EIO;
--
--	err = brcmf_cfg80211_escan(wiphy, vif, request);
--
--	if (err)
--		brcmf_err("scan error (%d)\n", err);
--
--	brcmf_dbg(TRACE, "Exit\n");
--	return err;
--}
--
- static s32 brcmf_set_rts(struct net_device *ndev, u32 rts_threshold)
- {
- 	s32 err = 0;

+ 0 - 86
package/kernel/mac80211/patches/303-v4.15-0006-brcmfmac-get-rid-of-struct-brcmf_cfg80211_info-activ.patch

@@ -1,86 +0,0 @@
-From bbf35414cd23a9d7230bfd7046e1e2c26020e7eb Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:36 +0100
-Subject: [PATCH] brcmfmac: get rid of struct brcmf_cfg80211_info::active_scan
- field
-
-The field struct brcmf_cfg80211_info::active_scan is set to true upon
-initializing the driver instance, but it is never changed so simply
-get rid of it.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 10 +---------
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h |  2 --
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c      |  5 +----
- 3 files changed, 2 insertions(+), 15 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -1043,7 +1043,6 @@ brcmf_do_escan(struct brcmf_if *ifp, str
- {
- 	struct brcmf_cfg80211_info *cfg = ifp->drvr->config;
- 	s32 err;
--	u32 passive_scan;
- 	struct brcmf_scan_results *results;
- 	struct escan_info *escan = &cfg->escan_info;
- 
-@@ -1051,13 +1050,7 @@ brcmf_do_escan(struct brcmf_if *ifp, str
- 	escan->ifp = ifp;
- 	escan->wiphy = cfg->wiphy;
- 	escan->escan_state = WL_ESCAN_STATE_SCANNING;
--	passive_scan = cfg->active_scan ? 0 : 1;
--	err = brcmf_fil_cmd_int_set(ifp, BRCMF_C_SET_PASSIVE_SCAN,
--				    passive_scan);
--	if (err) {
--		brcmf_err("error (%d)\n", err);
--		return err;
--	}
-+
- 	brcmf_scan_config_mpc(ifp, 0);
- 	results = (struct brcmf_scan_results *)cfg->escan_info.escan_buf;
- 	results->version = 0;
-@@ -5767,7 +5760,6 @@ static s32 wl_init_priv(struct brcmf_cfg
- 
- 	cfg->scan_request = NULL;
- 	cfg->pwr_save = true;
--	cfg->active_scan = true;	/* we do active scan per default */
- 	cfg->dongle_up = false;		/* dongle is not up yet */
- 	err = brcmf_init_priv_mem(cfg);
- 	if (err)
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
-@@ -283,7 +283,6 @@ struct brcmf_cfg80211_wowl {
-  * @scan_status: scan activity on the dongle.
-  * @pub: common driver information.
-  * @channel: current channel.
-- * @active_scan: current scan mode.
-  * @int_escan_map: bucket map for which internal e-scan is done.
-  * @ibss_starter: indicates this sta is ibss starter.
-  * @pwr_save: indicate whether dongle to support power save mode.
-@@ -316,7 +315,6 @@ struct brcmf_cfg80211_info {
- 	unsigned long scan_status;
- 	struct brcmf_pub *pub;
- 	u32 channel;
--	bool active_scan;
- 	u32 int_escan_map;
- 	bool ibss_starter;
- 	bool pwr_save;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-@@ -692,10 +692,7 @@ static s32 brcmf_p2p_escan(struct brcmf_
- 
- 	/* determine the scan engine parameters */
- 	sparams->bss_type = DOT11_BSSTYPE_ANY;
--	if (p2p->cfg->active_scan)
--		sparams->scan_type = 0;
--	else
--		sparams->scan_type = 1;
-+	sparams->scan_type = BRCMF_SCANTYPE_ACTIVE;
- 
- 	eth_broadcast_addr(sparams->bssid);
- 	sparams->home_time = cpu_to_le32(P2PAPI_SCAN_HOME_TIME_MS);

+ 0 - 55
package/kernel/mac80211/patches/303-v4.15-0007-brcmfmac-move-configuration-of-probe-request-IEs.patch

@@ -1,55 +0,0 @@
-From bd99a3013bdc00f8fc7534c657b39616792b4467 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 8 Nov 2017 14:36:37 +0100
-Subject: [PATCH] brcmfmac: move configuration of probe request IEs
-
-The configuration of the IEs for probe requests was done in a P2P
-related function, which is not very obvious. Moving it to
-.scan callback function, ie. brcmf_cfg80211_scan().
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 5 +++++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c      | 6 ++----
- 2 files changed, 7 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -1108,6 +1108,11 @@ brcmf_cfg80211_scan(struct wiphy *wiphy,
- 	if (err)
- 		goto scan_out;
- 
-+	err = brcmf_vif_set_mgmt_ie(vif, BRCMF_VNDR_IE_PRBREQ_FLAG,
-+				    request->ie, request->ie_len);
-+	if (err)
-+		goto scan_out;
-+
- 	err = brcmf_do_escan(vif->ifp, request);
- 	if (err)
- 		goto scan_out;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-@@ -881,7 +881,7 @@ int brcmf_p2p_scan_prep(struct wiphy *wi
- {
- 	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 	struct brcmf_p2p_info *p2p = &cfg->p2p;
--	int err = 0;
-+	int err;
- 
- 	if (brcmf_p2p_scan_is_p2p_request(request)) {
- 		/* find my listen channel */
-@@ -904,9 +904,7 @@ int brcmf_p2p_scan_prep(struct wiphy *wi
- 		/* override .run_escan() callback. */
- 		cfg->escan_info.run = brcmf_p2p_run_escan;
- 	}
--	err = brcmf_vif_set_mgmt_ie(vif, BRCMF_VNDR_IE_PRBREQ_FLAG,
--				    request->ie, request->ie_len);
--	return err;
-+	return 0;
- }
- 
- 

+ 0 - 434
package/kernel/mac80211/patches/304-v4.15-brcmfmac-add-CLM-download-support.patch

@@ -1,434 +0,0 @@
-From fdd0bd88ceaecf729db103ac8836af5805dd2dc1 Mon Sep 17 00:00:00 2001
-From: Chung-Hsien Hsu <[email protected]>
-Date: Fri, 10 Nov 2017 17:27:15 +0800
-Subject: [PATCH] brcmfmac: add CLM download support
-
-The firmware for brcmfmac devices includes information regarding
-regulatory constraints. For certain devices this information is kept
-separately in a binary form that needs to be downloaded to the device.
-This patch adds support to download this so-called CLM blob file. It
-uses the same naming scheme as the other firmware files with extension
-of .clm_blob.
-
-The CLM blob file is optional. If the file does not exist, the download
-process will be bypassed. It will not affect the driver loading.
-
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Chung-Hsien Hsu <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h |  10 ++
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  | 157 +++++++++++++++++++++
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    |   2 +
- .../wireless/broadcom/brcm80211/brcmfmac/core.h    |   2 +
- .../broadcom/brcm80211/brcmfmac/fwil_types.h       |  31 ++++
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    |  19 +++
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    |  19 +++
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c |  18 +++
- 8 files changed, 258 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -71,6 +71,7 @@ struct brcmf_bus_dcmd {
-  * @wowl_config: specify if dongle is configured for wowl when going to suspend
-  * @get_ramsize: obtain size of device memory.
-  * @get_memdump: obtain device memory dump in provided buffer.
-+ * @get_fwname: obtain firmware name.
-  *
-  * This structure provides an abstract interface towards the
-  * bus specific driver. For control messages to common driver
-@@ -87,6 +88,8 @@ struct brcmf_bus_ops {
- 	void (*wowl_config)(struct device *dev, bool enabled);
- 	size_t (*get_ramsize)(struct device *dev);
- 	int (*get_memdump)(struct device *dev, void *data, size_t len);
-+	int (*get_fwname)(struct device *dev, uint chip, uint chiprev,
-+			  unsigned char *fw_name);
- };
- 
- 
-@@ -224,6 +227,13 @@ int brcmf_bus_get_memdump(struct brcmf_b
- 	return bus->ops->get_memdump(bus->dev, data, len);
- }
- 
-+static inline
-+int brcmf_bus_get_fwname(struct brcmf_bus *bus, uint chip, uint chiprev,
-+			 unsigned char *fw_name)
-+{
-+	return bus->ops->get_fwname(bus->dev, chip, chiprev, fw_name);
-+}
-+
- /*
-  * interface functions from common layer
-  */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -18,6 +18,7 @@
- #include <linux/string.h>
- #include <linux/netdevice.h>
- #include <linux/module.h>
-+#include <linux/firmware.h>
- #include <brcmu_wifi.h>
- #include <brcmu_utils.h>
- #include "core.h"
-@@ -28,6 +29,7 @@
- #include "tracepoint.h"
- #include "common.h"
- #include "of.h"
-+#include "firmware.h"
- 
- MODULE_AUTHOR("Broadcom Corporation");
- MODULE_DESCRIPTION("Broadcom 802.11 wireless LAN fullmac driver.");
-@@ -104,12 +106,140 @@ void brcmf_c_set_joinpref_default(struct
- 		brcmf_err("Set join_pref error (%d)\n", err);
- }
- 
-+static int brcmf_c_download(struct brcmf_if *ifp, u16 flag,
-+			    struct brcmf_dload_data_le *dload_buf,
-+			    u32 len)
-+{
-+	s32 err;
-+
-+	flag |= (DLOAD_HANDLER_VER << DLOAD_FLAG_VER_SHIFT);
-+	dload_buf->flag = cpu_to_le16(flag);
-+	dload_buf->dload_type = cpu_to_le16(DL_TYPE_CLM);
-+	dload_buf->len = cpu_to_le32(len);
-+	dload_buf->crc = cpu_to_le32(0);
-+	len = sizeof(*dload_buf) + len - 1;
-+
-+	err = brcmf_fil_iovar_data_set(ifp, "clmload", dload_buf, len);
-+
-+	return err;
-+}
-+
-+static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
-+{
-+	struct brcmf_bus *bus = ifp->drvr->bus_if;
-+	struct brcmf_rev_info *ri = &ifp->drvr->revinfo;
-+	u8 fw_name[BRCMF_FW_NAME_LEN];
-+	u8 *ptr;
-+	size_t len;
-+	s32 err;
-+
-+	memset(fw_name, 0, BRCMF_FW_NAME_LEN);
-+	err = brcmf_bus_get_fwname(bus, ri->chipnum, ri->chiprev, fw_name);
-+	if (err) {
-+		brcmf_err("get firmware name failed (%d)\n", err);
-+		goto done;
-+	}
-+
-+	/* generate CLM blob file name */
-+	ptr = strrchr(fw_name, '.');
-+	if (!ptr) {
-+		err = -ENOENT;
-+		goto done;
-+	}
-+
-+	len = ptr - fw_name + 1;
-+	if (len + strlen(".clm_blob") > BRCMF_FW_NAME_LEN) {
-+		err = -E2BIG;
-+	} else {
-+		strlcpy(clm_name, fw_name, len);
-+		strlcat(clm_name, ".clm_blob", BRCMF_FW_NAME_LEN);
-+	}
-+done:
-+	return err;
-+}
-+
-+static int brcmf_c_process_clm_blob(struct brcmf_if *ifp)
-+{
-+	struct device *dev = ifp->drvr->bus_if->dev;
-+	struct brcmf_dload_data_le *chunk_buf;
-+	const struct firmware *clm = NULL;
-+	u8 clm_name[BRCMF_FW_NAME_LEN];
-+	u32 chunk_len;
-+	u32 datalen;
-+	u32 cumulative_len;
-+	u16 dl_flag = DL_BEGIN;
-+	u32 status;
-+	s32 err;
-+
-+	brcmf_dbg(TRACE, "Enter\n");
-+
-+	memset(clm_name, 0, BRCMF_FW_NAME_LEN);
-+	err = brcmf_c_get_clm_name(ifp, clm_name);
-+	if (err) {
-+		brcmf_err("get CLM blob file name failed (%d)\n", err);
-+		return err;
-+	}
-+
-+	err = request_firmware(&clm, clm_name, dev);
-+	if (err) {
-+		if (err == -ENOENT) {
-+			brcmf_dbg(INFO, "continue with CLM data currently present in firmware\n");
-+			return 0;
-+		}
-+		brcmf_err("request CLM blob file failed (%d)\n", err);
-+		return err;
-+	}
-+
-+	chunk_buf = kzalloc(sizeof(*chunk_buf) + MAX_CHUNK_LEN - 1, GFP_KERNEL);
-+	if (!chunk_buf) {
-+		err = -ENOMEM;
-+		goto done;
-+	}
-+
-+	datalen = clm->size;
-+	cumulative_len = 0;
-+	do {
-+		if (datalen > MAX_CHUNK_LEN) {
-+			chunk_len = MAX_CHUNK_LEN;
-+		} else {
-+			chunk_len = datalen;
-+			dl_flag |= DL_END;
-+		}
-+		memcpy(chunk_buf->data, clm->data + cumulative_len, chunk_len);
-+
-+		err = brcmf_c_download(ifp, dl_flag, chunk_buf, chunk_len);
-+
-+		dl_flag &= ~DL_BEGIN;
-+
-+		cumulative_len += chunk_len;
-+		datalen -= chunk_len;
-+	} while ((datalen > 0) && (err == 0));
-+
-+	if (err) {
-+		brcmf_err("clmload (%zu byte file) failed (%d); ",
-+			  clm->size, err);
-+		/* Retrieve clmload_status and print */
-+		err = brcmf_fil_iovar_int_get(ifp, "clmload_status", &status);
-+		if (err)
-+			brcmf_err("get clmload_status failed (%d)\n", err);
-+		else
-+			brcmf_dbg(INFO, "clmload_status=%d\n", status);
-+		err = -EIO;
-+	}
-+
-+	kfree(chunk_buf);
-+done:
-+	release_firmware(clm);
-+	return err;
-+}
-+
- int brcmf_c_preinit_dcmds(struct brcmf_if *ifp)
- {
- 	s8 eventmask[BRCMF_EVENTING_MASK_LEN];
- 	u8 buf[BRCMF_DCMD_SMLEN];
- 	struct brcmf_rev_info_le revinfo;
- 	struct brcmf_rev_info *ri;
-+	char *clmver;
- 	char *ptr;
- 	s32 err;
- 
-@@ -148,6 +278,13 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 	}
- 	ri->result = err;
- 
-+	/* Do any CLM downloading */
-+	err = brcmf_c_process_clm_blob(ifp);
-+	if (err < 0) {
-+		brcmf_err("download CLM blob file failed, %d\n", err);
-+		goto done;
-+	}
-+
- 	/* query for 'ver' to get version info from firmware */
- 	memset(buf, 0, sizeof(buf));
- 	strcpy(buf, "ver");
-@@ -167,6 +304,26 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 	ptr = strrchr(buf, ' ') + 1;
- 	strlcpy(ifp->drvr->fwver, ptr, sizeof(ifp->drvr->fwver));
- 
-+	/* Query for 'clmver' to get CLM version info from firmware */
-+	memset(buf, 0, sizeof(buf));
-+	err = brcmf_fil_iovar_data_get(ifp, "clmver", buf, sizeof(buf));
-+	if (err) {
-+		brcmf_dbg(TRACE, "retrieving clmver failed, %d\n", err);
-+	} else {
-+		clmver = (char *)buf;
-+		/* store CLM version for adding it to revinfo debugfs file */
-+		memcpy(ifp->drvr->clmver, clmver, sizeof(ifp->drvr->clmver));
-+
-+		/* Replace all newline/linefeed characters with space
-+		 * character
-+		 */
-+		ptr = clmver;
-+		while ((ptr = strnchr(ptr, '\n', sizeof(buf))) != NULL)
-+			*ptr = ' ';
-+
-+		brcmf_dbg(INFO, "CLM version = %s\n", clmver);
-+	}
-+
- 	/* set mpc */
- 	err = brcmf_fil_iovar_int_set(ifp, "mpc", 1);
- 	if (err) {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1009,6 +1009,8 @@ static int brcmf_revinfo_read(struct seq
- 	seq_printf(s, "anarev: %u\n", ri->anarev);
- 	seq_printf(s, "nvramrev: %08x\n", ri->nvramrev);
- 
-+	seq_printf(s, "clmver: %s\n", bus_if->drvr->clmver);
-+
- 	return 0;
- }
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-@@ -141,6 +141,8 @@ struct brcmf_pub {
- 	struct notifier_block inetaddr_notifier;
- 	struct notifier_block inet6addr_notifier;
- 	struct brcmf_mp_device *settings;
-+
-+	u8 clmver[BRCMF_DCMD_SMLEN];
- };
- 
- /* forward declarations */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
-@@ -155,6 +155,21 @@
- #define BRCMF_MFP_CAPABLE		1
- #define BRCMF_MFP_REQUIRED		2
- 
-+/* MAX_CHUNK_LEN is the maximum length for data passing to firmware in each
-+ * ioctl. It is relatively small because firmware has small maximum size input
-+ * playload restriction for ioctls.
-+ */
-+#define MAX_CHUNK_LEN			1400
-+
-+#define DLOAD_HANDLER_VER		1	/* Downloader version */
-+#define DLOAD_FLAG_VER_MASK		0xf000	/* Downloader version mask */
-+#define DLOAD_FLAG_VER_SHIFT		12	/* Downloader version shift */
-+
-+#define DL_BEGIN			0x0002
-+#define DL_END				0x0004
-+
-+#define DL_TYPE_CLM			2
-+
- /* join preference types for join_pref iovar */
- enum brcmf_join_pref_types {
- 	BRCMF_JOIN_PREF_RSSI = 1,
-@@ -827,6 +842,22 @@ struct brcmf_pno_macaddr_le {
- };
- 
- /**
-+ * struct brcmf_dload_data_le - data passing to firmware for downloading
-+ * @flag: flags related to download data.
-+ * @dload_type: type of download data.
-+ * @len: length in bytes of download data.
-+ * @crc: crc of download data.
-+ * @data: download data.
-+ */
-+struct brcmf_dload_data_le {
-+	__le16 flag;
-+	__le16 dload_type;
-+	__le32 len;
-+	__le32 crc;
-+	u8 data[1];
-+};
-+
-+/**
-  * struct brcmf_pno_bssid_le - bssid configuration for PNO scan.
-  *
-  * @bssid: BSS network identifier.
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1350,6 +1350,24 @@ static int brcmf_pcie_get_memdump(struct
- 	return 0;
- }
- 
-+static int brcmf_pcie_get_fwname(struct device *dev, u32 chip, u32 chiprev,
-+				 u8 *fw_name)
-+{
-+	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-+	struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
-+	struct brcmf_pciedev_info *devinfo = buspub->devinfo;
-+	int ret = 0;
-+
-+	if (devinfo->fw_name[0] != '\0')
-+		strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
-+	else
-+		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
-+						brcmf_pcie_fwnames,
-+						ARRAY_SIZE(brcmf_pcie_fwnames),
-+						fw_name, NULL);
-+
-+	return ret;
-+}
- 
- static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
- 	.txdata = brcmf_pcie_tx,
-@@ -1359,6 +1377,7 @@ static const struct brcmf_bus_ops brcmf_
- 	.wowl_config = brcmf_pcie_wowl_config,
- 	.get_ramsize = brcmf_pcie_get_ramsize,
- 	.get_memdump = brcmf_pcie_get_memdump,
-+	.get_fwname = brcmf_pcie_get_fwname,
- };
- 
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3985,6 +3985,24 @@ brcmf_sdio_watchdog(unsigned long data)
- 	}
- }
- 
-+static int brcmf_sdio_get_fwname(struct device *dev, u32 chip, u32 chiprev,
-+				 u8 *fw_name)
-+{
-+	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-+	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
-+	int ret = 0;
-+
-+	if (sdiodev->fw_name[0] != '\0')
-+		strlcpy(fw_name, sdiodev->fw_name, BRCMF_FW_NAME_LEN);
-+	else
-+		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
-+						brcmf_sdio_fwnames,
-+						ARRAY_SIZE(brcmf_sdio_fwnames),
-+						fw_name, NULL);
-+
-+	return ret;
-+}
-+
- static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
- 	.stop = brcmf_sdio_bus_stop,
- 	.preinit = brcmf_sdio_bus_preinit,
-@@ -3995,6 +4013,7 @@ static const struct brcmf_bus_ops brcmf_
- 	.wowl_config = brcmf_sdio_wowl_config,
- 	.get_ramsize = brcmf_sdio_bus_get_ramsize,
- 	.get_memdump = brcmf_sdio_bus_get_memdump,
-+	.get_fwname = brcmf_sdio_get_fwname,
- };
- 
- static void brcmf_sdio_firmware_callback(struct device *dev, int err,
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1128,12 +1128,30 @@ static void brcmf_usb_wowl_config(struct
- 		device_set_wakeup_enable(devinfo->dev, false);
- }
- 
-+static int brcmf_usb_get_fwname(struct device *dev, u32 chip, u32 chiprev,
-+				u8 *fw_name)
-+{
-+	struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
-+	int ret = 0;
-+
-+	if (devinfo->fw_name[0] != '\0')
-+		strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
-+	else
-+		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
-+						brcmf_usb_fwnames,
-+						ARRAY_SIZE(brcmf_usb_fwnames),
-+						fw_name, NULL);
-+
-+	return ret;
-+}
-+
- static const struct brcmf_bus_ops brcmf_usb_bus_ops = {
- 	.txdata = brcmf_usb_tx,
- 	.stop = brcmf_usb_down,
- 	.txctl = brcmf_usb_tx_ctlpkt,
- 	.rxctl = brcmf_usb_rx_ctlpkt,
- 	.wowl_config = brcmf_usb_wowl_config,
-+	.get_fwname = brcmf_usb_get_fwname,
- };
- 
- static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)

+ 0 - 37
package/kernel/mac80211/patches/305-v4.15-brcmfmac-change-driver-unbind-order-of-the-sdio-func.patch

@@ -1,37 +0,0 @@
-From 5c3de777bdaf48bd0cfb43097c0d0fb85056cab7 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Sat, 25 Nov 2017 21:39:25 +0100
-Subject: [PATCH] brcmfmac: change driver unbind order of the sdio function
- devices
-
-In the function brcmf_sdio_firmware_callback() the driver is
-unbound from the sdio function devices in the error path.
-However, the order in which it is done resulted in a use-after-free
-issue (see brcmf_ops_sdio_remove() in bcmsdh.c). Hence change
-the order and first unbind sdio function #2 device and then
-unbind sdio function #1 device.
-
-Cc: [email protected] # v4.12.x
-Fixes: 7a51461fc2da ("brcmfmac: unbind all devices upon failure in firmware callback")
-Reported-by: Stefan Wahren <[email protected]>
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4121,8 +4121,8 @@ release:
- 	sdio_release_host(sdiodev->func[1]);
- fail:
- 	brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
--	device_release_driver(dev);
- 	device_release_driver(&sdiodev->func[2]->dev);
-+	device_release_driver(dev);
- }
- 
- struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)

+ 0 - 33
package/kernel/mac80211/patches/306-v4.15-brcmfmac-Avoid-build-error-with-make-W-1.patch

@@ -1,33 +0,0 @@
-From 51ef7925e10688c57186d438e784532e063492e4 Mon Sep 17 00:00:00 2001
-From: Andy Shevchenko <[email protected]>
-Date: Thu, 23 Nov 2017 17:57:04 +0200
-Subject: [PATCH] brcmfmac: Avoid build error with make W=1
-
-When I run make W=1 on gcc (Debian 7.2.0-16) 7.2.0 I got an error for
-the first run, all next ones are okay.
-
-  CC [M]  drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.o
-drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c:2078: error: Cannot parse struct or union!
-scripts/Makefile.build:310: recipe for target 'drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.o' failed
-
-Seems like something happened with W=1 and wrong kernel doc format.
-As a quick fix remove dubious /** in the code.
-
-Signed-off-by: Andy Shevchenko <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -2070,7 +2070,7 @@ static int brcmf_sdio_txpkt_hdalign(stru
- 	return head_pad;
- }
- 
--/**
-+/*
-  * struct brcmf_skbuff_cb reserves first two bytes in sk_buff::cb for
-  * bus layer usage.
-  */

+ 0 - 40
package/kernel/mac80211/patches/307-v4.15-brcmfmac-fix-CLM-load-error-for-legacy-chips-when-us.patch

@@ -1,40 +0,0 @@
-From cc124d5cc8d81985c3511892d7a6d546552ff754 Mon Sep 17 00:00:00 2001
-From: Wright Feng <[email protected]>
-Date: Tue, 16 Jan 2018 17:26:50 +0800
-Subject: [PATCH] brcmfmac: fix CLM load error for legacy chips when user
- helper is enabled
-
-For legacy chips without CLM blob files, kernel with user helper function
-returns -EAGAIN when we request_firmware(), and then driver got failed
-when bringing up legacy chips. We expect the CLM blob file for legacy chip
-is not existence in firmware path, but the -ENOENT error is transferred to
--EAGAIN in firmware_class.c with user helper.
-Because of that, we continue with CLM data currently present in firmware
-if getting error from doing request_firmware().
-
-Cc: [email protected] # v4.15.y
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Wright Feng <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 9 +++------
- 1 file changed, 3 insertions(+), 6 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -182,12 +182,9 @@ static int brcmf_c_process_clm_blob(stru
- 
- 	err = request_firmware(&clm, clm_name, dev);
- 	if (err) {
--		if (err == -ENOENT) {
--			brcmf_dbg(INFO, "continue with CLM data currently present in firmware\n");
--			return 0;
--		}
--		brcmf_err("request CLM blob file failed (%d)\n", err);
--		return err;
-+		brcmf_info("no clm_blob available(err=%d), device may have limited channels available\n",
-+			   err);
-+		return 0;
- 	}
- 
- 	chunk_buf = kzalloc(sizeof(*chunk_buf) + MAX_CHUNK_LEN - 1, GFP_KERNEL);

+ 0 - 103
package/kernel/mac80211/patches/308-v4.16-0001-ath9k-move-spectral-scan-support-under-a-separate-co.patch

@@ -1,103 +0,0 @@
-From 9df7ddc3ed25b7d3473f117a0680b9418adb5753 Mon Sep 17 00:00:00 2001
-Message-Id: <9df7ddc3ed25b7d3473f117a0680b9418adb5753.1515610034.git.mschiffer@universe-factory.net>
-From: Matthias Schiffer <[email protected]>
-Date: Mon, 27 Nov 2017 18:56:22 +0100
-Subject: [PATCH 1/2] ath9k: move spectral scan support under a separate config
- symbol
-
-At the moment, spectral scan support, and with it RELAY, is always enabled
-with ATH9K[_HTC]_DEBUGFS. Spectral scan support is currently the only user
-of RELAY in ath9k, and it unconditionally reserves a relay channel.
-
-Having debugfs support in ath9k is often useful even on very small embedded
-routers, where we'd rather like to avoid the code size and RAM usage of the
-relay support.
-
-Signed-off-by: Matthias Schiffer <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/ath/ath9k/Kconfig           | 14 ++++++++++----
- drivers/net/wireless/ath/ath9k/Makefile          |  4 ++--
- drivers/net/wireless/ath/ath9k/common-spectral.h |  4 ++--
- 3 files changed, 14 insertions(+), 8 deletions(-)
-
---- a/drivers/net/wireless/ath/ath9k/Kconfig
-+++ b/drivers/net/wireless/ath/ath9k/Kconfig
-@@ -64,13 +64,12 @@ config ATH9K_DEBUGFS
- 	depends on ATH9K && DEBUG_FS
- 	select MAC80211_DEBUGFS
- 	select ATH9K_COMMON_DEBUG
--	depends on RELAY
- 	---help---
- 	  Say Y, if you need access to ath9k's statistics for
- 	  interrupts, rate control, etc.
- 
--	  Also required for changing debug message flags at run time.
--	  As well as access to the FFT/spectral data and TX99.
-+	  Also required for changing debug message flags at run time and for
-+	  TX99.
- 
- config ATH9K_STATION_STATISTICS
- 	bool "Detailed station statistics"
-@@ -181,7 +180,6 @@ config ATH9K_HTC_DEBUGFS
- 	bool "Atheros ath9k_htc debugging"
- 	depends on ATH9K_HTC && DEBUG_FS
- 	select ATH9K_COMMON_DEBUG
--	depends on RELAY
- 	---help---
- 	  Say Y, if you need access to ath9k_htc's statistics.
- 	  As well as access to the FFT/spectral data.
-@@ -197,3 +195,11 @@ config ATH9K_HWRNG
- 
- 	  Say Y, feeds the entropy directly from the WiFi driver to the input
- 	  pool.
-+
-+config ATH9K_COMMON_SPECTRAL
-+	bool "Atheros ath9k/ath9k_htc spectral scan support"
-+	depends on ATH9K_DEBUGFS || ATH9K_HTC_DEBUGFS
-+	depends on RELAY
-+	default n
-+	---help---
-+	  Say Y to enable access to the FFT/spectral data via debugfs.
---- a/drivers/net/wireless/ath/ath9k/Makefile
-+++ b/drivers/net/wireless/ath/ath9k/Makefile
-@@ -61,8 +61,8 @@ ath9k_common-y:=	common.o \
- 			common-init.o \
- 			common-beacon.o \
- 
--ath9k_common-$(CPTCFG_ATH9K_COMMON_DEBUG) += common-debug.o \
--					     common-spectral.o
-+ath9k_common-$(CPTCFG_ATH9K_COMMON_DEBUG) += common-debug.o
-+ath9k_common-$(CPTCFG_ATH9K_COMMON_SPECTRAL) += common-spectral.o
- 
- ath9k_htc-y +=	htc_hst.o \
- 		hif_usb.o \
---- a/drivers/net/wireless/ath/ath9k/common-spectral.h
-+++ b/drivers/net/wireless/ath/ath9k/common-spectral.h
-@@ -151,7 +151,7 @@ static inline u8 spectral_bitmap_weight(
- 	return bins[0] & 0x3f;
- }
- 
--#ifdef CPTCFG_ATH9K_COMMON_DEBUG
-+#ifdef CPTCFG_ATH9K_COMMON_SPECTRAL
- void ath9k_cmn_spectral_init_debug(struct ath_spec_scan_priv *spec_priv, struct dentry *debugfs_phy);
- void ath9k_cmn_spectral_deinit_debug(struct ath_spec_scan_priv *spec_priv);
- 
-@@ -183,6 +183,6 @@ static inline int ath_cmn_process_fft(st
- {
- 	return 0;
- }
--#endif /* CPTCFG_ATH9K_COMMON_DEBUG */
-+#endif /* CPTCFG_ATH9K_COMMON_SPECTRAL */
- 
- #endif /* SPECTRAL_H */
---- a/local-symbols
-+++ b/local-symbols
-@@ -116,6 +116,7 @@ ATH9K_PCOEM=
- ATH9K_HTC=
- ATH9K_HTC_DEBUGFS=
- ATH9K_HWRNG=
-+ATH9K_COMMON_SPECTRAL=
- CARL9170=
- CARL9170_LEDS=
- CARL9170_DEBUGFS=

+ 0 - 91
package/kernel/mac80211/patches/309-v4.16-0002-ath10k-move-spectral-scan-support-under-a-separate-c.patch

@@ -1,91 +0,0 @@
-From 42e01cb9cb109fb0bb4743f6c54d6aa67ac39b61 Mon Sep 17 00:00:00 2001
-Message-Id: <42e01cb9cb109fb0bb4743f6c54d6aa67ac39b61.1515610034.git.mschiffer@universe-factory.net>
-In-Reply-To: <9df7ddc3ed25b7d3473f117a0680b9418adb5753.1515610034.git.mschiffer@universe-factory.net>
-References: <9df7ddc3ed25b7d3473f117a0680b9418adb5753.1515610034.git.mschiffer@universe-factory.net>
-From: Matthias Schiffer <[email protected]>
-Date: Mon, 27 Nov 2017 18:56:23 +0100
-Subject: [PATCH 2/2] ath10k: move spectral scan support under a separate
- config symbol
-
-At the moment, spectral scan support, and with it RELAY, is always enabled
-with ATH10K_DEBUGFS. Spectral scan support is currently the only user of
-RELAY in ath10k, and it unconditionally reserves a relay channel.
-
-Having debugfs support in ath10k is often useful even on very small
-embedded routers, where we'd rather like to avoid the code size and RAM
-usage of the relay support. While ath10k-based devices usually have more
-resources than ath9k-based ones, it makes sense to keep the configuration
-symmetric to ath9k, so the same base kernel without RELAY can be used for
-both ath9k and ath10k hardware.
-
-Signed-off-by: Matthias Schiffer <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/ath/ath10k/Kconfig    | 9 ++++++++-
- drivers/net/wireless/ath/ath10k/Makefile   | 2 +-
- drivers/net/wireless/ath/ath10k/spectral.h | 4 ++--
- 3 files changed, 11 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/ath/ath10k/Kconfig
-+++ b/drivers/net/wireless/ath/ath10k/Kconfig
-@@ -51,12 +51,19 @@ config ATH10K_DEBUG
- config ATH10K_DEBUGFS
- 	bool "Atheros ath10k debugfs support"
- 	depends on ATH10K && DEBUG_FS
--	depends on RELAY
- 	---help---
- 	  Enabled debugfs support
- 
- 	  If unsure, say Y to make it easier to debug problems.
- 
-+config ATH10K_SPECTRAL
-+	bool "Atheros ath10k spectral scan support"
-+	depends on ATH10K_DEBUGFS
-+	depends on RELAY
-+	default n
-+	---help---
-+	  Say Y to enable access to the FFT/spectral data via debugfs.
-+
- config ATH10K_TRACING
- 	depends on !KERNEL_3_4
- 	bool "Atheros ath10k tracing support"
---- a/drivers/net/wireless/ath/ath10k/Makefile
-+++ b/drivers/net/wireless/ath/ath10k/Makefile
-@@ -14,7 +14,7 @@ ath10k_core-y += mac.o \
- 		 p2p.o \
- 		 swap.o
- 
--ath10k_core-$(CPTCFG_ATH10K_DEBUGFS) += spectral.o
-+ath10k_core-$(CPTCFG_ATH10K_SPECTRAL) += spectral.o
- ath10k_core-$(CPTCFG_NL80211_TESTMODE) += testmode.o
- ath10k_core-$(CPTCFG_ATH10K_TRACING) += trace.o
- ath10k_core-$(CPTCFG_ATH10K_THERMAL) += thermal.o
---- a/drivers/net/wireless/ath/ath10k/spectral.h
-+++ b/drivers/net/wireless/ath/ath10k/spectral.h
-@@ -44,7 +44,7 @@ enum ath10k_spectral_mode {
- 	SPECTRAL_MANUAL,
- };
- 
--#ifdef CPTCFG_ATH10K_DEBUGFS
-+#ifdef CPTCFG_ATH10K_SPECTRAL
- 
- int ath10k_spectral_process_fft(struct ath10k *ar,
- 				struct wmi_phyerr_ev_arg *phyerr,
-@@ -85,6 +85,6 @@ static inline void ath10k_spectral_destr
- {
- }
- 
--#endif /* CPTCFG_ATH10K_DEBUGFS */
-+#endif /* CPTCFG_ATH10K_SPECTRAL */
- 
- #endif /* SPECTRAL_H */
---- a/local-symbols
-+++ b/local-symbols
-@@ -140,6 +140,7 @@ ATH10K_SDIO=
- ATH10K_USB=
- ATH10K_DEBUG=
- ATH10K_DEBUGFS=
-+ATH10K_SPECTRAL=
- ATH10K_THERMAL=
- ATH10K_TRACING=
- ATH10K_DFS_CERTIFIED=

+ 0 - 25
package/kernel/mac80211/patches/310-v4.16-ath9k-discard-undersized-packets.patch

@@ -1,25 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Wed, 17 Jan 2018 11:11:17 +0100
-Subject: [PATCH] ath9k: discard undersized packets
-
-Sometimes the hardware will push small packets that trigger a WARN_ON
-in mac80211. Discard them early to avoid this issue.
-
-Reported-by: Stijn Tintel <[email protected]>
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/drivers/net/wireless/ath/ath9k/recv.c
-+++ b/drivers/net/wireless/ath/ath9k/recv.c
-@@ -826,9 +826,9 @@ static int ath9k_rx_skb_preprocess(struc
- 	sc->rx.discard_next = false;
- 
- 	/*
--	 * Discard zero-length packets.
-+	 * Discard zero-length packets and packets smaller than an ACK
- 	 */
--	if (!rx_stats->rs_datalen) {
-+	if (rx_stats->rs_datalen < 10) {
- 		RX_STAT_INC(rx_len_err);
- 		goto corrupt;
- 	}

+ 0 - 39
package/kernel/mac80211/patches/311-v4.16-0001-brcmfmac-Fix-parameter-order-in-brcmf_sdiod_f0_write.patch

@@ -1,39 +0,0 @@
-From 1fd3ae124d5e675f57cf7e3c601fb8f7712e0329 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:38 +0100
-Subject: [PATCH] brcmfmac: Fix parameter order in brcmf_sdiod_f0_writeb()
-
-All the other IO functions are the other way round in this
-driver. Make this one match.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -230,8 +230,8 @@ void brcmf_sdiod_change_state(struct brc
- 	sdiodev->state = state;
- }
- 
--static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func,
--					uint regaddr, u8 byte)
-+static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func, u8 byte,
-+					uint regaddr)
- {
- 	int err_ret;
- 
-@@ -269,8 +269,8 @@ static int brcmf_sdiod_request_data(stru
- 			if (fn)
- 				sdio_writeb(func, *(u8 *)data, addr, &ret);
- 			else
--				ret = brcmf_sdiod_f0_writeb(func, addr,
--							    *(u8 *)data);
-+				ret = brcmf_sdiod_f0_writeb(func, *(u8 *)data,
-+							    addr);
- 		} else {
- 			if (fn)
- 				*(u8 *)data = sdio_readb(func, addr, &ret);

+ 0 - 105
package/kernel/mac80211/patches/311-v4.16-0002-brcmfmac-Register-sizes-on-hardware-are-not-dependen.patch

@@ -1,105 +0,0 @@
-From 1e6f676f43aa4270ebc5cff8e32a55f72362e042 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:39 +0100
-Subject: [PATCH] brcmfmac: Register sizes on hardware are not dependent on
- compiler types
-
-The 4 IO functions in this patch are incorrect as they use compiler types
-to determine how many bytes to send to the hardware.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -264,7 +264,7 @@ static int brcmf_sdiod_request_data(stru
- 	func = sdiodev->func[fn];
- 
- 	switch (regsz) {
--	case sizeof(u8):
-+	case 1:
- 		if (write) {
- 			if (fn)
- 				sdio_writeb(func, *(u8 *)data, addr, &ret);
-@@ -278,13 +278,13 @@ static int brcmf_sdiod_request_data(stru
- 				*(u8 *)data = sdio_f0_readb(func, addr, &ret);
- 		}
- 		break;
--	case sizeof(u16):
-+	case 2:
- 		if (write)
- 			sdio_writew(func, *(u16 *)data, addr, &ret);
- 		else
- 			*(u16 *)data = sdio_readw(func, addr, &ret);
- 		break;
--	case sizeof(u32):
-+	case 4:
- 		if (write)
- 			sdio_writel(func, *(u32 *)data, addr, &ret);
- 		else
-@@ -368,7 +368,7 @@ brcmf_sdiod_set_sbaddr_window(struct brc
- 	for (i = 0; i < 3; i++) {
- 		err = brcmf_sdiod_regrw_helper(sdiodev,
- 					       SBSDIO_FUNC1_SBADDRLOW + i,
--					       sizeof(u8), &addr[i], true);
-+					       1, &addr[i], true);
- 		if (err) {
- 			brcmf_err("failed at addr: 0x%0x\n",
- 				  SBSDIO_FUNC1_SBADDRLOW + i);
-@@ -407,7 +407,7 @@ u8 brcmf_sdiod_regrb(struct brcmf_sdio_d
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data,
-+	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 1, &data,
- 					  false);
- 	brcmf_dbg(SDIO, "data:0x%02x\n", data);
- 
-@@ -423,10 +423,10 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
--	retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr);
-+	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
- 	if (retval)
- 		goto done;
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data,
-+	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 4, &data,
- 					  false);
- 	brcmf_dbg(SDIO, "data:0x%08x\n", data);
- 
-@@ -443,7 +443,7 @@ void brcmf_sdiod_regwb(struct brcmf_sdio
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%02x\n", addr, data);
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data,
-+	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 1, &data,
- 					  true);
- 	if (ret)
- 		*ret = retval;
-@@ -455,10 +455,10 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%08x\n", addr, data);
--	retval = brcmf_sdiod_addrprep(sdiodev, sizeof(data), &addr);
-+	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
- 	if (retval)
- 		goto done;
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, sizeof(data), &data,
-+	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 4, &data,
- 					  true);
- 
- done:
-@@ -876,7 +876,7 @@ int brcmf_sdiod_abort(struct brcmf_sdio_
- 
- 	/* issue abort cmd52 command through F0 */
- 	brcmf_sdiod_request_data(sdiodev, SDIO_FUNC_0, SDIO_CCCR_ABORT,
--				 sizeof(t_func), &t_func, true);
-+				 1, &t_func, true);
- 
- 	brcmf_dbg(SDIO, "Exit\n");
- 	return 0;

+ 0 - 179
package/kernel/mac80211/patches/311-v4.16-0003-brcmfmac-Split-brcmf_sdiod_regrw_helper-up.patch

@@ -1,179 +0,0 @@
-From 0fcc9fe0048422d66bb906eaa73cc75e11ff7345 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:40 +0100
-Subject: [PATCH] brcmfmac: Split brcmf_sdiod_regrw_helper() up.
-
-This large function is concealing a LOT of obscure logic about
-how the hardware functions. Time to split it up.
-
-This first patch splits the function into two pieces - read and write,
-doing away with the rw flag in the process.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 94 +++++++++++++++++-----
- 1 file changed, 73 insertions(+), 21 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -302,8 +302,8 @@ static int brcmf_sdiod_request_data(stru
- 	return ret;
- }
- 
--static int brcmf_sdiod_regrw_helper(struct brcmf_sdio_dev *sdiodev, u32 addr,
--				   u8 regsz, void *data, bool write)
-+static int brcmf_sdiod_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr,
-+				 u8 regsz, void *data)
- {
- 	u8 func;
- 	s32 retry = 0;
-@@ -324,13 +324,66 @@ static int brcmf_sdiod_regrw_helper(stru
- 		func = SDIO_FUNC_1;
- 
- 	do {
--		if (!write)
--			memset(data, 0, regsz);
- 		/* for retry wait for 1 ms till bus get settled down */
- 		if (retry)
- 			usleep_range(1000, 2000);
-+
-+		ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz,
-+					       data, true);
-+
-+	} while (ret != 0 && ret != -ENOMEDIUM &&
-+		 retry++ < SDIOH_API_ACCESS_RETRY_LIMIT);
-+
-+	if (ret == -ENOMEDIUM) {
-+		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-+	} else if (ret != 0) {
-+		/*
-+		 * SleepCSR register access can fail when
-+		 * waking up the device so reduce this noise
-+		 * in the logs.
-+		 */
-+		if (addr != SBSDIO_FUNC1_SLEEPCSR)
-+			brcmf_err("failed to write data F%d@0x%05x, err: %d\n",
-+				  func, addr, ret);
-+		else
-+			brcmf_dbg(SDIO, "failed to write data F%d@0x%05x, err: %d\n",
-+				  func, addr, ret);
-+	}
-+
-+	return ret;
-+}
-+
-+static int brcmf_sdiod_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr,
-+				u8 regsz, void *data)
-+{
-+	u8 func;
-+	s32 retry = 0;
-+	int ret;
-+
-+	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
-+		return -ENOMEDIUM;
-+
-+	/*
-+	 * figure out how to read the register based on address range
-+	 * 0x00 ~ 0x7FF: function 0 CCCR and FBR
-+	 * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
-+	 * The rest: function 1 silicon backplane core registers
-+	 */
-+	if ((addr & ~REG_F0_REG_MASK) == 0)
-+		func = SDIO_FUNC_0;
-+	else
-+		func = SDIO_FUNC_1;
-+
-+	do {
-+		memset(data, 0, regsz);
-+
-+		/* for retry wait for 1 ms till bus get settled down */
-+		if (retry)
-+			usleep_range(1000, 2000);
-+
- 		ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz,
--					       data, write);
-+					       data, false);
-+
- 	} while (ret != 0 && ret != -ENOMEDIUM &&
- 		 retry++ < SDIOH_API_ACCESS_RETRY_LIMIT);
- 
-@@ -343,12 +396,13 @@ static int brcmf_sdiod_regrw_helper(stru
- 		 * in the logs.
- 		 */
- 		if (addr != SBSDIO_FUNC1_SLEEPCSR)
--			brcmf_err("failed to %s data F%d@0x%05x, err: %d\n",
--				  write ? "write" : "read", func, addr, ret);
-+			brcmf_err("failed to read data F%d@0x%05x, err: %d\n",
-+				  func, addr, ret);
- 		else
--			brcmf_dbg(SDIO, "failed to %s data F%d@0x%05x, err: %d\n",
--				  write ? "write" : "read", func, addr, ret);
-+			brcmf_dbg(SDIO, "failed to read data F%d@0x%05x, err: %d\n",
-+				  func, addr, ret);
- 	}
-+
- 	return ret;
- }
- 
-@@ -366,13 +420,11 @@ brcmf_sdiod_set_sbaddr_window(struct brc
- 	addr[2] = (address >> 24) & SBSDIO_SBADDRHIGH_MASK;
- 
- 	for (i = 0; i < 3; i++) {
--		err = brcmf_sdiod_regrw_helper(sdiodev,
--					       SBSDIO_FUNC1_SBADDRLOW + i,
--					       1, &addr[i], true);
-+		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, addr[i],
-+				  &err);
- 		if (err) {
- 			brcmf_err("failed at addr: 0x%0x\n",
- 				  SBSDIO_FUNC1_SBADDRLOW + i);
--			break;
- 		}
- 	}
- 
-@@ -407,8 +459,7 @@ u8 brcmf_sdiod_regrb(struct brcmf_sdio_d
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 1, &data,
--					  false);
-+	retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
- 	brcmf_dbg(SDIO, "data:0x%02x\n", data);
- 
- 	if (ret)
-@@ -426,8 +477,9 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
- 	if (retval)
- 		goto done;
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 4, &data,
--					  false);
-+
-+	retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
-+
- 	brcmf_dbg(SDIO, "data:0x%08x\n", data);
- 
- done:
-@@ -443,8 +495,8 @@ void brcmf_sdiod_regwb(struct brcmf_sdio
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%02x\n", addr, data);
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 1, &data,
--					  true);
-+	retval = brcmf_sdiod_reg_write(sdiodev, addr, 1, &data);
-+
- 	if (ret)
- 		*ret = retval;
- }
-@@ -458,8 +510,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- 	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
- 	if (retval)
- 		goto done;
--	retval = brcmf_sdiod_regrw_helper(sdiodev, addr, 4, &data,
--					  true);
-+
-+	retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
- 
- done:
- 	if (ret)

+ 0 - 62
package/kernel/mac80211/patches/311-v4.16-0004-brcmfmac-Clean-up-brcmf_sdiod_set_sbaddr_window.patch

@@ -1,62 +0,0 @@
-From b9b0d290bc0c90a5a262bc89c9d995988ea98669 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:41 +0100
-Subject: [PATCH] brcmfmac: Clean up brcmf_sdiod_set_sbaddr_window()
-
-This function sets the address of the IO window used for
-SDIO accesses onto the backplane of the chip.
-
-It currently uses 3 separate masks despite the full mask being
-defined in the code already. Remove the separate masks and clean up.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c   | 17 +++++------------
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h |  3 ---
- 2 files changed, 5 insertions(+), 15 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -410,23 +410,16 @@ static int
- brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address)
- {
- 	int err = 0, i;
--	u8 addr[3];
-+	u32 addr;
- 
- 	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
- 		return -ENOMEDIUM;
- 
--	addr[0] = (address >> 8) & SBSDIO_SBADDRLOW_MASK;
--	addr[1] = (address >> 16) & SBSDIO_SBADDRMID_MASK;
--	addr[2] = (address >> 24) & SBSDIO_SBADDRHIGH_MASK;
-+	addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
- 
--	for (i = 0; i < 3; i++) {
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i, addr[i],
--				  &err);
--		if (err) {
--			brcmf_err("failed at addr: 0x%0x\n",
--				  SBSDIO_FUNC1_SBADDRLOW + i);
--		}
--	}
-+	for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
-+		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
-+				  addr & 0xff, &err);
- 
- 	return err;
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -133,9 +133,6 @@
- 
- /* valid bits in SBSDIO_FUNC1_SBADDRxxx regs */
- 
--#define SBSDIO_SBADDRLOW_MASK		0x80	/* Valid bits in SBADDRLOW */
--#define SBSDIO_SBADDRMID_MASK		0xff	/* Valid bits in SBADDRMID */
--#define SBSDIO_SBADDRHIGH_MASK		0xffU	/* Valid bits in SBADDRHIGH */
- /* Address bits from SBADDR regs */
- #define SBSDIO_SBWINDOW_MASK		0xffff8000
- 

+ 0 - 91
package/kernel/mac80211/patches/311-v4.16-0005-brcmfmac-Remove-dead-IO-code.patch

@@ -1,91 +0,0 @@
-From ea243e9077b3545f20d93884e91c50ac0719685a Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:42 +0100
-Subject: [PATCH] brcmfmac: Remove dead IO code
-
-The value passed to brcmf_sdiod_addrprep() is *always* 4
-remove this parameter and the unused code to handle it.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 18 ++++++++----------
- 1 file changed, 8 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -425,7 +425,7 @@ brcmf_sdiod_set_sbaddr_window(struct brc
- }
- 
- static int
--brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, uint width, u32 *addr)
-+brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr)
- {
- 	uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK;
- 	int err = 0;
-@@ -439,9 +439,7 @@ brcmf_sdiod_addrprep(struct brcmf_sdio_d
- 	}
- 
- 	*addr &= SBSDIO_SB_OFT_ADDR_MASK;
--
--	if (width == 4)
--		*addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-+	*addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	return 0;
- }
-@@ -467,7 +465,7 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
--	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
- 	if (retval)
- 		goto done;
- 
-@@ -500,7 +498,7 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%08x\n", addr, data);
--	retval = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
- 	if (retval)
- 		goto done;
- 
-@@ -736,7 +734,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	err = brcmf_sdiod_addrprep(sdiodev, &addr);
- 	if (err)
- 		goto done;
- 
-@@ -757,7 +755,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
- 		  addr, pktq->qlen);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	err = brcmf_sdiod_addrprep(sdiodev, &addr);
- 	if (err)
- 		goto done;
- 
-@@ -801,7 +799,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 
- 	memcpy(mypkt->data, buf, nbytes);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	err = brcmf_sdiod_addrprep(sdiodev, &addr);
- 
- 	if (!err)
- 		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr,
-@@ -821,7 +819,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, 4, &addr);
-+	err = brcmf_sdiod_addrprep(sdiodev, &addr);
- 	if (err)
- 		return err;
- 

+ 0 - 61
package/kernel/mac80211/patches/311-v4.16-0006-brcmfmac-Remove-bandaid-for-SleepCSR.patch

@@ -1,61 +0,0 @@
-From 4a3338ba2a7421db2260159cca5a27bd2ee36d00 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:43 +0100
-Subject: [PATCH] brcmfmac: Remove bandaid for SleepCSR
-
-Register access code is not the place for band-aid fixes like this.
-If this is a genuine problem, it should be fixed further up in the driver
-stack.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 28 +---------------------
- 1 file changed, 1 insertion(+), 27 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -334,21 +334,8 @@ static int brcmf_sdiod_reg_write(struct
- 	} while (ret != 0 && ret != -ENOMEDIUM &&
- 		 retry++ < SDIOH_API_ACCESS_RETRY_LIMIT);
- 
--	if (ret == -ENOMEDIUM) {
-+	if (ret == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
--	} else if (ret != 0) {
--		/*
--		 * SleepCSR register access can fail when
--		 * waking up the device so reduce this noise
--		 * in the logs.
--		 */
--		if (addr != SBSDIO_FUNC1_SLEEPCSR)
--			brcmf_err("failed to write data F%d@0x%05x, err: %d\n",
--				  func, addr, ret);
--		else
--			brcmf_dbg(SDIO, "failed to write data F%d@0x%05x, err: %d\n",
--				  func, addr, ret);
--	}
- 
- 	return ret;
- }
-@@ -389,19 +376,6 @@ static int brcmf_sdiod_reg_read(struct b
- 
- 	if (ret == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
--	else if (ret != 0) {
--		/*
--		 * SleepCSR register access can fail when
--		 * waking up the device so reduce this noise
--		 * in the logs.
--		 */
--		if (addr != SBSDIO_FUNC1_SLEEPCSR)
--			brcmf_err("failed to read data F%d@0x%05x, err: %d\n",
--				  func, addr, ret);
--		else
--			brcmf_dbg(SDIO, "failed to read data F%d@0x%05x, err: %d\n",
--				  func, addr, ret);
--	}
- 
- 	return ret;
- }

+ 0 - 344
package/kernel/mac80211/patches/311-v4.16-0007-brcmfmac-Remove-brcmf_sdiod_request_data.patch

@@ -1,344 +0,0 @@
-From 993a98a42e6e790fd0d2bf7d55a031513c7ba7dc Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:44 +0100
-Subject: [PATCH] brcmfmac: Remove brcmf_sdiod_request_data()
-
-This function is obfuscating how IO works on this chip. Remove it
-and push its logic into brcmf_sdiod_reg_{read,write}().
-
-Handling of -ENOMEDIUM is altered, but as that's pretty much broken anyway
-we can ignore that.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 237 ++++++++-------------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.h    |   2 +-
- 2 files changed, 87 insertions(+), 152 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -230,6 +230,43 @@ void brcmf_sdiod_change_state(struct brc
- 	sdiodev->state = state;
- }
- 
-+static int brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev,
-+					 u32 address)
-+{
-+	int err = 0, i;
-+	u32 addr;
-+
-+	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
-+		return -ENOMEDIUM;
-+
-+	addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
-+
-+	for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
-+		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
-+				  addr & 0xff, &err);
-+
-+	return err;
-+}
-+
-+static int brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr)
-+{
-+	uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK;
-+	int err = 0;
-+
-+	if (bar0 != sdiodev->sbwad) {
-+		err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0);
-+		if (err)
-+			return err;
-+
-+		sdiodev->sbwad = bar0;
-+	}
-+
-+	*addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	*addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-+
-+	return 0;
-+}
-+
- static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func, u8 byte,
- 					uint regaddr)
- {
-@@ -249,173 +286,84 @@ static inline int brcmf_sdiod_f0_writeb(
- 	return err_ret;
- }
- 
--static int brcmf_sdiod_request_data(struct brcmf_sdio_dev *sdiodev, u8 fn,
--				    u32 addr, u8 regsz, void *data, bool write)
--{
--	struct sdio_func *func;
--	int ret = -EINVAL;
--
--	brcmf_dbg(SDIO, "rw=%d, func=%d, addr=0x%05x, nbytes=%d\n",
--		  write, fn, addr, regsz);
--
--	/* only allow byte access on F0 */
--	if (WARN_ON(regsz > 1 && !fn))
--		return -EINVAL;
--	func = sdiodev->func[fn];
--
--	switch (regsz) {
--	case 1:
--		if (write) {
--			if (fn)
--				sdio_writeb(func, *(u8 *)data, addr, &ret);
--			else
--				ret = brcmf_sdiod_f0_writeb(func, *(u8 *)data,
--							    addr);
--		} else {
--			if (fn)
--				*(u8 *)data = sdio_readb(func, addr, &ret);
--			else
--				*(u8 *)data = sdio_f0_readb(func, addr, &ret);
--		}
--		break;
--	case 2:
--		if (write)
--			sdio_writew(func, *(u16 *)data, addr, &ret);
--		else
--			*(u16 *)data = sdio_readw(func, addr, &ret);
--		break;
--	case 4:
--		if (write)
--			sdio_writel(func, *(u32 *)data, addr, &ret);
--		else
--			*(u32 *)data = sdio_readl(func, addr, &ret);
--		break;
--	default:
--		brcmf_err("invalid size: %d\n", regsz);
--		break;
--	}
--
--	if (ret)
--		brcmf_dbg(SDIO, "failed to %s data F%d@0x%05x, err: %d\n",
--			  write ? "write" : "read", fn, addr, ret);
--
--	return ret;
--}
--
- static int brcmf_sdiod_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr,
- 				 u8 regsz, void *data)
- {
--	u8 func;
--	s32 retry = 0;
- 	int ret;
- 
--	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
--		return -ENOMEDIUM;
--
- 	/*
- 	 * figure out how to read the register based on address range
- 	 * 0x00 ~ 0x7FF: function 0 CCCR and FBR
- 	 * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
- 	 * The rest: function 1 silicon backplane core registers
-+	 * f0 writes must be bytewise
- 	 */
--	if ((addr & ~REG_F0_REG_MASK) == 0)
--		func = SDIO_FUNC_0;
--	else
--		func = SDIO_FUNC_1;
--
--	do {
--		/* for retry wait for 1 ms till bus get settled down */
--		if (retry)
--			usleep_range(1000, 2000);
- 
--		ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz,
--					       data, true);
--
--	} while (ret != 0 && ret != -ENOMEDIUM &&
--		 retry++ < SDIOH_API_ACCESS_RETRY_LIMIT);
-+	if ((addr & ~REG_F0_REG_MASK) == 0) {
-+		if (WARN_ON(regsz > 1))
-+			return -EINVAL;
-+		ret = brcmf_sdiod_f0_writeb(sdiodev->func[0],
-+					    *(u8 *)data, addr);
-+	} else {
-+		switch (regsz) {
-+		case 1:
-+			sdio_writeb(sdiodev->func[1], *(u8 *)data, addr, &ret);
-+			break;
-+		case 4:
-+			ret = brcmf_sdiod_addrprep(sdiodev, &addr);
-+			if (ret)
-+				goto done;
- 
--	if (ret == -ENOMEDIUM)
--		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-+			sdio_writel(sdiodev->func[1], *(u32 *)data, addr, &ret);
-+			break;
-+		default:
-+			WARN(1, "Invalid reg size\n");
-+			ret = -EINVAL;
-+			break;
-+		}
-+	}
- 
-+done:
- 	return ret;
- }
- 
- static int brcmf_sdiod_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr,
- 				u8 regsz, void *data)
- {
--	u8 func;
--	s32 retry = 0;
- 	int ret;
- 
--	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
--		return -ENOMEDIUM;
--
- 	/*
- 	 * figure out how to read the register based on address range
- 	 * 0x00 ~ 0x7FF: function 0 CCCR and FBR
- 	 * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
- 	 * The rest: function 1 silicon backplane core registers
-+	 * f0 reads must be bytewise
- 	 */
--	if ((addr & ~REG_F0_REG_MASK) == 0)
--		func = SDIO_FUNC_0;
--	else
--		func = SDIO_FUNC_1;
--
--	do {
--		memset(data, 0, regsz);
--
--		/* for retry wait for 1 ms till bus get settled down */
--		if (retry)
--			usleep_range(1000, 2000);
--
--		ret = brcmf_sdiod_request_data(sdiodev, func, addr, regsz,
--					       data, false);
--
--	} while (ret != 0 && ret != -ENOMEDIUM &&
--		 retry++ < SDIOH_API_ACCESS_RETRY_LIMIT);
--
--	if (ret == -ENOMEDIUM)
--		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
--
--	return ret;
--}
--
--static int
--brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev, u32 address)
--{
--	int err = 0, i;
--	u32 addr;
--
--	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
--		return -ENOMEDIUM;
--
--	addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
--
--	for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
--				  addr & 0xff, &err);
--
--	return err;
--}
--
--static int
--brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr)
--{
--	uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK;
--	int err = 0;
--
--	if (bar0 != sdiodev->sbwad) {
--		err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0);
--		if (err)
--			return err;
-+	if ((addr & ~REG_F0_REG_MASK) == 0) {
-+		if (WARN_ON(regsz > 1))
-+			return -EINVAL;
-+		*(u8 *)data = sdio_f0_readb(sdiodev->func[0], addr, &ret);
-+	} else {
-+		switch (regsz) {
-+		case 1:
-+			*(u8 *)data = sdio_readb(sdiodev->func[1], addr, &ret);
-+			break;
-+		case 4:
-+			ret = brcmf_sdiod_addrprep(sdiodev, &addr);
-+			if (ret)
-+				goto done;
- 
--		sdiodev->sbwad = bar0;
-+			*(u32 *)data = sdio_readl(sdiodev->func[1], addr, &ret);
-+			break;
-+		default:
-+			WARN(1, "Invalid reg size\n");
-+			ret = -EINVAL;
-+			break;
-+		}
- 	}
- 
--	*addr &= SBSDIO_SB_OFT_ADDR_MASK;
--	*addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
--
--	return 0;
-+done:
-+	return ret;
- }
- 
- u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
-@@ -439,15 +387,9 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
--	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
--	if (retval)
--		goto done;
--
- 	retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
--
- 	brcmf_dbg(SDIO, "data:0x%08x\n", data);
- 
--done:
- 	if (ret)
- 		*ret = retval;
- 
-@@ -472,13 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%08x\n", addr, data);
--	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
--	if (retval)
--		goto done;
--
- 	retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
- 
--done:
- 	if (ret)
- 		*ret = retval;
- }
-@@ -886,14 +823,12 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	return bcmerror;
- }
- 
--int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn)
-+int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, u8 fn)
- {
--	char t_func = (char)fn;
- 	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* issue abort cmd52 command through F0 */
--	brcmf_sdiod_request_data(sdiodev, SDIO_FUNC_0, SDIO_CCCR_ABORT,
--				 1, &t_func, true);
-+	brcmf_sdiod_reg_write(sdiodev, SDIO_CCCR_ABORT, 1, &fn);
- 
- 	brcmf_dbg(SDIO, "Exit\n");
- 	return 0;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -339,7 +339,7 @@ int brcmf_sdiod_ramrw(struct brcmf_sdio_
- 		      u8 *data, uint size);
- 
- /* Issue an abort to the specified function */
--int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, uint fn);
-+int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, u8 fn);
- void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev);
- void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev,
- 			      enum brcmf_sdiod_state state);

+ 0 - 28
package/kernel/mac80211/patches/311-v4.16-0008-brcmfmac-Fix-asymmetric-IO-functions.patch

@@ -1,28 +0,0 @@
-From 3508a056a1f45d95c874fc9af8748bf4229432b6 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:45 +0100
-Subject: [PATCH] brcmfmac: Fix asymmetric IO functions.
-
-Unlikely to be a problem, but brcmf_sdiod_regrl() is
-not symmetric with brcmf_sdiod_regrb() in initializing
-the data value on stack. Fix that.
-
-Signed-off-by: Ian Molton <[email protected]>
-[arend: reword the commit message a bit]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -383,7 +383,7 @@ u8 brcmf_sdiod_regrb(struct brcmf_sdio_d
- 
- u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
- {
--	u32 data = 0;
-+	u32 data;
- 	int retval;
- 
- 	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);

+ 0 - 53
package/kernel/mac80211/patches/311-v4.16-0009-brcmfmac-Remove-noisy-debugging.patch

@@ -1,53 +0,0 @@
-From 12e3e74e2820e11d91ee44fd3a190cd80d109faa Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:46 +0100
-Subject: [PATCH] brcmfmac: Remove noisy debugging.
-
-If you need debugging this low level, you're doing something wrong.
-Remove these noisy debug statements so the code is more readable.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 6 ------
- 1 file changed, 6 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -371,9 +371,7 @@ u8 brcmf_sdiod_regrb(struct brcmf_sdio_d
- 	u8 data;
- 	int retval;
- 
--	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
- 	retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
--	brcmf_dbg(SDIO, "data:0x%02x\n", data);
- 
- 	if (ret)
- 		*ret = retval;
-@@ -386,9 +384,7 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	u32 data;
- 	int retval;
- 
--	brcmf_dbg(SDIO, "addr:0x%08x\n", addr);
- 	retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
--	brcmf_dbg(SDIO, "data:0x%08x\n", data);
- 
- 	if (ret)
- 		*ret = retval;
-@@ -401,7 +397,6 @@ void brcmf_sdiod_regwb(struct brcmf_sdio
- {
- 	int retval;
- 
--	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%02x\n", addr, data);
- 	retval = brcmf_sdiod_reg_write(sdiodev, addr, 1, &data);
- 
- 	if (ret)
-@@ -413,7 +408,6 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- {
- 	int retval;
- 
--	brcmf_dbg(SDIO, "addr:0x%08x, data:0x%08x\n", addr, data);
- 	retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
- 
- 	if (ret)

+ 0 - 58
package/kernel/mac80211/patches/311-v4.16-0010-brcmfmac-Rename-bcmerror-to-err.patch

@@ -1,58 +0,0 @@
-From dd8a2d49e4ed321ab8e7b679499c3a98ccc5ca24 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Mon, 13 Nov 2017 21:35:47 +0100
-Subject: [PATCH] brcmfmac: Rename bcmerror to err
-
-Trivial cleanup of nasty variable name
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -746,7 +746,7 @@ int
- brcmf_sdiod_ramrw(struct brcmf_sdio_dev *sdiodev, bool write, u32 address,
- 		  u8 *data, uint size)
- {
--	int bcmerror = 0;
-+	int err = 0;
- 	struct sk_buff *pkt;
- 	u32 sdaddr;
- 	uint dsize;
-@@ -771,8 +771,8 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	/* Do the transfer(s) */
- 	while (size) {
- 		/* Set the backplane window to include the start address */
--		bcmerror = brcmf_sdiod_set_sbaddr_window(sdiodev, address);
--		if (bcmerror)
-+		err = brcmf_sdiod_set_sbaddr_window(sdiodev, address);
-+		if (err)
- 			break;
- 
- 		brcmf_dbg(SDIO, "%s %d bytes at offset 0x%08x in window 0x%08x\n",
-@@ -785,9 +785,9 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 		skb_put(pkt, dsize);
- 		if (write)
- 			memcpy(pkt->data, data, dsize);
--		bcmerror = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write,
--					      sdaddr, pkt);
--		if (bcmerror) {
-+		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr,
-+					 pkt);
-+		if (err) {
- 			brcmf_err("membytes transfer failed\n");
- 			break;
- 		}
-@@ -814,7 +814,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 	sdio_release_host(sdiodev->func[1]);
- 
--	return bcmerror;
-+	return err;
- }
- 
- int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, u8 fn)

+ 0 - 143
package/kernel/mac80211/patches/312-v4.16-0001-brcmfmac-Split-brcmf_sdiod_buffrw-function-up.patch

@@ -1,143 +0,0 @@
-From 8f13c87ccc495e30de5f58bbda967f6edd5bec53 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:26 +0100
-Subject: [PATCH] brcmfmac: Split brcmf_sdiod_buffrw function up.
-
-This function needs to be split up into separate read / write variants
-for clarity.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 67 +++++++++++++++-------
- 1 file changed, 45 insertions(+), 22 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -414,8 +414,8 @@ void brcmf_sdiod_regwl(struct brcmf_sdio
- 		*ret = retval;
- }
- 
--static int brcmf_sdiod_buffrw(struct brcmf_sdio_dev *sdiodev, uint fn,
--			     bool write, u32 addr, struct sk_buff *pkt)
-+static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn,
-+				 u32 addr, struct sk_buff *pkt)
- {
- 	unsigned int req_sz;
- 	int err;
-@@ -424,18 +424,36 @@ static int brcmf_sdiod_buffrw(struct brc
- 	req_sz = pkt->len + 3;
- 	req_sz &= (uint)~3;
- 
--	if (write)
--		err = sdio_memcpy_toio(sdiodev->func[fn], addr,
--				       ((u8 *)(pkt->data)), req_sz);
--	else if (fn == 1)
--		err = sdio_memcpy_fromio(sdiodev->func[fn], ((u8 *)(pkt->data)),
--					 addr, req_sz);
-+	if (fn == 1)
-+		err = sdio_memcpy_fromio(sdiodev->func[fn],
-+					 ((u8 *)(pkt->data)), addr, req_sz);
- 	else
- 		/* function 2 read is FIFO operation */
--		err = sdio_readsb(sdiodev->func[fn], ((u8 *)(pkt->data)), addr,
--				  req_sz);
-+		err = sdio_readsb(sdiodev->func[fn],
-+				  ((u8 *)(pkt->data)), addr, req_sz);
-+
-+	if (err == -ENOMEDIUM)
-+		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-+
-+	return err;
-+}
-+
-+static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev, uint fn,
-+				  u32 addr, struct sk_buff *pkt)
-+{
-+	unsigned int req_sz;
-+	int err;
-+
-+	/* Single skb use the standard mmc interface */
-+	req_sz = pkt->len + 3;
-+	req_sz &= (uint)~3;
-+
-+	err = sdio_memcpy_toio(sdiodev->func[fn], addr,
-+			       ((u8 *)(pkt->data)), req_sz);
-+
- 	if (err == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-+
- 	return err;
- }
- 
-@@ -643,7 +661,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 	if (err)
- 		goto done;
- 
--	err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr, pkt);
-+	err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
- 
- done:
- 	return err;
-@@ -665,14 +683,14 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 		goto done;
- 
- 	if (pktq->qlen == 1)
--		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
--					 pktq->next);
-+		err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
-+					    pktq->next);
- 	else if (!sdiodev->sg_support) {
- 		glom_skb = brcmu_pkt_buf_get_skb(totlen);
- 		if (!glom_skb)
- 			return -ENOMEM;
--		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, false, addr,
--					 glom_skb);
-+		err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
-+					    glom_skb);
- 		if (err)
- 			goto done;
- 
-@@ -707,8 +725,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 	err = brcmf_sdiod_addrprep(sdiodev, &addr);
- 
- 	if (!err)
--		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true, addr,
--					 mypkt);
-+		err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
- 
- 	brcmu_pkt_buf_free_skb(mypkt);
- 	return err;
-@@ -730,8 +747,8 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	if (pktq->qlen == 1 || !sdiodev->sg_support)
- 		skb_queue_walk(pktq, skb) {
--			err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_2, true,
--						 addr, skb);
-+			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
-+						     addr, skb);
- 			if (err)
- 				break;
- 		}
-@@ -783,10 +800,16 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 		sdaddr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 		skb_put(pkt, dsize);
--		if (write)
-+
-+		if (write) {
- 			memcpy(pkt->data, data, dsize);
--		err = brcmf_sdiod_buffrw(sdiodev, SDIO_FUNC_1, write, sdaddr,
--					 pkt);
-+			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1,
-+						     sdaddr, pkt);
-+		} else {
-+			err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1,
-+						    sdaddr, pkt);
-+		}
-+
- 		if (err) {
- 			brcmf_err("membytes transfer failed\n");
- 			break;

+ 0 - 34
package/kernel/mac80211/patches/312-v4.16-0002-brcmfmac-whitespace-fixes-in-brcmf_sdiod_send_buf.patch

@@ -1,34 +0,0 @@
-From 6e24dd012bfda479d0046f7995058f167e1923bc Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:27 +0100
-Subject: [PATCH] brcmfmac: whitespace fixes in brcmf_sdiod_send_buf()
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-[arend: mention function in patch subject]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -714,6 +714,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 	int err;
- 
- 	mypkt = brcmu_pkt_buf_get_skb(nbytes);
-+
- 	if (!mypkt) {
- 		brcmf_err("brcmu_pkt_buf_get_skb failed: len %d\n",
- 			  nbytes);
-@@ -728,8 +729,8 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 		err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
- 
- 	brcmu_pkt_buf_free_skb(mypkt);
--	return err;
- 
-+	return err;
- }
- 
- int brcmf_sdiod_send_pkt(struct brcmf_sdio_dev *sdiodev,

+ 0 - 36
package/kernel/mac80211/patches/312-v4.16-0003-brcmfmac-Clarify-if-using-braces.patch

@@ -1,36 +0,0 @@
-From a7323378dcf1f10a98f47b744e6f65e6fd671d84 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:28 +0100
-Subject: [PATCH] brcmfmac: Clarify if using braces.
-
-Whilst this if () statement is technically correct, it lacks clarity.
-
-Signed-off-by: Ian Molton <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -746,16 +746,17 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 	if (err)
- 		return err;
- 
--	if (pktq->qlen == 1 || !sdiodev->sg_support)
-+	if (pktq->qlen == 1 || !sdiodev->sg_support) {
- 		skb_queue_walk(pktq, skb) {
- 			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
- 						     addr, skb);
- 			if (err)
- 				break;
- 		}
--	else
-+	} else {
- 		err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, true, addr,
- 					    pktq);
-+	}
- 
- 	return err;
- }

+ 0 - 831
package/kernel/mac80211/patches/312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch

@@ -1,831 +0,0 @@
-From 71bd508d7ded8c504ef05d1b4befecfe25e54cb1 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:29 +0100
-Subject: [PATCH] brcmfmac: Rename / replace old IO functions with simpler
- ones.
-
-Primarily this patch removes:
-
-brcmf_sdiod_f0_writeb()
-brcmf_sdiod_reg_write()
-brcmf_sdiod_reg_read()
-
-Since we no longer use the quirky method of deciding which function to
-address via the address being accessed, take the opportunity to rename
-some IO functions more in line with common kernel code. We also convert
-those that map directly to sdio_{read,write}*() to macros.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 169 +++----------------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 186 ++++++++++-----------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.h    |  28 +++-
- 3 files changed, 138 insertions(+), 245 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -137,27 +137,27 @@ int brcmf_sdiod_intr_register(struct brc
- 		if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
- 			/* assign GPIO to SDIO core */
- 			addr = CORE_CC_REG(SI_ENUM_BASE, gpiocontrol);
--			gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret);
-+			gpiocontrol = brcmf_sdiod_readl(sdiodev, addr, &ret);
- 			gpiocontrol |= 0x2;
--			brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret);
-+			brcmf_sdiod_writel(sdiodev, addr, gpiocontrol, &ret);
- 
--			brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf,
--					  &ret);
--			brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
--			brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
-+			brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_SELECT,
-+					   0xf, &ret);
-+			brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
-+			brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
- 		}
- 
- 		/* must configure SDIO_CCCR_IENx to enable irq */
--		data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret);
-+		data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_IENx, &ret);
- 		data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
--		brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret);
-+		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret);
- 
- 		/* redirect, configure and enable io for interrupt signal */
- 		data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
- 		if (pdata->oob_irq_flags & IRQF_TRIGGER_HIGH)
- 			data |= SDIO_SEPINT_ACT_HI;
--		brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);
--
-+		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
-+				     data, &ret);
- 		sdio_release_host(sdiodev->func[1]);
- 	} else {
- 		brcmf_dbg(SDIO, "Entering\n");
-@@ -183,8 +183,8 @@ void brcmf_sdiod_intr_unregister(struct
- 
- 		pdata = &sdiodev->settings->bus.sdio;
- 		sdio_claim_host(sdiodev->func[1]);
--		brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
--		brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
-+		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
-+		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
- 		sdio_release_host(sdiodev->func[1]);
- 
- 		sdiodev->oob_irq_requested = false;
-@@ -242,8 +242,8 @@ static int brcmf_sdiod_set_sbaddr_window
- 	addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
- 
- 	for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
--				  addr & 0xff, &err);
-+		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
-+				   addr & 0xff, &err);
- 
- 	return err;
- }
-@@ -267,124 +267,15 @@ static int brcmf_sdiod_addrprep(struct b
- 	return 0;
- }
- 
--static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func, u8 byte,
--					uint regaddr)
--{
--	int err_ret;
--
--	/*
--	 * Can only directly write to some F0 registers.
--	 * Handle CCCR_IENx and CCCR_ABORT command
--	 * as a special case.
--	 */
--	if ((regaddr == SDIO_CCCR_ABORT) ||
--	    (regaddr == SDIO_CCCR_IENx))
--		sdio_writeb(func, byte, regaddr, &err_ret);
--	else
--		sdio_f0_writeb(func, byte, regaddr, &err_ret);
--
--	return err_ret;
--}
--
--static int brcmf_sdiod_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr,
--				 u8 regsz, void *data)
--{
--	int ret;
--
--	/*
--	 * figure out how to read the register based on address range
--	 * 0x00 ~ 0x7FF: function 0 CCCR and FBR
--	 * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
--	 * The rest: function 1 silicon backplane core registers
--	 * f0 writes must be bytewise
--	 */
--
--	if ((addr & ~REG_F0_REG_MASK) == 0) {
--		if (WARN_ON(regsz > 1))
--			return -EINVAL;
--		ret = brcmf_sdiod_f0_writeb(sdiodev->func[0],
--					    *(u8 *)data, addr);
--	} else {
--		switch (regsz) {
--		case 1:
--			sdio_writeb(sdiodev->func[1], *(u8 *)data, addr, &ret);
--			break;
--		case 4:
--			ret = brcmf_sdiod_addrprep(sdiodev, &addr);
--			if (ret)
--				goto done;
--
--			sdio_writel(sdiodev->func[1], *(u32 *)data, addr, &ret);
--			break;
--		default:
--			WARN(1, "Invalid reg size\n");
--			ret = -EINVAL;
--			break;
--		}
--	}
--
--done:
--	return ret;
--}
--
--static int brcmf_sdiod_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr,
--				u8 regsz, void *data)
--{
--	int ret;
--
--	/*
--	 * figure out how to read the register based on address range
--	 * 0x00 ~ 0x7FF: function 0 CCCR and FBR
--	 * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
--	 * The rest: function 1 silicon backplane core registers
--	 * f0 reads must be bytewise
--	 */
--	if ((addr & ~REG_F0_REG_MASK) == 0) {
--		if (WARN_ON(regsz > 1))
--			return -EINVAL;
--		*(u8 *)data = sdio_f0_readb(sdiodev->func[0], addr, &ret);
--	} else {
--		switch (regsz) {
--		case 1:
--			*(u8 *)data = sdio_readb(sdiodev->func[1], addr, &ret);
--			break;
--		case 4:
--			ret = brcmf_sdiod_addrprep(sdiodev, &addr);
--			if (ret)
--				goto done;
--
--			*(u32 *)data = sdio_readl(sdiodev->func[1], addr, &ret);
--			break;
--		default:
--			WARN(1, "Invalid reg size\n");
--			ret = -EINVAL;
--			break;
--		}
--	}
--
--done:
--	return ret;
--}
--
--u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
-+u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
- {
--	u8 data;
-+	u32 data = 0;
- 	int retval;
- 
--	retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
--
--	if (ret)
--		*ret = retval;
--
--	return data;
--}
-+	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
- 
--u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
--{
--	u32 data;
--	int retval;
--
--	retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
-+	if (!retval)
-+		data = sdio_readl(sdiodev->func[1], addr, &retval);
- 
- 	if (ret)
- 		*ret = retval;
-@@ -392,23 +283,15 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- 	return data;
- }
- 
--void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr,
--		      u8 data, int *ret)
-+void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr,
-+			u32 data, int *ret)
- {
- 	int retval;
- 
--	retval = brcmf_sdiod_reg_write(sdiodev, addr, 1, &data);
--
--	if (ret)
--		*ret = retval;
--}
--
--void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr,
--		      u32 data, int *ret)
--{
--	int retval;
-+	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
- 
--	retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
-+	if (!retval)
-+		sdio_writel(sdiodev->func[1], data, addr, &retval);
- 
- 	if (ret)
- 		*ret = retval;
-@@ -846,8 +729,8 @@ int brcmf_sdiod_abort(struct brcmf_sdio_
- {
- 	brcmf_dbg(SDIO, "Enter\n");
- 
--	/* issue abort cmd52 command through F0 */
--	brcmf_sdiod_reg_write(sdiodev, SDIO_CCCR_ABORT, 1, &fn);
-+	/* Issue abort cmd52 command through F0 */
-+	brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, fn, NULL);
- 
- 	brcmf_dbg(SDIO, "Exit\n");
- 	return 0;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -669,7 +669,7 @@ static int r_sdreg32(struct brcmf_sdio *
- 	int ret;
- 
- 	core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
--	*regvar = brcmf_sdiod_regrl(bus->sdiodev, core->base + offset, &ret);
-+	*regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
- 
- 	return ret;
- }
-@@ -680,7 +680,7 @@ static int w_sdreg32(struct brcmf_sdio *
- 	int ret;
- 
- 	core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
--	brcmf_sdiod_regwl(bus->sdiodev, core->base + reg_offset, regval, &ret);
-+	brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
- 
- 	return ret;
- }
-@@ -697,8 +697,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
- 
- 	wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
- 	/* 1st KSO write goes to AOS wake up core if device is asleep  */
--	brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
--			  wr_val, &err);
-+	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
- 
- 	if (on) {
- 		/* device WAKEUP through KSO:
-@@ -724,7 +723,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
- 		 * just one write attempt may fail,
- 		 * read it back until it matches written value
- 		 */
--		rd_val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
-+		rd_val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- 					   &err);
- 		if (!err) {
- 			if ((rd_val & bmask) == cmp_val)
-@@ -734,9 +733,11 @@ brcmf_sdio_kso_control(struct brcmf_sdio
- 		/* bail out upon subsequent access errors */
- 		if (err && (err_cnt++ > BRCMF_SDIO_MAX_ACCESS_ERRORS))
- 			break;
-+
- 		udelay(KSO_WAIT_US);
--		brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
--				  wr_val, &err);
-+		brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val,
-+				   &err);
-+
- 	} while (try_cnt++ < MAX_KSO_ATTEMPTS);
- 
- 	if (try_cnt > 2)
-@@ -772,15 +773,15 @@ static int brcmf_sdio_htclk(struct brcmf
- 		clkreq =
- 		    bus->alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ;
- 
--		brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--				  clkreq, &err);
-+		brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+				   clkreq, &err);
- 		if (err) {
- 			brcmf_err("HT Avail request error: %d\n", err);
- 			return -EBADE;
- 		}
- 
- 		/* Check current status */
--		clkctl = brcmf_sdiod_regrb(bus->sdiodev,
-+		clkctl = brcmf_sdiod_readb(bus->sdiodev,
- 					   SBSDIO_FUNC1_CHIPCLKCSR, &err);
- 		if (err) {
- 			brcmf_err("HT Avail read error: %d\n", err);
-@@ -790,35 +791,34 @@ static int brcmf_sdio_htclk(struct brcmf
- 		/* Go to pending and await interrupt if appropriate */
- 		if (!SBSDIO_CLKAV(clkctl, bus->alp_only) && pendok) {
- 			/* Allow only clock-available interrupt */
--			devctl = brcmf_sdiod_regrb(bus->sdiodev,
-+			devctl = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_DEVICE_CTL, &err);
- 			if (err) {
--				brcmf_err("Devctl error setting CA: %d\n",
--					  err);
-+				brcmf_err("Devctl error setting CA: %d\n", err);
- 				return -EBADE;
- 			}
- 
- 			devctl |= SBSDIO_DEVCTL_CA_INT_ONLY;
--			brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
--					  devctl, &err);
-+			brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
-+					   devctl, &err);
- 			brcmf_dbg(SDIO, "CLKCTL: set PENDING\n");
- 			bus->clkstate = CLK_PENDING;
- 
- 			return 0;
- 		} else if (bus->clkstate == CLK_PENDING) {
- 			/* Cancel CA-only interrupt filter */
--			devctl = brcmf_sdiod_regrb(bus->sdiodev,
-+			devctl = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_DEVICE_CTL, &err);
- 			devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
--			brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
--					  devctl, &err);
-+			brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
-+					   devctl, &err);
- 		}
- 
- 		/* Otherwise, wait here (polling) for HT Avail */
- 		timeout = jiffies +
- 			  msecs_to_jiffies(PMU_MAX_TRANSITION_DLY/1000);
- 		while (!SBSDIO_CLKAV(clkctl, bus->alp_only)) {
--			clkctl = brcmf_sdiod_regrb(bus->sdiodev,
-+			clkctl = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_FUNC1_CHIPCLKCSR,
- 						   &err);
- 			if (time_after(jiffies, timeout))
-@@ -852,16 +852,16 @@ static int brcmf_sdio_htclk(struct brcmf
- 
- 		if (bus->clkstate == CLK_PENDING) {
- 			/* Cancel CA-only interrupt filter */
--			devctl = brcmf_sdiod_regrb(bus->sdiodev,
-+			devctl = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_DEVICE_CTL, &err);
- 			devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
--			brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
--					  devctl, &err);
-+			brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
-+					   devctl, &err);
- 		}
- 
- 		bus->clkstate = CLK_SDONLY;
--		brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--				  clkreq, &err);
-+		brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+				   clkreq, &err);
- 		brcmf_dbg(SDIO, "CLKCTL: turned OFF\n");
- 		if (err) {
- 			brcmf_err("Failed access turning clock off: %d\n",
-@@ -951,14 +951,14 @@ brcmf_sdio_bus_sleep(struct brcmf_sdio *
- 
- 		/* Going to sleep */
- 		if (sleep) {
--			clkcsr = brcmf_sdiod_regrb(bus->sdiodev,
-+			clkcsr = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_FUNC1_CHIPCLKCSR,
- 						   &err);
- 			if ((clkcsr & SBSDIO_CSR_MASK) == 0) {
- 				brcmf_dbg(SDIO, "no clock, set ALP\n");
--				brcmf_sdiod_regwb(bus->sdiodev,
--						  SBSDIO_FUNC1_CHIPCLKCSR,
--						  SBSDIO_ALP_AVAIL_REQ, &err);
-+				brcmf_sdiod_writeb(bus->sdiodev,
-+						   SBSDIO_FUNC1_CHIPCLKCSR,
-+						   SBSDIO_ALP_AVAIL_REQ, &err);
- 			}
- 			err = brcmf_sdio_kso_control(bus, false);
- 		} else {
-@@ -1178,16 +1178,16 @@ static void brcmf_sdio_rxfail(struct brc
- 	if (abort)
- 		brcmf_sdiod_abort(bus->sdiodev, SDIO_FUNC_2);
- 
--	brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL,
--			  SFC_RF_TERM, &err);
-+	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
-+			   &err);
- 	bus->sdcnt.f1regdata++;
- 
- 	/* Wait until the packet has been flushed (device/FIFO stable) */
- 	for (lastrbc = retries = 0xffff; retries > 0; retries--) {
--		hi = brcmf_sdiod_regrb(bus->sdiodev,
--				       SBSDIO_FUNC1_RFRAMEBCHI, &err);
--		lo = brcmf_sdiod_regrb(bus->sdiodev,
--				       SBSDIO_FUNC1_RFRAMEBCLO, &err);
-+		hi = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCHI,
-+				       &err);
-+		lo = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCLO,
-+				       &err);
- 		bus->sdcnt.f1regdata += 2;
- 
- 		if ((hi == 0) && (lo == 0))
-@@ -1229,12 +1229,12 @@ static void brcmf_sdio_txfail(struct brc
- 	bus->sdcnt.tx_sderrs++;
- 
- 	brcmf_sdiod_abort(sdiodev, SDIO_FUNC_2);
--	brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
-+	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
- 	bus->sdcnt.f1regdata++;
- 
- 	for (i = 0; i < 3; i++) {
--		hi = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
--		lo = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
-+		hi = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
-+		lo = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
- 		bus->sdcnt.f1regdata += 2;
- 		if ((hi == 0) && (lo == 0))
- 			break;
-@@ -2446,11 +2446,11 @@ static void brcmf_sdio_bus_stop(struct d
- 		bus->hostintmask = 0;
- 
- 		/* Force backplane clocks to assure F2 interrupt propagates */
--		saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+		saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- 					    &err);
- 		if (!err)
--			brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--					  (saveclk | SBSDIO_FORCE_HT), &err);
-+			brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+					   (saveclk | SBSDIO_FORCE_HT), &err);
- 		if (err)
- 			brcmf_err("Failed to force clock for F2: err %d\n",
- 				  err);
-@@ -2509,7 +2509,7 @@ static int brcmf_sdio_intr_rstatus(struc
- 	buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- 	addr = buscore->base + offsetof(struct sdpcmd_regs, intstatus);
- 
--	val = brcmf_sdiod_regrl(bus->sdiodev, addr, &ret);
-+	val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
- 	bus->sdcnt.f1regdata++;
- 	if (ret != 0)
- 		return ret;
-@@ -2519,7 +2519,7 @@ static int brcmf_sdio_intr_rstatus(struc
- 
- 	/* Clear interrupts */
- 	if (val) {
--		brcmf_sdiod_regwl(bus->sdiodev, addr, val, &ret);
-+		brcmf_sdiod_writel(bus->sdiodev, addr, val, &ret);
- 		bus->sdcnt.f1regdata++;
- 		atomic_or(val, &bus->intstatus);
- 	}
-@@ -2545,23 +2545,23 @@ static void brcmf_sdio_dpc(struct brcmf_
- 
- #ifdef DEBUG
- 		/* Check for inconsistent device control */
--		devctl = brcmf_sdiod_regrb(bus->sdiodev,
--					   SBSDIO_DEVICE_CTL, &err);
-+		devctl = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_DEVICE_CTL,
-+					   &err);
- #endif				/* DEBUG */
- 
- 		/* Read CSR, if clock on switch to AVAIL, else ignore */
--		clkctl = brcmf_sdiod_regrb(bus->sdiodev,
-+		clkctl = brcmf_sdiod_readb(bus->sdiodev,
- 					   SBSDIO_FUNC1_CHIPCLKCSR, &err);
- 
- 		brcmf_dbg(SDIO, "DPC: PENDING, devctl 0x%02x clkctl 0x%02x\n",
- 			  devctl, clkctl);
- 
- 		if (SBSDIO_HTAV(clkctl)) {
--			devctl = brcmf_sdiod_regrb(bus->sdiodev,
-+			devctl = brcmf_sdiod_readb(bus->sdiodev,
- 						   SBSDIO_DEVICE_CTL, &err);
- 			devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
--			brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
--					  devctl, &err);
-+			brcmf_sdiod_writeb(bus->sdiodev,
-+					   SBSDIO_DEVICE_CTL, devctl, &err);
- 			bus->clkstate = CLK_AVAIL;
- 		}
- 	}
-@@ -3347,31 +3347,31 @@ static void brcmf_sdio_sr_init(struct br
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
--	val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
-+	val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
- 	if (err) {
- 		brcmf_err("error reading SBSDIO_FUNC1_WAKEUPCTRL\n");
- 		return;
- 	}
- 
- 	val |= 1 << SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT;
--	brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
-+	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
- 	if (err) {
- 		brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
- 		return;
- 	}
- 
- 	/* Add CMD14 Support */
--	brcmf_sdiod_regwb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
--			  (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
--			   SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
--			  &err);
-+	brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
-+			     (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
-+			      SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
-+			     &err);
- 	if (err) {
- 		brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
- 		return;
- 	}
- 
--	brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--			  SBSDIO_FORCE_HT, &err);
-+	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+			   SBSDIO_FORCE_HT, &err);
- 	if (err) {
- 		brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
- 		return;
-@@ -3394,7 +3394,7 @@ static int brcmf_sdio_kso_init(struct br
- 	if (brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV)->rev < 12)
- 		return 0;
- 
--	val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
-+	val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
- 	if (err) {
- 		brcmf_err("error reading SBSDIO_FUNC1_SLEEPCSR\n");
- 		return err;
-@@ -3403,8 +3403,8 @@ static int brcmf_sdio_kso_init(struct br
- 	if (!(val & SBSDIO_FUNC1_SLEEPCSR_KSO_MASK)) {
- 		val |= (SBSDIO_FUNC1_SLEEPCSR_KSO_EN <<
- 			SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
--		brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
--				  val, &err);
-+		brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
-+				   val, &err);
- 		if (err) {
- 			brcmf_err("error writing SBSDIO_FUNC1_SLEEPCSR\n");
- 			return err;
-@@ -3565,9 +3565,9 @@ static void brcmf_sdio_bus_watchdog(stru
- 				u8 devpend;
- 
- 				sdio_claim_host(bus->sdiodev->func[1]);
--				devpend = brcmf_sdiod_regrb(bus->sdiodev,
--							    SDIO_CCCR_INTx,
--							    NULL);
-+				devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
-+							       SDIO_CCCR_INTx,
-+							       NULL);
- 				sdio_release_host(bus->sdiodev->func[1]);
- 				intstatus = devpend & (INTR_STATUS_FUNC1 |
- 						       INTR_STATUS_FUNC2);
-@@ -3705,12 +3705,12 @@ brcmf_sdio_drivestrengthinit(struct brcm
- 			}
- 		}
- 		addr = CORE_CC_REG(pmu->base, chipcontrol_addr);
--		brcmf_sdiod_regwl(sdiodev, addr, 1, NULL);
--		cc_data_temp = brcmf_sdiod_regrl(sdiodev, addr, NULL);
-+		brcmf_sdiod_writel(sdiodev, addr, 1, NULL);
-+		cc_data_temp = brcmf_sdiod_readl(sdiodev, addr, NULL);
- 		cc_data_temp &= ~str_mask;
- 		drivestrength_sel <<= str_shift;
- 		cc_data_temp |= drivestrength_sel;
--		brcmf_sdiod_regwl(sdiodev, addr, cc_data_temp, NULL);
-+		brcmf_sdiod_writel(sdiodev, addr, cc_data_temp, NULL);
- 
- 		brcmf_dbg(INFO, "SDIO: %d mA (req=%d mA) drive strength selected, set to 0x%08x\n",
- 			  str_tab[i].strength, drivestrength, cc_data_temp);
-@@ -3725,7 +3725,7 @@ static int brcmf_sdio_buscoreprep(void *
- 
- 	/* Try forcing SDIO core to do ALPAvail request only */
- 	clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ;
--	brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
-+	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- 	if (err) {
- 		brcmf_err("error writing for HT off\n");
- 		return err;
-@@ -3733,8 +3733,7 @@ static int brcmf_sdio_buscoreprep(void *
- 
- 	/* If register supported, wait for ALPAvail and then force ALP */
- 	/* This may take up to 15 milliseconds */
--	clkval = brcmf_sdiod_regrb(sdiodev,
--				   SBSDIO_FUNC1_CHIPCLKCSR, NULL);
-+	clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, NULL);
- 
- 	if ((clkval & ~SBSDIO_AVBITS) != clkset) {
- 		brcmf_err("ChipClkCSR access: wrote 0x%02x read 0x%02x\n",
-@@ -3742,10 +3741,11 @@ static int brcmf_sdio_buscoreprep(void *
- 		return -EACCES;
- 	}
- 
--	SPINWAIT(((clkval = brcmf_sdiod_regrb(sdiodev,
--					      SBSDIO_FUNC1_CHIPCLKCSR, NULL)),
--			!SBSDIO_ALPAV(clkval)),
--			PMU_MAX_TRANSITION_DLY);
-+	SPINWAIT(((clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+					      NULL)),
-+		 !SBSDIO_ALPAV(clkval)),
-+		 PMU_MAX_TRANSITION_DLY);
-+
- 	if (!SBSDIO_ALPAV(clkval)) {
- 		brcmf_err("timeout on ALPAV wait, clkval 0x%02x\n",
- 			  clkval);
-@@ -3753,11 +3753,11 @@ static int brcmf_sdio_buscoreprep(void *
- 	}
- 
- 	clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP;
--	brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
-+	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- 	udelay(65);
- 
- 	/* Also, disable the extra SDIO pull-ups */
--	brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
-+	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
- 
- 	return 0;
- }
-@@ -3772,7 +3772,7 @@ static void brcmf_sdio_buscore_activate(
- 	/* clear all interrupts */
- 	core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
- 	reg_addr = core->base + offsetof(struct sdpcmd_regs, intstatus);
--	brcmf_sdiod_regwl(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
-+	brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
- 
- 	if (rstvec)
- 		/* Write reset vector to address 0 */
-@@ -3785,7 +3785,7 @@ static u32 brcmf_sdio_buscore_read32(voi
- 	struct brcmf_sdio_dev *sdiodev = ctx;
- 	u32 val, rev;
- 
--	val = brcmf_sdiod_regrl(sdiodev, addr, NULL);
-+	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
- 	if ((sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
- 	     sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
- 	    addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
-@@ -3802,7 +3802,7 @@ static void brcmf_sdio_buscore_write32(v
- {
- 	struct brcmf_sdio_dev *sdiodev = ctx;
- 
--	brcmf_sdiod_regwl(sdiodev, addr, val, NULL);
-+	brcmf_sdiod_writel(sdiodev, addr, val, NULL);
- }
- 
- static const struct brcmf_buscore_ops brcmf_sdio_buscore_ops = {
-@@ -3826,18 +3826,18 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	sdio_claim_host(sdiodev->func[1]);
- 
- 	pr_debug("F1 signature read @0x18000000=0x%4x\n",
--		 brcmf_sdiod_regrl(sdiodev, SI_ENUM_BASE, NULL));
-+		 brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
- 
- 	/*
- 	 * Force PLL off until brcmf_chip_attach()
- 	 * programs PLL control regs
- 	 */
- 
--	brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--			  BRCMF_INIT_CLKCTL1, &err);
-+	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, BRCMF_INIT_CLKCTL1,
-+			   &err);
- 	if (!err)
--		clkctl = brcmf_sdiod_regrb(sdiodev,
--					   SBSDIO_FUNC1_CHIPCLKCSR, &err);
-+		clkctl = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+					   &err);
- 
- 	if (err || ((clkctl & ~SBSDIO_AVBITS) != BRCMF_INIT_CLKCTL1)) {
- 		brcmf_err("ChipClkCSR access: err %d wrote 0x%02x read 0x%02x\n",
-@@ -3897,25 +3897,25 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	brcmf_sdio_drivestrengthinit(sdiodev, bus->ci, drivestrength);
- 
- 	/* Set card control so an SDIO card reset does a WLAN backplane reset */
--	reg_val = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
-+	reg_val = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
- 	if (err)
- 		goto fail;
- 
- 	reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET;
- 
--	brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
-+	brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
- 	if (err)
- 		goto fail;
- 
- 	/* set PMUControl so a backplane reset does PMU state reload */
- 	reg_addr = CORE_CC_REG(brcmf_chip_get_pmu(bus->ci)->base, pmucontrol);
--	reg_val = brcmf_sdiod_regrl(sdiodev, reg_addr, &err);
-+	reg_val = brcmf_sdiod_readl(sdiodev, reg_addr, &err);
- 	if (err)
- 		goto fail;
- 
- 	reg_val |= (BCMA_CC_PMU_CTL_RES_RELOAD << BCMA_CC_PMU_CTL_RES_SHIFT);
- 
--	brcmf_sdiod_regwl(sdiodev, reg_addr, reg_val, &err);
-+	brcmf_sdiod_writel(sdiodev, reg_addr, reg_val, &err);
- 	if (err)
- 		goto fail;
- 
-@@ -4055,10 +4055,10 @@ static void brcmf_sdio_firmware_callback
- 		goto release;
- 
- 	/* Force clocks on backplane to be sure F2 interrupt propagates */
--	saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
-+	saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
- 	if (!err) {
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--				  (saveclk | SBSDIO_FORCE_HT), &err);
-+		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+				   (saveclk | SBSDIO_FORCE_HT), &err);
- 	}
- 	if (err) {
- 		brcmf_err("Failed to force clock for F2: err %d\n", err);
-@@ -4080,7 +4080,7 @@ static void brcmf_sdio_firmware_callback
- 		w_sdreg32(bus, bus->hostintmask,
- 			  offsetof(struct sdpcmd_regs, hostintmask));
- 
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, 8, &err);
-+		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- 	} else {
- 		/* Disable F2 again */
- 		sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
-@@ -4091,8 +4091,8 @@ static void brcmf_sdio_firmware_callback
- 		brcmf_sdio_sr_init(bus);
- 	} else {
- 		/* Restore previous clock setting */
--		brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
--				  saveclk, &err);
-+		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+				   saveclk, &err);
- 	}
- 
- 	if (err == 0) {
-@@ -4225,7 +4225,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	bus->rxflow = false;
- 
- 	/* Done with backplane-dependent accesses, can drop clock... */
--	brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
-+	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
- 
- 	sdio_release_host(bus->sdiodev->func[1]);
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -50,6 +50,7 @@
- #define SBSDIO_NUM_FUNCTION		3
- 
- /* function 0 vendor specific CCCR registers */
-+
- #define SDIO_CCCR_BRCM_CARDCAP			0xf0
- #define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT	0x02
- #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT	0x04
-@@ -131,8 +132,6 @@
- /* with b15, maps to 32-bit SB access */
- #define SBSDIO_SB_ACCESS_2_4B_FLAG	0x08000
- 
--/* valid bits in SBSDIO_FUNC1_SBADDRxxx regs */
--
- /* Address bits from SBADDR regs */
- #define SBSDIO_SBWINDOW_MASK		0xffff8000
- 
-@@ -293,13 +292,24 @@ struct sdpcmd_regs {
- int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev);
- void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev);
- 
--/* sdio device register access interface */
--u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
--u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
--void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, u8 data,
--		       int *ret);
--void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
--		       int *ret);
-+/* SDIO device register access interface */
-+/* Accessors for SDIO Function 0 */
-+#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
-+	sdio_readb((sdiodev)->func[0], (addr), (r))
-+
-+#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
-+	sdio_writeb((sdiodev)->func[0], (v), (addr), (ret))
-+
-+/* Accessors for SDIO Function 1 */
-+#define brcmf_sdiod_readb(sdiodev, addr, r) \
-+	sdio_readb((sdiodev)->func[1], (addr), (r))
-+
-+#define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
-+	sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
-+
-+u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
-+void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
-+			int *ret);
- 
- /* Buffer transfer to/from device (client) core via cmd53.
-  *   fn:       function number

+ 0 - 59
package/kernel/mac80211/patches/312-v4.16-0005-brcmfmac-Tidy-register-definitions-a-little.patch

@@ -1,59 +0,0 @@
-From eeef8a5da781e11746347b3cd9f1942be48ebaf0 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:30 +0100
-Subject: [PATCH] brcmfmac: Tidy register definitions a little
-
-Trivial tidy of register definitions.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c |  4 ++--
- .../net/wireless/broadcom/brcm80211/brcmfmac/sdio.h   | 19 ++++++++++---------
- 2 files changed, 12 insertions(+), 11 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -153,9 +153,9 @@ int brcmf_sdiod_intr_register(struct brc
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret);
- 
- 		/* redirect, configure and enable io for interrupt signal */
--		data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
-+		data = SDIO_CCCR_BRCM_SEPINT_MASK | SDIO_CCCR_BRCM_SEPINT_OE;
- 		if (pdata->oob_irq_flags & IRQF_TRIGGER_HIGH)
--			data |= SDIO_SEPINT_ACT_HI;
-+			data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
- 				     data, &ret);
- 		sdio_release_host(sdiodev->func[1]);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -52,16 +52,17 @@
- /* function 0 vendor specific CCCR registers */
- 
- #define SDIO_CCCR_BRCM_CARDCAP			0xf0
--#define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT	0x02
--#define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT	0x04
--#define SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC	0x08
--#define SDIO_CCCR_BRCM_CARDCTRL		0xf1
--#define SDIO_CCCR_BRCM_CARDCTRL_WLANRESET	0x02
--#define SDIO_CCCR_BRCM_SEPINT			0xf2
-+#define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT	BIT(1)
-+#define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT	BIT(2)
-+#define SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC	BIT(3)
-+
-+#define SDIO_CCCR_BRCM_CARDCTRL			0xf1
-+#define SDIO_CCCR_BRCM_CARDCTRL_WLANRESET	BIT(1)
- 
--#define  SDIO_SEPINT_MASK		0x01
--#define  SDIO_SEPINT_OE			0x02
--#define  SDIO_SEPINT_ACT_HI		0x04
-+#define SDIO_CCCR_BRCM_SEPINT			0xf2
-+#define SDIO_CCCR_BRCM_SEPINT_MASK		BIT(0)
-+#define SDIO_CCCR_BRCM_SEPINT_OE		BIT(1)
-+#define SDIO_CCCR_BRCM_SEPINT_ACT_HI		BIT(2)
- 
- /* function 1 miscellaneous registers */
- 

+ 0 - 190
package/kernel/mac80211/patches/312-v4.16-0006-brcmfmac-Remove-brcmf_sdiod_addrprep.patch

@@ -1,190 +0,0 @@
-From a7c3aa1509e243a09c5b1660c8702d792ca76aed Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:31 +0100
-Subject: [PATCH] brcmfmac: Remove brcmf_sdiod_addrprep()
-
-This function has become trivial enough that it may as well be pushed into
-its callers, which has the side-benefit of clarifying what's going on.
-
-Remove it, and rename brcmf_sdiod_set_sbaddr_window() to
-brcmf_sdiod_set_backplane_window() as it's easier to understand.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 84 ++++++++++++----------
- 1 file changed, 46 insertions(+), 38 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -230,41 +230,25 @@ void brcmf_sdiod_change_state(struct brc
- 	sdiodev->state = state;
- }
- 
--static int brcmf_sdiod_set_sbaddr_window(struct brcmf_sdio_dev *sdiodev,
--					 u32 address)
-+static int brcmf_sdiod_set_backplane_window(struct brcmf_sdio_dev *sdiodev,
-+					    u32 addr)
- {
-+	u32 v, bar0 = addr & SBSDIO_SBWINDOW_MASK;
- 	int err = 0, i;
--	u32 addr;
- 
--	if (sdiodev->state == BRCMF_SDIOD_NOMEDIUM)
--		return -ENOMEDIUM;
-+	if (bar0 == sdiodev->sbwad)
-+		return 0;
- 
--	addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
-+	v = bar0 >> 8;
- 
--	for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
-+	for (i = 0 ; i < 3 && !err ; i++, v >>= 8)
- 		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
--				   addr & 0xff, &err);
--
--	return err;
--}
--
--static int brcmf_sdiod_addrprep(struct brcmf_sdio_dev *sdiodev, u32 *addr)
--{
--	uint bar0 = *addr & ~SBSDIO_SB_OFT_ADDR_MASK;
--	int err = 0;
--
--	if (bar0 != sdiodev->sbwad) {
--		err = brcmf_sdiod_set_sbaddr_window(sdiodev, bar0);
--		if (err)
--			return err;
-+				   v & 0xff, &err);
- 
-+	if (!err)
- 		sdiodev->sbwad = bar0;
--	}
- 
--	*addr &= SBSDIO_SB_OFT_ADDR_MASK;
--	*addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
--
--	return 0;
-+	return err;
- }
- 
- u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
-@@ -272,11 +256,16 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_
- 	u32 data = 0;
- 	int retval;
- 
--	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
-+	if (retval)
-+		goto out;
-+
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	if (!retval)
--		data = sdio_readl(sdiodev->func[1], addr, &retval);
-+	data = sdio_readl(sdiodev->func[1], addr, &retval);
- 
-+out:
- 	if (ret)
- 		*ret = retval;
- 
-@@ -288,11 +277,16 @@ void brcmf_sdiod_writel(struct brcmf_sdi
- {
- 	int retval;
- 
--	retval = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	retval = brcmf_sdiod_set_backplane_window(sdiodev, addr);
-+	if (retval)
-+		goto out;
- 
--	if (!retval)
--		sdio_writel(sdiodev->func[1], data, addr, &retval);
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
-+	sdio_writel(sdiodev->func[1], data, addr, &retval);
-+
-+out:
- 	if (ret)
- 		*ret = retval;
- }
-@@ -540,10 +534,13 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
- 	if (err)
- 		goto done;
- 
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-+
- 	err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
- 
- done:
-@@ -561,10 +558,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
- 		  addr, pktq->qlen);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
- 	if (err)
- 		goto done;
- 
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-+
- 	if (pktq->qlen == 1)
- 		err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
- 					    pktq->next);
-@@ -606,7 +606,12 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 
- 	memcpy(mypkt->data, buf, nbytes);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
-+	if (err)
-+		return err;
-+
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (!err)
- 		err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
-@@ -625,10 +630,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
- 
--	err = brcmf_sdiod_addrprep(sdiodev, &addr);
-+	err = brcmf_sdiod_set_backplane_window(sdiodev, addr);
- 	if (err)
- 		return err;
- 
-+	addr &= SBSDIO_SB_OFT_ADDR_MASK;
-+	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
-+
- 	if (pktq->qlen == 1 || !sdiodev->sg_support) {
- 		skb_queue_walk(pktq, skb) {
- 			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
-@@ -673,7 +681,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	/* Do the transfer(s) */
- 	while (size) {
- 		/* Set the backplane window to include the start address */
--		err = brcmf_sdiod_set_sbaddr_window(sdiodev, address);
-+		err = brcmf_sdiod_set_backplane_window(sdiodev, address);
- 		if (err)
- 			break;
- 
-@@ -716,7 +724,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	dev_kfree_skb(pkt);
- 
- 	/* Return the window to backplane enumeration space for core access */
--	if (brcmf_sdiod_set_sbaddr_window(sdiodev, sdiodev->sbwad))
-+	if (brcmf_sdiod_set_backplane_window(sdiodev, sdiodev->sbwad))
- 		brcmf_err("FAILED to set window back to 0x%x\n",
- 			  sdiodev->sbwad);
- 

+ 0 - 32
package/kernel/mac80211/patches/312-v4.16-0007-brcmfmac-remove-unnecessary-call-to-brcmf_sdiod_set_.patch

@@ -1,32 +0,0 @@
-From c900072bd6faff089aa4fb7b19136a2a0fe3baf0 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:32 +0100
-Subject: [PATCH] brcmfmac: remove unnecessary call to
- brcmf_sdiod_set_backplane_window()
-
-All functions that might require the window address changing call
-brcmf_sdiod_set_backplane_window() prior to access. Thus resetting
-the window is not required.
-
-Signed-off-by: Ian Molton <[email protected]>
-[arend: corrected the driver prefix in the subject]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 5 -----
- 1 file changed, 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -723,11 +723,6 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 	dev_kfree_skb(pkt);
- 
--	/* Return the window to backplane enumeration space for core access */
--	if (brcmf_sdiod_set_backplane_window(sdiodev, sdiodev->sbwad))
--		brcmf_err("FAILED to set window back to 0x%x\n",
--			  sdiodev->sbwad);
--
- 	sdio_release_host(sdiodev->func[1]);
- 
- 	return err;

+ 0 - 134
package/kernel/mac80211/patches/312-v4.16-0008-brcmfmac-Cleanup-offsetof.patch

@@ -1,134 +0,0 @@
-From e4c05fc3c0a6c79376f72f17d08014477e962ada Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:33 +0100
-Subject: [PATCH] brcmfmac: Cleanup offsetof()
-
-Create a macro to make the code a bit more readable, whilst we're stuck
-with using struct element offsets as register offsets.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-[arend: rename macro to SD_REG]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 35 +++++++++-------------
- 1 file changed, 14 insertions(+), 21 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -161,6 +161,8 @@ struct rte_console {
- 
- #define CORE_BUS_REG(base, field) \
- 		(base + offsetof(struct sdpcmd_regs, field))
-+#define SD_REG(field) \
-+		(offsetof(struct sdpcmd_regs, field))
- 
- /* SDIO function 1 register CHIPCLKCSR */
- /* Force ALP request to backplane */
-@@ -1087,12 +1089,10 @@ static u32 brcmf_sdio_hostmail(struct br
- 	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* Read mailbox data and ack that we did so */
--	ret = r_sdreg32(bus, &hmb_data,
--			offsetof(struct sdpcmd_regs, tohostmailboxdata));
-+	ret = r_sdreg32(bus, &hmb_data,	SD_REG(tohostmailboxdata));
- 
- 	if (ret == 0)
--		w_sdreg32(bus, SMB_INT_ACK,
--			  offsetof(struct sdpcmd_regs, tosbmailbox));
-+		w_sdreg32(bus, SMB_INT_ACK, SD_REG(tosbmailbox));
- 	bus->sdcnt.f1regdata += 2;
- 
- 	/* dongle indicates the firmware has halted/crashed */
-@@ -1207,8 +1207,7 @@ static void brcmf_sdio_rxfail(struct brc
- 
- 	if (rtx) {
- 		bus->sdcnt.rxrtx++;
--		err = w_sdreg32(bus, SMB_NAK,
--				offsetof(struct sdpcmd_regs, tosbmailbox));
-+		err = w_sdreg32(bus, SMB_NAK, SD_REG(tosbmailbox));
- 
- 		bus->sdcnt.f1regdata++;
- 		if (err == 0)
-@@ -2333,9 +2332,7 @@ static uint brcmf_sdio_sendfromq(struct
- 		if (!bus->intr) {
- 			/* Check device status, signal pending interrupt */
- 			sdio_claim_host(bus->sdiodev->func[1]);
--			ret = r_sdreg32(bus, &intstatus,
--					offsetof(struct sdpcmd_regs,
--						 intstatus));
-+			ret = r_sdreg32(bus, &intstatus, SD_REG(intstatus));
- 			sdio_release_host(bus->sdiodev->func[1]);
- 			bus->sdcnt.f2txdata++;
- 			if (ret != 0)
-@@ -2441,7 +2438,7 @@ static void brcmf_sdio_bus_stop(struct d
- 		brcmf_sdio_bus_sleep(bus, false, false);
- 
- 		/* Disable and clear interrupts at the chip level also */
--		w_sdreg32(bus, 0, offsetof(struct sdpcmd_regs, hostintmask));
-+		w_sdreg32(bus, 0, SD_REG(hostintmask));
- 		local_hostintmask = bus->hostintmask;
- 		bus->hostintmask = 0;
- 
-@@ -2460,8 +2457,7 @@ static void brcmf_sdio_bus_stop(struct d
- 		sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
- 
- 		/* Clear any pending interrupts now that F2 is disabled */
--		w_sdreg32(bus, local_hostintmask,
--			  offsetof(struct sdpcmd_regs, intstatus));
-+		w_sdreg32(bus, local_hostintmask, SD_REG(intstatus));
- 
- 		sdio_release_host(sdiodev->func[1]);
- 	}
-@@ -2507,7 +2503,7 @@ static int brcmf_sdio_intr_rstatus(struc
- 	int ret;
- 
- 	buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
--	addr = buscore->base + offsetof(struct sdpcmd_regs, intstatus);
-+	addr = buscore->base + SD_REG(intstatus);
- 
- 	val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
- 	bus->sdcnt.f1regdata++;
-@@ -2584,11 +2580,9 @@ static void brcmf_sdio_dpc(struct brcmf_
- 	 */
- 	if (intstatus & I_HMB_FC_CHANGE) {
- 		intstatus &= ~I_HMB_FC_CHANGE;
--		err = w_sdreg32(bus, I_HMB_FC_CHANGE,
--				offsetof(struct sdpcmd_regs, intstatus));
-+		err = w_sdreg32(bus, I_HMB_FC_CHANGE, SD_REG(intstatus));
- 
--		err = r_sdreg32(bus, &newstatus,
--				offsetof(struct sdpcmd_regs, intstatus));
-+		err = r_sdreg32(bus, &newstatus, SD_REG(intstatus));
- 		bus->sdcnt.f1regdata += 2;
- 		atomic_set(&bus->fcstate,
- 			   !!(newstatus & (I_HMB_FC_STATE | I_HMB_FC_CHANGE)));
-@@ -3771,7 +3765,7 @@ static void brcmf_sdio_buscore_activate(
- 
- 	/* clear all interrupts */
- 	core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
--	reg_addr = core->base + offsetof(struct sdpcmd_regs, intstatus);
-+	reg_addr = core->base + SD_REG(intstatus);
- 	brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
- 
- 	if (rstvec)
-@@ -4067,7 +4061,7 @@ static void brcmf_sdio_firmware_callback
- 
- 	/* Enable function 2 (frame transfers) */
- 	w_sdreg32(bus, SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT,
--		  offsetof(struct sdpcmd_regs, tosbmailboxdata));
-+		  SD_REG(tosbmailboxdata));
- 	err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]);
- 
- 
-@@ -4077,8 +4071,7 @@ static void brcmf_sdio_firmware_callback
- 	if (!err) {
- 		/* Set up the interrupt mask and enable interrupts */
- 		bus->hostintmask = HOSTINTMASK;
--		w_sdreg32(bus, bus->hostintmask,
--			  offsetof(struct sdpcmd_regs, hostintmask));
-+		w_sdreg32(bus, bus->hostintmask, SD_REG(hostintmask));
- 
- 		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- 	} else {

+ 0 - 26
package/kernel/mac80211/patches/312-v4.16-0009-brcmfmac-Remove-unused-macro.patch

@@ -1,26 +0,0 @@
-From 5cfe38f1f8d3c6b98e15b8cfde05028a3c79930b Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:34 +0100
-Subject: [PATCH] brcmfmac: Remove unused macro.
-
-This macro is used exactly nowhere in the code. Delete it.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 2 --
- 1 file changed, 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -159,8 +159,6 @@ struct rte_console {
- /* manfid tuple length, include tuple, link bytes */
- #define SBSDIO_CIS_MANFID_TUPLE_LEN	6
- 
--#define CORE_BUS_REG(base, field) \
--		(base + offsetof(struct sdpcmd_regs, field))
- #define SD_REG(field) \
- 		(offsetof(struct sdpcmd_regs, field))
- 

+ 0 - 128
package/kernel/mac80211/patches/312-v4.16-0010-brcmfmac-Remove-repeated-calls-to-brcmf_chip_get_cor.patch

@@ -1,128 +0,0 @@
-From 21a10846d09db3c5e3bdfb0be0fc7aa9fdc7000a Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Fri, 8 Dec 2017 13:10:35 +0100
-Subject: [PATCH] brcmfmac: Remove repeated calls to brcmf_chip_get_core()
-
-There is no need to repeatdly call brcmf_chip_get_core(), which
-traverses a list of cores every time its called (including during
-register access code!).
-
-Call it once, and store a pointer to the core structure. The existing
-code does nto keep track of users of the cores anyway, and even so, this
-will allow for easier refcounting in future.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 25 +++++++++++++---------
- 1 file changed, 15 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -436,6 +436,7 @@ struct brcmf_sdio_count {
- struct brcmf_sdio {
- 	struct brcmf_sdio_dev *sdiodev;	/* sdio device handler */
- 	struct brcmf_chip *ci;	/* Chip info struct */
-+	struct brcmf_core *sdio_core; /* sdio core info struct */
- 
- 	u32 hostintmask;	/* Copy of Host Interrupt Mask */
- 	atomic_t intstatus;	/* Intstatus bits (events) pending */
-@@ -665,10 +666,9 @@ static bool data_ok(struct brcmf_sdio *b
-  */
- static int r_sdreg32(struct brcmf_sdio *bus, u32 *regvar, u32 offset)
- {
--	struct brcmf_core *core;
-+	struct brcmf_core *core = bus->sdio_core;
- 	int ret;
- 
--	core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- 	*regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
- 
- 	return ret;
-@@ -676,10 +676,9 @@ static int r_sdreg32(struct brcmf_sdio *
- 
- static int w_sdreg32(struct brcmf_sdio *bus, u32 regval, u32 reg_offset)
- {
--	struct brcmf_core *core;
-+	struct brcmf_core *core = bus->sdio_core;
- 	int ret;
- 
--	core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- 	brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
- 
- 	return ret;
-@@ -2495,12 +2494,11 @@ static inline void brcmf_sdio_clrintr(st
- 
- static int brcmf_sdio_intr_rstatus(struct brcmf_sdio *bus)
- {
--	struct brcmf_core *buscore;
-+	struct brcmf_core *buscore = bus->sdio_core;
- 	u32 addr;
- 	unsigned long val;
- 	int ret;
- 
--	buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- 	addr = buscore->base + SD_REG(intstatus);
- 
- 	val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
-@@ -3377,13 +3375,14 @@ static void brcmf_sdio_sr_init(struct br
- /* enable KSO bit */
- static int brcmf_sdio_kso_init(struct brcmf_sdio *bus)
- {
-+	struct brcmf_core *core = bus->sdio_core;
- 	u8 val;
- 	int err = 0;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
- 	/* KSO bit added in SDIO core rev 12 */
--	if (brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV)->rev < 12)
-+	if (core->rev < 12)
- 		return 0;
- 
- 	val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
-@@ -3412,6 +3411,7 @@ static int brcmf_sdio_bus_preinit(struct
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
- 	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
- 	struct brcmf_sdio *bus = sdiodev->bus;
-+	struct brcmf_core *core = bus->sdio_core;
- 	uint pad_size;
- 	u32 value;
- 	int err;
-@@ -3420,7 +3420,7 @@ static int brcmf_sdio_bus_preinit(struct
- 	 * a device perspective, ie. bus:txglom affects the
- 	 * bus transfers from device to host.
- 	 */
--	if (brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV)->rev < 12) {
-+	if (core->rev < 12) {
- 		/* for sdio core rev < 12, disable txgloming */
- 		value = 0;
- 		err = brcmf_iovar_data_set(dev, "bus:txglom", &value,
-@@ -3758,11 +3758,10 @@ static void brcmf_sdio_buscore_activate(
- 					u32 rstvec)
- {
- 	struct brcmf_sdio_dev *sdiodev = ctx;
--	struct brcmf_core *core;
-+	struct brcmf_core *core = sdiodev->bus->sdio_core;
- 	u32 reg_addr;
- 
- 	/* clear all interrupts */
--	core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
- 	reg_addr = core->base + SD_REG(intstatus);
- 	brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
- 
-@@ -3843,6 +3842,12 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 		bus->ci = NULL;
- 		goto fail;
- 	}
-+
-+	/* Pick up the SDIO core info struct from chip.c */
-+	bus->sdio_core   = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
-+	if (!bus->sdio_core)
-+		goto fail;
-+
- 	sdiodev->settings = brcmf_get_module_param(sdiodev->dev,
- 						   BRCMF_BUSTYPE_SDIO,
- 						   bus->ci->chip,

+ 0 - 44
package/kernel/mac80211/patches/313-v4.16-0001-brcmfmac-enlarge-buffer-size-of-caps-to-512-bytes.patch

@@ -1,44 +0,0 @@
-From 7762bb134e3b40e8ee2611365775b7432190a9c7 Mon Sep 17 00:00:00 2001
-From: Wright Feng <[email protected]>
-Date: Mon, 11 Dec 2017 15:38:21 +0800
-Subject: [PATCH] brcmfmac: enlarge buffer size of caps to 512 bytes
-
-The buffer size of return of cap iovar is greater than 256 bytes in some
-firmwares. For instance, the return size of cap iovar is 271 bytes in 4373
-13.10.246.79 firmare. It makes feature capability parsing failed because
-caps buffer is default value.
-So we enlarge caps buffer size to 512 bytes and add the error print for
-cap iovar error.
-
-Signed-off-by: Wright Feng <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 12 +++++++++---
- 1 file changed, 9 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-@@ -130,13 +130,19 @@ static void brcmf_feat_iovar_data_set(st
- 	}
- }
- 
-+#define MAX_CAPS_BUFFER_SIZE	512
- static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
- {
--	char caps[256];
-+	char caps[MAX_CAPS_BUFFER_SIZE];
- 	enum brcmf_feat_id id;
--	int i;
-+	int i, err;
-+
-+	err = brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
-+	if (err) {
-+		brcmf_err("could not get firmware cap (%d)\n", err);
-+		return;
-+	}
- 
--	brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
- 	brcmf_dbg(INFO, "[ %s]\n", caps);
- 
- 	for (i = 0; i < ARRAY_SIZE(brcmf_fwcap_map); i++) {

+ 0 - 227
package/kernel/mac80211/patches/314-v4.16-0001-brcmfmac-Remove-r-w-_sdreg32.patch

@@ -1,227 +0,0 @@
-From 3d110df8f74781354051e4bb1e3e97fa368b2f80 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:07 +0100
-Subject: [PATCH] brcmfmac: Remove {r,w}_sdreg32
-
-Remove yet another IO function from the code and replace with one
-that already exists.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-[arend: keep address calculation, ie. (base + offset) in one line]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 88 +++++++++++-----------
- 1 file changed, 42 insertions(+), 46 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -660,30 +660,6 @@ static bool data_ok(struct brcmf_sdio *b
- 	       ((u8)(bus->tx_max - bus->tx_seq) & 0x80) == 0;
- }
- 
--/*
-- * Reads a register in the SDIO hardware block. This block occupies a series of
-- * adresses on the 32 bit backplane bus.
-- */
--static int r_sdreg32(struct brcmf_sdio *bus, u32 *regvar, u32 offset)
--{
--	struct brcmf_core *core = bus->sdio_core;
--	int ret;
--
--	*regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
--
--	return ret;
--}
--
--static int w_sdreg32(struct brcmf_sdio *bus, u32 regval, u32 reg_offset)
--{
--	struct brcmf_core *core = bus->sdio_core;
--	int ret;
--
--	brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
--
--	return ret;
--}
--
- static int
- brcmf_sdio_kso_control(struct brcmf_sdio *bus, bool on)
- {
-@@ -1078,6 +1054,8 @@ static void brcmf_sdio_get_console_addr(
- 
- static u32 brcmf_sdio_hostmail(struct brcmf_sdio *bus)
- {
-+	struct brcmf_sdio_dev *sdiod = bus->sdiodev;
-+	struct brcmf_core *core = bus->sdio_core;
- 	u32 intstatus = 0;
- 	u32 hmb_data;
- 	u8 fcbits;
-@@ -1086,10 +1064,14 @@ static u32 brcmf_sdio_hostmail(struct br
- 	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* Read mailbox data and ack that we did so */
--	ret = r_sdreg32(bus, &hmb_data,	SD_REG(tohostmailboxdata));
-+	hmb_data = brcmf_sdiod_readl(sdiod,
-+				     core->base + SD_REG(tohostmailboxdata),
-+				     &ret);
-+
-+	if (!ret)
-+		brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
-+				   SMB_INT_ACK, &ret);
- 
--	if (ret == 0)
--		w_sdreg32(bus, SMB_INT_ACK, SD_REG(tosbmailbox));
- 	bus->sdcnt.f1regdata += 2;
- 
- 	/* dongle indicates the firmware has halted/crashed */
-@@ -1163,6 +1145,8 @@ static u32 brcmf_sdio_hostmail(struct br
- 
- static void brcmf_sdio_rxfail(struct brcmf_sdio *bus, bool abort, bool rtx)
- {
-+	struct brcmf_sdio_dev *sdiod = bus->sdiodev;
-+	struct brcmf_core *core = bus->sdio_core;
- 	uint retries = 0;
- 	u16 lastrbc;
- 	u8 hi, lo;
-@@ -1204,7 +1188,8 @@ static void brcmf_sdio_rxfail(struct brc
- 
- 	if (rtx) {
- 		bus->sdcnt.rxrtx++;
--		err = w_sdreg32(bus, SMB_NAK, SD_REG(tosbmailbox));
-+		brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailbox),
-+				   SMB_NAK, &err);
- 
- 		bus->sdcnt.f1regdata++;
- 		if (err == 0)
-@@ -2291,6 +2276,7 @@ static uint brcmf_sdio_sendfromq(struct
- {
- 	struct sk_buff *pkt;
- 	struct sk_buff_head pktq;
-+	u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
- 	u32 intstatus = 0;
- 	int ret = 0, prec_out, i;
- 	uint cnt = 0;
-@@ -2329,7 +2315,8 @@ static uint brcmf_sdio_sendfromq(struct
- 		if (!bus->intr) {
- 			/* Check device status, signal pending interrupt */
- 			sdio_claim_host(bus->sdiodev->func[1]);
--			ret = r_sdreg32(bus, &intstatus, SD_REG(intstatus));
-+			intstatus = brcmf_sdiod_readl(bus->sdiodev,
-+						      intstat_addr, &ret);
- 			sdio_release_host(bus->sdiodev->func[1]);
- 			bus->sdcnt.f2txdata++;
- 			if (ret != 0)
-@@ -2413,12 +2400,13 @@ static int brcmf_sdio_tx_ctrlframe(struc
- 
- static void brcmf_sdio_bus_stop(struct device *dev)
- {
--	u32 local_hostintmask;
--	u8 saveclk;
--	int err;
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
- 	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
- 	struct brcmf_sdio *bus = sdiodev->bus;
-+	struct brcmf_core *core = bus->sdio_core;
-+	u32 local_hostintmask;
-+	u8 saveclk;
-+	int err;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
-@@ -2435,7 +2423,9 @@ static void brcmf_sdio_bus_stop(struct d
- 		brcmf_sdio_bus_sleep(bus, false, false);
- 
- 		/* Disable and clear interrupts at the chip level also */
--		w_sdreg32(bus, 0, SD_REG(hostintmask));
-+		brcmf_sdiod_writel(sdiodev, core->base + SD_REG(hostintmask),
-+				   0, NULL);
-+
- 		local_hostintmask = bus->hostintmask;
- 		bus->hostintmask = 0;
- 
-@@ -2454,7 +2444,8 @@ static void brcmf_sdio_bus_stop(struct d
- 		sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
- 
- 		/* Clear any pending interrupts now that F2 is disabled */
--		w_sdreg32(bus, local_hostintmask, SD_REG(intstatus));
-+		brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
-+				   local_hostintmask, NULL);
- 
- 		sdio_release_host(sdiodev->func[1]);
- 	}
-@@ -2521,7 +2512,9 @@ static int brcmf_sdio_intr_rstatus(struc
- 
- static void brcmf_sdio_dpc(struct brcmf_sdio *bus)
- {
-+	struct brcmf_sdio_dev *sdiod = bus->sdiodev;
- 	u32 newstatus = 0;
-+	u32 intstat_addr = bus->sdio_core->base + SD_REG(intstatus);
- 	unsigned long intstatus;
- 	uint txlimit = bus->txbound;	/* Tx frames to send before resched */
- 	uint framecnt;			/* Temporary counter of tx/rx frames */
-@@ -2576,9 +2569,10 @@ static void brcmf_sdio_dpc(struct brcmf_
- 	 */
- 	if (intstatus & I_HMB_FC_CHANGE) {
- 		intstatus &= ~I_HMB_FC_CHANGE;
--		err = w_sdreg32(bus, I_HMB_FC_CHANGE, SD_REG(intstatus));
-+		brcmf_sdiod_writel(sdiod, intstat_addr, I_HMB_FC_CHANGE, &err);
-+
-+		newstatus = brcmf_sdiod_readl(sdiod, intstat_addr, &err);
- 
--		err = r_sdreg32(bus, &newstatus, SD_REG(intstatus));
- 		bus->sdcnt.f1regdata += 2;
- 		atomic_set(&bus->fcstate,
- 			   !!(newstatus & (I_HMB_FC_STATE | I_HMB_FC_CHANGE)));
-@@ -4017,22 +4011,21 @@ static void brcmf_sdio_firmware_callback
- 					 const struct firmware *code,
- 					 void *nvram, u32 nvram_len)
- {
--	struct brcmf_bus *bus_if;
--	struct brcmf_sdio_dev *sdiodev;
--	struct brcmf_sdio *bus;
-+	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
-+	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
-+	struct brcmf_sdio *bus = sdiodev->bus;
-+	struct brcmf_sdio_dev *sdiod = bus->sdiodev;
-+	struct brcmf_core *core = bus->sdio_core;
- 	u8 saveclk;
- 
- 	brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
--	bus_if = dev_get_drvdata(dev);
--	sdiodev = bus_if->bus_priv.sdio;
-+
- 	if (err)
- 		goto fail;
- 
- 	if (!bus_if->drvr)
- 		return;
- 
--	bus = sdiodev->bus;
--
- 	/* try to download image and nvram to the dongle */
- 	bus->alp_only = true;
- 	err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
-@@ -4063,8 +4056,9 @@ static void brcmf_sdio_firmware_callback
- 	}
- 
- 	/* Enable function 2 (frame transfers) */
--	w_sdreg32(bus, SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT,
--		  SD_REG(tosbmailboxdata));
-+	brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
-+			   SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
-+
- 	err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]);
- 
- 
-@@ -4074,7 +4068,9 @@ static void brcmf_sdio_firmware_callback
- 	if (!err) {
- 		/* Set up the interrupt mask and enable interrupts */
- 		bus->hostintmask = HOSTINTMASK;
--		w_sdreg32(bus, bus->hostintmask, SD_REG(hostintmask));
-+		brcmf_sdiod_writel(sdiod, core->base + SD_REG(hostintmask),
-+				   bus->hostintmask, NULL);
-+
- 
- 		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- 	} else {

+ 0 - 33
package/kernel/mac80211/patches/314-v4.16-0002-brcmfmac-Rename-buscore-to-core-for-consistency.patch

@@ -1,33 +0,0 @@
-From dbda7dacb79a377e8ed9d38ce0e4a58b70aa9060 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:08 +0100
-Subject: [PATCH] brcmfmac: Rename buscore to core for consistency
-
-Avoid confusion with unrelated _buscore labels.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-[arend: only do the rename]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -2485,12 +2485,12 @@ static inline void brcmf_sdio_clrintr(st
- 
- static int brcmf_sdio_intr_rstatus(struct brcmf_sdio *bus)
- {
--	struct brcmf_core *buscore = bus->sdio_core;
-+	struct brcmf_core *core = bus->sdio_core;
- 	u32 addr;
- 	unsigned long val;
- 	int ret;
- 
--	addr = buscore->base + SD_REG(intstatus);
-+	addr = core->base + SD_REG(intstatus);
- 
- 	val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
- 	bus->sdcnt.f1regdata++;

+ 0 - 82
package/kernel/mac80211/patches/314-v4.16-0003-brcmfmac-stabilise-the-value-of-sbwad-in-use-for-som.patch

@@ -1,82 +0,0 @@
-From 874bb8e49b7c6368f8ff9f2566c7bd06a2249be0 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:09 +0100
-Subject: [PATCH] brcmfmac: stabilise the value of ->sbwad in use for some xfer
- routines.
-
-The IO functions operate within the Chipcommon IO window. Explicitly
-set this, rather than relying on the last initialisation IO access to
-leave it set to the right value by chance.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 8 ++++----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c   | 5 +++++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h   | 1 +
- 3 files changed, 10 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -529,7 +529,7 @@ int brcmf_sdiod_recv_buf(struct brcmf_sd
- 
- int brcmf_sdiod_recv_pkt(struct brcmf_sdio_dev *sdiodev, struct sk_buff *pkt)
- {
--	u32 addr = sdiodev->sbwad;
-+	u32 addr = sdiodev->cc_core->base;
- 	int err = 0;
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pkt->len);
-@@ -552,7 +552,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- {
- 	struct sk_buff *glom_skb = NULL;
- 	struct sk_buff *skb;
--	u32 addr = sdiodev->sbwad;
-+	u32 addr = sdiodev->cc_core->base;
- 	int err = 0;
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n",
-@@ -593,7 +593,7 @@ done:
- int brcmf_sdiod_send_buf(struct brcmf_sdio_dev *sdiodev, u8 *buf, uint nbytes)
- {
- 	struct sk_buff *mypkt;
--	u32 addr = sdiodev->sbwad;
-+	u32 addr = sdiodev->cc_core->base;
- 	int err;
- 
- 	mypkt = brcmu_pkt_buf_get_skb(nbytes);
-@@ -625,7 +625,7 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 			 struct sk_buff_head *pktq)
- {
- 	struct sk_buff *skb;
--	u32 addr = sdiodev->sbwad;
-+	u32 addr = sdiodev->cc_core->base;
- 	int err;
- 
- 	brcmf_dbg(SDIO, "addr = 0x%x, size = %d\n", addr, pktq->qlen);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3842,6 +3842,11 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	if (!bus->sdio_core)
- 		goto fail;
- 
-+	/* Pick up the CHIPCOMMON core info struct, for bulk IO in bcmsdh.c */
-+	sdiodev->cc_core = brcmf_chip_get_core(bus->ci, BCMA_CORE_CHIPCOMMON);
-+	if (!sdiodev->cc_core)
-+		goto fail;
-+
- 	sdiodev->settings = brcmf_get_module_param(sdiodev->dev,
- 						   BRCMF_BUSTYPE_SDIO,
- 						   bus->ci->chip,
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -178,6 +178,7 @@ struct brcmf_sdio_dev {
- 	struct sdio_func *func[SDIO_MAX_FUNCS];
- 	u8 num_funcs;			/* Supported funcs on client */
- 	u32 sbwad;			/* Save backplane window address */
-+	struct brcmf_core *cc_core;	/* chipcommon core info struct */
- 	struct brcmf_sdio *bus;
- 	struct device *dev;
- 	struct brcmf_bus *bus_if;

+ 0 - 45
package/kernel/mac80211/patches/314-v4.16-0004-brcmfmac-Correctly-handle-accesses-to-SDIO-func0.patch

@@ -1,45 +0,0 @@
-From 508422f3695bf66f7b85fb4723c22f5166003ec6 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:10 +0100
-Subject: [PATCH] brcmfmac: Correctly handle accesses to SDIO func0
-
-Rather than workaround the restrictions on func0 addressing in the
-driver, set MMC_QUIRK_LENIENT_FN0
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 4 ++++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h   | 4 ++--
- 2 files changed, 6 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -995,6 +995,10 @@ static int brcmf_ops_sdio_probe(struct s
- 	brcmf_dbg(SDIO, "Function#: %d\n", func->num);
- 
- 	dev = &func->dev;
-+
-+	/* Set MMC_QUIRK_LENIENT_FN0 for this card */
-+	func->card->quirks |= MMC_QUIRK_LENIENT_FN0;
-+
- 	/* prohibit ACPI power management for this device */
- 	brcmf_sdiod_acpi_set_power_manageable(dev, 0);
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -297,10 +297,10 @@ void brcmf_sdiod_intr_unregister(struct
- /* SDIO device register access interface */
- /* Accessors for SDIO Function 0 */
- #define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
--	sdio_readb((sdiodev)->func[0], (addr), (r))
-+	sdio_f0_readb((sdiodev)->func[0], (addr), (r))
- 
- #define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
--	sdio_writeb((sdiodev)->func[0], (v), (addr), (ret))
-+	sdio_f0_writeb((sdiodev)->func[0], (v), (addr), (ret))
- 
- /* Accessors for SDIO Function 1 */
- #define brcmf_sdiod_readb(sdiodev, addr, r) \

+ 0 - 111
package/kernel/mac80211/patches/314-v4.16-0005-brcmfmac-Remove-func0-from-function-array.patch

@@ -1,111 +0,0 @@
-From 99d7b6fdfc8c24052c92c720330d31ca1332f996 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:11 +0100
-Subject: [PATCH] brcmfmac: Remove func0 from function array
-
-func0 is not provided by the mmc stack as a function when probing.
-Instead providing specific access functions to read/write it.
-
-This prepares for a patch to remove the actual array entry itself.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-[arend: rephrased the commit message]
-[arend: removed unrelated comment for which separate patch is warranted]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c |  5 +----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c   |  7 ++++---
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h   | 13 ++++++-------
- 3 files changed, 11 insertions(+), 14 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -1022,8 +1022,7 @@ static int brcmf_ops_sdio_probe(struct s
- 	/* store refs to functions used. mmc_card does
- 	 * not hold the F0 function pointer.
- 	 */
--	sdiodev->func[0] = kmemdup(func, sizeof(*func), GFP_KERNEL);
--	sdiodev->func[0]->num = 0;
-+	sdiodev->func[0] = NULL;
- 	sdiodev->func[1] = func->card->sdio_func[0];
- 	sdiodev->func[2] = func;
- 
-@@ -1049,7 +1048,6 @@ static int brcmf_ops_sdio_probe(struct s
- fail:
- 	dev_set_drvdata(&func->dev, NULL);
- 	dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
--	kfree(sdiodev->func[0]);
- 	kfree(sdiodev);
- 	kfree(bus_if);
- 	return err;
-@@ -1082,7 +1080,6 @@ static void brcmf_ops_sdio_remove(struct
- 		dev_set_drvdata(&sdiodev->func[2]->dev, NULL);
- 
- 		kfree(bus_if);
--		kfree(sdiodev->func[0]);
- 		kfree(sdiodev);
- 	}
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3771,9 +3771,10 @@ static u32 brcmf_sdio_buscore_read32(voi
- 	u32 val, rev;
- 
- 	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
--	if ((sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
--	     sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
--	    addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
-+
-+	if ((sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
-+	     sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
-+	     addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
- 		rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
- 		if (rev >= 2) {
- 			val &= ~CID_ID_MASK;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -21,7 +21,9 @@
- #include <linux/firmware.h>
- #include "firmware.h"
- 
--#define SDIO_FUNC_0		0
-+/* Maximum number of I/O funcs */
-+#define NUM_SDIO_FUNCS	3
-+
- #define SDIO_FUNC_1		1
- #define SDIO_FUNC_2		2
- 
-@@ -39,9 +41,6 @@
- #define INTR_STATUS_FUNC1	0x2
- #define INTR_STATUS_FUNC2	0x4
- 
--/* Maximum number of I/O funcs */
--#define SDIOD_MAX_IOFUNCS	7
--
- /* mask of register map */
- #define REG_F0_REG_MASK		0x7FF
- #define REG_F1_MISC_MASK	0x1FFFF
-@@ -175,7 +174,7 @@ struct brcmf_sdio;
- struct brcmf_sdiod_freezer;
- 
- struct brcmf_sdio_dev {
--	struct sdio_func *func[SDIO_MAX_FUNCS];
-+	struct sdio_func *func[NUM_SDIO_FUNCS];
- 	u8 num_funcs;			/* Supported funcs on client */
- 	u32 sbwad;			/* Save backplane window address */
- 	struct brcmf_core *cc_core;	/* chipcommon core info struct */
-@@ -297,10 +296,10 @@ void brcmf_sdiod_intr_unregister(struct
- /* SDIO device register access interface */
- /* Accessors for SDIO Function 0 */
- #define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
--	sdio_f0_readb((sdiodev)->func[0], (addr), (r))
-+	sdio_f0_readb((sdiodev)->func[1], (addr), (r))
- 
- #define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
--	sdio_f0_writeb((sdiodev)->func[0], (v), (addr), (ret))
-+	sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret))
- 
- /* Accessors for SDIO Function 1 */
- #define brcmf_sdiod_readb(sdiodev, addr, r) \

+ 0 - 40
package/kernel/mac80211/patches/314-v4.16-0006-brcmfmac-More-efficient-and-slightly-easier-to-read-.patch

@@ -1,40 +0,0 @@
-From bcadaaa097c7ec103fe75f9da41f8fe52693b644 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:12 +0100
-Subject: [PATCH] brcmfmac: More efficient and slightly easier to read fixup
- for 4339 chips
-
-Its more efficient to test the register we're interested in first,
-potentially avoiding two more comparisons, and therefore always avoiding
-one comparison per call on all other chips.
-
-Signed-off-by: Ian Molton <[email protected]>
-[arend: fix some checkpatch warnings]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3772,15 +3772,16 @@ static u32 brcmf_sdio_buscore_read32(voi
- 
- 	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
- 
--	if ((sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
--	     sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
--	     addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
-+	if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
-+	    (sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
-+	     sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
- 		rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
- 		if (rev >= 2) {
- 			val &= ~CID_ID_MASK;
- 			val |= BRCM_CC_4339_CHIP_ID;
- 		}
- 	}
-+
- 	return val;
- }
- 

+ 0 - 347
package/kernel/mac80211/patches/314-v4.16-0007-brcmfmac-Replace-function-index-with-function-pointe.patch

@@ -1,347 +0,0 @@
-From 00eb62cfc5f806b003fe5d54c8b5fe9a9665482f Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:13 +0100
-Subject: [PATCH] brcmfmac: Replace function index with function pointer
-
-In preparation for removing the function array, remove all code that
-refers to function by index and replace with pointers to the function
-itself.
-
-Signed-off-by: Ian Molton <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-[arend: replace BUG() with WARN() macro]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 85 ++++++++++++----------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 15 ++--
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.h    |  6 +-
- 3 files changed, 56 insertions(+), 50 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -291,8 +291,9 @@ out:
- 		*ret = retval;
- }
- 
--static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev, uint fn,
--				 u32 addr, struct sk_buff *pkt)
-+static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev,
-+				 struct sdio_func *func, u32 addr,
-+				 struct sk_buff *pkt)
- {
- 	unsigned int req_sz;
- 	int err;
-@@ -301,13 +302,19 @@ static int brcmf_sdiod_buff_read(struct
- 	req_sz = pkt->len + 3;
- 	req_sz &= (uint)~3;
- 
--	if (fn == 1)
--		err = sdio_memcpy_fromio(sdiodev->func[fn],
--					 ((u8 *)(pkt->data)), addr, req_sz);
--	else
--		/* function 2 read is FIFO operation */
--		err = sdio_readsb(sdiodev->func[fn],
--				  ((u8 *)(pkt->data)), addr, req_sz);
-+	switch (func->num) {
-+	case 1:
-+		err = sdio_memcpy_fromio(func, ((u8 *)(pkt->data)), addr,
-+					 req_sz);
-+		break;
-+	case 2:
-+		err = sdio_readsb(func, ((u8 *)(pkt->data)), addr, req_sz);
-+		break;
-+	default:
-+		/* bail out as things are really fishy here */
-+		WARN(1, "invalid sdio function number: %d\n", func->num);
-+		err = -ENOMEDIUM;
-+	};
- 
- 	if (err == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-@@ -315,8 +322,9 @@ static int brcmf_sdiod_buff_read(struct
- 	return err;
- }
- 
--static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev, uint fn,
--				  u32 addr, struct sk_buff *pkt)
-+static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev,
-+				  struct sdio_func *func, u32 addr,
-+				  struct sk_buff *pkt)
- {
- 	unsigned int req_sz;
- 	int err;
-@@ -325,8 +333,7 @@ static int brcmf_sdiod_buff_write(struct
- 	req_sz = pkt->len + 3;
- 	req_sz &= (uint)~3;
- 
--	err = sdio_memcpy_toio(sdiodev->func[fn], addr,
--			       ((u8 *)(pkt->data)), req_sz);
-+	err = sdio_memcpy_toio(func, addr, ((u8 *)(pkt->data)), req_sz);
- 
- 	if (err == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-@@ -337,7 +344,7 @@ static int brcmf_sdiod_buff_write(struct
- /**
-  * brcmf_sdiod_sglist_rw - SDIO interface function for block data access
-  * @sdiodev: brcmfmac sdio device
-- * @fn: SDIO function number
-+ * @func: SDIO function
-  * @write: direction flag
-  * @addr: dongle memory address as source/destination
-  * @pkt: skb pointer
-@@ -346,7 +353,8 @@ static int brcmf_sdiod_buff_write(struct
-  * stack for block data access. It assumes that the skb passed down by the
-  * caller has already been padded and aligned.
-  */
--static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev, uint fn,
-+static int brcmf_sdiod_sglist_rw(struct brcmf_sdio_dev *sdiodev,
-+				 struct sdio_func *func,
- 				 bool write, u32 addr,
- 				 struct sk_buff_head *pktlist)
- {
-@@ -372,7 +380,7 @@ static int brcmf_sdiod_sglist_rw(struct
- 		req_sz = 0;
- 		skb_queue_walk(pktlist, pkt_next)
- 			req_sz += pkt_next->len;
--		req_sz = ALIGN(req_sz, sdiodev->func[fn]->cur_blksize);
-+		req_sz = ALIGN(req_sz, func->cur_blksize);
- 		while (req_sz > PAGE_SIZE) {
- 			pkt_next = brcmu_pkt_buf_get_skb(PAGE_SIZE);
- 			if (pkt_next == NULL) {
-@@ -391,7 +399,7 @@ static int brcmf_sdiod_sglist_rw(struct
- 		target_list = &local_list;
- 	}
- 
--	func_blk_sz = sdiodev->func[fn]->cur_blksize;
-+	func_blk_sz = func->cur_blksize;
- 	max_req_sz = sdiodev->max_request_size;
- 	max_seg_cnt = min_t(unsigned short, sdiodev->max_segment_count,
- 			    target_list->qlen);
-@@ -408,10 +416,10 @@ static int brcmf_sdiod_sglist_rw(struct
- 	mmc_dat.flags = write ? MMC_DATA_WRITE : MMC_DATA_READ;
- 	mmc_cmd.opcode = SD_IO_RW_EXTENDED;
- 	mmc_cmd.arg = write ? 1<<31 : 0;	/* write flag  */
--	mmc_cmd.arg |= (fn & 0x7) << 28;	/* SDIO func num */
--	mmc_cmd.arg |= 1<<27;			/* block mode */
-+	mmc_cmd.arg |= (func->num & 0x7) << 28;	/* SDIO func num */
-+	mmc_cmd.arg |= 1 << 27;			/* block mode */
- 	/* for function 1 the addr will be incremented */
--	mmc_cmd.arg |= (fn == 1) ? 1<<26 : 0;
-+	mmc_cmd.arg |= (func->num == 1) ? 1 << 26 : 0;
- 	mmc_cmd.flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_ADTC;
- 	mmc_req.cmd = &mmc_cmd;
- 	mmc_req.data = &mmc_dat;
-@@ -457,11 +465,11 @@ static int brcmf_sdiod_sglist_rw(struct
- 		mmc_cmd.arg |= (addr & 0x1FFFF) << 9;	/* address */
- 		mmc_cmd.arg |= mmc_dat.blocks & 0x1FF;	/* block count */
- 		/* incrementing addr for function 1 */
--		if (fn == 1)
-+		if (func->num == 1)
- 			addr += req_sz;
- 
--		mmc_set_data_timeout(&mmc_dat, sdiodev->func[fn]->card);
--		mmc_wait_for_req(sdiodev->func[fn]->card->host, &mmc_req);
-+		mmc_set_data_timeout(&mmc_dat, func->card);
-+		mmc_wait_for_req(func->card->host, &mmc_req);
- 
- 		ret = mmc_cmd.error ? mmc_cmd.error : mmc_dat.error;
- 		if (ret == -ENOMEDIUM) {
-@@ -541,7 +549,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 	addr &= SBSDIO_SB_OFT_ADDR_MASK;
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr, pkt);
-+	err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, pkt);
- 
- done:
- 	return err;
-@@ -566,13 +574,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (pktq->qlen == 1)
--		err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
-+		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
- 					    pktq->next);
- 	else if (!sdiodev->sg_support) {
- 		glom_skb = brcmu_pkt_buf_get_skb(totlen);
- 		if (!glom_skb)
- 			return -ENOMEM;
--		err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_2, addr,
-+		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
- 					    glom_skb);
- 		if (err)
- 			goto done;
-@@ -582,8 +590,8 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 			skb_pull(glom_skb, skb->len);
- 		}
- 	} else
--		err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, false, addr,
--					    pktq);
-+		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], false,
-+					    addr, pktq);
- 
- done:
- 	brcmu_pkt_buf_free_skb(glom_skb);
-@@ -614,7 +622,8 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (!err)
--		err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2, addr, mypkt);
-+		err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], addr,
-+					     mypkt);
- 
- 	brcmu_pkt_buf_free_skb(mypkt);
- 
-@@ -639,14 +648,14 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	if (pktq->qlen == 1 || !sdiodev->sg_support) {
- 		skb_queue_walk(pktq, skb) {
--			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_2,
-+			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2],
- 						     addr, skb);
- 			if (err)
- 				break;
- 		}
- 	} else {
--		err = brcmf_sdiod_sglist_rw(sdiodev, SDIO_FUNC_2, true, addr,
--					    pktq);
-+		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], true,
-+					    addr, pktq);
- 	}
- 
- 	return err;
-@@ -696,10 +705,10 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 		if (write) {
- 			memcpy(pkt->data, data, dsize);
--			err = brcmf_sdiod_buff_write(sdiodev, SDIO_FUNC_1,
-+			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[1],
- 						     sdaddr, pkt);
- 		} else {
--			err = brcmf_sdiod_buff_read(sdiodev, SDIO_FUNC_1,
-+			err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[1],
- 						    sdaddr, pkt);
- 		}
- 
-@@ -728,12 +737,12 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	return err;
- }
- 
--int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, u8 fn)
-+int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, struct sdio_func *func)
- {
- 	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* Issue abort cmd52 command through F0 */
--	brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, fn, NULL);
-+	brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, func->num, NULL);
- 
- 	brcmf_dbg(SDIO, "Exit\n");
- 	return 0;
-@@ -1105,7 +1114,7 @@ static int brcmf_ops_sdio_suspend(struct
- 
- 	func = container_of(dev, struct sdio_func, dev);
- 	brcmf_dbg(SDIO, "Enter: F%d\n", func->num);
--	if (func->num != SDIO_FUNC_1)
-+	if (func->num != 1)
- 		return 0;
- 
- 
-@@ -1134,7 +1143,7 @@ static int brcmf_ops_sdio_resume(struct
- 	struct sdio_func *func = container_of(dev, struct sdio_func, dev);
- 
- 	brcmf_dbg(SDIO, "Enter: F%d\n", func->num);
--	if (func->num != SDIO_FUNC_2)
-+	if (func->num != 2)
- 		return 0;
- 
- 	brcmf_sdiod_freezer_off(sdiodev);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -1157,7 +1157,7 @@ static void brcmf_sdio_rxfail(struct brc
- 		  rtx ? ", send NAK" : "");
- 
- 	if (abort)
--		brcmf_sdiod_abort(bus->sdiodev, SDIO_FUNC_2);
-+		brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func[2]);
- 
- 	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
- 			   &err);
-@@ -1209,7 +1209,7 @@ static void brcmf_sdio_txfail(struct brc
- 	brcmf_err("sdio error, abort command and terminate frame\n");
- 	bus->sdcnt.tx_sderrs++;
- 
--	brcmf_sdiod_abort(sdiodev, SDIO_FUNC_2);
-+	brcmf_sdiod_abort(sdiodev, sdiodev->func[2]);
- 	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
- 	bus->sdcnt.f1regdata++;
- 
-@@ -2072,7 +2072,7 @@ static int brcmf_sdio_txpkt_prep_sg(stru
- 	int ntail, ret;
- 
- 	sdiodev = bus->sdiodev;
--	blksize = sdiodev->func[SDIO_FUNC_2]->cur_blksize;
-+	blksize = sdiodev->func[2]->cur_blksize;
- 	/* sg entry alignment should be a divisor of block size */
- 	WARN_ON(blksize % bus->sgentry_align);
- 
-@@ -2441,7 +2441,7 @@ static void brcmf_sdio_bus_stop(struct d
- 
- 		/* Turn off the bus (F2), free any pending packets */
- 		brcmf_dbg(INTR, "disable SDIO interrupts\n");
--		sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
-+		sdio_disable_func(sdiodev->func[2]);
- 
- 		/* Clear any pending interrupts now that F2 is disabled */
- 		brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
-@@ -4066,8 +4066,7 @@ static void brcmf_sdio_firmware_callback
- 	brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
- 			   SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
- 
--	err = sdio_enable_func(sdiodev->func[SDIO_FUNC_2]);
--
-+	err = sdio_enable_func(sdiodev->func[2]);
- 
- 	brcmf_dbg(INFO, "enable F2: err=%d\n", err);
- 
-@@ -4082,7 +4081,7 @@ static void brcmf_sdio_firmware_callback
- 		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- 	} else {
- 		/* Disable F2 again */
--		sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
-+		sdio_disable_func(sdiodev->func[2]);
- 		goto release;
- 	}
- 
-@@ -4219,7 +4218,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	sdio_claim_host(bus->sdiodev->func[1]);
- 
- 	/* Disable F2 to clear any intermediate frame state on the dongle */
--	sdio_disable_func(bus->sdiodev->func[SDIO_FUNC_2]);
-+	sdio_disable_func(bus->sdiodev->func[2]);
- 
- 	bus->rxflow = false;
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -45,9 +45,6 @@
- #define REG_F0_REG_MASK		0x7FF
- #define REG_F1_MISC_MASK	0x1FFFF
- 
--/* as of sdiod rev 0, supports 3 functions */
--#define SBSDIO_NUM_FUNCTION		3
--
- /* function 0 vendor specific CCCR registers */
- 
- #define SDIO_CCCR_BRCM_CARDCAP			0xf0
-@@ -350,7 +347,8 @@ int brcmf_sdiod_ramrw(struct brcmf_sdio_
- 		      u8 *data, uint size);
- 
- /* Issue an abort to the specified function */
--int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, u8 fn);
-+int brcmf_sdiod_abort(struct brcmf_sdio_dev *sdiodev, struct sdio_func *func);
-+
- void brcmf_sdiod_sgtable_alloc(struct brcmf_sdio_dev *sdiodev);
- void brcmf_sdiod_change_state(struct brcmf_sdio_dev *sdiodev,
- 			      enum brcmf_sdiod_state state);

+ 0 - 53
package/kernel/mac80211/patches/314-v4.16-0008-brcmfmac-Clean-up-interrupt-macros.patch

@@ -1,53 +0,0 @@
-From 9c3438ed215adba7025268ee1f0b6f7a2af12316 Mon Sep 17 00:00:00 2001
-From: Ian Molton <[email protected]>
-Date: Tue, 19 Dec 2017 13:47:14 +0100
-Subject: [PATCH] brcmfmac: Clean up interrupt macros
-
-Make it more obvious that this code acually enables interrupts, and
-provide nice definitions for the bits in the register.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 3 ++-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h   | 8 +++++---
- 2 files changed, 7 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -149,7 +149,8 @@ int brcmf_sdiod_intr_register(struct brc
- 
- 		/* must configure SDIO_CCCR_IENx to enable irq */
- 		data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_IENx, &ret);
--		data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
-+		data |= SDIO_CCCR_IEN_FUNC1 | SDIO_CCCR_IEN_FUNC2 |
-+			SDIO_CCCR_IEN_FUNC0;
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret);
- 
- 		/* redirect, configure and enable io for interrupt signal */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -24,9 +24,6 @@
- /* Maximum number of I/O funcs */
- #define NUM_SDIO_FUNCS	3
- 
--#define SDIO_FUNC_1		1
--#define SDIO_FUNC_2		2
--
- #define SDIOD_FBR_SIZE		0x100
- 
- /* io_en */
-@@ -52,6 +49,11 @@
- #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT	BIT(2)
- #define SDIO_CCCR_BRCM_CARDCAP_CMD_NODEC	BIT(3)
- 
-+/* Interrupt enable bits for each function */
-+#define SDIO_CCCR_IEN_FUNC0			BIT(0)
-+#define SDIO_CCCR_IEN_FUNC1			BIT(1)
-+#define SDIO_CCCR_IEN_FUNC2			BIT(2)
-+
- #define SDIO_CCCR_BRCM_CARDCTRL			0xf1
- #define SDIO_CCCR_BRCM_CARDCTRL_WLANRESET	BIT(1)
- 

+ 0 - 27
package/kernel/mac80211/patches/315-v4.16-0001-brcmfmac-Support-43455-save-restore-SR-feature-if-FW.patch

@@ -1,27 +0,0 @@
-From e3720dad99859251a8b0fe2807275a8afcfb560d Mon Sep 17 00:00:00 2001
-From: Double Lo <[email protected]>
-Date: Tue, 19 Dec 2017 14:56:44 +0800
-Subject: [PATCH] brcmfmac: Support 43455 save-restore (SR) feature if FW
- include -sr
-
-This patch will add 43455 into the save-restore(SR) capable chip list, so
-the SR engine will be enabled with 43455 FW which built-in the -sr
-function.
-
-Signed-off-by: Double Lo <[email protected]>
-Signed-off-by: Wright Feng <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-@@ -1338,6 +1338,7 @@ bool brcmf_chip_sr_capable(struct brcmf_
- 	switch (pub->chip) {
- 	case BRCM_CC_4354_CHIP_ID:
- 	case BRCM_CC_4356_CHIP_ID:
-+	case BRCM_CC_4345_CHIP_ID:
- 		/* explicitly check SR engine enable bit */
- 		pmu_cc3_mask = BIT(2);
- 		/* fall-through */

+ 0 - 1043
package/kernel/mac80211/patches/316-v4.16-0001-brcmfmac-Remove-array-of-functions.patch

@@ -1,1043 +0,0 @@
-From c9aa7a91de740c537dc8c2f9f3d36fc651371b13 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 9 Jan 2018 13:22:52 +0100
-Subject: [PATCH] brcmfmac: Remove array of functions
-
-Replace the array of functions with a pair of pointers to the
-relevant functions.
-
-Signed-off-by: Ian Molton <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 115 +++++++-------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 168 ++++++++++-----------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.h    |  15 +-
- 3 files changed, 146 insertions(+), 152 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -118,7 +118,7 @@ int brcmf_sdiod_intr_register(struct brc
- 
- 		ret = request_irq(pdata->oob_irq_nr, brcmf_sdiod_oob_irqhandler,
- 				  pdata->oob_irq_flags, "brcmf_oob_intr",
--				  &sdiodev->func[1]->dev);
-+				  &sdiodev->func1->dev);
- 		if (ret != 0) {
- 			brcmf_err("request_irq failed %d\n", ret);
- 			return ret;
-@@ -132,7 +132,7 @@ int brcmf_sdiod_intr_register(struct brc
- 		}
- 		sdiodev->irq_wake = true;
- 
--		sdio_claim_host(sdiodev->func[1]);
-+		sdio_claim_host(sdiodev->func1);
- 
- 		if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
- 			/* assign GPIO to SDIO core */
-@@ -159,13 +159,13 @@ int brcmf_sdiod_intr_register(struct brc
- 			data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
- 				     data, &ret);
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_release_host(sdiodev->func1);
- 	} else {
- 		brcmf_dbg(SDIO, "Entering\n");
--		sdio_claim_host(sdiodev->func[1]);
--		sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler);
--		sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler);
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_claim_host(sdiodev->func1);
-+		sdio_claim_irq(sdiodev->func1, brcmf_sdiod_ib_irqhandler);
-+		sdio_claim_irq(sdiodev->func2, brcmf_sdiod_dummy_irqhandler);
-+		sdio_release_host(sdiodev->func1);
- 		sdiodev->sd_irq_requested = true;
- 	}
- 
-@@ -183,26 +183,26 @@ void brcmf_sdiod_intr_unregister(struct
- 		struct brcmfmac_sdio_pd *pdata;
- 
- 		pdata = &sdiodev->settings->bus.sdio;
--		sdio_claim_host(sdiodev->func[1]);
-+		sdio_claim_host(sdiodev->func1);
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
- 		brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_release_host(sdiodev->func1);
- 
- 		sdiodev->oob_irq_requested = false;
- 		if (sdiodev->irq_wake) {
- 			disable_irq_wake(pdata->oob_irq_nr);
- 			sdiodev->irq_wake = false;
- 		}
--		free_irq(pdata->oob_irq_nr, &sdiodev->func[1]->dev);
-+		free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev);
- 		sdiodev->irq_en = false;
- 		sdiodev->oob_irq_requested = false;
- 	}
- 
- 	if (sdiodev->sd_irq_requested) {
--		sdio_claim_host(sdiodev->func[1]);
--		sdio_release_irq(sdiodev->func[2]);
--		sdio_release_irq(sdiodev->func[1]);
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_claim_host(sdiodev->func1);
-+		sdio_release_irq(sdiodev->func2);
-+		sdio_release_irq(sdiodev->func1);
-+		sdio_release_host(sdiodev->func1);
- 		sdiodev->sd_irq_requested = false;
- 	}
- }
-@@ -264,7 +264,7 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_
- 	addr &= SBSDIO_SB_OFT_ADDR_MASK;
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	data = sdio_readl(sdiodev->func[1], addr, &retval);
-+	data = sdio_readl(sdiodev->func1, addr, &retval);
- 
- out:
- 	if (ret)
-@@ -285,7 +285,7 @@ void brcmf_sdiod_writel(struct brcmf_sdi
- 	addr &= SBSDIO_SB_OFT_ADDR_MASK;
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	sdio_writel(sdiodev->func[1], data, addr, &retval);
-+	sdio_writel(sdiodev->func1, data, addr, &retval);
- 
- out:
- 	if (ret)
-@@ -550,7 +550,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 	addr &= SBSDIO_SB_OFT_ADDR_MASK;
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, pkt);
-+	err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr, pkt);
- 
- done:
- 	return err;
-@@ -575,13 +575,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (pktq->qlen == 1)
--		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
-+		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
- 					    pktq->next);
- 	else if (!sdiodev->sg_support) {
- 		glom_skb = brcmu_pkt_buf_get_skb(totlen);
- 		if (!glom_skb)
- 			return -ENOMEM;
--		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
-+		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
- 					    glom_skb);
- 		if (err)
- 			goto done;
-@@ -591,7 +591,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 			skb_pull(glom_skb, skb->len);
- 		}
- 	} else
--		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], false,
-+		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, false,
- 					    addr, pktq);
- 
- done:
-@@ -623,7 +623,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (!err)
--		err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], addr,
-+		err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2, addr,
- 					     mypkt);
- 
- 	brcmu_pkt_buf_free_skb(mypkt);
-@@ -649,13 +649,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	if (pktq->qlen == 1 || !sdiodev->sg_support) {
- 		skb_queue_walk(pktq, skb) {
--			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2],
-+			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2,
- 						     addr, skb);
- 			if (err)
- 				break;
- 		}
- 	} else {
--		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], true,
-+		err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, true,
- 					    addr, pktq);
- 	}
- 
-@@ -686,7 +686,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 	else
- 		dsize = size;
- 
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 
- 	/* Do the transfer(s) */
- 	while (size) {
-@@ -706,10 +706,10 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 		if (write) {
- 			memcpy(pkt->data, data, dsize);
--			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[1],
-+			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func1,
- 						     sdaddr, pkt);
- 		} else {
--			err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[1],
-+			err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func1,
- 						    sdaddr, pkt);
- 		}
- 
-@@ -733,7 +733,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 	dev_kfree_skb(pkt);
- 
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 
- 	return err;
- }
-@@ -757,7 +757,7 @@ void brcmf_sdiod_sgtable_alloc(struct br
- 	uint nents;
- 	int err;
- 
--	func = sdiodev->func[2];
-+	func = sdiodev->func2;
- 	host = func->card->host;
- 	sdiodev->sg_support = host->max_segs > 1;
- 	max_blocks = min_t(uint, host->max_blk_count, 511u);
-@@ -818,17 +818,17 @@ static int brcmf_sdiod_freezer_on(struct
- 	brcmf_sdio_trigger_dpc(sdiodev->bus);
- 	wait_event(sdiodev->freezer->thread_freeze,
- 		   atomic_read(expect) == sdiodev->freezer->frozen_count);
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 	res = brcmf_sdio_sleep(sdiodev->bus, true);
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 	return res;
- }
- 
- static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev)
- {
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 	brcmf_sdio_sleep(sdiodev->bus, false);
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 	atomic_set(&sdiodev->freezer->freezing, 0);
- 	complete_all(&sdiodev->freezer->resumed);
- }
-@@ -878,19 +878,19 @@ static int brcmf_sdiod_remove(struct brc
- 	brcmf_sdiod_freezer_detach(sdiodev);
- 
- 	/* Disable Function 2 */
--	sdio_claim_host(sdiodev->func[2]);
--	sdio_disable_func(sdiodev->func[2]);
--	sdio_release_host(sdiodev->func[2]);
-+	sdio_claim_host(sdiodev->func2);
-+	sdio_disable_func(sdiodev->func2);
-+	sdio_release_host(sdiodev->func2);
- 
- 	/* Disable Function 1 */
--	sdio_claim_host(sdiodev->func[1]);
--	sdio_disable_func(sdiodev->func[1]);
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
-+	sdio_disable_func(sdiodev->func1);
-+	sdio_release_host(sdiodev->func1);
- 
- 	sg_free_table(&sdiodev->sgtable);
- 	sdiodev->sbwad = 0;
- 
--	pm_runtime_allow(sdiodev->func[1]->card->host->parent);
-+	pm_runtime_allow(sdiodev->func1->card->host->parent);
- 	return 0;
- }
- 
-@@ -906,29 +906,27 @@ static int brcmf_sdiod_probe(struct brcm
- {
- 	int ret = 0;
- 
--	sdiodev->num_funcs = 2;
-+	sdio_claim_host(sdiodev->func1);
- 
--	sdio_claim_host(sdiodev->func[1]);
--
--	ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE);
-+	ret = sdio_set_block_size(sdiodev->func1, SDIO_FUNC1_BLOCKSIZE);
- 	if (ret) {
- 		brcmf_err("Failed to set F1 blocksize\n");
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_release_host(sdiodev->func1);
- 		goto out;
- 	}
--	ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE);
-+	ret = sdio_set_block_size(sdiodev->func2, SDIO_FUNC2_BLOCKSIZE);
- 	if (ret) {
- 		brcmf_err("Failed to set F2 blocksize\n");
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_release_host(sdiodev->func1);
- 		goto out;
- 	}
- 
- 	/* increase F2 timeout */
--	sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY;
-+	sdiodev->func2->enable_timeout = SDIO_WAIT_F2RDY;
- 
- 	/* Enable Function 1 */
--	ret = sdio_enable_func(sdiodev->func[1]);
--	sdio_release_host(sdiodev->func[1]);
-+	ret = sdio_enable_func(sdiodev->func1);
-+	sdio_release_host(sdiodev->func1);
- 	if (ret) {
- 		brcmf_err("Failed to enable F1: err=%d\n", ret);
- 		goto out;
-@@ -944,7 +942,7 @@ static int brcmf_sdiod_probe(struct brcm
- 		ret = -ENODEV;
- 		goto out;
- 	}
--	brcmf_sdiod_host_fixup(sdiodev->func[2]->card->host);
-+	brcmf_sdiod_host_fixup(sdiodev->func2->card->host);
- out:
- 	if (ret)
- 		brcmf_sdiod_remove(sdiodev);
-@@ -1032,16 +1030,15 @@ static int brcmf_ops_sdio_probe(struct s
- 	/* store refs to functions used. mmc_card does
- 	 * not hold the F0 function pointer.
- 	 */
--	sdiodev->func[0] = NULL;
--	sdiodev->func[1] = func->card->sdio_func[0];
--	sdiodev->func[2] = func;
-+	sdiodev->func1 = func->card->sdio_func[0];
-+	sdiodev->func2 = func;
- 
- 	sdiodev->bus_if = bus_if;
- 	bus_if->bus_priv.sdio = sdiodev;
- 	bus_if->proto_type = BRCMF_PROTO_BCDC;
- 	dev_set_drvdata(&func->dev, bus_if);
--	dev_set_drvdata(&sdiodev->func[1]->dev, bus_if);
--	sdiodev->dev = &sdiodev->func[1]->dev;
-+	dev_set_drvdata(&sdiodev->func1->dev, bus_if);
-+	sdiodev->dev = &sdiodev->func1->dev;
- 
- 	brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN);
- 
-@@ -1057,7 +1054,7 @@ static int brcmf_ops_sdio_probe(struct s
- 
- fail:
- 	dev_set_drvdata(&func->dev, NULL);
--	dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
-+	dev_set_drvdata(&sdiodev->func1->dev, NULL);
- 	kfree(sdiodev);
- 	kfree(bus_if);
- 	return err;
-@@ -1086,8 +1083,8 @@ static void brcmf_ops_sdio_remove(struct
- 		/* only proceed with rest of cleanup if func 1 */
- 		brcmf_sdiod_remove(sdiodev);
- 
--		dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
--		dev_set_drvdata(&sdiodev->func[2]->dev, NULL);
-+		dev_set_drvdata(&sdiodev->func1->dev, NULL);
-+		dev_set_drvdata(&sdiodev->func2->dev, NULL);
- 
- 		kfree(bus_if);
- 		kfree(sdiodev);
-@@ -1132,7 +1129,7 @@ static int brcmf_ops_sdio_suspend(struct
- 		else
- 			sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
- 	}
--	if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags))
-+	if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
- 		brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
- 	return 0;
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -979,7 +979,7 @@ static int brcmf_sdio_readshared(struct
- 	struct sdpcm_shared_le sh_le;
- 	__le32 addr_le;
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 	brcmf_sdio_bus_sleep(bus, false, false);
- 
- 	/*
-@@ -1013,7 +1013,7 @@ static int brcmf_sdio_readshared(struct
- 	if (rv < 0)
- 		goto fail;
- 
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- 	/* Endianness */
- 	sh->flags = le32_to_cpu(sh_le.flags);
-@@ -1035,7 +1035,7 @@ static int brcmf_sdio_readshared(struct
- fail:
- 	brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n",
- 		  rv, addr);
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 	return rv;
- }
- 
-@@ -1157,7 +1157,7 @@ static void brcmf_sdio_rxfail(struct brc
- 		  rtx ? ", send NAK" : "");
- 
- 	if (abort)
--		brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func[2]);
-+		brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func2);
- 
- 	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
- 			   &err);
-@@ -1209,7 +1209,7 @@ static void brcmf_sdio_txfail(struct brc
- 	brcmf_err("sdio error, abort command and terminate frame\n");
- 	bus->sdcnt.tx_sderrs++;
- 
--	brcmf_sdiod_abort(sdiodev, sdiodev->func[2]);
-+	brcmf_sdiod_abort(sdiodev, sdiodev->func2);
- 	brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
- 	bus->sdcnt.f1regdata++;
- 
-@@ -1565,10 +1565,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
- 		 * read directly into the chained packet, or allocate a large
- 		 * packet and and copy into the chain.
- 		 */
--		sdio_claim_host(bus->sdiodev->func[1]);
-+		sdio_claim_host(bus->sdiodev->func1);
- 		errcode = brcmf_sdiod_recv_chain(bus->sdiodev,
- 						 &bus->glom, dlen);
--		sdio_release_host(bus->sdiodev->func[1]);
-+		sdio_release_host(bus->sdiodev->func1);
- 		bus->sdcnt.f2rxdata++;
- 
- 		/* On failure, kill the superframe */
-@@ -1576,11 +1576,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
- 			brcmf_err("glom read of %d bytes failed: %d\n",
- 				  dlen, errcode);
- 
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			brcmf_sdio_rxfail(bus, true, false);
- 			bus->sdcnt.rxglomfail++;
- 			brcmf_sdio_free_glom(bus);
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			return 0;
- 		}
- 
-@@ -1590,10 +1590,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
- 
- 		rd_new.seq_num = rxseq;
- 		rd_new.len = dlen;
--		sdio_claim_host(bus->sdiodev->func[1]);
-+		sdio_claim_host(bus->sdiodev->func1);
- 		errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new,
- 					     BRCMF_SDIO_FT_SUPER);
--		sdio_release_host(bus->sdiodev->func[1]);
-+		sdio_release_host(bus->sdiodev->func1);
- 		bus->cur_read.len = rd_new.len_nxtfrm << 4;
- 
- 		/* Remove superframe header, remember offset */
-@@ -1609,10 +1609,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
- 
- 			rd_new.len = pnext->len;
- 			rd_new.seq_num = rxseq++;
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,
- 						     BRCMF_SDIO_FT_SUB);
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
- 					   pnext->data, 32, "subframe:\n");
- 
-@@ -1621,11 +1621,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
- 
- 		if (errcode) {
- 			/* Terminate frame on error */
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			brcmf_sdio_rxfail(bus, true, false);
- 			bus->sdcnt.rxglomfail++;
- 			brcmf_sdio_free_glom(bus);
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			bus->cur_read.len = 0;
- 			return 0;
- 		}
-@@ -1833,7 +1833,7 @@ static uint brcmf_sdio_readframes(struct
- 
- 		rd->len_left = rd->len;
- 		/* read header first for unknow frame length */
--		sdio_claim_host(bus->sdiodev->func[1]);
-+		sdio_claim_host(bus->sdiodev->func1);
- 		if (!rd->len) {
- 			ret = brcmf_sdiod_recv_buf(bus->sdiodev,
- 						   bus->rxhdr, BRCMF_FIRSTREAD);
-@@ -1843,7 +1843,7 @@ static uint brcmf_sdio_readframes(struct
- 					  ret);
- 				bus->sdcnt.rx_hdrfail++;
- 				brcmf_sdio_rxfail(bus, true, true);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 				continue;
- 			}
- 
-@@ -1853,7 +1853,7 @@ static uint brcmf_sdio_readframes(struct
- 
- 			if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd,
- 					       BRCMF_SDIO_FT_NORMAL)) {
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 				if (!bus->rxpending)
- 					break;
- 				else
-@@ -1869,7 +1869,7 @@ static uint brcmf_sdio_readframes(struct
- 				rd->len_nxtfrm = 0;
- 				/* treat all packet as event if we don't know */
- 				rd->channel = SDPCM_EVENT_CHANNEL;
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 				continue;
- 			}
- 			rd->len_left = rd->len > BRCMF_FIRSTREAD ?
-@@ -1886,7 +1886,7 @@ static uint brcmf_sdio_readframes(struct
- 			brcmf_err("brcmu_pkt_buf_get_skb failed\n");
- 			brcmf_sdio_rxfail(bus, false,
- 					    RETRYCHAN(rd->channel));
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			continue;
- 		}
- 		skb_pull(pkt, head_read);
-@@ -1894,16 +1894,16 @@ static uint brcmf_sdio_readframes(struct
- 
- 		ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt);
- 		bus->sdcnt.f2rxdata++;
--		sdio_release_host(bus->sdiodev->func[1]);
-+		sdio_release_host(bus->sdiodev->func1);
- 
- 		if (ret < 0) {
- 			brcmf_err("read %d bytes from channel %d failed: %d\n",
- 				  rd->len, rd->channel, ret);
- 			brcmu_pkt_buf_free_skb(pkt);
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			brcmf_sdio_rxfail(bus, true,
- 					    RETRYCHAN(rd->channel));
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			continue;
- 		}
- 
-@@ -1914,7 +1914,7 @@ static uint brcmf_sdio_readframes(struct
- 		} else {
- 			memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
- 			rd_new.seq_num = rd->seq_num;
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new,
- 					       BRCMF_SDIO_FT_NORMAL)) {
- 				rd->len = 0;
-@@ -1927,11 +1927,11 @@ static uint brcmf_sdio_readframes(struct
- 					  roundup(rd_new.len, 16) >> 4);
- 				rd->len = 0;
- 				brcmf_sdio_rxfail(bus, true, true);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 				brcmu_pkt_buf_free_skb(pkt);
- 				continue;
- 			}
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 			rd->len_nxtfrm = rd_new.len_nxtfrm;
- 			rd->channel = rd_new.channel;
- 			rd->dat_offset = rd_new.dat_offset;
-@@ -1947,9 +1947,9 @@ static uint brcmf_sdio_readframes(struct
- 					  rd_new.seq_num);
- 				/* Force retry w/normal header read */
- 				rd->len = 0;
--				sdio_claim_host(bus->sdiodev->func[1]);
-+				sdio_claim_host(bus->sdiodev->func1);
- 				brcmf_sdio_rxfail(bus, false, true);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 				brcmu_pkt_buf_free_skb(pkt);
- 				continue;
- 			}
-@@ -1972,9 +1972,9 @@ static uint brcmf_sdio_readframes(struct
- 			} else {
- 				brcmf_err("%s: glom superframe w/o "
- 					  "descriptor!\n", __func__);
--				sdio_claim_host(bus->sdiodev->func[1]);
-+				sdio_claim_host(bus->sdiodev->func1);
- 				brcmf_sdio_rxfail(bus, false, false);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 			}
- 			/* prepare the descriptor for the next read */
- 			rd->len = rd->len_nxtfrm << 4;
-@@ -2072,7 +2072,7 @@ static int brcmf_sdio_txpkt_prep_sg(stru
- 	int ntail, ret;
- 
- 	sdiodev = bus->sdiodev;
--	blksize = sdiodev->func[2]->cur_blksize;
-+	blksize = sdiodev->func2->cur_blksize;
- 	/* sg entry alignment should be a divisor of block size */
- 	WARN_ON(blksize % bus->sgentry_align);
- 
-@@ -2251,14 +2251,14 @@ static int brcmf_sdio_txpkt(struct brcmf
- 	if (ret)
- 		goto done;
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 	ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
- 	bus->sdcnt.f2txdata++;
- 
- 	if (ret < 0)
- 		brcmf_sdio_txfail(bus);
- 
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- done:
- 	brcmf_sdio_txpkt_postp(bus, pktq);
-@@ -2314,10 +2314,11 @@ static uint brcmf_sdio_sendfromq(struct
- 		/* In poll mode, need to check for other events */
- 		if (!bus->intr) {
- 			/* Check device status, signal pending interrupt */
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			intstatus = brcmf_sdiod_readl(bus->sdiodev,
- 						      intstat_addr, &ret);
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
-+
- 			bus->sdcnt.f2txdata++;
- 			if (ret != 0)
- 				break;
-@@ -2417,7 +2418,7 @@ static void brcmf_sdio_bus_stop(struct d
- 	}
- 
- 	if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
--		sdio_claim_host(sdiodev->func[1]);
-+		sdio_claim_host(sdiodev->func1);
- 
- 		/* Enable clock for device interrupts */
- 		brcmf_sdio_bus_sleep(bus, false, false);
-@@ -2441,13 +2442,13 @@ static void brcmf_sdio_bus_stop(struct d
- 
- 		/* Turn off the bus (F2), free any pending packets */
- 		brcmf_dbg(INTR, "disable SDIO interrupts\n");
--		sdio_disable_func(sdiodev->func[2]);
-+		sdio_disable_func(sdiodev->func2);
- 
- 		/* Clear any pending interrupts now that F2 is disabled */
- 		brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
- 				   local_hostintmask, NULL);
- 
--		sdio_release_host(sdiodev->func[1]);
-+		sdio_release_host(sdiodev->func1);
- 	}
- 	/* Clear the data packet queues */
- 	brcmu_pktq_flush(&bus->txq, true, NULL, NULL);
-@@ -2522,7 +2523,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 
- 	/* If waiting for HTAVAIL, check status */
- 	if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
-@@ -2585,7 +2586,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 		intstatus |= brcmf_sdio_hostmail(bus);
- 	}
- 
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- 	/* Generally don't ask for these, can get CRC errors... */
- 	if (intstatus & I_WR_OOSYNC) {
-@@ -2628,7 +2629,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 
- 	if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
- 	    data_ok(bus)) {
--		sdio_claim_host(bus->sdiodev->func[1]);
-+		sdio_claim_host(bus->sdiodev->func1);
- 		if (bus->ctrl_frame_stat) {
- 			err = brcmf_sdio_tx_ctrlframe(bus,  bus->ctrl_frame_buf,
- 						      bus->ctrl_frame_len);
-@@ -2636,7 +2637,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 			wmb();
- 			bus->ctrl_frame_stat = false;
- 		}
--		sdio_release_host(bus->sdiodev->func[1]);
-+		sdio_release_host(bus->sdiodev->func1);
- 		brcmf_sdio_wait_event_wakeup(bus);
- 	}
- 	/* Send queued frames (limit 1 if rx may still be pending) */
-@@ -2652,14 +2653,14 @@ static void brcmf_sdio_dpc(struct brcmf_
- 		brcmf_err("failed backplane access over SDIO, halting operation\n");
- 		atomic_set(&bus->intstatus, 0);
- 		if (bus->ctrl_frame_stat) {
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			if (bus->ctrl_frame_stat) {
- 				bus->ctrl_frame_err = -ENODEV;
- 				wmb();
- 				bus->ctrl_frame_stat = false;
- 				brcmf_sdio_wait_event_wakeup(bus);
- 			}
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 		}
- 	} else if (atomic_read(&bus->intstatus) ||
- 		   atomic_read(&bus->ipend) > 0 ||
-@@ -2874,13 +2875,13 @@ brcmf_sdio_bus_txctl(struct device *dev,
- 					 CTL_DONE_TIMEOUT);
- 	ret = 0;
- 	if (bus->ctrl_frame_stat) {
--		sdio_claim_host(bus->sdiodev->func[1]);
-+		sdio_claim_host(bus->sdiodev->func1);
- 		if (bus->ctrl_frame_stat) {
- 			brcmf_dbg(SDIO, "ctrl_frame timeout\n");
- 			bus->ctrl_frame_stat = false;
- 			ret = -ETIMEDOUT;
- 		}
--		sdio_release_host(bus->sdiodev->func[1]);
-+		sdio_release_host(bus->sdiodev->func1);
- 	}
- 	if (!ret) {
- 		brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n",
-@@ -3004,7 +3005,7 @@ static int brcmf_sdio_assert_info(struct
- 		return 0;
- 	}
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 	if (sh->assert_file_addr != 0) {
- 		error = brcmf_sdiod_ramrw(bus->sdiodev, false,
- 					  sh->assert_file_addr, (u8 *)file, 80);
-@@ -3017,7 +3018,7 @@ static int brcmf_sdio_assert_info(struct
- 		if (error < 0)
- 			return error;
- 	}
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- 	seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n",
- 		   file, sh->assert_line, expr);
-@@ -3291,7 +3292,7 @@ static int brcmf_sdio_download_firmware(
- 	int bcmerror;
- 	u32 rstvec;
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 	brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
- 
- 	rstvec = get_unaligned_le32(fw->data);
-@@ -3320,7 +3321,7 @@ static int brcmf_sdio_download_firmware(
- 
- err:
- 	brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 	return bcmerror;
- }
- 
-@@ -3435,7 +3436,7 @@ static int brcmf_sdio_bus_preinit(struct
- 	if (sdiodev->sg_support) {
- 		bus->txglom = false;
- 		value = 1;
--		pad_size = bus->sdiodev->func[2]->cur_blksize << 1;
-+		pad_size = bus->sdiodev->func2->cur_blksize << 1;
- 		err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom",
- 					   &value, sizeof(u32));
- 		if (err < 0) {
-@@ -3477,7 +3478,7 @@ static int brcmf_sdio_bus_get_memdump(st
- 
- 	address = bus->ci->rambase;
- 	offset = err = 0;
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 	while (offset < mem_size) {
- 		len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK :
- 		      mem_size - offset;
-@@ -3493,7 +3494,7 @@ static int brcmf_sdio_bus_get_memdump(st
- 	}
- 
- done:
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 	return err;
- }
- 
-@@ -3550,11 +3551,10 @@ static void brcmf_sdio_bus_watchdog(stru
- 			if (!bus->dpc_triggered) {
- 				u8 devpend;
- 
--				sdio_claim_host(bus->sdiodev->func[1]);
-+				sdio_claim_host(bus->sdiodev->func1);
- 				devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
--							       SDIO_CCCR_INTx,
--							       NULL);
--				sdio_release_host(bus->sdiodev->func[1]);
-+						  SDIO_CCCR_INTx, NULL);
-+				sdio_release_host(bus->sdiodev->func1);
- 				intstatus = devpend & (INTR_STATUS_FUNC1 |
- 						       INTR_STATUS_FUNC2);
- 			}
-@@ -3580,13 +3580,13 @@ static void brcmf_sdio_bus_watchdog(stru
- 		bus->console.count += jiffies_to_msecs(BRCMF_WD_POLL);
- 		if (bus->console.count >= bus->console_interval) {
- 			bus->console.count -= bus->console_interval;
--			sdio_claim_host(bus->sdiodev->func[1]);
-+			sdio_claim_host(bus->sdiodev->func1);
- 			/* Make sure backplane clock is on */
- 			brcmf_sdio_bus_sleep(bus, false, false);
- 			if (brcmf_sdio_readconsole(bus) < 0)
- 				/* stop on error */
- 				bus->console_interval = 0;
--			sdio_release_host(bus->sdiodev->func[1]);
-+			sdio_release_host(bus->sdiodev->func1);
- 		}
- 	}
- #endif				/* DEBUG */
-@@ -3599,11 +3599,11 @@ static void brcmf_sdio_bus_watchdog(stru
- 			bus->idlecount++;
- 			if (bus->idlecount > bus->idletime) {
- 				brcmf_dbg(SDIO, "idle\n");
--				sdio_claim_host(bus->sdiodev->func[1]);
-+				sdio_claim_host(bus->sdiodev->func1);
- 				brcmf_sdio_wd_timer(bus, false);
- 				bus->idlecount = 0;
- 				brcmf_sdio_bus_sleep(bus, true, false);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 			}
- 		} else {
- 			bus->idlecount = 0;
-@@ -3773,8 +3773,8 @@ static u32 brcmf_sdio_buscore_read32(voi
- 	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
- 
- 	if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
--	    (sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
--	     sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
-+	    (sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
-+	     sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
- 		rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
- 		if (rev >= 2) {
- 			val &= ~CID_ID_MASK;
-@@ -3810,7 +3810,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	u32 drivestrength;
- 
- 	sdiodev = bus->sdiodev;
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 
- 	pr_debug("F1 signature read @0x18000000=0x%4x\n",
- 		 brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
-@@ -3877,8 +3877,8 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	/* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ
- 	 * is true or when platform data OOB irq is true).
- 	 */
--	if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) &&
--	    ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) ||
-+	if ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_KEEP_POWER) &&
-+	    ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_WAKE_SDIO_IRQ) ||
- 	     (sdiodev->settings->bus.sdio.oob_irq_supported)))
- 		sdiodev->bus_if->wowl_supported = true;
- #endif
-@@ -3917,7 +3917,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	if (err)
- 		goto fail;
- 
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 
- 	brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
- 
-@@ -3938,7 +3938,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- 	return true;
- 
- fail:
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 	return false;
- }
- 
-@@ -4044,7 +4044,7 @@ static void brcmf_sdio_firmware_callback
- 	bus->sdcnt.tickcnt = 0;
- 	brcmf_sdio_wd_timer(bus, true);
- 
--	sdio_claim_host(sdiodev->func[1]);
-+	sdio_claim_host(sdiodev->func1);
- 
- 	/* Make sure backplane clock is on, needed to generate F2 interrupt */
- 	brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
-@@ -4066,7 +4066,7 @@ static void brcmf_sdio_firmware_callback
- 	brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
- 			   SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
- 
--	err = sdio_enable_func(sdiodev->func[2]);
-+	err = sdio_enable_func(sdiodev->func2);
- 
- 	brcmf_dbg(INFO, "enable F2: err=%d\n", err);
- 
-@@ -4081,7 +4081,7 @@ static void brcmf_sdio_firmware_callback
- 		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- 	} else {
- 		/* Disable F2 again */
--		sdio_disable_func(sdiodev->func[2]);
-+		sdio_disable_func(sdiodev->func2);
- 		goto release;
- 	}
- 
-@@ -4106,7 +4106,7 @@ static void brcmf_sdio_firmware_callback
- 	if (err != 0)
- 		brcmf_sdio_clkctl(bus, CLK_NONE, false);
- 
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- 
- 	err = brcmf_bus_started(dev);
- 	if (err != 0) {
-@@ -4116,10 +4116,10 @@ static void brcmf_sdio_firmware_callback
- 	return;
- 
- release:
--	sdio_release_host(sdiodev->func[1]);
-+	sdio_release_host(sdiodev->func1);
- fail:
- 	brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
--	device_release_driver(&sdiodev->func[2]->dev);
-+	device_release_driver(&sdiodev->func2->dev);
- 	device_release_driver(dev);
- }
- 
-@@ -4146,7 +4146,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 
- 	/* single-threaded workqueue */
- 	wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM,
--				     dev_name(&sdiodev->func[1]->dev));
-+				     dev_name(&sdiodev->func1->dev));
- 	if (!wq) {
- 		brcmf_err("insufficient memory to create txworkqueue\n");
- 		goto fail;
-@@ -4173,7 +4173,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	init_completion(&bus->watchdog_wait);
- 	bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
- 					bus, "brcmf_wdog/%s",
--					dev_name(&sdiodev->func[1]->dev));
-+					dev_name(&sdiodev->func1->dev));
- 	if (IS_ERR(bus->watchdog_tsk)) {
- 		pr_warn("brcmf_watchdog thread failed to start\n");
- 		bus->watchdog_tsk = NULL;
-@@ -4199,7 +4199,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	}
- 
- 	/* Query the F2 block size, set roundup accordingly */
--	bus->blocksize = bus->sdiodev->func[2]->cur_blksize;
-+	bus->blocksize = bus->sdiodev->func2->cur_blksize;
- 	bus->roundup = min(max_roundup, bus->blocksize);
- 
- 	/* Allocate buffers */
-@@ -4215,17 +4215,17 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 		}
- 	}
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 
- 	/* Disable F2 to clear any intermediate frame state on the dongle */
--	sdio_disable_func(bus->sdiodev->func[2]);
-+	sdio_disable_func(bus->sdiodev->func2);
- 
- 	bus->rxflow = false;
- 
- 	/* Done with backplane-dependent accesses, can drop clock... */
- 	brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
- 
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- 	/* ...and initialize clock/power states */
- 	bus->clkstate = CLK_SDONLY;
-@@ -4277,7 +4277,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
- 
- 		if (bus->ci) {
- 			if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
--				sdio_claim_host(bus->sdiodev->func[1]);
-+				sdio_claim_host(bus->sdiodev->func1);
- 				brcmf_sdio_wd_timer(bus, false);
- 				brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
- 				/* Leave the device in state where it is
-@@ -4287,7 +4287,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
- 				msleep(20);
- 				brcmf_chip_set_passive(bus->ci);
- 				brcmf_sdio_clkctl(bus, CLK_NONE, false);
--				sdio_release_host(bus->sdiodev->func[1]);
-+				sdio_release_host(bus->sdiodev->func1);
- 			}
- 			brcmf_chip_detach(bus->ci);
- 		}
-@@ -4334,9 +4334,9 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
- {
- 	int ret;
- 
--	sdio_claim_host(bus->sdiodev->func[1]);
-+	sdio_claim_host(bus->sdiodev->func1);
- 	ret = brcmf_sdio_bus_sleep(bus, sleep, false);
--	sdio_release_host(bus->sdiodev->func[1]);
-+	sdio_release_host(bus->sdiodev->func1);
- 
- 	return ret;
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
-@@ -21,9 +21,6 @@
- #include <linux/firmware.h>
- #include "firmware.h"
- 
--/* Maximum number of I/O funcs */
--#define NUM_SDIO_FUNCS	3
--
- #define SDIOD_FBR_SIZE		0x100
- 
- /* io_en */
-@@ -173,8 +170,8 @@ struct brcmf_sdio;
- struct brcmf_sdiod_freezer;
- 
- struct brcmf_sdio_dev {
--	struct sdio_func *func[NUM_SDIO_FUNCS];
--	u8 num_funcs;			/* Supported funcs on client */
-+	struct sdio_func *func1;
-+	struct sdio_func *func2;
- 	u32 sbwad;			/* Save backplane window address */
- 	struct brcmf_core *cc_core;	/* chipcommon core info struct */
- 	struct brcmf_sdio *bus;
-@@ -295,17 +292,17 @@ void brcmf_sdiod_intr_unregister(struct
- /* SDIO device register access interface */
- /* Accessors for SDIO Function 0 */
- #define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
--	sdio_f0_readb((sdiodev)->func[1], (addr), (r))
-+	sdio_f0_readb((sdiodev)->func1, (addr), (r))
- 
- #define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
--	sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret))
-+	sdio_f0_writeb((sdiodev)->func1, (v), (addr), (ret))
- 
- /* Accessors for SDIO Function 1 */
- #define brcmf_sdiod_readb(sdiodev, addr, r) \
--	sdio_readb((sdiodev)->func[1], (addr), (r))
-+	sdio_readb((sdiodev)->func1, (addr), (r))
- 
- #define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
--	sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
-+	sdio_writeb((sdiodev)->func1, (v), (addr), (ret))
- 
- u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
- void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,

+ 0 - 31
package/kernel/mac80211/patches/316-v4.16-0002-brcmfmac-add-comment-block-in-brcmf_sdio_buscore_rea.patch

@@ -1,31 +0,0 @@
-From 32adbcaa5df49f1977441f7a4bf180a0bcfe9966 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 9 Jan 2018 13:22:53 +0100
-Subject: [PATCH] brcmfmac: add comment block in brcmf_sdio_buscore_read()
-
-In brcmf_sdio_buscore_read() there is some special handling upon
-register access to chipid register of the chipcommon core. Add
-comment explaining why it is done here.
-
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3772,6 +3772,13 @@ static u32 brcmf_sdio_buscore_read32(voi
- 
- 	val = brcmf_sdiod_readl(sdiodev, addr, NULL);
- 
-+	/*
-+	 * this is a bit of special handling if reading the chipcommon chipid
-+	 * register. The 4339 is a next-gen of the 4335. It uses the same
-+	 * SDIO device id as 4335 and the chipid register returns 4335 as well.
-+	 * It can be identified as 4339 by looking at the chip revision. It
-+	 * is corrected here so the chip.c module has the right info.
-+	 */
- 	if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
- 	    (sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
- 	     sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {

+ 0 - 137
package/kernel/mac80211/patches/316-v4.16-0003-brcmfmac-rename-brcmf_sdiod_buff_-read-write-functio.patch

@@ -1,137 +0,0 @@
-From 378f6a16043e5d3346301fc618f503e97aea335b Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 9 Jan 2018 13:22:54 +0100
-Subject: [PATCH] brcmfmac: rename brcmf_sdiod_buff_{read,write}() functions
-
-Rename functions to brcmf_sdio_skbuff_{read,write}() as we pass an
-skbuff to this function.
-
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c  | 48 +++++++++++-----------
- 1 file changed, 24 insertions(+), 24 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
-@@ -292,24 +292,24 @@ out:
- 		*ret = retval;
- }
- 
--static int brcmf_sdiod_buff_read(struct brcmf_sdio_dev *sdiodev,
--				 struct sdio_func *func, u32 addr,
--				 struct sk_buff *pkt)
-+static int brcmf_sdiod_skbuff_read(struct brcmf_sdio_dev *sdiodev,
-+				   struct sdio_func *func, u32 addr,
-+				   struct sk_buff *skb)
- {
- 	unsigned int req_sz;
- 	int err;
- 
- 	/* Single skb use the standard mmc interface */
--	req_sz = pkt->len + 3;
-+	req_sz = skb->len + 3;
- 	req_sz &= (uint)~3;
- 
- 	switch (func->num) {
- 	case 1:
--		err = sdio_memcpy_fromio(func, ((u8 *)(pkt->data)), addr,
-+		err = sdio_memcpy_fromio(func, ((u8 *)(skb->data)), addr,
- 					 req_sz);
- 		break;
- 	case 2:
--		err = sdio_readsb(func, ((u8 *)(pkt->data)), addr, req_sz);
-+		err = sdio_readsb(func, ((u8 *)(skb->data)), addr, req_sz);
- 		break;
- 	default:
- 		/* bail out as things are really fishy here */
-@@ -323,18 +323,18 @@ static int brcmf_sdiod_buff_read(struct
- 	return err;
- }
- 
--static int brcmf_sdiod_buff_write(struct brcmf_sdio_dev *sdiodev,
--				  struct sdio_func *func, u32 addr,
--				  struct sk_buff *pkt)
-+static int brcmf_sdiod_skbuff_write(struct brcmf_sdio_dev *sdiodev,
-+				    struct sdio_func *func, u32 addr,
-+				    struct sk_buff *skb)
- {
- 	unsigned int req_sz;
- 	int err;
- 
- 	/* Single skb use the standard mmc interface */
--	req_sz = pkt->len + 3;
-+	req_sz = skb->len + 3;
- 	req_sz &= (uint)~3;
- 
--	err = sdio_memcpy_toio(func, addr, ((u8 *)(pkt->data)), req_sz);
-+	err = sdio_memcpy_toio(func, addr, ((u8 *)(skb->data)), req_sz);
- 
- 	if (err == -ENOMEDIUM)
- 		brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_NOMEDIUM);
-@@ -550,7 +550,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
- 	addr &= SBSDIO_SB_OFT_ADDR_MASK;
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
--	err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr, pkt);
-+	err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr, pkt);
- 
- done:
- 	return err;
-@@ -575,14 +575,14 @@ int brcmf_sdiod_recv_chain(struct brcmf_
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (pktq->qlen == 1)
--		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
--					    pktq->next);
-+		err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr,
-+					      pktq->next);
- 	else if (!sdiodev->sg_support) {
- 		glom_skb = brcmu_pkt_buf_get_skb(totlen);
- 		if (!glom_skb)
- 			return -ENOMEM;
--		err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
--					    glom_skb);
-+		err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func2, addr,
-+					      glom_skb);
- 		if (err)
- 			goto done;
- 
-@@ -623,8 +623,8 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
- 	addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
- 
- 	if (!err)
--		err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2, addr,
--					     mypkt);
-+		err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2, addr,
-+					       mypkt);
- 
- 	brcmu_pkt_buf_free_skb(mypkt);
- 
-@@ -649,8 +649,8 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
- 
- 	if (pktq->qlen == 1 || !sdiodev->sg_support) {
- 		skb_queue_walk(pktq, skb) {
--			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2,
--						     addr, skb);
-+			err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func2,
-+						       addr, skb);
- 			if (err)
- 				break;
- 		}
-@@ -706,11 +706,11 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
- 
- 		if (write) {
- 			memcpy(pkt->data, data, dsize);
--			err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func1,
--						     sdaddr, pkt);
-+			err = brcmf_sdiod_skbuff_write(sdiodev, sdiodev->func1,
-+						       sdaddr, pkt);
- 		} else {
--			err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func1,
--						    sdaddr, pkt);
-+			err = brcmf_sdiod_skbuff_read(sdiodev, sdiodev->func1,
-+						      sdaddr, pkt);
- 		}
- 
- 		if (err) {

+ 0 - 59
package/kernel/mac80211/patches/317-v4.16-0001-brcmfmac-Use-zeroing-memory-allocator-than-allocator.patch

@@ -1,59 +0,0 @@
-From b7acadaf038740c43515dc1548f43d01cc92823a Mon Sep 17 00:00:00 2001
-From: Himanshu Jha <[email protected]>
-Date: Tue, 9 Jan 2018 02:15:31 +0530
-Subject: [PATCH] brcmfmac: Use zeroing memory allocator than allocator/memset
-
-Use dma_zalloc_coherent for allocating zeroed
-memory and remove unnecessary memset function.
-
-Generated-by: scripts/coccinelle/api/alloc/kzalloc-simple.cocci
-
-Suggested-by: Luis R. Rodriguez <[email protected]>
-Signed-off-by: Himanshu Jha <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/pcie.c  | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1251,14 +1251,14 @@ static int brcmf_pcie_init_scratchbuffer
- 	u64 address;
- 	u32 addr;
- 
--	devinfo->shared.scratch = dma_alloc_coherent(&devinfo->pdev->dev,
--		BRCMF_DMA_D2H_SCRATCH_BUF_LEN,
--		&devinfo->shared.scratch_dmahandle, GFP_KERNEL);
-+	devinfo->shared.scratch =
-+		dma_zalloc_coherent(&devinfo->pdev->dev,
-+					BRCMF_DMA_D2H_SCRATCH_BUF_LEN,
-+					&devinfo->shared.scratch_dmahandle,
-+					GFP_KERNEL);
- 	if (!devinfo->shared.scratch)
- 		goto fail;
- 
--	memset(devinfo->shared.scratch, 0, BRCMF_DMA_D2H_SCRATCH_BUF_LEN);
--
- 	addr = devinfo->shared.tcm_base_address +
- 	       BRCMF_SHARED_DMA_SCRATCH_ADDR_OFFSET;
- 	address = (u64)devinfo->shared.scratch_dmahandle;
-@@ -1268,14 +1268,14 @@ static int brcmf_pcie_init_scratchbuffer
- 	       BRCMF_SHARED_DMA_SCRATCH_LEN_OFFSET;
- 	brcmf_pcie_write_tcm32(devinfo, addr, BRCMF_DMA_D2H_SCRATCH_BUF_LEN);
- 
--	devinfo->shared.ringupd = dma_alloc_coherent(&devinfo->pdev->dev,
--		BRCMF_DMA_D2H_RINGUPD_BUF_LEN,
--		&devinfo->shared.ringupd_dmahandle, GFP_KERNEL);
-+	devinfo->shared.ringupd =
-+		dma_zalloc_coherent(&devinfo->pdev->dev,
-+					BRCMF_DMA_D2H_RINGUPD_BUF_LEN,
-+					&devinfo->shared.ringupd_dmahandle,
-+					GFP_KERNEL);
- 	if (!devinfo->shared.ringupd)
- 		goto fail;
- 
--	memset(devinfo->shared.ringupd, 0, BRCMF_DMA_D2H_RINGUPD_BUF_LEN);
--
- 	addr = devinfo->shared.tcm_base_address +
- 	       BRCMF_SHARED_DMA_RINGUPD_ADDR_OFFSET;
- 	address = (u64)devinfo->shared.ringupd_dmahandle;

+ 0 - 26
package/kernel/mac80211/patches/318-v4.17-mac80211-round-IEEE80211_TX_STATUS_HEADROOM-up-to-mu.patch

@@ -1,26 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Fri, 9 Feb 2018 19:46:54 +0100
-Subject: [PATCH] mac80211: round IEEE80211_TX_STATUS_HEADROOM up to multiple
- of 4
-
-This ensures that mac80211 allocated management frames are properly
-aligned, which makes copying them more efficient.
-For instance, mt76 uses iowrite32_copy to copy beacon frames to beacon
-template memory on the chip.
-Misaligned 32-bit accesses cause CPU exceptions on MIPS and should be
-avoided.
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/include/net/mac80211.h
-+++ b/include/net/mac80211.h
-@@ -4145,7 +4145,7 @@ void ieee80211_sta_uapsd_trigger(struct
-  * The TX headroom reserved by mac80211 for its own tx_status functions.
-  * This is enough for the radiotap header.
-  */
--#define IEEE80211_TX_STATUS_HEADROOM	14
-+#define IEEE80211_TX_STATUS_HEADROOM	ALIGN(14, 4)
- 
- /**
-  * ieee80211_sta_set_buffered - inform mac80211 about driver-buffered frames

+ 0 - 21
package/kernel/mac80211/patches/319-v4.17-0001-mac80211-drop-frames-with-unexpected-DS-bits-from-fa.patch

@@ -1,21 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Fri, 23 Feb 2018 09:59:35 +0100
-Subject: [PATCH] mac80211: drop frames with unexpected DS bits from
- fast-rx to slow path
-
-Fixes rx for 4-addr packets in AP mode
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3928,7 +3928,7 @@ static bool ieee80211_invoke_fast_rx(str
- 	if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_FROMDS |
- 					      IEEE80211_FCTL_TODS)) !=
- 	    fast_rx->expected_ds_bits)
--		goto drop;
-+		return false;
- 
- 	/* assign the key to drop unencrypted frames (later)
- 	 * and strip the IV/MIC if necessary

+ 0 - 25
package/kernel/mac80211/patches/319-v4.17-0002-mac80211-support-AP-4-addr-mode-fast-rx.patch

@@ -1,25 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Fri, 23 Feb 2018 10:00:22 +0100
-Subject: [PATCH] mac80211: support AP 4-addr mode fast-rx
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3774,6 +3774,15 @@ void ieee80211_check_fast_rx(struct sta_
- 			!(sdata->flags & IEEE80211_SDATA_DONT_BRIDGE_PACKETS) &&
- 			(sdata->vif.type != NL80211_IFTYPE_AP_VLAN ||
- 			 !sdata->u.vlan.sta);
-+
-+		if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
-+		    sdata->u.vlan.sta) {
-+			fastrx.expected_ds_bits |=
-+				cpu_to_le16(IEEE80211_FCTL_FROMDS);
-+			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
-+			fastrx.internal_forward = 0;
-+		}
-+
- 		break;
- 	default:
- 		goto clear;

+ 0 - 53
package/kernel/mac80211/patches/319-v4.17-0003-mac80211-support-fast-rx-with-incompatible-PS-capabi.patch

@@ -1,53 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Fri, 23 Feb 2018 10:01:53 +0100
-Subject: [PATCH] mac80211: support fast-rx with incompatible PS
- capabilities when PS is disabled
-
-When powersave is disabled for the interface, we can do fast-rx anyway.
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/net/mac80211/cfg.c
-+++ b/net/mac80211/cfg.c
-@@ -2658,6 +2658,7 @@ static int ieee80211_set_power_mgmt(stru
- 
- 	ieee80211_recalc_ps(local);
- 	ieee80211_recalc_ps_vif(sdata);
-+	ieee80211_check_fast_rx_iface(sdata);
- 
- 	return 0;
- }
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3741,12 +3741,7 @@ void ieee80211_check_fast_rx(struct sta_
- 		/* 4-addr is harder to deal with, later maybe */
- 		if (sdata->u.mgd.use_4addr)
- 			goto clear;
--		/* software powersave is a huge mess, avoid all of it */
--		if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
--			goto clear;
--		if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
--		    !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
--			goto clear;
-+
- 		if (sta->sta.tdls) {
- 			fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
- 			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
-@@ -3758,6 +3753,16 @@ void ieee80211_check_fast_rx(struct sta_
- 			fastrx.expected_ds_bits =
- 				cpu_to_le16(IEEE80211_FCTL_FROMDS);
- 		}
-+
-+		if (!sdata->u.mgd.powersave)
-+		    break;
-+
-+		/* software powersave is a huge mess, avoid all of it */
-+		if (ieee80211_hw_check(&local->hw, PS_NULLFUNC_STACK))
-+			goto clear;
-+		if (ieee80211_hw_check(&local->hw, SUPPORTS_PS) &&
-+		    !ieee80211_hw_check(&local->hw, SUPPORTS_DYNAMIC_PS))
-+			goto clear;
- 		break;
- 	case NL80211_IFTYPE_AP_VLAN:
- 	case NL80211_IFTYPE_AP:

+ 0 - 34
package/kernel/mac80211/patches/319-v4.17-0004-mac80211-support-station-4-addr-mode-fast-rx.patch

@@ -1,34 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Fri, 23 Feb 2018 10:05:08 +0100
-Subject: [PATCH] mac80211: support station 4-addr mode fast-rx
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -3738,10 +3738,6 @@ void ieee80211_check_fast_rx(struct sta_
- 
- 	switch (sdata->vif.type) {
- 	case NL80211_IFTYPE_STATION:
--		/* 4-addr is harder to deal with, later maybe */
--		if (sdata->u.mgd.use_4addr)
--			goto clear;
--
- 		if (sta->sta.tdls) {
- 			fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1);
- 			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2);
-@@ -3754,6 +3750,13 @@ void ieee80211_check_fast_rx(struct sta_
- 				cpu_to_le16(IEEE80211_FCTL_FROMDS);
- 		}
- 
-+		if (sdata->u.mgd.use_4addr && !sta->sta.tdls) {
-+			fastrx.expected_ds_bits |=
-+				cpu_to_le16(IEEE80211_FCTL_TODS);
-+			fastrx.da_offs = offsetof(struct ieee80211_hdr, addr3);
-+			fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr4);
-+		}
-+
- 		if (!sdata->u.mgd.powersave)
- 		    break;
- 

+ 0 - 256
package/kernel/mac80211/patches/320-v4.17-mac80211-support-A-MSDU-in-fast-rx.patch

@@ -1,256 +0,0 @@
-From: Felix Fietkau <[email protected]>
-Date: Mon, 26 Feb 2018 22:09:29 +0100
-Subject: [PATCH] mac80211: support A-MSDU in fast-rx
-
-Only works if the IV was stripped from packets. Create a smaller
-variant of ieee80211_rx_h_amsdu, which bypasses checks already done
-within the fast-rx context.
-
-Signed-off-by: Felix Fietkau <[email protected]>
----
-
---- a/net/mac80211/rx.c
-+++ b/net/mac80211/rx.c
-@@ -2358,39 +2358,17 @@ ieee80211_deliver_skb(struct ieee80211_r
- }
- 
- static ieee80211_rx_result debug_noinline
--ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
-+__ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
- {
- 	struct net_device *dev = rx->sdata->dev;
- 	struct sk_buff *skb = rx->skb;
- 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
- 	__le16 fc = hdr->frame_control;
- 	struct sk_buff_head frame_list;
--	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(rx->skb);
- 	struct ethhdr ethhdr;
- 	const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
- 
--	if (unlikely(!ieee80211_is_data(fc)))
--		return RX_CONTINUE;
--
--	if (unlikely(!ieee80211_is_data_present(fc)))
--		return RX_DROP_MONITOR;
--
--	if (!(status->rx_flags & IEEE80211_RX_AMSDU))
--		return RX_CONTINUE;
--
- 	if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
--		switch (rx->sdata->vif.type) {
--		case NL80211_IFTYPE_AP_VLAN:
--			if (!rx->sdata->u.vlan.sta)
--				return RX_DROP_UNUSABLE;
--			break;
--		case NL80211_IFTYPE_STATION:
--			if (!rx->sdata->u.mgd.use_4addr)
--				return RX_DROP_UNUSABLE;
--			break;
--		default:
--			return RX_DROP_UNUSABLE;
--		}
- 		check_da = NULL;
- 		check_sa = NULL;
- 	} else switch (rx->sdata->vif.type) {
-@@ -2410,15 +2388,13 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
- 			break;
- 	}
- 
--	if (is_multicast_ether_addr(hdr->addr1))
--		return RX_DROP_UNUSABLE;
--
- 	skb->dev = dev;
- 	__skb_queue_head_init(&frame_list);
- 
- 	if (ieee80211_data_to_8023_exthdr(skb, &ethhdr,
- 					  rx->sdata->vif.addr,
--					  rx->sdata->vif.type))
-+					  rx->sdata->vif.type,
-+					  data_offset))
- 		return RX_DROP_UNUSABLE;
- 
- 	ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
-@@ -2440,6 +2416,44 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
- 	return RX_QUEUED;
- }
- 
-+static ieee80211_rx_result debug_noinline
-+ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
-+{
-+	struct sk_buff *skb = rx->skb;
-+	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
-+	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-+	__le16 fc = hdr->frame_control;
-+
-+	if (!(status->rx_flags & IEEE80211_RX_AMSDU))
-+		return RX_CONTINUE;
-+
-+	if (unlikely(!ieee80211_is_data(fc)))
-+		return RX_CONTINUE;
-+
-+	if (unlikely(!ieee80211_is_data_present(fc)))
-+		return RX_DROP_MONITOR;
-+
-+	if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
-+		switch (rx->sdata->vif.type) {
-+		case NL80211_IFTYPE_AP_VLAN:
-+			if (!rx->sdata->u.vlan.sta)
-+				return RX_DROP_UNUSABLE;
-+			break;
-+		case NL80211_IFTYPE_STATION:
-+			if (!rx->sdata->u.mgd.use_4addr)
-+				return RX_DROP_UNUSABLE;
-+			break;
-+		default:
-+			return RX_DROP_UNUSABLE;
-+		}
-+	}
-+
-+	if (is_multicast_ether_addr(hdr->addr1))
-+		return RX_DROP_UNUSABLE;
-+
-+	return __ieee80211_rx_h_amsdu(rx, 0);
-+}
-+
- #ifdef CPTCFG_MAC80211_MESH
- static ieee80211_rx_result
- ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
-@@ -3889,7 +3903,8 @@ static bool ieee80211_invoke_fast_rx(str
- 	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
- 	struct sta_info *sta = rx->sta;
- 	int orig_len = skb->len;
--	int snap_offs = ieee80211_hdrlen(hdr->frame_control);
-+	int hdrlen = ieee80211_hdrlen(hdr->frame_control);
-+	int snap_offs = hdrlen;
- 	struct {
- 		u8 snap[sizeof(rfc1042_header)];
- 		__be16 proto;
-@@ -3920,10 +3935,6 @@ static bool ieee80211_invoke_fast_rx(str
- 	    (status->flag & FAST_RX_CRYPT_FLAGS) != FAST_RX_CRYPT_FLAGS)
- 		return false;
- 
--	/* we don't deal with A-MSDU deaggregation here */
--	if (status->rx_flags & IEEE80211_RX_AMSDU)
--		return false;
--
- 	if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
- 		return false;
- 
-@@ -3955,21 +3966,24 @@ static bool ieee80211_invoke_fast_rx(str
- 		snap_offs += IEEE80211_CCMP_HDR_LEN;
- 	}
- 
--	if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
--		goto drop;
--	payload = (void *)(skb->data + snap_offs);
-+	if (!(status->rx_flags & IEEE80211_RX_AMSDU)) {
-+		if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
-+			goto drop;
- 
--	if (!ether_addr_equal(payload->snap, fast_rx->rfc1042_hdr))
--		return false;
-+		payload = (void *)(skb->data + snap_offs);
- 
--	/* Don't handle these here since they require special code.
--	 * Accept AARP and IPX even though they should come with a
--	 * bridge-tunnel header - but if we get them this way then
--	 * there's little point in discarding them.
--	 */
--	if (unlikely(payload->proto == cpu_to_be16(ETH_P_TDLS) ||
--		     payload->proto == fast_rx->control_port_protocol))
--		return false;
-+		if (!ether_addr_equal(payload->snap, fast_rx->rfc1042_hdr))
-+			return false;
-+
-+		/* Don't handle these here since they require special code.
-+		 * Accept AARP and IPX even though they should come with a
-+		 * bridge-tunnel header - but if we get them this way then
-+		 * there's little point in discarding them.
-+		 */
-+		if (unlikely(payload->proto == cpu_to_be16(ETH_P_TDLS) ||
-+			     payload->proto == fast_rx->control_port_protocol))
-+			return false;
-+	}
- 
- 	/* after this point, don't punt to the slowpath! */
- 
-@@ -3983,12 +3997,6 @@ static bool ieee80211_invoke_fast_rx(str
- 	}
- 
- 	/* statistics part of ieee80211_rx_h_sta_process() */
--	stats->last_rx = jiffies;
--	stats->last_rate = sta_stats_encode_rate(status);
--
--	stats->fragments++;
--	stats->packets++;
--
- 	if (!(status->flag & RX_FLAG_NO_SIGNAL_VAL)) {
- 		stats->last_signal = status->signal;
- 		if (!fast_rx->uses_rss)
-@@ -4017,6 +4025,20 @@ static bool ieee80211_invoke_fast_rx(str
- 	if (rx->key && !ieee80211_has_protected(hdr->frame_control))
- 		goto drop;
- 
-+	if (status->rx_flags & IEEE80211_RX_AMSDU) {
-+		if (__ieee80211_rx_h_amsdu(rx, snap_offs - hdrlen) !=
-+		    RX_QUEUED)
-+			goto drop;
-+
-+		return true;
-+	}
-+
-+	stats->last_rx = jiffies;
-+	stats->last_rate = sta_stats_encode_rate(status);
-+
-+	stats->fragments++;
-+	stats->packets++;
-+
- 	/* do the header conversion - first grab the addresses */
- 	ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
- 	ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
---- a/include/net/cfg80211.h
-+++ b/include/net/cfg80211.h
-@@ -4331,10 +4331,12 @@ unsigned int ieee80211_get_mesh_hdrlen(s
-  *	of it being pushed into the SKB
-  * @addr: the device MAC address
-  * @iftype: the virtual interface type
-+ * @data_offset: offset of payload after the 802.11 header
-  * Return: 0 on success. Non-zero on error.
-  */
- int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
--				  const u8 *addr, enum nl80211_iftype iftype);
-+				  const u8 *addr, enum nl80211_iftype iftype,
-+				  u8 data_offset);
- 
- /**
-  * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
-@@ -4346,7 +4348,7 @@ int ieee80211_data_to_8023_exthdr(struct
- static inline int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
- 					 enum nl80211_iftype iftype)
- {
--	return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype);
-+	return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype, 0);
- }
- 
- /**
---- a/net/wireless/util.c
-+++ b/net/wireless/util.c
-@@ -419,7 +419,8 @@ unsigned int ieee80211_get_mesh_hdrlen(s
- EXPORT_SYMBOL(ieee80211_get_mesh_hdrlen);
- 
- int ieee80211_data_to_8023_exthdr(struct sk_buff *skb, struct ethhdr *ehdr,
--				  const u8 *addr, enum nl80211_iftype iftype)
-+				  const u8 *addr, enum nl80211_iftype iftype,
-+				  u8 data_offset)
- {
- 	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
- 	struct {
-@@ -433,7 +434,7 @@ int ieee80211_data_to_8023_exthdr(struct
- 	if (unlikely(!ieee80211_is_data_present(hdr->frame_control)))
- 		return -1;
- 
--	hdrlen = ieee80211_hdrlen(hdr->frame_control);
-+	hdrlen = ieee80211_hdrlen(hdr->frame_control) + data_offset;
- 	if (skb->len < hdrlen + 8)
- 		return -1;
- 

+ 0 - 68
package/kernel/mac80211/patches/321-v4.16-0001-brcmfmac-assure-bcdc-dcmd-api-does-not-return-value-.patch

@@ -1,68 +0,0 @@
-From 5242a5444e0b6464d7455beb55d936dd192b5e9d Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Mon, 22 Jan 2018 21:46:39 +0100
-Subject: [PATCH] brcmfmac: assure bcdc dcmd api does not return value > 0
-
-The protocol layer api defines callbacks for dongle commands.
-Although not really well documented these should only return an
-error code in case of an error, or 0 upon success. In the bcdc
-protocol it can return value above 0 and we carry a fix in the
-caller of the protocol layer api. This patch makes it adhere to
-the intent of the api as described above.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 6 +++++-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c | 8 +++-----
- 2 files changed, 8 insertions(+), 6 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-@@ -211,6 +211,8 @@ retry:
- 		memcpy(buf, info, len);
- 	}
- 
-+	ret = 0;
-+
- 	/* Check the ERROR flag */
- 	if (flags & BCDC_DCMD_ERROR)
- 		ret = le32_to_cpu(msg->status);
-@@ -225,7 +227,7 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
- {
- 	struct brcmf_bcdc *bcdc = (struct brcmf_bcdc *)drvr->proto->pd;
- 	struct brcmf_proto_bcdc_dcmd *msg = &bcdc->msg;
--	int ret = 0;
-+	int ret;
- 	u32 flags, id;
- 
- 	brcmf_dbg(BCDC, "Enter, cmd %d len %d\n", cmd, len);
-@@ -249,6 +251,8 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
- 		goto done;
- 	}
- 
-+	ret = 0;
-+
- 	/* Check the ERROR flag */
- 	if (flags & BCDC_DCMD_ERROR)
- 		ret = le32_to_cpu(msg->status);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-@@ -121,11 +121,9 @@ brcmf_fil_cmd_data(struct brcmf_if *ifp,
- 	else
- 		err = brcmf_proto_query_dcmd(drvr, ifp->ifidx, cmd, data, len);
- 
--	if (err >= 0)
--		return 0;
--
--	brcmf_dbg(FIL, "Failed: %s (%d)\n",
--		  brcmf_fil_get_errstr((u32)(-err)), err);
-+	if (err)
-+		brcmf_dbg(FIL, "Failed: %s (%d)\n",
-+			  brcmf_fil_get_errstr((u32)(-err)), err);
- 
- 	return err;
- }

+ 0 - 186
package/kernel/mac80211/patches/321-v4.16-0002-brcmfmac-separate-firmware-errors-from-i-o-errors.patch

@@ -1,186 +0,0 @@
-From b69c1df47281ad47bd2037a42b98f5c7115b7fd5 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Mon, 22 Jan 2018 21:46:40 +0100
-Subject: [PATCH] brcmfmac: separate firmware errors from i/o errors
-
-When using the firmware api it can fail simply because firmware does
-not like the request or it fails due to issues in the host interface.
-Currently, there is only a single error code which is confusing. So
-adding a parameter to pass the firmware error separately and in case
-of a firmware error always return -EBADE to user-space.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c  | 11 ++++++-----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c  | 16 +++++++++++-----
- .../net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c    | 10 ++++++----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h | 14 ++++++++------
- 4 files changed, 31 insertions(+), 20 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-@@ -165,7 +165,7 @@ static int brcmf_proto_bcdc_cmplt(struct
- 
- static int
- brcmf_proto_bcdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,
--			    void *buf, uint len)
-+			    void *buf, uint len, int *fwerr)
- {
- 	struct brcmf_bcdc *bcdc = (struct brcmf_bcdc *)drvr->proto->pd;
- 	struct brcmf_proto_bcdc_dcmd *msg = &bcdc->msg;
-@@ -175,6 +175,7 @@ brcmf_proto_bcdc_query_dcmd(struct brcmf
- 
- 	brcmf_dbg(BCDC, "Enter, cmd %d len %d\n", cmd, len);
- 
-+	*fwerr = 0;
- 	ret = brcmf_proto_bcdc_msg(drvr, ifidx, cmd, buf, len, false);
- 	if (ret < 0) {
- 		brcmf_err("brcmf_proto_bcdc_msg failed w/status %d\n",
-@@ -215,15 +216,14 @@ retry:
- 
- 	/* Check the ERROR flag */
- 	if (flags & BCDC_DCMD_ERROR)
--		ret = le32_to_cpu(msg->status);
--
-+		*fwerr = le32_to_cpu(msg->status);
- done:
- 	return ret;
- }
- 
- static int
- brcmf_proto_bcdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,
--			  void *buf, uint len)
-+			  void *buf, uint len, int *fwerr)
- {
- 	struct brcmf_bcdc *bcdc = (struct brcmf_bcdc *)drvr->proto->pd;
- 	struct brcmf_proto_bcdc_dcmd *msg = &bcdc->msg;
-@@ -232,6 +232,7 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
- 
- 	brcmf_dbg(BCDC, "Enter, cmd %d len %d\n", cmd, len);
- 
-+	*fwerr = 0;
- 	ret = brcmf_proto_bcdc_msg(drvr, ifidx, cmd, buf, len, true);
- 	if (ret < 0)
- 		goto done;
-@@ -255,7 +256,7 @@ brcmf_proto_bcdc_set_dcmd(struct brcmf_p
- 
- 	/* Check the ERROR flag */
- 	if (flags & BCDC_DCMD_ERROR)
--		ret = le32_to_cpu(msg->status);
-+		*fwerr = le32_to_cpu(msg->status);
- 
- done:
- 	return ret;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-@@ -107,7 +107,7 @@ static s32
- brcmf_fil_cmd_data(struct brcmf_if *ifp, u32 cmd, void *data, u32 len, bool set)
- {
- 	struct brcmf_pub *drvr = ifp->drvr;
--	s32 err;
-+	s32 err, fwerr;
- 
- 	if (drvr->bus_if->state != BRCMF_BUS_UP) {
- 		brcmf_err("bus is down. we have nothing to do.\n");
-@@ -117,14 +117,20 @@ brcmf_fil_cmd_data(struct brcmf_if *ifp,
- 	if (data != NULL)
- 		len = min_t(uint, len, BRCMF_DCMD_MAXLEN);
- 	if (set)
--		err = brcmf_proto_set_dcmd(drvr, ifp->ifidx, cmd, data, len);
-+		err = brcmf_proto_set_dcmd(drvr, ifp->ifidx, cmd,
-+					   data, len, &fwerr);
- 	else
--		err = brcmf_proto_query_dcmd(drvr, ifp->ifidx, cmd, data, len);
-+		err = brcmf_proto_query_dcmd(drvr, ifp->ifidx, cmd,
-+					     data, len, &fwerr);
- 
--	if (err)
-+	if (err) {
- 		brcmf_dbg(FIL, "Failed: %s (%d)\n",
- 			  brcmf_fil_get_errstr((u32)(-err)), err);
--
-+	} else if (fwerr < 0) {
-+		brcmf_dbg(FIL, "Firmware error: %s (%d)\n",
-+			  brcmf_fil_get_errstr((u32)(-fwerr)), fwerr);
-+		err = -EBADE;
-+	}
- 	return err;
- }
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-@@ -477,7 +477,7 @@ static void brcmf_msgbuf_ioctl_resp_wake
- 
- 
- static int brcmf_msgbuf_query_dcmd(struct brcmf_pub *drvr, int ifidx,
--				   uint cmd, void *buf, uint len)
-+				   uint cmd, void *buf, uint len, int *fwerr)
- {
- 	struct brcmf_msgbuf *msgbuf = (struct brcmf_msgbuf *)drvr->proto->pd;
- 	struct sk_buff *skb = NULL;
-@@ -485,6 +485,7 @@ static int brcmf_msgbuf_query_dcmd(struc
- 	int err;
- 
- 	brcmf_dbg(MSGBUF, "ifidx=%d, cmd=%d, len=%d\n", ifidx, cmd, len);
-+	*fwerr = 0;
- 	msgbuf->ctl_completed = false;
- 	err = brcmf_msgbuf_tx_ioctl(drvr, ifidx, cmd, buf, len);
- 	if (err)
-@@ -508,14 +509,15 @@ static int brcmf_msgbuf_query_dcmd(struc
- 	}
- 	brcmu_pkt_buf_free_skb(skb);
- 
--	return msgbuf->ioctl_resp_status;
-+	*fwerr = msgbuf->ioctl_resp_status;
-+	return 0;
- }
- 
- 
- static int brcmf_msgbuf_set_dcmd(struct brcmf_pub *drvr, int ifidx,
--				 uint cmd, void *buf, uint len)
-+				 uint cmd, void *buf, uint len, int *fwerr)
- {
--	return brcmf_msgbuf_query_dcmd(drvr, ifidx, cmd, buf, len);
-+	return brcmf_msgbuf_query_dcmd(drvr, ifidx, cmd, buf, len, fwerr);
- }
- 
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
-@@ -30,9 +30,9 @@ struct brcmf_proto {
- 	int (*hdrpull)(struct brcmf_pub *drvr, bool do_fws,
- 		       struct sk_buff *skb, struct brcmf_if **ifp);
- 	int (*query_dcmd)(struct brcmf_pub *drvr, int ifidx, uint cmd,
--			  void *buf, uint len);
-+			  void *buf, uint len, int *fwerr);
- 	int (*set_dcmd)(struct brcmf_pub *drvr, int ifidx, uint cmd, void *buf,
--			uint len);
-+			uint len, int *fwerr);
- 	int (*tx_queue_data)(struct brcmf_pub *drvr, int ifidx,
- 			     struct sk_buff *skb);
- 	int (*txdata)(struct brcmf_pub *drvr, int ifidx, u8 offset,
-@@ -71,14 +71,16 @@ static inline int brcmf_proto_hdrpull(st
- 	return drvr->proto->hdrpull(drvr, do_fws, skb, ifp);
- }
- static inline int brcmf_proto_query_dcmd(struct brcmf_pub *drvr, int ifidx,
--					 uint cmd, void *buf, uint len)
-+					 uint cmd, void *buf, uint len,
-+					 int *fwerr)
- {
--	return drvr->proto->query_dcmd(drvr, ifidx, cmd, buf, len);
-+	return drvr->proto->query_dcmd(drvr, ifidx, cmd, buf, len,fwerr);
- }
- static inline int brcmf_proto_set_dcmd(struct brcmf_pub *drvr, int ifidx,
--				       uint cmd, void *buf, uint len)
-+				       uint cmd, void *buf, uint len,
-+				       int *fwerr)
- {
--	return drvr->proto->set_dcmd(drvr, ifidx, cmd, buf, len);
-+	return drvr->proto->set_dcmd(drvr, ifidx, cmd, buf, len, fwerr);
- }
- 
- static inline int brcmf_proto_tx_queue_data(struct brcmf_pub *drvr, int ifidx,

+ 0 - 92
package/kernel/mac80211/patches/322-v4.16-0001-brcmfmac-add-possibility-to-obtain-firmware-error.patch

@@ -1,92 +0,0 @@
-From 933897342d0714ae1c10729cbaeecea0c6178db5 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 28 Feb 2018 21:15:19 +0100
-Subject: [PATCH] brcmfmac: add possibility to obtain firmware error
-
-The feature module needs to evaluate the actual firmware error return
-upon a control command. This adds a flag to struct brcmf_if that the
-caller can set. This flag is checked to determine the error code that
-needs to be returned.
-
-Fixes: b69c1df47281 ("brcmfmac: separate firmware errors from i/o errors")
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h    |  2 ++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c | 10 ++++++++++
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c    |  3 +++
- 3 files changed, 15 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-@@ -181,6 +181,7 @@ enum brcmf_netif_stop_reason {
-  * @netif_stop_lock: spinlock for update netif_stop from multiple sources.
-  * @pend_8021x_cnt: tracks outstanding number of 802.1x frames.
-  * @pend_8021x_wait: used for signalling change in count.
-+ * @fwil_fwerr: flag indicating fwil layer should return firmware error codes.
-  */
- struct brcmf_if {
- 	struct brcmf_pub *drvr;
-@@ -198,6 +199,7 @@ struct brcmf_if {
- 	wait_queue_head_t pend_8021x_wait;
- 	struct in6_addr ipv6_addr_tbl[NDOL_MAX_ENTRIES];
- 	u8 ipv6addr_idx;
-+	bool fwil_fwerr;
- };
- 
- int brcmf_netdev_wait_pend8021x(struct brcmf_if *ifp);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-@@ -104,6 +104,9 @@ static void brcmf_feat_iovar_int_get(str
- 	u32 data;
- 	int err;
- 
-+	/* we need to know firmware error */
-+	ifp->fwil_fwerr = true;
-+
- 	err = brcmf_fil_iovar_int_get(ifp, name, &data);
- 	if (err == 0) {
- 		brcmf_dbg(INFO, "enabling feature: %s\n", brcmf_feat_names[id]);
-@@ -112,6 +115,8 @@ static void brcmf_feat_iovar_int_get(str
- 		brcmf_dbg(TRACE, "%s feature check failed: %d\n",
- 			  brcmf_feat_names[id], err);
- 	}
-+
-+	ifp->fwil_fwerr = false;
- }
- 
- static void brcmf_feat_iovar_data_set(struct brcmf_if *ifp,
-@@ -120,6 +125,9 @@ static void brcmf_feat_iovar_data_set(st
- {
- 	int err;
- 
-+	/* we need to know firmware error */
-+	ifp->fwil_fwerr = true;
-+
- 	err = brcmf_fil_iovar_data_set(ifp, name, data, len);
- 	if (err != -BRCMF_FW_UNSUPPORTED) {
- 		brcmf_dbg(INFO, "enabling feature: %s\n", brcmf_feat_names[id]);
-@@ -128,6 +136,8 @@ static void brcmf_feat_iovar_data_set(st
- 		brcmf_dbg(TRACE, "%s feature check failed: %d\n",
- 			  brcmf_feat_names[id], err);
- 	}
-+
-+	ifp->fwil_fwerr = false;
- }
- 
- #define MAX_CAPS_BUFFER_SIZE	512
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-@@ -131,6 +131,9 @@ brcmf_fil_cmd_data(struct brcmf_if *ifp,
- 			  brcmf_fil_get_errstr((u32)(-fwerr)), fwerr);
- 		err = -EBADE;
- 	}
-+	if (ifp->fwil_fwerr)
-+		return fwerr;
-+
- 	return err;
- }
- 

+ 0 - 64
package/kernel/mac80211/patches/322-v4.16-0002-brcmfmac-fix-P2P_DEVICE-ethernet-address-generation.patch

@@ -1,64 +0,0 @@
-From 455f3e76cfc0d893585a5f358b9ddbe9c1e1e53b Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Wed, 28 Feb 2018 21:15:20 +0100
-Subject: [PATCH] brcmfmac: fix P2P_DEVICE ethernet address generation
-
-The firmware has a requirement that the P2P_DEVICE address should
-be different from the address of the primary interface. When not
-specified by user-space, the driver generates the MAC address for
-the P2P_DEVICE interface using the MAC address of the primary
-interface and setting the locally administered bit. However, the MAC
-address of the primary interface may already have that bit set causing
-the creation of the P2P_DEVICE interface to fail with -EBUSY. Fix this
-by using a random address instead to determine the P2P_DEVICE address.
-
-Cc: [email protected] # 3.10.y
-Reported-by: Hans de Goede <[email protected]>
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 24 ++++++++++------------
- 1 file changed, 11 insertions(+), 13 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-@@ -462,25 +462,23 @@ static int brcmf_p2p_set_firmware(struct
-  * @dev_addr: optional device address.
-  *
-  * P2P needs mac addresses for P2P device and interface. If no device
-- * address it specified, these are derived from the primary net device, ie.
-- * the permanent ethernet address of the device.
-+ * address it specified, these are derived from a random ethernet
-+ * address.
-  */
- static void brcmf_p2p_generate_bss_mac(struct brcmf_p2p_info *p2p, u8 *dev_addr)
- {
--	struct brcmf_if *pri_ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
--	bool local_admin = false;
-+	bool random_addr = false;
- 
--	if (!dev_addr || is_zero_ether_addr(dev_addr)) {
--		dev_addr = pri_ifp->mac_addr;
--		local_admin = true;
--	}
-+	if (!dev_addr || is_zero_ether_addr(dev_addr))
-+		random_addr = true;
- 
--	/* Generate the P2P Device Address.  This consists of the device's
--	 * primary MAC address with the locally administered bit set.
-+	/* Generate the P2P Device Address obtaining a random ethernet
-+	 * address with the locally administered bit set.
- 	 */
--	memcpy(p2p->dev_addr, dev_addr, ETH_ALEN);
--	if (local_admin)
--		p2p->dev_addr[0] |= 0x02;
-+	if (random_addr)
-+		eth_random_addr(p2p->dev_addr);
-+	else
-+		memcpy(p2p->dev_addr, dev_addr, ETH_ALEN);
- 
- 	/* Generate the P2P Interface Address.  If the discovery and connection
- 	 * BSSCFGs need to simultaneously co-exist, then this address must be

+ 0 - 157
package/kernel/mac80211/patches/323-v4.16-0001-brcmfmac-drop-Inter-Access-Point-Protocol-packets-by.patch

@@ -1,157 +0,0 @@
-From 1259055170287a350cad453e9eac139c81609860 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
-Date: Thu, 15 Mar 2018 08:29:09 +0100
-Subject: [PATCH] brcmfmac: drop Inter-Access Point Protocol packets by default
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Testing brcmfmac with more recent firmwares resulted in AP interfaces
-not working in some specific setups. Debugging resulted in discovering
-support for IAPP in Broadcom's firmwares.
-
-Older firmwares were only generating 802.11f frames. Newer ones like:
-1) 10.10 (TOB) (r663589)
-2) 10.10.122.20 (r683106)
-for 4366b1 and 4366c0 respectively seem to also /respect/ 802.11f frames
-in the Tx path by performing a STA disassociation.
-
-This obsoleted standard and its implementation is something that:
-1) Most people don't need / want to use
-2) Can allow local DoS attacks
-3) Breaks AP interfaces in some specific bridge setups
-
-To solve issues it can cause this commit modifies brcmfmac to drop IAPP
-packets. If affects:
-1) Rx path: driver won't be sending these unwanted packets up.
-2) Tx path: driver will reject packets that would trigger STA
-   disassociation perfromed by a firmware (possible local DoS attack).
-
-It appears there are some Broadcom's clients/users who care about this
-feature despite the drawbacks. They can switch it on using a new module
-param.
-
-This change results in only two more comparisons (check for module param
-and check for Ethernet packet length) for 99.9% of packets. Its overhead
-should be very minimal.
-
-Signed-off-by: Rafał Miłecki <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  |  5 ++
- .../wireless/broadcom/brcm80211/brcmfmac/common.h  |  1 +
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 57 ++++++++++++++++++++++
- 3 files changed, 63 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -75,6 +75,10 @@ static int brcmf_roamoff;
- module_param_named(roamoff, brcmf_roamoff, int, S_IRUSR);
- MODULE_PARM_DESC(roamoff, "Do not use internal roaming engine");
- 
-+static int brcmf_iapp_enable;
-+module_param_named(iapp, brcmf_iapp_enable, int, 0);
-+MODULE_PARM_DESC(iapp, "Enable partial support for the obsoleted Inter-Access Point Protocol");
-+
- #ifdef DEBUG
- /* always succeed brcmf_bus_started() */
- static int brcmf_ignore_probe_fail;
-@@ -441,6 +445,7 @@ struct brcmf_mp_device *brcmf_get_module
- 	settings->feature_disable = brcmf_feature_disable;
- 	settings->fcmode = brcmf_fcmode;
- 	settings->roamoff = !!brcmf_roamoff;
-+	settings->iapp = !!brcmf_iapp_enable;
- #ifdef DEBUG
- 	settings->ignore_probe_fail = !!brcmf_ignore_probe_fail;
- #endif
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.h
-@@ -58,6 +58,7 @@ struct brcmf_mp_device {
- 	unsigned int	feature_disable;
- 	int		fcmode;
- 	bool		roamoff;
-+	bool		iapp;
- 	bool		ignore_probe_fail;
- 	struct brcmfmac_pd_cc *country_codes;
- 	union {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -230,6 +230,37 @@ static void brcmf_netdev_set_multicast_l
- 	schedule_work(&ifp->multicast_work);
- }
- 
-+/**
-+ * brcmf_skb_is_iapp - checks if skb is an IAPP packet
-+ *
-+ * @skb: skb to check
-+ */
-+static bool brcmf_skb_is_iapp(struct sk_buff *skb)
-+{
-+	static const u8 iapp_l2_update_packet[6] __aligned(2) = {
-+		0x00, 0x01, 0xaf, 0x81, 0x01, 0x00,
-+	};
-+	unsigned char *eth_data;
-+#if !defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
-+	const u16 *a, *b;
-+#endif
-+
-+	if (skb->len - skb->mac_len != 6 ||
-+	    !is_multicast_ether_addr(eth_hdr(skb)->h_dest))
-+		return false;
-+
-+	eth_data = skb_mac_header(skb) + ETH_HLEN;
-+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
-+	return !(((*(const u32 *)eth_data) ^ (*(const u32 *)iapp_l2_update_packet)) |
-+		 ((*(const u16 *)(eth_data + 4)) ^ (*(const u16 *)(iapp_l2_update_packet + 4))));
-+#else
-+	a = (const u16 *)eth_data;
-+	b = (const u16 *)iapp_l2_update_packet;
-+
-+	return !((a[0] ^ b[0]) | (a[1] ^ b[1]) | (a[2] ^ b[2]));
-+#endif
-+}
-+
- static netdev_tx_t brcmf_netdev_start_xmit(struct sk_buff *skb,
- 					   struct net_device *ndev)
- {
-@@ -250,6 +281,23 @@ static netdev_tx_t brcmf_netdev_start_xm
- 		goto done;
- 	}
- 
-+	/* Some recent Broadcom's firmwares disassociate STA when they receive
-+	 * an 802.11f ADD frame. This behavior can lead to a local DoS security
-+	 * issue. Attacker may trigger disassociation of any STA by sending a
-+	 * proper Ethernet frame to the wireless interface.
-+	 *
-+	 * Moreover this feature may break AP interfaces in some specific
-+	 * setups. This applies e.g. to the bridge with hairpin mode enabled and
-+	 * IFLA_BRPORT_MCAST_TO_UCAST set. IAPP packet generated by a firmware
-+	 * will get passed back to the wireless interface and cause immediate
-+	 * disassociation of a just-connected STA.
-+	 */
-+	if (!drvr->settings->iapp && brcmf_skb_is_iapp(skb)) {
-+		dev_kfree_skb(skb);
-+		ret = -EINVAL;
-+		goto done;
-+	}
-+
- 	/* Make sure there's enough writeable headroom */
- 	if (skb_headroom(skb) < drvr->hdrlen || skb_header_cloned(skb)) {
- 		head_delta = max_t(int, drvr->hdrlen - skb_headroom(skb), 0);
-@@ -325,6 +373,15 @@ void brcmf_txflowblock_if(struct brcmf_i
- 
- void brcmf_netif_rx(struct brcmf_if *ifp, struct sk_buff *skb)
- {
-+	/* Most of Broadcom's firmwares send 802.11f ADD frame every time a new
-+	 * STA connects to the AP interface. This is an obsoleted standard most
-+	 * users don't use, so don't pass these frames up unless requested.
-+	 */
-+	if (!ifp->drvr->settings->iapp && brcmf_skb_is_iapp(skb)) {
-+		brcmu_pkt_buf_free_skb(skb);
-+		return;
-+	}
-+
- 	if (skb->pkt_type == PACKET_MULTICAST)
- 		ifp->ndev->stats.multicast++;
- 

+ 0 - 29
package/kernel/mac80211/patches/324-v4.16-0001-brcmfmac-Fix-check-for-ISO3166-code.patch

@@ -1,29 +0,0 @@
-From 9b9322db5c5a1917a66c71fe47c3848a9a31227e Mon Sep 17 00:00:00 2001
-From: Stefan Wahren <[email protected]>
-Date: Wed, 14 Mar 2018 20:02:59 +0100
-Subject: [PATCH] brcmfmac: Fix check for ISO3166 code
-
-The commit "regulatory: add NUL to request alpha2" increases the length of
-alpha2 to 3. This causes a regression on brcmfmac, because
-brcmf_cfg80211_reg_notifier() expect valid ISO3166 codes in the complete
-array. So fix this accordingly.
-
-Fixes: 657308f73e67 ("regulatory: add NUL to request alpha2")
-Signed-off-by: Stefan Wahren <[email protected]>
-Acked-by: Franky Lin <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -6803,7 +6803,7 @@ static void brcmf_cfg80211_reg_notifier(
- 		return;
- 
- 	/* ignore non-ISO3166 country codes */
--	for (i = 0; i < sizeof(req->alpha2); i++)
-+	for (i = 0; i < 2; i++)
- 		if (req->alpha2[i] < 'A' || req->alpha2[i] > 'Z') {
- 			brcmf_err("not an ISO3166 code (0x%02x 0x%02x)\n",
- 				  req->alpha2[0], req->alpha2[1]);

+ 0 - 45
package/kernel/mac80211/patches/325-v4.17-0001-brcmfmac-move-brcmf_bus_preinit-call-just-after-chan.patch

@@ -1,45 +0,0 @@
-From da472385a29f1fddcac7cfa0499482704310bd16 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:18 +0100
-Subject: [PATCH] brcmfmac: move brcmf_bus_preinit() call just after changing
- bus state
-
-Moving the brcmf_bus_preinit() call allows the bus code to do some
-required initialization before handling firmware control messages.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c | 3 ---
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c   | 5 +++++
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -369,9 +369,6 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 
- 	/* Enable tx beamforming, errors can be ignored (not supported) */
- 	(void)brcmf_fil_iovar_int_set(ifp, "txbf", 1);
--
--	/* do bus specific preinit here */
--	err = brcmf_bus_preinit(ifp->drvr->bus_if);
- done:
- 	return err;
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1091,6 +1091,11 @@ int brcmf_bus_started(struct device *dev
- 	/* signal bus ready */
- 	brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
- 
-+	/* do bus specific preinit here */
-+	ret = brcmf_bus_preinit(ifp->drvr->bus_if);
-+	if (ret < 0)
-+		goto fail;
-+
- 	/* Bus is ready, do any initialization */
- 	ret = brcmf_c_preinit_dcmds(ifp);
- 	if (ret < 0)

+ 0 - 69
package/kernel/mac80211/patches/325-v4.17-0002-brcmfmac-move-allocation-of-control-rx-buffer-to-brc.patch

@@ -1,69 +0,0 @@
-From 4b5adc736828dc25ca33e263ad8c0b9dcd3bf325 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:19 +0100
-Subject: [PATCH] brcmfmac: move allocation of control rx buffer to
- brcmf_sdio_bus_preinit()
-
-Allocate the control rx buffer needed for firmware control interface
-during brcmf_sdio_bus_preinit(). This relies on common layer setting
-struct brcmf_bus::maxctl during brcmf_attach(). By moving the allocation
-we can move brcmf_attach() in subsequent change.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 26 ++++++++++------------
- 1 file changed, 12 insertions(+), 14 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -1707,7 +1707,6 @@ brcmf_sdio_read_control(struct brcmf_sdi
- 	int sdret;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
--
- 	if (bus->rxblen)
- 		buf = vzalloc(bus->rxblen);
- 	if (!buf)
-@@ -3411,6 +3410,18 @@ static int brcmf_sdio_bus_preinit(struct
- 	u32 value;
- 	int err;
- 
-+	/* maxctl provided by common layer */
-+	if (WARN_ON(!bus_if->maxctl))
-+		return -EINVAL;
-+
-+	/* Allocate control receive buffer */
-+	bus_if->maxctl += bus->roundup;
-+	value = roundup((bus_if->maxctl + SDPCM_HDRLEN), ALIGNMENT);
-+	value += bus->head_align;
-+	bus->rxbuf = kmalloc(value, GFP_ATOMIC);
-+	if (bus->rxbuf)
-+		bus->rxblen = value;
-+
- 	/* the commands below use the terms tx and rx from
- 	 * a device perspective, ie. bus:txglom affects the
- 	 * bus transfers from device to host.
-@@ -4209,19 +4220,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	bus->blocksize = bus->sdiodev->func2->cur_blksize;
- 	bus->roundup = min(max_roundup, bus->blocksize);
- 
--	/* Allocate buffers */
--	if (bus->sdiodev->bus_if->maxctl) {
--		bus->sdiodev->bus_if->maxctl += bus->roundup;
--		bus->rxblen =
--		    roundup((bus->sdiodev->bus_if->maxctl + SDPCM_HDRLEN),
--			    ALIGNMENT) + bus->head_align;
--		bus->rxbuf = kmalloc(bus->rxblen, GFP_ATOMIC);
--		if (!(bus->rxbuf)) {
--			brcmf_err("rxbuf allocation failed\n");
--			goto fail;
--		}
--	}
--
- 	sdio_claim_host(bus->sdiodev->func1);
- 
- 	/* Disable F2 to clear any intermediate frame state on the dongle */

+ 0 - 106
package/kernel/mac80211/patches/325-v4.17-0003-brcmfmac-call-brcmf_attach-just-before-calling-brcmf.patch

@@ -1,106 +0,0 @@
-From 262f2b53f67936b59cc8dfc6f3899ab8905bf1ed Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:20 +0100
-Subject: [PATCH] brcmfmac: call brcmf_attach() just before calling
- brcmf_bus_started()
-
-Now we can move brcmf_attach() until after the firmware has been downloaded
-to the device. Make the call just before brcmf_bus_started().
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    |  6 ++++
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 34 +++++++++++-----------
- 2 files changed, 23 insertions(+), 17 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1268,6 +1268,12 @@ void brcmf_bus_change_state(struct brcmf
- 	int ifidx;
- 
- 	brcmf_dbg(TRACE, "%d -> %d\n", bus->state, state);
-+
-+	if (!drvr) {
-+		brcmf_dbg(INFO, "ignoring transition, bus not attached yet\n");
-+		return;
-+	}
-+
- 	bus->state = state;
- 
- 	if (state == BRCMF_BUS_UP) {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4048,9 +4048,6 @@ static void brcmf_sdio_firmware_callback
- 	if (err)
- 		goto fail;
- 
--	if (!bus_if->drvr)
--		return;
--
- 	/* try to download image and nvram to the dongle */
- 	bus->alp_only = true;
- 	err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
-@@ -4126,11 +4123,28 @@ static void brcmf_sdio_firmware_callback
- 
- 	sdio_release_host(sdiodev->func1);
- 
-+	/* Assign bus interface call back */
-+	sdiodev->bus_if->dev = sdiodev->dev;
-+	sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
-+	sdiodev->bus_if->chip = bus->ci->chip;
-+	sdiodev->bus_if->chiprev = bus->ci->chiprev;
-+
-+	/* Attach to the common layer, reserve hdr space */
-+	err = brcmf_attach(sdiodev->dev, sdiodev->settings);
-+	if (err != 0) {
-+		brcmf_err("brcmf_attach failed\n");
-+		goto fail;
-+	}
-+
-+	brcmf_sdio_debugfs_create(bus);
-+
- 	err = brcmf_bus_started(dev);
- 	if (err != 0) {
- 		brcmf_err("dongle is not responding\n");
- 		goto fail;
- 	}
-+
-+	/* ready */
- 	return;
- 
- release:
-@@ -4200,22 +4214,9 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	bus->dpc_triggered = false;
- 	bus->dpc_running = false;
- 
--	/* Assign bus interface call back */
--	bus->sdiodev->bus_if->dev = bus->sdiodev->dev;
--	bus->sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
--	bus->sdiodev->bus_if->chip = bus->ci->chip;
--	bus->sdiodev->bus_if->chiprev = bus->ci->chiprev;
--
- 	/* default sdio bus header length for tx packet */
- 	bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN;
- 
--	/* Attach to the common layer, reserve hdr space */
--	ret = brcmf_attach(bus->sdiodev->dev, bus->sdiodev->settings);
--	if (ret != 0) {
--		brcmf_err("brcmf_attach failed\n");
--		goto fail;
--	}
--
- 	/* Query the F2 block size, set roundup accordingly */
- 	bus->blocksize = bus->sdiodev->func2->cur_blksize;
- 	bus->roundup = min(max_roundup, bus->blocksize);
-@@ -4240,7 +4241,6 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	/* SR state */
- 	bus->sr_enabled = false;
- 
--	brcmf_sdio_debugfs_create(bus);
- 	brcmf_dbg(INFO, "completed!!\n");
- 
- 	ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,

+ 0 - 41
package/kernel/mac80211/patches/325-v4.17-0004-brcmfmac-usb-call-brcmf_usb_up-during-brcmf_bus_prei.patch

@@ -1,41 +0,0 @@
-From a7f4a80c0070b673d4a4ce94b99979ea6d0c6296 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:21 +0100
-Subject: [PATCH] brcmfmac: usb: call brcmf_usb_up() during brcmf_bus_preinit()
-
-By calling brcmf_usb_up() during brcmf_bus_preinit() it does not need
-to be called in brcmf_usb_bus_setup().
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 7 ++-----
- 1 file changed, 2 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1146,8 +1146,9 @@ static int brcmf_usb_get_fwname(struct d
- }
- 
- static const struct brcmf_bus_ops brcmf_usb_bus_ops = {
--	.txdata = brcmf_usb_tx,
-+	.preinit = brcmf_usb_up,
- 	.stop = brcmf_usb_down,
-+	.txdata = brcmf_usb_tx,
- 	.txctl = brcmf_usb_tx_ctlpkt,
- 	.rxctl = brcmf_usb_rx_ctlpkt,
- 	.wowl_config = brcmf_usb_wowl_config,
-@@ -1165,10 +1166,6 @@ static int brcmf_usb_bus_setup(struct br
- 		return ret;
- 	}
- 
--	ret = brcmf_usb_up(devinfo->dev);
--	if (ret)
--		goto fail;
--
- 	ret = brcmf_bus_started(devinfo->dev);
- 	if (ret)
- 		goto fail;

+ 0 - 130
package/kernel/mac80211/patches/325-v4.17-0005-brcmfmac-move-brcmf_attach-function-in-core.c.patch

@@ -1,130 +0,0 @@
-From 0542503c4c164c65cd1567b0f2b3f887af6c81eb Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:22 +0100
-Subject: [PATCH] brcmfmac: move brcmf_attach() function in core.c
-
-Moving the function in preparation of subsequent patch.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 98 +++++++++++-----------
- 1 file changed, 49 insertions(+), 49 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -992,55 +992,6 @@ static int brcmf_inet6addr_changed(struc
- }
- #endif
- 
--int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
--{
--	struct brcmf_pub *drvr = NULL;
--	int ret = 0;
--	int i;
--
--	brcmf_dbg(TRACE, "Enter\n");
--
--	/* Allocate primary brcmf_info */
--	drvr = kzalloc(sizeof(struct brcmf_pub), GFP_ATOMIC);
--	if (!drvr)
--		return -ENOMEM;
--
--	for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
--		drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
--
--	mutex_init(&drvr->proto_block);
--
--	/* Link to bus module */
--	drvr->hdrlen = 0;
--	drvr->bus_if = dev_get_drvdata(dev);
--	drvr->bus_if->drvr = drvr;
--	drvr->settings = settings;
--
--	/* attach debug facilities */
--	brcmf_debug_attach(drvr);
--
--	/* Attach and link in the protocol */
--	ret = brcmf_proto_attach(drvr);
--	if (ret != 0) {
--		brcmf_err("brcmf_prot_attach failed\n");
--		goto fail;
--	}
--
--	/* Attach to events important for core code */
--	brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
--			    brcmf_psm_watchdog_notify);
--
--	/* attach firmware event handler */
--	brcmf_fweh_attach(drvr);
--
--	return ret;
--
--fail:
--	brcmf_detach(dev);
--
--	return ret;
--}
--
- static int brcmf_revinfo_read(struct seq_file *s, void *data)
- {
- 	struct brcmf_bus *bus_if = dev_get_drvdata(s->private);
-@@ -1170,6 +1121,55 @@ fail:
- 
- 	return ret;
- }
-+
-+int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
-+{
-+	struct brcmf_pub *drvr = NULL;
-+	int ret = 0;
-+	int i;
-+
-+	brcmf_dbg(TRACE, "Enter\n");
-+
-+	/* Allocate primary brcmf_info */
-+	drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
-+	if (!drvr)
-+		return -ENOMEM;
-+
-+	for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
-+		drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
-+
-+	mutex_init(&drvr->proto_block);
-+
-+	/* Link to bus module */
-+	drvr->hdrlen = 0;
-+	drvr->bus_if = dev_get_drvdata(dev);
-+	drvr->bus_if->drvr = drvr;
-+	drvr->settings = settings;
-+
-+	/* attach debug facilities */
-+	brcmf_debug_attach(drvr);
-+
-+	/* Attach and link in the protocol */
-+	ret = brcmf_proto_attach(drvr);
-+	if (ret != 0) {
-+		brcmf_err("brcmf_prot_attach failed\n");
-+		goto fail;
-+	}
-+
-+	/* Attach to events important for core code */
-+	brcmf_fweh_register(drvr, BRCMF_E_PSM_WATCHDOG,
-+			    brcmf_psm_watchdog_notify);
-+
-+	/* attach firmware event handler */
-+	brcmf_fweh_attach(drvr);
-+
-+	return ret;
-+
-+fail:
-+	brcmf_detach(dev);
-+
-+	return ret;
-+}
- 
- void brcmf_bus_add_txhdrlen(struct device *dev, uint len)
- {

+ 0 - 190
package/kernel/mac80211/patches/325-v4.17-0006-brcmfmac-remove-brcmf_bus_started-from-bus-api.patch

@@ -1,190 +0,0 @@
-From de2a3027f6f15e2f6558dc4d178282ccc1f054db Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:23 +0100
-Subject: [PATCH] brcmfmac: remove brcmf_bus_started() from bus api
-
-No longer needed to call this in bus layer so make it static and call
-it in the last phase of brcmf_attach() instead.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h |  1 -
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 14 +++++++----
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 20 +---------------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 10 ++------
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 28 ++++------------------
- 5 files changed, 16 insertions(+), 57 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -253,7 +253,6 @@ void brcmf_dev_reset(struct device *dev)
- /* Configure the "global" bus state used by upper layers */
- void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
- 
--int brcmf_bus_started(struct device *dev);
- s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len);
- void brcmf_bus_add_txhdrlen(struct device *dev, uint len);
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1022,11 +1022,10 @@ static int brcmf_revinfo_read(struct seq
- 	return 0;
- }
- 
--int brcmf_bus_started(struct device *dev)
-+static int brcmf_bus_started(struct brcmf_pub *drvr)
- {
- 	int ret = -1;
--	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
--	struct brcmf_pub *drvr = bus_if->drvr;
-+	struct brcmf_bus *bus_if = drvr->bus_if;
- 	struct brcmf_if *ifp;
- 	struct brcmf_if *p2p_ifp;
- 
-@@ -1043,7 +1042,7 @@ int brcmf_bus_started(struct device *dev
- 	brcmf_bus_change_state(bus_if, BRCMF_BUS_UP);
- 
- 	/* do bus specific preinit here */
--	ret = brcmf_bus_preinit(ifp->drvr->bus_if);
-+	ret = brcmf_bus_preinit(bus_if);
- 	if (ret < 0)
- 		goto fail;
- 
-@@ -1163,7 +1162,12 @@ int brcmf_attach(struct device *dev, str
- 	/* attach firmware event handler */
- 	brcmf_fweh_attach(drvr);
- 
--	return ret;
-+	ret = brcmf_bus_started(drvr);
-+	if (ret != 0) {
-+		brcmf_err("dongle is not responding: err=%d\n", ret);
-+		goto fail;
-+	}
-+	return 0;
- 
- fail:
- 	brcmf_detach(dev);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1581,24 +1581,6 @@ static void brcmf_pcie_release_resource(
- }
- 
- 
--static int brcmf_pcie_attach_bus(struct brcmf_pciedev_info *devinfo)
--{
--	int ret;
--
--	/* Attach to the common driver interface */
--	ret = brcmf_attach(&devinfo->pdev->dev, devinfo->settings);
--	if (ret) {
--		brcmf_err("brcmf_attach failed\n");
--	} else {
--		ret = brcmf_bus_started(&devinfo->pdev->dev);
--		if (ret)
--			brcmf_err("dongle is not responding\n");
--	}
--
--	return ret;
--}
--
--
- static u32 brcmf_pcie_buscore_prep_addr(const struct pci_dev *pdev, u32 addr)
- {
- 	u32 ret_addr;
-@@ -1735,7 +1717,7 @@ static void brcmf_pcie_setup(struct devi
- 	init_waitqueue_head(&devinfo->mbdata_resp_wait);
- 
- 	brcmf_pcie_intr_enable(devinfo);
--	if (brcmf_pcie_attach_bus(devinfo) == 0)
-+	if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0)
- 		return;
- 
- 	brcmf_pcie_bus_console_read(devinfo);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -3422,6 +3422,8 @@ static int brcmf_sdio_bus_preinit(struct
- 	if (bus->rxbuf)
- 		bus->rxblen = value;
- 
-+	brcmf_sdio_debugfs_create(bus);
-+
- 	/* the commands below use the terms tx and rx from
- 	 * a device perspective, ie. bus:txglom affects the
- 	 * bus transfers from device to host.
-@@ -4136,14 +4138,6 @@ static void brcmf_sdio_firmware_callback
- 		goto fail;
- 	}
- 
--	brcmf_sdio_debugfs_create(bus);
--
--	err = brcmf_bus_started(dev);
--	if (err != 0) {
--		brcmf_err("dongle is not responding\n");
--		goto fail;
--	}
--
- 	/* ready */
- 	return;
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1155,27 +1155,6 @@ static const struct brcmf_bus_ops brcmf_
- 	.get_fwname = brcmf_usb_get_fwname,
- };
- 
--static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)
--{
--	int ret;
--
--	/* Attach to the common driver interface */
--	ret = brcmf_attach(devinfo->dev, devinfo->settings);
--	if (ret) {
--		brcmf_err("brcmf_attach failed\n");
--		return ret;
--	}
--
--	ret = brcmf_bus_started(devinfo->dev);
--	if (ret)
--		goto fail;
--
--	return 0;
--fail:
--	brcmf_detach(devinfo->dev);
--	return ret;
--}
--
- static void brcmf_usb_probe_phase2(struct device *dev, int ret,
- 				   const struct firmware *fw,
- 				   void *nvram, u32 nvlen)
-@@ -1203,7 +1182,8 @@ static void brcmf_usb_probe_phase2(struc
- 	if (ret)
- 		goto error;
- 
--	ret = brcmf_usb_bus_setup(devinfo);
-+	/* Attach to the common driver interface */
-+	ret = brcmf_attach(devinfo->dev, devinfo->settings);
- 	if (ret)
- 		goto error;
- 
-@@ -1253,7 +1233,7 @@ static int brcmf_usb_probe_cb(struct brc
- 	}
- 
- 	if (!brcmf_usb_dlneeded(devinfo)) {
--		ret = brcmf_usb_bus_setup(devinfo);
-+		ret = brcmf_attach(devinfo->dev, devinfo->settings);
- 		if (ret)
- 			goto fail;
- 		/* we are done */
-@@ -1456,7 +1436,7 @@ static int brcmf_usb_resume(struct usb_i
- 
- 	brcmf_dbg(USB, "Enter\n");
- 	if (!devinfo->wowl_enabled)
--		return brcmf_usb_bus_setup(devinfo);
-+		return brcmf_attach(devinfo->dev, devinfo->settings);
- 
- 	devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP;
- 	brcmf_usb_rx_fill_all(devinfo);

+ 0 - 64
package/kernel/mac80211/patches/325-v4.17-0007-brcmfmac-change-log-level-for-some-low-level-sdio-fu.patch

@@ -1,64 +0,0 @@
-From d678296bfb9a630d0000222fc21f4ed0d0d65332 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:24 +0100
-Subject: [PATCH] brcmfmac: change log level for some low-level sdio functions
-
-Reducing the number of trace level messages in sdio code giving
-them sdio log level instead.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -1706,7 +1706,7 @@ brcmf_sdio_read_control(struct brcmf_sdi
- 	u8 *buf = NULL, *rbuf;
- 	int sdret;
- 
--	brcmf_dbg(TRACE, "Enter\n");
-+	brcmf_dbg(SDIO, "Enter\n");
- 	if (bus->rxblen)
- 		buf = vzalloc(bus->rxblen);
- 	if (!buf)
-@@ -1809,7 +1809,7 @@ static uint brcmf_sdio_readframes(struct
- 	struct brcmf_sdio_hdrinfo *rd = &bus->cur_read, rd_new;
- 	u8 head_read = 0;
- 
--	brcmf_dbg(TRACE, "Enter\n");
-+	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* Not finished unless we encounter no more frames indication */
- 	bus->rxpending = true;
-@@ -2344,7 +2344,7 @@ static int brcmf_sdio_tx_ctrlframe(struc
- 	struct brcmf_sdio_hdrinfo hd_info = {0};
- 	int ret;
- 
--	brcmf_dbg(TRACE, "Enter\n");
-+	brcmf_dbg(SDIO, "Enter\n");
- 
- 	/* Back the pointer to make room for bus header */
- 	frame -= bus->tx_hdrlen;
-@@ -2520,7 +2520,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 	uint framecnt;			/* Temporary counter of tx/rx frames */
- 	int err = 0;
- 
--	brcmf_dbg(TRACE, "Enter\n");
-+	brcmf_dbg(SDIO, "Enter\n");
- 
- 	sdio_claim_host(bus->sdiodev->func1);
- 
-@@ -2605,7 +2605,7 @@ static void brcmf_sdio_dpc(struct brcmf_
- 
- 	/* Would be active due to wake-wlan in gSPI */
- 	if (intstatus & I_CHIPACTIVE) {
--		brcmf_dbg(INFO, "Dongle reports CHIPACTIVE\n");
-+		brcmf_dbg(SDIO, "Dongle reports CHIPACTIVE\n");
- 		intstatus &= ~I_CHIPACTIVE;
- 	}
- 

+ 0 - 126
package/kernel/mac80211/patches/325-v4.17-0008-brcmfmac-remove-duplicate-pointer-variable-from-brcm.patch

@@ -1,126 +0,0 @@
-From 2d6edad4b2da1991f74e7b02053eeb4a043b887f Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 20 Feb 2018 00:14:25 +0100
-Subject: [PATCH] brcmfmac: remove duplicate pointer variable from
- brcmf_sdio_firmware_callback()
-
-In brcmf_sdio_firmware_callback() two pointer variables were used
-pointing to the same construct. Get rid of sdiodev variable.
-
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 37 +++++++++++-----------
- 1 file changed, 18 insertions(+), 19 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4039,9 +4039,8 @@ static void brcmf_sdio_firmware_callback
- 					 void *nvram, u32 nvram_len)
- {
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
--	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
--	struct brcmf_sdio *bus = sdiodev->bus;
--	struct brcmf_sdio_dev *sdiod = bus->sdiodev;
-+	struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;
-+	struct brcmf_sdio *bus = sdiod->bus;
- 	struct brcmf_core *core = bus->sdio_core;
- 	u8 saveclk;
- 
-@@ -4061,7 +4060,7 @@ static void brcmf_sdio_firmware_callback
- 	bus->sdcnt.tickcnt = 0;
- 	brcmf_sdio_wd_timer(bus, true);
- 
--	sdio_claim_host(sdiodev->func1);
-+	sdio_claim_host(sdiod->func1);
- 
- 	/* Make sure backplane clock is on, needed to generate F2 interrupt */
- 	brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
-@@ -4069,9 +4068,9 @@ static void brcmf_sdio_firmware_callback
- 		goto release;
- 
- 	/* Force clocks on backplane to be sure F2 interrupt propagates */
--	saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
-+	saveclk = brcmf_sdiod_readb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR, &err);
- 	if (!err) {
--		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+		brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
- 				   (saveclk | SBSDIO_FORCE_HT), &err);
- 	}
- 	if (err) {
-@@ -4083,7 +4082,7 @@ static void brcmf_sdio_firmware_callback
- 	brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
- 			   SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
- 
--	err = sdio_enable_func(sdiodev->func2);
-+	err = sdio_enable_func(sdiod->func2);
- 
- 	brcmf_dbg(INFO, "enable F2: err=%d\n", err);
- 
-@@ -4095,10 +4094,10 @@ static void brcmf_sdio_firmware_callback
- 				   bus->hostintmask, NULL);
- 
- 
--		brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
-+		brcmf_sdiod_writeb(sdiod, SBSDIO_WATERMARK, 8, &err);
- 	} else {
- 		/* Disable F2 again */
--		sdio_disable_func(sdiodev->func2);
-+		sdio_disable_func(sdiod->func2);
- 		goto release;
- 	}
- 
-@@ -4106,7 +4105,7 @@ static void brcmf_sdio_firmware_callback
- 		brcmf_sdio_sr_init(bus);
- 	} else {
- 		/* Restore previous clock setting */
--		brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
-+		brcmf_sdiod_writeb(sdiod, SBSDIO_FUNC1_CHIPCLKCSR,
- 				   saveclk, &err);
- 	}
- 
-@@ -4114,7 +4113,7 @@ static void brcmf_sdio_firmware_callback
- 		/* Allow full data communication using DPC from now on. */
- 		brcmf_sdiod_change_state(bus->sdiodev, BRCMF_SDIOD_DATA);
- 
--		err = brcmf_sdiod_intr_register(sdiodev);
-+		err = brcmf_sdiod_intr_register(sdiod);
- 		if (err != 0)
- 			brcmf_err("intr register failed:%d\n", err);
- 	}
-@@ -4123,16 +4122,16 @@ static void brcmf_sdio_firmware_callback
- 	if (err != 0)
- 		brcmf_sdio_clkctl(bus, CLK_NONE, false);
- 
--	sdio_release_host(sdiodev->func1);
-+	sdio_release_host(sdiod->func1);
- 
- 	/* Assign bus interface call back */
--	sdiodev->bus_if->dev = sdiodev->dev;
--	sdiodev->bus_if->ops = &brcmf_sdio_bus_ops;
--	sdiodev->bus_if->chip = bus->ci->chip;
--	sdiodev->bus_if->chiprev = bus->ci->chiprev;
-+	sdiod->bus_if->dev = sdiod->dev;
-+	sdiod->bus_if->ops = &brcmf_sdio_bus_ops;
-+	sdiod->bus_if->chip = bus->ci->chip;
-+	sdiod->bus_if->chiprev = bus->ci->chiprev;
- 
- 	/* Attach to the common layer, reserve hdr space */
--	err = brcmf_attach(sdiodev->dev, sdiodev->settings);
-+	err = brcmf_attach(sdiod->dev, sdiod->settings);
- 	if (err != 0) {
- 		brcmf_err("brcmf_attach failed\n");
- 		goto fail;
-@@ -4142,10 +4141,10 @@ static void brcmf_sdio_firmware_callback
- 	return;
- 
- release:
--	sdio_release_host(sdiodev->func1);
-+	sdio_release_host(sdiod->func1);
- fail:
- 	brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
--	device_release_driver(&sdiodev->func2->dev);
-+	device_release_driver(&sdiod->func2->dev);
- 	device_release_driver(dev);
- }
- 

+ 0 - 27
package/kernel/mac80211/patches/326-v4.17-0001-brcmfmac-reject-too-long-PSK.patch

@@ -1,27 +0,0 @@
-From 64d1519edc959f5b8f86a66a51c40971c215e4ec Mon Sep 17 00:00:00 2001
-From: Johannes Berg <[email protected]>
-Date: Mon, 19 Feb 2018 13:30:45 +0100
-Subject: [PATCH] brcmfmac: reject too long PSK
-
-nl80211 already allows specifying 48 bytes, but brcmfmac
-only supports 32. Reject keys that are too long.
-
-Signed-off-by: Johannes Berg <[email protected]>
-Acked-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -5125,6 +5125,9 @@ static int brcmf_cfg80211_set_pmk(struct
- 	if (WARN_ON(ifp->vif->profile.use_fwsup != BRCMF_PROFILE_FWSUP_1X))
- 		return -EINVAL;
- 
-+	if (conf->pmk_len > BRCMF_WSEC_MAX_PSK_LEN)
-+		return -ERANGE;
-+
- 	return brcmf_set_pmk(ifp, conf->pmk, conf->pmk_len);
- }
- 

+ 0 - 31
package/kernel/mac80211/patches/327-v4.17-0001-brcmfmac-do-not-convert-linux-error-to-firmware-erro.patch

@@ -1,31 +0,0 @@
-From 1170f6d1be6a39e1a115a2c0f50923eb4ce2a7ec Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:20 +0100
-Subject: [PATCH] brcmfmac: do not convert linux error to firmware error string
-
-In case of a linux error brcmf_fil_cmd_data() blurts an error message
-in which the error code is translated to an error string. However, it
-maps it to a firmware error string which should not happen. Simply
-print only the numeric error code and be done with it.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil.c
-@@ -124,8 +124,7 @@ brcmf_fil_cmd_data(struct brcmf_if *ifp,
- 					     data, len, &fwerr);
- 
- 	if (err) {
--		brcmf_dbg(FIL, "Failed: %s (%d)\n",
--			  brcmf_fil_get_errstr((u32)(-err)), err);
-+		brcmf_dbg(FIL, "Failed: error=%d\n", err);
- 	} else if (fwerr < 0) {
- 		brcmf_dbg(FIL, "Firmware error: %s (%d)\n",
- 			  brcmf_fil_get_errstr((u32)(-fwerr)), fwerr);

+ 0 - 203
package/kernel/mac80211/patches/327-v4.17-0002-brcmfmac-use-brcmf_chip_name-to-store-name-in-revinf.patch

@@ -1,203 +0,0 @@
-From 756a2b390874d274f2f615921318ef0856ff9313 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:21 +0100
-Subject: [PATCH] brcmfmac: use brcmf_chip_name() to store name in revinfo
-
-The chip id can either be four or five digits. For the chip name either
-the hexadecimal value needs to be taken (four digits) or the decimal
-value (five digits). The function brcmf_chip_name() does this conversion
-so use it to store the name in driver revision info.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/chip.c    |  9 +++++----
- .../wireless/broadcom/brcm80211/brcmfmac/chip.h    |  3 ++-
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  | 23 ++++++++++++++++------
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 10 +---------
- .../wireless/broadcom/brcm80211/brcmfmac/core.h    |  3 +--
- 5 files changed, 26 insertions(+), 22 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-@@ -464,12 +464,12 @@ static void brcmf_chip_ai_resetcore(stru
- 	ci->ops->read32(ci->ctx, core->wrapbase + BCMA_IOCTL);
- }
- 
--static char *brcmf_chip_name(uint chipid, char *buf, uint len)
-+char *brcmf_chip_name(u32 id, u32 rev, char *buf, uint len)
- {
- 	const char *fmt;
- 
--	fmt = ((chipid > 0xa000) || (chipid < 0x4000)) ? "%d" : "%x";
--	snprintf(buf, len, fmt, chipid);
-+	fmt = ((id > 0xa000) || (id < 0x4000)) ? "BCM%d/%u" : "BCM%x/%u";
-+	snprintf(buf, len, fmt, id, rev);
- 	return buf;
- }
- 
-@@ -924,7 +924,8 @@ static int brcmf_chip_recognition(struct
- 	ci->pub.chiprev = (regdata & CID_REV_MASK) >> CID_REV_SHIFT;
- 	socitype = (regdata & CID_TYPE_MASK) >> CID_TYPE_SHIFT;
- 
--	brcmf_chip_name(ci->pub.chip, ci->pub.name, sizeof(ci->pub.name));
-+	brcmf_chip_name(ci->pub.chip, ci->pub.chiprev,
-+			ci->pub.name, sizeof(ci->pub.name));
- 	brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n",
- 		  socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name,
- 		  ci->pub.chiprev);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.h
-@@ -45,7 +45,7 @@ struct brcmf_chip {
- 	u32 rambase;
- 	u32 ramsize;
- 	u32 srsize;
--	char name[8];
-+	char name[12];
- };
- 
- /**
-@@ -93,5 +93,6 @@ void brcmf_chip_resetcore(struct brcmf_c
- void brcmf_chip_set_passive(struct brcmf_chip *ci);
- bool brcmf_chip_set_active(struct brcmf_chip *ci, u32 rstvec);
- bool brcmf_chip_sr_capable(struct brcmf_chip *pub);
-+char *brcmf_chip_name(u32 chipid, u32 chiprev, char *buf, uint len);
- 
- #endif /* BRCMF_AXIDMP_H */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -30,6 +30,7 @@
- #include "common.h"
- #include "of.h"
- #include "firmware.h"
-+#include "chip.h"
- 
- MODULE_AUTHOR("Broadcom Corporation");
- MODULE_DESCRIPTION("Broadcom 802.11 wireless LAN fullmac driver.");
-@@ -131,14 +132,13 @@ static int brcmf_c_download(struct brcmf
- static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
- {
- 	struct brcmf_bus *bus = ifp->drvr->bus_if;
--	struct brcmf_rev_info *ri = &ifp->drvr->revinfo;
- 	u8 fw_name[BRCMF_FW_NAME_LEN];
- 	u8 *ptr;
- 	size_t len;
- 	s32 err;
- 
- 	memset(fw_name, 0, BRCMF_FW_NAME_LEN);
--	err = brcmf_bus_get_fwname(bus, ri->chipnum, ri->chiprev, fw_name);
-+	err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name);
- 	if (err) {
- 		brcmf_err("get firmware name failed (%d)\n", err);
- 		goto done;
-@@ -238,6 +238,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- {
- 	s8 eventmask[BRCMF_EVENTING_MASK_LEN];
- 	u8 buf[BRCMF_DCMD_SMLEN];
-+	struct brcmf_bus *bus;
- 	struct brcmf_rev_info_le revinfo;
- 	struct brcmf_rev_info *ri;
- 	char *clmver;
-@@ -253,16 +254,18 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 	}
- 	memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
- 
-+	bus = ifp->drvr->bus_if;
-+	ri = &ifp->drvr->revinfo;
-+
- 	err = brcmf_fil_cmd_data_get(ifp, BRCMF_C_GET_REVINFO,
- 				     &revinfo, sizeof(revinfo));
--	ri = &ifp->drvr->revinfo;
- 	if (err < 0) {
- 		brcmf_err("retrieving revision info failed, %d\n", err);
-+		strlcpy(ri->chipname, "UNKNOWN", sizeof(ri->chipname));
- 	} else {
- 		ri->vendorid = le32_to_cpu(revinfo.vendorid);
- 		ri->deviceid = le32_to_cpu(revinfo.deviceid);
- 		ri->radiorev = le32_to_cpu(revinfo.radiorev);
--		ri->chiprev = le32_to_cpu(revinfo.chiprev);
- 		ri->corerev = le32_to_cpu(revinfo.corerev);
- 		ri->boardid = le32_to_cpu(revinfo.boardid);
- 		ri->boardvendor = le32_to_cpu(revinfo.boardvendor);
-@@ -270,15 +273,23 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 		ri->driverrev = le32_to_cpu(revinfo.driverrev);
- 		ri->ucoderev = le32_to_cpu(revinfo.ucoderev);
- 		ri->bus = le32_to_cpu(revinfo.bus);
--		ri->chipnum = le32_to_cpu(revinfo.chipnum);
- 		ri->phytype = le32_to_cpu(revinfo.phytype);
- 		ri->phyrev = le32_to_cpu(revinfo.phyrev);
- 		ri->anarev = le32_to_cpu(revinfo.anarev);
- 		ri->chippkg = le32_to_cpu(revinfo.chippkg);
- 		ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
-+
-+		if (!bus->chip) {
-+			bus->chip = le32_to_cpu(revinfo.chipnum);
-+			bus->chiprev = le32_to_cpu(revinfo.chiprev);
-+		}
- 	}
- 	ri->result = err;
- 
-+	if (bus->chip)
-+		brcmf_chip_name(bus->chip, bus->chiprev,
-+				ri->chipname, sizeof(ri->chipname));
-+
- 	/* Do any CLM downloading */
- 	err = brcmf_c_process_clm_blob(ifp);
- 	if (err < 0) {
-@@ -299,7 +310,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 	strsep(&ptr, "\n");
- 
- 	/* Print fw version info */
--	brcmf_info("Firmware version = %s\n", buf);
-+	brcmf_info("Firmware: %s %s\n", ri->chipname, buf);
- 
- 	/* locate firmware version number for ethtool */
- 	ptr = strrchr(buf, ' ') + 1;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1002,8 +1002,7 @@ static int brcmf_revinfo_read(struct seq
- 	seq_printf(s, "vendorid: 0x%04x\n", ri->vendorid);
- 	seq_printf(s, "deviceid: 0x%04x\n", ri->deviceid);
- 	seq_printf(s, "radiorev: %s\n", brcmu_dotrev_str(ri->radiorev, drev));
--	seq_printf(s, "chipnum: %u (%x)\n", ri->chipnum, ri->chipnum);
--	seq_printf(s, "chiprev: %u\n", ri->chiprev);
-+	seq_printf(s, "chip: %s\n", ri->chipname);
- 	seq_printf(s, "chippkg: %u\n", ri->chippkg);
- 	seq_printf(s, "corerev: %u\n", ri->corerev);
- 	seq_printf(s, "boardid: 0x%04x\n", ri->boardid);
-@@ -1053,13 +1052,6 @@ static int brcmf_bus_started(struct brcm
- 
- 	brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
- 
--	/* assure we have chipid before feature attach */
--	if (!bus_if->chip) {
--		bus_if->chip = drvr->revinfo.chipnum;
--		bus_if->chiprev = drvr->revinfo.chiprev;
--		brcmf_dbg(INFO, "firmware revinfo: chip %x (%d) rev %d\n",
--			  bus_if->chip, bus_if->chip, bus_if->chiprev);
--	}
- 	brcmf_feat_attach(drvr);
- 
- 	ret = brcmf_proto_init_done(drvr);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-@@ -87,7 +87,6 @@ struct brcmf_rev_info {
- 	u32 vendorid;
- 	u32 deviceid;
- 	u32 radiorev;
--	u32 chiprev;
- 	u32 corerev;
- 	u32 boardid;
- 	u32 boardvendor;
-@@ -95,7 +94,7 @@ struct brcmf_rev_info {
- 	u32 driverrev;
- 	u32 ucoderev;
- 	u32 bus;
--	u32 chipnum;
-+	char chipname[12];
- 	u32 phytype;
- 	u32 phyrev;
- 	u32 anarev;

+ 0 - 69
package/kernel/mac80211/patches/327-v4.17-0003-brcmfmac-use-brcmf_chip_name-for-consistency.patch

@@ -1,69 +0,0 @@
-From c88cfa075de356ddf40c668896b2126340f19ba4 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:22 +0100
-Subject: [PATCH] brcmfmac: use brcmf_chip_name() for consistency
-
-When logging the chip id/revision information make use of
-brcmf_chip_name() so it is always the same.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c     | 5 ++---
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 7 +++++--
- 2 files changed, 7 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-@@ -926,9 +926,8 @@ static int brcmf_chip_recognition(struct
- 
- 	brcmf_chip_name(ci->pub.chip, ci->pub.chiprev,
- 			ci->pub.name, sizeof(ci->pub.name));
--	brcmf_dbg(INFO, "found %s chip: BCM%s, rev=%d\n",
--		  socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name,
--		  ci->pub.chiprev);
-+	brcmf_dbg(INFO, "found %s chip: %s\n",
-+		  socitype == SOCI_SB ? "SB" : "AXI", ci->pub.name);
- 
- 	if (socitype == SOCI_SB) {
- 		if (ci->pub.chip != BRCM_CC_4329_CHIP_ID) {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -25,6 +25,7 @@
- #include "firmware.h"
- #include "core.h"
- #include "common.h"
-+#include "chip.h"
- 
- #define BRCMF_FW_MAX_NVRAM_SIZE			64000
- #define BRCMF_FW_NVRAM_DEVPATH_LEN		19	/* devpath0=pcie/1/4/ */
-@@ -567,6 +568,7 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 			      u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
- 			      char nvram_name[BRCMF_FW_NAME_LEN])
- {
-+	char chipname[12];
- 	u32 i;
- 	char end;
- 
-@@ -581,6 +583,8 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 		return -ENODEV;
- 	}
- 
-+	brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
-+
- 	/* check if firmware path is provided by module parameter */
- 	if (brcmf_mp_global.firmware_path[0] != '\0') {
- 		strlcpy(fw_name, brcmf_mp_global.firmware_path,
-@@ -601,8 +605,7 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 	if ((nvram_name) && (mapping_table[i].nvram))
- 		strlcat(nvram_name, mapping_table[i].nvram, BRCMF_FW_NAME_LEN);
- 
--	brcmf_info("using %s for chip %#08x(%d) rev %#08x\n",
--		   fw_name, chip, chip, chiprev);
-+	brcmf_info("using %s for chip %s\n", fw_name, chipname);
- 
- 	return 0;
- }

+ 0 - 452
package/kernel/mac80211/patches/327-v4.17-0004-brcmfmac-allocate-struct-brcmf_pub-instance-using-wi.patch

@@ -1,452 +0,0 @@
-From 856d5a011c86b59f6564be4508912fb1d866adfc Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:23 +0100
-Subject: [PATCH] brcmfmac: allocate struct brcmf_pub instance using
- wiphy_new()
-
-Rework the driver so the wiphy instance holds the main driver information
-in its private buffer. Previously it held struct brcmf_cfg80211_info
-instance so a bit of reorg was needed. This was done so that the wiphy
-name or its parent device can be shown in debug output.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/btcoex.c  |  2 +-
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 86 ++++++++++------------
- .../broadcom/brcm80211/brcmfmac/cfg80211.h         | 17 +++--
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  |  2 +
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 27 +++++--
- .../wireless/broadcom/brcm80211/brcmfmac/core.h    |  1 +
- .../net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |  2 +-
- 7 files changed, 76 insertions(+), 61 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/btcoex.c
-@@ -462,7 +462,7 @@ static void brcmf_btcoex_dhcp_end(struct
- int brcmf_btcoex_set_mode(struct brcmf_cfg80211_vif *vif,
- 			  enum brcmf_btcoex_mode mode, u16 duration)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(vif->wdev.wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(vif->wdev.wiphy);
- 	struct brcmf_btcoex_info *btci = cfg->btcoex;
- 	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -753,7 +753,7 @@ s32 brcmf_notify_escan_complete(struct b
- static int brcmf_cfg80211_del_ap_iface(struct wiphy *wiphy,
- 				       struct wireless_dev *wdev)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 	struct net_device *ndev = wdev->netdev;
- 	struct brcmf_if *ifp = netdev_priv(ndev);
- 	int ret;
-@@ -786,7 +786,7 @@ err_unarm:
- static
- int brcmf_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 	struct net_device *ndev = wdev->netdev;
- 
- 	if (ndev && ndev == cfg_to_ndev(cfg))
-@@ -831,7 +831,7 @@ brcmf_cfg80211_change_iface(struct wiphy
- 			 enum nl80211_iftype type,
- 			 struct vif_params *params)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 	struct brcmf_if *ifp = netdev_priv(ndev);
- 	struct brcmf_cfg80211_vif *vif = ifp->vif;
- 	s32 infra = 0;
-@@ -2127,17 +2127,15 @@ static s32
- brcmf_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
- 			    s32 *dbm)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
--	struct net_device *ndev = cfg_to_ndev(cfg);
--	struct brcmf_if *ifp = netdev_priv(ndev);
-+	struct brcmf_cfg80211_vif *vif = wdev_to_vif(wdev);
- 	s32 qdbm = 0;
- 	s32 err;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
--	if (!check_vif_up(ifp->vif))
-+	if (!check_vif_up(vif))
- 		return -EIO;
- 
--	err = brcmf_fil_iovar_int_get(ifp, "qtxpower", &qdbm);
-+	err = brcmf_fil_iovar_int_get(vif->ifp, "qtxpower", &qdbm);
- 	if (err) {
- 		brcmf_err("error (%d)\n", err);
- 		goto done;
-@@ -3359,7 +3357,7 @@ brcmf_cfg80211_sched_scan_start(struct w
- 				struct cfg80211_sched_scan_request *req)
- {
- 	struct brcmf_if *ifp = netdev_priv(ndev);
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 
- 	brcmf_dbg(SCAN, "Enter: n_match_sets=%d n_ssids=%d\n",
- 		  req->n_match_sets, req->n_ssids);
-@@ -5191,6 +5189,12 @@ static struct cfg80211_ops brcmf_cfg8021
- 	.del_pmk = brcmf_cfg80211_del_pmk,
- };
- 
-+struct cfg80211_ops *brcmf_cfg80211_get_ops(void)
-+{
-+	return kmemdup(&brcmf_cfg80211_ops, sizeof(brcmf_cfg80211_ops),
-+		       GFP_KERNEL);
-+}
-+
- struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
- 					   enum nl80211_iftype type)
- {
-@@ -5898,7 +5902,7 @@ static void brcmf_update_bw40_channel_fl
- static int brcmf_construct_chaninfo(struct brcmf_cfg80211_info *cfg,
- 				    u32 bw_cap[])
- {
--	struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
-+	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
- 	struct ieee80211_supported_band *band;
- 	struct ieee80211_channel *channel;
- 	struct wiphy *wiphy;
-@@ -6013,7 +6017,7 @@ fail_pbuf:
- 
- static int brcmf_enable_bw40_2g(struct brcmf_cfg80211_info *cfg)
- {
--	struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
-+	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
- 	struct ieee80211_supported_band *band;
- 	struct brcmf_fil_bwcap_le band_bwcap;
- 	struct brcmf_chanspec_list *list;
-@@ -6198,10 +6202,10 @@ static void brcmf_update_vht_cap(struct
- 	}
- }
- 
--static int brcmf_setup_wiphybands(struct wiphy *wiphy)
-+static int brcmf_setup_wiphybands(struct brcmf_cfg80211_info *cfg)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
--	struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
-+	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
-+	struct wiphy *wiphy;
- 	u32 nmode = 0;
- 	u32 vhtmode = 0;
- 	u32 bw_cap[2] = { WLC_BW_20MHZ_BIT, WLC_BW_20MHZ_BIT };
-@@ -6795,8 +6799,8 @@ static s32 brcmf_translate_country_code(
- static void brcmf_cfg80211_reg_notifier(struct wiphy *wiphy,
- 					struct regulatory_request *req)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
--	struct brcmf_if *ifp = netdev_priv(cfg_to_ndev(cfg));
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
-+	struct brcmf_if *ifp = brcmf_get_ifp(cfg->pub, 0);
- 	struct brcmf_fil_country_le ccreq;
- 	s32 err;
- 	int i;
-@@ -6831,7 +6835,7 @@ static void brcmf_cfg80211_reg_notifier(
- 		brcmf_err("Firmware rejected country setting\n");
- 		return;
- 	}
--	brcmf_setup_wiphybands(wiphy);
-+	brcmf_setup_wiphybands(cfg);
- }
- 
- static void brcmf_free_wiphy(struct wiphy *wiphy)
-@@ -6858,17 +6862,15 @@ static void brcmf_free_wiphy(struct wiph
- 	if (wiphy->wowlan != &brcmf_wowlan_support)
- 		kfree(wiphy->wowlan);
- #endif
--	wiphy_free(wiphy);
- }
- 
- struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
--						  struct device *busdev,
-+						  struct cfg80211_ops *ops,
- 						  bool p2pdev_forced)
- {
-+	struct wiphy *wiphy = drvr->wiphy;
- 	struct net_device *ndev = brcmf_get_ifp(drvr, 0)->ndev;
- 	struct brcmf_cfg80211_info *cfg;
--	struct wiphy *wiphy;
--	struct cfg80211_ops *ops;
- 	struct brcmf_cfg80211_vif *vif;
- 	struct brcmf_if *ifp;
- 	s32 err = 0;
-@@ -6880,26 +6882,13 @@ struct brcmf_cfg80211_info *brcmf_cfg802
- 		return NULL;
- 	}
- 
--	ops = kmemdup(&brcmf_cfg80211_ops, sizeof(*ops), GFP_KERNEL);
--	if (!ops)
--		return NULL;
--
--	ifp = netdev_priv(ndev);
--#ifdef CONFIG_PM
--	if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
--		ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
--#endif
--	wiphy = wiphy_new(ops, sizeof(struct brcmf_cfg80211_info));
--	if (!wiphy) {
-+	cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
-+	if (!cfg) {
- 		brcmf_err("Could not allocate wiphy device\n");
--		goto ops_out;
-+		return NULL;
- 	}
--	memcpy(wiphy->perm_addr, drvr->mac, ETH_ALEN);
--	set_wiphy_dev(wiphy, busdev);
- 
--	cfg = wiphy_priv(wiphy);
- 	cfg->wiphy = wiphy;
--	cfg->ops = ops;
- 	cfg->pub = drvr;
- 	init_vif_event(&cfg->vif_event);
- 	INIT_LIST_HEAD(&cfg->vif_list);
-@@ -6908,6 +6897,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
- 	if (IS_ERR(vif))
- 		goto wiphy_out;
- 
-+	ifp = netdev_priv(ndev);
- 	vif->ifp = ifp;
- 	vif->wdev.netdev = ndev;
- 	ndev->ieee80211_ptr = &vif->wdev;
-@@ -6934,6 +6924,11 @@ struct brcmf_cfg80211_info *brcmf_cfg802
- 	if (err < 0)
- 		goto priv_out;
- 
-+	/* regulatory notifer below needs access to cfg so
-+	 * assign it now.
-+	 */
-+	drvr->config = cfg;
-+
- 	brcmf_dbg(INFO, "Registering custom regulatory\n");
- 	wiphy->reg_notifier = brcmf_cfg80211_reg_notifier;
- 	wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
-@@ -6947,13 +6942,17 @@ struct brcmf_cfg80211_info *brcmf_cfg802
- 		cap = &wiphy->bands[NL80211_BAND_2GHZ]->ht_cap.cap;
- 		*cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40;
- 	}
-+#ifdef CONFIG_PM
-+	if (brcmf_feat_is_enabled(ifp, BRCMF_FEAT_WOWL_GTK))
-+		ops->set_rekey_data = brcmf_cfg80211_set_rekey_data;
-+#endif
- 	err = wiphy_register(wiphy);
- 	if (err < 0) {
- 		brcmf_err("Could not register wiphy device (%d)\n", err);
- 		goto priv_out;
- 	}
- 
--	err = brcmf_setup_wiphybands(wiphy);
-+	err = brcmf_setup_wiphybands(cfg);
- 	if (err) {
- 		brcmf_err("Setting wiphy bands failed (%d)\n", err);
- 		goto wiphy_unreg_out;
-@@ -6970,12 +6969,7 @@ struct brcmf_cfg80211_info *brcmf_cfg802
- 		else
- 			*cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
- 	}
--	/* p2p might require that "if-events" get processed by fweh. So
--	 * activate the already registered event handlers now and activate
--	 * the rest when initialization has completed. drvr->config needs to
--	 * be assigned before activating events.
--	 */
--	drvr->config = cfg;
-+
- 	err = brcmf_fweh_activate_events(ifp);
- 	if (err) {
- 		brcmf_err("FWEH activation failed (%d)\n", err);
-@@ -7043,8 +7037,7 @@ priv_out:
- 	ifp->vif = NULL;
- wiphy_out:
- 	brcmf_free_wiphy(wiphy);
--ops_out:
--	kfree(ops);
-+	kfree(cfg);
- 	return NULL;
- }
- 
-@@ -7059,4 +7052,5 @@ void brcmf_cfg80211_detach(struct brcmf_
- 	kfree(cfg->ops);
- 	wl_deinit_priv(cfg);
- 	brcmf_free_wiphy(cfg->wiphy);
-+	kfree(cfg);
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
-@@ -355,20 +355,24 @@ static inline struct wiphy *cfg_to_wiphy
- 
- static inline struct brcmf_cfg80211_info *wiphy_to_cfg(struct wiphy *w)
- {
--	return (struct brcmf_cfg80211_info *)(wiphy_priv(w));
-+	struct brcmf_pub *drvr = wiphy_priv(w);
-+	return drvr->config;
- }
- 
- static inline struct brcmf_cfg80211_info *wdev_to_cfg(struct wireless_dev *wd)
- {
--	return (struct brcmf_cfg80211_info *)(wdev_priv(wd));
-+	return wiphy_to_cfg(wd->wiphy);
-+}
-+
-+static inline struct brcmf_cfg80211_vif *wdev_to_vif(struct wireless_dev *wdev)
-+{
-+	return container_of(wdev, struct brcmf_cfg80211_vif, wdev);
- }
- 
- static inline
- struct net_device *cfg_to_ndev(struct brcmf_cfg80211_info *cfg)
- {
--	struct brcmf_cfg80211_vif *vif;
--	vif = list_first_entry(&cfg->vif_list, struct brcmf_cfg80211_vif, list);
--	return vif->wdev.netdev;
-+	return brcmf_get_ifp(cfg->pub, 0)->ndev;
- }
- 
- static inline struct brcmf_cfg80211_info *ndev_to_cfg(struct net_device *ndev)
-@@ -395,11 +399,12 @@ brcmf_cfg80211_connect_info *cfg_to_conn
- }
- 
- struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
--						  struct device *busdev,
-+						  struct cfg80211_ops *ops,
- 						  bool p2pdev_forced);
- void brcmf_cfg80211_detach(struct brcmf_cfg80211_info *cfg);
- s32 brcmf_cfg80211_up(struct net_device *ndev);
- s32 brcmf_cfg80211_down(struct net_device *ndev);
-+struct cfg80211_ops *brcmf_cfg80211_get_ops(void);
- enum nl80211_iftype brcmf_cfg80211_get_iftype(struct brcmf_if *ifp);
- 
- struct brcmf_cfg80211_vif *brcmf_alloc_vif(struct brcmf_cfg80211_info *cfg,
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -252,6 +252,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 		brcmf_err("Retreiving cur_etheraddr failed, %d\n", err);
- 		goto done;
- 	}
-+	memcpy(ifp->drvr->wiphy->perm_addr, ifp->drvr->mac, ETH_ALEN);
- 	memcpy(ifp->drvr->mac, ifp->mac_addr, sizeof(ifp->drvr->mac));
- 
- 	bus = ifp->drvr->bus_if;
-@@ -279,6 +280,7 @@ int brcmf_c_preinit_dcmds(struct brcmf_i
- 		ri->chippkg = le32_to_cpu(revinfo.chippkg);
- 		ri->nvramrev = le32_to_cpu(revinfo.nvramrev);
- 
-+		/* use revinfo if not known yet */
- 		if (!bus->chip) {
- 			bus->chip = le32_to_cpu(revinfo.chipnum);
- 			bus->chiprev = le32_to_cpu(revinfo.chiprev);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1021,7 +1021,7 @@ static int brcmf_revinfo_read(struct seq
- 	return 0;
- }
- 
--static int brcmf_bus_started(struct brcmf_pub *drvr)
-+static int brcmf_bus_started(struct brcmf_pub *drvr, struct cfg80211_ops *ops)
- {
- 	int ret = -1;
- 	struct brcmf_bus *bus_if = drvr->bus_if;
-@@ -1060,7 +1060,7 @@ static int brcmf_bus_started(struct brcm
- 
- 	brcmf_proto_add_if(drvr, ifp);
- 
--	drvr->config = brcmf_cfg80211_attach(drvr, bus_if->dev,
-+	drvr->config = brcmf_cfg80211_attach(drvr, ops,
- 					     drvr->settings->p2p_enable);
- 	if (drvr->config == NULL) {
- 		ret = -ENOMEM;
-@@ -1115,17 +1115,26 @@ fail:
- 
- int brcmf_attach(struct device *dev, struct brcmf_mp_device *settings)
- {
-+	struct wiphy *wiphy;
-+	struct cfg80211_ops *ops;
- 	struct brcmf_pub *drvr = NULL;
- 	int ret = 0;
- 	int i;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
--	/* Allocate primary brcmf_info */
--	drvr = kzalloc(sizeof(*drvr), GFP_ATOMIC);
--	if (!drvr)
-+	ops = brcmf_cfg80211_get_ops();
-+	if (!ops)
- 		return -ENOMEM;
- 
-+	wiphy = wiphy_new(ops, sizeof(*drvr));
-+	if (!wiphy)
-+		return -ENOMEM;
-+
-+	set_wiphy_dev(wiphy, dev);
-+	drvr = wiphy_priv(wiphy);
-+	drvr->wiphy = wiphy;
-+
- 	for (i = 0; i < ARRAY_SIZE(drvr->if2bss); i++)
- 		drvr->if2bss[i] = BRCMF_BSSIDX_INVALID;
- 
-@@ -1154,15 +1163,18 @@ int brcmf_attach(struct device *dev, str
- 	/* attach firmware event handler */
- 	brcmf_fweh_attach(drvr);
- 
--	ret = brcmf_bus_started(drvr);
-+	ret = brcmf_bus_started(drvr, ops);
- 	if (ret != 0) {
- 		brcmf_err("dongle is not responding: err=%d\n", ret);
- 		goto fail;
- 	}
-+
-+	drvr->config->ops = ops;
- 	return 0;
- 
- fail:
- 	brcmf_detach(dev);
-+	kfree(ops);
- 
- 	return ret;
- }
-@@ -1220,6 +1232,7 @@ void brcmf_detach(struct device *dev)
- 		brcmf_remove_interface(drvr->iflist[i], false);
- 
- 	brcmf_cfg80211_detach(drvr->config);
-+	drvr->config = NULL;
- 
- 	brcmf_bus_stop(drvr->bus_if);
- 
-@@ -1227,7 +1240,7 @@ void brcmf_detach(struct device *dev)
- 
- 	brcmf_debug_detach(drvr);
- 	bus_if->drvr = NULL;
--	kfree(drvr);
-+	wiphy_free(drvr->wiphy);
- }
- 
- s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len)
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.h
-@@ -107,6 +107,7 @@ struct brcmf_pub {
- 	/* Linkage ponters */
- 	struct brcmf_bus *bus_if;
- 	struct brcmf_proto *proto;
-+	struct wiphy *wiphy;
- 	struct brcmf_cfg80211_info *config;
- 
- 	/* Internal brcmf items */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-@@ -2229,7 +2229,7 @@ fail:
-  */
- int brcmf_p2p_del_vif(struct wiphy *wiphy, struct wireless_dev *wdev)
- {
--	struct brcmf_cfg80211_info *cfg = wiphy_priv(wiphy);
-+	struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
- 	struct brcmf_p2p_info *p2p = &cfg->p2p;
- 	struct brcmf_cfg80211_vif *vif;
- 	enum nl80211_iftype iftype;

+ 0 - 349
package/kernel/mac80211/patches/327-v4.17-0005-brcmfmac-use-wiphy-debugfs-dir-entry.patch

@@ -1,349 +0,0 @@
-From 34789d0cf682c643862792750a06c31ccf016cbc Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:24 +0100
-Subject: [PATCH] brcmfmac: use wiphy debugfs dir entry
-
-The driver used to create a brcmfmac dir entry at the top level
-debugfs mount point. This moves the debugfs entries into the
-wiphy debugfs dir entry.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../wireless/broadcom/brcm80211/brcmfmac/bcdc.c    |  6 ++++
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  |  5 ---
- .../wireless/broadcom/brcm80211/brcmfmac/core.c    | 11 +++---
- .../wireless/broadcom/brcm80211/brcmfmac/debug.c   | 42 ++--------------------
- .../wireless/broadcom/brcm80211/brcmfmac/debug.h   | 17 ---------
- .../wireless/broadcom/brcm80211/brcmfmac/feature.c |  3 ++
- .../wireless/broadcom/brcm80211/brcmfmac/feature.h |  7 ++++
- .../broadcom/brcm80211/brcmfmac/fwsignal.c         | 11 +++---
- .../broadcom/brcm80211/brcmfmac/fwsignal.h         |  1 +
- .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c  |  8 +++--
- .../wireless/broadcom/brcm80211/brcmfmac/proto.c   |  3 +-
- .../wireless/broadcom/brcm80211/brcmfmac/proto.h   |  7 ++++
- 12 files changed, 47 insertions(+), 74 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
-@@ -445,6 +445,11 @@ brcmf_proto_bcdc_init_done(struct brcmf_
- 	return 0;
- }
- 
-+static void brcmf_proto_bcdc_debugfs_create(struct brcmf_pub *drvr)
-+{
-+	brcmf_fws_debugfs_create(drvr);
-+}
-+
- int brcmf_proto_bcdc_attach(struct brcmf_pub *drvr)
- {
- 	struct brcmf_bcdc *bcdc;
-@@ -472,6 +477,7 @@ int brcmf_proto_bcdc_attach(struct brcmf
- 	drvr->proto->del_if = brcmf_proto_bcdc_del_if;
- 	drvr->proto->reset_if = brcmf_proto_bcdc_reset_if;
- 	drvr->proto->init_done = brcmf_proto_bcdc_init_done;
-+	drvr->proto->debugfs_create = brcmf_proto_bcdc_debugfs_create;
- 	drvr->proto->pd = bcdc;
- 
- 	drvr->hdrlen += BCDC_HEADER_LEN + BRCMF_PROT_FW_SIGNAL_MAX_TXBYTES;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -529,9 +529,6 @@ static int __init brcmfmac_module_init(v
- {
- 	int err;
- 
--	/* Initialize debug system first */
--	brcmf_debugfs_init();
--
- 	/* Get the platform data (if available) for our devices */
- 	err = platform_driver_probe(&brcmf_pd, brcmf_common_pd_probe);
- 	if (err == -ENODEV)
-@@ -543,7 +540,6 @@ static int __init brcmfmac_module_init(v
- 	/* Continue the initialization by registering the different busses */
- 	err = brcmf_core_init();
- 	if (err) {
--		brcmf_debugfs_exit();
- 		if (brcmfmac_pdata)
- 			platform_driver_unregister(&brcmf_pd);
- 	}
-@@ -556,7 +552,6 @@ static void __exit brcmfmac_module_exit(
- 	brcmf_core_exit();
- 	if (brcmfmac_pdata)
- 		platform_driver_unregister(&brcmf_pd);
--	brcmf_debugfs_exit();
- }
- 
- module_init(brcmfmac_module_init);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
-@@ -1050,8 +1050,6 @@ static int brcmf_bus_started(struct brcm
- 	if (ret < 0)
- 		goto fail;
- 
--	brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
--
- 	brcmf_feat_attach(drvr);
- 
- 	ret = brcmf_proto_init_done(drvr);
-@@ -1094,6 +1092,11 @@ static int brcmf_bus_started(struct brcm
- #endif
- #endif /* CONFIG_INET */
- 
-+	/* populate debugfs */
-+	brcmf_debugfs_add_entry(drvr, "revinfo", brcmf_revinfo_read);
-+	brcmf_feat_debugfs_create(drvr);
-+	brcmf_proto_debugfs_create(drvr);
-+
- 	return 0;
- 
- fail:
-@@ -1146,9 +1149,6 @@ int brcmf_attach(struct device *dev, str
- 	drvr->bus_if->drvr = drvr;
- 	drvr->settings = settings;
- 
--	/* attach debug facilities */
--	brcmf_debug_attach(drvr);
--
- 	/* Attach and link in the protocol */
- 	ret = brcmf_proto_attach(drvr);
- 	if (ret != 0) {
-@@ -1238,7 +1238,6 @@ void brcmf_detach(struct device *dev)
- 
- 	brcmf_proto_detach(drvr);
- 
--	brcmf_debug_detach(drvr);
- 	bus_if->drvr = NULL;
- 	wiphy_free(drvr->wiphy);
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.c
-@@ -25,8 +25,6 @@
- #include "fweh.h"
- #include "debug.h"
- 
--static struct dentry *root_folder;
--
- int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
- 			       size_t len)
- {
-@@ -54,44 +52,9 @@ int brcmf_debug_create_memdump(struct br
- 	return 0;
- }
- 
--void brcmf_debugfs_init(void)
--{
--	root_folder = debugfs_create_dir(KBUILD_MODNAME, NULL);
--	if (IS_ERR(root_folder))
--		root_folder = NULL;
--}
--
--void brcmf_debugfs_exit(void)
--{
--	if (!root_folder)
--		return;
--
--	debugfs_remove_recursive(root_folder);
--	root_folder = NULL;
--}
--
--int brcmf_debug_attach(struct brcmf_pub *drvr)
--{
--	struct device *dev = drvr->bus_if->dev;
--
--	if (!root_folder)
--		return -ENODEV;
--
--	drvr->dbgfs_dir = debugfs_create_dir(dev_name(dev), root_folder);
--	return PTR_ERR_OR_ZERO(drvr->dbgfs_dir);
--}
--
--void brcmf_debug_detach(struct brcmf_pub *drvr)
--{
--	brcmf_fweh_unregister(drvr, BRCMF_E_PSM_WATCHDOG);
--
--	if (!IS_ERR_OR_NULL(drvr->dbgfs_dir))
--		debugfs_remove_recursive(drvr->dbgfs_dir);
--}
--
- struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr)
- {
--	return drvr->dbgfs_dir;
-+	return drvr->wiphy->debugfsdir;
- }
- 
- int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
-@@ -99,7 +62,8 @@ int brcmf_debugfs_add_entry(struct brcmf
- {
- 	struct dentry *e;
- 
-+	WARN(!drvr->wiphy->debugfsdir, "wiphy not (yet) registered\n");
- 	e = debugfs_create_devm_seqfile(drvr->bus_if->dev, fn,
--					drvr->dbgfs_dir, read_fn);
-+					drvr->wiphy->debugfsdir, read_fn);
- 	return PTR_ERR_OR_ZERO(e);
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/debug.h
-@@ -113,29 +113,12 @@ extern int brcmf_msg_level;
- struct brcmf_bus;
- struct brcmf_pub;
- #ifdef DEBUG
--void brcmf_debugfs_init(void);
--void brcmf_debugfs_exit(void);
--int brcmf_debug_attach(struct brcmf_pub *drvr);
--void brcmf_debug_detach(struct brcmf_pub *drvr);
- struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr);
- int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
- 			    int (*read_fn)(struct seq_file *seq, void *data));
- int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data,
- 			       size_t len);
- #else
--static inline void brcmf_debugfs_init(void)
--{
--}
--static inline void brcmf_debugfs_exit(void)
--{
--}
--static inline int brcmf_debug_attach(struct brcmf_pub *drvr)
--{
--	return 0;
--}
--static inline void brcmf_debug_detach(struct brcmf_pub *drvr)
--{
--}
- static inline
- int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn,
- 			    int (*read_fn)(struct seq_file *seq, void *data))
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
-@@ -228,7 +228,10 @@ void brcmf_feat_attach(struct brcmf_pub
- 		/* no quirks */
- 		break;
- 	}
-+}
- 
-+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr)
-+{
- 	brcmf_debugfs_add_entry(drvr, "features", brcmf_feat_debugfs_read);
- }
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.h
-@@ -90,6 +90,13 @@ enum brcmf_feat_quirk {
- void brcmf_feat_attach(struct brcmf_pub *drvr);
- 
- /**
-+ * brcmf_feat_debugfs_create() - create debugfs entries.
-+ *
-+ * @drvr: driver instance.
-+ */
-+void brcmf_feat_debugfs_create(struct brcmf_pub *drvr);
-+
-+/**
-  * brcmf_feat_is_enabled() - query feature.
-  *
-  * @ifp: interface instance.
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
-@@ -2399,10 +2399,6 @@ struct brcmf_fws_info *brcmf_fws_attach(
- 	brcmu_pktq_init(&fws->desc.other.psq, BRCMF_FWS_PSQ_PREC_COUNT,
- 			BRCMF_FWS_PSQ_LEN);
- 
--	/* create debugfs file for statistics */
--	brcmf_debugfs_add_entry(drvr, "fws_stats",
--				brcmf_debugfs_fws_stats_read);
--
- 	brcmf_dbg(INFO, "%s bdcv2 tlv signaling [%x]\n",
- 		  fws->fw_signals ? "enabled" : "disabled", tlv);
- 	return fws;
-@@ -2429,6 +2425,13 @@ void brcmf_fws_detach(struct brcmf_fws_i
- 	kfree(fws);
- }
- 
-+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr)
-+{
-+	/* create debugfs file for statistics */
-+	brcmf_debugfs_add_entry(drvr, "fws_stats",
-+				brcmf_debugfs_fws_stats_read);
-+}
-+
- bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws)
- {
- 	return !fws->avoid_queueing;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
-@@ -20,6 +20,7 @@
- 
- struct brcmf_fws_info *brcmf_fws_attach(struct brcmf_pub *drvr);
- void brcmf_fws_detach(struct brcmf_fws_info *fws);
-+void brcmf_fws_debugfs_create(struct brcmf_pub *drvr);
- bool brcmf_fws_queue_skbs(struct brcmf_fws_info *fws);
- bool brcmf_fws_fc_active(struct brcmf_fws_info *fws);
- void brcmf_fws_hdrpull(struct brcmf_if *ifp, s16 siglen, struct sk_buff *skb);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/msgbuf.c
-@@ -1418,6 +1418,11 @@ static int brcmf_msgbuf_stats_read(struc
- }
- #endif
- 
-+static void brcmf_msgbuf_debugfs_create(struct brcmf_pub *drvr)
-+{
-+	brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
-+}
-+
- int brcmf_proto_msgbuf_attach(struct brcmf_pub *drvr)
- {
- 	struct brcmf_bus_msgbuf *if_msgbuf;
-@@ -1472,6 +1477,7 @@ int brcmf_proto_msgbuf_attach(struct brc
- 	drvr->proto->delete_peer = brcmf_msgbuf_delete_peer;
- 	drvr->proto->add_tdls_peer = brcmf_msgbuf_add_tdls_peer;
- 	drvr->proto->rxreorder = brcmf_msgbuf_rxreorder;
-+	drvr->proto->debugfs_create = brcmf_msgbuf_debugfs_create;
- 	drvr->proto->pd = msgbuf;
- 
- 	init_waitqueue_head(&msgbuf->ioctl_resp_wait);
-@@ -1525,8 +1531,6 @@ int brcmf_proto_msgbuf_attach(struct brc
- 	spin_lock_init(&msgbuf->flowring_work_lock);
- 	INIT_LIST_HEAD(&msgbuf->work_queue);
- 
--	brcmf_debugfs_add_entry(drvr, "msgbuf_stats", brcmf_msgbuf_stats_read);
--
- 	return 0;
- 
- fail:
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.c
-@@ -54,7 +54,8 @@ int brcmf_proto_attach(struct brcmf_pub
- 	if (!proto->tx_queue_data || (proto->hdrpull == NULL) ||
- 	    (proto->query_dcmd == NULL) || (proto->set_dcmd == NULL) ||
- 	    (proto->configure_addr_mode == NULL) ||
--	    (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL)) {
-+	    (proto->delete_peer == NULL) || (proto->add_tdls_peer == NULL) ||
-+	    (proto->debugfs_create == NULL)) {
- 		brcmf_err("Not all proto handlers have been installed\n");
- 		goto fail;
- 	}
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/proto.h
-@@ -48,6 +48,7 @@ struct brcmf_proto {
- 	void (*del_if)(struct brcmf_if *ifp);
- 	void (*reset_if)(struct brcmf_if *ifp);
- 	int (*init_done)(struct brcmf_pub *drvr);
-+	void (*debugfs_create)(struct brcmf_pub *drvr);
- 	void *pd;
- };
- 
-@@ -156,4 +157,10 @@ brcmf_proto_init_done(struct brcmf_pub *
- 	return drvr->proto->init_done(drvr);
- }
- 
-+static inline void
-+brcmf_proto_debugfs_create(struct brcmf_pub *drvr)
-+{
-+	drvr->proto->debugfs_create(drvr);
-+}
-+
- #endif /* BRCMFMAC_PROTO_H */

+ 0 - 286
package/kernel/mac80211/patches/327-v4.17-0006-brcmfmac-derive-firmware-filenames-from-basename-map.patch

@@ -1,286 +0,0 @@
-From 41f573dbb534f14e62a4a5411f602c970cad1d77 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:25 +0100
-Subject: [PATCH] brcmfmac: derive firmware filenames from basename mapping
-
-Instead of defining individual filenames for firmware and nvram
-use a basename and derive the names from that.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/firmware.c         | 31 ++++++---
- .../broadcom/brcm80211/brcmfmac/firmware.h         | 24 ++-----
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 56 ++++++++---------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 73 +++++++++++-----------
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 10 +--
- 5 files changed, 96 insertions(+), 98 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -563,6 +563,13 @@ int brcmf_fw_get_firmwares(struct device
- 					   0);
- }
- 
-+static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
-+				   const char *fw_base, const char *extension)
-+{
-+	strlcat(fw_name, fw_base, BRCMF_FW_NAME_LEN);
-+	strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
-+}
-+
- int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
- 			      struct brcmf_firmware_mapping mapping_table[],
- 			      u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
-@@ -587,25 +594,31 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 
- 	/* check if firmware path is provided by module parameter */
- 	if (brcmf_mp_global.firmware_path[0] != '\0') {
--		strlcpy(fw_name, brcmf_mp_global.firmware_path,
--			BRCMF_FW_NAME_LEN);
--		if ((nvram_name) && (mapping_table[i].nvram))
-+		if (fw_name)
-+			strlcpy(fw_name, brcmf_mp_global.firmware_path,
-+				BRCMF_FW_NAME_LEN);
-+		if (nvram_name)
- 			strlcpy(nvram_name, brcmf_mp_global.firmware_path,
- 				BRCMF_FW_NAME_LEN);
- 
- 		end = brcmf_mp_global.firmware_path[
- 				strlen(brcmf_mp_global.firmware_path) - 1];
- 		if (end != '/') {
--			strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
--			if ((nvram_name) && (mapping_table[i].nvram))
-+			if (fw_name)
-+				strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
-+			if (nvram_name)
- 				strlcat(nvram_name, "/", BRCMF_FW_NAME_LEN);
- 		}
- 	}
--	strlcat(fw_name, mapping_table[i].fw, BRCMF_FW_NAME_LEN);
--	if ((nvram_name) && (mapping_table[i].nvram))
--		strlcat(nvram_name, mapping_table[i].nvram, BRCMF_FW_NAME_LEN);
- 
--	brcmf_info("using %s for chip %s\n", fw_name, chipname);
-+	brcmf_info("using %s for chip %s\n",
-+		   mapping_table[i].fw_base, chipname);
-+	if (fw_name)
-+		brcmf_fw_get_full_name(fw_name,
-+				       mapping_table[i].fw_base, ".bin");
-+	if (nvram_name)
-+		brcmf_fw_get_full_name(nvram_name,
-+				       mapping_table[i].fw_base, ".txt");
- 
- 	return 0;
- }
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-@@ -38,28 +38,16 @@
- struct brcmf_firmware_mapping {
- 	u32 chipid;
- 	u32 revmask;
--	const char *fw;
--	const char *nvram;
-+	const char *fw_base;
- };
- 
--#define BRCMF_FW_NVRAM_DEF(fw_nvram_name, fw, nvram) \
--static const char BRCM_ ## fw_nvram_name ## _FIRMWARE_NAME[] = \
--	BRCMF_FW_DEFAULT_PATH fw; \
--static const char BRCM_ ## fw_nvram_name ## _NVRAM_NAME[] = \
--	BRCMF_FW_DEFAULT_PATH nvram; \
--MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw);
--
--#define BRCMF_FW_DEF(fw_name, fw) \
--static const char BRCM_ ## fw_name ## _FIRMWARE_NAME[] = \
--	BRCMF_FW_DEFAULT_PATH fw; \
--MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw) \
--
--#define BRCMF_FW_NVRAM_ENTRY(chipid, mask, name) \
--	{ chipid, mask, \
--	  BRCM_ ## name ## _FIRMWARE_NAME, BRCM_ ## name ## _NVRAM_NAME }
-+#define BRCMF_FW_DEF(fw_name, fw_base) \
-+static const char BRCM_ ## fw_name ## _FIRMWARE_BASENAME[] = \
-+	BRCMF_FW_DEFAULT_PATH fw_base; \
-+MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw_base ".bin")
- 
- #define BRCMF_FW_ENTRY(chipid, mask, name) \
--	{ chipid, mask, BRCM_ ## name ## _FIRMWARE_NAME, NULL }
-+	{ chipid, mask, BRCM_ ## name ## _FIRMWARE_BASENAME }
- 
- int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
- 			      struct brcmf_firmware_mapping mapping_table[],
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -46,36 +46,36 @@ enum brcmf_pcie_state {
- 	BRCMFMAC_PCIE_STATE_UP
- };
- 
--BRCMF_FW_NVRAM_DEF(43602, "brcmfmac43602-pcie.bin", "brcmfmac43602-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4350, "brcmfmac4350-pcie.bin", "brcmfmac4350-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4350C, "brcmfmac4350c2-pcie.bin", "brcmfmac4350c2-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-pcie.bin", "brcmfmac4356-pcie.txt");
--BRCMF_FW_NVRAM_DEF(43570, "brcmfmac43570-pcie.bin", "brcmfmac43570-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4358, "brcmfmac4358-pcie.bin", "brcmfmac4358-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4359, "brcmfmac4359-pcie.bin", "brcmfmac4359-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4365B, "brcmfmac4365b-pcie.bin", "brcmfmac4365b-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4365C, "brcmfmac4365c-pcie.bin", "brcmfmac4365c-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4366B, "brcmfmac4366b-pcie.bin", "brcmfmac4366b-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4366C, "brcmfmac4366c-pcie.bin", "brcmfmac4366c-pcie.txt");
--BRCMF_FW_NVRAM_DEF(4371, "brcmfmac4371-pcie.bin", "brcmfmac4371-pcie.txt");
-+BRCMF_FW_DEF(43602, "brcmfmac43602-pcie");
-+BRCMF_FW_DEF(4350, "brcmfmac4350-pcie");
-+BRCMF_FW_DEF(4350C, "brcmfmac4350c2-pcie");
-+BRCMF_FW_DEF(4356, "brcmfmac4356-pcie");
-+BRCMF_FW_DEF(43570, "brcmfmac43570-pcie");
-+BRCMF_FW_DEF(4358, "brcmfmac4358-pcie");
-+BRCMF_FW_DEF(4359, "brcmfmac4359-pcie");
-+BRCMF_FW_DEF(4365B, "brcmfmac4365b-pcie");
-+BRCMF_FW_DEF(4365C, "brcmfmac4365c-pcie");
-+BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie");
-+BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
-+BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
- 
- static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFF00, 4350),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43525_CHIP_ID, 0xFFFFFFF0, 4365C),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43570),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43570_CHIP_ID, 0xFFFFFFFF, 43570),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4358_CHIP_ID, 0xFFFFFFFF, 4358),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4365_CHIP_ID, 0x0000000F, 4365B),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
-+	BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
-+	BRCMF_FW_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
-+	BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
-+	BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0xFFFFFF00, 4350),
-+	BRCMF_FW_ENTRY(BRCM_CC_43525_CHIP_ID, 0xFFFFFFF0, 4365C),
-+	BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
-+	BRCMF_FW_ENTRY(BRCM_CC_43567_CHIP_ID, 0xFFFFFFFF, 43570),
-+	BRCMF_FW_ENTRY(BRCM_CC_43569_CHIP_ID, 0xFFFFFFFF, 43570),
-+	BRCMF_FW_ENTRY(BRCM_CC_43570_CHIP_ID, 0xFFFFFFFF, 43570),
-+	BRCMF_FW_ENTRY(BRCM_CC_4358_CHIP_ID, 0xFFFFFFFF, 4358),
-+	BRCMF_FW_ENTRY(BRCM_CC_4359_CHIP_ID, 0xFFFFFFFF, 4359),
-+	BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0x0000000F, 4365B),
-+	BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
-+	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
-+	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
-+	BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
- };
- 
- #define BRCMF_PCIE_FW_UP_TIMEOUT		2000 /* msec */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -600,47 +600,44 @@ static const struct sdiod_drive_str sdio
- 	{4,  0x1}
- };
- 
--BRCMF_FW_NVRAM_DEF(43143, "brcmfmac43143-sdio.bin", "brcmfmac43143-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43241B0, "brcmfmac43241b0-sdio.bin",
--		   "brcmfmac43241b0-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43241B4, "brcmfmac43241b4-sdio.bin",
--		   "brcmfmac43241b4-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43241B5, "brcmfmac43241b5-sdio.bin",
--		   "brcmfmac43241b5-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4329, "brcmfmac4329-sdio.bin", "brcmfmac4329-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4330, "brcmfmac4330-sdio.bin", "brcmfmac4330-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4334, "brcmfmac4334-sdio.bin", "brcmfmac4334-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43340, "brcmfmac43340-sdio.bin", "brcmfmac43340-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4335, "brcmfmac4335-sdio.bin", "brcmfmac4335-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43362, "brcmfmac43362-sdio.bin", "brcmfmac43362-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4339, "brcmfmac4339-sdio.bin", "brcmfmac4339-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43430A0, "brcmfmac43430a0-sdio.bin", "brcmfmac43430a0-sdio.txt");
-+BRCMF_FW_DEF(43143, "brcmfmac43143-sdio");
-+BRCMF_FW_DEF(43241B0, "brcmfmac43241b0-sdio");
-+BRCMF_FW_DEF(43241B4, "brcmfmac43241b4-sdio");
-+BRCMF_FW_DEF(43241B5, "brcmfmac43241b5-sdio");
-+BRCMF_FW_DEF(4329, "brcmfmac4329-sdio");
-+BRCMF_FW_DEF(4330, "brcmfmac4330-sdio");
-+BRCMF_FW_DEF(4334, "brcmfmac4334-sdio");
-+BRCMF_FW_DEF(43340, "brcmfmac43340-sdio");
-+BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
-+BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
-+BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
-+BRCMF_FW_DEF(43430A0, "brcmfmac43430a0-sdio");
- /* Note the names are not postfixed with a1 for backward compatibility */
--BRCMF_FW_NVRAM_DEF(43430A1, "brcmfmac43430-sdio.bin", "brcmfmac43430-sdio.txt");
--BRCMF_FW_NVRAM_DEF(43455, "brcmfmac43455-sdio.bin", "brcmfmac43455-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4354, "brcmfmac4354-sdio.bin", "brcmfmac4354-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4356, "brcmfmac4356-sdio.bin", "brcmfmac4356-sdio.txt");
--BRCMF_FW_NVRAM_DEF(4373, "brcmfmac4373-sdio.bin", "brcmfmac4373-sdio.txt");
-+BRCMF_FW_DEF(43430A1, "brcmfmac43430-sdio");
-+BRCMF_FW_DEF(43455, "brcmfmac43455-sdio");
-+BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
-+BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
-+BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
- 
- static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
--	BRCMF_FW_NVRAM_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
--	BRCMF_FW_NVRAM_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
-+	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
-+	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
-+	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
-+	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0xFFFFFFC0, 43241B5),
-+	BRCMF_FW_ENTRY(BRCM_CC_4329_CHIP_ID, 0xFFFFFFFF, 4329),
-+	BRCMF_FW_ENTRY(BRCM_CC_4330_CHIP_ID, 0xFFFFFFFF, 4330),
-+	BRCMF_FW_ENTRY(BRCM_CC_4334_CHIP_ID, 0xFFFFFFFF, 4334),
-+	BRCMF_FW_ENTRY(BRCM_CC_43340_CHIP_ID, 0xFFFFFFFF, 43340),
-+	BRCMF_FW_ENTRY(BRCM_CC_43341_CHIP_ID, 0xFFFFFFFF, 43340),
-+	BRCMF_FW_ENTRY(BRCM_CC_4335_CHIP_ID, 0xFFFFFFFF, 4335),
-+	BRCMF_FW_ENTRY(BRCM_CC_43362_CHIP_ID, 0xFFFFFFFE, 43362),
-+	BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
-+	BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
-+	BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFE, 43430A1),
-+	BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFFC0, 43455),
-+	BRCMF_FW_ENTRY(BRCM_CC_4354_CHIP_ID, 0xFFFFFFFF, 4354),
-+	BRCMF_FW_ENTRY(BRCM_CC_4356_CHIP_ID, 0xFFFFFFFF, 4356),
-+	BRCMF_FW_ENTRY(CY_CC_4373_CHIP_ID, 0xFFFFFFFF, 4373)
- };
- 
- static void pkt_align(struct sk_buff *p, int len, int align)
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -46,11 +46,11 @@
- #define BRCMF_USB_CBCTL_READ		1
- #define BRCMF_USB_MAX_PKT_SIZE		1600
- 
--BRCMF_FW_DEF(43143, "brcmfmac43143.bin");
--BRCMF_FW_DEF(43236B, "brcmfmac43236b.bin");
--BRCMF_FW_DEF(43242A, "brcmfmac43242a.bin");
--BRCMF_FW_DEF(43569, "brcmfmac43569.bin");
--BRCMF_FW_DEF(4373, "brcmfmac4373.bin");
-+BRCMF_FW_DEF(43143, "brcmfmac43143");
-+BRCMF_FW_DEF(43236B, "brcmfmac43236b");
-+BRCMF_FW_DEF(43242A, "brcmfmac43242a");
-+BRCMF_FW_DEF(43569, "brcmfmac43569");
-+BRCMF_FW_DEF(4373, "brcmfmac4373");
- 
- static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
- 	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),

+ 0 - 574
package/kernel/mac80211/patches/327-v4.17-0007-brcmfmac-pass-struct-in-brcmf_fw_get_firmwares.patch

@@ -1,574 +0,0 @@
-From d09ae51a4b676151edaf572bcd5f272b5532639f Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:26 +0100
-Subject: [PATCH] brcmfmac: pass struct in brcmf_fw_get_firmwares()
-
-Make the function brcmf_fw_get_firmwares() a bit more easy to extend
-using a structure to pass the request parameters.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/firmware.c         | 175 ++++++++++++++-------
- .../broadcom/brcm80211/brcmfmac/firmware.h         |  43 +++--
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    |  38 ++++-
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    |  32 +++-
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c |  43 ++++-
- 5 files changed, 245 insertions(+), 86 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -438,18 +438,31 @@ void brcmf_fw_nvram_free(void *nvram)
- 
- struct brcmf_fw {
- 	struct device *dev;
--	u16 flags;
--	const struct firmware *code;
--	const char *nvram_name;
--	u16 domain_nr;
--	u16 bus_nr;
--	void (*done)(struct device *dev, int err, const struct firmware *fw,
--		     void *nvram_image, u32 nvram_len);
-+	struct brcmf_fw_request *req;
-+	u32 curpos;
-+	void (*done)(struct device *dev, int err, struct brcmf_fw_request *req);
- };
- 
-+static void brcmf_fw_request_done(const struct firmware *fw, void *ctx);
-+
-+static void brcmf_fw_free_request(struct brcmf_fw_request *req)
-+{
-+	struct brcmf_fw_item *item;
-+	int i;
-+
-+	for (i = 0, item = &req->items[0]; i < req->n_items; i++, item++) {
-+		if (item->type == BRCMF_FW_TYPE_BINARY)
-+			release_firmware(item->binary);
-+		else if (item->type == BRCMF_FW_TYPE_NVRAM)
-+			brcmf_fw_nvram_free(item->nv_data.data);
-+	}
-+	kfree(req);
-+}
-+
- static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
- {
- 	struct brcmf_fw *fwctx = ctx;
-+	struct brcmf_fw_item *cur;
- 	u32 nvram_length = 0;
- 	void *nvram = NULL;
- 	u8 *data = NULL;
-@@ -457,83 +470,150 @@ static void brcmf_fw_request_nvram_done(
- 	bool raw_nvram;
- 
- 	brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
-+
-+	cur = &fwctx->req->items[fwctx->curpos];
-+
- 	if (fw && fw->data) {
- 		data = (u8 *)fw->data;
- 		data_len = fw->size;
- 		raw_nvram = false;
- 	} else {
- 		data = bcm47xx_nvram_get_contents(&data_len);
--		if (!data && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
-+		if (!data && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
- 			goto fail;
- 		raw_nvram = true;
- 	}
- 
- 	if (data)
- 		nvram = brcmf_fw_nvram_strip(data, data_len, &nvram_length,
--					     fwctx->domain_nr, fwctx->bus_nr);
-+					     fwctx->req->domain_nr,
-+					     fwctx->req->bus_nr);
- 
- 	if (raw_nvram)
- 		bcm47xx_nvram_release_contents(data);
- 	release_firmware(fw);
--	if (!nvram && !(fwctx->flags & BRCMF_FW_REQ_NV_OPTIONAL))
-+	if (!nvram && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
- 		goto fail;
- 
--	fwctx->done(fwctx->dev, 0, fwctx->code, nvram, nvram_length);
--	kfree(fwctx);
-+	brcmf_dbg(TRACE, "nvram %p len %d\n", nvram, nvram_length);
-+	cur->nv_data.data = nvram;
-+	cur->nv_data.len = nvram_length;
- 	return;
- 
- fail:
- 	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
--	release_firmware(fwctx->code);
--	fwctx->done(fwctx->dev, -ENOENT, NULL, NULL, 0);
-+	fwctx->done(fwctx->dev, -ENOENT, NULL);
-+	brcmf_fw_free_request(fwctx->req);
- 	kfree(fwctx);
- }
- 
--static void brcmf_fw_request_code_done(const struct firmware *fw, void *ctx)
-+static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
-+{
-+	struct brcmf_fw_item *cur;
-+	const struct firmware *fw = NULL;
-+	int ret;
-+
-+	cur = &fwctx->req->items[fwctx->curpos];
-+
-+	brcmf_dbg(TRACE, "%srequest for %s\n", async ? "async " : "",
-+		  cur->path);
-+
-+	if (async)
-+		ret = request_firmware_nowait(THIS_MODULE, true, cur->path,
-+					      fwctx->dev, GFP_KERNEL, fwctx,
-+					      brcmf_fw_request_done);
-+	else
-+		ret = request_firmware(&fw, cur->path, fwctx->dev);
-+
-+	if (ret < 0) {
-+		brcmf_fw_request_done(NULL, fwctx);
-+	} else if (!async && fw) {
-+		brcmf_dbg(TRACE, "firmware %s %sfound\n", cur->path,
-+			  fw ? "" : "not ");
-+		if (cur->type == BRCMF_FW_TYPE_BINARY)
-+			cur->binary = fw;
-+		else if (cur->type == BRCMF_FW_TYPE_NVRAM)
-+			brcmf_fw_request_nvram_done(fw, fwctx);
-+		else
-+			release_firmware(fw);
-+
-+		return -EAGAIN;
-+	}
-+	return 0;
-+}
-+
-+static void brcmf_fw_request_done(const struct firmware *fw, void *ctx)
- {
- 	struct brcmf_fw *fwctx = ctx;
-+	struct brcmf_fw_item *cur;
- 	int ret = 0;
- 
--	brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(fwctx->dev));
--	if (!fw) {
-+	cur = &fwctx->req->items[fwctx->curpos];
-+
-+	brcmf_dbg(TRACE, "enter: firmware %s %sfound\n", cur->path,
-+		  fw ? "" : "not ");
-+
-+	if (fw) {
-+		if (cur->type == BRCMF_FW_TYPE_BINARY)
-+			cur->binary = fw;
-+		else if (cur->type == BRCMF_FW_TYPE_NVRAM)
-+			brcmf_fw_request_nvram_done(fw, fwctx);
-+		else
-+			release_firmware(fw);
-+	} else if (cur->type == BRCMF_FW_TYPE_NVRAM) {
-+		brcmf_fw_request_nvram_done(NULL, fwctx);
-+	} else if (!(cur->flags & BRCMF_FW_REQF_OPTIONAL)) {
- 		ret = -ENOENT;
- 		goto fail;
- 	}
--	/* only requested code so done here */
--	if (!(fwctx->flags & BRCMF_FW_REQUEST_NVRAM))
--		goto done;
--
--	fwctx->code = fw;
--	ret = request_firmware_nowait(THIS_MODULE, true, fwctx->nvram_name,
--				      fwctx->dev, GFP_KERNEL, fwctx,
--				      brcmf_fw_request_nvram_done);
- 
--	/* pass NULL to nvram callback for bcm47xx fallback */
--	if (ret)
--		brcmf_fw_request_nvram_done(NULL, fwctx);
-+	do {
-+		if (++fwctx->curpos == fwctx->req->n_items) {
-+			ret = 0;
-+			goto done;
-+		}
-+
-+		ret = brcmf_fw_request_next_item(fwctx, false);
-+	} while (ret == -EAGAIN);
-+
- 	return;
- 
- fail:
--	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
-+	brcmf_dbg(TRACE, "failed err=%d: dev=%s, fw=%s\n", ret,
-+		  dev_name(fwctx->dev), cur->path);
-+	brcmf_fw_free_request(fwctx->req);
-+	fwctx->req = NULL;
- done:
--	fwctx->done(fwctx->dev, ret, fw, NULL, 0);
-+	fwctx->done(fwctx->dev, ret, fwctx->req);
- 	kfree(fwctx);
- }
- 
--int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
--				const char *code, const char *nvram,
--				void (*fw_cb)(struct device *dev, int err,
--					      const struct firmware *fw,
--					      void *nvram_image, u32 nvram_len),
--				u16 domain_nr, u16 bus_nr)
-+static bool brcmf_fw_request_is_valid(struct brcmf_fw_request *req)
-+{
-+	struct brcmf_fw_item *item;
-+	int i;
-+
-+	if (!req->n_items)
-+		return false;
-+
-+	for (i = 0, item = &req->items[0]; i < req->n_items; i++, item++) {
-+		if (!item->path)
-+			return false;
-+	}
-+	return true;
-+}
-+
-+int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req,
-+			   void (*fw_cb)(struct device *dev, int err,
-+					 struct brcmf_fw_request *req))
- {
- 	struct brcmf_fw *fwctx;
- 
- 	brcmf_dbg(TRACE, "enter: dev=%s\n", dev_name(dev));
--	if (!fw_cb || !code)
-+	if (!fw_cb)
- 		return -EINVAL;
- 
--	if ((flags & BRCMF_FW_REQUEST_NVRAM) && !nvram)
-+	if (!brcmf_fw_request_is_valid(req))
- 		return -EINVAL;
- 
- 	fwctx = kzalloc(sizeof(*fwctx), GFP_KERNEL);
-@@ -541,26 +621,11 @@ int brcmf_fw_get_firmwares_pcie(struct d
- 		return -ENOMEM;
- 
- 	fwctx->dev = dev;
--	fwctx->flags = flags;
-+	fwctx->req = req;
- 	fwctx->done = fw_cb;
--	if (flags & BRCMF_FW_REQUEST_NVRAM)
--		fwctx->nvram_name = nvram;
--	fwctx->domain_nr = domain_nr;
--	fwctx->bus_nr = bus_nr;
--
--	return request_firmware_nowait(THIS_MODULE, true, code, dev,
--				       GFP_KERNEL, fwctx,
--				       brcmf_fw_request_code_done);
--}
- 
--int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
--			   const char *code, const char *nvram,
--			   void (*fw_cb)(struct device *dev, int err,
--					 const struct firmware *fw,
--					 void *nvram_image, u32 nvram_len))
--{
--	return brcmf_fw_get_firmwares_pcie(dev, flags, code, nvram, fw_cb, 0,
--					   0);
-+	brcmf_fw_request_next_item(fwctx, true);
-+	return 0;
- }
- 
- static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-@@ -16,10 +16,7 @@
- #ifndef BRCMFMAC_FIRMWARE_H
- #define BRCMFMAC_FIRMWARE_H
- 
--#define BRCMF_FW_REQUEST		0x000F
--#define  BRCMF_FW_REQUEST_NVRAM		0x0001
--#define BRCMF_FW_REQ_FLAGS		0x00F0
--#define  BRCMF_FW_REQ_NV_OPTIONAL	0x0010
-+#define BRCMF_FW_REQF_OPTIONAL		0x0001
- 
- #define	BRCMF_FW_NAME_LEN		320
- 
-@@ -54,21 +51,39 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 			      u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
- 			      char nvram_name[BRCMF_FW_NAME_LEN]);
- void brcmf_fw_nvram_free(void *nvram);
-+
-+enum brcmf_fw_type {
-+	BRCMF_FW_TYPE_BINARY,
-+	BRCMF_FW_TYPE_NVRAM
-+};
-+
-+struct brcmf_fw_item {
-+	const char *path;
-+	enum brcmf_fw_type type;
-+	u16 flags;
-+	union {
-+		const struct firmware *binary;
-+		struct {
-+			void *data;
-+			u32 len;
-+		} nv_data;
-+	};
-+};
-+
-+struct brcmf_fw_request {
-+	u16 domain_nr;
-+	u16 bus_nr;
-+	u32 n_items;
-+	struct brcmf_fw_item items[0];
-+};
-+
- /*
-  * Request firmware(s) asynchronously. When the asynchronous request
-  * fails it will not use the callback, but call device_release_driver()
-  * instead which will call the driver .remove() callback.
-  */
--int brcmf_fw_get_firmwares_pcie(struct device *dev, u16 flags,
--				const char *code, const char *nvram,
--				void (*fw_cb)(struct device *dev, int err,
--					      const struct firmware *fw,
--					      void *nvram_image, u32 nvram_len),
--				u16 domain_nr, u16 bus_nr);
--int brcmf_fw_get_firmwares(struct device *dev, u16 flags,
--			   const char *code, const char *nvram,
-+int brcmf_fw_get_firmwares(struct device *dev, struct brcmf_fw_request *req,
- 			   void (*fw_cb)(struct device *dev, int err,
--					 const struct firmware *fw,
--					 void *nvram_image, u32 nvram_len));
-+					 struct brcmf_fw_request *req));
- 
- #endif /* BRCMFMAC_FIRMWARE_H */
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1651,15 +1651,19 @@ static const struct brcmf_buscore_ops br
- 	.write32 = brcmf_pcie_buscore_write32,
- };
- 
-+#define BRCMF_PCIE_FW_CODE	0
-+#define BRCMF_PCIE_FW_NVRAM	1
-+
- static void brcmf_pcie_setup(struct device *dev, int ret,
--			     const struct firmware *fw,
--			     void *nvram, u32 nvram_len)
-+			     struct brcmf_fw_request *fwreq)
- {
-+	const struct firmware *fw;
-+	void *nvram;
- 	struct brcmf_bus *bus;
- 	struct brcmf_pciedev *pcie_bus_dev;
- 	struct brcmf_pciedev_info *devinfo;
- 	struct brcmf_commonring **flowrings;
--	u32 i;
-+	u32 i, nvram_len;
- 
- 	/* check firmware loading result */
- 	if (ret)
-@@ -1670,6 +1674,11 @@ static void brcmf_pcie_setup(struct devi
- 	devinfo = pcie_bus_dev->devinfo;
- 	brcmf_pcie_attach(devinfo);
- 
-+	fw = fwreq->items[BRCMF_PCIE_FW_CODE].binary;
-+	nvram = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.data;
-+	nvram_len = fwreq->items[BRCMF_PCIE_FW_NVRAM].nv_data.len;
-+	kfree(fwreq);
-+
- 	/* Some of the firmwares have the size of the memory of the device
- 	 * defined inside the firmware. This is because part of the memory in
- 	 * the device is shared and the devision is determined by FW. Parse
-@@ -1730,6 +1739,7 @@ static int
- brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
- {
- 	int ret;
-+	struct brcmf_fw_request *fwreq;
- 	struct brcmf_pciedev_info *devinfo;
- 	struct brcmf_pciedev *pcie_bus_dev;
- 	struct brcmf_bus *bus;
-@@ -1800,12 +1810,26 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
- 	if (ret)
- 		goto fail_bus;
- 
--	ret = brcmf_fw_get_firmwares_pcie(bus->dev, BRCMF_FW_REQUEST_NVRAM |
--						    BRCMF_FW_REQ_NV_OPTIONAL,
--					  devinfo->fw_name, devinfo->nvram_name,
--					  brcmf_pcie_setup, domain_nr, bus_nr);
-+	fwreq = kzalloc(sizeof(*fwreq) + 2 * sizeof(struct brcmf_fw_item),
-+			GFP_KERNEL);
-+	if (!fwreq) {
-+		ret = -ENOMEM;
-+		goto fail_bus;
-+	}
-+
-+	fwreq->items[BRCMF_PCIE_FW_CODE].path = devinfo->fw_name;
-+	fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->items[BRCMF_PCIE_FW_NVRAM].path = devinfo->nvram_name;
-+	fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
-+	fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
-+	fwreq->n_items = 2;
-+	fwreq->domain_nr = domain_nr;
-+	fwreq->bus_nr = bus_nr;
-+	ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup);
- 	if (ret == 0)
- 		return 0;
-+
-+	kfree(fwreq);
- fail_bus:
- 	kfree(bus->msgbuf);
- 	kfree(bus);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4031,14 +4031,19 @@ static const struct brcmf_bus_ops brcmf_
- 	.get_fwname = brcmf_sdio_get_fwname,
- };
- 
-+#define BRCMF_SDIO_FW_CODE	0
-+#define BRCMF_SDIO_FW_NVRAM	1
-+
- static void brcmf_sdio_firmware_callback(struct device *dev, int err,
--					 const struct firmware *code,
--					 void *nvram, u32 nvram_len)
-+					 struct brcmf_fw_request *fwreq)
- {
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
- 	struct brcmf_sdio_dev *sdiod = bus_if->bus_priv.sdio;
- 	struct brcmf_sdio *bus = sdiod->bus;
- 	struct brcmf_core *core = bus->sdio_core;
-+	const struct firmware *code;
-+	void *nvram;
-+	u32 nvram_len;
- 	u8 saveclk;
- 
- 	brcmf_dbg(TRACE, "Enter: dev=%s, err=%d\n", dev_name(dev), err);
-@@ -4046,6 +4051,11 @@ static void brcmf_sdio_firmware_callback
- 	if (err)
- 		goto fail;
- 
-+	code = fwreq->items[BRCMF_SDIO_FW_CODE].binary;
-+	nvram = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.data;
-+	nvram_len = fwreq->items[BRCMF_SDIO_FW_NVRAM].nv_data.len;
-+	kfree(fwreq);
-+
- 	/* try to download image and nvram to the dongle */
- 	bus->alp_only = true;
- 	err = brcmf_sdio_download_firmware(bus, code, nvram, nvram_len);
-@@ -4150,6 +4160,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	int ret;
- 	struct brcmf_sdio *bus;
- 	struct workqueue_struct *wq;
-+	struct brcmf_fw_request *fwreq;
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
-@@ -4240,11 +4251,24 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 	if (ret)
- 		goto fail;
- 
--	ret = brcmf_fw_get_firmwares(sdiodev->dev, BRCMF_FW_REQUEST_NVRAM,
--				     sdiodev->fw_name, sdiodev->nvram_name,
-+	fwreq = kzalloc(sizeof(fwreq) + 2 * sizeof(struct brcmf_fw_item),
-+			GFP_KERNEL);
-+	if (!fwreq) {
-+		ret = -ENOMEM;
-+		goto fail;
-+	}
-+
-+	fwreq->items[BRCMF_SDIO_FW_CODE].path = sdiodev->fw_name;
-+	fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->items[BRCMF_SDIO_FW_NVRAM].path = sdiodev->nvram_name;
-+	fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
-+	fwreq->n_items = 2;
-+
-+	ret = brcmf_fw_get_firmwares(sdiodev->dev, fwreq,
- 				     brcmf_sdio_firmware_callback);
- 	if (ret != 0) {
- 		brcmf_err("async firmware request failed: %d\n", ret);
-+		kfree(fwreq);
- 		goto fail;
- 	}
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1155,18 +1155,23 @@ static const struct brcmf_bus_ops brcmf_
- 	.get_fwname = brcmf_usb_get_fwname,
- };
- 
-+#define BRCMF_USB_FW_CODE	0
-+
- static void brcmf_usb_probe_phase2(struct device *dev, int ret,
--				   const struct firmware *fw,
--				   void *nvram, u32 nvlen)
-+				   struct brcmf_fw_request *fwreq)
- {
- 	struct brcmf_bus *bus = dev_get_drvdata(dev);
- 	struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo;
-+	const struct firmware *fw;
- 
- 	if (ret)
- 		goto error;
- 
- 	brcmf_dbg(USB, "Start fw downloading\n");
- 
-+	fw = fwreq->items[BRCMF_USB_FW_CODE].binary;
-+	kfree(fwreq);
-+
- 	ret = check_file(fw->data);
- 	if (ret < 0) {
- 		brcmf_err("invalid firmware\n");
-@@ -1200,6 +1205,7 @@ static int brcmf_usb_probe_cb(struct brc
- 	struct brcmf_bus *bus = NULL;
- 	struct brcmf_usbdev *bus_pub = NULL;
- 	struct device *dev = devinfo->dev;
-+	struct brcmf_fw_request *fwreq;
- 	int ret;
- 
- 	brcmf_dbg(USB, "Enter\n");
-@@ -1250,11 +1256,22 @@ static int brcmf_usb_probe_cb(struct brc
- 	if (ret)
- 		goto fail;
- 
-+	fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
-+			GFP_KERNEL);
-+	if (!fwreq) {
-+		ret = -ENOMEM;
-+		goto fail;
-+	}
-+
-+	fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
-+	fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->n_items = 1;
-+
- 	/* request firmware here */
--	ret = brcmf_fw_get_firmwares(dev, 0, devinfo->fw_name, NULL,
--				     brcmf_usb_probe_phase2);
-+	ret = brcmf_fw_get_firmwares(dev, fwreq, brcmf_usb_probe_phase2);
- 	if (ret) {
- 		brcmf_err("firmware request failed: %d\n", ret);
-+		kfree(fwreq);
- 		goto fail;
- 	}
- 
-@@ -1447,11 +1464,25 @@ static int brcmf_usb_reset_resume(struct
- {
- 	struct usb_device *usb = interface_to_usbdev(intf);
- 	struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
-+	struct brcmf_fw_request *fwreq;
-+	int ret;
- 
- 	brcmf_dbg(USB, "Enter\n");
- 
--	return brcmf_fw_get_firmwares(&usb->dev, 0, devinfo->fw_name, NULL,
--				      brcmf_usb_probe_phase2);
-+	fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
-+			GFP_KERNEL);
-+	if (!fwreq)
-+		return -ENOMEM;
-+
-+	fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
-+	fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->n_items = 1;
-+
-+	ret = brcmf_fw_get_firmwares(&usb->dev, fwreq, brcmf_usb_probe_phase2);
-+	if (ret < 0)
-+		kfree(fwreq);
-+
-+	return ret;
- }
- 
- #define BRCMF_USB_DEVICE(dev_id)	\

+ 0 - 328
package/kernel/mac80211/patches/327-v4.17-0008-brcmfmac-introduce-brcmf_fw_alloc_request-function.patch

@@ -1,328 +0,0 @@
-From 2baa3aaee27f137b8db9a9224d0fe9b281d28e34 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:27 +0100
-Subject: [PATCH] brcmfmac: introduce brcmf_fw_alloc_request() function
-
-The function brcmf_fw_alloc_request() takes a list of required files
-and allocated the struct brcmf_fw_request instance accordingly. The
-request can be modified by the caller before being passed to the
-brcmf_fw_request_firmwares() function.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/firmware.c         | 58 ++++++++++++++++++++++
- .../broadcom/brcm80211/brcmfmac/firmware.h         | 11 ++++
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 58 ++++++++++++----------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 38 ++++++++------
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 42 +++++++++-------
- 5 files changed, 147 insertions(+), 60 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -688,3 +688,61 @@ int brcmf_fw_map_chip_to_name(u32 chip,
- 	return 0;
- }
- 
-+struct brcmf_fw_request *
-+brcmf_fw_alloc_request(u32 chip, u32 chiprev,
-+		       struct brcmf_firmware_mapping mapping_table[],
-+		       u32 table_size, struct brcmf_fw_name *fwnames,
-+		       u32 n_fwnames)
-+{
-+	struct brcmf_fw_request *fwreq;
-+	char chipname[12];
-+	const char *mp_path;
-+	u32 i, j;
-+	char end;
-+	size_t reqsz;
-+
-+	for (i = 0; i < table_size; i++) {
-+		if (mapping_table[i].chipid == chip &&
-+		    mapping_table[i].revmask & BIT(chiprev))
-+			break;
-+	}
-+
-+	if (i == table_size) {
-+		brcmf_err("Unknown chipid %d [%d]\n", chip, chiprev);
-+		return NULL;
-+	}
-+
-+	reqsz = sizeof(*fwreq) + n_fwnames * sizeof(struct brcmf_fw_item);
-+	fwreq = kzalloc(reqsz, GFP_KERNEL);
-+	if (!fwreq)
-+		return NULL;
-+
-+	brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
-+
-+	brcmf_info("using %s for chip %s\n",
-+		   mapping_table[i].fw_base, chipname);
-+
-+	mp_path = brcmf_mp_global.firmware_path;
-+	end = mp_path[strlen(mp_path) - 1];
-+	fwreq->n_items = n_fwnames;
-+
-+	for (j = 0; j < n_fwnames; j++) {
-+		fwreq->items[j].path = fwnames[j].path;
-+		/* check if firmware path is provided by module parameter */
-+		if (brcmf_mp_global.firmware_path[0] != '\0') {
-+			strlcpy(fwnames[j].path, mp_path,
-+				BRCMF_FW_NAME_LEN);
-+
-+			if (end != '/') {
-+				strlcat(fwnames[j].path, "/",
-+					BRCMF_FW_NAME_LEN);
-+			}
-+		}
-+		brcmf_fw_get_full_name(fwnames[j].path,
-+				       mapping_table[i].fw_base,
-+				       fwnames[j].extension);
-+		fwreq->items[j].path = fwnames[j].path;
-+	}
-+
-+	return fwreq;
-+}
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-@@ -77,6 +77,17 @@ struct brcmf_fw_request {
- 	struct brcmf_fw_item items[0];
- };
- 
-+struct brcmf_fw_name {
-+	const char *extension;
-+	char *path;
-+};
-+
-+struct brcmf_fw_request *
-+brcmf_fw_alloc_request(u32 chip, u32 chiprev,
-+		       struct brcmf_firmware_mapping mapping_table[],
-+		       u32 table_size, struct brcmf_fw_name *fwnames,
-+		       u32 n_fwnames);
-+
- /*
-  * Request firmware(s) asynchronously. When the asynchronous request
-  * fails it will not use the callback, but call device_release_driver()
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1735,6 +1735,31 @@ fail:
- 	device_release_driver(dev);
- }
- 
-+static struct brcmf_fw_request *
-+brcmf_pcie_prepare_fw_request(struct brcmf_pciedev_info *devinfo)
-+{
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ".bin", devinfo->fw_name },
-+		{ ".txt", devinfo->nvram_name },
-+	};
-+
-+	fwreq = brcmf_fw_alloc_request(devinfo->ci->chip, devinfo->ci->chiprev,
-+				       brcmf_pcie_fwnames,
-+				       ARRAY_SIZE(brcmf_pcie_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return NULL;
-+
-+	fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
-+	fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
-+	fwreq->domain_nr = pci_domain_nr(devinfo->pdev->bus);
-+	fwreq->bus_nr = devinfo->pdev->bus->number;
-+
-+	return fwreq;
-+}
-+
- static int
- brcmf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)
- {
-@@ -1743,13 +1768,8 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
- 	struct brcmf_pciedev_info *devinfo;
- 	struct brcmf_pciedev *pcie_bus_dev;
- 	struct brcmf_bus *bus;
--	u16 domain_nr;
--	u16 bus_nr;
- 
--	domain_nr = pci_domain_nr(pdev->bus) + 1;
--	bus_nr = pdev->bus->number;
--	brcmf_dbg(PCIE, "Enter %x:%x (%d/%d)\n", pdev->vendor, pdev->device,
--		  domain_nr, bus_nr);
-+	brcmf_dbg(PCIE, "Enter %x:%x\n", pdev->vendor, pdev->device);
- 
- 	ret = -ENOMEM;
- 	devinfo = kzalloc(sizeof(*devinfo), GFP_KERNEL);
-@@ -1803,33 +1823,19 @@ brcmf_pcie_probe(struct pci_dev *pdev, c
- 	bus->wowl_supported = pci_pme_capable(pdev, PCI_D3hot);
- 	dev_set_drvdata(&pdev->dev, bus);
- 
--	ret = brcmf_fw_map_chip_to_name(devinfo->ci->chip, devinfo->ci->chiprev,
--					brcmf_pcie_fwnames,
--					ARRAY_SIZE(brcmf_pcie_fwnames),
--					devinfo->fw_name, devinfo->nvram_name);
--	if (ret)
--		goto fail_bus;
--
--	fwreq = kzalloc(sizeof(*fwreq) + 2 * sizeof(struct brcmf_fw_item),
--			GFP_KERNEL);
-+	fwreq = brcmf_pcie_prepare_fw_request(devinfo);
- 	if (!fwreq) {
- 		ret = -ENOMEM;
- 		goto fail_bus;
- 	}
- 
--	fwreq->items[BRCMF_PCIE_FW_CODE].path = devinfo->fw_name;
--	fwreq->items[BRCMF_PCIE_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
--	fwreq->items[BRCMF_PCIE_FW_NVRAM].path = devinfo->nvram_name;
--	fwreq->items[BRCMF_PCIE_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
--	fwreq->items[BRCMF_PCIE_FW_NVRAM].flags = BRCMF_FW_REQF_OPTIONAL;
--	fwreq->n_items = 2;
--	fwreq->domain_nr = domain_nr;
--	fwreq->bus_nr = bus_nr;
- 	ret = brcmf_fw_get_firmwares(bus->dev, fwreq, brcmf_pcie_setup);
--	if (ret == 0)
--		return 0;
-+	if (ret < 0) {
-+		kfree(fwreq);
-+		goto fail_bus;
-+	}
-+	return 0;
- 
--	kfree(fwreq);
- fail_bus:
- 	kfree(bus->msgbuf);
- 	kfree(bus);
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4155,6 +4155,28 @@ fail:
- 	device_release_driver(dev);
- }
- 
-+static struct brcmf_fw_request *
-+brcmf_sdio_prepare_fw_request(struct brcmf_sdio *bus)
-+{
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ".bin", bus->sdiodev->fw_name },
-+		{ ".txt", bus->sdiodev->nvram_name },
-+	};
-+
-+	fwreq = brcmf_fw_alloc_request(bus->ci->chip, bus->ci->chiprev,
-+				       brcmf_sdio_fwnames,
-+				       ARRAY_SIZE(brcmf_sdio_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return NULL;
-+
-+	fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+	fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
-+
-+	return fwreq;
-+}
-+
- struct brcmf_sdio *brcmf_sdio_probe(struct brcmf_sdio_dev *sdiodev)
- {
- 	int ret;
-@@ -4244,26 +4266,12 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- 
- 	brcmf_dbg(INFO, "completed!!\n");
- 
--	ret = brcmf_fw_map_chip_to_name(bus->ci->chip, bus->ci->chiprev,
--					brcmf_sdio_fwnames,
--					ARRAY_SIZE(brcmf_sdio_fwnames),
--					sdiodev->fw_name, sdiodev->nvram_name);
--	if (ret)
--		goto fail;
--
--	fwreq = kzalloc(sizeof(fwreq) + 2 * sizeof(struct brcmf_fw_item),
--			GFP_KERNEL);
-+	fwreq = brcmf_sdio_prepare_fw_request(bus);
- 	if (!fwreq) {
- 		ret = -ENOMEM;
- 		goto fail;
- 	}
- 
--	fwreq->items[BRCMF_SDIO_FW_CODE].path = sdiodev->fw_name;
--	fwreq->items[BRCMF_SDIO_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
--	fwreq->items[BRCMF_SDIO_FW_NVRAM].path = sdiodev->nvram_name;
--	fwreq->items[BRCMF_SDIO_FW_NVRAM].type = BRCMF_FW_TYPE_NVRAM;
--	fwreq->n_items = 2;
--
- 	ret = brcmf_fw_get_firmwares(sdiodev->dev, fwreq,
- 				     brcmf_sdio_firmware_callback);
- 	if (ret != 0) {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1200,6 +1200,27 @@ error:
- 	device_release_driver(dev);
- }
- 
-+static struct brcmf_fw_request *
-+brcmf_usb_prepare_fw_request(struct brcmf_usbdev_info *devinfo)
-+{
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ".bin", devinfo->fw_name },
-+	};
-+
-+	fwreq = brcmf_fw_alloc_request(devinfo->bus_pub.devid,
-+				       devinfo->bus_pub.chiprev,
-+				       brcmf_usb_fwnames,
-+				       ARRAY_SIZE(brcmf_usb_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return NULL;
-+
-+	fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
-+
-+	return fwreq;
-+}
-+
- static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
- {
- 	struct brcmf_bus *bus = NULL;
-@@ -1249,24 +1270,12 @@ static int brcmf_usb_probe_cb(struct brc
- 	bus->chip = bus_pub->devid;
- 	bus->chiprev = bus_pub->chiprev;
- 
--	ret = brcmf_fw_map_chip_to_name(bus_pub->devid, bus_pub->chiprev,
--					brcmf_usb_fwnames,
--					ARRAY_SIZE(brcmf_usb_fwnames),
--					devinfo->fw_name, NULL);
--	if (ret)
--		goto fail;
--
--	fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
--			GFP_KERNEL);
-+	fwreq = brcmf_usb_prepare_fw_request(devinfo);
- 	if (!fwreq) {
- 		ret = -ENOMEM;
- 		goto fail;
- 	}
- 
--	fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
--	fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
--	fwreq->n_items = 1;
--
- 	/* request firmware here */
- 	ret = brcmf_fw_get_firmwares(dev, fwreq, brcmf_usb_probe_phase2);
- 	if (ret) {
-@@ -1469,15 +1478,10 @@ static int brcmf_usb_reset_resume(struct
- 
- 	brcmf_dbg(USB, "Enter\n");
- 
--	fwreq = kzalloc(sizeof(*fwreq) + sizeof(struct brcmf_fw_item),
--			GFP_KERNEL);
-+	fwreq = brcmf_usb_prepare_fw_request(devinfo);
- 	if (!fwreq)
- 		return -ENOMEM;
- 
--	fwreq->items[BRCMF_USB_FW_CODE].path = devinfo->fw_name;
--	fwreq->items[BRCMF_USB_FW_CODE].type = BRCMF_FW_TYPE_BINARY;
--	fwreq->n_items = 1;
--
- 	ret = brcmf_fw_get_firmwares(&usb->dev, fwreq, brcmf_usb_probe_phase2);
- 	if (ret < 0)
- 		kfree(fwreq);

+ 0 - 231
package/kernel/mac80211/patches/327-v4.17-0009-brcmfmac-add-extension-to-.get_fwname-callbacks.patch

@@ -1,231 +0,0 @@
-From bf7a7b37f6ef5090a2bae7e7ae23cd26b741cca4 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:28 +0100
-Subject: [PATCH] brcmfmac: add extension to .get_fwname() callbacks
-
-This changes the bus layer api by having the caller provide an
-extension. With this the callback can use brcmf_fw_alloc_request()
-to get the needed firmware name.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/bus.h |  6 +--
- .../wireless/broadcom/brcm80211/brcmfmac/common.c  | 43 +++-------------------
- .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    | 27 +++++++-------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c    | 26 +++++++------
- .../net/wireless/broadcom/brcm80211/brcmfmac/usb.c | 27 ++++++++------
- 5 files changed, 51 insertions(+), 78 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -88,7 +88,7 @@ struct brcmf_bus_ops {
- 	void (*wowl_config)(struct device *dev, bool enabled);
- 	size_t (*get_ramsize)(struct device *dev);
- 	int (*get_memdump)(struct device *dev, void *data, size_t len);
--	int (*get_fwname)(struct device *dev, uint chip, uint chiprev,
-+	int (*get_fwname)(struct device *dev, const char *ext,
- 			  unsigned char *fw_name);
- };
- 
-@@ -228,10 +228,10 @@ int brcmf_bus_get_memdump(struct brcmf_b
- }
- 
- static inline
--int brcmf_bus_get_fwname(struct brcmf_bus *bus, uint chip, uint chiprev,
-+int brcmf_bus_get_fwname(struct brcmf_bus *bus, const char *ext,
- 			 unsigned char *fw_name)
- {
--	return bus->ops->get_fwname(bus->dev, chip, chiprev, fw_name);
-+	return bus->ops->get_fwname(bus->dev, ext, fw_name);
- }
- 
- /*
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/common.c
-@@ -129,42 +129,9 @@ static int brcmf_c_download(struct brcmf
- 	return err;
- }
- 
--static int brcmf_c_get_clm_name(struct brcmf_if *ifp, u8 *clm_name)
--{
--	struct brcmf_bus *bus = ifp->drvr->bus_if;
--	u8 fw_name[BRCMF_FW_NAME_LEN];
--	u8 *ptr;
--	size_t len;
--	s32 err;
--
--	memset(fw_name, 0, BRCMF_FW_NAME_LEN);
--	err = brcmf_bus_get_fwname(bus, bus->chip, bus->chiprev, fw_name);
--	if (err) {
--		brcmf_err("get firmware name failed (%d)\n", err);
--		goto done;
--	}
--
--	/* generate CLM blob file name */
--	ptr = strrchr(fw_name, '.');
--	if (!ptr) {
--		err = -ENOENT;
--		goto done;
--	}
--
--	len = ptr - fw_name + 1;
--	if (len + strlen(".clm_blob") > BRCMF_FW_NAME_LEN) {
--		err = -E2BIG;
--	} else {
--		strlcpy(clm_name, fw_name, len);
--		strlcat(clm_name, ".clm_blob", BRCMF_FW_NAME_LEN);
--	}
--done:
--	return err;
--}
--
- static int brcmf_c_process_clm_blob(struct brcmf_if *ifp)
- {
--	struct device *dev = ifp->drvr->bus_if->dev;
-+	struct brcmf_bus *bus = ifp->drvr->bus_if;
- 	struct brcmf_dload_data_le *chunk_buf;
- 	const struct firmware *clm = NULL;
- 	u8 clm_name[BRCMF_FW_NAME_LEN];
-@@ -177,16 +144,16 @@ static int brcmf_c_process_clm_blob(stru
- 
- 	brcmf_dbg(TRACE, "Enter\n");
- 
--	memset(clm_name, 0, BRCMF_FW_NAME_LEN);
--	err = brcmf_c_get_clm_name(ifp, clm_name);
-+	memset(clm_name, 0, sizeof(clm_name));
-+	err = brcmf_bus_get_fwname(bus, ".clm_blob", clm_name);
- 	if (err) {
- 		brcmf_err("get CLM blob file name failed (%d)\n", err);
- 		return err;
- 	}
- 
--	err = request_firmware(&clm, clm_name, dev);
-+	err = request_firmware(&clm, clm_name, bus->dev);
- 	if (err) {
--		brcmf_info("no clm_blob available(err=%d), device may have limited channels available\n",
-+		brcmf_info("no clm_blob available (err=%d), device may have limited channels available\n",
- 			   err);
- 		return 0;
- 	}
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -1350,23 +1350,24 @@ static int brcmf_pcie_get_memdump(struct
- 	return 0;
- }
- 
--static int brcmf_pcie_get_fwname(struct device *dev, u32 chip, u32 chiprev,
--				 u8 *fw_name)
-+static
-+int brcmf_pcie_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
- {
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
--	struct brcmf_pciedev *buspub = bus_if->bus_priv.pcie;
--	struct brcmf_pciedev_info *devinfo = buspub->devinfo;
--	int ret = 0;
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ext, fw_name },
-+	};
- 
--	if (devinfo->fw_name[0] != '\0')
--		strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
--	else
--		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
--						brcmf_pcie_fwnames,
--						ARRAY_SIZE(brcmf_pcie_fwnames),
--						fw_name, NULL);
-+	fwreq = brcmf_fw_alloc_request(bus_if->chip, bus_if->chiprev,
-+				       brcmf_pcie_fwnames,
-+				       ARRAY_SIZE(brcmf_pcie_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return -ENOMEM;
- 
--	return ret;
-+	kfree(fwreq);
-+	return 0;
- }
- 
- static const struct brcmf_bus_ops brcmf_pcie_bus_ops = {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -4000,22 +4000,24 @@ brcmf_sdio_watchdog(unsigned long data)
- 	}
- }
- 
--static int brcmf_sdio_get_fwname(struct device *dev, u32 chip, u32 chiprev,
--				 u8 *fw_name)
-+static
-+int brcmf_sdio_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
- {
- 	struct brcmf_bus *bus_if = dev_get_drvdata(dev);
--	struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio;
--	int ret = 0;
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ext, fw_name },
-+	};
- 
--	if (sdiodev->fw_name[0] != '\0')
--		strlcpy(fw_name, sdiodev->fw_name, BRCMF_FW_NAME_LEN);
--	else
--		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
--						brcmf_sdio_fwnames,
--						ARRAY_SIZE(brcmf_sdio_fwnames),
--						fw_name, NULL);
-+	fwreq = brcmf_fw_alloc_request(bus_if->chip, bus_if->chiprev,
-+				       brcmf_sdio_fwnames,
-+				       ARRAY_SIZE(brcmf_sdio_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return -ENOMEM;
- 
--	return ret;
-+	kfree(fwreq);
-+	return 0;
- }
- 
- static const struct brcmf_bus_ops brcmf_sdio_bus_ops = {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -1128,21 +1128,24 @@ static void brcmf_usb_wowl_config(struct
- 		device_set_wakeup_enable(devinfo->dev, false);
- }
- 
--static int brcmf_usb_get_fwname(struct device *dev, u32 chip, u32 chiprev,
--				u8 *fw_name)
-+static
-+int brcmf_usb_get_fwname(struct device *dev, const char *ext, u8 *fw_name)
- {
--	struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
--	int ret = 0;
-+	struct brcmf_bus *bus = dev_get_drvdata(dev);
-+	struct brcmf_fw_request *fwreq;
-+	struct brcmf_fw_name fwnames[] = {
-+		{ ext, fw_name },
-+	};
- 
--	if (devinfo->fw_name[0] != '\0')
--		strlcpy(fw_name, devinfo->fw_name, BRCMF_FW_NAME_LEN);
--	else
--		ret = brcmf_fw_map_chip_to_name(chip, chiprev,
--						brcmf_usb_fwnames,
--						ARRAY_SIZE(brcmf_usb_fwnames),
--						fw_name, NULL);
-+	fwreq = brcmf_fw_alloc_request(bus->chip, bus->chiprev,
-+				       brcmf_usb_fwnames,
-+				       ARRAY_SIZE(brcmf_usb_fwnames),
-+				       fwnames, ARRAY_SIZE(fwnames));
-+	if (!fwreq)
-+		return -ENOMEM;
- 
--	return ret;
-+	kfree(fwreq);
-+	return 0;
- }
- 
- static const struct brcmf_bus_ops brcmf_usb_bus_ops = {

+ 0 - 92
package/kernel/mac80211/patches/327-v4.17-0010-brcmfmac-get-rid-of-brcmf_fw_map_chip_to_name.patch

@@ -1,92 +0,0 @@
-From 18c2b20e276e04476a3350b4a92c1dfad725d45d Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:29 +0100
-Subject: [PATCH] brcmfmac: get rid of brcmf_fw_map_chip_to_name()
-
-The function is no longer used so removing it.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/firmware.c         | 53 ----------------------
- .../broadcom/brcm80211/brcmfmac/firmware.h         |  4 --
- 2 files changed, 57 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -635,59 +635,6 @@ static void brcmf_fw_get_full_name(char
- 	strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
- }
- 
--int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
--			      struct brcmf_firmware_mapping mapping_table[],
--			      u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
--			      char nvram_name[BRCMF_FW_NAME_LEN])
--{
--	char chipname[12];
--	u32 i;
--	char end;
--
--	for (i = 0; i < table_size; i++) {
--		if (mapping_table[i].chipid == chip &&
--		    mapping_table[i].revmask & BIT(chiprev))
--			break;
--	}
--
--	if (i == table_size) {
--		brcmf_err("Unknown chipid %d [%d]\n", chip, chiprev);
--		return -ENODEV;
--	}
--
--	brcmf_chip_name(chip, chiprev, chipname, sizeof(chipname));
--
--	/* check if firmware path is provided by module parameter */
--	if (brcmf_mp_global.firmware_path[0] != '\0') {
--		if (fw_name)
--			strlcpy(fw_name, brcmf_mp_global.firmware_path,
--				BRCMF_FW_NAME_LEN);
--		if (nvram_name)
--			strlcpy(nvram_name, brcmf_mp_global.firmware_path,
--				BRCMF_FW_NAME_LEN);
--
--		end = brcmf_mp_global.firmware_path[
--				strlen(brcmf_mp_global.firmware_path) - 1];
--		if (end != '/') {
--			if (fw_name)
--				strlcat(fw_name, "/", BRCMF_FW_NAME_LEN);
--			if (nvram_name)
--				strlcat(nvram_name, "/", BRCMF_FW_NAME_LEN);
--		}
--	}
--
--	brcmf_info("using %s for chip %s\n",
--		   mapping_table[i].fw_base, chipname);
--	if (fw_name)
--		brcmf_fw_get_full_name(fw_name,
--				       mapping_table[i].fw_base, ".bin");
--	if (nvram_name)
--		brcmf_fw_get_full_name(nvram_name,
--				       mapping_table[i].fw_base, ".txt");
--
--	return 0;
--}
--
- struct brcmf_fw_request *
- brcmf_fw_alloc_request(u32 chip, u32 chiprev,
- 		       struct brcmf_firmware_mapping mapping_table[],
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-@@ -46,10 +46,6 @@ MODULE_FIRMWARE(BRCMF_FW_DEFAULT_PATH fw
- #define BRCMF_FW_ENTRY(chipid, mask, name) \
- 	{ chipid, mask, BRCM_ ## name ## _FIRMWARE_BASENAME }
- 
--int brcmf_fw_map_chip_to_name(u32 chip, u32 chiprev,
--			      struct brcmf_firmware_mapping mapping_table[],
--			      u32 table_size, char fw_name[BRCMF_FW_NAME_LEN],
--			      char nvram_name[BRCMF_FW_NAME_LEN]);
- void brcmf_fw_nvram_free(void *nvram);
- 
- enum brcmf_fw_type {

+ 0 - 44
package/kernel/mac80211/patches/327-v4.17-0011-brcmfmac-get-rid-of-brcmf_fw_get_full_name.patch

@@ -1,44 +0,0 @@
-From bf291b7247e53f52a4236c0b55a5df046d6177df Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:30 +0100
-Subject: [PATCH] brcmfmac: get rid of brcmf_fw_get_full_name()
-
-The function was pretty minimal and now it is called only from one
-place so just get rid of it.
-
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../net/wireless/broadcom/brcm80211/brcmfmac/firmware.c    | 14 ++++----------
- 1 file changed, 4 insertions(+), 10 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -628,13 +628,6 @@ int brcmf_fw_get_firmwares(struct device
- 	return 0;
- }
- 
--static void brcmf_fw_get_full_name(char fw_name[BRCMF_FW_NAME_LEN],
--				   const char *fw_base, const char *extension)
--{
--	strlcat(fw_name, fw_base, BRCMF_FW_NAME_LEN);
--	strlcat(fw_name, extension, BRCMF_FW_NAME_LEN);
--}
--
- struct brcmf_fw_request *
- brcmf_fw_alloc_request(u32 chip, u32 chiprev,
- 		       struct brcmf_firmware_mapping mapping_table[],
-@@ -685,9 +678,10 @@ brcmf_fw_alloc_request(u32 chip, u32 chi
- 					BRCMF_FW_NAME_LEN);
- 			}
- 		}
--		brcmf_fw_get_full_name(fwnames[j].path,
--				       mapping_table[i].fw_base,
--				       fwnames[j].extension);
-+		strlcat(fwnames[j].path, mapping_table[i].fw_base,
-+			BRCMF_FW_NAME_LEN);
-+		strlcat(fwnames[j].path, fwnames[j].extension,
-+			BRCMF_FW_NAME_LEN);
- 		fwreq->items[j].path = fwnames[j].path;
- 	}
- 

+ 0 - 23
package/kernel/mac80211/patches/327-v4.17-0012-brcmfmac-add-kerneldoc-for-struct-brcmf_bus-msgbuf.patch

@@ -1,23 +0,0 @@
-From 48eaee3f272a5bfe6986d07c51f6975d3c2f74d1 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 22 Mar 2018 21:28:31 +0100
-Subject: [PATCH] brcmfmac: add kerneldoc for struct brcmf_bus::msgbuf
-
-This field did not have kerneldoc description so adding it now.
-
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h | 1 +
- 1 file changed, 1 insertion(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h
-@@ -140,6 +140,7 @@ struct brcmf_bus_stats {
-  * @always_use_fws_queue: bus wants use queue also when fwsignal is inactive.
-  * @wowl_supported: is wowl supported by bus driver.
-  * @chiprev: revision of the dongle chip.
-+ * @msgbuf: msgbuf protocol parameters provided by bus layer.
-  */
- struct brcmf_bus {
- 	union {

+ 0 - 81
package/kernel/mac80211/patches/328-v4.17-0001-brcmfmac-fix-firmware-request-processing-if-nvram-lo.patch

@@ -1,81 +0,0 @@
-From 0b5c0305e57ca940713bcb2b202fd2b412c62f31 Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Tue, 3 Apr 2018 10:18:15 +0200
-Subject: [PATCH] brcmfmac: fix firmware request processing if nvram load fails
-
-When nvram loading fails a double free occurred. Fix this and reorg the
-code a little.
-
-Fixes: d09ae51a4b67 ("brcmfmac: pass struct in brcmf_fw_get_firmwares()")
-Reported-by: Dan Carpenter <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/firmware.c         | 36 ++++++++++++----------
- 1 file changed, 20 insertions(+), 16 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -459,7 +459,7 @@ static void brcmf_fw_free_request(struct
- 	kfree(req);
- }
- 
--static void brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
-+static int brcmf_fw_request_nvram_done(const struct firmware *fw, void *ctx)
- {
- 	struct brcmf_fw *fwctx = ctx;
- 	struct brcmf_fw_item *cur;
-@@ -498,13 +498,10 @@ static void brcmf_fw_request_nvram_done(
- 	brcmf_dbg(TRACE, "nvram %p len %d\n", nvram, nvram_length);
- 	cur->nv_data.data = nvram;
- 	cur->nv_data.len = nvram_length;
--	return;
-+	return 0;
- 
- fail:
--	brcmf_dbg(TRACE, "failed: dev=%s\n", dev_name(fwctx->dev));
--	fwctx->done(fwctx->dev, -ENOENT, NULL);
--	brcmf_fw_free_request(fwctx->req);
--	kfree(fwctx);
-+	return -ENOENT;
- }
- 
- static int brcmf_fw_request_next_item(struct brcmf_fw *fwctx, bool async)
-@@ -553,20 +550,27 @@ static void brcmf_fw_request_done(const
- 	brcmf_dbg(TRACE, "enter: firmware %s %sfound\n", cur->path,
- 		  fw ? "" : "not ");
- 
--	if (fw) {
--		if (cur->type == BRCMF_FW_TYPE_BINARY)
--			cur->binary = fw;
--		else if (cur->type == BRCMF_FW_TYPE_NVRAM)
--			brcmf_fw_request_nvram_done(fw, fwctx);
--		else
--			release_firmware(fw);
--	} else if (cur->type == BRCMF_FW_TYPE_NVRAM) {
--		brcmf_fw_request_nvram_done(NULL, fwctx);
--	} else if (!(cur->flags & BRCMF_FW_REQF_OPTIONAL)) {
-+	if (!fw)
- 		ret = -ENOENT;
-+
-+	switch (cur->type) {
-+	case BRCMF_FW_TYPE_NVRAM:
-+		ret = brcmf_fw_request_nvram_done(fw, fwctx);
-+		break;
-+	case BRCMF_FW_TYPE_BINARY:
-+		cur->binary = fw;
-+		break;
-+	default:
-+		/* something fishy here so bail out early */
-+		brcmf_err("unknown fw type: %d\n", cur->type);
-+		release_firmware(fw);
-+		ret = -EINVAL;
- 		goto fail;
- 	}
- 
-+	if (ret < 0 && !(cur->flags & BRCMF_FW_REQF_OPTIONAL))
-+		goto fail;
-+
- 	do {
- 		if (++fwctx->curpos == fwctx->req->n_items) {
- 			ret = 0;

+ 0 - 48
package/kernel/mac80211/patches/329-v4.18-0001-brcmfmac-add-support-for-BCM4366E-chipset.patch

@@ -1,48 +0,0 @@
-From 1f589e2510d5df1192dca7c089103a2cbd028101 Mon Sep 17 00:00:00 2001
-From: Dan Haab <[email protected]>
-Date: Tue, 3 Apr 2018 10:21:56 +0200
-Subject: [PATCH] brcmfmac: add support for BCM4366E chipset
-
-BCM4366E is a wireless chipset with a BCM43664 ChipCommon. It's
-supported by the same firmware as 4366c0.
-
-Signed-off-by: Dan Haab <[email protected]>
-[arend: rebase patch and remove unnecessary definition]
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c       | 1 +
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c       | 1 +
- drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h | 1 +
- 3 files changed, 3 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
-@@ -689,6 +689,7 @@ static u32 brcmf_chip_tcm_rambase(struct
- 	case BRCM_CC_43525_CHIP_ID:
- 	case BRCM_CC_4365_CHIP_ID:
- 	case BRCM_CC_4366_CHIP_ID:
-+	case BRCM_CC_43664_CHIP_ID:
- 		return 0x200000;
- 	case CY_CC_4373_CHIP_ID:
- 		return 0x160000;
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -75,6 +75,7 @@ static struct brcmf_firmware_mapping brc
- 	BRCMF_FW_ENTRY(BRCM_CC_4365_CHIP_ID, 0xFFFFFFF0, 4365C),
- 	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0x0000000F, 4366B),
- 	BRCMF_FW_ENTRY(BRCM_CC_4366_CHIP_ID, 0xFFFFFFF0, 4366C),
-+	BRCMF_FW_ENTRY(BRCM_CC_43664_CHIP_ID, 0xFFFFFFF0, 4366C),
- 	BRCMF_FW_ENTRY(BRCM_CC_4371_CHIP_ID, 0xFFFFFFFF, 4371),
- };
- 
---- a/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/include/brcm_hw_ids.h
-@@ -57,6 +57,7 @@
- #define BRCM_CC_43602_CHIP_ID		43602
- #define BRCM_CC_4365_CHIP_ID		0x4365
- #define BRCM_CC_4366_CHIP_ID		0x4366
-+#define BRCM_CC_43664_CHIP_ID		43664
- #define BRCM_CC_4371_CHIP_ID		0x4371
- #define CY_CC_4373_CHIP_ID		0x4373
- 

+ 0 - 34
package/kernel/mac80211/patches/330-v4.18-0001-brcmfmac-check-p2pdev-mac-address-uniqueness.patch

@@ -1,34 +0,0 @@
-From cb746e47837ad0f35c8ae28e9aacc8eb07916d2a Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 26 Apr 2018 12:16:47 +0200
-Subject: [PATCH] brcmfmac: check p2pdev mac address uniqueness
-
-The mac address for p2pdev must be different from the primary interface
-due to firmware requirement. Add an explicit check for this requirement
-if user-space provides a mac address.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 7 +++++++
- 1 file changed, 7 insertions(+)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
-@@ -2073,6 +2073,13 @@ static struct wireless_dev *brcmf_p2p_cr
- 	}
- 
- 	pri_ifp = p2p->bss_idx[P2PAPI_BSSCFG_PRIMARY].vif->ifp;
-+
-+	/* firmware requires unique mac address for p2pdev interface */
-+	if (addr && ether_addr_equal(addr, pri_ifp->mac_addr)) {
-+		brcmf_err("discovery vif must be different from primary interface\n");
-+		return ERR_PTR(-EINVAL);
-+	}
-+
- 	brcmf_p2p_generate_bss_mac(p2p, addr);
- 	brcmf_p2p_set_firmware(pri_ifp, p2p->dev_addr);
- 

+ 0 - 76
package/kernel/mac80211/patches/330-v4.18-0002-brcmfmac-reports-boottime_ns-while-informing-bss.patch

@@ -1,76 +0,0 @@
-From 7742fce4c007141617dab9bcb90034b3c0fe2347 Mon Sep 17 00:00:00 2001
-From: Franky Lin <[email protected]>
-Date: Thu, 26 Apr 2018 12:18:35 +0200
-Subject: [PATCH] brcmfmac: reports boottime_ns while informing bss
-
-Provides a timestamp in bss information so user space can see when the
-bss info was updated. Since tsf is not available from the dongle events
-boottime is reported instead.
-
-Reported-by: Dmitry Shmidt <[email protected]>
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- .../broadcom/brcm80211/brcmfmac/cfg80211.c         | 26 +++++++++++-----------
- 1 file changed, 13 insertions(+), 13 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -2728,7 +2728,6 @@ static s32 brcmf_inform_single_bss(struc
- 				   struct brcmf_bss_info_le *bi)
- {
- 	struct wiphy *wiphy = cfg_to_wiphy(cfg);
--	struct ieee80211_channel *notify_channel;
- 	struct cfg80211_bss *bss;
- 	struct ieee80211_supported_band *band;
- 	struct brcmu_chan ch;
-@@ -2738,7 +2737,7 @@ static s32 brcmf_inform_single_bss(struc
- 	u16 notify_interval;
- 	u8 *notify_ie;
- 	size_t notify_ielen;
--	s32 notify_signal;
-+	struct cfg80211_inform_bss bss_data = { 0 };
- 
- 	if (le32_to_cpu(bi->length) > WL_BSS_INFO_MAX) {
- 		brcmf_err("Bss info is larger than buffer. Discarding\n");
-@@ -2758,27 +2757,28 @@ static s32 brcmf_inform_single_bss(struc
- 		band = wiphy->bands[NL80211_BAND_5GHZ];
- 
- 	freq = ieee80211_channel_to_frequency(channel, band->band);
--	notify_channel = ieee80211_get_channel(wiphy, freq);
-+	bss_data.chan = ieee80211_get_channel(wiphy, freq);
-+	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
-+	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());
- 
- 	notify_capability = le16_to_cpu(bi->capability);
- 	notify_interval = le16_to_cpu(bi->beacon_period);
- 	notify_ie = (u8 *)bi + le16_to_cpu(bi->ie_offset);
- 	notify_ielen = le32_to_cpu(bi->ie_length);
--	notify_signal = (s16)le16_to_cpu(bi->RSSI) * 100;
-+	bss_data.signal = (s16)le16_to_cpu(bi->RSSI) * 100;
- 
- 	brcmf_dbg(CONN, "bssid: %pM\n", bi->BSSID);
- 	brcmf_dbg(CONN, "Channel: %d(%d)\n", channel, freq);
- 	brcmf_dbg(CONN, "Capability: %X\n", notify_capability);
- 	brcmf_dbg(CONN, "Beacon interval: %d\n", notify_interval);
--	brcmf_dbg(CONN, "Signal: %d\n", notify_signal);
-+	brcmf_dbg(CONN, "Signal: %d\n", bss_data.signal);
- 
--	bss = cfg80211_inform_bss(wiphy, notify_channel,
--				  CFG80211_BSS_FTYPE_UNKNOWN,
--				  (const u8 *)bi->BSSID,
--				  0, notify_capability,
--				  notify_interval, notify_ie,
--				  notify_ielen, notify_signal,
--				  GFP_KERNEL);
-+	bss = cfg80211_inform_bss_data(wiphy, &bss_data,
-+				       CFG80211_BSS_FTYPE_UNKNOWN,
-+				       (const u8 *)bi->BSSID,
-+				       0, notify_capability,
-+				       notify_interval, notify_ie,
-+				       notify_ielen, GFP_KERNEL);
- 
- 	if (!bss)
- 		return -ENOMEM;

+ 0 - 43
package/kernel/mac80211/patches/330-v4.18-0003-brcmfmac-use-nl80211_band-directly-to-get-ieee80211-.patch

@@ -1,43 +0,0 @@
-From aed14219067ab96e5eeb7730e9bceed10d9be989 Mon Sep 17 00:00:00 2001
-From: Franky Lin <[email protected]>
-Date: Thu, 26 Apr 2018 12:16:48 +0200
-Subject: [PATCH] brcmfmac: use nl80211_band directly to get ieee80211 channel
-
-The enum nl80211_band used to retrieve wiphy->bands is the same as
-wiphy->bands->band which is checked by wiphy_register(). So it can be used
-directly as parameter of ieee80211_channel_to_frequency().
-
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
-@@ -2729,7 +2729,7 @@ static s32 brcmf_inform_single_bss(struc
- {
- 	struct wiphy *wiphy = cfg_to_wiphy(cfg);
- 	struct cfg80211_bss *bss;
--	struct ieee80211_supported_band *band;
-+	enum nl80211_band band;
- 	struct brcmu_chan ch;
- 	u16 channel;
- 	u32 freq;
-@@ -2752,11 +2752,11 @@ static s32 brcmf_inform_single_bss(struc
- 	channel = bi->ctl_ch;
- 
- 	if (channel <= CH_MAX_2G_CHANNEL)
--		band = wiphy->bands[NL80211_BAND_2GHZ];
-+		band = NL80211_BAND_2GHZ;
- 	else
--		band = wiphy->bands[NL80211_BAND_5GHZ];
-+		band = NL80211_BAND_5GHZ;
- 
--	freq = ieee80211_channel_to_frequency(channel, band->band);
-+	freq = ieee80211_channel_to_frequency(channel, band);
- 	bss_data.chan = ieee80211_get_channel(wiphy, freq);
- 	bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20;
- 	bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime());

+ 0 - 76
package/kernel/mac80211/patches/330-v4.18-0004-brcmfmac-constify-firmware-mapping-tables.patch

@@ -1,76 +0,0 @@
-From ff68c9f9c06d1fd437c8f90fc05ca28c47f7d85e Mon Sep 17 00:00:00 2001
-From: Arend Van Spriel <[email protected]>
-Date: Thu, 26 Apr 2018 12:16:49 +0200
-Subject: [PATCH] brcmfmac: constify firmware mapping tables
-
-The information in the firmware mapping does not need to be modified
-so it can be static const.
-
-Reviewed-by: Hante Meuleman <[email protected]>
-Reviewed-by: Pieter-Paul Giesberts <[email protected]>
-Reviewed-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c     | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c     | 2 +-
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c      | 2 +-
- 5 files changed, 5 insertions(+), 5 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.c
-@@ -634,7 +634,7 @@ int brcmf_fw_get_firmwares(struct device
- 
- struct brcmf_fw_request *
- brcmf_fw_alloc_request(u32 chip, u32 chiprev,
--		       struct brcmf_firmware_mapping mapping_table[],
-+		       const struct brcmf_firmware_mapping mapping_table[],
- 		       u32 table_size, struct brcmf_fw_name *fwnames,
- 		       u32 n_fwnames)
- {
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/firmware.h
-@@ -80,7 +80,7 @@ struct brcmf_fw_name {
- 
- struct brcmf_fw_request *
- brcmf_fw_alloc_request(u32 chip, u32 chiprev,
--		       struct brcmf_firmware_mapping mapping_table[],
-+		       const struct brcmf_firmware_mapping mapping_table[],
- 		       u32 table_size, struct brcmf_fw_name *fwnames,
- 		       u32 n_fwnames);
- 
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -59,7 +59,7 @@ BRCMF_FW_DEF(4366B, "brcmfmac4366b-pcie"
- BRCMF_FW_DEF(4366C, "brcmfmac4366c-pcie");
- BRCMF_FW_DEF(4371, "brcmfmac4371-pcie");
- 
--static struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
-+static const struct brcmf_firmware_mapping brcmf_pcie_fwnames[] = {
- 	BRCMF_FW_ENTRY(BRCM_CC_43602_CHIP_ID, 0xFFFFFFFF, 43602),
- 	BRCMF_FW_ENTRY(BRCM_CC_43465_CHIP_ID, 0xFFFFFFF0, 4366C),
- 	BRCMF_FW_ENTRY(BRCM_CC_4350_CHIP_ID, 0x000000FF, 4350C),
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
-@@ -619,7 +619,7 @@ BRCMF_FW_DEF(4354, "brcmfmac4354-sdio");
- BRCMF_FW_DEF(4356, "brcmfmac4356-sdio");
- BRCMF_FW_DEF(4373, "brcmfmac4373-sdio");
- 
--static struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
-+static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
- 	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
- 	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x0000001F, 43241B0),
- 	BRCMF_FW_ENTRY(BRCM_CC_43241_CHIP_ID, 0x00000020, 43241B4),
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
-@@ -52,7 +52,7 @@ BRCMF_FW_DEF(43242A, "brcmfmac43242a");
- BRCMF_FW_DEF(43569, "brcmfmac43569");
- BRCMF_FW_DEF(4373, "brcmfmac4373");
- 
--static struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
-+static const struct brcmf_firmware_mapping brcmf_usb_fwnames[] = {
- 	BRCMF_FW_ENTRY(BRCM_CC_43143_CHIP_ID, 0xFFFFFFFF, 43143),
- 	BRCMF_FW_ENTRY(BRCM_CC_43235_CHIP_ID, 0x00000008, 43236B),
- 	BRCMF_FW_ENTRY(BRCM_CC_43236_CHIP_ID, 0x00000008, 43236B),

+ 0 - 74
package/kernel/mac80211/patches/330-v4.18-0005-brcmfmac-add-hostready-indication.patch

@@ -1,74 +0,0 @@
-From 84ad327d18debe19b8d509059b61db445d048b02 Mon Sep 17 00:00:00 2001
-From: Franky Lin <[email protected]>
-Date: Thu, 26 Apr 2018 12:16:50 +0200
-Subject: [PATCH] brcmfmac: add hostready indication
-
-A hostready signal is introduced to inform firmware through mailbox
-doorbell1 when common ring initialized or D3 exited.
-
-Reviewed-by: Arend van Spriel <[email protected]>
-Signed-off-by: Franky Lin <[email protected]>
-Signed-off-by: Arend van Spriel <[email protected]>
-Signed-off-by: Kalle Valo <[email protected]>
----
- drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c
-@@ -105,7 +105,8 @@ static const struct brcmf_firmware_mappi
- #define BRCMF_PCIE_PCIE2REG_MAILBOXMASK		0x4C
- #define BRCMF_PCIE_PCIE2REG_CONFIGADDR		0x120
- #define BRCMF_PCIE_PCIE2REG_CONFIGDATA		0x124
--#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX		0x140
-+#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0	0x140
-+#define BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1	0x144
- 
- #define BRCMF_PCIE2_INTA			0x01
- #define BRCMF_PCIE2_INTB			0x02
-@@ -140,6 +141,7 @@ static const struct brcmf_firmware_mappi
- #define BRCMF_PCIE_SHARED_VERSION_MASK		0x00FF
- #define BRCMF_PCIE_SHARED_DMA_INDEX		0x10000
- #define BRCMF_PCIE_SHARED_DMA_2B_IDX		0x100000
-+#define BRCMF_PCIE_SHARED_HOSTRDY_DB1		0x10000000
- 
- #define BRCMF_PCIE_FLAGS_HTOD_SPLIT		0x4000
- #define BRCMF_PCIE_FLAGS_DTOH_SPLIT		0x8000
-@@ -782,6 +784,12 @@ static void brcmf_pcie_intr_enable(struc
- 			       BRCMF_PCIE_MB_INT_FN0_1);
- }
- 
-+static void brcmf_pcie_hostready(struct brcmf_pciedev_info *devinfo)
-+{
-+	if (devinfo->shared.flags & BRCMF_PCIE_SHARED_HOSTRDY_DB1)
-+		brcmf_pcie_write_reg32(devinfo,
-+				       BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_1, 1);
-+}
- 
- static irqreturn_t brcmf_pcie_quick_check_isr(int irq, void *arg)
- {
-@@ -924,7 +932,7 @@ static int brcmf_pcie_ring_mb_ring_bell(
- 
- 	brcmf_dbg(PCIE, "RING !\n");
- 	/* Any arbitrary value will do, lets use 1 */
--	brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX, 1);
-+	brcmf_pcie_write_reg32(devinfo, BRCMF_PCIE_PCIE2REG_H2D_MAILBOX_0, 1);
- 
- 	return 0;
- }
-@@ -1728,6 +1736,7 @@ static void brcmf_pcie_setup(struct devi
- 	init_waitqueue_head(&devinfo->mbdata_resp_wait);
- 
- 	brcmf_pcie_intr_enable(devinfo);
-+	brcmf_pcie_hostready(devinfo);
- 	if (brcmf_attach(&devinfo->pdev->dev, devinfo->settings) == 0)
- 		return;
- 
-@@ -1950,6 +1959,7 @@ static int brcmf_pcie_pm_leave_D3(struct
- 		brcmf_pcie_select_core(devinfo, BCMA_CORE_PCIE2);
- 		brcmf_bus_change_state(bus, BRCMF_BUS_UP);
- 		brcmf_pcie_intr_enable(devinfo);
-+		brcmf_pcie_hostready(devinfo);
- 		return 0;
- 	}
- 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff