mac80211: update to wireless-testing 2011-06-22
SVN-Revision: 27275
This commit is contained in:
parent
e2d3555a91
commit
c7744447a5
61 changed files with 89 additions and 5008 deletions
|
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=2011-05-27
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=2011-06-22
|
||||
PKG_RELEASE:=1
|
||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources
|
||||
PKG_MD5SUM:=3a382b03333aff304dbe8ee94fce6b5a
|
||||
PKG_MD5SUM:=3ffdd5cecedcf4236f599bdbc55ba10d
|
||||
|
||||
PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION)
|
||||
|
|
|
@ -1,537 +0,0 @@
|
|||
--- a/compat/Makefile
|
||||
+++ b/compat/Makefile
|
||||
@@ -6,31 +6,31 @@ obj-$(CONFIG_COMPAT_FIRMWARE_CLASS) += c
|
||||
compat-y += main.o
|
||||
|
||||
# Compat kernel compatibility code
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_14) += compat-2.6.14.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_18) += compat-2.6.18.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_19) += compat-2.6.19.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_21) += compat-2.6.21.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_22) += compat-2.6.22.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_23) += compat-2.6.23.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_24) += compat-2.6.24.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_25) += \
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_14) += compat-2.6.14.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_18) += compat-2.6.18.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_19) += compat-2.6.19.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_21) += compat-2.6.21.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_22) += compat-2.6.22.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_23) += compat-2.6.23.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_24) += compat-2.6.24.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_25) += \
|
||||
compat-2.6.25.o \
|
||||
pm_qos_params.o
|
||||
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_26) += compat-2.6.26.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_27) += compat-2.6.27.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_28) += compat-2.6.28.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_29) += compat-2.6.29.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_32) += compat-2.6.32.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_33) += compat-2.6.33.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_35) += compat-2.6.35.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_36) += \
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_26) += compat-2.6.26.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_27) += compat-2.6.27.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_28) += compat-2.6.28.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_29) += compat-2.6.29.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_32) += compat-2.6.32.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_33) += compat-2.6.33.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_35) += compat-2.6.35.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_36) += \
|
||||
compat-2.6.36.o \
|
||||
kfifo.o
|
||||
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_37) += compat-2.6.37.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_38) += compat-2.6.38.o
|
||||
-compat-$(CONFIG_COMPAT_KERNEL_39) += \
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_37) += compat-2.6.37.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_38) += compat-2.6.38.o
|
||||
+compat-$(CONFIG_COMPAT_KERNEL_2_6_39) += \
|
||||
compat-2.6.39.o \
|
||||
kstrtox.o
|
||||
|
||||
--- a/include/linux/compat-2.6.34.h
|
||||
+++ b/include/linux/compat-2.6.34.h
|
||||
@@ -251,6 +251,8 @@ static inline int usb_disable_autosuspen
|
||||
|
||||
#define rcu_dereference_raw(p) rcu_dereference(p)
|
||||
|
||||
+#define KEY_WPS_BUTTON 0x211 /* WiFi Protected Setup key */
|
||||
+
|
||||
#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */
|
||||
|
||||
#endif /* LINUX_26_34_COMPAT_H */
|
||||
--- a/include/linux/compat-2.6.40.h
|
||||
+++ /dev/null
|
||||
@@ -1,29 +0,0 @@
|
||||
-#ifndef LINUX_26_40_COMPAT_H
|
||||
-#define LINUX_26_40_COMPAT_H
|
||||
-
|
||||
-#include <linux/version.h>
|
||||
-
|
||||
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40))
|
||||
-
|
||||
-#include <linux/rcupdate.h>
|
||||
-
|
||||
-/*
|
||||
- * This is not part of The 2.6.37 kernel yet but we
|
||||
- * we use it to optimize the backport code we
|
||||
- * need to implement. Instead of using ifdefs
|
||||
- * to check what version of the check we use
|
||||
- * we just replace all checks on current code
|
||||
- * with this. I'll submit this upstream too, that
|
||||
- * way all we'd have to do is to implement this
|
||||
- * for older kernels, then we would not have to
|
||||
- * edit the upstrema code for backport efforts.
|
||||
- */
|
||||
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
|
||||
-#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT)
|
||||
-#else
|
||||
-#define br_port_exists(dev) (dev->br_port)
|
||||
-#endif
|
||||
-
|
||||
-#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,40)) */
|
||||
-
|
||||
-#endif /* LINUX_26_40_COMPAT_H */
|
||||
--- a/include/linux/compat-2.6.h
|
||||
+++ b/include/linux/compat-2.6.h
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <linux/compat-2.6.37.h>
|
||||
#include <linux/compat-2.6.38.h>
|
||||
#include <linux/compat-2.6.39.h>
|
||||
-#include <linux/compat-2.6.40.h>
|
||||
+#include <linux/compat-3.0.h>
|
||||
+#include <linux/compat-3.1.h>
|
||||
|
||||
#endif /* LINUX_26_COMPAT_H */
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compat-3.0.h
|
||||
@@ -0,0 +1,31 @@
|
||||
+#ifndef LINUX_3_0_COMPAT_H
|
||||
+#define LINUX_3_0_COMPAT_H
|
||||
+
|
||||
+#include <linux/version.h>
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
|
||||
+
|
||||
+/*
|
||||
+ * since commit 1c5cae815d19ffe02bdfda1260949ef2b1806171
|
||||
+ * "net: call dev_alloc_name from register_netdevice" dev_alloc_name is
|
||||
+ * called automatically. This is not implemented in older kernel
|
||||
+ * versions so it will result in device wrong names.
|
||||
+ */
|
||||
+static inline int register_netdevice_name(struct net_device *dev)
|
||||
+{
|
||||
+ int err;
|
||||
+
|
||||
+ if (strchr(dev->name, '%')) {
|
||||
+ err = dev_alloc_name(dev, dev->name);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ return register_netdevice(dev);
|
||||
+}
|
||||
+
|
||||
+#define register_netdevice(dev) register_netdevice_name(dev)
|
||||
+
|
||||
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) */
|
||||
+
|
||||
+#endif /* LINUX_3_0_COMPAT_H */
|
||||
--- /dev/null
|
||||
+++ b/include/linux/compat-3.1.h
|
||||
@@ -0,0 +1,27 @@
|
||||
+#ifndef LINUX_3_1_COMPAT_H
|
||||
+#define LINUX_3_1_COMPAT_H
|
||||
+
|
||||
+#include <linux/version.h>
|
||||
+
|
||||
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0))
|
||||
+
|
||||
+/*
|
||||
+ * This is not part of The 2.6.37 kernel yet but we
|
||||
+ * we use it to optimize the backport code we
|
||||
+ * need to implement. Instead of using ifdefs
|
||||
+ * to check what version of the check we use
|
||||
+ * we just replace all checks on current code
|
||||
+ * with this. I'll submit this upstream too, that
|
||||
+ * way all we'd have to do is to implement this
|
||||
+ * for older kernels, then we would not have to
|
||||
+ * edit the upstrema code for backport efforts.
|
||||
+ */
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36))
|
||||
+#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT)
|
||||
+#else
|
||||
+#define br_port_exists(dev) (dev->br_port)
|
||||
+#endif
|
||||
+
|
||||
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,1,0)) */
|
||||
+
|
||||
+#endif /* LINUX_3_1_COMPAT_H */
|
||||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -14,20 +14,28 @@ else
|
||||
include $(KLIB_BUILD)/.config
|
||||
endif
|
||||
|
||||
-# We will warn when you don't have MQ support or NET_SCHED enabled.
|
||||
-#
|
||||
-# We could consider just quiting if MQ and NET_SCHED is disabled
|
||||
-# as I suspect all users of this package want 802.11e (WME) and
|
||||
-# 802.11n (HT) support.
|
||||
ifneq ($(wildcard $(KLIB_BUILD)/Makefile),)
|
||||
-COMPAT_LATEST_VERSION = 39
|
||||
-KERNEL_SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p')
|
||||
+
|
||||
+COMPAT_LATEST_VERSION = 1
|
||||
+
|
||||
+KERNEL_VERSION := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p')
|
||||
+
|
||||
+ifneq ($(KERNEL_VERSION),2)
|
||||
+KERNEL_SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^3\.\([0-9]\+\).*/\1/p')
|
||||
+else
|
||||
+COMPAT_26LATEST_VERSION = 39
|
||||
+KERNEL_26SUBLEVEL := $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p')
|
||||
+COMPAT_26VERSIONS := $(shell I=$(COMPAT_26LATEST_VERSION); while [ "$$I" -gt $(KERNEL_26SUBLEVEL) ]; do echo $$I; I=$$(($$I - 1)); done)
|
||||
+$(foreach ver,$(COMPAT_26VERSIONS),$(eval CONFIG_COMPAT_KERNEL_2_6_$(ver)=y))
|
||||
+KERNEL_SUBLEVEL := -1
|
||||
+endif
|
||||
+
|
||||
COMPAT_VERSIONS := $(shell I=$(COMPAT_LATEST_VERSION); while [ "$$I" -gt $(KERNEL_SUBLEVEL) ]; do echo $$I; I=$$(($$I - 1)); done)
|
||||
-$(foreach ver,$(COMPAT_VERSIONS),$(eval CONFIG_COMPAT_KERNEL_$(ver)=y))
|
||||
+$(foreach ver,$(COMPAT_VERSIONS),$(eval CONFIG_COMPAT_KERNEL_3_$(ver)=y))
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_24
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_24
|
||||
$(error "ERROR: compat-wireless by default supports kernels >= 2.6.24, try enabling only one driver though")
|
||||
-endif #CONFIG_COMPAT_KERNEL_24
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_24
|
||||
|
||||
ifeq ($(CONFIG_CFG80211),y)
|
||||
$(error "ERROR: your kernel has CONFIG_CFG80211=y, you should have it CONFIG_CFG80211=m if you want to use this thing.")
|
||||
@@ -37,7 +45,7 @@ endif
|
||||
# 2.6.27 has FTRACE_DYNAMIC borked, so we will complain if
|
||||
# you have it enabled, otherwise you will very likely run into
|
||||
# a kernel panic.
|
||||
-ifeq ($(KERNEL_SUBLEVEL),27)
|
||||
+ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_SUBLEVEL) -eq 27 && echo yes),yes)
|
||||
ifeq ($(CONFIG_DYNAMIC_FTRACE),y)
|
||||
$(error "ERROR: Your 2.6.27 kernel has CONFIG_DYNAMIC_FTRACE, please upgrade your distribution kernel as newer ones should not have this enabled (and if so report a bug) or remove this warning if you know what you are doing")
|
||||
endif
|
||||
@@ -54,7 +62,7 @@ endif
|
||||
#
|
||||
# In kernel 2.6.32 both attributes were removed.
|
||||
#
|
||||
-ifeq ($(shell test $(KERNEL_SUBLEVEL) -ge 27 -a $(KERNEL_SUBLEVEL) -le 31 && echo yes),yes)
|
||||
+ifeq ($(shell test $(KERNEL_VERSION) -eq 2 -a $(KERNEL_SUBLEVEL) -ge 27 -a $(KERNEL_SUBLEVEL) -le 31 && echo yes),yes)
|
||||
ifeq ($(CONFIG_MAC80211),)
|
||||
$(error "ERROR: Your >=2.6.27 and <= 2.6.31 kernel has CONFIG_MAC80211 disabled, you should have it CONFIG_MAC80211=m if you want to use this thing.")
|
||||
endif
|
||||
@@ -62,6 +70,11 @@ endif
|
||||
|
||||
ifneq ($(KERNELRELEASE),) # This prevents a warning
|
||||
|
||||
+# We will warn when you don't have MQ support or NET_SCHED enabled.
|
||||
+#
|
||||
+# We could consider just quiting if MQ and NET_SCHED is disabled
|
||||
+# as I suspect all users of this package want 802.11e (WME) and
|
||||
+# 802.11n (HT) support.
|
||||
ifeq ($(CONFIG_NET_SCHED),)
|
||||
QOS_REQS_MISSING+=CONFIG_NET_SCHED
|
||||
endif
|
||||
@@ -92,20 +105,20 @@ else
|
||||
endif
|
||||
|
||||
# The Bluetooth compatibility only builds on kernels >= 2.6.27 for now
|
||||
-ifndef CONFIG_COMPAT_KERNEL_27
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
ifeq ($(CONFIG_BT),y)
|
||||
# we'll ignore compiling bluetooth
|
||||
else
|
||||
CONFIG_COMPAT_BLUETOOTH=y
|
||||
CONFIG_COMPAT_BLUETOOTH_MODULES=m
|
||||
endif
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_33
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_33
|
||||
ifdef CONFIG_FW_LOADER
|
||||
CONFIG_COMPAT_FIRMWARE_CLASS=m
|
||||
endif #CONFIG_FW_LOADER
|
||||
-endif #CONFIG_COMPAT_KERNEL_33
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_33
|
||||
|
||||
# Wireless subsystem stuff
|
||||
CONFIG_MAC80211=m
|
||||
@@ -165,9 +178,9 @@ CONFIG_BT_BNEP_PROTO_FILTER=y
|
||||
ifdef CONFIG_ISDN_CAPI
|
||||
CONFIG_BT_CMTP=m
|
||||
endif #CONFIG_ISDN_CAPI
|
||||
-ifndef CONFIG_COMPAT_KERNEL_28
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_28
|
||||
CONFIG_COMPAT_BT_HIDP=m
|
||||
-endif #CONFIG_COMPAT_KERNEL_28
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_28
|
||||
|
||||
CONFIG_BT_HCIUART=M
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
@@ -345,11 +358,11 @@ CONFIG_MWL8K=m
|
||||
CONFIG_ATL1=m
|
||||
CONFIG_ATL2=m
|
||||
CONFIG_ATL1E=m
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_ATL1C=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_ATL1C=m
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
ifdef CONFIG_WIRELESS_EXT
|
||||
CONFIG_HERMES=m
|
||||
@@ -379,13 +392,13 @@ endif #CONFIG_PCI
|
||||
|
||||
ifdef CONFIG_PCMCIA
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS=n
|
||||
CONFIG_LIBERTAS_CS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_CS=m
|
||||
NEED_LIBERTAS=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
endif #CONFIG_PCMCIA
|
||||
## end of PCMCIA
|
||||
@@ -395,10 +408,10 @@ CONFIG_EEPROM_93CX6=m
|
||||
|
||||
# USB Drivers
|
||||
ifdef CONFIG_USB
|
||||
-ifndef CONFIG_COMPAT_KERNEL_29
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_29
|
||||
CONFIG_COMPAT_ZD1211RW=m
|
||||
# CONFIG_ZD1211RW_DEBUG=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_29
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
|
||||
# Sorry, rndis_wlan uses cancel_work_sync which is new and can't be done in compat...
|
||||
|
||||
@@ -407,12 +420,12 @@ endif #CONFIG_COMPAT_KERNEL_29
|
||||
# is only wireless RNDIS chip known to date.
|
||||
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
|
||||
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
|
||||
-ifdef CONFIG_COMPAT_KERNEL_29
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_29
|
||||
CONFIG_USB_COMPAT_USBNET=n
|
||||
CONFIG_USB_NET_COMPAT_RNDIS_HOST=n
|
||||
CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n
|
||||
CONFIG_USB_NET_COMPAT_CDCETHER=n
|
||||
-else #CONFIG_COMPAT_KERNEL_29
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
CONFIG_USB_COMPAT_USBNET=m
|
||||
ifdef CONFIG_USB_NET_CDCETHER
|
||||
CONFIG_USB_NET_COMPAT_RNDIS_HOST=m
|
||||
@@ -423,7 +436,7 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=m
|
||||
CONFIG_USB_NET_COMPAT_RNDIS_WLAN=m
|
||||
endif #CONFIG_USB_NET_CDCETHER
|
||||
CONFIG_USB_NET_COMPAT_CDCETHER=m
|
||||
-endif #CONFIG_COMPAT_KERNEL_29
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
|
||||
|
||||
CONFIG_P54_USB=m
|
||||
@@ -434,14 +447,14 @@ endif #CONFIG_MAC80211_LEDS
|
||||
|
||||
CONFIG_AT76C50X_USB=m
|
||||
|
||||
-ifndef CONFIG_COMPAT_KERNEL_29
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_29
|
||||
CONFIG_CARL9170=m
|
||||
ifdef CONFIG_MAC80211_LEDS
|
||||
CONFIG_CARL9170_LEDS=y
|
||||
endif #CONFIG_MAC80211_LEDS
|
||||
# CONFIG_CARL9170_DEBUGFS=y
|
||||
# CONFIG_CARL9170_WPC=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_29
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
|
||||
# This activates a threading fix for usb urb.
|
||||
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
|
||||
@@ -467,15 +480,15 @@ ifdef CONFIG_CRC_ITU_T
|
||||
CONFIG_RT73USB=m
|
||||
endif #CONFIG_CRC_ITU_T
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_THINFIRM_USB=n
|
||||
CONFIG_LIBERTAS_USB=n
|
||||
NEED_LIBERTAS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_THINFIRM_USB=m
|
||||
CONFIG_LIBERTAS_USB=m
|
||||
NEED_LIBERTAS=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
CONFIG_ORINOCO_USB=m
|
||||
|
||||
@@ -490,7 +503,7 @@ CONFIG_RTL8192CU=m
|
||||
endif #CONFIG_USB end of USB driver list
|
||||
|
||||
ifdef CONFIG_SPI_MASTER
|
||||
-ifndef CONFIG_COMPAT_KERNEL_25
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_25
|
||||
|
||||
ifdef CONFIG_CRC7
|
||||
CONFIG_WL1251_SPI=m
|
||||
@@ -498,15 +511,15 @@ CONFIG_WL12XX_SPI=m
|
||||
endif #CONFIG_CRC7
|
||||
CONFIG_P54_SPI=m
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_SPI=n
|
||||
NEED_LIBERTAS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_SPI=m
|
||||
NEED_LIBERTAS=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
-endif #CONFIG_COMPAT_KERNEL_25
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_25
|
||||
endif #CONFIG_SPI_MASTER end of SPI driver list
|
||||
|
||||
ifdef CONFIG_MMC
|
||||
@@ -519,23 +532,23 @@ ifdef CONFIG_WL12XX_PLATFORM_DATA
|
||||
CONFIG_COMPAT_WL1251_SDIO=m
|
||||
endif #CONFIG_WL12XX_PLATFORM_DATA
|
||||
|
||||
-ifndef CONFIG_COMPAT_KERNEL_32
|
||||
+ifndef CONFIG_COMPAT_KERNEL_2_6_32
|
||||
ifdef CONFIG_WL12XX_PLATFORM_DATA
|
||||
CONFIG_COMPAT_WL12XX_SDIO=m
|
||||
endif #CONFIG_WL12XX_PLATFORM_DATA
|
||||
-endif #CONFIG_COMPAT_KERNEL_32
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_32
|
||||
|
||||
endif #CONFIG_CRC7
|
||||
|
||||
CONFIG_MWIFIEX_SDIO=m
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_SDIO=n
|
||||
NEED_LIBERTAS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS_SDIO=m
|
||||
NEED_LIBERTAS=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
CONFIG_IWM=m
|
||||
# CONFIG_IWM_DEBUG=y
|
||||
@@ -574,13 +587,13 @@ CONFIG_RT2800_LIB=m
|
||||
CONFIG_RT2X00_LIB_FIRMWARE=y
|
||||
CONFIG_RT2X00_LIB_CRYPTO=y
|
||||
# CONFIG_RT2X00_LIB_SOC=y
|
||||
-ifdef CONFIG_COMPAT_KERNEL_25
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_25
|
||||
CONFIG_RT2X00_LIB_LEDS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_25
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_25
|
||||
ifdef CONFIG_LEDS_CLASS
|
||||
CONFIG_RT2X00_LIB_LEDS=y
|
||||
endif #CONFIG_LEDS_CLASS
|
||||
-endif #CONFIG_COMPAT_KERNEL_25
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_25
|
||||
# CONFIG_RT2X00_DEBUG=y
|
||||
# CONFIG_RT2X00_LIB_DEBUGFS
|
||||
endif
|
||||
@@ -608,24 +621,24 @@ endif #CONFIG_CRC7
|
||||
|
||||
CONFIG_MWIFIEX=m
|
||||
|
||||
-ifdef CONFIG_COMPAT_KERNEL_27
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_27
|
||||
CONFIG_LIBERTAS=n
|
||||
-else #CONFIG_COMPAT_KERNEL_27
|
||||
+else #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
ifeq ($(NEED_LIBERTAS),y)
|
||||
CONFIG_LIBERTAS_THINFIRM=m
|
||||
CONFIG_LIBERTAS=m
|
||||
CONFIG_LIBERTAS_MESH=y
|
||||
# CONFIG_LIBERTAS_DEBUG=y
|
||||
endif
|
||||
-endif #CONFIG_COMPAT_KERNEL_27
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
# We need the backported rfkill module on kernel < 2.6.31.
|
||||
# In more recent kernel versions use the in kernel rfkill module.
|
||||
-ifdef CONFIG_COMPAT_KERNEL_31
|
||||
+ifdef CONFIG_COMPAT_KERNEL_2_6_31
|
||||
CONFIG_RFKILL_BACKPORT=m
|
||||
ifdef CONFIG_LEDS_TRIGGERS
|
||||
CONFIG_RFKILL_BACKPORT_LEDS=y
|
||||
endif #CONFIG_LEDS_TRIGGERS
|
||||
CONFIG_RFKILL_BACKPORT_INPUT=y
|
||||
-endif #CONFIG_COMPAT_KERNEL_31
|
||||
+endif #CONFIG_COMPAT_KERNEL_2_6_31
|
||||
|
||||
--- a/scripts/admin-update.sh
|
||||
+++ b/scripts/admin-update.sh
|
||||
@@ -18,7 +18,7 @@
|
||||
GIT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git"
|
||||
GIT_COMPAT_URL="git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/compat.git"
|
||||
|
||||
-INCLUDE_NET_BT="hci_core.h l2cap.h bluetooth.h rfcomm.h hci.h mgmt.h"
|
||||
+INCLUDE_NET_BT="hci_core.h l2cap.h bluetooth.h rfcomm.h hci.h mgmt.h smp.h"
|
||||
NET_BT_DIRS="bluetooth bluetooth/bnep bluetooth/cmtp bluetooth/rfcomm bluetooth/hidp"
|
||||
|
||||
INCLUDE_LINUX="ieee80211.h nl80211.h"
|
||||
@@ -259,7 +259,7 @@ DRIVERS_BT="drivers/bluetooth"
|
||||
# Drivers that belong the the wireless directory
|
||||
DRIVER_FILES="adm8211.c adm8211.h"
|
||||
DRIVER_FILES="$DRIVER_FILES rndis_wlan.c"
|
||||
-DRIVER_FILES="$DRIVER_FILES mac80211_hwsim.c"
|
||||
+DRIVER_FILES="$DRIVER_FILES mac80211_hwsim.c mac80211_hwsim.h"
|
||||
DRIVER_FILES="$DRIVER_FILES at76c50x-usb.c at76c50x-usb.h"
|
||||
DRIVER_FILES="$DRIVER_FILES mwl8k.c"
|
||||
|
||||
--- a/scripts/gen-compat-autoconf.sh
|
||||
+++ b/scripts/gen-compat-autoconf.sh
|
||||
@@ -148,11 +148,11 @@ kernel_version_req $OLDEST_KERNEL_SUPPOR
|
||||
for i in $(egrep '^CONFIG_|^ifdef CONFIG_|^ifndef CONFIG_|^endif #CONFIG_|^else #CONFIG_' $COMPAT_CONFIG | sed 's/ /+/'); do
|
||||
case $i in
|
||||
'ifdef+CONFIG_'* )
|
||||
- echo "#$i" | sed -e 's/+/ /' -e 's/\(ifdef CONFIG_COMPAT_KERNEL_\)\([0-9]*\)/if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,\2))/' -e 's/\(#ifdef \)\(CONFIG_[^:space:]*\)/#if defined(\2) || defined(\2_MODULE)/'
|
||||
+ echo "#$i" | sed -e 's/+/ /' -e 's/\(ifdef CONFIG_COMPAT_KERNEL_3_\)\([0-9]*\)/if (LINUX_VERSION_CODE < KERNEL_VERSION(3,\2,0))/' -e 's/\(ifdef CONFIG_COMPAT_KERNEL_2_6_\)\([0-9]*\)/if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,\2))/' -e 's/\(#ifdef \)\(CONFIG_[^:space:]*\)/#if defined(\2) || defined(\2_MODULE)/'
|
||||
continue
|
||||
;;
|
||||
'ifndef+CONFIG_'* )
|
||||
- echo "#$i" | sed -e 's/+/ /' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,\2))/' -e 's/\(#ifndef \)\(CONFIG_[^:space:]*\)/#if !defined(\2) && !defined(\2_MODULE)/'
|
||||
+ echo "#$i" | sed -e 's/+/ /' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_3_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,\2,0))/' -e 's/\(ifndef CONFIG_COMPAT_KERNEL_2_6_\)\([0-9]*\)/if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,\2))/' -e 's/\(#ifndef \)\(CONFIG_[^:space:]*\)/#if !defined(\2) && !defined(\2_MODULE)/'
|
||||
continue
|
||||
;;
|
||||
'else+#CONFIG_'* | 'endif+#CONFIG_'* )
|
||||
@@ -184,8 +184,9 @@ done
|
||||
# Deal with special cases. CONFIG_MAC80211_QOS is such a case.
|
||||
# We handle this specially for different kernels we support.
|
||||
if [ -f $KLIB_BUILD/Makefile ]; then
|
||||
- SUBLEVEL=$(make -C $KLIB_BUILD kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p')
|
||||
- if [ $SUBLEVEL -le 22 ]; then
|
||||
+ MAJORLEVEL=$(make -C $KLIB_BUILD kernelversion | sed -n 's/^\([0-9]\)\..*/\1/p')
|
||||
+ SUBLEVEL=$(make -C $KLIB_BUILD kernelversion | sed -n 's/^\(2\.6\|[3-9]\)\.\([0-9]\+\).*/\2/p')
|
||||
+ if [ $MAJORLEVEL -eq 2 -a $SUBLEVEL -le 22 ]; then
|
||||
define_config CONFIG_MAC80211_QOS y
|
||||
else # kernel >= 2.6.23
|
||||
# CONFIG_MAC80211_QOS on these kernels requires
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -327,8 +327,8 @@ endif #CONFIG_SSB
|
||||
@@ -337,8 +337,8 @@ CONFIG_BCMA_HOST_PCI=y
|
||||
|
||||
CONFIG_P54_PCI=m
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
ifeq ($(CONFIG_MAC80211),y)
|
||||
$(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular")
|
||||
@@ -635,10 +635,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
@@ -646,10 +646,10 @@ endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
# We need the backported rfkill module on kernel < 2.6.31.
|
||||
# In more recent kernel versions use the in kernel rfkill module.
|
||||
ifdef CONFIG_COMPAT_KERNEL_2_6_31
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
obj-$(CONFIG_COMPAT_NET_USB_MODULES) += drivers/net/usb/
|
||||
|
||||
obj-$(CONFIG_COMPAT_NETWORK_MODULES) += drivers/net/
|
||||
-obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/ssb/ drivers/misc/eeprom/
|
||||
+obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/misc/eeprom/
|
||||
-obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/ssb/ drivers/bcma/ drivers/misc/eeprom/
|
||||
+obj-$(CONFIG_COMPAT_VAR_MODULES) += drivers/bcma/ drivers/misc/eeprom/
|
||||
|
||||
ifeq ($(CONFIG_STAGING_EXCLUDE_BUILD),)
|
||||
obj-$(CONFIG_COMPAT_STAGING) += drivers/staging/ath6kl/
|
||||
|
@ -19,39 +19,26 @@
|
|||
else
|
||||
include $(KLIB_BUILD)/.config
|
||||
endif
|
||||
@@ -311,19 +310,18 @@ CONFIG_IPW2200_QOS=y
|
||||
@@ -314,7 +313,8 @@ CONFIG_IPW2200_QOS=y
|
||||
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
|
||||
endif #CONFIG_WIRELESS_EXT
|
||||
|
||||
-ifdef CONFIG_SSB
|
||||
-# Sonics Silicon Backplane
|
||||
-CONFIG_SSB_SPROM=y
|
||||
-
|
||||
-CONFIG_SSB_BLOCKIO=y
|
||||
-CONFIG_SSB_PCIHOST=y
|
||||
-CONFIG_SSB_B43_PCI_BRIDGE=y
|
||||
-ifdef CONFIG_PCMCIA
|
||||
-CONFIG_SSB_PCMCIAHOST=y
|
||||
-endif #CONFIG_PCMCIA
|
||||
-# CONFIG_SSB_DEBUG=y
|
||||
-CONFIG_SSB_DRIVER_PCICORE=y
|
||||
+# disabled
|
||||
+ifdef __CONFIG_SSB
|
||||
# Sonics Silicon Backplane
|
||||
CONFIG_SSB_SPROM=y
|
||||
|
||||
@@ -327,7 +327,7 @@ endif #CONFIG_PCMCIA
|
||||
# CONFIG_SSB_DEBUG=y
|
||||
CONFIG_SSB_DRIVER_PCICORE=y
|
||||
CONFIG_B43_SSB=y
|
||||
-endif #CONFIG_SSB
|
||||
+# ifdef CONFIG_SSB
|
||||
+# # Sonics Silicon Backplane
|
||||
+# CONFIG_SSB_SPROM=y
|
||||
+# CONFIG_SSB_BLOCKIO=y
|
||||
+# CONFIG_SSB_PCIHOST=y
|
||||
+# CONFIG_SSB_B43_PCI_BRIDGE=y
|
||||
+# ifdef CONFIG_PCMCIA
|
||||
+# CONFIG_SSB_PCMCIAHOST=y
|
||||
+# endif #CONFIG_PCMCIA
|
||||
+# # CONFIG_SSB_DEBUG=y
|
||||
+# CONFIG_SSB_DRIVER_PCICORE=y
|
||||
+# endif #CONFIG_SSB
|
||||
+endif #__CONFIG_SSB
|
||||
|
||||
CONFIG_P54_PCI=m
|
||||
|
||||
@@ -524,7 +522,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||
CONFIG_BCMA=m
|
||||
CONFIG_BCMA_BLOCKIO=y
|
||||
@@ -534,7 +534,6 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||
|
||||
ifdef CONFIG_MMC
|
||||
|
||||
|
|
15
package/mac80211/patches/006-disable_bcma_build.patch
Normal file
15
package/mac80211/patches/006-disable_bcma_build.patch
Normal file
|
@ -0,0 +1,15 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -329,9 +329,9 @@ CONFIG_SSB_DRIVER_PCICORE=y
|
||||
CONFIG_B43_SSB=y
|
||||
endif #__CONFIG_SSB
|
||||
|
||||
-CONFIG_BCMA=m
|
||||
-CONFIG_BCMA_BLOCKIO=y
|
||||
-CONFIG_BCMA_HOST_PCI=y
|
||||
+# CONFIG_BCMA=m
|
||||
+# CONFIG_BCMA_BLOCKIO=y
|
||||
+# CONFIG_BCMA_HOST_PCI=y
|
||||
# CONFIG_BCMA_DEBUG=y
|
||||
# CONFIG_B43_BCMA=y
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
endif #CONFIG_STAGING
|
||||
|
||||
# mac80211 test driver
|
||||
@@ -353,13 +353,13 @@ endif #CONFIG_CRC_ITU_T
|
||||
@@ -365,13 +365,13 @@ endif #CONFIG_CRC_ITU_T
|
||||
CONFIG_MWL8K=m
|
||||
|
||||
# Ethernet drivers go here
|
||||
|
@ -28,7 +28,7 @@
|
|||
endif #CONFIG_COMPAT_KERNEL_2_6_27
|
||||
|
||||
ifdef CONFIG_WIRELESS_EXT
|
||||
@@ -419,21 +419,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
@@ -431,21 +431,21 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
# Note: this depends on CONFIG_USB_NET_RNDIS_HOST and CONFIG_USB_NET_CDCETHER
|
||||
# it also requires new RNDIS_HOST and CDC_ETHER modules which we add
|
||||
ifdef CONFIG_COMPAT_KERNEL_2_6_29
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
else
|
||||
include $(KLIB_BUILD)/.config
|
||||
endif
|
||||
@@ -245,7 +245,7 @@ CONFIG_B43=m
|
||||
@@ -247,7 +247,7 @@ CONFIG_B43=m
|
||||
CONFIG_B43_HWRNG=y
|
||||
CONFIG_B43_PCI_AUTOSELECT=y
|
||||
ifdef CONFIG_PCMCIA
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -505,7 +505,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||
@@ -517,7 +517,7 @@ endif #CONFIG_SPI_MASTER end of SPI driv
|
||||
|
||||
ifdef CONFIG_MMC
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -251,7 +251,7 @@ ifdef CONFIG_MAC80211_LEDS
|
||||
@@ -253,7 +253,7 @@ ifdef CONFIG_MAC80211_LEDS
|
||||
CONFIG_B43_LEDS=y
|
||||
endif #CONFIG_MAC80211_LEDS
|
||||
CONFIG_B43_PHY_LP=y
|
||||
-CONFIG_B43_PHY_N=y
|
||||
+# CONFIG_B43_PHY_N=y
|
||||
# CONFIG_B43_PHY_HT=y
|
||||
# CONFIG_B43_FORCE_PIO=y
|
||||
# CONFIG_B43_DEBUG=y
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -315,7 +315,7 @@ CONFIG_RTL8180=m
|
||||
@@ -327,7 +327,7 @@ CONFIG_RTL8180=m
|
||||
|
||||
CONFIG_ADM8211=m
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
|||
CONFIG_RT2400PCI=m
|
||||
CONFIG_RT2500PCI=m
|
||||
ifdef CONFIG_CRC_CCITT
|
||||
@@ -454,7 +454,7 @@ CONFIG_RT2800USB_RT33XX=y
|
||||
@@ -466,7 +466,7 @@ CONFIG_RT2800USB_RT35XX=y
|
||||
# CONFIG_RT2800USB_RT53XX=y
|
||||
CONFIG_RT2800USB_UNKNOWN=y
|
||||
endif #CONFIG_CRC_CCITT
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -218,7 +218,7 @@ CONFIG_ATH9K_COMMON=m
|
||||
@@ -219,7 +219,7 @@ CONFIG_ATH9K_COMMON=m
|
||||
# as default once we get minstrel properly tested and blessed by
|
||||
# our systems engineering team. CCK rates also need to be used
|
||||
# for long range considerations.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/b43/main.c
|
||||
+++ b/drivers/net/wireless/b43/main.c
|
||||
@@ -323,83 +323,59 @@ static int b43_ratelimit(struct b43_wl *
|
||||
@@ -334,83 +334,59 @@ static int b43_ratelimit(struct b43_wl *
|
||||
|
||||
void b43info(struct b43_wl *wl, const char *fmt, ...)
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -223,7 +223,7 @@ CONFIG_ATH9K_COMMON=m
|
||||
@@ -224,7 +224,7 @@ CONFIG_ATH9K_COMMON=m
|
||||
# PCI Drivers
|
||||
ifdef CONFIG_PCI
|
||||
|
||||
|
|
12
package/mac80211/patches/020-netlink_seq.patch
Normal file
12
package/mac80211/patches/020-netlink_seq.patch
Normal file
|
@ -0,0 +1,12 @@
|
|||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -3728,7 +3728,9 @@ static int nl80211_dump_scan(struct sk_b
|
||||
spin_lock_bh(&rdev->bss_lock);
|
||||
cfg80211_bss_expire(rdev);
|
||||
|
||||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,1,0))
|
||||
cb->seq = rdev->bss_generation;
|
||||
+#endif
|
||||
|
||||
list_for_each_entry(scan, &rdev->bss_list, list) {
|
||||
if (++idx <= start)
|
|
@ -33,7 +33,7 @@
|
|||
#endif
|
||||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -440,7 +440,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
@@ -452,7 +452,7 @@ endif #CONFIG_COMPAT_KERNEL_2_6_29
|
||||
# This activates a threading fix for usb urb.
|
||||
# this is mainline commit: b3e670443b7fb8a2d29831b62b44a039c283e351
|
||||
# This fix will be included in some stable releases.
|
||||
|
|
|
@ -1,694 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -603,7 +603,6 @@ struct ath_hw_ops {
|
||||
int power_off);
|
||||
void (*rx_enable)(struct ath_hw *ah);
|
||||
void (*set_desc_link)(void *ds, u32 link);
|
||||
- void (*get_desc_link)(void *ds, u32 **link);
|
||||
bool (*calibrate)(struct ath_hw *ah,
|
||||
struct ath9k_channel *chan,
|
||||
u8 rxchainmask,
|
||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -62,8 +62,6 @@ static bool ath9k_has_pending_frames(str
|
||||
|
||||
if (txq->axq_depth || !list_empty(&txq->axq_acq))
|
||||
pending = true;
|
||||
- else if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
|
||||
- pending = !list_empty(&txq->txq_fifo_pending);
|
||||
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
return pending;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
|
||||
@@ -28,11 +28,6 @@ static void ar9002_hw_set_desc_link(void
|
||||
((struct ath_desc*) ds)->ds_link = ds_link;
|
||||
}
|
||||
|
||||
-static void ar9002_hw_get_desc_link(void *ds, u32 **ds_link)
|
||||
-{
|
||||
- *ds_link = &((struct ath_desc *)ds)->ds_link;
|
||||
-}
|
||||
-
|
||||
static bool ar9002_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
|
||||
{
|
||||
u32 isr = 0;
|
||||
@@ -437,7 +432,6 @@ void ar9002_hw_attach_mac_ops(struct ath
|
||||
|
||||
ops->rx_enable = ar9002_hw_rx_enable;
|
||||
ops->set_desc_link = ar9002_hw_set_desc_link;
|
||||
- ops->get_desc_link = ar9002_hw_get_desc_link;
|
||||
ops->get_isr = ar9002_hw_get_isr;
|
||||
ops->fill_txdesc = ar9002_hw_fill_txdesc;
|
||||
ops->proc_txdesc = ar9002_hw_proc_txdesc;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
|
||||
@@ -43,13 +43,6 @@ static void ar9003_hw_set_desc_link(void
|
||||
ads->ctl10 |= ar9003_calc_ptr_chksum(ads);
|
||||
}
|
||||
|
||||
-static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
|
||||
-{
|
||||
- struct ar9003_txc *ads = ds;
|
||||
-
|
||||
- *ds_link = &ads->link;
|
||||
-}
|
||||
-
|
||||
static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
|
||||
{
|
||||
u32 isr = 0;
|
||||
@@ -498,7 +491,6 @@ void ar9003_hw_attach_mac_ops(struct ath
|
||||
|
||||
ops->rx_enable = ar9003_hw_rx_enable;
|
||||
ops->set_desc_link = ar9003_hw_set_desc_link;
|
||||
- ops->get_desc_link = ar9003_hw_get_desc_link;
|
||||
ops->get_isr = ar9003_hw_get_isr;
|
||||
ops->fill_txdesc = ar9003_hw_fill_txdesc;
|
||||
ops->proc_txdesc = ar9003_hw_proc_txdesc;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -179,7 +179,7 @@ enum ATH_AGGR_STATUS {
|
||||
struct ath_txq {
|
||||
int mac80211_qnum; /* mac80211 queue number, -1 means not mac80211 Q */
|
||||
u32 axq_qnum; /* ath9k hardware queue number */
|
||||
- u32 *axq_link;
|
||||
+ void *axq_link;
|
||||
struct list_head axq_q;
|
||||
spinlock_t axq_lock;
|
||||
u32 axq_depth;
|
||||
@@ -188,7 +188,6 @@ struct ath_txq {
|
||||
bool axq_tx_inprogress;
|
||||
struct list_head axq_acq;
|
||||
struct list_head txq_fifo[ATH_TXFIFO_DEPTH];
|
||||
- struct list_head txq_fifo_pending;
|
||||
u8 txq_headidx;
|
||||
u8 txq_tailidx;
|
||||
int pending_frames;
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -550,6 +550,7 @@ static ssize_t read_file_xmit(struct fil
|
||||
|
||||
PR("MPDUs Queued: ", queued);
|
||||
PR("MPDUs Completed: ", completed);
|
||||
+ PR("MPDUs XRetried: ", xretries);
|
||||
PR("Aggregates: ", a_aggr);
|
||||
PR("AMPDUs Queued HW:", a_queued_hw);
|
||||
PR("AMPDUs Queued SW:", a_queued_sw);
|
||||
@@ -587,7 +588,6 @@ static ssize_t read_file_xmit(struct fil
|
||||
|
||||
PRQLE("axq_q empty: ", axq_q);
|
||||
PRQLE("axq_acq empty: ", axq_acq);
|
||||
- PRQLE("txq_fifo_pending: ", txq_fifo_pending);
|
||||
for (i = 0; i < ATH_TXFIFO_DEPTH; i++) {
|
||||
snprintf(tmp, sizeof(tmp) - 1, "txq_fifo[%i] empty: ", i);
|
||||
PRQLE(tmp, txq_fifo[i]);
|
||||
@@ -807,7 +807,10 @@ void ath_debug_stat_tx(struct ath_softc
|
||||
else
|
||||
TX_STAT_INC(qnum, a_completed);
|
||||
} else {
|
||||
- TX_STAT_INC(qnum, completed);
|
||||
+ if (bf_isxretried(bf))
|
||||
+ TX_STAT_INC(qnum, xretries);
|
||||
+ else
|
||||
+ TX_STAT_INC(qnum, completed);
|
||||
}
|
||||
|
||||
if (ts->ts_status & ATH9K_TXERR_FIFO)
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw-ops.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
|
||||
@@ -39,11 +39,6 @@ static inline void ath9k_hw_set_desc_lin
|
||||
ath9k_hw_ops(ah)->set_desc_link(ds, link);
|
||||
}
|
||||
|
||||
-static inline void ath9k_hw_get_desc_link(struct ath_hw *ah, void *ds,
|
||||
- u32 **link)
|
||||
-{
|
||||
- ath9k_hw_ops(ah)->get_desc_link(ds, link);
|
||||
-}
|
||||
static inline bool ath9k_hw_calibrate(struct ath_hw *ah,
|
||||
struct ath9k_channel *chan,
|
||||
u8 rxchainmask,
|
||||
--- a/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
|
||||
@@ -53,7 +53,7 @@ static void ath_tx_complete_buf(struct a
|
||||
struct ath_txq *txq, struct list_head *bf_q,
|
||||
struct ath_tx_status *ts, int txok, int sendbar);
|
||||
static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct list_head *head);
|
||||
+ struct list_head *head, bool internal);
|
||||
static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf, int len);
|
||||
static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
|
||||
struct ath_tx_status *ts, int nframes, int nbad,
|
||||
@@ -377,8 +377,7 @@ static void ath_tx_complete_aggr(struct
|
||||
bf_next = bf->bf_next;
|
||||
|
||||
bf->bf_state.bf_type |= BUF_XRETRY;
|
||||
- if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) ||
|
||||
- !bf->bf_stale || bf_next != NULL)
|
||||
+ if (!bf->bf_stale || bf_next != NULL)
|
||||
list_move_tail(&bf->list, &bf_head);
|
||||
|
||||
ath_tx_rc_status(sc, bf, ts, 1, 1, 0, false);
|
||||
@@ -463,20 +462,14 @@ static void ath_tx_complete_aggr(struct
|
||||
}
|
||||
}
|
||||
|
||||
- if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
|
||||
- bf_next == NULL) {
|
||||
- /*
|
||||
- * Make sure the last desc is reclaimed if it
|
||||
- * not a holding desc.
|
||||
- */
|
||||
- if (!bf_last->bf_stale)
|
||||
- list_move_tail(&bf->list, &bf_head);
|
||||
- else
|
||||
- INIT_LIST_HEAD(&bf_head);
|
||||
- } else {
|
||||
- BUG_ON(list_empty(bf_q));
|
||||
+ /*
|
||||
+ * Make sure the last desc is reclaimed if it
|
||||
+ * not a holding desc.
|
||||
+ */
|
||||
+ if (!bf_last->bf_stale || bf_next != NULL)
|
||||
list_move_tail(&bf->list, &bf_head);
|
||||
- }
|
||||
+ else
|
||||
+ INIT_LIST_HEAD(&bf_head);
|
||||
|
||||
if (!txpending || (tid->state & AGGR_CLEANUP)) {
|
||||
/*
|
||||
@@ -837,7 +830,7 @@ static void ath_tx_sched_aggr(struct ath
|
||||
bf->bf_state.bf_type &= ~BUF_AGGR;
|
||||
ath9k_hw_clr11n_aggr(sc->sc_ah, bf->bf_desc);
|
||||
ath_buf_set_rate(sc, bf, fi->framelen);
|
||||
- ath_tx_txqaddbuf(sc, txq, &bf_q);
|
||||
+ ath_tx_txqaddbuf(sc, txq, &bf_q, false);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -849,7 +842,7 @@ static void ath_tx_sched_aggr(struct ath
|
||||
/* anchor last desc of aggregate */
|
||||
ath9k_hw_set11n_aggr_last(sc->sc_ah, bf->bf_lastbf->bf_desc);
|
||||
|
||||
- ath_tx_txqaddbuf(sc, txq, &bf_q);
|
||||
+ ath_tx_txqaddbuf(sc, txq, &bf_q, false);
|
||||
TX_STAT_INC(txq->axq_qnum, a_aggr);
|
||||
|
||||
} while (txq->axq_ampdu_depth < ATH_AGGR_MIN_QDEPTH &&
|
||||
@@ -1085,7 +1078,6 @@ struct ath_txq *ath_txq_setup(struct ath
|
||||
txq->txq_headidx = txq->txq_tailidx = 0;
|
||||
for (i = 0; i < ATH_TXFIFO_DEPTH; i++)
|
||||
INIT_LIST_HEAD(&txq->txq_fifo[i]);
|
||||
- INIT_LIST_HEAD(&txq->txq_fifo_pending);
|
||||
}
|
||||
return &sc->tx.txq[axq_qnum];
|
||||
}
|
||||
@@ -1155,13 +1147,8 @@ static bool bf_is_ampdu_not_probing(stru
|
||||
return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
|
||||
}
|
||||
|
||||
-/*
|
||||
- * Drain a given TX queue (could be Beacon or Data)
|
||||
- *
|
||||
- * This assumes output has been stopped and
|
||||
- * we do not need to block ath_tx_tasklet.
|
||||
- */
|
||||
-void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
|
||||
+static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
|
||||
+ struct list_head *list, bool retry_tx)
|
||||
{
|
||||
struct ath_buf *bf, *lastbf;
|
||||
struct list_head bf_head;
|
||||
@@ -1170,93 +1157,63 @@ void ath_draintxq(struct ath_softc *sc,
|
||||
memset(&ts, 0, sizeof(ts));
|
||||
INIT_LIST_HEAD(&bf_head);
|
||||
|
||||
- for (;;) {
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
+ while (!list_empty(list)) {
|
||||
+ bf = list_first_entry(list, struct ath_buf, list);
|
||||
|
||||
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
|
||||
- if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
|
||||
- txq->txq_headidx = txq->txq_tailidx = 0;
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
- break;
|
||||
- } else {
|
||||
- bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
|
||||
- struct ath_buf, list);
|
||||
- }
|
||||
- } else {
|
||||
- if (list_empty(&txq->axq_q)) {
|
||||
- txq->axq_link = NULL;
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
- break;
|
||||
- }
|
||||
- bf = list_first_entry(&txq->axq_q, struct ath_buf,
|
||||
- list);
|
||||
-
|
||||
- if (bf->bf_stale) {
|
||||
- list_del(&bf->list);
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ if (bf->bf_stale) {
|
||||
+ list_del(&bf->list);
|
||||
|
||||
- ath_tx_return_buffer(sc, bf);
|
||||
- continue;
|
||||
- }
|
||||
+ ath_tx_return_buffer(sc, bf);
|
||||
+ continue;
|
||||
}
|
||||
|
||||
lastbf = bf->bf_lastbf;
|
||||
-
|
||||
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
|
||||
- list_cut_position(&bf_head,
|
||||
- &txq->txq_fifo[txq->txq_tailidx],
|
||||
- &lastbf->list);
|
||||
- INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
|
||||
- } else {
|
||||
- /* remove ath_buf's of the same mpdu from txq */
|
||||
- list_cut_position(&bf_head, &txq->axq_q, &lastbf->list);
|
||||
- }
|
||||
+ list_cut_position(&bf_head, list, &lastbf->list);
|
||||
|
||||
txq->axq_depth--;
|
||||
if (bf_is_ampdu_not_probing(bf))
|
||||
txq->axq_ampdu_depth--;
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
+ spin_unlock_bh(&txq->axq_lock);
|
||||
if (bf_isampdu(bf))
|
||||
ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, 0,
|
||||
retry_tx);
|
||||
else
|
||||
ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0, 0);
|
||||
+ spin_lock_bh(&txq->axq_lock);
|
||||
}
|
||||
+}
|
||||
|
||||
+/*
|
||||
+ * Drain a given TX queue (could be Beacon or Data)
|
||||
+ *
|
||||
+ * This assumes output has been stopped and
|
||||
+ * we do not need to block ath_tx_tasklet.
|
||||
+ */
|
||||
+void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
|
||||
+{
|
||||
spin_lock_bh(&txq->axq_lock);
|
||||
- txq->axq_tx_inprogress = false;
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
-
|
||||
if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
- while (!list_empty(&txq->txq_fifo_pending)) {
|
||||
- bf = list_first_entry(&txq->txq_fifo_pending,
|
||||
- struct ath_buf, list);
|
||||
- list_cut_position(&bf_head,
|
||||
- &txq->txq_fifo_pending,
|
||||
- &bf->bf_lastbf->list);
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ int idx = txq->txq_tailidx;
|
||||
|
||||
- if (bf_isampdu(bf))
|
||||
- ath_tx_complete_aggr(sc, txq, bf, &bf_head,
|
||||
- &ts, 0, retry_tx);
|
||||
- else
|
||||
- ath_tx_complete_buf(sc, bf, txq, &bf_head,
|
||||
- &ts, 0, 0);
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
+ while (!list_empty(&txq->txq_fifo[idx])) {
|
||||
+ ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx],
|
||||
+ retry_tx);
|
||||
+
|
||||
+ INCR(idx, ATH_TXFIFO_DEPTH);
|
||||
}
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ txq->txq_tailidx = idx;
|
||||
}
|
||||
|
||||
+ txq->axq_link = NULL;
|
||||
+ txq->axq_tx_inprogress = false;
|
||||
+ ath_drain_txq_list(sc, txq, &txq->axq_q, retry_tx);
|
||||
+
|
||||
/* flush any pending frames if aggregation is enabled */
|
||||
- if (sc->sc_flags & SC_OP_TXAGGR) {
|
||||
- if (!retry_tx) {
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
- ath_txq_drain_pending_buffers(sc, txq);
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
- }
|
||||
- }
|
||||
+ if ((sc->sc_flags & SC_OP_TXAGGR) && !retry_tx)
|
||||
+ ath_txq_drain_pending_buffers(sc, txq);
|
||||
+
|
||||
+ spin_unlock_bh(&txq->axq_lock);
|
||||
}
|
||||
|
||||
bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
|
||||
@@ -1370,11 +1327,13 @@ void ath_txq_schedule(struct ath_softc *
|
||||
* assume the descriptors are already chained together by caller.
|
||||
*/
|
||||
static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
|
||||
- struct list_head *head)
|
||||
+ struct list_head *head, bool internal)
|
||||
{
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
- struct ath_buf *bf;
|
||||
+ struct ath_buf *bf, *bf_last;
|
||||
+ bool puttxbuf = false;
|
||||
+ bool edma;
|
||||
|
||||
/*
|
||||
* Insert the frame on the outbound list and
|
||||
@@ -1384,51 +1343,49 @@ static void ath_tx_txqaddbuf(struct ath_
|
||||
if (list_empty(head))
|
||||
return;
|
||||
|
||||
+ edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
|
||||
bf = list_first_entry(head, struct ath_buf, list);
|
||||
+ bf_last = list_entry(head->prev, struct ath_buf, list);
|
||||
|
||||
ath_dbg(common, ATH_DBG_QUEUE,
|
||||
"qnum: %d, txq depth: %d\n", txq->axq_qnum, txq->axq_depth);
|
||||
|
||||
- if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
|
||||
- if (txq->axq_depth >= ATH_TXFIFO_DEPTH) {
|
||||
- list_splice_tail_init(head, &txq->txq_fifo_pending);
|
||||
- return;
|
||||
- }
|
||||
- if (!list_empty(&txq->txq_fifo[txq->txq_headidx]))
|
||||
- ath_dbg(common, ATH_DBG_XMIT,
|
||||
- "Initializing tx fifo %d which is non-empty\n",
|
||||
- txq->txq_headidx);
|
||||
- INIT_LIST_HEAD(&txq->txq_fifo[txq->txq_headidx]);
|
||||
- list_splice_init(head, &txq->txq_fifo[txq->txq_headidx]);
|
||||
+ if (edma && list_empty(&txq->txq_fifo[txq->txq_headidx])) {
|
||||
+ list_splice_tail_init(head, &txq->txq_fifo[txq->txq_headidx]);
|
||||
INCR(txq->txq_headidx, ATH_TXFIFO_DEPTH);
|
||||
- TX_STAT_INC(txq->axq_qnum, puttxbuf);
|
||||
- ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
|
||||
- ath_dbg(common, ATH_DBG_XMIT, "TXDP[%u] = %llx (%p)\n",
|
||||
- txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
|
||||
+ puttxbuf = true;
|
||||
} else {
|
||||
list_splice_tail_init(head, &txq->axq_q);
|
||||
|
||||
- if (txq->axq_link == NULL) {
|
||||
- TX_STAT_INC(txq->axq_qnum, puttxbuf);
|
||||
- ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
|
||||
- ath_dbg(common, ATH_DBG_XMIT, "TXDP[%u] = %llx (%p)\n",
|
||||
- txq->axq_qnum, ito64(bf->bf_daddr),
|
||||
- bf->bf_desc);
|
||||
- } else {
|
||||
- *txq->axq_link = bf->bf_daddr;
|
||||
+ if (txq->axq_link) {
|
||||
+ ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr);
|
||||
ath_dbg(common, ATH_DBG_XMIT,
|
||||
"link[%u] (%p)=%llx (%p)\n",
|
||||
txq->axq_qnum, txq->axq_link,
|
||||
ito64(bf->bf_daddr), bf->bf_desc);
|
||||
- }
|
||||
- ath9k_hw_get_desc_link(ah, bf->bf_lastbf->bf_desc,
|
||||
- &txq->axq_link);
|
||||
+ } else if (!edma)
|
||||
+ puttxbuf = true;
|
||||
+
|
||||
+ txq->axq_link = bf_last->bf_desc;
|
||||
+ }
|
||||
+
|
||||
+ if (puttxbuf) {
|
||||
+ TX_STAT_INC(txq->axq_qnum, puttxbuf);
|
||||
+ ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
|
||||
+ ath_dbg(common, ATH_DBG_XMIT, "TXDP[%u] = %llx (%p)\n",
|
||||
+ txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
|
||||
+ }
|
||||
+
|
||||
+ if (!edma) {
|
||||
TX_STAT_INC(txq->axq_qnum, txstart);
|
||||
ath9k_hw_txstart(ah, txq->axq_qnum);
|
||||
}
|
||||
- txq->axq_depth++;
|
||||
- if (bf_is_ampdu_not_probing(bf))
|
||||
- txq->axq_ampdu_depth++;
|
||||
+
|
||||
+ if (!internal) {
|
||||
+ txq->axq_depth++;
|
||||
+ if (bf_is_ampdu_not_probing(bf))
|
||||
+ txq->axq_ampdu_depth++;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
|
||||
@@ -1470,7 +1427,7 @@ static void ath_tx_send_ampdu(struct ath
|
||||
TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw);
|
||||
bf->bf_lastbf = bf;
|
||||
ath_buf_set_rate(sc, bf, fi->framelen);
|
||||
- ath_tx_txqaddbuf(sc, txctl->txq, &bf_head);
|
||||
+ ath_tx_txqaddbuf(sc, txctl->txq, &bf_head, false);
|
||||
}
|
||||
|
||||
static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
|
||||
@@ -1490,7 +1447,7 @@ static void ath_tx_send_normal(struct at
|
||||
bf->bf_lastbf = bf;
|
||||
fi = get_frame_info(bf->bf_mpdu);
|
||||
ath_buf_set_rate(sc, bf, fi->framelen);
|
||||
- ath_tx_txqaddbuf(sc, txq, bf_head);
|
||||
+ ath_tx_txqaddbuf(sc, txq, bf_head, false);
|
||||
TX_STAT_INC(txq->axq_qnum, queued);
|
||||
}
|
||||
|
||||
@@ -2077,6 +2034,38 @@ static void ath_tx_rc_status(struct ath_
|
||||
tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
|
||||
}
|
||||
|
||||
+static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
|
||||
+ struct ath_tx_status *ts, struct ath_buf *bf,
|
||||
+ struct list_head *bf_head)
|
||||
+{
|
||||
+ int txok;
|
||||
+
|
||||
+ txq->axq_depth--;
|
||||
+ txok = !(ts->ts_status & ATH9K_TXERR_MASK);
|
||||
+ txq->axq_tx_inprogress = false;
|
||||
+ if (bf_is_ampdu_not_probing(bf))
|
||||
+ txq->axq_ampdu_depth--;
|
||||
+
|
||||
+ spin_unlock_bh(&txq->axq_lock);
|
||||
+
|
||||
+ if (!bf_isampdu(bf)) {
|
||||
+ /*
|
||||
+ * This frame is sent out as a single frame.
|
||||
+ * Use hardware retry status for this frame.
|
||||
+ */
|
||||
+ if (ts->ts_status & ATH9K_TXERR_XRETRY)
|
||||
+ bf->bf_state.bf_type |= BUF_XRETRY;
|
||||
+ ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok, true);
|
||||
+ ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok, 0);
|
||||
+ } else
|
||||
+ ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok, true);
|
||||
+
|
||||
+ spin_lock_bh(&txq->axq_lock);
|
||||
+
|
||||
+ if (sc->sc_flags & SC_OP_TXAGGR)
|
||||
+ ath_txq_schedule(sc, txq);
|
||||
+}
|
||||
+
|
||||
static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
|
||||
{
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
@@ -2085,20 +2074,18 @@ static void ath_tx_processq(struct ath_s
|
||||
struct list_head bf_head;
|
||||
struct ath_desc *ds;
|
||||
struct ath_tx_status ts;
|
||||
- int txok;
|
||||
int status;
|
||||
|
||||
ath_dbg(common, ATH_DBG_QUEUE, "tx queue %d (%x), link %p\n",
|
||||
txq->axq_qnum, ath9k_hw_gettxbuf(sc->sc_ah, txq->axq_qnum),
|
||||
txq->axq_link);
|
||||
|
||||
+ spin_lock_bh(&txq->axq_lock);
|
||||
for (;;) {
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
if (list_empty(&txq->axq_q)) {
|
||||
txq->axq_link = NULL;
|
||||
if (sc->sc_flags & SC_OP_TXAGGR)
|
||||
ath_txq_schedule(sc, txq);
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
break;
|
||||
}
|
||||
bf = list_first_entry(&txq->axq_q, struct ath_buf, list);
|
||||
@@ -2114,13 +2101,11 @@ static void ath_tx_processq(struct ath_s
|
||||
bf_held = NULL;
|
||||
if (bf->bf_stale) {
|
||||
bf_held = bf;
|
||||
- if (list_is_last(&bf_held->list, &txq->axq_q)) {
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ if (list_is_last(&bf_held->list, &txq->axq_q))
|
||||
break;
|
||||
- } else {
|
||||
- bf = list_entry(bf_held->list.next,
|
||||
- struct ath_buf, list);
|
||||
- }
|
||||
+
|
||||
+ bf = list_entry(bf_held->list.next, struct ath_buf,
|
||||
+ list);
|
||||
}
|
||||
|
||||
lastbf = bf->bf_lastbf;
|
||||
@@ -2128,10 +2113,9 @@ static void ath_tx_processq(struct ath_s
|
||||
|
||||
memset(&ts, 0, sizeof(ts));
|
||||
status = ath9k_hw_txprocdesc(ah, ds, &ts);
|
||||
- if (status == -EINPROGRESS) {
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ if (status == -EINPROGRESS)
|
||||
break;
|
||||
- }
|
||||
+
|
||||
TX_STAT_INC(txq->axq_qnum, txprocdesc);
|
||||
|
||||
/*
|
||||
@@ -2145,42 +2129,14 @@ static void ath_tx_processq(struct ath_s
|
||||
list_cut_position(&bf_head,
|
||||
&txq->axq_q, lastbf->list.prev);
|
||||
|
||||
- txq->axq_depth--;
|
||||
- txok = !(ts.ts_status & ATH9K_TXERR_MASK);
|
||||
- txq->axq_tx_inprogress = false;
|
||||
- if (bf_held)
|
||||
+ if (bf_held) {
|
||||
list_del(&bf_held->list);
|
||||
-
|
||||
- if (bf_is_ampdu_not_probing(bf))
|
||||
- txq->axq_ampdu_depth--;
|
||||
-
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
-
|
||||
- if (bf_held)
|
||||
ath_tx_return_buffer(sc, bf_held);
|
||||
-
|
||||
- if (!bf_isampdu(bf)) {
|
||||
- /*
|
||||
- * This frame is sent out as a single frame.
|
||||
- * Use hardware retry status for this frame.
|
||||
- */
|
||||
- if (ts.ts_status & ATH9K_TXERR_XRETRY)
|
||||
- bf->bf_state.bf_type |= BUF_XRETRY;
|
||||
- ath_tx_rc_status(sc, bf, &ts, 1, txok ? 0 : 1, txok, true);
|
||||
}
|
||||
|
||||
- if (bf_isampdu(bf))
|
||||
- ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, txok,
|
||||
- true);
|
||||
- else
|
||||
- ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, txok, 0);
|
||||
-
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
-
|
||||
- if (sc->sc_flags & SC_OP_TXAGGR)
|
||||
- ath_txq_schedule(sc, txq);
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
+ ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
|
||||
}
|
||||
+ spin_unlock_bh(&txq->axq_lock);
|
||||
}
|
||||
|
||||
static void ath_tx_complete_poll_work(struct work_struct *work)
|
||||
@@ -2237,17 +2193,16 @@ void ath_tx_tasklet(struct ath_softc *sc
|
||||
|
||||
void ath_tx_edma_tasklet(struct ath_softc *sc)
|
||||
{
|
||||
- struct ath_tx_status txs;
|
||||
+ struct ath_tx_status ts;
|
||||
struct ath_common *common = ath9k_hw_common(sc->sc_ah);
|
||||
struct ath_hw *ah = sc->sc_ah;
|
||||
struct ath_txq *txq;
|
||||
struct ath_buf *bf, *lastbf;
|
||||
struct list_head bf_head;
|
||||
int status;
|
||||
- int txok;
|
||||
|
||||
for (;;) {
|
||||
- status = ath9k_hw_txprocdesc(ah, NULL, (void *)&txs);
|
||||
+ status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts);
|
||||
if (status == -EINPROGRESS)
|
||||
break;
|
||||
if (status == -EIO) {
|
||||
@@ -2257,12 +2212,13 @@ void ath_tx_edma_tasklet(struct ath_soft
|
||||
}
|
||||
|
||||
/* Skip beacon completions */
|
||||
- if (txs.qid == sc->beacon.beaconq)
|
||||
+ if (ts.qid == sc->beacon.beaconq)
|
||||
continue;
|
||||
|
||||
- txq = &sc->tx.txq[txs.qid];
|
||||
+ txq = &sc->tx.txq[ts.qid];
|
||||
|
||||
spin_lock_bh(&txq->axq_lock);
|
||||
+
|
||||
if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
return;
|
||||
@@ -2275,41 +2231,21 @@ void ath_tx_edma_tasklet(struct ath_soft
|
||||
INIT_LIST_HEAD(&bf_head);
|
||||
list_cut_position(&bf_head, &txq->txq_fifo[txq->txq_tailidx],
|
||||
&lastbf->list);
|
||||
- INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
|
||||
- txq->axq_depth--;
|
||||
- txq->axq_tx_inprogress = false;
|
||||
- if (bf_is_ampdu_not_probing(bf))
|
||||
- txq->axq_ampdu_depth--;
|
||||
- spin_unlock_bh(&txq->axq_lock);
|
||||
|
||||
- txok = !(txs.ts_status & ATH9K_TXERR_MASK);
|
||||
-
|
||||
- if (!bf_isampdu(bf)) {
|
||||
- if (txs.ts_status & ATH9K_TXERR_XRETRY)
|
||||
- bf->bf_state.bf_type |= BUF_XRETRY;
|
||||
- ath_tx_rc_status(sc, bf, &txs, 1, txok ? 0 : 1, txok, true);
|
||||
- }
|
||||
-
|
||||
- if (bf_isampdu(bf))
|
||||
- ath_tx_complete_aggr(sc, txq, bf, &bf_head, &txs,
|
||||
- txok, true);
|
||||
- else
|
||||
- ath_tx_complete_buf(sc, bf, txq, &bf_head,
|
||||
- &txs, txok, 0);
|
||||
+ if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
|
||||
+ INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
|
||||
|
||||
- spin_lock_bh(&txq->axq_lock);
|
||||
+ if (!list_empty(&txq->axq_q)) {
|
||||
+ struct list_head bf_q;
|
||||
|
||||
- if (!list_empty(&txq->txq_fifo_pending)) {
|
||||
- INIT_LIST_HEAD(&bf_head);
|
||||
- bf = list_first_entry(&txq->txq_fifo_pending,
|
||||
- struct ath_buf, list);
|
||||
- list_cut_position(&bf_head,
|
||||
- &txq->txq_fifo_pending,
|
||||
- &bf->bf_lastbf->list);
|
||||
- ath_tx_txqaddbuf(sc, txq, &bf_head);
|
||||
- } else if (sc->sc_flags & SC_OP_TXAGGR)
|
||||
- ath_txq_schedule(sc, txq);
|
||||
+ INIT_LIST_HEAD(&bf_q);
|
||||
+ txq->axq_link = NULL;
|
||||
+ list_splice_tail_init(&txq->axq_q, &bf_q);
|
||||
+ ath_tx_txqaddbuf(sc, txq, &bf_q, true);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
+ ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
|
||||
spin_unlock_bh(&txq->axq_lock);
|
||||
}
|
||||
}
|
||||
--- a/net/mac80211/agg-rx.c
|
||||
+++ b/net/mac80211/agg-rx.c
|
||||
@@ -161,6 +161,8 @@ static void ieee80211_send_addba_resp(st
|
||||
@@ -176,6 +176,8 @@ static void ieee80211_send_addba_resp(st
|
||||
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);
|
||||
|
@ -709,7 +21,7 @@
|
|||
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);
|
||||
@@ -388,7 +389,8 @@ int ieee80211_start_tx_ba_session(struct
|
||||
@@ -398,7 +399,8 @@ int ieee80211_start_tx_ba_session(struct
|
||||
*/
|
||||
if (sdata->vif.type != NL80211_IFTYPE_STATION &&
|
||||
sdata->vif.type != NL80211_IFTYPE_AP_VLAN &&
|
||||
|
@ -933,55 +245,3 @@
|
|||
WLAN_STA_CLEAR_PS_FILT = 1<<9,
|
||||
WLAN_STA_MFP = 1<<10,
|
||||
WLAN_STA_BLOCK_BA = 1<<11,
|
||||
--- a/drivers/net/wireless/ath/ath9k/debug.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.h
|
||||
@@ -116,6 +116,7 @@ struct ath_tx_stats {
|
||||
u32 tx_bytes_all;
|
||||
u32 queued;
|
||||
u32 completed;
|
||||
+ u32 xretries;
|
||||
u32 a_aggr;
|
||||
u32 a_queued_hw;
|
||||
u32 a_queued_sw;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -4645,10 +4645,16 @@ static void ar9003_hw_set_power_per_rate
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
- scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
|
||||
+ if (scaledPower > REDUCE_SCALED_POWER_BY_TWO_CHAIN)
|
||||
+ scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
|
||||
+ else
|
||||
+ scaledPower = 0;
|
||||
break;
|
||||
case 3:
|
||||
- scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
|
||||
+ if (scaledPower > REDUCE_SCALED_POWER_BY_THREE_CHAIN)
|
||||
+ scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
|
||||
+ else
|
||||
+ scaledPower = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/eeprom_9287.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/eeprom_9287.c
|
||||
@@ -524,10 +524,16 @@ static void ath9k_hw_set_ar9287_power_pe
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
- scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
|
||||
+ if (scaledPower > REDUCE_SCALED_POWER_BY_TWO_CHAIN)
|
||||
+ scaledPower -= REDUCE_SCALED_POWER_BY_TWO_CHAIN;
|
||||
+ else
|
||||
+ scaledPower = 0;
|
||||
break;
|
||||
case 3:
|
||||
- scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
|
||||
+ if (scaledPower > REDUCE_SCALED_POWER_BY_THREE_CHAIN)
|
||||
+ scaledPower -= REDUCE_SCALED_POWER_BY_THREE_CHAIN;
|
||||
+ else
|
||||
+ scaledPower = 0;
|
||||
break;
|
||||
}
|
||||
scaledPower = max((u16)0, scaledPower);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <asm/unaligned.h>
|
||||
|
||||
#include "hw.h"
|
||||
@@ -434,8 +435,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||
@@ -443,8 +444,16 @@ static int ath9k_hw_init_macaddr(struct
|
||||
common->macaddr[2 * i] = eeval >> 8;
|
||||
common->macaddr[2 * i + 1] = eeval & 0xff;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||
@@ -1480,15 +1480,6 @@ static int ath9k_add_interface(struct ie
|
||||
@@ -1490,15 +1490,6 @@ static int ath9k_add_interface(struct ie
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
|||
ath_dbg(common, ATH_DBG_CONFIG,
|
||||
"Attach a VIF of type: %d\n", vif->type);
|
||||
|
||||
@@ -1514,15 +1505,6 @@ static int ath9k_change_interface(struct
|
||||
@@ -1524,15 +1515,6 @@ static int ath9k_change_interface(struct
|
||||
mutex_lock(&sc->mutex);
|
||||
ath9k_ps_wakeup(sc);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
|
||||
@@ -97,13 +97,8 @@ ath5k_add_interface(struct ieee80211_hw
|
||||
@@ -95,13 +95,8 @@ ath5k_add_interface(struct ieee80211_hw
|
||||
goto end;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
|||
goto end;
|
||||
--- a/drivers/net/wireless/ath/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
||||
@@ -1880,7 +1880,7 @@ ath5k_beacon_send(struct ath5k_softc *sc
|
||||
@@ -1883,7 +1883,7 @@ ath5k_beacon_send(struct ath5k_softc *sc
|
||||
sc->bmisscount = 0;
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
|||
sc->opmode == NL80211_IFTYPE_MESH_POINT) {
|
||||
u64 tsf = ath5k_hw_get_tsf64(ah);
|
||||
u32 tsftu = TSF_TO_TU(tsf);
|
||||
@@ -1958,7 +1958,7 @@ ath5k_beacon_update_timers(struct ath5k_
|
||||
@@ -1961,7 +1961,7 @@ ath5k_beacon_update_timers(struct ath5k_
|
||||
u64 hw_tsf;
|
||||
|
||||
intval = sc->bintval & AR5K_BEACON_PERIOD;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/debug.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/debug.c
|
||||
@@ -1131,6 +1131,53 @@ static const struct file_operations fops
|
||||
@@ -1181,6 +1181,53 @@ static const struct file_operations fops
|
||||
.llseek = default_llseek,/* read accesses f_pos */
|
||||
};
|
||||
|
||||
|
@ -54,7 +54,7 @@
|
|||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1179,6 +1226,9 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1231,6 +1278,9 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
debugfs_create_u32("gpio_val", S_IRUSR | S_IWUSR,
|
||||
sc->debug.debugfs_phy, &sc->sc_ah->gpio_val);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1508,8 +1508,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -1591,8 +1591,8 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
REG_WRITE(ah, AR_OBS, 8);
|
||||
|
||||
if (ah->config.rx_intr_mitigation) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -365,7 +365,7 @@ struct ath_vif {
|
||||
@@ -363,7 +363,7 @@ struct ath_vif {
|
||||
* number of beacon intervals, the game's up.
|
||||
*/
|
||||
#define BSTUCK_THRESH 9
|
||||
|
@ -11,7 +11,7 @@
|
|||
#define IEEE80211_MS_TO_TU(x) (((x) * 1000) / 1024)
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -355,8 +355,8 @@ static void ath9k_hw_init_config(struct
|
||||
@@ -364,8 +364,8 @@ static void ath9k_hw_init_config(struct
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
|
||||
@@ -119,7 +119,7 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
@@ -117,7 +117,7 @@ void ath_descdma_cleanup(struct ath_soft
|
||||
/* RX / TX */
|
||||
/***********/
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1344,6 +1344,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
@@ -1427,6 +1427,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
memset(caldata, 0, sizeof(*caldata));
|
||||
ath9k_init_nfcal_hist_buffer(ah, chan);
|
||||
}
|
||||
|
@ -48,7 +48,7 @@
|
|||
(ah->chip_fullsleep != true) &&
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -687,6 +687,7 @@ struct ath_hw {
|
||||
@@ -688,6 +688,7 @@ struct ath_hw {
|
||||
enum nl80211_iftype opmode;
|
||||
enum ath9k_power_mode power_mode;
|
||||
|
||||
|
@ -69,7 +69,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -985,6 +985,8 @@ static int ath9k_rx_skb_preprocess(struc
|
||||
@@ -986,6 +986,8 @@ static int ath9k_rx_skb_preprocess(struc
|
||||
struct ieee80211_rx_status *rx_status,
|
||||
bool *decrypt_error)
|
||||
{
|
||||
|
@ -78,7 +78,7 @@
|
|||
memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
||||
|
||||
/*
|
||||
@@ -1005,7 +1007,7 @@ static int ath9k_rx_skb_preprocess(struc
|
||||
@@ -1006,7 +1008,7 @@ static int ath9k_rx_skb_preprocess(struc
|
||||
|
||||
rx_status->band = hw->conf.channel->band;
|
||||
rx_status->freq = hw->conf.channel->center_freq;
|
||||
|
|
|
@ -1,60 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -560,6 +560,7 @@ static int __ath9k_hw_init(struct ath_hw
|
||||
case AR_SREV_VERSION_9287:
|
||||
case AR_SREV_VERSION_9271:
|
||||
case AR_SREV_VERSION_9300:
|
||||
+ case AR_SREV_VERSION_9330:
|
||||
case AR_SREV_VERSION_9485:
|
||||
case AR_SREV_VERSION_9340:
|
||||
break;
|
||||
@@ -570,7 +571,8 @@ static int __ath9k_hw_init(struct ath_hw
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
- if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9271(ah) || AR_SREV_9100(ah) || AR_SREV_9340(ah) ||
|
||||
+ AR_SREV_9330(ah))
|
||||
ah->is_pciexpress = false;
|
||||
|
||||
ah->hw_version.phyRev = REG_READ(ah, AR_PHY_CHIP_ID);
|
||||
@@ -2584,6 +2586,7 @@ static struct {
|
||||
{ AR_SREV_VERSION_9287, "9287" },
|
||||
{ AR_SREV_VERSION_9271, "9271" },
|
||||
{ AR_SREV_VERSION_9300, "9300" },
|
||||
+ { AR_SREV_VERSION_9330, "9330" },
|
||||
{ AR_SREV_VERSION_9485, "9485" },
|
||||
};
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath9k/reg.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/reg.h
|
||||
@@ -788,6 +788,10 @@
|
||||
#define AR_SREV_REVISION_9271_11 1
|
||||
#define AR_SREV_VERSION_9300 0x1c0
|
||||
#define AR_SREV_REVISION_9300_20 2 /* 2.0 and 2.1 */
|
||||
+#define AR_SREV_VERSION_9330 0x200
|
||||
+#define AR_SREV_REVISION_9330_10 0
|
||||
+#define AR_SREV_REVISION_9330_11 1
|
||||
+#define AR_SREV_REVISION_9330_12 2
|
||||
#define AR_SREV_VERSION_9485 0x240
|
||||
#define AR_SREV_REVISION_9485_10 0
|
||||
#define AR_SREV_REVISION_9485_11 1
|
||||
@@ -862,6 +866,18 @@
|
||||
#define AR_SREV_9300_20_OR_LATER(_ah) \
|
||||
((_ah)->hw_version.macVersion >= AR_SREV_VERSION_9300)
|
||||
|
||||
+#define AR_SREV_9330(_ah) \
|
||||
+ (((_ah)->hw_version.macVersion == AR_SREV_VERSION_9330))
|
||||
+#define AR_SREV_9330_10(_ah) \
|
||||
+ (AR_SREV_9330((_ah)) && \
|
||||
+ ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_10))
|
||||
+#define AR_SREV_9330_11(_ah) \
|
||||
+ (AR_SREV_9330((_ah)) && \
|
||||
+ ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_11))
|
||||
+#define AR_SREV_9330_12(_ah) \
|
||||
+ (AR_SREV_9330((_ah)) && \
|
||||
+ ((_ah)->hw_version.macRev == AR_SREV_REVISION_9330_12))
|
||||
+
|
||||
#define AR_SREV_9485(_ah) \
|
||||
(((_ah)->hw_version.macVersion == AR_SREV_VERSION_9485))
|
||||
#define AR_SREV_9485_10(_ah) \
|
|
@ -1,10 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -45,6 +45,7 @@
|
||||
#define AR9300_DEVID_PCIE 0x0030
|
||||
#define AR9300_DEVID_AR9340 0x0031
|
||||
#define AR9300_DEVID_AR9485_PCIE 0x0032
|
||||
+#define AR9300_DEVID_AR9330 0x0035
|
||||
|
||||
#define AR5416_AR9100_DEVID 0x000b
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -252,6 +252,15 @@ static void ath9k_hw_read_revisions(stru
|
||||
case AR5416_AR9100_DEVID:
|
||||
ah->hw_version.macVersion = AR_SREV_VERSION_9100;
|
||||
break;
|
||||
+ case AR9300_DEVID_AR9330:
|
||||
+ ah->hw_version.macVersion = AR_SREV_VERSION_9330;
|
||||
+ if (ah->get_mac_revision) {
|
||||
+ ah->hw_version.macRev = ah->get_mac_revision();
|
||||
+ } else {
|
||||
+ val = REG_READ(ah, AR_SREV);
|
||||
+ ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
|
||||
+ }
|
||||
+ return;
|
||||
case AR9300_DEVID_AR9340:
|
||||
ah->hw_version.macVersion = AR_SREV_VERSION_9340;
|
||||
val = REG_READ(ah, AR_SREV);
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -863,6 +863,7 @@ struct ath_hw {
|
||||
u32 ent_mode;
|
||||
|
||||
bool is_clk_25mhz;
|
||||
+ int (*get_mac_revision)(void);
|
||||
};
|
||||
|
||||
struct ath_bus_ops {
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -575,6 +575,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
sc->sc_ah->gpio_val = pdata->gpio_val;
|
||||
sc->sc_ah->led_pin = pdata->led_pin;
|
||||
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
||||
+ ah->get_mac_revision = pdata->get_mac_revision;
|
||||
}
|
||||
|
||||
common = ath9k_hw_common(ah);
|
||||
--- a/include/linux/ath9k_platform.h
|
||||
+++ b/include/linux/ath9k_platform.h
|
||||
@@ -30,6 +30,7 @@ struct ath9k_platform_data {
|
||||
u32 gpio_val;
|
||||
|
||||
bool is_clk_25mhz;
|
||||
+ int (*get_mac_revision)(void);
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
|
@ -1,13 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ahb.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ahb.c
|
||||
@@ -27,6 +27,10 @@ static const struct platform_device_id a
|
||||
.driver_data = AR5416_AR9100_DEVID,
|
||||
},
|
||||
{
|
||||
+ .name = "ar933x_wmac",
|
||||
+ .driver_data = AR9300_DEVID_AR9330,
|
||||
+ },
|
||||
+ {
|
||||
.name = "ar934x_wmac",
|
||||
.driver_data = AR9300_DEVID_AR9340,
|
||||
},
|
File diff suppressed because it is too large
Load diff
|
@ -1,138 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
@@ -19,6 +19,8 @@
|
||||
#include "ar9003_2p2_initvals.h"
|
||||
#include "ar9485_initvals.h"
|
||||
#include "ar9340_initvals.h"
|
||||
+#include "ar9330_1p1_initvals.h"
|
||||
+#include "ar9330_1p2_initvals.h"
|
||||
|
||||
/* General hardware code for the AR9003 hadware family */
|
||||
|
||||
@@ -29,7 +31,113 @@
|
||||
*/
|
||||
static void ar9003_hw_init_mode_regs(struct ath_hw *ah)
|
||||
{
|
||||
- if (AR_SREV_9340(ah)) {
|
||||
+ if (AR_SREV_9330_11(ah)) {
|
||||
+ /* mac */
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
+ ar9331_1p1_mac_core,
|
||||
+ ARRAY_SIZE(ar9331_1p1_mac_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
|
||||
+ ar9331_1p1_mac_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p1_mac_postamble), 5);
|
||||
+
|
||||
+ /* bb */
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
|
||||
+ ar9331_1p1_baseband_core,
|
||||
+ ARRAY_SIZE(ar9331_1p1_baseband_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
|
||||
+ ar9331_1p1_baseband_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p1_baseband_postamble), 5);
|
||||
+
|
||||
+ /* radio */
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
|
||||
+ ar9331_1p1_radio_core,
|
||||
+ ARRAY_SIZE(ar9331_1p1_radio_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0);
|
||||
+
|
||||
+ /* soc */
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
|
||||
+ ar9331_1p1_soc_preamble,
|
||||
+ ARRAY_SIZE(ar9331_1p1_soc_preamble), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
|
||||
+ ar9331_1p1_soc_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p1_soc_postamble), 2);
|
||||
+
|
||||
+ /* rx/tx gain */
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_rx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_common_rx_gain_1p1), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_lowest_ob_db_tx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1),
|
||||
+ 5);
|
||||
+
|
||||
+ /* additional clock settings */
|
||||
+ if (ah->is_clk_25mhz)
|
||||
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
|
||||
+ ar9331_1p1_xtal_25M,
|
||||
+ ARRAY_SIZE(ar9331_1p1_xtal_25M), 2);
|
||||
+ else
|
||||
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
|
||||
+ ar9331_1p1_xtal_40M,
|
||||
+ ARRAY_SIZE(ar9331_1p1_xtal_40M), 2);
|
||||
+ } else if (AR_SREV_9330_12(ah)) {
|
||||
+ /* mac */
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
+ ar9331_1p2_mac_core,
|
||||
+ ARRAY_SIZE(ar9331_1p2_mac_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST],
|
||||
+ ar9331_1p2_mac_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p2_mac_postamble), 5);
|
||||
+
|
||||
+ /* bb */
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE],
|
||||
+ ar9331_1p2_baseband_core,
|
||||
+ ARRAY_SIZE(ar9331_1p2_baseband_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST],
|
||||
+ ar9331_1p2_baseband_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p2_baseband_postamble), 5);
|
||||
+
|
||||
+ /* radio */
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE],
|
||||
+ ar9331_1p2_radio_core,
|
||||
+ ARRAY_SIZE(ar9331_1p2_radio_core), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], NULL, 0, 0);
|
||||
+
|
||||
+ /* soc */
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE],
|
||||
+ ar9331_1p2_soc_preamble,
|
||||
+ ARRAY_SIZE(ar9331_1p2_soc_preamble), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0);
|
||||
+ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST],
|
||||
+ ar9331_1p2_soc_postamble,
|
||||
+ ARRAY_SIZE(ar9331_1p2_soc_postamble), 2);
|
||||
+
|
||||
+ /* rx/tx gain */
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_rx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_common_rx_gain_1p2), 2);
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_lowest_ob_db_tx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2),
|
||||
+ 5);
|
||||
+
|
||||
+ /* additional clock settings */
|
||||
+ if (ah->is_clk_25mhz)
|
||||
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
|
||||
+ ar9331_1p2_xtal_25M,
|
||||
+ ARRAY_SIZE(ar9331_1p2_xtal_25M), 2);
|
||||
+ else
|
||||
+ INIT_INI_ARRAY(&ah->iniModesAdditional,
|
||||
+ ar9331_1p2_xtal_40M,
|
||||
+ ARRAY_SIZE(ar9331_1p2_xtal_40M), 2);
|
||||
+ } else if (AR_SREV_9340(ah)) {
|
||||
/* mac */
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0);
|
||||
INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE],
|
||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -659,6 +659,9 @@ static int ar9003_hw_process_ini(struct
|
||||
REG_WRITE_ARRAY(&ah->iniModesAdditional,
|
||||
modesIndex, regWrites);
|
||||
|
||||
+ if (AR_SREV_9300(ah))
|
||||
+ REG_WRITE_ARRAY(&ah->iniModesAdditional, 1, regWrites);
|
||||
+
|
||||
if (AR_SREV_9340(ah) && !ah->is_clk_25mhz)
|
||||
REG_WRITE_ARRAY(&ah->iniModesAdditional_40M, 1, regWrites);
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
@@ -328,7 +328,17 @@ static void ar9003_tx_gain_table_apply(s
|
||||
switch (ar9003_hw_get_tx_gain_idx(ah)) {
|
||||
case 0:
|
||||
default:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_lowest_ob_db_tx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p2),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_lowest_ob_db_tx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_modes_lowest_ob_db_tx_gain_1p1),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
||||
@@ -345,7 +355,17 @@ static void ar9003_tx_gain_table_apply(s
|
||||
5);
|
||||
break;
|
||||
case 1:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_high_ob_db_tx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p2),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_high_ob_db_tx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_modes_high_ob_db_tx_gain_1p1),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
||||
@@ -362,7 +382,17 @@ static void ar9003_tx_gain_table_apply(s
|
||||
5);
|
||||
break;
|
||||
case 2:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_low_ob_db_tx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p2),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_low_ob_db_tx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_modes_low_ob_db_tx_gain_1p1),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
||||
@@ -379,7 +409,17 @@ static void ar9003_tx_gain_table_apply(s
|
||||
5);
|
||||
break;
|
||||
case 3:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_high_power_tx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p2),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
+ ar9331_modes_high_power_tx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_modes_high_power_tx_gain_1p1),
|
||||
+ 5);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesTxGain,
|
||||
ar9340Modes_lowest_ob_db_tx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Modes_lowest_ob_db_tx_gain_table_1p0),
|
|
@ -1,40 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c
|
||||
@@ -443,7 +443,17 @@ static void ar9003_rx_gain_table_apply(s
|
||||
switch (ar9003_hw_get_rx_gain_idx(ah)) {
|
||||
case 0:
|
||||
default:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_rx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_common_rx_gain_1p2),
|
||||
+ 2);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_rx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_common_rx_gain_1p1),
|
||||
+ 2);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9340Common_rx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Common_rx_gain_table_1p0),
|
||||
@@ -460,7 +470,17 @@ static void ar9003_rx_gain_table_apply(s
|
||||
2);
|
||||
break;
|
||||
case 1:
|
||||
- if (AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9330_12(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_wo_xlna_rx_gain_1p2,
|
||||
+ ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p2),
|
||||
+ 2);
|
||||
+ else if (AR_SREV_9330_11(ah))
|
||||
+ INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
+ ar9331_common_wo_xlna_rx_gain_1p1,
|
||||
+ ARRAY_SIZE(ar9331_common_wo_xlna_rx_gain_1p1),
|
||||
+ 2);
|
||||
+ else if (AR_SREV_9340(ah))
|
||||
INIT_INI_ARRAY(&ah->iniModesRxGain,
|
||||
ar9340Common_wo_xlna_rx_gain_table_1p0,
|
||||
ARRAY_SIZE(ar9340Common_wo_xlna_rx_gain_table_1p0),
|
|
@ -1,51 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -742,6 +742,39 @@ static void ath9k_hw_init_pll(struct ath
|
||||
REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2,
|
||||
AR_CH0_BB_DPLL2_PLL_PWD, 0x0);
|
||||
udelay(1000);
|
||||
+ } else if (AR_SREV_9330(ah)) {
|
||||
+ u32 ddr_dpll2, pll_control2, kd;
|
||||
+
|
||||
+ if (ah->is_clk_25mhz) {
|
||||
+ ddr_dpll2 = 0x18e82f01;
|
||||
+ pll_control2 = 0xe04a3d;
|
||||
+ kd = 0x1d;
|
||||
+ } else {
|
||||
+ ddr_dpll2 = 0x19e82f01;
|
||||
+ pll_control2 = 0x886666;
|
||||
+ kd = 0x3d;
|
||||
+ }
|
||||
+
|
||||
+ /* program DDR PLL ki and kd value */
|
||||
+ REG_WRITE(ah, AR_CH0_DDR_DPLL2, ddr_dpll2);
|
||||
+
|
||||
+ /* program DDR PLL phase_shift */
|
||||
+ REG_RMW_FIELD(ah, AR_CH0_DDR_DPLL3,
|
||||
+ AR_CH0_DPLL3_PHASE_SHIFT, 0x1);
|
||||
+
|
||||
+ REG_WRITE(ah, AR_RTC_PLL_CONTROL, 0x1142c);
|
||||
+ udelay(1000);
|
||||
+
|
||||
+ /* program refdiv, nint, frac to RTC register */
|
||||
+ REG_WRITE(ah, AR_RTC_PLL_CONTROL2, pll_control2);
|
||||
+
|
||||
+ /* program BB PLL kd and ki value */
|
||||
+ REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2, AR_CH0_DPLL2_KD, kd);
|
||||
+ REG_RMW_FIELD(ah, AR_CH0_BB_DPLL2, AR_CH0_DPLL2_KI, 0x06);
|
||||
+
|
||||
+ /* program BB PLL phase_shift */
|
||||
+ REG_RMW_FIELD(ah, AR_CH0_BB_DPLL3,
|
||||
+ AR_CH0_BB_DPLL3_PHASE_SHIFT, 0x1);
|
||||
} else if (AR_SREV_9340(ah)) {
|
||||
u32 regval, pll2_divint, pll2_divfrac, refdiv;
|
||||
|
||||
@@ -783,7 +816,7 @@ static void ath9k_hw_init_pll(struct ath
|
||||
|
||||
REG_WRITE(ah, AR_RTC_PLL_CONTROL, pll);
|
||||
|
||||
- if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
|
||||
udelay(1000);
|
||||
|
||||
/* Switch the core clock for ar9271 to 117Mhz */
|
|
@ -1,14 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -624,7 +624,10 @@ static int __ath9k_hw_init(struct ath_hw
|
||||
else
|
||||
ah->tx_trig_level = (AR_FTRIG_512B >> AR_FTRIG_S);
|
||||
|
||||
- ah->bb_watchdog_timeout_ms = 25;
|
||||
+ if (AR_SREV_9330(ah))
|
||||
+ ah->bb_watchdog_timeout_ms = 85;
|
||||
+ else
|
||||
+ ah->bb_watchdog_timeout_ms = 25;
|
||||
|
||||
common->state = ATH_HW_INITIALIZED;
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2040,7 +2040,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
|
||||
|
||||
if (AR_SREV_9300_20_OR_LATER(ah)) {
|
||||
pCap->hw_caps |= ATH9K_HW_CAP_EDMA | ATH9K_HW_CAP_FASTCLOCK;
|
||||
- if (!AR_SREV_9485(ah))
|
||||
+ if (!AR_SREV_9330(ah) && !AR_SREV_9485(ah))
|
||||
pCap->hw_caps |= ATH9K_HW_CAP_LDPC;
|
||||
|
||||
pCap->rx_hp_qdepth = ATH9K_HW_RX_HP_QDEPTH;
|
|
@ -1,20 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -168,7 +168,7 @@ static void ar9003_hw_spur_mitigate_mrc_
|
||||
* is out-of-band and can be ignored.
|
||||
*/
|
||||
|
||||
- if (AR_SREV_9485(ah) || AR_SREV_9340(ah)) {
|
||||
+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah)) {
|
||||
spur_fbin_ptr = ar9003_get_spur_chan_ptr(ah,
|
||||
IS_CHAN_2GHZ(chan));
|
||||
if (spur_fbin_ptr[0] == 0) /* No spur */
|
||||
@@ -193,7 +193,7 @@ static void ar9003_hw_spur_mitigate_mrc_
|
||||
|
||||
for (i = 0; i < max_spur_cnts; i++) {
|
||||
negative = 0;
|
||||
- if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9485(ah) || AR_SREV_9340(ah) || AR_SREV_9330(ah))
|
||||
cur_bb_spur = FBIN2FREQ(spur_fbin_ptr[i],
|
||||
IS_CHAN_2GHZ(chan)) - synth_freq;
|
||||
else
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -104,7 +104,7 @@ static int ar9003_hw_set_channel(struct
|
||||
u32 chan_frac;
|
||||
|
||||
channelSel = (freq * 2) / 75;
|
||||
- chan_frac = ((freq % 75) * 0x20000) / 75;
|
||||
+ chan_frac = (((freq * 2) % 75) * 0x20000) / 75;
|
||||
channelSel = (channelSel << 17) | chan_frac;
|
||||
} else {
|
||||
channelSel = CHANSEL_5G(freq);
|
|
@ -1,23 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -75,7 +75,19 @@ static int ar9003_hw_set_channel(struct
|
||||
freq = centers.synth_center;
|
||||
|
||||
if (freq < 4800) { /* 2 GHz, fractional mode */
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330(ah)) {
|
||||
+ u32 chan_frac;
|
||||
+ u32 div;
|
||||
+
|
||||
+ if (ah->is_clk_25mhz)
|
||||
+ div = 75;
|
||||
+ else
|
||||
+ div = 120;
|
||||
+
|
||||
+ channelSel = (freq * 4) / div;
|
||||
+ chan_frac = (((freq * 4) % div) * 0x20000) / div;
|
||||
+ channelSel = (channelSel << 17) | chan_frac;
|
||||
+ } else if (AR_SREV_9485(ah)) {
|
||||
u32 chan_frac;
|
||||
|
||||
/*
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1602,7 +1602,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st
|
||||
REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
|
||||
}
|
||||
#ifdef __BIG_ENDIAN
|
||||
- else if (AR_SREV_9340(ah))
|
||||
+ else if (AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
||||
REG_RMW(ah, AR_CFG, AR_CFG_SWRB | AR_CFG_SWTB, 0);
|
||||
else
|
||||
REG_WRITE(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD);
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3795,7 +3795,7 @@ static void ath9k_hw_ar9300_set_board_va
|
||||
ar9003_hw_ant_ctrl_apply(ah, IS_CHAN_2GHZ(chan));
|
||||
ar9003_hw_drive_strength_apply(ah);
|
||||
ar9003_hw_atten_apply(ah, chan);
|
||||
- if (!AR_SREV_9340(ah))
|
||||
+ if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
|
||||
ar9003_hw_internal_regulator_apply(ah);
|
||||
if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
|
||||
ar9003_hw_apply_tuning_caps(ah);
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3797,7 +3797,7 @@ static void ath9k_hw_ar9300_set_board_va
|
||||
ar9003_hw_atten_apply(ah, chan);
|
||||
if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah))
|
||||
ar9003_hw_internal_regulator_apply(ah);
|
||||
- if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
||||
ar9003_hw_apply_tuning_caps(ah);
|
||||
}
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3324,6 +3324,8 @@ static int ar9300_eeprom_restore_interna
|
||||
read = ar9300_read_eeprom;
|
||||
if (AR_SREV_9485(ah))
|
||||
cptr = AR9300_BASE_ADDR_4K;
|
||||
+ else if (AR_SREV_9330(ah))
|
||||
+ cptr = AR9300_BASE_ADDR_512;
|
||||
else
|
||||
cptr = AR9300_BASE_ADDR;
|
||||
ath_dbg(common, ATH_DBG_EEPROM,
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3444,7 +3444,7 @@ static void ar9003_hw_xpa_bias_level_app
|
||||
{
|
||||
int bias = ar9003_hw_xpa_bias_level_get(ah, is2ghz);
|
||||
|
||||
- if (AR_SREV_9485(ah) || AR_SREV_9340(ah))
|
||||
+ if (AR_SREV_9485(ah) || AR_SREV_9330(ah) || AR_SREV_9340(ah))
|
||||
REG_RMW_FIELD(ah, AR_CH0_TOP2, AR_CH0_TOP2_XPABIASLVL, bias);
|
||||
else {
|
||||
REG_RMW_FIELD(ah, AR_CH0_TOP, AR_CH0_TOP_XPABIASLVL, bias);
|
|
@ -1,25 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -1089,7 +1089,10 @@ static void ar9003_hw_set_nf_limits(stru
|
||||
{
|
||||
ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
|
||||
ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
|
||||
- ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
|
||||
+ if (AR_SREV_9330(ah))
|
||||
+ ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9330_2GHZ;
|
||||
+ else
|
||||
+ ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
|
||||
ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
|
||||
ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
|
||||
ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_9300_5GHZ;
|
||||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
||||
@@ -332,6 +332,8 @@
|
||||
#define AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ -95
|
||||
#define AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ -100
|
||||
|
||||
+#define AR_PHY_CCA_NOM_VAL_9330_2GHZ -118
|
||||
+
|
||||
/*
|
||||
* AGC Field Definitions
|
||||
*/
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -2082,7 +2082,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw
|
||||
}
|
||||
|
||||
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
||||
ant_div_ctl1 = ah->eep_ops->get_eeprom(ah, EEP_ANT_DIV_CTL1);
|
||||
/*
|
||||
* enable the diversity-combining algorithm only when
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -245,7 +245,7 @@ static void setup_ht_cap(struct ath_soft
|
||||
ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
|
||||
ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8;
|
||||
|
||||
- if (AR_SREV_9485(ah))
|
||||
+ if (AR_SREV_9330(ah) || AR_SREV_9485(ah))
|
||||
max_streams = 1;
|
||||
else if (AR_SREV_9300_20_OR_LATER(ah))
|
||||
max_streams = 3;
|
|
@ -1,10 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -39,6 +39,7 @@ static inline bool ath_ant_div_comb_alt_
|
||||
result = true;
|
||||
break;
|
||||
case 1:
|
||||
+ case 2:
|
||||
if ((((curr_main_set == ATH_ANT_DIV_COMB_LNA2) &&
|
||||
(curr_alt_set == ATH_ANT_DIV_COMB_LNA1) &&
|
||||
(alt_rssi_avg >= (main_rssi_avg - 5))) ||
|
|
@ -1,19 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -1214,8 +1214,14 @@ static void ar9003_hw_antdiv_comb_conf_g
|
||||
AR_PHY_9485_ANT_DIV_ALT_LNACONF_S;
|
||||
antconf->fast_div_bias = (regval & AR_PHY_9485_ANT_FAST_DIV_BIAS) >>
|
||||
AR_PHY_9485_ANT_FAST_DIV_BIAS_S;
|
||||
- antconf->lna1_lna2_delta = -9;
|
||||
- antconf->div_group = 2;
|
||||
+
|
||||
+ if (AR_SREV_9485(ah)) {
|
||||
+ antconf->lna1_lna2_delta = -9;
|
||||
+ antconf->div_group = 2;
|
||||
+ } else {
|
||||
+ antconf->lna1_lna2_delta = -3;
|
||||
+ antconf->div_group = 0;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void ar9003_hw_antdiv_comb_conf_set(struct ath_hw *ah,
|
|
@ -1,198 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -1078,39 +1078,39 @@ static void ath_lnaconf_alt_good_scan(st
|
||||
antcomb->rssi_lna1 = main_rssi_avg;
|
||||
|
||||
switch ((ant_conf.main_lna_conf << 4) | ant_conf.alt_lna_conf) {
|
||||
- case (0x10): /* LNA2 A-B */
|
||||
+ case 0x10: /* LNA2 A-B */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
|
||||
break;
|
||||
- case (0x20): /* LNA1 A-B */
|
||||
+ case 0x20: /* LNA1 A-B */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA2;
|
||||
break;
|
||||
- case (0x21): /* LNA1 LNA2 */
|
||||
+ case 0x21: /* LNA1 LNA2 */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA2;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
antcomb->second_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
break;
|
||||
- case (0x12): /* LNA2 LNA1 */
|
||||
+ case 0x12: /* LNA2 LNA1 */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
antcomb->second_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
break;
|
||||
- case (0x13): /* LNA2 A+B */
|
||||
+ case 0x13: /* LNA2 A+B */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
antcomb->second_quick_scan_conf = ATH_ANT_DIV_COMB_LNA1;
|
||||
break;
|
||||
- case (0x23): /* LNA1 A+B */
|
||||
+ case 0x23: /* LNA1 A+B */
|
||||
antcomb->main_conf = ATH_ANT_DIV_COMB_LNA1_PLUS_LNA2;
|
||||
antcomb->first_quick_scan_conf =
|
||||
ATH_ANT_DIV_COMB_LNA1_MINUS_LNA2;
|
||||
@@ -1327,40 +1327,40 @@ static void ath_ant_div_conf_fast_divbia
|
||||
/* Adjust the fast_div_bias based on main and alt lna conf */
|
||||
switch ((ant_conf->main_lna_conf << 4) |
|
||||
ant_conf->alt_lna_conf) {
|
||||
- case (0x01): /* A-B LNA2 */
|
||||
+ case 0x01: /* A-B LNA2 */
|
||||
ant_conf->fast_div_bias = 0x3b;
|
||||
break;
|
||||
- case (0x02): /* A-B LNA1 */
|
||||
+ case 0x02: /* A-B LNA1 */
|
||||
ant_conf->fast_div_bias = 0x3d;
|
||||
break;
|
||||
- case (0x03): /* A-B A+B */
|
||||
+ case 0x03: /* A-B A+B */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
break;
|
||||
- case (0x10): /* LNA2 A-B */
|
||||
+ case 0x10: /* LNA2 A-B */
|
||||
ant_conf->fast_div_bias = 0x7;
|
||||
break;
|
||||
- case (0x12): /* LNA2 LNA1 */
|
||||
+ case 0x12: /* LNA2 LNA1 */
|
||||
ant_conf->fast_div_bias = 0x2;
|
||||
break;
|
||||
- case (0x13): /* LNA2 A+B */
|
||||
+ case 0x13: /* LNA2 A+B */
|
||||
ant_conf->fast_div_bias = 0x7;
|
||||
break;
|
||||
- case (0x20): /* LNA1 A-B */
|
||||
+ case 0x20: /* LNA1 A-B */
|
||||
ant_conf->fast_div_bias = 0x6;
|
||||
break;
|
||||
- case (0x21): /* LNA1 LNA2 */
|
||||
+ case 0x21: /* LNA1 LNA2 */
|
||||
ant_conf->fast_div_bias = 0x0;
|
||||
break;
|
||||
- case (0x23): /* LNA1 A+B */
|
||||
+ case 0x23: /* LNA1 A+B */
|
||||
ant_conf->fast_div_bias = 0x6;
|
||||
break;
|
||||
- case (0x30): /* A+B A-B */
|
||||
+ case 0x30: /* A+B A-B */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
break;
|
||||
- case (0x31): /* A+B LNA2 */
|
||||
+ case 0x31: /* A+B LNA2 */
|
||||
ant_conf->fast_div_bias = 0x3b;
|
||||
break;
|
||||
- case (0x32): /* A+B LNA1 */
|
||||
+ case 0x32: /* A+B LNA1 */
|
||||
ant_conf->fast_div_bias = 0x3d;
|
||||
break;
|
||||
default:
|
||||
@@ -1370,22 +1370,22 @@ static void ath_ant_div_conf_fast_divbia
|
||||
/* Adjust the fast_div_bias based on main and alt_lna_conf */
|
||||
switch ((ant_conf->main_lna_conf << 4) |
|
||||
ant_conf->alt_lna_conf) {
|
||||
- case (0x01): /* A-B LNA2 */
|
||||
+ case 0x01: /* A-B LNA2 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x02): /* A-B LNA1 */
|
||||
+ case 0x02: /* A-B LNA1 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x03): /* A-B A+B */
|
||||
+ case 0x03: /* A-B A+B */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x10): /* LNA2 A-B */
|
||||
+ case 0x10: /* LNA2 A-B */
|
||||
if (!(antcomb->scan) &&
|
||||
(alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
@@ -1394,12 +1394,12 @@ static void ath_ant_div_conf_fast_divbia
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x12): /* LNA2 LNA1 */
|
||||
+ case 0x12: /* LNA2 LNA1 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x13): /* LNA2 A+B */
|
||||
+ case 0x13: /* LNA2 A+B */
|
||||
if (!(antcomb->scan) &&
|
||||
(alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
@@ -1408,7 +1408,7 @@ static void ath_ant_div_conf_fast_divbia
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x20): /* LNA1 A-B */
|
||||
+ case 0x20: /* LNA1 A-B */
|
||||
if (!(antcomb->scan) &&
|
||||
(alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
@@ -1417,12 +1417,12 @@ static void ath_ant_div_conf_fast_divbia
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x21): /* LNA1 LNA2 */
|
||||
+ case 0x21: /* LNA1 LNA2 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x23): /* LNA1 A+B */
|
||||
+ case 0x23: /* LNA1 A+B */
|
||||
if (!(antcomb->scan) &&
|
||||
(alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
@@ -1431,17 +1431,17 @@ static void ath_ant_div_conf_fast_divbia
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x30): /* A+B A-B */
|
||||
+ case 0x30: /* A+B A-B */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x31): /* A+B LNA2 */
|
||||
+ case 0x31: /* A+B LNA2 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
break;
|
||||
- case (0x32): /* A+B LNA1 */
|
||||
+ case 0x32: /* A+B LNA1 */
|
||||
ant_conf->fast_div_bias = 0x1;
|
||||
ant_conf->main_gaintb = 0;
|
||||
ant_conf->alt_gaintb = 0;
|
||||
@@ -1449,9 +1449,7 @@ static void ath_ant_div_conf_fast_divbia
|
||||
default:
|
||||
break;
|
||||
}
|
||||
-
|
||||
}
|
||||
-
|
||||
}
|
||||
|
||||
/* Antenna diversity and combining */
|
|
@ -1,92 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/recv.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/recv.c
|
||||
@@ -1366,6 +1366,89 @@ static void ath_ant_div_conf_fast_divbia
|
||||
default:
|
||||
break;
|
||||
}
|
||||
+ } else if (ant_conf->div_group == 1) {
|
||||
+ /* Adjust the fast_div_bias based on main and alt_lna_conf */
|
||||
+ switch ((ant_conf->main_lna_conf << 4) |
|
||||
+ ant_conf->alt_lna_conf) {
|
||||
+ case 0x01: /* A-B LNA2 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x02: /* A-B LNA1 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x03: /* A-B A+B */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x10: /* LNA2 A-B */
|
||||
+ if (!(antcomb->scan) &&
|
||||
+ (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
+ ant_conf->fast_div_bias = 0x3f;
|
||||
+ else
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x12: /* LNA2 LNA1 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x13: /* LNA2 A+B */
|
||||
+ if (!(antcomb->scan) &&
|
||||
+ (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
+ ant_conf->fast_div_bias = 0x3f;
|
||||
+ else
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x20: /* LNA1 A-B */
|
||||
+ if (!(antcomb->scan) &&
|
||||
+ (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
+ ant_conf->fast_div_bias = 0x3f;
|
||||
+ else
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x21: /* LNA1 LNA2 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x23: /* LNA1 A+B */
|
||||
+ if (!(antcomb->scan) &&
|
||||
+ (alt_ratio > ATH_ANT_DIV_COMB_ALT_ANT_RATIO))
|
||||
+ ant_conf->fast_div_bias = 0x3f;
|
||||
+ else
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x30: /* A+B A-B */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x31: /* A+B LNA2 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ case 0x32: /* A+B LNA1 */
|
||||
+ ant_conf->fast_div_bias = 0x1;
|
||||
+ ant_conf->main_gaintb = 0;
|
||||
+ ant_conf->alt_gaintb = 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
} else if (ant_conf->div_group == 2) {
|
||||
/* Adjust the fast_div_bias based on main and alt_lna_conf */
|
||||
switch ((ant_conf->main_lna_conf << 4) |
|
|
@ -1,14 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c
|
||||
@@ -1215,7 +1215,10 @@ static void ar9003_hw_antdiv_comb_conf_g
|
||||
antconf->fast_div_bias = (regval & AR_PHY_9485_ANT_FAST_DIV_BIAS) >>
|
||||
AR_PHY_9485_ANT_FAST_DIV_BIAS_S;
|
||||
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330_11(ah)) {
|
||||
+ antconf->lna1_lna2_delta = -9;
|
||||
+ antconf->div_group = 1;
|
||||
+ } else if (AR_SREV_9485(ah)) {
|
||||
antconf->lna1_lna2_delta = -9;
|
||||
antconf->div_group = 2;
|
||||
} else {
|
|
@ -1,16 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
|
||||
@@ -625,11 +625,11 @@
|
||||
#define AR_PHY_65NM_CH2_RXTX1 0x16900
|
||||
#define AR_PHY_65NM_CH2_RXTX2 0x16904
|
||||
|
||||
-#define AR_CH0_TOP2 (AR_SREV_9485(ah) ? 0x00016284 : 0x0001628c)
|
||||
+#define AR_CH0_TOP2 (AR_SREV_9300(ah) ? 0x1628c : 0x16284)
|
||||
#define AR_CH0_TOP2_XPABIASLVL 0xf000
|
||||
#define AR_CH0_TOP2_XPABIASLVL_S 12
|
||||
|
||||
-#define AR_CH0_XTAL (AR_SREV_9485(ah) ? 0x16290 : 0x16294)
|
||||
+#define AR_CH0_XTAL (AR_SREV_9300(ah) ? 0x16294 : 0x16290)
|
||||
#define AR_CH0_XTAL_CAPINDAC 0x7f000000
|
||||
#define AR_CH0_XTAL_CAPINDAC_S 24
|
||||
#define AR_CH0_XTAL_CAPOUTDAC 0x00fe0000
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3525,7 +3525,7 @@ static void ar9003_hw_ant_ctrl_apply(str
|
||||
}
|
||||
}
|
||||
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
||||
value = ath9k_hw_ar9300_get_eeprom(ah, EEP_ANT_DIV_CTL1);
|
||||
/*
|
||||
* main_lnaconf, alt_lnaconf, main_tb, alt_tb
|
|
@ -1,48 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c
|
||||
@@ -3712,7 +3712,7 @@ static void ar9003_hw_internal_regulator
|
||||
ath9k_hw_ar9300_get_eeprom(ah, EEP_INTERNAL_REGULATOR);
|
||||
|
||||
if (internal_regulator) {
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
||||
int reg_pmu_set;
|
||||
|
||||
reg_pmu_set = REG_READ(ah, AR_PHY_PMU2) & ~AR_PHY_PMU2_PGM;
|
||||
@@ -3720,9 +3720,24 @@ static void ar9003_hw_internal_regulator
|
||||
if (!is_pmu_set(ah, AR_PHY_PMU2, reg_pmu_set))
|
||||
return;
|
||||
|
||||
- reg_pmu_set = (5 << 1) | (7 << 4) | (1 << 8) |
|
||||
- (2 << 14) | (6 << 17) | (1 << 20) |
|
||||
- (3 << 24) | (1 << 28);
|
||||
+ if (AR_SREV_9330(ah)) {
|
||||
+ if (ah->is_clk_25mhz) {
|
||||
+ reg_pmu_set = (3 << 1) | (8 << 4) |
|
||||
+ (3 << 8) | (1 << 14) |
|
||||
+ (6 << 17) | (1 << 20) |
|
||||
+ (3 << 24);
|
||||
+ } else {
|
||||
+ reg_pmu_set = (4 << 1) | (7 << 4) |
|
||||
+ (3 << 8) | (1 << 14) |
|
||||
+ (6 << 17) | (1 << 20) |
|
||||
+ (3 << 24);
|
||||
+ }
|
||||
+ } else {
|
||||
+ reg_pmu_set = (5 << 1) | (7 << 4) |
|
||||
+ (1 << 8) | (2 << 14) |
|
||||
+ (6 << 17) | (1 << 20) |
|
||||
+ (3 << 24) | (1 << 28);
|
||||
+ }
|
||||
|
||||
REG_WRITE(ah, AR_PHY_PMU1, reg_pmu_set);
|
||||
if (!is_pmu_set(ah, AR_PHY_PMU1, reg_pmu_set))
|
||||
@@ -3753,7 +3768,7 @@ static void ar9003_hw_internal_regulator
|
||||
AR_RTC_REG_CONTROL1_SWREG_PROGRAM);
|
||||
}
|
||||
} else {
|
||||
- if (AR_SREV_9485(ah)) {
|
||||
+ if (AR_SREV_9330(ah) || AR_SREV_9485(ah)) {
|
||||
REG_RMW_FIELD(ah, AR_PHY_PMU2, AR_PHY_PMU2_PGM, 0);
|
||||
while (REG_READ_FIELD(ah, AR_PHY_PMU2,
|
||||
AR_PHY_PMU2_PGM))
|
|
@ -1,74 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -1170,6 +1170,41 @@ static bool ath9k_hw_set_reset(struct at
|
||||
rst_flags |= AR_RTC_RC_MAC_COLD;
|
||||
}
|
||||
|
||||
+ if (AR_SREV_9330(ah)) {
|
||||
+ int npend = 0;
|
||||
+ int i;
|
||||
+
|
||||
+ /* AR9330 WAR:
|
||||
+ * call external reset function to reset WMAC if:
|
||||
+ * - doing a cold reset
|
||||
+ * - we have pending frames in the TX queues
|
||||
+ */
|
||||
+
|
||||
+ for (i = 0; i < AR_NUM_QCU; i++) {
|
||||
+ npend = ath9k_hw_numtxpending(ah, i);
|
||||
+ if (npend)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (ah->external_reset &&
|
||||
+ (npend || type == ATH9K_RESET_COLD)) {
|
||||
+ int reset_err = 0;
|
||||
+
|
||||
+ ath_dbg(ath9k_hw_common(ah), ATH_DBG_RESET,
|
||||
+ "reset MAC via external reset\n");
|
||||
+
|
||||
+ reset_err = ah->external_reset();
|
||||
+ if (reset_err) {
|
||||
+ ath_err(ath9k_hw_common(ah),
|
||||
+ "External reset failed, err=%d\n",
|
||||
+ reset_err);
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ REG_WRITE(ah, AR_RTC_RESET, 1);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
REG_WRITE(ah, AR_RTC_RC, rst_flags);
|
||||
|
||||
REGWRITE_BUFFER_FLUSH(ah);
|
||||
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
||||
@@ -864,6 +864,7 @@ struct ath_hw {
|
||||
|
||||
bool is_clk_25mhz;
|
||||
int (*get_mac_revision)(void);
|
||||
+ int (*external_reset)(void);
|
||||
};
|
||||
|
||||
struct ath_bus_ops {
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -576,6 +576,7 @@ static int ath9k_init_softc(u16 devid, s
|
||||
sc->sc_ah->led_pin = pdata->led_pin;
|
||||
ah->is_clk_25mhz = pdata->is_clk_25mhz;
|
||||
ah->get_mac_revision = pdata->get_mac_revision;
|
||||
+ ah->external_reset = pdata->external_reset;
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
bool is_clk_25mhz;
|
||||
int (*get_mac_revision)(void);
|
||||
+ int (*external_reset)(void);
|
||||
};
|
||||
|
||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
|
@ -1,10 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/hw.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/hw.c
|
||||
@@ -653,6 +653,7 @@ int ath9k_hw_init(struct ath_hw *ah)
|
||||
case AR2427_DEVID_PCIE:
|
||||
case AR9300_DEVID_PCIE:
|
||||
case AR9300_DEVID_AR9485_PCIE:
|
||||
+ case AR9300_DEVID_AR9330:
|
||||
case AR9300_DEVID_AR9340:
|
||||
break;
|
||||
default:
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/mwl8k.c
|
||||
+++ b/drivers/net/wireless/mwl8k.c
|
||||
@@ -5192,6 +5192,7 @@ MODULE_FIRMWARE("mwl8k/fmimage_8366.fw")
|
||||
@@ -5194,6 +5194,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) = {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/b43/b43.h
|
||||
+++ b/drivers/net/wireless/b43/b43.h
|
||||
@@ -720,6 +720,7 @@ struct b43_wldev {
|
||||
@@ -740,6 +740,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 */
|
||||
|
@ -22,7 +22,7 @@
|
|||
static int modparam_bad_frames_preempt;
|
||||
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
|
||||
MODULE_PARM_DESC(bad_frames_preempt,
|
||||
@@ -2560,10 +2565,10 @@ static int b43_gpio_init(struct b43_wlde
|
||||
@@ -2575,10 +2580,10 @@ static int b43_gpio_init(struct b43_wlde
|
||||
& ~B43_MACCTL_GPOUTSMSK);
|
||||
|
||||
b43_write16(dev, B43_MMIO_GPIO_MASK, b43_read16(dev, B43_MMIO_GPIO_MASK)
|
||||
|
@ -32,10 +32,10 @@
|
|||
mask = 0x0000001F;
|
||||
- set = 0x0000000F;
|
||||
+ set = modparam_gpiomask;
|
||||
if (dev->sdev->bus->chip_id == 0x4301) {
|
||||
if (dev->dev->chip_id == 0x4301) {
|
||||
mask |= 0x0060;
|
||||
set |= 0x0060;
|
||||
@@ -5084,10 +5089,10 @@ static void b43_print_driverinfo(void)
|
||||
@@ -5137,10 +5142,10 @@ static void b43_print_driverinfo(void)
|
||||
feat_sdio = "S";
|
||||
#endif
|
||||
printk(KERN_INFO "Broadcom 43xx driver loaded "
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/b43/Makefile
|
||||
+++ b/drivers/net/wireless/b43/Makefile
|
||||
@@ -14,7 +14,7 @@ b43-y += xmit.o
|
||||
@@ -17,7 +17,7 @@ b43-y += xmit.o
|
||||
b43-y += lo.o
|
||||
b43-y += wa.o
|
||||
b43-y += dma.o
|
||||
|
@ -11,7 +11,7 @@
|
|||
b43-$(CONFIG_B43_PCMCIA) += pcmcia.o
|
||||
--- a/drivers/net/wireless/b43/main.c
|
||||
+++ b/drivers/net/wireless/b43/main.c
|
||||
@@ -1819,9 +1819,11 @@ static void b43_do_interrupt_thread(stru
|
||||
@@ -1834,9 +1834,11 @@ static void b43_do_interrupt_thread(stru
|
||||
dma_reason[4], dma_reason[5]);
|
||||
b43err(dev->wl, "This device does not support DMA "
|
||||
"on your system. It will now be switched to PIO.\n");
|
||||
|
|
Loading…
Reference in a new issue