diff options
Diffstat (limited to 'package/mac80211/patches')
69 files changed, 0 insertions, 4677 deletions
diff --git a/package/mac80211/patches/000-fix_kconfig.patch b/package/mac80211/patches/000-fix_kconfig.patch deleted file mode 100644 index 88d0b04984..0000000000 --- a/package/mac80211/patches/000-fix_kconfig.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/kconf/Makefile -+++ b/kconf/Makefile -@@ -1,10 +1,10 @@ --CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -+CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -DKBUILD_NO_NLS - - LXDIALOG := lxdialog/checklist.o lxdialog/inputbox.o lxdialog/menubox.o lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o - - conf: conf.o zconf.tab.o --mconf: LDFLAGS = -Wl,--no-as-needed $(shell ./lxdialog/check-lxdialog.sh -ldflags $(CC)) --mconf: CFLAGS += -DCURSES_LOC="<ncurses.h>" -DLOCALE -+mconf: LDFLAGS = $(shell ./lxdialog/check-lxdialog.sh -ldflags $(CC)) -+mconf: CFLAGS += -DCURSES_LOC="<ncurses.h>" - mconf: mconf.o zconf.tab.o $(LXDIALOG) - - .PHONY: clean diff --git a/package/mac80211/patches/001-fix_build.patch b/package/mac80211/patches/001-fix_build.patch deleted file mode 100644 index c541985cf3..0000000000 --- a/package/mac80211/patches/001-fix_build.patch +++ /dev/null @@ -1,156 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -19,6 +19,7 @@ KLIB_BUILD ?= $(KLIB)/build/ - KERNEL_CONFIG := $(KLIB_BUILD)/.config - KERNEL_MAKEFILE := $(KLIB_BUILD)/Makefile - CONFIG_MD5 := $(shell md5sum $(KERNEL_CONFIG) 2>/dev/null | sed 's/\s.*//') -+STAMP_KERNEL_CONFIG := .kernel_config_md5_$(CONFIG_MD5) - - export KLIB KLIB_BUILD BACKPORT_PWD KMODDIR KMODPATH_ARG - -@@ -36,7 +37,8 @@ mrproper: - @rm -f .kernel_config_md5 Kconfig.versions Kconfig.kernel - @rm -f backport-include/backport/autoconf.h - --.DEFAULT: -+.SILENT: $(STAMP_KERNEL_CONFIG) -+$(STAMP_KERNEL_CONFIG): - @set -e ; test -f .local-symbols || ( \ - echo "/--------------" ;\ - echo "| You shouldn't run make in the backports tree, but only in" ;\ -@@ -60,56 +62,60 @@ mrproper: - echo "| (that isn't currently running.)" ;\ - echo "\\--" ;\ - false) -- @set -e ; if [ "$$(cat .kernel_config_md5 2>/dev/null)" != "$(CONFIG_MD5)" ] ;\ -- then \ -- echo -n "Generating local configuration database from kernel ..." ;\ -- grep -v -f .local-symbols $(KERNEL_CONFIG) | grep = | ( \ -- while read l ; do \ -- if [ "$${l:0:7}" != "CONFIG_" ] ; then \ -- continue ;\ -- fi ;\ -- l=$${l:7} ;\ -- n=$${l%%=*} ;\ -- v=$${l#*=} ;\ -- if [ "$$v" = "m" ] ; then \ -- echo config $$n ;\ -- echo ' tristate' ;\ -- elif [ "$$v" = "y" ] ; then \ -- echo config $$n ;\ -- echo ' bool' ;\ -- else \ -- continue ;\ -- fi ;\ -- echo " default $$v" ;\ -- echo "" ;\ -- done \ -- ) > Kconfig.kernel ;\ -- kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) kernelversion | \ -- sed 's/^\(\(3\|2\.6\)\.[0-9]\+\).*/\1/;t;d') ;\ -- test "$$kver" != "" || echo "Kernel version parse failed!" ;\ -- test "$$kver" != "" ;\ -- kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\ -- kvers="$$kvers $$(seq 0 99 | sed 's/^/3./')" ;\ -- print=0 ;\ -- for v in $$kvers ; do \ -- if [ "$$print" = "1" ] ; then \ -- echo config BACKPORT_KERNEL_$$(echo $$v | tr . _) ;\ -- echo " def_bool y" ;\ -- fi ;\ -- if [ "$$v" = "$$kver" ] ; then print=1 ; fi ;\ -- done > Kconfig.versions ;\ -- # RHEL as well, sadly we need to grep for it ;\ -- RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) | \ -- sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ -- RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) | \ -- sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ -- for v in $$(seq 0 $$RHEL_MINOR) ; do \ -- echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v ;\ -- echo " def_bool y" ;\ -- done >> Kconfig.versions ;\ -- echo " done." ;\ -- fi ;\ -- echo "$(CONFIG_MD5)" > .kernel_config_md5 -+ @rm -f .kernel_config_md5_* -+ @touch $@ -+ -+Kconfig.kernel: $(STAMP_KERNEL_CONFIG) .local-symbols -+ @printf "Generating local configuration database from kernel ..." -+ @grep -v -f .local-symbols $(KERNEL_CONFIG) | grep = | ( \ -+ while read l ; do \ -+ if [ "$${l:0:7}" != "CONFIG_" ] ; then \ -+ continue ;\ -+ fi ;\ -+ l=$${l:7} ;\ -+ n=$${l%%=*} ;\ -+ v=$${l#*=} ;\ -+ if [ "$$v" = "m" ] ; then \ -+ echo config $$n ;\ -+ echo ' tristate' ;\ -+ elif [ "$$v" = "y" ] ; then \ -+ echo config $$n ;\ -+ echo ' bool' ;\ -+ else \ -+ continue ;\ -+ fi ;\ -+ echo " default $$v" ;\ -+ echo "" ;\ -+ done \ -+ ) > $@ -+ @echo " done." -+ -+Kconfig.versions: Kconfig.kernel -+ @kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) kernelversion | \ -+ sed 's/^\(\(3\|2\.6\)\.[0-9]\+\).*/\1/;t;d') ;\ -+ test "$$kver" != "" || echo "Kernel version parse failed!" ;\ -+ test "$$kver" != "" ;\ -+ kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\ -+ kvers="$$kvers $$(seq 0 99 | sed 's/^/3./')" ;\ -+ print=0 ;\ -+ for v in $$kvers ; do \ -+ if [ "$$print" = "1" ] ; then \ -+ echo config BACKPORT_KERNEL_$$(echo $$v | tr . _) ;\ -+ echo " def_bool y" ;\ -+ fi ;\ -+ if [ "$$v" = "$$kver" ] ; then print=1 ; fi ;\ -+ done > $@ -+ @RHEL_MAJOR=$$(grep '^RHEL_MAJOR' $(KERNEL_MAKEFILE) | \ -+ sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ -+ RHEL_MINOR=$$(grep '^RHEL_MINOR' $(KERNEL_MAKEFILE) | \ -+ sed 's/.*=\s*\([0-9]*\)/\1/;t;d') ;\ -+ for v in $$(seq 0 $$RHEL_MINOR) ; do \ -+ echo config BACKPORT_RHEL_KERNEL_$${RHEL_MAJOR}_$$v ;\ -+ echo " def_bool y" ;\ -+ done >> $@ -+ -+.DEFAULT: -+ @$(MAKE) Kconfig.versions - @$(MAKE) -f Makefile.real "$@" - - else ---- a/Makefile.real -+++ b/Makefile.real -@@ -54,7 +54,7 @@ defconfig-%:: - - backport-include/backport/autoconf.h: .config Kconfig.versions Kconfig.kernel - @$(MAKE) oldconfig -- @echo -n "Building backport-include/backport/autoconf.h ..." -+ @printf "Building backport-include/backport/autoconf.h ..." - @grep -f .local-symbols .config | ( \ - echo "#ifndef COMPAT_AUTOCONF_INCLUDED" ;\ - echo "#define COMPAT_AUTOCONF_INCLUDED" ;\ -@@ -75,7 +75,12 @@ backport-include/backport/autoconf.h: .c - esac ;\ - done ;\ - echo "#endif /* COMPAT_AUTOCONF_INCLUDED */" ;\ -- ) > backport-include/backport/autoconf.h -+ ) > $@.new -+ @if cmp -s $@ $@.new; then \ -+ rm -f $@.new; \ -+ else \ -+ mv $@.new $@; \ -+ fi - @echo " done." - - .PHONY: modules diff --git a/package/mac80211/patches/002-change_allconfig.patch b/package/mac80211/patches/002-change_allconfig.patch deleted file mode 100644 index 91ad20f06d..0000000000 --- a/package/mac80211/patches/002-change_allconfig.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- a/kconf/conf.c -+++ b/kconf/conf.c -@@ -578,40 +578,12 @@ int main(int ac, char **av) - case oldconfig: - case listnewconfig: - case olddefconfig: -- conf_read(NULL); -- break; - case allnoconfig: - case allyesconfig: - case allmodconfig: - case alldefconfig: - case randconfig: -- name = getenv("KCONFIG_ALLCONFIG"); -- if (!name) -- break; -- if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) { -- if (conf_read_simple(name, S_DEF_USER)) { -- fprintf(stderr, -- _("*** Can't read seed configuration \"%s\"!\n"), -- name); -- exit(1); -- } -- break; -- } -- switch (input_mode) { -- case allnoconfig: name = "allno.config"; break; -- case allyesconfig: name = "allyes.config"; break; -- case allmodconfig: name = "allmod.config"; break; -- case alldefconfig: name = "alldef.config"; break; -- case randconfig: name = "allrandom.config"; break; -- default: break; -- } -- if (conf_read_simple(name, S_DEF_USER) && -- conf_read_simple("all.config", S_DEF_USER)) { -- fprintf(stderr, -- _("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"), -- name); -- exit(1); -- } -+ conf_read(NULL); - break; - default: - break; diff --git a/package/mac80211/patches/010-disable_rfkill.patch b/package/mac80211/patches/010-disable_rfkill.patch deleted file mode 100644 index c5a92d6b48..0000000000 --- a/package/mac80211/patches/010-disable_rfkill.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/backport-include/linux/rfkill.h -+++ b/backport-include/linux/rfkill.h -@@ -2,6 +2,10 @@ - #define __COMPAT_RFKILL_H - #include <linux/version.h> - -+#undef CONFIG_RFKILL -+#undef CONFIG_RFKILL_LEDS -+#undef CONFIG_RFKILL_MODULE -+ - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) - #include_next <linux/rfkill.h> - #else diff --git a/package/mac80211/patches/020-disable_tty_set_termios.patch b/package/mac80211/patches/020-disable_tty_set_termios.patch deleted file mode 100644 index 89c6a60e13..0000000000 --- a/package/mac80211/patches/020-disable_tty_set_termios.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- a/compat/compat-2.6.39.c -+++ b/compat/compat-2.6.39.c -@@ -13,6 +13,7 @@ - #include <linux/sched.h> - #include <linux/module.h> - -+#ifdef CONFIG_COMPAT_BLUETOOTH - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) - /* - * Termios Helper Methods -@@ -112,4 +113,4 @@ int tty_set_termios(struct tty_struct *t - } - EXPORT_SYMBOL_GPL(tty_set_termios); - #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)) */ -- -+#endif diff --git a/package/mac80211/patches/030-rt2x00_options.patch b/package/mac80211/patches/030-rt2x00_options.patch deleted file mode 100644 index 789a77ab12..0000000000 --- a/package/mac80211/patches/030-rt2x00_options.patch +++ /dev/null @@ -1,36 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/Kconfig -+++ b/drivers/net/wireless/rt2x00/Kconfig -@@ -202,25 +202,28 @@ config RT2800USB_UNKNOWN - endif - - config RT2800_LIB -- tristate -+ tristate "RT2800 USB/PCI support" - depends on m - - config RT2X00_LIB_MMIO -- tristate -+ tristate "RT2x00 MMIO support" - depends on m - - config RT2X00_LIB_PCI -- tristate -+ tristate "RT2x00 PCI support" -+ depends on PCI - depends on m - select RT2X00_LIB - - config RT2X00_LIB_SOC -- tristate -+ tristate "RT2x00 SoC support" -+ depends on SOC_RT288X || SOC_RT305X - depends on m - select RT2X00_LIB - - config RT2X00_LIB_USB -- tristate -+ tristate "RT2x00 USB support" -+ depends on USB - depends on m - select RT2X00_LIB - diff --git a/package/mac80211/patches/040-brcmutil_option.patch b/package/mac80211/patches/040-brcmutil_option.patch deleted file mode 100644 index 8a6cae6122..0000000000 --- a/package/mac80211/patches/040-brcmutil_option.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/Kconfig -+++ b/drivers/net/wireless/brcm80211/Kconfig -@@ -1,5 +1,5 @@ - config BRCMUTIL -- tristate -+ tristate "Broadcom 802.11 driver utility functions" - depends on m - - config BRCMSMAC diff --git a/package/mac80211/patches/050-lib80211_option.patch b/package/mac80211/patches/050-lib80211_option.patch deleted file mode 100644 index 5372114310..0000000000 --- a/package/mac80211/patches/050-lib80211_option.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/net/wireless/Kconfig -+++ b/net/wireless/Kconfig -@@ -123,7 +123,7 @@ config CFG80211_WEXT - extensions with cfg80211-based drivers. - - config LIB80211 -- tristate -+ tristate "lib80211" - depends on m - default n - help -@@ -133,15 +133,15 @@ config LIB80211 - Drivers should select this themselves if needed. - - config LIB80211_CRYPT_WEP -- tristate -+ tristate "lib80211 WEP support" - depends on m - - config LIB80211_CRYPT_CCMP -- tristate -+ tristate "lib80211 CCMP support" - depends on m - - config LIB80211_CRYPT_TKIP -- tristate -+ tristate "lib80211 TKIP support" - depends on m - - config LIB80211_DEBUG diff --git a/package/mac80211/patches/060-no_local_ssb_bcma.patch b/package/mac80211/patches/060-no_local_ssb_bcma.patch deleted file mode 100644 index 062c2774ab..0000000000 --- a/package/mac80211/patches/060-no_local_ssb_bcma.patch +++ /dev/null @@ -1,129 +0,0 @@ ---- a/.local-symbols -+++ b/.local-symbols -@@ -365,42 +365,6 @@ USB_CDC_PHONET= - USB_IPHETH= - USB_SIERRA_NET= - USB_VL600= --SSB_POSSIBLE= --SSB= --SSB_SPROM= --SSB_BLOCKIO= --SSB_PCIHOST_POSSIBLE= --SSB_PCIHOST= --SSB_B43_PCI_BRIDGE= --SSB_PCMCIAHOST_POSSIBLE= --SSB_PCMCIAHOST= --SSB_SDIOHOST_POSSIBLE= --SSB_SDIOHOST= --SSB_SILENT= --SSB_DEBUG= --SSB_SERIAL= --SSB_DRIVER_PCICORE_POSSIBLE= --SSB_DRIVER_PCICORE= --SSB_PCICORE_HOSTMODE= --SSB_DRIVER_MIPS= --SSB_SFLASH= --SSB_EMBEDDED= --SSB_DRIVER_EXTIF= --SSB_DRIVER_GIGE= --SSB_DRIVER_GPIO= --BCMA_POSSIBLE= --BCMA= --BCMA_BLOCKIO= --BCMA_HOST_PCI_POSSIBLE= --BCMA_HOST_PCI= --BCMA_DRIVER_PCI_HOSTMODE= --BCMA_HOST_SOC= --BCMA_DRIVER_MIPS= --BCMA_SFLASH= --BCMA_NFLASH= --BCMA_DRIVER_GMAC_CMN= --BCMA_DRIVER_GPIO= --BCMA_DEBUG= - DRM= - DRM_USB= - DRM_KMS_HELPER= ---- a/Kconfig -+++ b/Kconfig -@@ -31,9 +31,6 @@ source drivers/net/wireless/Kconfig - source drivers/net/ethernet/Kconfig - source drivers/net/usb/Kconfig - --source drivers/ssb/Kconfig --source drivers/bcma/Kconfig -- - source drivers/gpu/drm/Kconfig - - source net/nfc/Kconfig ---- a/Makefile.kernel -+++ b/Makefile.kernel -@@ -26,8 +26,6 @@ obj-$(CPTCFG_MAC80211) += net/mac80211/ - obj-$(CPTCFG_WLAN) += drivers/net/wireless/ - obj-$(CPTCFG_BT) += net/bluetooth/ - obj-$(CPTCFG_BT) += drivers/bluetooth/ --obj-$(CPTCFG_SSB) += drivers/ssb/ --obj-$(CPTCFG_BCMA) += drivers/bcma/ - obj-$(CPTCFG_ETHERNET) += drivers/net/ethernet/ - obj-$(CPTCFG_USB_NET_RNDIS_WLAN) += drivers/net/usb/ - obj-$(CPTCFG_DRM) += drivers/gpu/drm/ ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -2727,7 +2727,7 @@ static struct ssb_device *b43_ssb_gpio_d - { - struct ssb_bus *bus = dev->dev->sdev->bus; - --#ifdef CPTCFG_SSB_DRIVER_PCICORE -+#ifdef CONFIG_SSB_DRIVER_PCICORE - return (bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev); - #else - return bus->chipco.dev; -@@ -4733,7 +4733,7 @@ static int b43_wireless_core_init(struct - } - if (sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW) - hf |= B43_HF_DSCRQ; /* Disable slowclock requests from ucode. */ --#ifdef CPTCFG_SSB_DRIVER_PCICORE -+#ifdef CONFIG_SSB_DRIVER_PCICORE - if (dev->dev->bus_type == B43_BUS_SSB && - dev->dev->sdev->bus->bustype == SSB_BUSTYPE_PCI && - dev->dev->sdev->bus->pcicore.dev->id.revision <= 10) ---- a/drivers/net/wireless/b43legacy/main.c -+++ b/drivers/net/wireless/b43legacy/main.c -@@ -1937,7 +1937,7 @@ static int b43legacy_gpio_init(struct b4 - if (dev->dev->id.revision >= 2) - mask |= 0x0010; /* FIXME: This is redundant. */ - --#ifdef CPTCFG_SSB_DRIVER_PCICORE -+#ifdef CONFIG_SSB_DRIVER_PCICORE - pcidev = bus->pcicore.dev; - #endif - gpiodev = bus->chipco.dev ? : pcidev; -@@ -1956,7 +1956,7 @@ static void b43legacy_gpio_cleanup(struc - struct ssb_bus *bus = dev->dev->bus; - struct ssb_device *gpiodev, *pcidev = NULL; - --#ifdef CPTCFG_SSB_DRIVER_PCICORE -+#ifdef CONFIG_SSB_DRIVER_PCICORE - pcidev = bus->pcicore.dev; - #endif - gpiodev = bus->chipco.dev ? : pcidev; ---- a/drivers/net/wireless/brcm80211/brcmsmac/Makefile -+++ b/drivers/net/wireless/brcm80211/brcmsmac/Makefile -@@ -43,6 +43,6 @@ brcmsmac-y := \ - brcms_trace_events.o \ - debug.o - --brcmsmac-$(CPTCFG_BCMA_DRIVER_GPIO) += led.o -+brcmsmac-$(CONFIG_BCMA_DRIVER_GPIO) += led.o - - obj-$(CPTCFG_BRCMSMAC) += brcmsmac.o ---- a/drivers/net/wireless/brcm80211/brcmsmac/led.h -+++ b/drivers/net/wireless/brcm80211/brcmsmac/led.h -@@ -22,7 +22,7 @@ struct brcms_led { - bool active_low; - }; - --#ifdef CPTCFG_BCMA_DRIVER_GPIO -+#ifdef CONFIG_BCMA_DRIVER_GPIO - void brcms_led_unregister(struct brcms_info *wl); - int brcms_led_register(struct brcms_info *wl); - #else diff --git a/package/mac80211/patches/150-disable_addr_notifier.patch b/package/mac80211/patches/150-disable_addr_notifier.patch deleted file mode 100644 index 92c1909981..0000000000 --- a/package/mac80211/patches/150-disable_addr_notifier.patch +++ /dev/null @@ -1,67 +0,0 @@ ---- a/net/mac80211/main.c -+++ b/net/mac80211/main.c -@@ -300,7 +300,7 @@ void ieee80211_restart_hw(struct ieee802 - } - EXPORT_SYMBOL(ieee80211_restart_hw); - --#ifdef CONFIG_INET -+#ifdef __disabled__CONFIG_INET - static int ieee80211_ifa_changed(struct notifier_block *nb, - unsigned long data, void *arg) - { -@@ -359,7 +359,7 @@ static int ieee80211_ifa_changed(struct - } - #endif - --#if IS_ENABLED(CONFIG_IPV6) -+#if IS_ENABLED(__disabled__CONFIG_IPV6) - static int ieee80211_ifa6_changed(struct notifier_block *nb, - unsigned long data, void *arg) - { -@@ -990,14 +990,14 @@ int ieee80211_register_hw(struct ieee802 - goto fail_pm_qos; - } - --#ifdef CONFIG_INET -+#ifdef __disabled__CONFIG_INET - local->ifa_notifier.notifier_call = ieee80211_ifa_changed; - result = register_inetaddr_notifier(&local->ifa_notifier); - if (result) - goto fail_ifa; - #endif - --#if IS_ENABLED(CONFIG_IPV6) -+#if IS_ENABLED(__disabled__CONFIG_IPV6) - local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; - result = register_inet6addr_notifier(&local->ifa6_notifier); - if (result) -@@ -1006,13 +1006,13 @@ int ieee80211_register_hw(struct ieee802 - - return 0; - --#if IS_ENABLED(CONFIG_IPV6) -+#if IS_ENABLED(__disabled__CONFIG_IPV6) - fail_ifa6: --#ifdef CONFIG_INET -+#ifdef __disabled__CONFIG_INET - unregister_inetaddr_notifier(&local->ifa_notifier); - #endif - #endif --#if defined(CONFIG_INET) || defined(CONFIG_IPV6) -+#if defined(__disabled__CONFIG_INET) || defined(__disabled__CONFIG_IPV6) - fail_ifa: - pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, - &local->network_latency_notifier); -@@ -1045,10 +1045,10 @@ void ieee80211_unregister_hw(struct ieee - - pm_qos_remove_notifier(PM_QOS_NETWORK_LATENCY, - &local->network_latency_notifier); --#ifdef CONFIG_INET -+#ifdef __disabled__CONFIG_INET - unregister_inetaddr_notifier(&local->ifa_notifier); - #endif --#if IS_ENABLED(CONFIG_IPV6) -+#if IS_ENABLED(__disabled__CONFIG_IPV6) - unregister_inet6addr_notifier(&local->ifa6_notifier); - #endif - diff --git a/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch b/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch deleted file mode 100644 index d9672d473f..0000000000 --- a/package/mac80211/patches/201-ath5k-WAR-for-AR71xx-PCI-bug.patch +++ /dev/null @@ -1,38 +0,0 @@ ---- a/drivers/net/wireless/ath/ath5k/initvals.c -+++ b/drivers/net/wireless/ath/ath5k/initvals.c -@@ -62,8 +62,14 @@ static const struct ath5k_ini ar5210_ini - { AR5K_IMR, 0 }, - { AR5K_IER, AR5K_IER_DISABLE }, - { AR5K_BSR, 0, AR5K_INI_READ }, -+#if !defined(CONFIG_ATHEROS_AR71XX) && !defined(CONFIG_ATH79) - { AR5K_TXCFG, AR5K_DMASIZE_128B }, - { AR5K_RXCFG, AR5K_DMASIZE_128B }, -+#else -+ /* WAR for AR71xx PCI bug */ -+ { AR5K_TXCFG, AR5K_DMASIZE_128B }, -+ { AR5K_RXCFG, AR5K_DMASIZE_4B }, -+#endif - { AR5K_CFG, AR5K_INIT_CFG }, - { AR5K_TOPS, 8 }, - { AR5K_RXNOFRM, 8 }, ---- a/drivers/net/wireless/ath/ath5k/dma.c -+++ b/drivers/net/wireless/ath/ath5k/dma.c -@@ -860,10 +860,18 @@ ath5k_hw_dma_init(struct ath5k_hw *ah) - * guess we can tweak it and see how it goes ;-) - */ - if (ah->ah_version != AR5K_AR5210) { -+#if !defined(CONFIG_ATHEROS_AR71XX) && !defined(CONFIG_ATH79) - AR5K_REG_WRITE_BITS(ah, AR5K_TXCFG, - AR5K_TXCFG_SDMAMR, AR5K_DMASIZE_128B); - AR5K_REG_WRITE_BITS(ah, AR5K_RXCFG, - AR5K_RXCFG_SDMAMW, AR5K_DMASIZE_128B); -+#else -+ /* WAR for AR71xx PCI bug */ -+ AR5K_REG_WRITE_BITS(ah, AR5K_TXCFG, -+ AR5K_TXCFG_SDMAMR, AR5K_DMASIZE_128B); -+ AR5K_REG_WRITE_BITS(ah, AR5K_RXCFG, -+ AR5K_RXCFG_SDMAMW, AR5K_DMASIZE_4B); -+#endif - } - - /* Pre-enable interrupts on 5211/5212*/ diff --git a/package/mac80211/patches/300-pending_work.patch b/package/mac80211/patches/300-pending_work.patch deleted file mode 100644 index bd21e53405..0000000000 --- a/package/mac80211/patches/300-pending_work.patch +++ /dev/null @@ -1,313 +0,0 @@ ---- a/net/mac80211/agg-rx.c -+++ b/net/mac80211/agg-rx.c -@@ -204,6 +204,8 @@ static void ieee80211_send_addba_resp(st - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) - memcpy(mgmt->bssid, sdata->u.ibss.bssid, ETH_ALEN); -+ else if (sdata->vif.type == NL80211_IFTYPE_WDS) -+ memcpy(mgmt->bssid, da, ETH_ALEN); - - mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | - IEEE80211_STYPE_ACTION); ---- a/net/mac80211/agg-tx.c -+++ b/net/mac80211/agg-tx.c -@@ -81,7 +81,8 @@ static void ieee80211_send_addba_request - memcpy(mgmt->sa, sdata->vif.addr, ETH_ALEN); - if (sdata->vif.type == NL80211_IFTYPE_AP || - sdata->vif.type == NL80211_IFTYPE_AP_VLAN || -- sdata->vif.type == NL80211_IFTYPE_MESH_POINT) -+ sdata->vif.type == NL80211_IFTYPE_MESH_POINT || -+ sdata->vif.type == NL80211_IFTYPE_WDS) - memcpy(mgmt->bssid, sdata->vif.addr, ETH_ALEN); - else if (sdata->vif.type == NL80211_IFTYPE_STATION) - memcpy(mgmt->bssid, sdata->u.mgd.bssid, ETH_ALEN); -@@ -527,6 +528,7 @@ int ieee80211_start_tx_ba_session(struct - sdata->vif.type != NL80211_IFTYPE_MESH_POINT && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP && -+ sdata->vif.type != NL80211_IFTYPE_WDS && - sdata->vif.type != NL80211_IFTYPE_ADHOC) - return -EINVAL; - ---- a/net/mac80211/debugfs_sta.c -+++ b/net/mac80211/debugfs_sta.c -@@ -66,11 +66,11 @@ static ssize_t sta_flags_read(struct fil - test_sta_flag(sta, WLAN_STA_##flg) ? #flg "\n" : "" - - int res = scnprintf(buf, sizeof(buf), -- "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", -+ "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", - TEST(AUTH), TEST(ASSOC), TEST(PS_STA), - TEST(PS_DRIVER), TEST(AUTHORIZED), - TEST(SHORT_PREAMBLE), -- TEST(WME), TEST(WDS), TEST(CLEAR_PS_FILT), -+ TEST(WME), TEST(CLEAR_PS_FILT), - TEST(MFP), TEST(BLOCK_BA), TEST(PSPOLL), - TEST(UAPSD), TEST(SP), TEST(TDLS_PEER), - TEST(TDLS_PEER_AUTH), TEST(4ADDR_EVENT), ---- a/net/mac80211/ht.c -+++ b/net/mac80211/ht.c -@@ -281,13 +281,14 @@ void ieee80211_ba_session_work(struct wo - sta, tid, WLAN_BACK_RECIPIENT, - WLAN_REASON_UNSPECIFIED, true); - -+ spin_lock_bh(&sta->lock); -+ - tid_tx = sta->ampdu_mlme.tid_start_tx[tid]; - if (tid_tx) { - /* - * Assign it over to the normal tid_tx array - * where it "goes live". - */ -- spin_lock_bh(&sta->lock); - - sta->ampdu_mlme.tid_start_tx[tid] = NULL; - /* could there be a race? */ -@@ -300,6 +301,7 @@ void ieee80211_ba_session_work(struct wo - ieee80211_tx_ba_session_handle_start(sta, tid); - continue; - } -+ spin_unlock_bh(&sta->lock); - - tid_tx = rcu_dereference_protected_tid_tx(sta, tid); - if (tid_tx && test_and_clear_bit(HT_AGG_STATE_WANT_STOP, ---- a/net/mac80211/iface.c -+++ b/net/mac80211/iface.c -@@ -463,7 +463,6 @@ int ieee80211_do_open(struct wireless_de - struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); - struct net_device *dev = wdev->netdev; - struct ieee80211_local *local = sdata->local; -- struct sta_info *sta; - u32 changed = 0; - int res; - u32 hw_reconf_flags = 0; -@@ -629,30 +628,8 @@ int ieee80211_do_open(struct wireless_de - - set_bit(SDATA_STATE_RUNNING, &sdata->state); - -- if (sdata->vif.type == NL80211_IFTYPE_WDS) { -- /* Create STA entry for the WDS peer */ -- sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr, -- GFP_KERNEL); -- if (!sta) { -- res = -ENOMEM; -- goto err_del_interface; -- } -- -- sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); -- sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); -- sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); -- -- res = sta_info_insert(sta); -- if (res) { -- /* STA has been freed */ -- goto err_del_interface; -- } -- -- rate_control_rate_init(sta); -- netif_carrier_on(dev); -- } else if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) { -+ if (sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE) - rcu_assign_pointer(local->p2p_sdata, sdata); -- } - - /* - * set_multicast_list will be invoked by the networking core -@@ -1116,6 +1093,74 @@ static void ieee80211_if_setup(struct ne - dev->destructor = free_netdev; - } - -+static void ieee80211_wds_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata, -+ struct sk_buff *skb) -+{ -+ struct ieee80211_local *local = sdata->local; -+ struct ieee80211_rx_status *rx_status; -+ struct ieee802_11_elems elems; -+ struct ieee80211_mgmt *mgmt; -+ struct sta_info *sta; -+ size_t baselen; -+ u32 rates = 0; -+ u16 stype; -+ bool new = false; -+ enum ieee80211_band band; -+ struct ieee80211_supported_band *sband; -+ -+ rx_status = IEEE80211_SKB_RXCB(skb); -+ band = rx_status->band; -+ sband = local->hw.wiphy->bands[band]; -+ mgmt = (struct ieee80211_mgmt *) skb->data; -+ stype = le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE; -+ -+ if (stype != IEEE80211_STYPE_BEACON) -+ return; -+ -+ baselen = (u8 *) mgmt->u.probe_resp.variable - (u8 *) mgmt; -+ if (baselen > skb->len) -+ return; -+ -+ ieee802_11_parse_elems(mgmt->u.probe_resp.variable, -+ skb->len - baselen, false, &elems); -+ -+ rates = ieee80211_sta_get_rates(local, &elems, band, NULL); -+ -+ rcu_read_lock(); -+ -+ sta = sta_info_get(sdata, sdata->u.wds.remote_addr); -+ -+ if (!sta) { -+ rcu_read_unlock(); -+ sta = sta_info_alloc(sdata, sdata->u.wds.remote_addr, -+ GFP_KERNEL); -+ if (!sta) -+ return; -+ -+ new = true; -+ } -+ -+ sta->last_rx = jiffies; -+ sta->sta.supp_rates[band] = rates; -+ -+ if (elems.ht_cap_elem) -+ ieee80211_ht_cap_ie_to_sta_ht_cap(sdata, sband, -+ elems.ht_cap_elem, sta); -+ -+ if (elems.wmm_param) -+ set_sta_flag(sta, WLAN_STA_WME); -+ -+ if (new) { -+ sta_info_pre_move_state(sta, IEEE80211_STA_AUTH); -+ sta_info_pre_move_state(sta, IEEE80211_STA_ASSOC); -+ sta_info_pre_move_state(sta, IEEE80211_STA_AUTHORIZED); -+ rate_control_rate_init(sta); -+ sta_info_insert_rcu(sta); -+ } -+ -+ rcu_read_unlock(); -+} -+ - static void ieee80211_iface_work(struct work_struct *work) - { - struct ieee80211_sub_if_data *sdata = -@@ -1220,6 +1265,9 @@ static void ieee80211_iface_work(struct - break; - ieee80211_mesh_rx_queued_mgmt(sdata, skb); - break; -+ case NL80211_IFTYPE_WDS: -+ ieee80211_wds_rx_queued_mgmt(sdata, skb); -+ break; - default: - WARN(1, "frame for unexpected interface type"); - break; ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -2369,6 +2369,7 @@ ieee80211_rx_h_action(struct ieee80211_r - sdata->vif.type != NL80211_IFTYPE_MESH_POINT && - sdata->vif.type != NL80211_IFTYPE_AP_VLAN && - sdata->vif.type != NL80211_IFTYPE_AP && -+ sdata->vif.type != NL80211_IFTYPE_WDS && - sdata->vif.type != NL80211_IFTYPE_ADHOC) - break; - -@@ -2720,14 +2721,15 @@ ieee80211_rx_h_mgmt(struct ieee80211_rx_ - - if (!ieee80211_vif_is_mesh(&sdata->vif) && - sdata->vif.type != NL80211_IFTYPE_ADHOC && -- sdata->vif.type != NL80211_IFTYPE_STATION) -+ sdata->vif.type != NL80211_IFTYPE_STATION && -+ sdata->vif.type != NL80211_IFTYPE_WDS) - return RX_DROP_MONITOR; - - switch (stype) { - case cpu_to_le16(IEEE80211_STYPE_AUTH): - case cpu_to_le16(IEEE80211_STYPE_BEACON): - case cpu_to_le16(IEEE80211_STYPE_PROBE_RESP): -- /* process for all: mesh, mlme, ibss */ -+ /* process for all: mesh, mlme, ibss, wds */ - break; - case cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP): - case cpu_to_le16(IEEE80211_STYPE_REASSOC_RESP): -@@ -3059,10 +3061,16 @@ static int prepare_for_handlers(struct i - } - break; - case NL80211_IFTYPE_WDS: -- if (bssid || !ieee80211_is_data(hdr->frame_control)) -- return 0; - if (!ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2)) - return 0; -+ -+ if (ieee80211_is_data(hdr->frame_control) || -+ ieee80211_is_action(hdr->frame_control)) { -+ if (compare_ether_addr(sdata->vif.addr, hdr->addr1)) -+ return 0; -+ } else if (!ieee80211_is_beacon(hdr->frame_control)) -+ return 0; -+ - break; - case NL80211_IFTYPE_P2P_DEVICE: - if (!ieee80211_is_public_action(hdr, skb->len) && ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -149,6 +149,7 @@ static void cleanup_single_sta(struct st - * directly by station destruction. - */ - for (i = 0; i < IEEE80211_NUM_TIDS; i++) { -+ kfree(sta->ampdu_mlme.tid_start_tx[i]); - tid_tx = rcu_dereference_raw(sta->ampdu_mlme.tid_tx[i]); - if (!tid_tx) - continue; ---- a/net/mac80211/sta_info.h -+++ b/net/mac80211/sta_info.h -@@ -32,7 +32,6 @@ - * @WLAN_STA_SHORT_PREAMBLE: Station is capable of receiving short-preamble - * frames. - * @WLAN_STA_WME: Station is a QoS-STA. -- * @WLAN_STA_WDS: Station is one of our WDS peers. - * @WLAN_STA_CLEAR_PS_FILT: Clear PS filter in hardware (using the - * IEEE80211_TX_CTL_CLEAR_PS_FILT control flag) when the next - * frame to this station is transmitted. -@@ -66,7 +65,6 @@ enum ieee80211_sta_info_flags { - WLAN_STA_AUTHORIZED, - WLAN_STA_SHORT_PREAMBLE, - WLAN_STA_WME, -- WLAN_STA_WDS, - WLAN_STA_CLEAR_PS_FILT, - WLAN_STA_MFP, - WLAN_STA_BLOCK_BA, -@@ -203,6 +201,7 @@ struct tid_ampdu_rx { - * driver requested to close until the work for it runs - * @mtx: mutex to protect all TX data (except non-NULL assignments - * to tid_tx[idx], which are protected by the sta spinlock) -+ * tid_start_tx is also protected by sta->lock. - */ - struct sta_ampdu_mlme { - struct mutex mtx; ---- a/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/drivers/net/wireless/ath/ath9k/xmit.c -@@ -1778,9 +1778,13 @@ static void ath_tx_txqaddbuf(struct ath_ - } - - if (!internal) { -- txq->axq_depth++; -- if (bf_is_ampdu_not_probing(bf)) -- txq->axq_ampdu_depth++; -+ while (bf) { -+ txq->axq_depth++; -+ if (bf_is_ampdu_not_probing(bf)) -+ txq->axq_ampdu_depth++; -+ -+ bf = bf->bf_lastbf->bf_next; -+ } - } - } - ---- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c -+++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c -@@ -1183,7 +1183,7 @@ static int ath9k_htc_config(struct ieee8 - mutex_lock(&priv->htc_pm_lock); - - priv->ps_idle = !!(conf->flags & IEEE80211_CONF_IDLE); -- if (priv->ps_idle) -+ if (!priv->ps_idle) - chip_reset = true; - - mutex_unlock(&priv->htc_pm_lock); diff --git a/package/mac80211/patches/310-ap_scan.patch b/package/mac80211/patches/310-ap_scan.patch deleted file mode 100644 index d7479f2965..0000000000 --- a/package/mac80211/patches/310-ap_scan.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/mac80211/cfg.c -+++ b/net/mac80211/cfg.c -@@ -2092,7 +2092,7 @@ static int ieee80211_scan(struct wiphy * - * the frames sent while scanning on other channel will be - * lost) - */ -- if (sdata->u.ap.beacon && -+ if (0 && sdata->u.ap.beacon && - (!(wiphy->features & NL80211_FEATURE_AP_SCAN) || - !(req->flags & NL80211_SCAN_FLAG_AP))) - return -EOPNOTSUPP; diff --git a/package/mac80211/patches/400-ath_move_debug_code.patch b/package/mac80211/patches/400-ath_move_debug_code.patch deleted file mode 100644 index a01db3ea9b..0000000000 --- a/package/mac80211/patches/400-ath_move_debug_code.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/drivers/net/wireless/ath/Makefile -+++ b/drivers/net/wireless/ath/Makefile -@@ -11,7 +11,7 @@ obj-$(CPTCFG_ATH_COMMON) += ath.o - ath-objs := main.o \ - regd.o \ - hw.o \ -- key.o -+ key.o \ -+ debug.o - --ath-$(CPTCFG_ATH_DEBUG) += debug.o - ccflags-y += -D__CHECK_ENDIAN__ ---- a/drivers/net/wireless/ath/ath.h -+++ b/drivers/net/wireless/ath/ath.h -@@ -281,13 +281,6 @@ void _ath_dbg(struct ath_common *common, - #endif /* CPTCFG_ATH_DEBUG */ - - /** Returns string describing opmode, or NULL if unknown mode. */ --#ifdef CPTCFG_ATH_DEBUG - const char *ath_opmode_to_string(enum nl80211_iftype opmode); --#else --static inline const char *ath_opmode_to_string(enum nl80211_iftype opmode) --{ -- return "UNKNOWN"; --} --#endif - - #endif /* ATH_H */ diff --git a/package/mac80211/patches/401-ath9k_blink_default.patch b/package/mac80211/patches/401-ath9k_blink_default.patch deleted file mode 100644 index b0cef87762..0000000000 --- a/package/mac80211/patches/401-ath9k_blink_default.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -45,7 +45,7 @@ int ath9k_modparam_nohwcrypt; - module_param_named(nohwcrypt, ath9k_modparam_nohwcrypt, int, 0444); - MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption"); - --int led_blink; -+int led_blink = 1; - module_param_named(blink, led_blink, int, 0444); - MODULE_PARM_DESC(blink, "Enable LED blink on activity"); - diff --git a/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch deleted file mode 100644 index b2a7073307..0000000000 --- a/package/mac80211/patches/402-ath9k-fix-invalid-mac-address-handling.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -17,6 +17,7 @@ - #include <linux/io.h> - #include <linux/slab.h> - #include <linux/module.h> -+#include <linux/etherdevice.h> - #include <asm/unaligned.h> - - #include "hw.h" -@@ -518,8 +519,16 @@ static int ath9k_hw_init_macaddr(struct - common->macaddr[2 * i] = eeval >> 8; - common->macaddr[2 * i + 1] = eeval & 0xff; - } -- if (sum == 0 || sum == 0xffff * 3) -- return -EADDRNOTAVAIL; -+ if (!is_valid_ether_addr(common->macaddr)) { -+ ath_err(common, -+ "eeprom contains invalid mac address: %pM\n", -+ common->macaddr); -+ -+ random_ether_addr(common->macaddr); -+ ath_err(common, -+ "random mac address will be used: %pM\n", -+ common->macaddr); -+ } - - return 0; - } diff --git a/package/mac80211/patches/403-ath_regd_optional.patch b/package/mac80211/patches/403-ath_regd_optional.patch deleted file mode 100644 index a9d5b6d44e..0000000000 --- a/package/mac80211/patches/403-ath_regd_optional.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- a/drivers/net/wireless/ath/regd.c -+++ b/drivers/net/wireless/ath/regd.c -@@ -196,6 +196,10 @@ ath_reg_apply_beaconing_flags(struct wip - struct ieee80211_channel *ch; - unsigned int i; - -+#ifdef CPTCFG_ATH_USER_REGD -+ return; -+#endif -+ - for (band = 0; band < IEEE80211_NUM_BANDS; band++) { - - if (!wiphy->bands[band]) -@@ -250,6 +254,10 @@ ath_reg_apply_active_scan_flags(struct w - struct ieee80211_channel *ch; - const struct ieee80211_reg_rule *reg_rule; - -+#ifdef CPTCFG_ATH_USER_REGD -+ return; -+#endif -+ - sband = wiphy->bands[IEEE80211_BAND_2GHZ]; - if (!sband) - return; -@@ -299,6 +307,10 @@ static void ath_reg_apply_radar_flags(st - struct ieee80211_channel *ch; - unsigned int i; - -+#ifdef CPTCFG_ATH_USER_REGD -+ return; -+#endif -+ - if (!wiphy->bands[IEEE80211_BAND_5GHZ]) - return; - -@@ -503,6 +515,10 @@ ath_regd_init_wiphy(struct ath_regulator - { - const struct ieee80211_regdomain *regd; - -+#ifdef CPTCFG_ATH_USER_REGD -+ return 0; -+#endif -+ - wiphy->reg_notifier = reg_notifier; - wiphy->flags |= WIPHY_FLAG_STRICT_REGULATORY; - ---- a/drivers/net/wireless/ath/Kconfig -+++ b/drivers/net/wireless/ath/Kconfig -@@ -21,6 +21,9 @@ menuconfig ATH_CARDS - - if ATH_CARDS - -+config ATH_USER_REGD -+ bool "Do not enforce EEPROM regulatory restrictions" -+ - config ATH_DEBUG - bool "Atheros wireless debugging" - ---help--- diff --git a/package/mac80211/patches/404-world_regd_fixup.patch b/package/mac80211/patches/404-world_regd_fixup.patch deleted file mode 100644 index 7a5840eb18..0000000000 --- a/package/mac80211/patches/404-world_regd_fixup.patch +++ /dev/null @@ -1,84 +0,0 @@ ---- a/drivers/net/wireless/ath/regd.c -+++ b/drivers/net/wireless/ath/regd.c -@@ -42,7 +42,8 @@ static int __ath_regd_init(struct ath_re - NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_OFDM) - - /* We allow IBSS on these on a case by case basis by regulatory domain */ --#define ATH9K_5GHZ_5150_5350 REG_RULE(5150-10, 5350+10, 80, 0, 30,\ -+#define ATH9K_5GHZ_5150_5350 REG_RULE(5150-10, 5250, 80, 0, 30, 0), \ -+ REG_RULE(5250, 5350+10, 80, 0, 30,\ - NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) - #define ATH9K_5GHZ_5470_5850 REG_RULE(5470-10, 5850+10, 80, 0, 30,\ - NL80211_RRF_PASSIVE_SCAN | NL80211_RRF_NO_IBSS) -@@ -60,57 +61,56 @@ static int __ath_regd_init(struct ath_re - #define ATH9K_5GHZ_NO_MIDBAND ATH9K_5GHZ_5150_5350, \ - ATH9K_5GHZ_5725_5850 - -+#define REGD_RULES(...) \ -+ .reg_rules = { __VA_ARGS__ }, \ -+ .n_reg_rules = ARRAY_SIZE(((struct ieee80211_reg_rule[]) { __VA_ARGS__ })) -+ - /* Can be used for: - * 0x60, 0x61, 0x62 */ - static const struct ieee80211_regdomain ath_world_regdom_60_61_62 = { -- .n_reg_rules = 5, - .alpha2 = "99", -- .reg_rules = { -+ REGD_RULES( - ATH9K_2GHZ_ALL, - ATH9K_5GHZ_ALL, -- } -+ ) - }; - - /* Can be used by 0x63 and 0x65 */ - static const struct ieee80211_regdomain ath_world_regdom_63_65 = { -- .n_reg_rules = 4, - .alpha2 = "99", -- .reg_rules = { -+ REGD_RULES( - ATH9K_2GHZ_CH01_11, - ATH9K_2GHZ_CH12_13, - ATH9K_5GHZ_NO_MIDBAND, -- } -+ ) - }; - - /* Can be used by 0x64 only */ - static const struct ieee80211_regdomain ath_world_regdom_64 = { -- .n_reg_rules = 3, - .alpha2 = "99", -- .reg_rules = { -+ REGD_RULES( - ATH9K_2GHZ_CH01_11, - ATH9K_5GHZ_NO_MIDBAND, -- } -+ ) - }; - - /* Can be used by 0x66 and 0x69 */ - static const struct ieee80211_regdomain ath_world_regdom_66_69 = { -- .n_reg_rules = 3, - .alpha2 = "99", -- .reg_rules = { -+ REGD_RULES( - ATH9K_2GHZ_CH01_11, - ATH9K_5GHZ_ALL, -- } -+ ) - }; - - /* Can be used by 0x67, 0x68, 0x6A and 0x6C */ - static const struct ieee80211_regdomain ath_world_regdom_67_68_6A_6C = { -- .n_reg_rules = 4, - .alpha2 = "99", -- .reg_rules = { -+ REGD_RULES( - ATH9K_2GHZ_CH01_11, - ATH9K_2GHZ_CH12_13, - ATH9K_5GHZ_ALL, -- } -+ ) - }; - - static inline bool is_wwr_sku(u16 regd) diff --git a/package/mac80211/patches/405-regd_no_assoc_hints.patch b/package/mac80211/patches/405-regd_no_assoc_hints.patch deleted file mode 100644 index 5380853df6..0000000000 --- a/package/mac80211/patches/405-regd_no_assoc_hints.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/net/wireless/reg.c -+++ b/net/wireless/reg.c -@@ -1696,6 +1696,8 @@ void regulatory_hint_11d(struct wiphy *w - enum environment_cap env = ENVIRON_ANY; - struct regulatory_request *request = NULL, *lr; - -+ return; -+ - /* IE len must be evenly divisible by 2 */ - if (country_ie_len & 0x01) - return; -@@ -1890,6 +1892,7 @@ static void restore_regulatory_settings( - - void regulatory_hint_disconnect(void) - { -+ return; - REG_DBG_PRINT("All devices are disconnected, going to restore regulatory settings\n"); - restore_regulatory_settings(false); - } diff --git a/package/mac80211/patches/406-ath_regd_us.patch b/package/mac80211/patches/406-ath_regd_us.patch deleted file mode 100644 index cc55877809..0000000000 --- a/package/mac80211/patches/406-ath_regd_us.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- a/drivers/net/wireless/ath/regd_common.h -+++ b/drivers/net/wireless/ath/regd_common.h -@@ -32,6 +32,7 @@ enum EnumRd { - FCC2_WORLD = 0x21, - FCC2_ETSIC = 0x22, - FCC6_WORLD = 0x23, -+ FCC3_FCCA_2 = 0x2A, - FRANCE_RES = 0x31, - FCC3_FCCA = 0x3A, - FCC3_WORLD = 0x3B, -@@ -167,6 +168,7 @@ static struct reg_dmn_pair_mapping regDo - {FCC2_WORLD, CTL_FCC, CTL_ETSI}, - {FCC2_ETSIC, CTL_FCC, CTL_ETSI}, - {FCC3_FCCA, CTL_FCC, CTL_FCC}, -+ {FCC3_FCCA_2, CTL_FCC, CTL_FCC}, - {FCC3_WORLD, CTL_FCC, CTL_ETSI}, - {FCC4_FCCA, CTL_FCC, CTL_FCC}, - {FCC5_FCCA, CTL_FCC, CTL_FCC}, -@@ -463,6 +465,7 @@ static struct country_code_to_enum_rd al - {CTRY_UAE, NULL1_WORLD, "AE"}, - {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB"}, - {CTRY_UNITED_STATES, FCC3_FCCA, "US"}, -+ {CTRY_UNITED_STATES, FCC3_FCCA_2, "US"}, - /* This "PS" is for US public safety actually... to support this we - * would need to assign new special alpha2 to CRDA db as with the world - * regdomain and use another alpha2 */ diff --git a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch b/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch deleted file mode 100644 index 2eae3916dd..0000000000 --- a/package/mac80211/patches/410-ath9k_allow_adhoc_and_ap.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -729,6 +729,7 @@ static const struct ieee80211_iface_limi - #endif - BIT(NL80211_IFTYPE_AP) | - BIT(NL80211_IFTYPE_P2P_GO) }, -+ { .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) }, - }; - - diff --git a/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch b/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch deleted file mode 100644 index 12e03e1bb1..0000000000 --- a/package/mac80211/patches/411-ath5k_allow_adhoc_and_ap.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c -+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c -@@ -86,13 +86,8 @@ ath5k_add_interface(struct ieee80211_hw - goto end; - } - -- /* Don't allow other interfaces if one ad-hoc is configured. -- * TODO: Fix the problems with ad-hoc and multiple other interfaces. -- * We would need to operate the HW in ad-hoc mode to allow TSF updates -- * for the IBSS, but this breaks with additional AP or STA interfaces -- * at the moment. */ -- if (ah->num_adhoc_vifs || -- (ah->nvifs && vif->type == NL80211_IFTYPE_ADHOC)) { -+ /* Don't allow more than one ad-hoc interface */ -+ if (ah->num_adhoc_vifs && vif->type == NL80211_IFTYPE_ADHOC) { - ATH5K_ERR(ah, "Only one single ad-hoc interface is allowed.\n"); - ret = -ELNRNG; - goto end; ---- a/drivers/net/wireless/ath/ath5k/base.c -+++ b/drivers/net/wireless/ath/ath5k/base.c -@@ -1916,7 +1916,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) - } - - if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + -- ah->num_mesh_vifs > 1) || -+ ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) || - ah->opmode == NL80211_IFTYPE_MESH_POINT) { - u64 tsf = ath5k_hw_get_tsf64(ah); - u32 tsftu = TSF_TO_TU(tsf); -@@ -2002,7 +2002,7 @@ ath5k_beacon_update_timers(struct ath5k_ - - intval = ah->bintval & AR5K_BEACON_PERIOD; - if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs -- + ah->num_mesh_vifs > 1) { -+ + ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) { - intval /= ATH_BCBUF; /* staggered multi-bss beacons */ - if (intval < 15) - ATH5K_WARN(ah, "intval %u is too low, min 15\n", -@@ -2469,6 +2469,7 @@ static const struct ieee80211_iface_limi - BIT(NL80211_IFTYPE_MESH_POINT) | - #endif - BIT(NL80211_IFTYPE_AP) }, -+ { .max = 1, .types = BIT(NL80211_IFTYPE_ADHOC) }, - }; - - static const struct ieee80211_iface_combination if_comb = { diff --git a/package/mac80211/patches/420-ath5k_disable_fast_cc.patch b/package/mac80211/patches/420-ath5k_disable_fast_cc.patch deleted file mode 100644 index 414f49508f..0000000000 --- a/package/mac80211/patches/420-ath5k_disable_fast_cc.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- a/drivers/net/wireless/ath/ath5k/reset.c -+++ b/drivers/net/wireless/ath/ath5k/reset.c -@@ -1154,6 +1154,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum - tsf_lo = 0; - mode = 0; - -+#if 0 - /* - * Sanity check for fast flag - * Fast channel change only available -@@ -1161,6 +1162,7 @@ ath5k_hw_reset(struct ath5k_hw *ah, enum - */ - if (fast && (ah->ah_radio != AR5K_RF2413) && - (ah->ah_radio != AR5K_RF5413)) -+#endif - fast = false; - - /* Disable sleep clock operation diff --git a/package/mac80211/patches/430-add_ath5k_platform.patch b/package/mac80211/patches/430-add_ath5k_platform.patch deleted file mode 100644 index b213e2a819..0000000000 --- a/package/mac80211/patches/430-add_ath5k_platform.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- /dev/null -+++ b/include/linux/ath5k_platform.h -@@ -0,0 +1,30 @@ -+/* -+ * Copyright (c) 2008 Atheros Communications Inc. -+ * Copyright (c) 2009 Gabor Juhos <juhosg@openwrt.org> -+ * Copyright (c) 2009 Imre Kaloz <kaloz@openwrt.org> -+ * Copyright (c) 2010 Daniel Golle <daniel.golle@gmail.com> -+ * -+ * Permission to use, copy, modify, and/or distribute this software for any -+ * purpose with or without fee is hereby granted, provided that the above -+ * copyright notice and this permission notice appear in all copies. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ */ -+ -+#ifndef _LINUX_ATH5K_PLATFORM_H -+#define _LINUX_ATH5K_PLATFORM_H -+ -+#define ATH5K_PLAT_EEP_MAX_WORDS 2048 -+ -+struct ath5k_platform_data { -+ u16 *eeprom_data; -+ u8 *macaddr; -+}; -+ -+#endif /* _LINUX_ATH5K_PLATFORM_H */ diff --git a/package/mac80211/patches/431-add_platform_eeprom_support_to_ath5k.patch b/package/mac80211/patches/431-add_platform_eeprom_support_to_ath5k.patch deleted file mode 100644 index a223b38348..0000000000 --- a/package/mac80211/patches/431-add_platform_eeprom_support_to_ath5k.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- a/drivers/net/wireless/ath/ath5k/pci.c -+++ b/drivers/net/wireless/ath/ath5k/pci.c -@@ -21,6 +21,7 @@ - #include <linux/pci-aspm.h> - #include <linux/etherdevice.h> - #include <linux/module.h> -+#include <linux/ath5k_platform.h> - #include "../ath.h" - #include "ath5k.h" - #include "debug.h" -@@ -72,7 +73,7 @@ static void ath5k_pci_read_cachesize(str - } - - /* -- * Read from eeprom -+ * Read from eeprom or platform_data - */ - static bool - ath5k_pci_eeprom_read(struct ath_common *common, u32 offset, u16 *data) -@@ -80,6 +81,19 @@ ath5k_pci_eeprom_read(struct ath_common - struct ath5k_hw *ah = (struct ath5k_hw *) common->ah; - u32 status, timeout; - -+ struct ath5k_platform_data *pdata = NULL; -+ -+ if (ah->pdev) -+ pdata = ah->pdev->dev.platform_data; -+ -+ if (pdata && pdata->eeprom_data && pdata->eeprom_data[61] == AR5K_EEPROM_MAGIC_VALUE) { -+ if (offset >= ATH5K_PLAT_EEP_MAX_WORDS) -+ return false; -+ -+ *data = pdata->eeprom_data[offset]; -+ return true; -+ } -+ - /* - * Initialize EEPROM access - */ -@@ -123,6 +137,16 @@ static int ath5k_pci_eeprom_read_mac(str - u16 data; - int octet; - -+ struct ath5k_platform_data *pdata = NULL; -+ -+ if (ah->pdev) -+ pdata = ah->pdev->dev.platform_data; -+ -+ if (pdata && pdata->macaddr) { -+ memcpy(mac, pdata->macaddr, ETH_ALEN); -+ return 0; -+ } -+ - AR5K_EEPROM_READ(0x20, data); - - for (offset = 0x1f, octet = 0, total = 0; offset >= 0x1d; offset--) { diff --git a/package/mac80211/patches/432-ath5k_add_pciids.patch b/package/mac80211/patches/432-ath5k_add_pciids.patch deleted file mode 100644 index e5c85cee61..0000000000 --- a/package/mac80211/patches/432-ath5k_add_pciids.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/ath/ath5k/pci.c -+++ b/drivers/net/wireless/ath/ath5k/pci.c -@@ -48,6 +48,8 @@ static DEFINE_PCI_DEVICE_TABLE(ath5k_pci - { PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */ - { PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */ - { PCI_VDEVICE(ATHEROS, 0x001d) }, /* 2417 Nala */ -+ { PCI_VDEVICE(ATHEROS, 0xff16) }, /* 2413,2414 sx76x on lantiq_danube */ -+ { PCI_VDEVICE(ATHEROS, 0xff1a) }, /* 2417 arv45xx on lantiq_danube */ - { PCI_VDEVICE(ATHEROS, 0xff1b) }, /* AR5BXB63 */ - { 0 } - }; diff --git a/package/mac80211/patches/440-ath5k_channel_bw_debugfs.patch b/package/mac80211/patches/440-ath5k_channel_bw_debugfs.patch deleted file mode 100644 index 01c28bcca2..0000000000 --- a/package/mac80211/patches/440-ath5k_channel_bw_debugfs.patch +++ /dev/null @@ -1,113 +0,0 @@ -This adds a bwmode debugfs file which can be used to set alternate -channel operating bandwidths. Only tested with AR5413 and only at -5 and 20 mhz channels. - -Signed-off-by: Pat Erley <pat-lkml at erley.org> ---- -Other devices will need to be added to the switch in write_file_bwmode - -drivers/net/wireless/ath/ath5k/debug.c | 86 ++++++++++++++++++++++++++++++++ - 1 files changed, 86 insertions(+), 0 deletions(-) - ---- a/drivers/net/wireless/ath/ath5k/debug.c -+++ b/drivers/net/wireless/ath/ath5k/debug.c -@@ -811,6 +811,89 @@ static const struct file_operations fops - .llseek = default_llseek, - }; - -+/* debugfs: bwmode */ -+ -+static ssize_t read_file_bwmode(struct file *file, char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath5k_hw *ah = file->private_data; -+ char buf[15]; -+ unsigned int len = 0; -+ -+ int cur_ah_bwmode = ah->ah_bwmode; -+ -+#define print_selected(MODE, LABEL) \ -+ if (cur_ah_bwmode == MODE) \ -+ len += snprintf(buf+len, sizeof(buf)-len, "[%s]", LABEL); \ -+ else \ -+ len += snprintf(buf+len, sizeof(buf)-len, "%s", LABEL); \ -+ len += snprintf(buf+len, sizeof(buf)-len, " "); -+ -+ print_selected(AR5K_BWMODE_5MHZ, "5"); -+ print_selected(AR5K_BWMODE_10MHZ, "10"); -+ print_selected(AR5K_BWMODE_DEFAULT, "20"); -+ print_selected(AR5K_BWMODE_40MHZ, "40"); -+#undef print_selected -+ -+ len += snprintf(buf+len, sizeof(buf)-len, "\n"); -+ -+ return simple_read_from_buffer(user_buf, count, ppos, buf, len); -+} -+ -+static ssize_t write_file_bwmode(struct file *file, -+ const char __user *userbuf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath5k_hw *ah = file->private_data; -+ char buf[3]; -+ int bw = 20; -+ int tobwmode = AR5K_BWMODE_DEFAULT; -+ -+ if (copy_from_user(buf, userbuf, min(count, sizeof(buf)))) -+ return -EFAULT; -+ -+ /* TODO: Add check for active interface */ -+ -+ if(strncmp(buf, "5", 1) == 0 ) { -+ tobwmode = AR5K_BWMODE_5MHZ; -+ bw = 5; -+ } else if ( strncmp(buf, "10", 2) == 0 ) { -+ tobwmode = AR5K_BWMODE_10MHZ; -+ bw = 10; -+ } else if ( strncmp(buf, "20", 2) == 0 ) { -+ tobwmode = AR5K_BWMODE_DEFAULT; -+ bw = 20; -+ } else if ( strncmp(buf, "40", 2) == 0 ) { -+ tobwmode = AR5K_BWMODE_40MHZ; -+ bw = 40; -+ } else -+ return -EINVAL; -+ -+ ATH5K_INFO(ah, "Changing to %imhz channel width[%i]\n", -+ bw, tobwmode); -+ -+ switch (ah->ah_radio) { -+ /* TODO: only define radios that actually support 5/10mhz channels */ -+ case AR5K_RF5413: case AR5K_RF5110: case AR5K_RF5111: case AR5K_RF5112: case AR5K_RF2413: case AR5K_RF2316: case AR5K_RF2317: case AR5K_RF2425: -+ if(ah->ah_bwmode != tobwmode) { -+ mutex_lock(&ah->lock); -+ ah->ah_bwmode = tobwmode; -+ mutex_unlock(&ah->lock); -+ } -+ break; -+ default: -+ return -EOPNOTSUPP; -+ } -+ return count; -+} -+ -+static const struct file_operations fops_bwmode = { -+ .read = read_file_bwmode, -+ .write = write_file_bwmode, -+ .open = simple_open, -+ .owner = THIS_MODULE, -+ .llseek = default_llseek, -+}; - - /* debugfs: queues etc */ - -@@ -902,6 +985,9 @@ ath5k_debug_init_device(struct ath5k_hw - debugfs_create_file("beacon", S_IWUSR | S_IRUSR, phydir, ah, - &fops_beacon); - -+ debugfs_create_file("bwmode", S_IWUSR | S_IRUSR, phydir, ah, -+ &fops_bwmode); -+ - debugfs_create_file("reset", S_IWUSR, phydir, ah, &fops_reset); - - debugfs_create_file("antenna", S_IWUSR | S_IRUSR, phydir, ah, diff --git a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch b/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch deleted file mode 100644 index 7f4e68d5ea..0000000000 --- a/package/mac80211/patches/500-ath9k_eeprom_debugfs.patch +++ /dev/null @@ -1,65 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1735,6 +1735,53 @@ void ath9k_deinit_debug(struct ath_softc - } - } - -+static ssize_t read_file_eeprom(struct file *file, char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ struct ath_hw *ah = sc->sc_ah; -+ struct ath_common *common = ath9k_hw_common(ah); -+ int bytes = 0; -+ int pos = *ppos; -+ int size = 4096; -+ u16 val; -+ int i; -+ -+ if (AR_SREV_9300_20_OR_LATER(ah)) -+ size = 16384; -+ -+ if (*ppos < 0) -+ return -EINVAL; -+ -+ if (count > size - *ppos) -+ count = size - *ppos; -+ -+ for (i = *ppos / 2; count > 0; count -= bytes, *ppos += bytes, i++) { -+ void *from = &val; -+ -+ if (!common->bus_ops->eeprom_read(common, i, &val)) -+ val = 0xffff; -+ -+ if (*ppos % 2) { -+ from++; -+ bytes = 1; -+ } else if (count == 1) { -+ bytes = 1; -+ } else { -+ bytes = 2; -+ } -+ copy_to_user(user_buf, from, bytes); -+ user_buf += bytes; -+ } -+ return *ppos - pos; -+} -+ -+static const struct file_operations fops_eeprom = { -+ .read = read_file_eeprom, -+ .open = simple_open, -+ .owner = THIS_MODULE -+}; -+ - int ath9k_init_debug(struct ath_hw *ah) - { - struct ath_common *common = ath9k_hw_common(ah); -@@ -1752,6 +1799,8 @@ int ath9k_init_debug(struct ath_hw *ah) - - ath9k_dfs_init_debug(sc); - -+ debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, -+ &fops_eeprom); - debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_dma); - debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, diff --git a/package/mac80211/patches/501-ath9k-eeprom_endianess.patch b/package/mac80211/patches/501-ath9k-eeprom_endianess.patch deleted file mode 100644 index 3d904e939d..0000000000 --- a/package/mac80211/patches/501-ath9k-eeprom_endianess.patch +++ /dev/null @@ -1,102 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/eeprom_def.c -+++ b/drivers/net/wireless/ath/ath9k/eeprom_def.c -@@ -262,7 +262,7 @@ static int ath9k_hw_def_check_eeprom(str - { - struct ar5416_eeprom_def *eep = &ah->eeprom.def; - struct ath_common *common = ath9k_hw_common(ah); -- u16 *eepdata, temp, magic, magic2; -+ u16 *eepdata, temp, magic; - u32 sum = 0, el; - bool need_swap = false; - int i, addr, size; -@@ -272,27 +272,16 @@ static int ath9k_hw_def_check_eeprom(str - return false; - } - -- if (!ath9k_hw_use_flash(ah)) { -- ath_dbg(common, EEPROM, "Read Magic = 0x%04X\n", magic); -- -- if (magic != AR5416_EEPROM_MAGIC) { -- magic2 = swab16(magic); -- -- if (magic2 == AR5416_EEPROM_MAGIC) { -- size = sizeof(struct ar5416_eeprom_def); -- need_swap = true; -- eepdata = (u16 *) (&ah->eeprom); -- -- for (addr = 0; addr < size / sizeof(u16); addr++) { -- temp = swab16(*eepdata); -- *eepdata = temp; -- eepdata++; -- } -- } else { -- ath_err(common, -- "Invalid EEPROM Magic. Endianness mismatch.\n"); -- return -EINVAL; -- } -+ if (swab16(magic) == AR5416_EEPROM_MAGIC && -+ !(ah->ah_flags & AH_NO_EEP_SWAP)) { -+ size = sizeof(struct ar5416_eeprom_def); -+ need_swap = true; -+ eepdata = (u16 *) (&ah->eeprom); -+ -+ for (addr = 0; addr < size / sizeof(u16); addr++) { -+ temp = swab16(*eepdata); -+ *eepdata = temp; -+ eepdata++; - } - } - ---- a/drivers/net/wireless/ath/ath9k/eeprom_4k.c -+++ b/drivers/net/wireless/ath/ath9k/eeprom_4k.c -@@ -57,7 +57,7 @@ static bool ath9k_hw_4k_fill_eeprom(stru - { - struct ath_common *common = ath9k_hw_common(ah); - -- if (!ath9k_hw_use_flash(ah)) { -+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) { - ath_dbg(common, EEPROM, "Reading from EEPROM, not flash\n"); - } - ---- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c -+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c -@@ -60,7 +60,7 @@ static bool ath9k_hw_ar9287_fill_eeprom( - { - struct ath_common *common = ath9k_hw_common(ah); - -- if (!ath9k_hw_use_flash(ah)) { -+ if (!(ah->ah_flags & AH_NO_EEP_SWAP)) { - ath_dbg(common, EEPROM, "Reading from EEPROM, not flash\n"); - } - ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -735,6 +735,7 @@ enum ath_cal_list { - #define AH_USE_EEPROM 0x1 - #define AH_UNPLUGGED 0x2 /* The card has been physically removed. */ - #define AH_FASTCC 0x4 -+#define AH_NO_EEP_SWAP 0x8 /* Do not swap EEPROM data */ - - struct ath_hw { - struct ath_ops reg_ops; ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -592,6 +592,8 @@ static int ath9k_init_softc(u16 devid, s - ah->is_clk_25mhz = pdata->is_clk_25mhz; - ah->get_mac_revision = pdata->get_mac_revision; - ah->external_reset = pdata->external_reset; -+ if (!pdata->endian_check) -+ ah->ah_flags |= AH_NO_EEP_SWAP; - } - - common = ath9k_hw_common(ah); ---- a/include/linux/ath9k_platform.h -+++ b/include/linux/ath9k_platform.h -@@ -31,6 +31,7 @@ struct ath9k_platform_data { - u32 gpio_mask; - u32 gpio_val; - -+ bool endian_check; - bool is_clk_25mhz; - int (*get_mac_revision)(void); - int (*external_reset)(void); diff --git a/package/mac80211/patches/502-ath9k_ahb_init.patch b/package/mac80211/patches/502-ath9k_ahb_init.patch deleted file mode 100644 index 9e715526a6..0000000000 --- a/package/mac80211/patches/502-ath9k_ahb_init.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -984,23 +984,23 @@ static int __init ath9k_init(void) - goto err_out; - } - -- error = ath_pci_init(); -+ error = ath_ahb_init(); - if (error < 0) { -- pr_err("No PCI devices found, driver not installed\n"); - error = -ENODEV; - goto err_rate_unregister; - } - -- error = ath_ahb_init(); -+ error = ath_pci_init(); - if (error < 0) { -+ pr_err("No PCI devices found, driver not installed\n"); - error = -ENODEV; -- goto err_pci_exit; -+ goto err_ahb_exit; - } - - return 0; - -- err_pci_exit: -- ath_pci_exit(); -+ err_ahb_exit: -+ ath_ahb_exit(); - - err_rate_unregister: - ath_rate_control_unregister(); diff --git a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch b/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch deleted file mode 100644 index 647bde2ca0..0000000000 --- a/package/mac80211/patches/510-ath9k_intr_mitigation_tweak.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2010,8 +2010,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st - REG_WRITE(ah, AR_OBS, 8); - - if (ah->config.rx_intr_mitigation) { -- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500); -- REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 2000); -+ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 250); -+ REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 500); - } - - if (ah->config.tx_intr_mitigation) { diff --git a/package/mac80211/patches/511-ath9k_reduce_rxbuf.patch b/package/mac80211/patches/511-ath9k_reduce_rxbuf.patch deleted file mode 100644 index 8d8c5fd7fe..0000000000 --- a/package/mac80211/patches/511-ath9k_reduce_rxbuf.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -119,7 +119,7 @@ int ath_descdma_setup(struct ath_softc * - /* RX / TX */ - /***********/ - --#define ATH_RXBUF 512 -+#define ATH_RXBUF 256 - #define ATH_TXBUF 512 - #define ATH_TXBUF_RESERVE 5 - #define ATH_MAX_QDEPTH (ATH_TXBUF / 4 - ATH_TXBUF_RESERVE) diff --git a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch b/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch deleted file mode 100644 index ef87a35922..0000000000 --- a/package/mac80211/patches/512-ath9k_channelbw_debugfs.patch +++ /dev/null @@ -1,128 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -696,6 +696,7 @@ struct ath_softc { - struct ieee80211_hw *hw; - struct device *dev; - -+ u32 chan_bw; - struct survey_info *cur_survey; - struct survey_info survey[ATH9K_NUM_CHANNELS]; - -@@ -899,6 +900,7 @@ struct fft_sample_ht20 { - u8 data[SPECTRAL_HT20_NUM_BINS]; - } __packed; - -+int ath9k_config(struct ieee80211_hw *hw, u32 changed); - void ath9k_tasklet(unsigned long data); - int ath_cabq_update(struct ath_softc *); - ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1782,6 +1782,50 @@ static const struct file_operations fops - .owner = THIS_MODULE - }; - -+ -+static ssize_t read_file_chan_bw(struct file *file, char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ char buf[32]; -+ unsigned int len; -+ -+ len = sprintf(buf, "0x%08x\n", sc->chan_bw); -+ return simple_read_from_buffer(user_buf, count, ppos, buf, len); -+} -+ -+static ssize_t write_file_chan_bw(struct file *file, const char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ unsigned long chan_bw; -+ char buf[32]; -+ ssize_t len; -+ -+ len = min(count, sizeof(buf) - 1); -+ if (copy_from_user(buf, user_buf, len)) -+ return -EFAULT; -+ -+ buf[len] = '\0'; -+ if (strict_strtoul(buf, 0, &chan_bw)) -+ return -EINVAL; -+ -+ sc->chan_bw = chan_bw; -+ if (!test_bit(SC_OP_INVALID, &sc->sc_flags)) -+ ath9k_config(sc->hw, IEEE80211_CONF_CHANGE_CHANNEL); -+ -+ return count; -+} -+ -+static const struct file_operations fops_chanbw = { -+ .read = read_file_chan_bw, -+ .write = write_file_chan_bw, -+ .open = simple_open, -+ .owner = THIS_MODULE, -+ .llseek = default_llseek, -+}; -+ -+ - int ath9k_init_debug(struct ath_hw *ah) - { - struct ath_common *common = ath9k_hw_common(ah); -@@ -1801,6 +1845,8 @@ int ath9k_init_debug(struct ath_hw *ah) - - debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_eeprom); -+ debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_chanbw); - debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_dma); - debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1139,7 +1139,7 @@ int ath9k_spectral_scan_config(struct ie - return 0; - } - --static int ath9k_config(struct ieee80211_hw *hw, u32 changed) -+int ath9k_config(struct ieee80211_hw *hw, u32 changed) - { - struct ath_softc *sc = hw->priv; - struct ath_hw *ah = sc->sc_ah; -@@ -1195,9 +1195,11 @@ static int ath9k_config(struct ieee80211 - struct ieee80211_channel *curchan = hw->conf.chandef.chan; - enum nl80211_channel_type channel_type = - cfg80211_get_chandef_type(&conf->chandef); -+ struct ath9k_channel *hchan; - int pos = curchan->hw_value; - int old_pos = -1; - unsigned long flags; -+ u32 oldflags; - - if (ah->curchan) - old_pos = ah->curchan - &ah->channels[0]; -@@ -1233,7 +1235,23 @@ static int ath9k_config(struct ieee80211 - memset(&sc->survey[pos], 0, sizeof(struct survey_info)); - } - -- if (ath_set_channel(sc, hw, &sc->sc_ah->channels[pos]) < 0) { -+ hchan = &sc->sc_ah->channels[pos]; -+ oldflags = hchan->channelFlags; -+ switch (sc->chan_bw) { -+ case 5: -+ hchan->channelFlags &= ~CHANNEL_HALF; -+ hchan->channelFlags |= CHANNEL_QUARTER; -+ break; -+ case 10: -+ hchan->channelFlags &= ~CHANNEL_QUARTER; -+ hchan->channelFlags |= CHANNEL_HALF; -+ break; -+ default: -+ hchan->channelFlags &= ~(CHANNEL_HALF | CHANNEL_QUARTER); -+ break; -+ } -+ -+ if (ath_set_channel(sc, hw, hchan) < 0) { - ath_err(common, "Unable to set channel\n"); - mutex_unlock(&sc->mutex); - ath9k_ps_restore(sc); diff --git a/package/mac80211/patches/520-mac80211_cur_txpower.patch b/package/mac80211/patches/520-mac80211_cur_txpower.patch deleted file mode 100644 index 8583cdc25b..0000000000 --- a/package/mac80211/patches/520-mac80211_cur_txpower.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -1614,6 +1614,7 @@ struct ieee80211_hw { - u8 max_tx_aggregation_subframes; - u8 offchannel_tx_hw_queue; - u8 radiotap_mcs_details; -+ s8 cur_power_level; - u16 radiotap_vht_details; - netdev_features_t netdev_features; - u8 uapsd_queues; ---- a/net/mac80211/cfg.c -+++ b/net/mac80211/cfg.c -@@ -2273,7 +2273,9 @@ static int ieee80211_get_tx_power(struct - struct ieee80211_local *local = wiphy_priv(wiphy); - struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); - -- if (!local->use_chanctx) -+ if (local->hw.cur_power_level) -+ *dbm = local->hw.cur_power_level; -+ else if (!local->use_chanctx) - *dbm = local->hw.conf.power_level; - else - *dbm = sdata->vif.bss_conf.txpower; ---- a/net/mac80211/main.c -+++ b/net/mac80211/main.c -@@ -167,6 +167,7 @@ static u32 ieee80211_hw_conf_chan(struct - - if (local->hw.conf.power_level != power) { - changed |= IEEE80211_CONF_CHANGE_POWER; -+ local->hw.cur_power_level = power; - local->hw.conf.power_level = power; - } - diff --git a/package/mac80211/patches/521-ath9k_cur_txpower.patch b/package/mac80211/patches/521-ath9k_cur_txpower.patch deleted file mode 100644 index 87a316c4f0..0000000000 --- a/package/mac80211/patches/521-ath9k_cur_txpower.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1258,6 +1258,8 @@ int ath9k_config(struct ieee80211_hw *hw - return -EINVAL; - } - -+ hw->cur_power_level = sc->curtxpow / 2; -+ - /* - * The most recent snapshot of channel->noisefloor for the old - * channel is only available after the hardware reset. Copy it to -@@ -1294,6 +1296,7 @@ int ath9k_config(struct ieee80211_hw *hw - sc->config.txpowlimit = 2 * conf->power_level; - ath9k_cmn_update_txpow(ah, sc->curtxpow, - sc->config.txpowlimit, &sc->curtxpow); -+ hw->cur_power_level = sc->curtxpow / 2; - } - - mutex_unlock(&sc->mutex); diff --git a/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch b/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch deleted file mode 100644 index 50dbcd9902..0000000000 --- a/package/mac80211/patches/522-ath9k_per_chain_signal_strength.patch +++ /dev/null @@ -1,153 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/mac.h -+++ b/drivers/net/wireless/ath/ath9k/mac.h -@@ -133,12 +133,8 @@ struct ath_rx_status { - u8 rs_rate; - u8 rs_antenna; - u8 rs_more; -- int8_t rs_rssi_ctl0; -- int8_t rs_rssi_ctl1; -- int8_t rs_rssi_ctl2; -- int8_t rs_rssi_ext0; -- int8_t rs_rssi_ext1; -- int8_t rs_rssi_ext2; -+ int8_t rs_rssi_ctl[3]; -+ int8_t rs_rssi_ext[3]; - u8 rs_isaggr; - u8 rs_moreaggr; - u8 rs_num_delims; ---- a/drivers/net/wireless/ath/ath9k/recv.c -+++ b/drivers/net/wireless/ath/ath9k/recv.c -@@ -939,6 +939,7 @@ static int ath9k_rx_skb_preprocess(struc - struct ath_hw *ah = sc->sc_ah; - struct ath_common *common = ath9k_hw_common(ah); - bool discard_current = sc->rx.discard_next; -+ int i, j; - - sc->rx.discard_next = rx_stats->rs_more; - if (discard_current) -@@ -968,6 +969,21 @@ static int ath9k_rx_skb_preprocess(struc - if (rx_stats->rs_moreaggr) - rx_status->flag |= RX_FLAG_NO_SIGNAL_VAL; - -+ for (i = 0, j = 0; i < ARRAY_SIZE(rx_stats->rs_rssi_ctl); i++) { -+ s8 rssi; -+ -+ if (!(ah->rxchainmask & BIT(i))) -+ continue; -+ -+ rssi = rx_stats->rs_rssi_ctl[i]; -+ if (rssi != ATH9K_RSSI_BAD) { -+ rx_status->chains |= BIT(j); -+ rx_status->chain_signal[j] = ah->noise + rssi; -+ } -+ j++; -+ } -+ -+ - sc->rx.discard_next = false; - return 0; - } -@@ -1077,7 +1093,7 @@ static int ath_process_fft(struct ath_so - fft_sample.tlv.length = __cpu_to_be16(length); - - fft_sample.freq = __cpu_to_be16(ah->curchan->chan->center_freq); -- fft_sample.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl0); -+ fft_sample.rssi = fix_rssi_inv_only(rs->rs_rssi_ctl[0]); - fft_sample.noise = ah->noise; - - switch (len - SPECTRAL_HT20_TOTAL_DATA_LEN) { ---- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -476,12 +476,12 @@ int ath9k_hw_process_rxdesc_edma(struct - - /* XXX: Keycache */ - rxs->rs_rssi = MS(rxsp->status5, AR_RxRSSICombined); -- rxs->rs_rssi_ctl0 = MS(rxsp->status1, AR_RxRSSIAnt00); -- rxs->rs_rssi_ctl1 = MS(rxsp->status1, AR_RxRSSIAnt01); -- rxs->rs_rssi_ctl2 = MS(rxsp->status1, AR_RxRSSIAnt02); -- rxs->rs_rssi_ext0 = MS(rxsp->status5, AR_RxRSSIAnt10); -- rxs->rs_rssi_ext1 = MS(rxsp->status5, AR_RxRSSIAnt11); -- rxs->rs_rssi_ext2 = MS(rxsp->status5, AR_RxRSSIAnt12); -+ rxs->rs_rssi_ctl[0] = MS(rxsp->status1, AR_RxRSSIAnt00); -+ rxs->rs_rssi_ctl[1] = MS(rxsp->status1, AR_RxRSSIAnt01); -+ rxs->rs_rssi_ctl[2] = MS(rxsp->status1, AR_RxRSSIAnt02); -+ rxs->rs_rssi_ext[0] = MS(rxsp->status5, AR_RxRSSIAnt10); -+ rxs->rs_rssi_ext[1] = MS(rxsp->status5, AR_RxRSSIAnt11); -+ rxs->rs_rssi_ext[2] = MS(rxsp->status5, AR_RxRSSIAnt12); - - if (rxsp->status11 & AR_RxKeyIdxValid) - rxs->rs_keyix = MS(rxsp->status11, AR_KeyIdx); ---- a/drivers/net/wireless/ath/ath9k/mac.c -+++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -554,25 +554,25 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a - - if (ads.ds_rxstatus8 & AR_PostDelimCRCErr) { - rs->rs_rssi = ATH9K_RSSI_BAD; -- rs->rs_rssi_ctl0 = ATH9K_RSSI_BAD; -- rs->rs_rssi_ctl1 = ATH9K_RSSI_BAD; -- rs->rs_rssi_ctl2 = ATH9K_RSSI_BAD; -- rs->rs_rssi_ext0 = ATH9K_RSSI_BAD; -- rs->rs_rssi_ext1 = ATH9K_RSSI_BAD; -- rs->rs_rssi_ext2 = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ctl[0] = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ctl[1] = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ctl[2] = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ext[0] = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ext[1] = ATH9K_RSSI_BAD; -+ rs->rs_rssi_ext[2] = ATH9K_RSSI_BAD; - } else { - rs->rs_rssi = MS(ads.ds_rxstatus4, AR_RxRSSICombined); -- rs->rs_rssi_ctl0 = MS(ads.ds_rxstatus0, -+ rs->rs_rssi_ctl[0] = MS(ads.ds_rxstatus0, - AR_RxRSSIAnt00); -- rs->rs_rssi_ctl1 = MS(ads.ds_rxstatus0, -+ rs->rs_rssi_ctl[1] = MS(ads.ds_rxstatus0, - AR_RxRSSIAnt01); -- rs->rs_rssi_ctl2 = MS(ads.ds_rxstatus0, -+ rs->rs_rssi_ctl[2] = MS(ads.ds_rxstatus0, - AR_RxRSSIAnt02); -- rs->rs_rssi_ext0 = MS(ads.ds_rxstatus4, -+ rs->rs_rssi_ext[0] = MS(ads.ds_rxstatus4, - AR_RxRSSIAnt10); -- rs->rs_rssi_ext1 = MS(ads.ds_rxstatus4, -+ rs->rs_rssi_ext[1] = MS(ads.ds_rxstatus4, - AR_RxRSSIAnt11); -- rs->rs_rssi_ext2 = MS(ads.ds_rxstatus4, -+ rs->rs_rssi_ext[2] = MS(ads.ds_rxstatus4, - AR_RxRSSIAnt12); - } - if (ads.ds_rxstatus8 & AR_RxKeyIdxValid) ---- a/drivers/net/wireless/ath/ath9k/dfs.c -+++ b/drivers/net/wireless/ath/ath9k/dfs.c -@@ -158,8 +158,8 @@ void ath9k_dfs_process_phyerr(struct ath - return; - } - -- ard.rssi = rs->rs_rssi_ctl0; -- ard.ext_rssi = rs->rs_rssi_ext0; -+ ard.rssi = rs->rs_rssi_ctl[0]; -+ ard.ext_rssi = rs->rs_rssi_ext[0]; - - /* - * hardware stores this as 8 bit signed value. ---- a/drivers/net/wireless/ath/ath9k/antenna.c -+++ b/drivers/net/wireless/ath/ath9k/antenna.c -@@ -546,14 +546,14 @@ void ath_ant_comb_scan(struct ath_softc - struct ath_ant_comb *antcomb = &sc->ant_comb; - int alt_ratio = 0, alt_rssi_avg = 0, main_rssi_avg = 0, curr_alt_set; - int curr_main_set; -- int main_rssi = rs->rs_rssi_ctl0; -- int alt_rssi = rs->rs_rssi_ctl1; -+ int main_rssi = rs->rs_rssi_ctl[0]; -+ int alt_rssi = rs->rs_rssi_ctl[1]; - int rx_ant_conf, main_ant_conf; - bool short_scan = false; - -- rx_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_CURRENT_SHIFT) & -+ rx_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_CURRENT_SHIFT) & - ATH_ANT_RX_MASK; -- main_ant_conf = (rs->rs_rssi_ctl2 >> ATH_ANT_RX_MAIN_SHIFT) & -+ main_ant_conf = (rs->rs_rssi_ctl[2] >> ATH_ANT_RX_MAIN_SHIFT) & - ATH_ANT_RX_MASK; - - /* Record packet only when both main_rssi and alt_rssi is positive */ diff --git a/package/mac80211/patches/523-mac80211_configure_antenna_gain.patch b/package/mac80211/patches/523-mac80211_configure_antenna_gain.patch deleted file mode 100644 index 759812bfd7..0000000000 --- a/package/mac80211/patches/523-mac80211_configure_antenna_gain.patch +++ /dev/null @@ -1,162 +0,0 @@ ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -997,6 +997,7 @@ enum ieee80211_smps_mode { - * - * @power_level: requested transmit power (in dBm), backward compatibility - * value only that is set to the minimum of all interfaces -+ * @max_antenna_gain: maximum antenna gain adjusted by user config (in dBi) - * - * @chandef: the channel definition to tune to - * @radar_enabled: whether radar detection is enabled -@@ -1018,6 +1019,7 @@ struct ieee80211_conf { - u32 flags; - int power_level, dynamic_ps_timeout; - int max_sleep_period; -+ int max_antenna_gain; - - u16 listen_interval; - u8 ps_dtim_period; ---- a/net/mac80211/ieee80211_i.h -+++ b/net/mac80211/ieee80211_i.h -@@ -1126,6 +1126,7 @@ struct ieee80211_local { - int dynamic_ps_forced_timeout; - - int user_power_level; /* in dBm, for all interfaces */ -+ int user_antenna_gain; /* in dBi */ - - enum ieee80211_smps_mode smps_mode; - ---- a/include/uapi/linux/nl80211.h -+++ b/include/uapi/linux/nl80211.h -@@ -1736,6 +1736,8 @@ enum nl80211_attrs { - - NL80211_ATTR_PEER_AID, - -+ NL80211_ATTR_WIPHY_ANTENNA_GAIN, -+ - /* add attributes here, update the policy in nl80211.c */ - - __NL80211_ATTR_AFTER_LAST, ---- a/net/wireless/nl80211.c -+++ b/net/wireless/nl80211.c -@@ -349,6 +349,7 @@ static const struct nla_policy nl80211_p - [NL80211_ATTR_IE_RIC] = { .type = NLA_BINARY, - .len = IEEE80211_MAX_DATA_LEN }, - [NL80211_ATTR_PEER_AID] = { .type = NLA_U16 }, -+ [NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 }, - }; - - /* policy for the key attributes */ -@@ -1953,6 +1954,22 @@ static int nl80211_set_wiphy(struct sk_b - goto bad_res; - } - -+ if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_GAIN]) { -+ int idx, dbi = 0; -+ -+ if (!rdev->ops->set_antenna_gain) { -+ result = -EOPNOTSUPP; -+ goto bad_res; -+ } -+ -+ idx = NL80211_ATTR_WIPHY_ANTENNA_GAIN; -+ dbi = nla_get_u32(info->attrs[idx]); -+ -+ result = rdev->ops->set_antenna_gain(&rdev->wiphy, dbi); -+ if (result) -+ goto bad_res; -+ } -+ - if (info->attrs[NL80211_ATTR_WIPHY_ANTENNA_TX] && - info->attrs[NL80211_ATTR_WIPHY_ANTENNA_RX]) { - u32 tx_ant, rx_ant; ---- a/net/mac80211/cfg.c -+++ b/net/mac80211/cfg.c -@@ -2283,6 +2283,19 @@ static int ieee80211_get_tx_power(struct - return 0; - } - -+static int ieee80211_set_antenna_gain(struct wiphy *wiphy, int dbi) -+{ -+ struct ieee80211_local *local = wiphy_priv(wiphy); -+ -+ if (dbi < 0) -+ return -EINVAL; -+ -+ local->user_antenna_gain = dbi; -+ ieee80211_hw_config(local, 0); -+ -+ return 0; -+} -+ - static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, - const u8 *addr) - { -@@ -3484,6 +3497,7 @@ struct cfg80211_ops mac80211_config_ops - .set_wiphy_params = ieee80211_set_wiphy_params, - .set_tx_power = ieee80211_set_tx_power, - .get_tx_power = ieee80211_get_tx_power, -+ .set_antenna_gain = ieee80211_set_antenna_gain, - .set_wds_peer = ieee80211_set_wds_peer, - .rfkill_poll = ieee80211_rfkill_poll, - CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd) ---- a/include/net/cfg80211.h -+++ b/include/net/cfg80211.h -@@ -1942,6 +1942,7 @@ struct cfg80211_update_ft_ies_params { - * (as advertised by the nl80211 feature flag.) - * @get_tx_power: store the current TX power into the dbm variable; - * return 0 if successful -+ * @set_antenna_gain: set antenna gain to reduce maximum tx power if necessary - * - * @set_wds_peer: set the WDS peer for a WDS interface - * -@@ -2161,6 +2162,7 @@ struct cfg80211_ops { - enum nl80211_tx_power_setting type, int mbm); - int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, - int *dbm); -+ int (*set_antenna_gain)(struct wiphy *wiphy, int dbi); - - int (*set_wds_peer)(struct wiphy *wiphy, struct net_device *dev, - const u8 *addr); ---- a/net/mac80211/main.c -+++ b/net/mac80211/main.c -@@ -101,7 +101,7 @@ static u32 ieee80211_hw_conf_chan(struct - struct ieee80211_sub_if_data *sdata; - struct cfg80211_chan_def chandef = {}; - u32 changed = 0; -- int power; -+ int power, ant_gain, max_power; - u32 offchannel_flag; - - offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; -@@ -165,8 +165,21 @@ static u32 ieee80211_hw_conf_chan(struct - } - rcu_read_unlock(); - -- if (local->hw.conf.power_level != power) { -+ max_power = chandef.chan->max_reg_power; -+ ant_gain = chandef.chan->max_antenna_gain; -+ if (local->user_antenna_gain > 0) { -+ if (local->user_antenna_gain > ant_gain) { -+ max_power -= local->user_antenna_gain - ant_gain; -+ ant_gain = 0; -+ } else -+ ant_gain -= local->user_antenna_gain; -+ power = min(power, max_power); -+ } -+ -+ if (local->hw.conf.power_level != power || -+ local->hw.conf.max_antenna_gain != ant_gain) { - changed |= IEEE80211_CONF_CHANGE_POWER; -+ local->hw.conf.max_antenna_gain = ant_gain; - local->hw.cur_power_level = power; - local->hw.conf.power_level = power; - } -@@ -597,6 +610,7 @@ struct ieee80211_hw *ieee80211_alloc_hw( - IEEE80211_RADIOTAP_MCS_HAVE_BW; - local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | - IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; -+ local->user_antenna_gain = 0; - local->hw.uapsd_queues = IEEE80211_DEFAULT_UAPSD_QUEUES; - local->hw.uapsd_max_sp_len = IEEE80211_DEFAULT_MAX_SP_LEN; - local->user_power_level = IEEE80211_UNSET_POWER_LEVEL; diff --git a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch b/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch deleted file mode 100644 index 8f48eea3ad..0000000000 --- a/package/mac80211/patches/524-ath9k_use_configured_antenna_gain.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- a/drivers/net/wireless/ath/ath.h -+++ b/drivers/net/wireless/ath/ath.h -@@ -73,6 +73,7 @@ struct ath_regulatory { - u16 max_power_level; - u16 current_rd; - int16_t power_limit; -+ int16_t max_antenna_gain; - struct reg_dmn_pair_mapping *regpair; - }; - ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2847,7 +2847,7 @@ void ath9k_hw_apply_txpower(struct ath_h - channel = chan->chan; - chan_pwr = min_t(int, channel->max_power * 2, MAX_RATE_POWER); - new_pwr = min_t(int, chan_pwr, reg->power_limit); -- max_gain = chan_pwr - new_pwr + channel->max_antenna_gain * 2; -+ max_gain = chan_pwr - new_pwr + reg->max_antenna_gain * 2; - - ant_gain = get_antenna_gain(ah, chan); - if (ant_gain > max_gain) ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -1292,7 +1292,10 @@ int ath9k_config(struct ieee80211_hw *hw - } - - if (changed & IEEE80211_CONF_CHANGE_POWER) { -+ struct ath_regulatory *reg = ath9k_hw_regulatory(ah); -+ - ath_dbg(common, CONFIG, "Set power: %d\n", conf->power_level); -+ reg->max_antenna_gain = conf->max_antenna_gain; - sc->config.txpowlimit = 2 * conf->power_level; - ath9k_cmn_update_txpow(ah, sc->curtxpow, - sc->config.txpowlimit, &sc->curtxpow); diff --git a/package/mac80211/patches/530-ath9k_extra_leds.patch b/package/mac80211/patches/530-ath9k_extra_leds.patch deleted file mode 100644 index 134b0978b2..0000000000 --- a/package/mac80211/patches/530-ath9k_extra_leds.patch +++ /dev/null @@ -1,248 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -557,6 +557,9 @@ struct ath9k_wow_pattern { - void ath_init_leds(struct ath_softc *sc); - void ath_deinit_leds(struct ath_softc *sc); - void ath_fill_led_pin(struct ath_softc *sc); -+int ath_create_gpio_led(struct ath_softc *sc, int gpio, const char *name, -+ const char *trigger, bool active_low); -+ - #else - static inline void ath_init_leds(struct ath_softc *sc) - { -@@ -692,6 +695,13 @@ enum spectral_mode { - SPECTRAL_CHANSCAN, - }; - -+struct ath_led { -+ struct list_head list; -+ struct ath_softc *sc; -+ const struct gpio_led *gpio; -+ struct led_classdev cdev; -+}; -+ - struct ath_softc { - struct ieee80211_hw *hw; - struct device *dev; -@@ -733,9 +743,8 @@ struct ath_softc { - struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS]; - - #ifdef CPTCFG_MAC80211_LEDS -- bool led_registered; -- char led_name[32]; -- struct led_classdev led_cdev; -+ const char *led_default_trigger; -+ struct list_head leds; - #endif - - struct ath9k_hw_cal_data caldata; ---- a/drivers/net/wireless/ath/ath9k/gpio.c -+++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -24,40 +24,102 @@ - static void ath_led_brightness(struct led_classdev *led_cdev, - enum led_brightness brightness) - { -- struct ath_softc *sc = container_of(led_cdev, struct ath_softc, led_cdev); -- ath9k_hw_set_gpio(sc->sc_ah, sc->sc_ah->led_pin, (brightness == LED_OFF)); -+ struct ath_led *led = container_of(led_cdev, struct ath_led, cdev); -+ struct ath_softc *sc = led->sc; -+ -+ ath9k_ps_wakeup(sc); -+ ath9k_hw_set_gpio(sc->sc_ah, led->gpio->gpio, -+ (brightness != LED_OFF) ^ led->gpio->active_low); -+ ath9k_ps_restore(sc); -+} -+ -+static int ath_add_led(struct ath_softc *sc, struct ath_led *led) -+{ -+ const struct gpio_led *gpio = led->gpio; -+ int ret; -+ -+ led->cdev.name = gpio->name; -+ led->cdev.default_trigger = gpio->default_trigger; -+ led->cdev.brightness_set = ath_led_brightness; -+ -+ ret = led_classdev_register(wiphy_dev(sc->hw->wiphy), &led->cdev); -+ if (ret < 0) -+ return ret; -+ -+ led->sc = sc; -+ list_add(&led->list, &sc->leds); -+ -+ /* Configure gpio for output */ -+ ath9k_hw_cfg_output(sc->sc_ah, gpio->gpio, -+ AR_GPIO_OUTPUT_MUX_AS_OUTPUT); -+ -+ /* LED off */ -+ ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low); -+ -+ return 0; -+} -+ -+int ath_create_gpio_led(struct ath_softc *sc, int gpio_num, const char *name, -+ const char *trigger, bool active_low) -+{ -+ struct ath_led *led; -+ struct gpio_led *gpio; -+ char *_name; -+ int ret; -+ -+ led = kzalloc(sizeof(*led) + sizeof(*gpio) + strlen(name) + 1, -+ GFP_KERNEL); -+ if (!led) -+ return -ENOMEM; -+ -+ led->gpio = gpio = (struct gpio_led *) (led + 1); -+ _name = (char *) (led->gpio + 1); -+ -+ strcpy(_name, name); -+ gpio->name = _name; -+ gpio->gpio = gpio_num; -+ gpio->active_low = active_low; -+ gpio->default_trigger = trigger; -+ -+ ret = ath_add_led(sc, led); -+ if (unlikely(ret < 0)) -+ kfree(led); -+ -+ return ret; - } - - void ath_deinit_leds(struct ath_softc *sc) - { -- if (!sc->led_registered) -- return; -+ struct ath_led *led; - -- ath_led_brightness(&sc->led_cdev, LED_OFF); -- led_classdev_unregister(&sc->led_cdev); -+ while (!list_empty(&sc->leds)) { -+ led = list_first_entry(&sc->leds, struct ath_led, list); -+ list_del(&led->list); -+ ath_led_brightness(&led->cdev, LED_OFF); -+ led_classdev_unregister(&led->cdev); -+ kfree(led); -+ } - } - - void ath_init_leds(struct ath_softc *sc) - { -- int ret; -+ char led_name[32]; -+ const char *trigger; -+ -+ INIT_LIST_HEAD(&sc->leds); - - if (AR_SREV_9100(sc->sc_ah)) - return; - -- if (!led_blink) -- sc->led_cdev.default_trigger = -- ieee80211_get_radio_led_name(sc->hw); -- -- snprintf(sc->led_name, sizeof(sc->led_name), -- "ath9k-%s", wiphy_name(sc->hw->wiphy)); -- sc->led_cdev.name = sc->led_name; -- sc->led_cdev.brightness_set = ath_led_brightness; -+ snprintf(led_name, sizeof(led_name), "ath9k-%s", -+ wiphy_name(sc->hw->wiphy)); - -- ret = led_classdev_register(wiphy_dev(sc->hw->wiphy), &sc->led_cdev); -- if (ret < 0) -- return; -+ if (led_blink) -+ trigger = sc->led_default_trigger; -+ else -+ trigger = ieee80211_get_radio_led_name(sc->hw); - -- sc->led_registered = true; -+ ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, 1); - } - - void ath_fill_led_pin(struct ath_softc *sc) ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -891,7 +891,7 @@ int ath9k_init_device(u16 devid, struct - - #ifdef CPTCFG_MAC80211_LEDS - /* must be initialized before ieee80211_register_hw */ -- sc->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(sc->hw, -+ sc->led_default_trigger = ieee80211_create_tpt_led_trigger(sc->hw, - IEEE80211_TPT_LEDTRIG_FL_RADIO, ath9k_tpt_blink, - ARRAY_SIZE(ath9k_tpt_blink)); - #endif ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1825,6 +1825,61 @@ static const struct file_operations fops - .llseek = default_llseek, - }; - -+#ifdef CONFIG_MAC80211_LEDS -+ -+static ssize_t write_file_gpio_led(struct file *file, const char __user *ubuf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ char buf[32], *str, *name, *c; -+ ssize_t len; -+ unsigned int gpio; -+ bool active_low = false; -+ -+ len = min(count, sizeof(buf) - 1); -+ if (copy_from_user(buf, ubuf, len)) -+ return -EFAULT; -+ -+ buf[len] = '\0'; -+ name = strchr(buf, ','); -+ if (!name) -+ return -EINVAL; -+ -+ *(name++) = 0; -+ if (!*name) -+ return -EINVAL; -+ -+ c = strchr(name, '\n'); -+ if (c) -+ *c = 0; -+ -+ str = buf; -+ if (*str == '!') { -+ str++; -+ active_low = true; -+ } -+ -+ if (kstrtouint(str, 0, &gpio) < 0) -+ return -EINVAL; -+ -+ if (gpio >= sc->sc_ah->caps.num_gpio_pins) -+ return -EINVAL; -+ -+ if (ath_create_gpio_led(sc, gpio, name, NULL, active_low) < 0) -+ return -EINVAL; -+ -+ return count; -+} -+ -+static const struct file_operations fops_gpio_led = { -+ .write = write_file_gpio_led, -+ .open = simple_open, -+ .owner = THIS_MODULE, -+ .llseek = default_llseek, -+}; -+ -+#endif -+ - - int ath9k_init_debug(struct ath_hw *ah) - { -@@ -1847,6 +1902,10 @@ int ath9k_init_debug(struct ath_hw *ah) - &fops_eeprom); - debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, - sc, &fops_chanbw); -+#ifdef CONFIG_MAC80211_LEDS -+ debugfs_create_file("gpio_led", S_IWUSR, -+ sc->debug.debugfs_phy, sc, &fops_gpio_led); -+#endif - debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_dma); - debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, diff --git a/package/mac80211/patches/531-ath9k_extra_platform_leds.patch b/package/mac80211/patches/531-ath9k_extra_platform_leds.patch deleted file mode 100644 index 764242cd1c..0000000000 --- a/package/mac80211/patches/531-ath9k_extra_platform_leds.patch +++ /dev/null @@ -1,71 +0,0 @@ ---- a/include/linux/ath9k_platform.h -+++ b/include/linux/ath9k_platform.h -@@ -35,6 +35,9 @@ struct ath9k_platform_data { - bool is_clk_25mhz; - int (*get_mac_revision)(void); - int (*external_reset)(void); -+ -+ int num_leds; -+ const struct gpio_led *leds; - }; - - #endif /* _LINUX_ATH9K_PLATFORM_H */ ---- a/drivers/net/wireless/ath/ath9k/gpio.c -+++ b/drivers/net/wireless/ath/ath9k/gpio.c -@@ -15,6 +15,7 @@ - */ - - #include "ath9k.h" -+#include <linux/ath9k_platform.h> - - /********************************/ - /* LED functions */ -@@ -88,6 +89,24 @@ int ath_create_gpio_led(struct ath_softc - return ret; - } - -+static int ath_create_platform_led(struct ath_softc *sc, -+ const struct gpio_led *gpio) -+{ -+ struct ath_led *led; -+ int ret; -+ -+ led = kzalloc(sizeof(*led), GFP_KERNEL); -+ if (!led) -+ return -ENOMEM; -+ -+ led->gpio = gpio; -+ ret = ath_add_led(sc, led); -+ if (ret < 0) -+ kfree(led); -+ -+ return ret; -+} -+ - void ath_deinit_leds(struct ath_softc *sc) - { - struct ath_led *led; -@@ -103,8 +122,10 @@ void ath_deinit_leds(struct ath_softc *s - - void ath_init_leds(struct ath_softc *sc) - { -+ struct ath9k_platform_data *pdata = sc->dev->platform_data; - char led_name[32]; - const char *trigger; -+ int i; - - INIT_LIST_HEAD(&sc->leds); - -@@ -120,6 +141,12 @@ void ath_init_leds(struct ath_softc *sc) - trigger = ieee80211_get_radio_led_name(sc->hw); - - ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger, 1); -+ -+ if (!pdata) -+ return; -+ -+ for (i = 0; i < pdata->num_leds; i++) -+ ath_create_platform_led(sc, &pdata->leds[i]); - } - - void ath_fill_led_pin(struct ath_softc *sc) diff --git a/package/mac80211/patches/541-ath9k_optimize_interrupt_mitigation.patch b/package/mac80211/patches/541-ath9k_optimize_interrupt_mitigation.patch deleted file mode 100644 index 95ceb3575d..0000000000 --- a/package/mac80211/patches/541-ath9k_optimize_interrupt_mitigation.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -241,21 +241,19 @@ static bool ar9003_hw_get_isr(struct ath - - *masked = isr & ATH9K_INT_COMMON; - -- if (ah->config.rx_intr_mitigation) -+ if (ah->config.rx_intr_mitigation) { - if (isr & (AR_ISR_RXMINTR | AR_ISR_RXINTM)) - *masked |= ATH9K_INT_RXLP; -- -- if (ah->config.tx_intr_mitigation) -- if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM)) -- *masked |= ATH9K_INT_TX; -- -- if (isr & (AR_ISR_LP_RXOK | AR_ISR_RXERR)) -+ } else if (isr & (AR_ISR_LP_RXOK | AR_ISR_RXERR)) - *masked |= ATH9K_INT_RXLP; - - if (isr & AR_ISR_HP_RXOK) - *masked |= ATH9K_INT_RXHP; - -- if (isr & (AR_ISR_TXOK | AR_ISR_TXERR | AR_ISR_TXEOL)) { -+ if (ah->config.tx_intr_mitigation) { -+ if (isr & (AR_ISR_TXMINTR | AR_ISR_TXINTM)) -+ *masked |= ATH9K_INT_TX; -+ } else if (isr & (AR_ISR_TXOK | AR_ISR_TXERR | AR_ISR_TXEOL)) { - *masked |= ATH9K_INT_TX; - - if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) { diff --git a/package/mac80211/patches/550-ath9k_reduce_ani_interval.patch b/package/mac80211/patches/550-ath9k_reduce_ani_interval.patch deleted file mode 100644 index 2b7cf21881..0000000000 --- a/package/mac80211/patches/550-ath9k_reduce_ani_interval.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ani.h -+++ b/drivers/net/wireless/ath/ath9k/ani.h -@@ -34,7 +34,7 @@ - #define ATH9K_ANI_PERIOD 300 - - /* in ms */ --#define ATH9K_ANI_POLLINTERVAL 1000 -+#define ATH9K_ANI_POLLINTERVAL 300 - - #define ATH9K_SIG_FIRSTEP_SETTING_MIN 0 - #define ATH9K_SIG_FIRSTEP_SETTING_MAX 20 diff --git a/package/mac80211/patches/552-ath9k_rx_dma_stop_check.patch b/package/mac80211/patches/552-ath9k_rx_dma_stop_check.patch deleted file mode 100644 index 5d063c7d65..0000000000 --- a/package/mac80211/patches/552-ath9k_rx_dma_stop_check.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/mac.c -+++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -705,7 +705,7 @@ bool ath9k_hw_stopdmarecv(struct ath_hw - { - #define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */ - struct ath_common *common = ath9k_hw_common(ah); -- u32 mac_status, last_mac_status = 0; -+ u32 mac_status = 0, last_mac_status = 0; - int i; - - /* Enable access to the DMA observation bus */ -@@ -735,6 +735,16 @@ bool ath9k_hw_stopdmarecv(struct ath_hw - } - - if (i == 0) { -+ if (!AR_SREV_9300_20_OR_LATER(ah) && -+ (mac_status & 0x700) == 0) { -+ /* -+ * DMA is idle but the MAC is still stuck -+ * processing events -+ */ -+ *reset = true; -+ return true; -+ } -+ - ath_err(common, - "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n", - AH_RX_STOP_DMA_TIMEOUT / 1000, diff --git a/package/mac80211/patches/553-ath9k_debugfs_diag.patch b/package/mac80211/patches/553-ath9k_debugfs_diag.patch deleted file mode 100644 index 0e1572af9a..0000000000 --- a/package/mac80211/patches/553-ath9k_debugfs_diag.patch +++ /dev/null @@ -1,139 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/debug.c -+++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -1881,6 +1881,50 @@ static const struct file_operations fops - #endif - - -+static ssize_t read_file_diag(struct file *file, char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ struct ath_hw *ah = sc->sc_ah; -+ char buf[32]; -+ unsigned int len; -+ -+ len = sprintf(buf, "0x%08lx\n", ah->diag); -+ return simple_read_from_buffer(user_buf, count, ppos, buf, len); -+} -+ -+static ssize_t write_file_diag(struct file *file, const char __user *user_buf, -+ size_t count, loff_t *ppos) -+{ -+ struct ath_softc *sc = file->private_data; -+ struct ath_hw *ah = sc->sc_ah; -+ unsigned long diag; -+ char buf[32]; -+ ssize_t len; -+ -+ len = min(count, sizeof(buf) - 1); -+ if (copy_from_user(buf, user_buf, len)) -+ return -EFAULT; -+ -+ buf[len] = '\0'; -+ if (strict_strtoul(buf, 0, &diag)) -+ return -EINVAL; -+ -+ ah->diag = diag; -+ ath9k_hw_update_diag(ah); -+ -+ return count; -+} -+ -+static const struct file_operations fops_diag = { -+ .read = read_file_diag, -+ .write = write_file_diag, -+ .open = simple_open, -+ .owner = THIS_MODULE, -+ .llseek = default_llseek, -+}; -+ -+ - int ath9k_init_debug(struct ath_hw *ah) - { - struct ath_common *common = ath9k_hw_common(ah); -@@ -1906,6 +1950,8 @@ int ath9k_init_debug(struct ath_hw *ah) - debugfs_create_file("gpio_led", S_IWUSR, - sc->debug.debugfs_phy, sc, &fops_gpio_led); - #endif -+ debugfs_create_file("diag", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, -+ sc, &fops_diag); - debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, - &fops_dma); - debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -495,6 +495,12 @@ enum { - ATH9K_RESET_COLD, - }; - -+enum { -+ ATH_DIAG_DISABLE_RX, -+ ATH_DIAG_DISABLE_TX, -+ ATH_DIAG_TRIGGER_ERROR, -+}; -+ - struct ath9k_hw_version { - u32 magic; - u16 devid; -@@ -773,6 +779,8 @@ struct ath_hw { - u32 rfkill_polarity; - u32 ah_flags; - -+ unsigned long diag; -+ - bool reset_power_on; - bool htc_reset_init; - -@@ -1020,6 +1028,7 @@ void ath9k_hw_set_sta_beacon_timers(stru - bool ath9k_hw_check_alive(struct ath_hw *ah); - - bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); -+void ath9k_hw_update_diag(struct ath_hw *ah); - - #ifdef CPTCFG_ATH9K_DEBUGFS - void ath9k_debug_sync_cause(struct ath_common *common, u32 sync_cause); ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1853,6 +1853,20 @@ fail: - return -EINVAL; - } - -+void ath9k_hw_update_diag(struct ath_hw *ah) -+{ -+ if (test_bit(ATH_DIAG_DISABLE_RX, &ah->diag)) -+ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_RX_DIS); -+ else -+ REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_RX_DIS); -+ -+ if (test_bit(ATH_DIAG_DISABLE_TX, &ah->diag)) -+ REG_SET_BIT(ah, AR_DIAG_SW, AR_DIAG_LOOP_BACK); -+ else -+ REG_CLR_BIT(ah, AR_DIAG_SW, AR_DIAG_LOOP_BACK); -+} -+EXPORT_SYMBOL(ath9k_hw_update_diag); -+ - int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, - struct ath9k_hw_cal_data *caldata, bool fastcc) - { -@@ -2055,6 +2069,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st - } - - ath9k_hw_apply_gpio_override(ah); -+ ath9k_hw_update_diag(ah); - - if (AR_SREV_9565(ah) && ah->shared_chain_lnadiv) - REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON); ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -462,6 +462,11 @@ irqreturn_t ath_isr(int irq, void *dev) - ath9k_hw_getisr(ah, &status); /* NB: clears ISR too */ - status &= ah->imask; /* discard unasked-for bits */ - -+ if (test_bit(ATH_DIAG_TRIGGER_ERROR, &ah->diag)) { -+ status |= ATH9K_INT_FATAL; -+ clear_bit(ATH_DIAG_TRIGGER_ERROR, &ah->diag); -+ } -+ - /* - * If there are no status bits set, then this interrupt was not - * for me (should have been caught above). diff --git a/package/mac80211/patches/554-ath9k_ani_mrc_fix.patch b/package/mac80211/patches/554-ath9k_ani_mrc_fix.patch deleted file mode 100644 index 3bee413970..0000000000 --- a/package/mac80211/patches/554-ath9k_ani_mrc_fix.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c -@@ -1136,6 +1136,10 @@ skip_ws_det: - * is_on == 0 means MRC CCK is OFF (more noise imm) - */ - bool is_on = param ? 1 : 0; -+ -+ if (ah->caps.rx_chainmask == 1) -+ break; -+ - REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL, - AR_PHY_MRC_CCK_ENABLE, is_on); - REG_RMW_FIELD(ah, AR_PHY_MRC_CCK_CTRL, diff --git a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch b/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch deleted file mode 100644 index fc0243162f..0000000000 --- a/package/mac80211/patches/555-ath9k-allow-to-disable-bands-via-platform-data.patch +++ /dev/null @@ -1,70 +0,0 @@ ---- a/include/linux/ath9k_platform.h -+++ b/include/linux/ath9k_platform.h -@@ -33,6 +33,9 @@ struct ath9k_platform_data { - - bool endian_check; - bool is_clk_25mhz; -+ bool disable_2ghz; -+ bool disable_5ghz; -+ - int (*get_mac_revision)(void); - int (*external_reset)(void); - ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2448,17 +2448,25 @@ int ath9k_hw_fill_cap_info(struct ath_hw - } - - eeval = ah->eep_ops->get_eeprom(ah, EEP_OP_MODE); -- if ((eeval & (AR5416_OPFLAGS_11G | AR5416_OPFLAGS_11A)) == 0) { -- ath_err(common, -- "no band has been marked as supported in EEPROM\n"); -- return -EINVAL; -+ -+ if (eeval & AR5416_OPFLAGS_11A) { -+ if (ah->disable_5ghz) -+ ath_warn(common, "disabling 5GHz band\n"); -+ else -+ pCap->hw_caps |= ATH9K_HW_CAP_5GHZ; - } - -- if (eeval & AR5416_OPFLAGS_11A) -- pCap->hw_caps |= ATH9K_HW_CAP_5GHZ; -+ if (eeval & AR5416_OPFLAGS_11G) { -+ if (ah->disable_2ghz) -+ ath_warn(common, "disabling 2GHz band\n"); -+ else -+ pCap->hw_caps |= ATH9K_HW_CAP_2GHZ; -+ } - -- if (eeval & AR5416_OPFLAGS_11G) -- pCap->hw_caps |= ATH9K_HW_CAP_2GHZ; -+ if ((pCap->hw_caps & (ATH9K_HW_CAP_2GHZ | ATH9K_HW_CAP_5GHZ)) == 0) { -+ ath_err(common, "both bands are disabled\n"); -+ return -EINVAL; -+ } - - if (AR_SREV_9485(ah) || - AR_SREV_9285(ah) || ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -940,6 +940,8 @@ struct ath_hw { - bool is_clk_25mhz; - int (*get_mac_revision)(void); - int (*external_reset)(void); -+ bool disable_2ghz; -+ bool disable_5ghz; - - const struct firmware *eeprom_blob; - }; ---- a/drivers/net/wireless/ath/ath9k/init.c -+++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -592,6 +592,8 @@ static int ath9k_init_softc(u16 devid, s - ah->is_clk_25mhz = pdata->is_clk_25mhz; - ah->get_mac_revision = pdata->get_mac_revision; - ah->external_reset = pdata->external_reset; -+ ah->disable_2ghz = pdata->disable_2ghz; -+ ah->disable_5ghz = pdata->disable_5ghz; - if (!pdata->endian_check) - ah->ah_flags |= AH_NO_EEP_SWAP; - } diff --git a/package/mac80211/patches/556-ath9k_ani_revert.patch b/package/mac80211/patches/556-ath9k_ani_revert.patch deleted file mode 100644 index 006f3930e9..0000000000 --- a/package/mac80211/patches/556-ath9k_ani_revert.patch +++ /dev/null @@ -1,74 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ani.h -+++ b/drivers/net/wireless/ath/ath9k/ani.h -@@ -20,8 +20,12 @@ - #define BEACON_RSSI(ahp) (ahp->stats.avgbrssi) - - /* units are errors per second */ --#define ATH9K_ANI_OFDM_TRIG_HIGH 1000 -+#define ATH9K_ANI_OFDM_TRIG_HIGH 3500 -+#define ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI 1000 -+ - #define ATH9K_ANI_OFDM_TRIG_LOW 400 -+#define ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI 900 -+ - #define ATH9K_ANI_CCK_TRIG_HIGH 600 - #define ATH9K_ANI_CCK_TRIG_LOW 300 - ---- a/drivers/net/wireless/ath/ath9k/ani.c -+++ b/drivers/net/wireless/ath/ath9k/ani.c -@@ -177,14 +177,17 @@ static void ath9k_hw_set_ofdm_nil(struct - BEACON_RSSI(ah) <= ATH9K_ANI_RSSI_THR_HIGH) - weak_sig = true; - -- /* -- * OFDM Weak signal detection is always enabled for AP mode. -- */ -- if (ah->opmode != NL80211_IFTYPE_AP && -- aniState->ofdmWeakSigDetect != weak_sig) { -- ath9k_hw_ani_control(ah, -- ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, -- entry_ofdm->ofdm_weak_signal_on); -+ if (aniState->ofdmWeakSigDetect != weak_sig) -+ ath9k_hw_ani_control(ah, -+ ATH9K_ANI_OFDM_WEAK_SIGNAL_DETECTION, -+ entry_ofdm->ofdm_weak_signal_on); -+ -+ if (aniState->ofdmNoiseImmunityLevel >= ATH9K_ANI_OFDM_DEF_LEVEL) { -+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH; -+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW_ABOVE_INI; -+ } else { -+ ah->config.ofdm_trig_high = ATH9K_ANI_OFDM_TRIG_HIGH_BELOW_INI; -+ ah->config.ofdm_trig_low = ATH9K_ANI_OFDM_TRIG_LOW; - } - } - -@@ -420,25 +423,12 @@ void ath9k_hw_ani_monitor(struct ath_hw - ofdmPhyErrRate, aniState->cckNoiseImmunityLevel, - cckPhyErrRate, aniState->ofdmsTurn); - -- if (aniState->listenTime > 5 * ah->aniperiod) { -- /* -- * Check if we need to lower immunity if -- * 5 ani_periods have passed. -- */ -- if (ofdmPhyErrRate <= ah->config.ofdm_trig_low && -- cckPhyErrRate <= ah->config.cck_trig_low) { -+ if (aniState->listenTime > ah->aniperiod) { -+ if (cckPhyErrRate < ah->config.cck_trig_low && -+ ofdmPhyErrRate < ah->config.ofdm_trig_low) { - ath9k_hw_ani_lower_immunity(ah); - aniState->ofdmsTurn = !aniState->ofdmsTurn; -- } -- ath9k_ani_restart(ah); -- } else if (aniState->listenTime > ah->aniperiod) { -- /* -- * Check if immunity has to be raised, -- * (either OFDM or CCK). -- */ -- if (ofdmPhyErrRate > ah->config.ofdm_trig_high && -- (cckPhyErrRate <= ah->config.cck_trig_high || -- aniState->ofdmsTurn)) { -+ } else if (ofdmPhyErrRate > ah->config.ofdm_trig_high) { - ath9k_hw_ani_ofdm_err_trigger(ah); - aniState->ofdmsTurn = false; - } else if (cckPhyErrRate > ah->config.cck_trig_high) { diff --git a/package/mac80211/patches/601-rt2x00-set_pci_mwi.patch b/package/mac80211/patches/601-rt2x00-set_pci_mwi.patch deleted file mode 100644 index d9a20bc107..0000000000 --- a/package/mac80211/patches/601-rt2x00-set_pci_mwi.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2x00pci.c -+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c -@@ -96,8 +96,10 @@ int rt2x00pci_probe(struct pci_dev *pci_ - - pci_set_master(pci_dev); - -+#ifdef CONFIG_PCI_SET_MWI - if (pci_set_mwi(pci_dev)) - rt2x00_probe_err("MWI not available\n"); -+#endif - - if (dma_set_mask(&pci_dev->dev, DMA_BIT_MASK(32))) { - rt2x00_probe_err("PCI DMA not supported\n"); diff --git a/package/mac80211/patches/602-rt2x00-introduce-rt2x00_platform_h.patch b/package/mac80211/patches/602-rt2x00-introduce-rt2x00_platform_h.patch deleted file mode 100644 index 6c80c3dfa8..0000000000 --- a/package/mac80211/patches/602-rt2x00-introduce-rt2x00_platform_h.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- /dev/null -+++ b/include/linux/rt2x00_platform.h -@@ -0,0 +1,19 @@ -+/* -+ * Platform data definition for the rt2x00 driver -+ * -+ * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ * -+ */ -+ -+#ifndef _RT2X00_PLATFORM_H -+#define _RT2X00_PLATFORM_H -+ -+struct rt2x00_platform_data { -+ char *eeprom_file_name; -+}; -+ -+#endif /* _RT2X00_PLATFORM_H */ ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -39,6 +39,7 @@ - #include <linux/input-polldev.h> - #include <linux/kfifo.h> - #include <linux/hrtimer.h> -+#include <linux/rt2x00_platform.h> - - #include <net/mac80211.h> - diff --git a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch b/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch deleted file mode 100644 index 40a2576d7a..0000000000 --- a/package/mac80211/patches/603-rt2x00-introduce-rt2x00eeprom.patch +++ /dev/null @@ -1,289 +0,0 @@ ---- /dev/null -+++ b/drivers/net/wireless/rt2x00/rt2x00eeprom.c -@@ -0,0 +1,98 @@ -+/* -+ Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> -+ Copyright (C) 2004 - 2009 Gertjan van Wingerde <gwingerde@gmail.com> -+ <http://rt2x00.serialmonkey.com> -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the -+ Free Software Foundation, Inc., -+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ */ -+ -+/* -+ Module: rt2x00lib -+ Abstract: rt2x00 eeprom file loading routines. -+ */ -+ -+#include <linux/kernel.h> -+#include <linux/module.h> -+ -+#include "rt2x00.h" -+#include "rt2x00lib.h" -+ -+static int rt2x00lib_request_eeprom_file(struct rt2x00_dev *rt2x00dev) -+{ -+ const struct firmware *ee; -+ char *ee_name; -+ int retval; -+ -+ ee_name = rt2x00dev->ops->lib->get_eeprom_file_name(rt2x00dev); -+ if (!ee_name) { -+ rt2x00_err(rt2x00dev, -+ "Invalid EEPROM filename.\n" -+ "Please file bug report to %s.\n", DRV_PROJECT); -+ return -EINVAL; -+ } -+ -+ rt2x00_info(rt2x00dev, "Loading EEPROM data from '%s'.\n", ee_name); -+ -+ retval = request_firmware(&ee, ee_name, rt2x00dev->dev); -+ if (retval) { -+ rt2x00_err(rt2x00dev, "Failed to request EEPROM.\n"); -+ return retval; -+ } -+ -+ if (!ee || !ee->size || !ee->data) { -+ rt2x00_err(rt2x00dev, "Failed to read EEPROM file.\n"); -+ retval = -ENOENT; -+ goto err_exit; -+ } -+ -+ if (ee->size != rt2x00dev->ops->eeprom_size) { -+ rt2x00_err(rt2x00dev, -+ "EEPROM file size is invalid, it should be %d bytes\n", -+ rt2x00dev->ops->eeprom_size); -+ retval = -EINVAL; -+ goto err_release_ee; -+ } -+ -+ rt2x00dev->eeprom_file = ee; -+ return 0; -+ -+err_release_ee: -+ release_firmware(ee); -+err_exit: -+ return retval; -+} -+ -+int rt2x00lib_load_eeprom_file(struct rt2x00_dev *rt2x00dev) -+{ -+ int retval; -+ -+ if (!test_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags)) -+ return 0; -+ -+ if (!rt2x00dev->eeprom_file) { -+ retval = rt2x00lib_request_eeprom_file(rt2x00dev); -+ if (retval) -+ return retval; -+ } -+ -+ return 0; -+} -+ -+void rt2x00lib_free_eeprom_file(struct rt2x00_dev *rt2x00dev) -+{ -+ release_firmware(rt2x00dev->eeprom_file); -+ rt2x00dev->eeprom_file = NULL; -+} ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -549,6 +549,7 @@ struct rt2x00lib_ops { - const u8 *data, const size_t len); - int (*load_firmware) (struct rt2x00_dev *rt2x00dev, - const u8 *data, const size_t len); -+ char *(*get_eeprom_file_name) (struct rt2x00_dev *rt2x00dev); - - /* - * Device initialization/deinitialization handlers. -@@ -705,6 +706,7 @@ enum rt2x00_capability_flags { - REQUIRE_SW_SEQNO, - REQUIRE_HT_TX_DESC, - REQUIRE_PS_AUTOWAKE, -+ REQUIRE_EEPROM_FILE, - - /* - * Capabilities -@@ -974,6 +976,11 @@ struct rt2x00_dev { - const struct firmware *fw; - - /* -+ * EEPROM image. -+ */ -+ const struct firmware *eeprom_file; -+ -+ /* - * FIFO for storing tx status reports between isr and tasklet. - */ - DECLARE_KFIFO_PTR(txstatus_fifo, u32); ---- a/drivers/net/wireless/rt2x00/rt2x00lib.h -+++ b/drivers/net/wireless/rt2x00/rt2x00lib.h -@@ -322,6 +322,22 @@ static inline void rt2x00lib_free_firmwa - #endif /* CPTCFG_RT2X00_LIB_FIRMWARE */ - - /* -+ * EEPROM file handlers. -+ */ -+#ifdef CPTCFG_RT2X00_LIB_EEPROM -+int rt2x00lib_load_eeprom_file(struct rt2x00_dev *rt2x00dev); -+void rt2x00lib_free_eeprom_file(struct rt2x00_dev *rt2x00dev); -+#else -+static inline int rt2x00lib_load_eeprom_file(struct rt2x00_dev *rt2x00dev) -+{ -+ return 0; -+} -+static inline void rt2x00lib_free_eeprom_file(struct rt2x00_dev *rt2x00dev) -+{ -+} -+#endif /* CPTCFG_RT2X00_LIB_EEPROM */ -+ -+/* - * Debugfs handlers. - */ - #ifdef CPTCFG_RT2X00_LIB_DEBUGFS ---- a/drivers/net/wireless/rt2x00/Kconfig -+++ b/drivers/net/wireless/rt2x00/Kconfig -@@ -69,6 +69,7 @@ config RT2800PCI - select RT2X00_LIB_PCI if PCI - select RT2X00_LIB_SOC if SOC_RT288X || SOC_RT305X - select RT2X00_LIB_FIRMWARE -+ select RT2X00_LIB_EEPROM - select RT2X00_LIB_CRYPTO - depends on CRC_CCITT - depends on EEPROM_93CX6 -@@ -235,6 +236,9 @@ config RT2X00_LIB_FIRMWARE - config RT2X00_LIB_CRYPTO - boolean - -+config RT2X00_LIB_EEPROM -+ boolean -+ - config RT2X00_LIB_LEDS - depends on !BACKPORT_KERNEL_2_6_25 - boolean ---- a/drivers/net/wireless/rt2x00/Makefile -+++ b/drivers/net/wireless/rt2x00/Makefile -@@ -7,6 +7,7 @@ rt2x00lib-$(CPTCFG_RT2X00_LIB_DEBUGFS) + - rt2x00lib-$(CPTCFG_RT2X00_LIB_CRYPTO) += rt2x00crypto.o - rt2x00lib-$(CPTCFG_RT2X00_LIB_FIRMWARE) += rt2x00firmware.o - rt2x00lib-$(CPTCFG_RT2X00_LIB_LEDS) += rt2x00leds.o -+rt2x00lib-$(CPTCFG_RT2X00_LIB_EEPROM) += rt2x00eeprom.o - - obj-$(CPTCFG_RT2X00_LIB) += rt2x00lib.o - obj-$(CPTCFG_RT2X00_LIB_MMIO) += rt2x00mmio.o ---- a/drivers/net/wireless/rt2x00/rt2800pci.c -+++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -90,25 +90,11 @@ static void rt2800pci_mcu_status(struct - rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); - } - --#if defined(CONFIG_SOC_RT288X) || defined(CONFIG_SOC_RT305X) - static int rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) - { -- void __iomem *base_addr = ioremap(0x1F040000, EEPROM_SIZE); -- -- if (!base_addr) -- return -ENOMEM; -- -- memcpy_fromio(rt2x00dev->eeprom, base_addr, EEPROM_SIZE); -- -- iounmap(base_addr); -+ memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE); - return 0; - } --#else --static inline int rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) --{ -- return -ENOMEM; --} --#endif /* CONFIG_SOC_RT288X || CONFIG_SOC_RT305X */ - - #ifdef CONFIG_PCI - static void rt2800pci_eepromregister_read(struct eeprom_93cx6 *eeprom) -@@ -332,6 +318,20 @@ static int rt2800pci_write_firmware(stru - } - - /* -+ * EEPROM file functions. -+ */ -+static char *rt2800pci_get_eeprom_file_name(struct rt2x00_dev *rt2x00dev) -+{ -+ struct rt2x00_platform_data *pdata; -+ -+ pdata = rt2x00dev->dev->platform_data; -+ if (pdata) -+ return pdata->eeprom_file_name; -+ -+ return NULL; -+} -+ -+/* - * Initialization functions. - */ - static bool rt2800pci_get_entry_state(struct queue_entry *entry) -@@ -1155,6 +1155,7 @@ static const struct rt2x00lib_ops rt2800 - .get_firmware_name = rt2800pci_get_firmware_name, - .check_firmware = rt2800_check_firmware, - .load_firmware = rt2800_load_firmware, -+ .get_eeprom_file_name = rt2800pci_get_eeprom_file_name, - .initialize = rt2x00mmio_initialize, - .uninitialize = rt2x00mmio_uninitialize, - .get_entry_state = rt2800pci_get_entry_state, ---- a/drivers/net/wireless/rt2x00/rt2x00dev.c -+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -1325,6 +1325,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de - INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); - INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep); - -+ retval = rt2x00lib_load_eeprom_file(rt2x00dev); -+ if (retval) -+ goto exit; -+ - /* - * Let the driver probe the device to detect the capabilities. - */ -@@ -1455,6 +1459,11 @@ void rt2x00lib_remove_dev(struct rt2x00_ - */ - if (rt2x00dev->drv_data) - kfree(rt2x00dev->drv_data); -+ -+ /* -+ * Free EEPROM image. -+ */ -+ rt2x00lib_free_eeprom_file(rt2x00dev); - } - EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev); - ---- a/drivers/net/wireless/rt2x00/rt2x00soc.c -+++ b/drivers/net/wireless/rt2x00/rt2x00soc.c -@@ -94,6 +94,7 @@ int rt2x00soc_probe(struct platform_devi - rt2x00dev->hw = hw; - rt2x00dev->irq = platform_get_irq(pdev, 0); - rt2x00dev->name = pdev->dev.driver->name; -+ set_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags); - - rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_SOC); - ---- a/.local-symbols -+++ b/.local-symbols -@@ -272,6 +272,7 @@ RT2X00_LIB_FIRMWARE= - RT2X00_LIB_CRYPTO= - RT2X00_LIB_LEDS= - RT2X00_LIB_DEBUGFS= -+RT2X00_LIB_EEPROM= - RT2X00_DEBUG= - RTLWIFI= - RTLWIFI_DEBUG= diff --git a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch b/package/mac80211/patches/605-rt2x00-pci-eeprom.patch deleted file mode 100644 index d37f3acc28..0000000000 --- a/package/mac80211/patches/605-rt2x00-pci-eeprom.patch +++ /dev/null @@ -1,46 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800pci.c -+++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -90,7 +90,7 @@ static void rt2800pci_mcu_status(struct - rt2x00mmio_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0); - } - --static int rt2800pci_read_eeprom_soc(struct rt2x00_dev *rt2x00dev) -+static int rt2800pci_read_eeprom_file(struct rt2x00_dev *rt2x00dev) - { - memcpy(rt2x00dev->eeprom, rt2x00dev->eeprom_file->data, EEPROM_SIZE); - return 0; -@@ -1092,8 +1092,9 @@ static int rt2800pci_read_eeprom(struct - { - int retval; - -- if (rt2x00_is_soc(rt2x00dev)) -- retval = rt2800pci_read_eeprom_soc(rt2x00dev); -+ if (rt2x00_is_soc(rt2x00dev) || -+ test_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags)) -+ retval = rt2800pci_read_eeprom_file(rt2x00dev); - else if (rt2800pci_efuse_detect(rt2x00dev)) - retval = rt2800pci_read_eeprom_efuse(rt2x00dev); - else ---- a/drivers/net/wireless/rt2x00/rt2x00pci.c -+++ b/drivers/net/wireless/rt2x00/rt2x00pci.c -@@ -78,6 +78,7 @@ exit: - int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops) - { - struct ieee80211_hw *hw; -+ struct rt2x00_platform_data *pdata; - struct rt2x00_dev *rt2x00dev; - int retval; - u16 chip; -@@ -125,6 +126,12 @@ int rt2x00pci_probe(struct pci_dev *pci_ - rt2x00dev->irq = pci_dev->irq; - rt2x00dev->name = pci_name(pci_dev); - -+ /* if we get passed the name of a eeprom_file_name, then use this in -+ favour of the eeprom */ -+ pdata = rt2x00dev->dev->platform_data; -+ if (pdata && pdata->eeprom_file_name) -+ set_bit(REQUIRE_EEPROM_FILE, &rt2x00dev->cap_flags); -+ - if (pci_is_pcie(pci_dev)) - rt2x00_set_chip_intf(rt2x00dev, RT2X00_CHIP_INTF_PCIE); - else diff --git a/package/mac80211/patches/606-rt2x00_no_realign.patch b/package/mac80211/patches/606-rt2x00_no_realign.patch deleted file mode 100644 index 9608df2e20..0000000000 --- a/package/mac80211/patches/606-rt2x00_no_realign.patch +++ /dev/null @@ -1,67 +0,0 @@ -[RFC] rt2x00: For drivers that only need L2 padding don't realign frames - -Signed-off-by: Helmut Schaa <helmut.schaa@...> ---- - -Ivo, Gertjan, do you remeber by any chance why this alignment stuff was added -in the first place? Was it because of DMA restrictions? - -While doing some profiling on the rt3052 SoC I noticed that 30-40% time was -spent in memmove calls. And the culprit is the memmove aligning the payload -to a 4byte boundary since that has to move a whole bunch of data. - -Interesstingly the legacy drivers insert an l2pad between the header and the -payload but doesn't realign the payload itself to a 4-byte boundary. Hence, -I came up with this patch and indeed CPU usage improves impressively. - -Only tested on rt2800pci! - -Thanks, -Helmut - - drivers/net/wireless/rt2x00/rt2x00queue.c | 30 +++------------------------- - 1 files changed, 4 insertions(+), 26 deletions(-) - ---- a/drivers/net/wireless/rt2x00/rt2x00queue.c -+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c -@@ -163,36 +163,14 @@ void rt2x00queue_align_frame(struct sk_b - void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length) - { - unsigned int payload_length = skb->len - header_length; -- unsigned int header_align = ALIGN_SIZE(skb, 0); -- unsigned int payload_align = ALIGN_SIZE(skb, header_length); - unsigned int l2pad = payload_length ? L2PAD_SIZE(header_length) : 0; - -- /* -- * Adjust the header alignment if the payload needs to be moved more -- * than the header. -- */ -- if (payload_align > header_align) -- header_align += 4; -- -- /* There is nothing to do if no alignment is needed */ -- if (!header_align) -+ if (!l2pad) - return; - -- /* Reserve the amount of space needed in front of the frame */ -- skb_push(skb, header_align); -- -- /* -- * Move the header. -- */ -- memmove(skb->data, skb->data + header_align, header_length); -- -- /* Move the payload, if present and if required */ -- if (payload_length && payload_align) -- memmove(skb->data + header_length + l2pad, -- skb->data + header_length + l2pad + payload_align, -- payload_length); -- -- /* Trim the skb to the correct size */ -+ /* insert l2pad -> Move header */ -+ skb_push(skb, l2pad); -+ memmove(skb->data, skb->data + l2pad, header_length); - skb_trim(skb, header_length + l2pad + payload_length); - } - diff --git a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch b/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch deleted file mode 100644 index 5e6e27de98..0000000000 --- a/package/mac80211/patches/607-rt2x00-allow_disabling_bands_through_platform_data.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- a/include/linux/rt2x00_platform.h -+++ b/include/linux/rt2x00_platform.h -@@ -14,6 +14,9 @@ - - struct rt2x00_platform_data { - char *eeprom_file_name; -+ -+ int disable_2ghz; -+ int disable_5ghz; - }; - - #endif /* _RT2X00_PLATFORM_H */ ---- a/drivers/net/wireless/rt2x00/rt2x00dev.c -+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -938,6 +938,22 @@ static int rt2x00lib_probe_hw_modes(stru - unsigned int num_rates; - unsigned int i; - -+ if (rt2x00dev->dev->platform_data) { -+ struct rt2x00_platform_data *pdata; -+ -+ pdata = rt2x00dev->dev->platform_data; -+ if (pdata->disable_2ghz) -+ spec->supported_bands &= ~SUPPORT_BAND_2GHZ; -+ if (pdata->disable_5ghz) -+ spec->supported_bands &= ~SUPPORT_BAND_5GHZ; -+ } -+ -+ if ((spec->supported_bands & SUPPORT_BAND_BOTH) == 0) { -+ rt2x00_err(rt2x00dev, "No supported bands\n"); -+ return -EINVAL; -+ } -+ -+ - num_rates = 0; - if (spec->supported_rates & SUPPORT_RATE_CCK) - num_rates += 4; ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -414,6 +414,7 @@ struct hw_mode_spec { - unsigned int supported_bands; - #define SUPPORT_BAND_2GHZ 0x00000001 - #define SUPPORT_BAND_5GHZ 0x00000002 -+#define SUPPORT_BAND_BOTH (SUPPORT_BAND_2GHZ | SUPPORT_BAND_5GHZ) - - unsigned int supported_rates; - #define SUPPORT_RATE_CCK 0x00000001 diff --git a/package/mac80211/patches/608-add_platform_data_mac_addr.patch b/package/mac80211/patches/608-add_platform_data_mac_addr.patch deleted file mode 100644 index 0695b893b5..0000000000 --- a/package/mac80211/patches/608-add_platform_data_mac_addr.patch +++ /dev/null @@ -1,63 +0,0 @@ ---- a/include/linux/rt2x00_platform.h -+++ b/include/linux/rt2x00_platform.h -@@ -14,6 +14,7 @@ - - struct rt2x00_platform_data { - char *eeprom_file_name; -+ const u8 *mac_address; - - int disable_2ghz; - int disable_5ghz; ---- a/drivers/net/wireless/rt2x00/rt2x00dev.c -+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c -@@ -929,6 +929,18 @@ static void rt2x00lib_rate(struct ieee80 - entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE; - } - -+const u8 *rt2x00lib_get_mac_address(struct rt2x00_dev *rt2x00dev) -+{ -+ struct rt2x00_platform_data *pdata; -+ -+ pdata = rt2x00dev->dev->platform_data; -+ if (!pdata) -+ return NULL; -+ -+ return pdata->mac_address; -+} -+EXPORT_SYMBOL_GPL(rt2x00lib_get_mac_address); -+ - static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev, - struct hw_mode_spec *spec) - { ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -1326,6 +1326,7 @@ static inline void rt2x00debug_dump_fram - */ - u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, - struct ieee80211_vif *vif); -+const u8 *rt2x00lib_get_mac_address(struct rt2x00_dev *rt2x00dev); - - /* - * Interrupt context handlers. ---- a/drivers/net/wireless/rt2x00/rt61pci.c -+++ b/drivers/net/wireless/rt2x00/rt61pci.c -@@ -2395,6 +2395,7 @@ static int rt61pci_validate_eeprom(struc - u32 reg; - u16 word; - u8 *mac; -+ const u8 *pdata_mac; - s8 value; - - rt2x00mmio_register_read(rt2x00dev, E2PROM_CSR, ®); -@@ -2415,7 +2416,11 @@ static int rt61pci_validate_eeprom(struc - /* - * Start validation of the data that has been read. - */ -+ pdata_mac = rt2x00lib_get_mac_address(rt2x00dev); - mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); -+ if (pdata_mac) -+ memcpy(mac, pdata_mac, 6); -+ - if (!is_valid_ether_addr(mac)) { - eth_random_addr(mac); - rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac); diff --git a/package/mac80211/patches/610-rt2x00-fix-rt3352-ext-pa.patch b/package/mac80211/patches/610-rt2x00-fix-rt3352-ext-pa.patch deleted file mode 100644 index f5709d9846..0000000000 --- a/package/mac80211/patches/610-rt2x00-fix-rt3352-ext-pa.patch +++ /dev/null @@ -1,214 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -2631,15 +2631,18 @@ static void rt2800_config_channel(struct - /* - * Change BBP settings - */ -+ rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); -+ rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); -+ rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain); -+ - if (rt2x00_rt(rt2x00dev, RT3352)) { - rt2800_bbp_write(rt2x00dev, 27, 0x0); - rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); - rt2800_bbp_write(rt2x00dev, 27, 0x20); - rt2800_bbp_write(rt2x00dev, 66, 0x26 + rt2x00dev->lna_gain); -+ rt2800_bbp_write(rt2x00dev, 86, 0x38); -+ rt2800_bbp_write(rt2x00dev, 83, 0x6a); - } else { -- rt2800_bbp_write(rt2x00dev, 62, 0x37 - rt2x00dev->lna_gain); -- rt2800_bbp_write(rt2x00dev, 63, 0x37 - rt2x00dev->lna_gain); -- rt2800_bbp_write(rt2x00dev, 64, 0x37 - rt2x00dev->lna_gain); - rt2800_bbp_write(rt2x00dev, 86, 0); - } - -@@ -4948,6 +4951,12 @@ static void rt2800_init_rfcsr_3290(struc - - static void rt2800_init_rfcsr_3352(struct rt2x00_dev *rt2x00dev) - { -+ int tx0_int_pa = test_bit(CAPABILITY_INTERNAL_PA_TX0, -+ &rt2x00dev->cap_flags); -+ int tx1_int_pa = test_bit(CAPABILITY_INTERNAL_PA_TX1, -+ &rt2x00dev->cap_flags); -+ u8 rfcsr; -+ - rt2800_rf_init_calibration(rt2x00dev, 30); - - rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); -@@ -4983,15 +4992,30 @@ static void rt2800_init_rfcsr_3352(struc - rt2800_rfcsr_write(rt2x00dev, 31, 0x80); - rt2800_rfcsr_write(rt2x00dev, 32, 0x80); - rt2800_rfcsr_write(rt2x00dev, 33, 0x00); -- rt2800_rfcsr_write(rt2x00dev, 34, 0x01); -+ rfcsr = 0x01; -+ if (!tx0_int_pa) -+ rt2x00_set_field8(&rfcsr, RFCSR34_TX0_EXT_PA, 1); -+ if (!tx1_int_pa) -+ rt2x00_set_field8(&rfcsr, RFCSR34_TX1_EXT_PA, 1); -+ rt2800_rfcsr_write(rt2x00dev, 34, rfcsr); - rt2800_rfcsr_write(rt2x00dev, 35, 0x03); - rt2800_rfcsr_write(rt2x00dev, 36, 0xbd); - rt2800_rfcsr_write(rt2x00dev, 37, 0x3c); - rt2800_rfcsr_write(rt2x00dev, 38, 0x5f); - rt2800_rfcsr_write(rt2x00dev, 39, 0xc5); - rt2800_rfcsr_write(rt2x00dev, 40, 0x33); -- rt2800_rfcsr_write(rt2x00dev, 41, 0x5b); -- rt2800_rfcsr_write(rt2x00dev, 42, 0x5b); -+ rfcsr = 0x52; -+ if (tx0_int_pa) { -+ rt2x00_set_field8(&rfcsr, RFCSR41_BIT1, 1); -+ rt2x00_set_field8(&rfcsr, RFCSR41_BIT4, 1); -+ } -+ rt2800_rfcsr_write(rt2x00dev, 41, rfcsr); -+ rfcsr = 0x52; -+ if (tx1_int_pa) { -+ rt2x00_set_field8(&rfcsr, RFCSR42_BIT1, 1); -+ rt2x00_set_field8(&rfcsr, RFCSR42_BIT4, 1); -+ } -+ rt2800_rfcsr_write(rt2x00dev, 42, rfcsr); - rt2800_rfcsr_write(rt2x00dev, 43, 0xdb); - rt2800_rfcsr_write(rt2x00dev, 44, 0xdb); - rt2800_rfcsr_write(rt2x00dev, 45, 0xdb); -@@ -4999,15 +5023,20 @@ static void rt2800_init_rfcsr_3352(struc - rt2800_rfcsr_write(rt2x00dev, 47, 0x0d); - rt2800_rfcsr_write(rt2x00dev, 48, 0x14); - rt2800_rfcsr_write(rt2x00dev, 49, 0x00); -- rt2800_rfcsr_write(rt2x00dev, 50, 0x2d); -- rt2800_rfcsr_write(rt2x00dev, 51, 0x7f); -- rt2800_rfcsr_write(rt2x00dev, 52, 0x00); -- rt2800_rfcsr_write(rt2x00dev, 53, 0x52); -- rt2800_rfcsr_write(rt2x00dev, 54, 0x1b); -- rt2800_rfcsr_write(rt2x00dev, 55, 0x7f); -- rt2800_rfcsr_write(rt2x00dev, 56, 0x00); -- rt2800_rfcsr_write(rt2x00dev, 57, 0x52); -- rt2800_rfcsr_write(rt2x00dev, 58, 0x1b); -+ rfcsr = 0x2d; -+ if (!tx0_int_pa) -+ rt2x00_set_field8(&rfcsr, RFCSR50_TX0_EXT_PA, 1); -+ if (!tx1_int_pa) -+ rt2x00_set_field8(&rfcsr, RFCSR50_TX1_EXT_PA, 1); -+ rt2800_rfcsr_write(rt2x00dev, 50, rfcsr); -+ rt2800_rfcsr_write(rt2x00dev, 51, (tx0_int_pa ? 0x7f : 0x52)); -+ rt2800_rfcsr_write(rt2x00dev, 52, (tx0_int_pa ? 0x00 : 0xc0)); -+ rt2800_rfcsr_write(rt2x00dev, 53, (tx0_int_pa ? 0x52 : 0xd2)); -+ rt2800_rfcsr_write(rt2x00dev, 54, (tx0_int_pa ? 0x1b : 0xc0)); -+ rt2800_rfcsr_write(rt2x00dev, 55, (tx1_int_pa ? 0x7f : 0x52)); -+ rt2800_rfcsr_write(rt2x00dev, 56, (tx1_int_pa ? 0x00 : 0xc0)); -+ rt2800_rfcsr_write(rt2x00dev, 57, (tx0_int_pa ? 0x52 : 0x49)); -+ rt2800_rfcsr_write(rt2x00dev, 58, (tx1_int_pa ? 0x1b : 0xc0)); - rt2800_rfcsr_write(rt2x00dev, 59, 0x00); - rt2800_rfcsr_write(rt2x00dev, 60, 0x00); - rt2800_rfcsr_write(rt2x00dev, 61, 0x00); -@@ -5692,6 +5721,7 @@ static int rt2800_init_eeprom(struct rt2 - * RT53xx: defined in "EEPROM_CHIP_ID" field - */ - if (rt2x00_rt(rt2x00dev, RT3290) || -+ rt2x00_rt(rt2x00dev, RT3352) || - rt2x00_rt(rt2x00dev, RT5390) || - rt2x00_rt(rt2x00dev, RT5392)) - rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); -@@ -5781,7 +5811,8 @@ static int rt2800_init_eeprom(struct rt2 - /* - * Detect if this device has Bluetooth co-existence. - */ -- if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_BT_COEXIST)) -+ if (!rt2x00_rt(rt2x00dev, RT3352) && -+ rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_BT_COEXIST)) - __set_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags); - - /* -@@ -5810,6 +5841,22 @@ static int rt2800_init_eeprom(struct rt2 - EIRP_MAX_TX_POWER_LIMIT) - __set_bit(CAPABILITY_POWER_LIMIT, &rt2x00dev->cap_flags); - -+ /* -+ * Detect if device uses internal or external PA -+ */ -+ rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom); -+ -+ if (rt2x00_rt(rt2x00dev, RT3352)) { -+ if (!rt2x00_get_field16(eeprom, -+ EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352)) -+ __set_bit(CAPABILITY_INTERNAL_PA_TX0, -+ &rt2x00dev->cap_flags); -+ if (!rt2x00_get_field16(eeprom, -+ EEPROM_NIC_CONF1_EXTERNAL_TX1_PA_3352)) -+ __set_bit(CAPABILITY_INTERNAL_PA_TX1, -+ &rt2x00dev->cap_flags); -+ } -+ - return 0; - } - ---- a/drivers/net/wireless/rt2x00/rt2800.h -+++ b/drivers/net/wireless/rt2x00/rt2800.h -@@ -2153,6 +2153,12 @@ struct mac_iveiv_entry { - #define RFCSR31_RX_CALIB FIELD8(0x7f) - - /* -+ * RFCSR 34: -+ */ -+#define RFCSR34_TX0_EXT_PA FIELD8(0x04) -+#define RFCSR34_TX1_EXT_PA FIELD8(0x08) -+ -+/* - * RFCSR 38: - */ - #define RFCSR38_RX_LO1_EN FIELD8(0x20) -@@ -2163,6 +2169,18 @@ struct mac_iveiv_entry { - #define RFCSR39_RX_LO2_EN FIELD8(0x80) - - /* -+ * RFCSR 41: -+ */ -+#define RFCSR41_BIT1 FIELD8(0x01) -+#define RFCSR41_BIT4 FIELD8(0x08) -+ -+/* -+ * RFCSR 42: -+ */ -+#define RFCSR42_BIT1 FIELD8(0x01) -+#define RFCSR42_BIT4 FIELD8(0x08) -+ -+/* - * RFCSR 49: - */ - #define RFCSR49_TX FIELD8(0x3f) -@@ -2172,6 +2190,8 @@ struct mac_iveiv_entry { - * RFCSR 50: - */ - #define RFCSR50_TX FIELD8(0x3f) -+#define RFCSR50_TX0_EXT_PA FIELD8(0x02) -+#define RFCSR50_TX1_EXT_PA FIELD8(0x10) - #define RFCSR50_EP FIELD8(0xc0) - - /* -@@ -2260,6 +2280,8 @@ struct mac_iveiv_entry { - * INTERNAL_TX_ALC: 0: disable, 1: enable - * BT_COEXIST: 0: disable, 1: enable - * DAC_TEST: 0: disable, 1: enable -+ * EXTERNAL_TX0_PA: 0: disable, 1: enable (only on RT3352) -+ * EXTERNAL_TX1_PA: 0: disable, 1: enable (only on RT3352) - */ - #define EEPROM_NIC_CONF1 0x001b - #define EEPROM_NIC_CONF1_HW_RADIO FIELD16(0x0001) -@@ -2277,6 +2299,8 @@ struct mac_iveiv_entry { - #define EEPROM_NIC_CONF1_INTERNAL_TX_ALC FIELD16(0x2000) - #define EEPROM_NIC_CONF1_BT_COEXIST FIELD16(0x4000) - #define EEPROM_NIC_CONF1_DAC_TEST FIELD16(0x8000) -+#define EEPROM_NIC_CONF1_EXTERNAL_TX0_PA_3352 FIELD16(0x4000) -+#define EEPROM_NIC_CONF1_EXTERNAL_TX1_PA_3352 FIELD16(0x8000) - - /* - * EEPROM frequency ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -726,6 +726,8 @@ enum rt2x00_capability_flags { - CAPABILITY_DOUBLE_ANTENNA, - CAPABILITY_BT_COEXIST, - CAPABILITY_VCO_RECALIBRATION, -+ CAPABILITY_INTERNAL_PA_TX0, -+ CAPABILITY_INTERNAL_PA_TX1, - }; - - /* diff --git a/package/mac80211/patches/611-rt2x00-rf_vals-rt3352-xtal20.patch b/package/mac80211/patches/611-rt2x00-rf_vals-rt3352-xtal20.patch deleted file mode 100644 index 81df685043..0000000000 --- a/package/mac80211/patches/611-rt2x00-rf_vals-rt3352-xtal20.patch +++ /dev/null @@ -1,115 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -6133,6 +6133,27 @@ static const struct rf_channel rf_vals_5 - {196, 83, 0, 12, 1}, - }; - -+/* -+ * RF value list for rt3xxx with Xtal20MHz -+ * Supports: 2.4 GHz (all) (RF3322) -+ */ -+static const struct rf_channel rf_vals_xtal20mhz_3x[] = { -+ {1, 0xE2, 2, 0x14}, -+ {2, 0xE3, 2, 0x14}, -+ {3, 0xE4, 2, 0x14}, -+ {4, 0xE5, 2, 0x14}, -+ {5, 0xE6, 2, 0x14}, -+ {6, 0xE7, 2, 0x14}, -+ {7, 0xE8, 2, 0x14}, -+ {8, 0xE9, 2, 0x14}, -+ {9, 0xEA, 2, 0x14}, -+ {10, 0xEB, 2, 0x14}, -+ {11, 0xEC, 2, 0x14}, -+ {12, 0xED, 2, 0x14}, -+ {13, 0xEE, 2, 0x14}, -+ {14, 0xF0, 2, 0x18}, -+}; -+ - static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev) - { - struct hw_mode_spec *spec = &rt2x00dev->spec; -@@ -6211,7 +6232,6 @@ static int rt2800_probe_hw_mode(struct r - rt2x00_rf(rt2x00dev, RF3022) || - rt2x00_rf(rt2x00dev, RF3290) || - rt2x00_rf(rt2x00dev, RF3320) || -- rt2x00_rf(rt2x00dev, RF3322) || - rt2x00_rf(rt2x00dev, RF5360) || - rt2x00_rf(rt2x00dev, RF5370) || - rt2x00_rf(rt2x00dev, RF5372) || -@@ -6219,6 +6239,12 @@ static int rt2800_probe_hw_mode(struct r - rt2x00_rf(rt2x00dev, RF5392)) { - spec->num_channels = 14; - spec->channels = rf_vals_3x; -+ } else if (rt2x00_rf(rt2x00dev, RF3322)) { -+ spec->num_channels = 14; -+ if (spec->clk_is_20mhz) -+ spec->channels = rf_vals_xtal20mhz_3x; -+ else -+ spec->channels = rf_vals_3x; - } else if (rt2x00_rf(rt2x00dev, RF3052)) { - spec->supported_bands |= SUPPORT_BAND_5GHZ; - spec->num_channels = ARRAY_SIZE(rf_vals_3x); -@@ -6366,6 +6392,19 @@ static int rt2800_probe_rt(struct rt2x00 - return 0; - } - -+int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev) -+{ -+ struct rt2x00_platform_data *pdata = rt2x00dev->dev->platform_data; -+ struct hw_mode_spec *spec = &rt2x00dev->spec; -+ -+ if (!pdata) -+ return -EINVAL; -+ -+ spec->clk_is_20mhz = pdata->clk_is_20mhz; -+ -+ return 0; -+} -+ - int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev) - { - int retval; -@@ -6395,6 +6434,15 @@ int rt2800_probe_hw(struct rt2x00_dev *r - rt2800_register_write(rt2x00dev, GPIO_CTRL, reg); - - /* -+ * Probe SoC clock. -+ */ -+ if (rt2x00_is_soc(rt2x00dev)) { -+ retval = rt2800_probe_clk(rt2x00dev); -+ if (retval) -+ return retval; -+ } -+ -+ /* - * Initialize hw specifications. - */ - retval = rt2800_probe_hw_mode(rt2x00dev); ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -409,6 +409,7 @@ static inline struct rt2x00_intf* vif_to - * @channels: Device/chipset specific channel values (See &struct rf_channel). - * @channels_info: Additional information for channels (See &struct channel_info). - * @ht: Driver HT Capabilities (See &ieee80211_sta_ht_cap). -+ * @clk_is_20mhz: External crystal of WiSoC is 20MHz instead of 40MHz - */ - struct hw_mode_spec { - unsigned int supported_bands; -@@ -425,6 +426,7 @@ struct hw_mode_spec { - const struct channel_info *channels_info; - - struct ieee80211_sta_ht_cap ht; -+ int clk_is_20mhz; - }; - - /* ---- a/include/linux/rt2x00_platform.h -+++ b/include/linux/rt2x00_platform.h -@@ -18,6 +18,7 @@ struct rt2x00_platform_data { - - int disable_2ghz; - int disable_5ghz; -+ int clk_is_20mhz; - }; - - #endif /* _RT2X00_PLATFORM_H */ diff --git a/package/mac80211/patches/612-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch b/package/mac80211/patches/612-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch deleted file mode 100644 index 6b783bc6e8..0000000000 --- a/package/mac80211/patches/612-rt2x00-make-wmac-loadable-via-OF-on-rt288x-305x-SoC.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 04dbd87265f6ba4a373b211ba324b437d224fb2d Mon Sep 17 00:00:00 2001 -From: John Crispin <blogic@openwrt.org> -Date: Sun, 17 Mar 2013 00:03:31 +0100 -Subject: [PATCH 21/38] rt2x00: make wmac loadable via OF on rt288x/305x SoC - -This patch ads the match table to allow loading the wmac support from a -devicetree. - -Signed-off-by: John Crispin <blogic@openwrt.org> ---- - drivers/net/wireless/rt2x00/rt2800pci.c | 7 +++++++ - 1 file changed, 7 insertions(+) - ---- a/drivers/net/wireless/rt2x00/rt2800pci.c -+++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -1308,11 +1308,18 @@ static int rt2800soc_probe(struct platfo - return rt2x00soc_probe(pdev, &rt2800pci_ops); - } - -+static const struct of_device_id rt2880_wmac_match[] = { -+ { .compatible = "ralink,rt2880-wmac" }, -+ {}, -+}; -+MODULE_DEVICE_TABLE(of, rt2880_wmac_match); -+ - static struct platform_driver rt2800soc_driver = { - .driver = { - .name = "rt2800_wmac", - .owner = THIS_MODULE, - .mod_name = KBUILD_MODNAME, -+ .of_match_table = rt2880_wmac_match, - }, - .probe = rt2800soc_probe, - .remove = rt2x00soc_remove, diff --git a/package/mac80211/patches/614-rt2x00-of_load_eeprom_filename.patch b/package/mac80211/patches/614-rt2x00-of_load_eeprom_filename.patch deleted file mode 100644 index 293b71a183..0000000000 --- a/package/mac80211/patches/614-rt2x00-of_load_eeprom_filename.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800pci.c -+++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -39,6 +39,7 @@ - #include <linux/pci.h> - #include <linux/platform_device.h> - #include <linux/eeprom_93cx6.h> -+#include <linux/of.h> - - #include "rt2x00.h" - #include "rt2x00mmio.h" -@@ -323,11 +324,17 @@ static int rt2800pci_write_firmware(stru - static char *rt2800pci_get_eeprom_file_name(struct rt2x00_dev *rt2x00dev) - { - struct rt2x00_platform_data *pdata; -+ struct device_node *np; -+ char *eep; - - pdata = rt2x00dev->dev->platform_data; - if (pdata) - return pdata->eeprom_file_name; - -+ np = rt2x00dev->dev->of_node; -+ if (np && !of_property_read_string(np, "ralink,eeprom", &eep)) -+ return eep; -+ - return NULL; - } - diff --git a/package/mac80211/patches/615-rt2x00-fix_20mhz_clk.patch b/package/mac80211/patches/615-rt2x00-fix_20mhz_clk.patch deleted file mode 100644 index a0dc81c28d..0000000000 --- a/package/mac80211/patches/615-rt2x00-fix_20mhz_clk.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -38,6 +38,7 @@ - #include <linux/kernel.h> - #include <linux/module.h> - #include <linux/slab.h> -+#include <linux/clk.h> - - #include "rt2x00.h" - #include "rt2800lib.h" -@@ -6394,13 +6395,14 @@ static int rt2800_probe_rt(struct rt2x00 - - int rt2800_probe_clk(struct rt2x00_dev *rt2x00dev) - { -- struct rt2x00_platform_data *pdata = rt2x00dev->dev->platform_data; - struct hw_mode_spec *spec = &rt2x00dev->spec; -+ struct clk *clk = clk_get(rt2x00dev->dev, NULL); - -- if (!pdata) -- return -EINVAL; -+ if (IS_ERR(clk)) -+ return PTR_ERR(clk); - -- spec->clk_is_20mhz = pdata->clk_is_20mhz; -+ if (clk_get_rate(clk) == 20000000) -+ spec->clk_is_20mhz = 1; - - return 0; - } diff --git a/package/mac80211/patches/616-rt2x00-support-rt5350.patch b/package/mac80211/patches/616-rt2x00-support-rt5350.patch deleted file mode 100644 index 79e864ba89..0000000000 --- a/package/mac80211/patches/616-rt2x00-support-rt5350.patch +++ /dev/null @@ -1,285 +0,0 @@ ---- a/drivers/net/wireless/rt2x00/rt2800.h -+++ b/drivers/net/wireless/rt2x00/rt2800.h -@@ -71,6 +71,7 @@ - #define RF3053 0x000d - #define RF5592 0x000f - #define RF3290 0x3290 -+#define RF5350 0x5350 - #define RF5360 0x5360 - #define RF5370 0x5370 - #define RF5372 0x5372 ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -2141,6 +2141,15 @@ static void rt2800_config_channel_rf53xx - if (rf->channel <= 14) { - int idx = rf->channel-1; - -+ if (rt2x00_rt(rt2x00dev, RT5350)) { -+ static const char r59_non_bt[] = {0x0b, 0x0b, -+ 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, -+ 0x0a, 0x09, 0x08, 0x07, 0x07, 0x06}; -+ -+ rt2800_rfcsr_write(rt2x00dev, 59, -+ r59_non_bt[idx]); -+ } -+ - if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags)) { - if (rt2x00_rt_rev_gte(rt2x00dev, RT5390, REV_RT5390F)) { - /* r55/r59 value array of channel 1~14 */ -@@ -2598,6 +2607,7 @@ static void rt2800_config_channel(struct - case RF3322: - rt2800_config_channel_rf3322(rt2x00dev, conf, rf, info); - break; -+ case RF5350: - case RF5360: - case RF5370: - case RF5372: -@@ -2614,6 +2624,7 @@ static void rt2800_config_channel(struct - - if (rt2x00_rf(rt2x00dev, RF3290) || - rt2x00_rf(rt2x00dev, RF3322) || -+ rt2x00_rf(rt2x00dev, RF5350) || - rt2x00_rf(rt2x00dev, RF5360) || - rt2x00_rf(rt2x00dev, RF5370) || - rt2x00_rf(rt2x00dev, RF5372) || -@@ -2755,7 +2766,8 @@ static void rt2800_config_channel(struct - /* - * Clear update flag - */ -- if (rt2x00_rt(rt2x00dev, RT3352)) { -+ if (rt2x00_rt(rt2x00dev, RT3352) || -+ rt2x00_rt(rt2x00dev, RT5350)) { - rt2800_bbp_read(rt2x00dev, 49, &bbp); - rt2x00_set_field8(&bbp, BBP49_UPDATE_FLAG, 0); - rt2800_bbp_write(rt2x00dev, 49, bbp); -@@ -3201,6 +3213,7 @@ void rt2800_vco_calibration(struct rt2x0 - rt2800_rfcsr_write(rt2x00dev, 7, rfcsr); - break; - case RF3290: -+ case RF5350: - case RF5360: - case RF5370: - case RF5372: -@@ -3540,7 +3553,8 @@ static int rt2800_init_registers(struct - } else if (rt2x00_rt(rt2x00dev, RT3572)) { - rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400); - rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00080606); -- } else if (rt2x00_rt(rt2x00dev, RT5390) || -+ } else if (rt2x00_rt(rt2x00dev, RT5350) || -+ rt2x00_rt(rt2x00dev, RT5390) || - rt2x00_rt(rt2x00dev, RT5392) || - rt2x00_rt(rt2x00dev, RT5592)) { - rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000404); -@@ -4193,9 +4207,13 @@ static void rt2800_init_bbp_3352(struct - - rt2800_bbp_write(rt2x00dev, 82, 0x62); - -- rt2800_bbp_write(rt2x00dev, 83, 0x6a); -- -- rt2800_bbp_write(rt2x00dev, 84, 0x99); -+ if (rt2x00_rt(rt2x00dev, RT5350)) { -+ rt2800_bbp_write(rt2x00dev, 83, 0x7a); -+ rt2800_bbp_write(rt2x00dev, 84, 0x9a); -+ } else { -+ rt2800_bbp_write(rt2x00dev, 83, 0x6a); -+ rt2800_bbp_write(rt2x00dev, 84, 0x99); -+ } - - rt2800_bbp_write(rt2x00dev, 86, 0x38); - -@@ -4209,9 +4227,13 @@ static void rt2800_init_bbp_3352(struct - - rt2800_bbp_write(rt2x00dev, 104, 0x92); - -- rt2800_bbp_write(rt2x00dev, 105, 0x34); -- -- rt2800_bbp_write(rt2x00dev, 106, 0x05); -+ if (rt2x00_rt(rt2x00dev, RT5350)) { -+ rt2800_bbp_write(rt2x00dev, 105, 0x3c); -+ rt2800_bbp_write(rt2x00dev, 106, 0x03); -+ } else { -+ rt2800_bbp_write(rt2x00dev, 105, 0x34); -+ rt2800_bbp_write(rt2x00dev, 106, 0x05); -+ } - - rt2800_bbp_write(rt2x00dev, 120, 0x50); - -@@ -4236,6 +4258,13 @@ static void rt2800_init_bbp_3352(struct - rt2800_bbp_write(rt2x00dev, 143, 0xa2); - - rt2800_bbp_write(rt2x00dev, 148, 0xc8); -+ -+ if (rt2x00_rt(rt2x00dev, RT5350)) { -+ rt2800_bbp_write(rt2x00dev, 150, 0x40); /* Antenna Software OFDM */ -+ rt2800_bbp_write(rt2x00dev, 151, 0x30); /* Antenna Software CCK */ -+ rt2800_bbp_write(rt2x00dev, 152, 0xa3); -+ rt2800_bbp_write(rt2x00dev, 154, 0); /* Clear previously selected antenna */ -+ } - } - - static void rt2800_init_bbp_3390(struct rt2x00_dev *rt2x00dev) -@@ -4520,6 +4549,7 @@ static void rt2800_init_bbp(struct rt2x0 - rt2800_init_bbp_3290(rt2x00dev); - break; - case RT3352: -+ case RT5350: - rt2800_init_bbp_3352(rt2x00dev); - break; - case RT3390: -@@ -5159,6 +5189,76 @@ static void rt2800_init_rfcsr_3572(struc - rt2800_normal_mode_setup_3xxx(rt2x00dev); - } - -+static void rt2800_init_rfcsr_5350(struct rt2x00_dev *rt2x00dev) -+{ -+ rt2800_rfcsr_write(rt2x00dev, 0, 0xf0); -+ rt2800_rfcsr_write(rt2x00dev, 1, 0x23); -+ rt2800_rfcsr_write(rt2x00dev, 2, 0x50); -+ rt2800_rfcsr_write(rt2x00dev, 3, 0x08); -+ rt2800_rfcsr_write(rt2x00dev, 4, 0x49); -+ rt2800_rfcsr_write(rt2x00dev, 5, 0x10); -+ rt2800_rfcsr_write(rt2x00dev, 6, 0xe0); -+ rt2800_rfcsr_write(rt2x00dev, 7, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 8, 0xf1); -+ rt2800_rfcsr_write(rt2x00dev, 9, 0x02); -+ rt2800_rfcsr_write(rt2x00dev, 10, 0x53); -+ rt2800_rfcsr_write(rt2x00dev, 11, 0x4a); -+ rt2800_rfcsr_write(rt2x00dev, 12, 0x46); -+ if(rt2x00dev->spec.clk_is_20mhz) -+ rt2800_rfcsr_write(rt2x00dev, 13, 0x1f); -+ else -+ rt2800_rfcsr_write(rt2x00dev, 13, 0x9f); -+ rt2800_rfcsr_write(rt2x00dev, 14, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 15, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 16, 0xc0); -+ rt2800_rfcsr_write(rt2x00dev, 18, 0x03); -+ rt2800_rfcsr_write(rt2x00dev, 19, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 20, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 21, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 22, 0x20); -+ rt2800_rfcsr_write(rt2x00dev, 23, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 24, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 25, 0x80); -+ rt2800_rfcsr_write(rt2x00dev, 26, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 27, 0x03); -+ rt2800_rfcsr_write(rt2x00dev, 28, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 29, 0xd0); -+ rt2800_rfcsr_write(rt2x00dev, 30, 0x10); -+ rt2800_rfcsr_write(rt2x00dev, 31, 0x80); -+ rt2800_rfcsr_write(rt2x00dev, 32, 0x80); -+ rt2800_rfcsr_write(rt2x00dev, 33, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 34, 0x07); -+ rt2800_rfcsr_write(rt2x00dev, 35, 0x12); -+ rt2800_rfcsr_write(rt2x00dev, 36, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 37, 0x08); -+ rt2800_rfcsr_write(rt2x00dev, 38, 0x85); -+ rt2800_rfcsr_write(rt2x00dev, 39, 0x1b); -+ rt2800_rfcsr_write(rt2x00dev, 40, 0x0b); -+ rt2800_rfcsr_write(rt2x00dev, 41, 0xbb); -+ rt2800_rfcsr_write(rt2x00dev, 42, 0xd5); -+ rt2800_rfcsr_write(rt2x00dev, 43, 0x9b); -+ rt2800_rfcsr_write(rt2x00dev, 44, 0x0c); -+ rt2800_rfcsr_write(rt2x00dev, 45, 0xa6); -+ rt2800_rfcsr_write(rt2x00dev, 46, 0x73); -+ rt2800_rfcsr_write(rt2x00dev, 47, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 48, 0x10); -+ rt2800_rfcsr_write(rt2x00dev, 49, 0x80); -+ rt2800_rfcsr_write(rt2x00dev, 50, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 51, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 52, 0x38); -+ rt2800_rfcsr_write(rt2x00dev, 53, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 54, 0x38); -+ rt2800_rfcsr_write(rt2x00dev, 55, 0x43); -+ rt2800_rfcsr_write(rt2x00dev, 56, 0x82); -+ rt2800_rfcsr_write(rt2x00dev, 57, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 58, 0x39); -+ rt2800_rfcsr_write(rt2x00dev, 59, 0x0b); -+ rt2800_rfcsr_write(rt2x00dev, 60, 0x45); -+ rt2800_rfcsr_write(rt2x00dev, 61, 0xd1); -+ rt2800_rfcsr_write(rt2x00dev, 62, 0x00); -+ rt2800_rfcsr_write(rt2x00dev, 63, 0x00); -+} -+ - static void rt2800_init_rfcsr_5390(struct rt2x00_dev *rt2x00dev) - { - rt2800_rf_init_calibration(rt2x00dev, 2); -@@ -5387,6 +5487,9 @@ static void rt2800_init_rfcsr(struct rt2 - case RT3572: - rt2800_init_rfcsr_3572(rt2x00dev); - break; -+ case RT5350: -+ rt2800_init_rfcsr_5350(rt2x00dev); -+ break; - case RT5390: - rt2800_init_rfcsr_5390(rt2x00dev); - break; -@@ -5598,6 +5701,12 @@ static int rt2800_validate_eeprom(struct - rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820); - rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); - rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); -+ } else if (rt2x00_rt(rt2x00dev, RT5350)) { -+ rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 1); -+ rt2x00_set_field16(&word, EEPROM_NIC_CONF0_TXPATH, 1); -+ rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF3320); -+ rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word); -+ rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word); - } else if (rt2x00_rt(rt2x00dev, RT2860) || - rt2x00_rt(rt2x00dev, RT2872)) { - /* -@@ -5723,9 +5832,12 @@ static int rt2800_init_eeprom(struct rt2 - */ - if (rt2x00_rt(rt2x00dev, RT3290) || - rt2x00_rt(rt2x00dev, RT3352) || -+ rt2x00_rt(rt2x00dev, RT5350) || - rt2x00_rt(rt2x00dev, RT5390) || - rt2x00_rt(rt2x00dev, RT5392)) - rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf); -+ else if (rt2x00_rt(rt2x00dev, RT5350)) -+ rf = RF5350; - else - rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE); - -@@ -5742,6 +5854,7 @@ static int rt2800_init_eeprom(struct rt2 - case RF3290: - case RF3320: - case RF3322: -+ case RF5350: - case RF5360: - case RF5370: - case RF5372: -@@ -6240,7 +6353,8 @@ static int rt2800_probe_hw_mode(struct r - rt2x00_rf(rt2x00dev, RF5392)) { - spec->num_channels = 14; - spec->channels = rf_vals_3x; -- } else if (rt2x00_rf(rt2x00dev, RF3322)) { -+ } else if (rt2x00_rf(rt2x00dev, RF3322) || -+ rt2x00_rf(rt2x00dev, RF5350)) { - spec->num_channels = 14; - if (spec->clk_is_20mhz) - spec->channels = rf_vals_xtal20mhz_3x; -@@ -6341,6 +6455,7 @@ static int rt2800_probe_hw_mode(struct r - case RF3320: - case RF3052: - case RF3290: -+ case RF5350: - case RF5360: - case RF5370: - case RF5372: -@@ -6378,6 +6493,7 @@ static int rt2800_probe_rt(struct rt2x00 - case RT3352: - case RT3390: - case RT3572: -+ case RT5350: - case RT5390: - case RT5392: - case RT5592: ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -181,6 +181,7 @@ struct rt2x00_chip { - #define RT3572 0x3572 - #define RT3593 0x3593 - #define RT3883 0x3883 /* WSOC */ -+#define RT5350 0x5350 /* WSOC 2.4GHz */ - #define RT5390 0x5390 /* 2.4GHz */ - #define RT5392 0x5392 /* 2.4GHz */ - #define RT5592 0x5592 diff --git a/package/mac80211/patches/617-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch b/package/mac80211/patches/617-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch deleted file mode 100644 index d5af4c9ae2..0000000000 --- a/package/mac80211/patches/617-rt2x00-load-eeprom-on-SoC-from-a-mtd-device-defines-.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 339fe73f340161a624cc08e738d2244814852c3e Mon Sep 17 00:00:00 2001 -From: John Crispin <blogic@openwrt.org> -Date: Sun, 17 Mar 2013 00:55:04 +0100 -Subject: [PATCH] rt2x00: load eeprom on SoC from a mtd device defines inside - OF - -Signed-off-by: John Crispin <blogic@openwrt.org> ---- - drivers/net/wireless/rt2x00/Kconfig | 1 + - drivers/net/wireless/rt2x00/rt2800pci.c | 44 ++++++++++++++++++++++++++----- - 2 files changed, 39 insertions(+), 6 deletions(-) - ---- a/drivers/net/wireless/rt2x00/Kconfig -+++ b/drivers/net/wireless/rt2x00/Kconfig -@@ -71,6 +71,7 @@ config RT2800PCI - select RT2X00_LIB_FIRMWARE - select RT2X00_LIB_EEPROM - select RT2X00_LIB_CRYPTO -+ select MTD if SOC_RT288X || SOC_RT305X - depends on CRC_CCITT - depends on EEPROM_93CX6 - ---help--- ---- a/drivers/net/wireless/rt2x00/rt2x00eeprom.c -+++ b/drivers/net/wireless/rt2x00/rt2x00eeprom.c -@@ -30,12 +30,77 @@ - #include "rt2x00.h" - #include "rt2x00lib.h" - -+#ifdef CONFIG_OF -+#include <linux/of.h> -+#include <linux/mtd/mtd.h> -+#include <linux/mtd/partitions.h> -+ -+static struct firmware mtd_fw; -+ -+static int rt2800pci_read_eeprom_mtd(struct rt2x00_dev *rt2x00dev) -+{ -+ struct device_node *np = rt2x00dev->dev->of_node, *mtd_np = NULL; -+ size_t retlen, len = rt2x00dev->ops->eeprom_size; -+ int ret, size, offset = 0; -+ struct mtd_info *mtd; -+ const char *part; -+ const __be32 *list; -+ phandle phandle; -+ -+ list = of_get_property(np, "ralink,mtd-eeprom", &size); -+ if (!list) { -+ dev_err(rt2x00dev->dev, "failed to load eeprom property\n"); -+ return -ENOENT; -+ } -+ -+ phandle = be32_to_cpup(list++); -+ if (phandle) -+ mtd_np = of_find_node_by_phandle(phandle); -+ if (!mtd_np) { -+ dev_err(rt2x00dev->dev, "failed to load mtd phandle\n"); -+ return -EINVAL; -+ } -+ -+ part = of_get_property(mtd_np, "label", NULL); -+ if (!part) -+ part = mtd_np->name; -+ -+ mtd = get_mtd_device_nm(part); -+ if (IS_ERR(mtd)) { -+ dev_err(rt2x00dev->dev, "failed to get mtd device \"%s\"\n", part); -+ return PTR_ERR(mtd); -+ } -+ -+ if (size > sizeof(*list)) -+ offset = be32_to_cpup(list); -+ -+ ret = mtd_read(mtd, offset, len, &retlen, (u_char *) rt2x00dev->eeprom); -+ put_mtd_device(mtd); -+ -+ if (!ret) { -+ rt2x00dev->eeprom_file = &mtd_fw; -+ mtd_fw.size = len; -+ mtd_fw.data = rt2x00dev->eeprom; -+ } -+ -+ return ret; -+} -+#else -+static inline int rt2800pci_read_eeprom_mtd(struct rt2x00_dev *rt2x00dev) -+{ -+ return -EINVAL; -+} -+#endif -+ - static int rt2x00lib_request_eeprom_file(struct rt2x00_dev *rt2x00dev) - { - const struct firmware *ee; - char *ee_name; - int retval; - -+ if (!rt2800pci_read_eeprom_mtd(rt2x00dev)) -+ return 0; -+ - ee_name = rt2x00dev->ops->lib->get_eeprom_file_name(rt2x00dev); - if (!ee_name) { - rt2x00_err(rt2x00dev, diff --git a/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch b/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch deleted file mode 100644 index 3381ba56ad..0000000000 --- a/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/drivers/net/wireless/mwl8k.c -+++ b/drivers/net/wireless/mwl8k.c -@@ -5530,6 +5530,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw") - MODULE_FIRMWARE(MWL8K_8366_AP_FW(MWL8K_8366_AP_FW_API)); - - static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = { -+ { PCI_VDEVICE(MARVELL, 0x2a02), .driver_data = MWL8363, }, - { PCI_VDEVICE(MARVELL, 0x2a0a), .driver_data = MWL8363, }, - { PCI_VDEVICE(MARVELL, 0x2a0c), .driver_data = MWL8363, }, - { PCI_VDEVICE(MARVELL, 0x2a24), .driver_data = MWL8363, }, diff --git a/package/mac80211/patches/800-b43-gpio-mask-module-option.patch b/package/mac80211/patches/800-b43-gpio-mask-module-option.patch deleted file mode 100644 index d2ccf30d7d..0000000000 --- a/package/mac80211/patches/800-b43-gpio-mask-module-option.patch +++ /dev/null @@ -1,37 +0,0 @@ ---- a/drivers/net/wireless/b43/b43.h -+++ b/drivers/net/wireless/b43/b43.h -@@ -820,6 +820,7 @@ struct b43_wldev { - bool qos_enabled; /* TRUE, if QoS is used. */ - bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */ - bool use_pio; /* TRUE if next init should use PIO */ -+ int gpiomask; /* GPIO LED mask as a module parameter */ - - /* PHY/Radio device. */ - struct b43_phy phy; ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -76,6 +76,11 @@ MODULE_FIRMWARE("b43/ucode16_mimo.fw"); - MODULE_FIRMWARE("b43/ucode5.fw"); - MODULE_FIRMWARE("b43/ucode9.fw"); - -+static int modparam_gpiomask = 0x000F; -+module_param_named(gpiomask, modparam_gpiomask, int, 0444); -+MODULE_PARM_DESC(gpiomask, -+ "GPIO mask for LED control (default 0x000F)"); -+ - static int modparam_bad_frames_preempt; - module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444); - MODULE_PARM_DESC(bad_frames_preempt, -@@ -2740,10 +2745,10 @@ static int b43_gpio_init(struct b43_wlde - u32 mask, set; - - b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0); -- b43_maskset16(dev, B43_MMIO_GPIO_MASK, ~0, 0xF); -+ b43_maskset16(dev, B43_MMIO_GPIO_MASK, ~0, modparam_gpiomask); - - mask = 0x0000001F; -- set = 0x0000000F; -+ set = modparam_gpiomask; - if (dev->dev->chip_id == 0x4301) { - mask |= 0x0060; - set |= 0x0060; diff --git a/package/mac80211/patches/810-b43_no_pio.patch b/package/mac80211/patches/810-b43_no_pio.patch deleted file mode 100644 index 0821dc7856..0000000000 --- a/package/mac80211/patches/810-b43_no_pio.patch +++ /dev/null @@ -1,86 +0,0 @@ ---- a/drivers/net/wireless/b43/Makefile -+++ b/drivers/net/wireless/b43/Makefile -@@ -20,7 +20,7 @@ b43-y += xmit.o - b43-y += lo.o - b43-y += wa.o - b43-y += dma.o --b43-y += pio.o -+b43-$(CONFIG_B43_PIO) += pio.o - b43-y += rfkill.o - b43-$(CPTCFG_B43_LEDS) += leds.o - b43-$(CPTCFG_B43_PCMCIA) += pcmcia.o ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -1913,10 +1913,12 @@ static void b43_do_interrupt_thread(stru - dma_reason[0], dma_reason[1], - dma_reason[2], dma_reason[3], - dma_reason[4], dma_reason[5]); -+#ifdef CONFIG_B43_PIO - b43err(dev->wl, "This device does not support DMA " - "on your system. It will now be switched to PIO.\n"); - /* Fall back to PIO transfers if we get fatal DMA errors! */ - dev->use_pio = true; -+#endif - b43_controller_restart(dev, "DMA error"); - return; - } ---- a/drivers/net/wireless/b43/pio.h -+++ b/drivers/net/wireless/b43/pio.h -@@ -150,7 +150,7 @@ static inline void b43_piorx_write32(str - b43_write32(q->dev, q->mmio_base + offset, value); - } - -- -+#ifdef CONFIG_B43_PIO - int b43_pio_init(struct b43_wldev *dev); - void b43_pio_free(struct b43_wldev *dev); - -@@ -161,5 +161,37 @@ void b43_pio_rx(struct b43_pio_rxqueue * - - void b43_pio_tx_suspend(struct b43_wldev *dev); - void b43_pio_tx_resume(struct b43_wldev *dev); -+#else -+static inline int b43_pio_init(struct b43_wldev *dev) -+{ -+ return 0; -+} -+ -+static inline void b43_pio_free(struct b43_wldev *dev) -+{ -+} -+ -+static inline int b43_pio_tx(struct b43_wldev *dev, struct sk_buff *skb) -+{ -+ return 0; -+} -+ -+static inline void b43_pio_handle_txstatus(struct b43_wldev *dev, -+ const struct b43_txstatus *status) -+{ -+} -+ -+static inline void b43_pio_rx(struct b43_pio_rxqueue *q) -+{ -+} -+ -+static inline void b43_pio_tx_suspend(struct b43_wldev *dev) -+{ -+} -+ -+static inline void b43_pio_tx_resume(struct b43_wldev *dev) -+{ -+} -+#endif /* CONFIG_B43_PIO */ - - #endif /* B43_PIO_H_ */ ---- a/drivers/net/wireless/b43/Kconfig -+++ b/drivers/net/wireless/b43/Kconfig -@@ -104,7 +104,7 @@ config B43_BCMA_PIO - default y - - config B43_PIO -- bool -+ bool "Broadcom 43xx PIO support" - depends on B43 - select SSB_BLOCKIO - default y diff --git a/package/mac80211/patches/820-b43-add-antenna-control.patch b/package/mac80211/patches/820-b43-add-antenna-control.patch deleted file mode 100644 index c17c1ca0a9..0000000000 --- a/package/mac80211/patches/820-b43-add-antenna-control.patch +++ /dev/null @@ -1,131 +0,0 @@ ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -1560,7 +1560,7 @@ static void b43_write_beacon_template(st - len, ram_offset, shm_size_offset, rate); - - /* Write the PHY TX control parameters. */ -- antenna = B43_ANTENNA_DEFAULT; -+ antenna = dev->tx_antenna; - antenna = b43_antenna_to_phyctl(antenna); - ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL); - /* We can't send beacons with short preamble. Would get PHY errors. */ -@@ -3098,8 +3098,8 @@ static int b43_chip_init(struct b43_wlde - - /* Select the antennae */ - if (phy->ops->set_rx_antenna) -- phy->ops->set_rx_antenna(dev, B43_ANTENNA_DEFAULT); -- b43_mgmtframe_txantenna(dev, B43_ANTENNA_DEFAULT); -+ phy->ops->set_rx_antenna(dev, dev->rx_antenna); -+ b43_mgmtframe_txantenna(dev, dev->tx_antenna); - - if (phy->type == B43_PHYTYPE_B) { - value16 = b43_read16(dev, 0x005E); -@@ -3843,7 +3843,6 @@ static int b43_op_config(struct ieee8021 - struct b43_wldev *dev; - struct b43_phy *phy; - struct ieee80211_conf *conf = &hw->conf; -- int antenna; - int err = 0; - bool reload_bss = false; - -@@ -3897,11 +3896,9 @@ static int b43_op_config(struct ieee8021 - } - - /* Antennas for RX and management frame TX. */ -- antenna = B43_ANTENNA_DEFAULT; -- b43_mgmtframe_txantenna(dev, antenna); -- antenna = B43_ANTENNA_DEFAULT; -+ b43_mgmtframe_txantenna(dev, dev->tx_antenna); - if (phy->ops->set_rx_antenna) -- phy->ops->set_rx_antenna(dev, antenna); -+ phy->ops->set_rx_antenna(dev, dev->rx_antenna); - - if (wl->radio_enabled != phy->radio_on) { - if (wl->radio_enabled) { -@@ -5026,6 +5023,47 @@ static int b43_op_get_survey(struct ieee - return 0; - } - -+static int b43_op_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) -+{ -+ struct b43_wl *wl = hw_to_b43_wl(hw); -+ struct b43_wldev *dev = wl->current_dev; -+ -+ if (tx_ant == 1 && rx_ant == 1) { -+ dev->tx_antenna = B43_ANTENNA0; -+ dev->rx_antenna = B43_ANTENNA0; -+ } -+ else if (tx_ant == 2 && rx_ant == 2) { -+ dev->tx_antenna = B43_ANTENNA1; -+ dev->rx_antenna = B43_ANTENNA1; -+ } -+ else if ((tx_ant & 3) == 3 && (rx_ant & 3) == 3) { -+ dev->tx_antenna = B43_ANTENNA_DEFAULT; -+ dev->rx_antenna = B43_ANTENNA_DEFAULT; -+ } -+ else { -+ return -EINVAL; -+ } -+ -+ return 0; -+} -+ -+ -+static int b43_op_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) -+{ -+ struct b43_wl *wl = hw_to_b43_wl(hw); -+ struct b43_wldev *dev = wl->current_dev; -+ -+ switch (dev->tx_antenna) { -+ case B43_ANTENNA0: -+ *tx_ant = 1; *rx_ant = 1; break; -+ case B43_ANTENNA1: -+ *tx_ant = 2; *rx_ant = 2; break; -+ case B43_ANTENNA_DEFAULT: -+ *tx_ant = 3; *rx_ant = 3; break; -+ } -+ return 0; -+} -+ - static const struct ieee80211_ops b43_hw_ops = { - .tx = b43_op_tx, - .conf_tx = b43_op_conf_tx, -@@ -5047,6 +5085,8 @@ static const struct ieee80211_ops b43_hw - .sw_scan_complete = b43_op_sw_scan_complete_notifier, - .get_survey = b43_op_get_survey, - .rfkill_poll = b43_rfkill_poll, -+ .set_antenna = b43_op_set_antenna, -+ .get_antenna = b43_op_get_antenna, - }; - - /* Hard-reset the chip. Do not call this directly. -@@ -5293,6 +5333,8 @@ static int b43_one_core_attach(struct b4 - if (!wldev) - goto out; - -+ wldev->rx_antenna = B43_ANTENNA_DEFAULT; -+ wldev->tx_antenna = B43_ANTENNA_DEFAULT; - wldev->use_pio = b43_modparam_pio; - wldev->dev = dev; - wldev->wl = wl; -@@ -5383,6 +5425,9 @@ static struct b43_wl *b43_wireless_init( - - hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; - -+ hw->wiphy->available_antennas_rx = 0x3; -+ hw->wiphy->available_antennas_tx = 0x3; -+ - wl->hw_registred = false; - hw->max_rates = 2; - SET_IEEE80211_DEV(hw, dev->dev); ---- a/drivers/net/wireless/b43/b43.h -+++ b/drivers/net/wireless/b43/b43.h -@@ -821,6 +821,8 @@ struct b43_wldev { - bool hwcrypto_enabled; /* TRUE, if HW crypto acceleration is enabled. */ - bool use_pio; /* TRUE if next init should use PIO */ - int gpiomask; /* GPIO LED mask as a module parameter */ -+ int rx_antenna; /* Used RX antenna (B43_ANTENNAxxx) */ -+ int tx_antenna; /* Used TX antenna (B43_ANTENNAxxx) */ - - /* PHY/Radio device. */ - struct b43_phy phy; diff --git a/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch b/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch deleted file mode 100644 index e55d4fe4aa..0000000000 --- a/package/mac80211/patches/830-b43-workaround-pcie-bcm4716.patch +++ /dev/null @@ -1,134 +0,0 @@ -From 4f214b1ead0af7439921637645cb63f378516175 Mon Sep 17 00:00:00 2001 -From: Hauke Mehrtens <hauke@hauke-m.de> -Date: Sat, 21 Jan 2012 18:48:38 +0100 -Subject: [PATCH 33/34] b43: add workaround for b43 on pcie bus of bcm4716. - -bcm4716 (which includes 4717 & 4718), plus 4706 on PCIe can reorder -transactions. As a fix, a read after write is performed on certain -places in the code. Older chips and the newer 5357 family don't require -this fix. -This code is based on the brcmsmac driver. - -Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> ---- - drivers/net/wireless/b43/b43.h | 26 ++++++++++++++++++++++++++ - drivers/net/wireless/b43/bus.h | 10 ++++++++++ - drivers/net/wireless/b43/phy_common.c | 6 ++++++ - drivers/net/wireless/b43/phy_n.c | 10 +++++----- - 4 files changed, 47 insertions(+), 5 deletions(-) - ---- a/drivers/net/wireless/b43/b43.h -+++ b/drivers/net/wireless/b43/b43.h -@@ -1061,6 +1061,32 @@ static inline bool b43_using_pio_transfe - return dev->__using_pio_transfers; - } - -+/* -+ * bcm4716 (which includes 4717 & 4718), plus 4706 on PCIe can reorder -+ * transactions. As a fix, a read after write is performed on certain places -+ * in the code. Older chips and the newer 5357 family don't require this fix. -+ */ -+#ifdef CONFIG_BCM47XX_BCMA -+#include <asm/mach-bcm47xx/bcm47xx.h> -+static inline void b43_wflush16(struct b43_wldev *dev, u16 offset, u16 value) -+{ -+ if (b43_bus_host_is_pci(dev->dev) && -+ bcm47xx_bus_type == BCM47XX_BUS_TYPE_BCMA && -+ (bcm47xx_bus.bcma.bus.chipinfo.id == 0x4716 || -+ bcm47xx_bus.bcma.bus.chipinfo.id == 0x5300)) { -+ b43_write16(dev, offset, value); -+ b43_read16(dev, offset); -+ } else { -+ b43_write16(dev, offset, value); -+ } -+} -+#else -+static inline void b43_wflush16(struct b43_wldev *dev, u16 offset, u16 value) -+{ -+ b43_write16(dev, offset, value); -+} -+#endif -+ - /* Message printing */ - __printf(2, 3) void b43info(struct b43_wl *wl, const char *fmt, ...); - __printf(2, 3) void b43err(struct b43_wl *wl, const char *fmt, ...); ---- a/drivers/net/wireless/b43/bus.h -+++ b/drivers/net/wireless/b43/bus.h -@@ -60,6 +60,16 @@ static inline bool b43_bus_host_is_sdio( - return (dev->bus_type == B43_BUS_SSB && - dev->sdev->bus->bustype == SSB_BUSTYPE_SDIO); - } -+static inline bool b43_bus_host_is_pci(struct b43_bus_dev *dev) -+{ -+ if (dev->bus_type == B43_BUS_SSB) -+ return (dev->sdev->bus->bustype == SSB_BUSTYPE_PCI); -+#ifdef CONFIG_B43_BCMA -+ if (dev->bus_type == B43_BUS_BCMA) -+ return (dev->bdev->bus->hosttype == BCMA_HOSTTYPE_PCI); -+#endif -+ return false; -+} - - struct b43_bus_dev *b43_bus_dev_bcma_init(struct bcma_device *core); - struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev); ---- a/drivers/net/wireless/b43/phy_common.c -+++ b/drivers/net/wireless/b43/phy_common.c -@@ -266,6 +266,12 @@ void b43_phy_write(struct b43_wldev *dev - { - assert_mac_suspended(dev); - dev->phy.ops->phy_write(dev, reg, value); -+#ifdef CONFIG_BCM47XX -+ if (b43_bus_host_is_pci(dev->dev) && reg == 0x72) { -+ b43_read16(dev, B43_MMIO_PHY_VER); -+ return; -+ } -+#endif - if (++dev->phy.writes_counter == B43_MAX_WRITES_IN_ROW) { - b43_read16(dev, B43_MMIO_PHY_VER); - dev->phy.writes_counter = 0; ---- a/drivers/net/wireless/b43/phy_n.c -+++ b/drivers/net/wireless/b43/phy_n.c -@@ -5417,14 +5417,14 @@ static inline void check_phyreg(struct b - static u16 b43_nphy_op_read(struct b43_wldev *dev, u16 reg) - { - check_phyreg(dev, reg); -- b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); -+ b43_wflush16(dev, B43_MMIO_PHY_CONTROL, reg); - return b43_read16(dev, B43_MMIO_PHY_DATA); - } - - static void b43_nphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) - { - check_phyreg(dev, reg); -- b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); -+ b43_wflush16(dev, B43_MMIO_PHY_CONTROL, reg); - b43_write16(dev, B43_MMIO_PHY_DATA, value); - } - -@@ -5432,7 +5432,7 @@ static void b43_nphy_op_maskset(struct b - u16 set) - { - check_phyreg(dev, reg); -- b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); -+ b43_wflush16(dev, B43_MMIO_PHY_CONTROL, reg); - b43_maskset16(dev, B43_MMIO_PHY_DATA, mask, set); - } - -@@ -5443,7 +5443,7 @@ static u16 b43_nphy_op_radio_read(struct - /* N-PHY needs 0x100 for read access */ - reg |= 0x100; - -- b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); -+ b43_wflush16(dev, B43_MMIO_RADIO_CONTROL, reg); - return b43_read16(dev, B43_MMIO_RADIO_DATA_LOW); - } - -@@ -5452,7 +5452,7 @@ static void b43_nphy_op_radio_write(stru - /* Register 1 is a 32-bit register. */ - B43_WARN_ON(reg == 1); - -- b43_write16(dev, B43_MMIO_RADIO_CONTROL, reg); -+ b43_wflush16(dev, B43_MMIO_RADIO_CONTROL, reg); - b43_write16(dev, B43_MMIO_RADIO_DATA_LOW, value); - } - diff --git a/package/mac80211/patches/841-b43-reduce-number-of-RX-slots.patch b/package/mac80211/patches/841-b43-reduce-number-of-RX-slots.patch deleted file mode 100644 index 9c51ac63d7..0000000000 --- a/package/mac80211/patches/841-b43-reduce-number-of-RX-slots.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/drivers/net/wireless/b43/dma.h -+++ b/drivers/net/wireless/b43/dma.h -@@ -169,7 +169,7 @@ struct b43_dmadesc_generic { - - /* DMA engine tuning knobs */ - #define B43_TXRING_SLOTS 256 --#define B43_RXRING_SLOTS 256 -+#define B43_RXRING_SLOTS 32 - #define B43_DMA0_RX_FW598_BUFSIZE (B43_DMA0_RX_FW598_FO + IEEE80211_MAX_FRAME_LEN) - #define B43_DMA0_RX_FW351_BUFSIZE (B43_DMA0_RX_FW351_FO + IEEE80211_MAX_FRAME_LEN) - diff --git a/package/mac80211/patches/845-b43-only-use-gpio-0-1-for-led.patch b/package/mac80211/patches/845-b43-only-use-gpio-0-1-for-led.patch deleted file mode 100644 index 35d774492e..0000000000 --- a/package/mac80211/patches/845-b43-only-use-gpio-0-1-for-led.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/drivers/net/wireless/b43/main.c -+++ b/drivers/net/wireless/b43/main.c -@@ -2757,6 +2757,14 @@ static int b43_gpio_init(struct b43_wlde - } else if (dev->dev->chip_id == 0x5354) { - /* Don't allow overtaking buttons GPIOs */ - set &= 0x2; /* 0x2 is LED GPIO on BCM5354 */ -+ } else if (dev->dev->chip_id == BCMA_CHIP_ID_BCM4716 || -+ dev->dev->chip_id == BCMA_CHIP_ID_BCM47162 || -+ dev->dev->chip_id == BCMA_CHIP_ID_BCM5356 || -+ dev->dev->chip_id == BCMA_CHIP_ID_BCM5357 || -+ dev->dev->chip_id == BCMA_CHIP_ID_BCM53572) { -+ /* just use gpio 0 and 1 for 2.4 GHz wifi led */ -+ set &= 0x3; -+ mask &= 0x3; - } - - if (0 /* FIXME: conditional unknown */ ) { diff --git a/package/mac80211/patches/851-brcmsmac-remove-extra-regulation-restriction.patch b/package/mac80211/patches/851-brcmsmac-remove-extra-regulation-restriction.patch deleted file mode 100644 index dd1393ae5d..0000000000 --- a/package/mac80211/patches/851-brcmsmac-remove-extra-regulation-restriction.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- a/drivers/net/wireless/brcm80211/brcmsmac/channel.c -+++ b/drivers/net/wireless/brcm80211/brcmsmac/channel.c -@@ -59,23 +59,16 @@ - - #define BRCM_2GHZ_2412_2462 REG_RULE(2412-10, 2462+10, 40, 0, 19, 0) - #define BRCM_2GHZ_2467_2472 REG_RULE(2467-10, 2472+10, 20, 0, 19, \ -- NL80211_RRF_PASSIVE_SCAN | \ -- NL80211_RRF_NO_IBSS) -+ 0) - - #define BRCM_5GHZ_5180_5240 REG_RULE(5180-10, 5240+10, 40, 0, 21, \ -- NL80211_RRF_PASSIVE_SCAN | \ -- NL80211_RRF_NO_IBSS) -+ 0) - #define BRCM_5GHZ_5260_5320 REG_RULE(5260-10, 5320+10, 40, 0, 21, \ -- NL80211_RRF_PASSIVE_SCAN | \ -- NL80211_RRF_DFS | \ -- NL80211_RRF_NO_IBSS) -+ 0) - #define BRCM_5GHZ_5500_5700 REG_RULE(5500-10, 5700+10, 40, 0, 21, \ -- NL80211_RRF_PASSIVE_SCAN | \ -- NL80211_RRF_DFS | \ -- NL80211_RRF_NO_IBSS) -+ 0) - #define BRCM_5GHZ_5745_5825 REG_RULE(5745-10, 5825+10, 40, 0, 21, \ -- NL80211_RRF_PASSIVE_SCAN | \ -- NL80211_RRF_NO_IBSS) -+ 0) - - static const struct ieee80211_regdomain brcms_regdom_x2 = { - .n_reg_rules = 6, |