Update mac80211 and make b43 driver build and load on targets other than brcm47xx (#4266)
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 13431master
parent
f6bdc6a9bd
commit
dff2c6a6d0
@ -1,157 +0,0 @@ |
||||
diff -urN compat-wireless-2008-08-06/config.mk compat-wireless-2008-08-06.new/config.mk
|
||||
--- compat-wireless-2008-08-06/config.mk 2008-07-18 06:11:03.000000000 +0200
|
||||
+++ compat-wireless-2008-08-06.new/config.mk 2008-11-15 00:26:38.000000000 +0100
|
||||
@@ -72,70 +72,34 @@
|
||||
CONFIG_ATH5K=m
|
||||
CONFIG_ATH5K_DEBUG=n
|
||||
|
||||
-# Required for older kernels which still use this flag.
|
||||
-CONFIG_IWLWIFI=m
|
||||
-
|
||||
-CONFIG_IWLCORE=m
|
||||
-CONFIG_IWL3945=m
|
||||
-CONFIG_IWL4965=m
|
||||
-CONFIG_IWL4965_HT=y
|
||||
CONFIG_B43=m
|
||||
+CONFIG_B43_NPHY=y
|
||||
# B43 uses PCMCIA only for Compact Flash. The Cardbus cards uses PCI
|
||||
# Example, bcm4318:
|
||||
# http://www.multicap.biz/wireless-lan/indoor-wlan-hardware/sdc-cf10g-80211g-compact-flash-module
|
||||
-CONFIG_B43_PCMCIA=y
|
||||
+# CONFIG_B43_PCMCIA=y
|
||||
CONFIG_B43_DMA=y
|
||||
-CONFIG_B43_PIO=y
|
||||
+# CONFIG_B43_PIO=y
|
||||
# B43_PIO selects SSB_BLOCKIO
|
||||
-CONFIG_SSB_BLOCKIO=y
|
||||
-CONFIG_B43_DMA_AND_PIO_MODE=y
|
||||
-CONFIG_B43_PCI_AUTOSELECT=y
|
||||
-CONFIG_B43_PCICORE_AUTOSELECT=y
|
||||
-#CONFIG_B43_RFKILL=n
|
||||
+# CONFIG_SSB_BLOCKIO=y
|
||||
+# CONFIG_B43_DMA_AND_PIO_MODE=y
|
||||
+# CONFIG_B43_PCI_AUTOSELECT=y
|
||||
+# CONFIG_B43_PCICORE_AUTOSELECT=y
|
||||
+CONFIG_B43_RFKILL=y
|
||||
CONFIG_B43_LEDS=y
|
||||
# CONFIG_B43_DEBUG is not set
|
||||
|
||||
CONFIG_B43LEGACY=m
|
||||
-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
|
||||
-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
|
||||
+CONFIG_B43LEGACY_RFKILL=y
|
||||
+CONFIG_B43LEGACY_LEDS=y
|
||||
+# CONFIG_B43LEGACY_PCI_AUTOSELECT=y
|
||||
+# CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
|
||||
CONFIG_B43LEGACY_DMA=y
|
||||
-CONFIG_B43LEGACY_PIO=y
|
||||
-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||
-
|
||||
-# The Intel ipws
|
||||
-CONFIG_IPW2100=m
|
||||
-CONFIG_IPW2100_MONITOR=y
|
||||
-CONFIG_IPW2200=m
|
||||
-CONFIG_IPW2200_MONITOR=y
|
||||
-CONFIG_IPW2200_RADIOTAP=y
|
||||
-CONFIG_IPW2200_PROMISCUOUS=y
|
||||
-# The above enables use a second interface prefixed 'rtap'.
|
||||
-# Example usage:
|
||||
-#
|
||||
-# % modprobe ipw2200 rtap_iface=1
|
||||
-# % ifconfig rtap0 up
|
||||
-# % tethereal -i rtap0
|
||||
-#
|
||||
-# If you do not specify 'rtap_iface=1' as a module parameter then
|
||||
-# the rtap interface will not be created and you will need to turn
|
||||
-# it on via sysfs:
|
||||
-#
|
||||
-# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
|
||||
-CONFIG_IPW2200_QOS=y
|
||||
-
|
||||
-NEED_IEEE80211=y
|
||||
+# CONFIG_B43LEGACY_PIO=y
|
||||
+# CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||
|
||||
CONFIG_P54_PCI=m
|
||||
|
||||
-CONFIG_SSB_PCIHOST_POSSIBLE=y
|
||||
-CONFIG_SSB_PCIHOST=y
|
||||
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
|
||||
-CONFIG_SSB_DRIVER_PCICORE=y
|
||||
-CONFIG_SSB_B43_PCI_BRIDGE=y
|
||||
-
|
||||
-CONFIG_RTL8180=m
|
||||
-CONFIG_ADM8211=m
|
||||
-
|
||||
CONFIG_RT2X00_LIB_PCI=m
|
||||
CONFIG_RT2400PCI=m
|
||||
CONFIG_RT2500PCI=m
|
||||
@@ -159,31 +123,7 @@
|
||||
ifneq ($(CONFIG_USB),)
|
||||
CONFIG_ZD1211RW=m
|
||||
|
||||
-# support for USB Wireless devices using Atmel at76c503,
|
||||
-# at76c505 or at76c505a chips.
|
||||
-CONFIG_USB_ATMEL=m
|
||||
-
|
||||
-# Stuff here things which depend on kernel versions for USB
|
||||
-ifeq ($(shell test -e $(KLIB_BUILD)/Makefile && echo yes),yes)
|
||||
-KERNEL_SUBLEVEL = $(shell $(MAKE) -C $(KLIB_BUILD) kernelversion | sed -n 's/^2\.6\.\([0-9]\+\).*/\1/p')
|
||||
-ifeq ($(shell test $(KERNEL_SUBLEVEL) -gt 21 && echo yes),yes)
|
||||
-
|
||||
-# Sorry, rndis_wlan uses cancel_work_sync which is new and can't be done in compat...
|
||||
-
|
||||
-# Wireless RNDIS USB support (RTL8185 802.11g) A-Link WL54PC
|
||||
-# All of these devices are based on Broadcom 4320 chip which
|
||||
-# 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
|
||||
-CONFIG_USB_NET_RNDIS_HOST=m
|
||||
-CONFIG_USB_NET_RNDIS_WLAN=m
|
||||
-CONFIG_USB_NET_CDCETHER=m
|
||||
-
|
||||
-endif
|
||||
-endif
|
||||
-
|
||||
CONFIG_P54_USB=m
|
||||
-CONFIG_RTL8187=m
|
||||
|
||||
# RT2500USB does not require firmware
|
||||
CONFIG_RT2500USB=m
|
||||
@@ -212,36 +152,6 @@
|
||||
# p54
|
||||
CONFIG_P54_COMMON=m
|
||||
|
||||
-# Sonics Silicon Backplane
|
||||
-CONFIG_SSB_POSSIBLE=y
|
||||
-CONFIG_SSB=m
|
||||
-CONFIG_SSB_SPROM=y
|
||||
-
|
||||
-ifneq ($(CONFIG_PCMCIA),)
|
||||
-CONFIG_SSB_PCMCIAHOST=y
|
||||
-endif
|
||||
-
|
||||
-# These two are for mips
|
||||
-CONFIG_SSB_DRIVER_MIPS=n
|
||||
-CONFIG_SSB_PCICORE_HOSTMODE=n
|
||||
-# CONFIG_SSB_DEBUG is not set
|
||||
-# CONFIG_SSB_DRIVER_EXTIF=y
|
||||
-
|
||||
-ifneq ($(CONFIG_USB),)
|
||||
-CONFIG_LIBERTAS_USB=m
|
||||
-NEED_LIBERTAS=y
|
||||
-endif
|
||||
-ifneq ($(CONFIG_PCMCIA),)
|
||||
-CONFIG_LIBERTAS_CS=m
|
||||
-NEED_LIBERTAS=y
|
||||
-endif
|
||||
-ifeq ($(NEED_LIBERTAS),y)
|
||||
-CONFIG_LIBERTAS=m
|
||||
-# Libertas uses the old stack but not fully, it will soon
|
||||
-# be cleaned.
|
||||
-NEED_IEEE80211=y
|
||||
-endif
|
||||
-
|
||||
ifeq ($(NEED_IEEE80211),y)
|
||||
# Old ieee80211 "stack"
|
||||
# Note: old softmac is scheduled for removal so we
|
@ -1,25 +0,0 @@ |
||||
Subject: mac80211: allow AP and VLAN modes
|
||||
|
||||
This patch allows switching interfaces into AP/VLAN modes using
|
||||
cfg80211 (nl80211). Don't allow doing it with wext because then
|
||||
people will just attempt to do it manually (without hostapd) and
|
||||
complain that it doesn't work.
|
||||
|
||||
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
|
||||
---
|
||||
net/mac80211/cfg.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- everything.orig/net/mac80211/cfg.c 2008-08-06 21:38:13.000000000 +0200
|
||||
+++ everything/net/mac80211/cfg.c 2008-08-06 21:38:24.000000000 +0200
|
||||
@@ -33,6 +33,10 @@ nl80211_type_to_mac80211_type(enum nl802
|
||||
case NL80211_IFTYPE_MESH_POINT:
|
||||
return IEEE80211_IF_TYPE_MESH_POINT;
|
||||
#endif
|
||||
+ case NL80211_IFTYPE_AP:
|
||||
+ return IEEE80211_IF_TYPE_AP;
|
||||
+ case NL80211_IFTYPE_AP_VLAN:
|
||||
+ return IEEE80211_IF_TYPE_VLAN;
|
||||
case NL80211_IFTYPE_WDS:
|
||||
return IEEE80211_IF_TYPE_WDS;
|
||||
default:
|
@ -0,0 +1,10 @@ |
||||
--- a/Makefile 2008-07-18 06:11:03.000000000 +0200
|
||||
+++ b/Makefile 2008-11-28 19:31:58.000000000 +0100
|
||||
@@ -19,7 +19,6 @@
|
||||
obj-y := net/wireless/ net/mac80211/
|
||||
ifeq ($(ONLY_CORE),)
|
||||
obj-y += net/ieee80211/ \
|
||||
- drivers/ssb/ \
|
||||
drivers/misc/ \
|
||||
drivers/net/usb/ \
|
||||
drivers/net/wireless/
|
@ -1,201 +0,0 @@ |
||||
--- /dev/null
|
||||
+++ b/net/mac80211/Kconfig
|
||||
@@ -0,0 +1,198 @@
|
||||
+config MAC80211
|
||||
+ tristate "Generic IEEE 802.11 Networking Stack (mac80211)"
|
||||
+ select CRYPTO
|
||||
+ select CRYPTO_ECB
|
||||
+ select CRYPTO_ARC4
|
||||
+ select CRYPTO_AES
|
||||
+ select CRC32
|
||||
+ select WIRELESS_EXT
|
||||
+ select CFG80211
|
||||
+ ---help---
|
||||
+ This option enables the hardware independent IEEE 802.11
|
||||
+ networking stack.
|
||||
+
|
||||
+menu "Rate control algorithm selection"
|
||||
+ depends on MAC80211 != n
|
||||
+
|
||||
+config MAC80211_RC_PID
|
||||
+ bool "PID controller based rate control algorithm" if EMBEDDED
|
||||
+ default y
|
||||
+ ---help---
|
||||
+ This option enables a TX rate control algorithm for
|
||||
+ mac80211 that uses a PID controller to select the TX
|
||||
+ rate.
|
||||
+
|
||||
+choice
|
||||
+ prompt "Default rate control algorithm"
|
||||
+ default MAC80211_RC_DEFAULT_PID
|
||||
+ ---help---
|
||||
+ This option selects the default rate control algorithm
|
||||
+ mac80211 will use. Note that this default can still be
|
||||
+ overriden through the ieee80211_default_rc_algo module
|
||||
+ parameter if different algorithms are available.
|
||||
+
|
||||
+config MAC80211_RC_DEFAULT_PID
|
||||
+ bool "PID controller based rate control algorithm"
|
||||
+ depends on MAC80211_RC_PID
|
||||
+ ---help---
|
||||
+ Select the PID controller based rate control as the
|
||||
+ default rate control algorithm. You should choose
|
||||
+ this unless you know what you are doing.
|
||||
+
|
||||
+endchoice
|
||||
+
|
||||
+config MAC80211_RC_DEFAULT
|
||||
+ string
|
||||
+ default "pid" if MAC80211_RC_DEFAULT_PID
|
||||
+ default ""
|
||||
+
|
||||
+endmenu
|
||||
+
|
||||
+config MAC80211_MESH
|
||||
+ bool "Enable mac80211 mesh networking (pre-802.11s) support"
|
||||
+ depends on MAC80211 && EXPERIMENTAL
|
||||
+ ---help---
|
||||
+ This options enables support of Draft 802.11s mesh networking.
|
||||
+ The implementation is based on Draft 1.08 of the Mesh Networking
|
||||
+ amendment. For more information visit http://o11s.org/.
|
||||
+
|
||||
+
|
||||
+config MAC80211_LEDS
|
||||
+ bool "Enable LED triggers"
|
||||
+ depends on MAC80211
|
||||
+ select NEW_LEDS
|
||||
+ select LEDS_TRIGGERS
|
||||
+ ---help---
|
||||
+ This option enables a few LED triggers for different
|
||||
+ packet receive/transmit events.
|
||||
+
|
||||
+config MAC80211_DEBUGFS
|
||||
+ bool "Export mac80211 internals in DebugFS"
|
||||
+ depends on MAC80211 && DEBUG_FS
|
||||
+ ---help---
|
||||
+ Select this to see extensive information about
|
||||
+ the internal state of mac80211 in debugfs.
|
||||
+
|
||||
+ Say N unless you know you need this.
|
||||
+
|
||||
+menuconfig MAC80211_DEBUG_MENU
|
||||
+ bool "Select mac80211 debugging features"
|
||||
+ depends on MAC80211
|
||||
+ ---help---
|
||||
+ This option collects various mac80211 debug settings.
|
||||
+
|
||||
+config MAC80211_DEBUG_PACKET_ALIGNMENT
|
||||
+ bool "Enable packet alignment debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ This option is recommended for driver authors and strongly
|
||||
+ discouraged for everybody else, it will trigger a warning
|
||||
+ when a driver hands mac80211 a buffer that is aligned in
|
||||
+ a way that will cause problems with the IP stack on some
|
||||
+ architectures.
|
||||
+
|
||||
+ Say N unless you're writing a mac80211 based driver.
|
||||
+
|
||||
+config MAC80211_NOINLINE
|
||||
+ bool "Do not inline TX/RX handlers"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ This option affects code generation in mac80211, when
|
||||
+ selected some functions are marked "noinline" to allow
|
||||
+ easier debugging of problems in the transmit and receive
|
||||
+ paths.
|
||||
+
|
||||
+ This option increases code size a bit and inserts a lot
|
||||
+ of function calls in the code, but is otherwise safe to
|
||||
+ enable.
|
||||
+
|
||||
+ If unsure, say N unless you expect to be finding problems
|
||||
+ in mac80211.
|
||||
+
|
||||
+config MAC80211_VERBOSE_DEBUG
|
||||
+ bool "Verbose debugging output"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to print out
|
||||
+ many debugging messages. It should not be selected
|
||||
+ on production systems as some of the messages are
|
||||
+ remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_HT_DEBUG
|
||||
+ bool "Verbose HT debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ This option enables 802.11n High Throughput features
|
||||
+ debug tracing output.
|
||||
+
|
||||
+ It should not be selected on production systems as some
|
||||
+ of the messages are remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_TKIP_DEBUG
|
||||
+ bool "Verbose TKIP debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to print out
|
||||
+ very verbose TKIP debugging messages. It should not
|
||||
+ be selected on production systems as those messages
|
||||
+ are remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_IBSS_DEBUG
|
||||
+ bool "Verbose IBSS debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to print out
|
||||
+ very verbose IBSS debugging messages. It should not
|
||||
+ be selected on production systems as those messages
|
||||
+ are remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_VERBOSE_PS_DEBUG
|
||||
+ bool "Verbose powersave mode debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to print out very
|
||||
+ verbose power save mode debugging messages (when mac80211
|
||||
+ is an AP and has power saving stations.)
|
||||
+ It should not be selected on production systems as those
|
||||
+ messages are remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_VERBOSE_MPL_DEBUG
|
||||
+ bool "Verbose mesh peer link debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ depends on MAC80211_MESH
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to print out very
|
||||
+ verbose mesh peer link debugging messages (when mac80211
|
||||
+ is taking part in a mesh network).
|
||||
+ It should not be selected on production systems as those
|
||||
+ messages are remotely triggerable.
|
||||
+
|
||||
+ Do not select this option.
|
||||
+
|
||||
+config MAC80211_DEBUG_COUNTERS
|
||||
+ bool "Extra statistics for TX/RX debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ depends on MAC80211_DEBUGFS
|
||||
+ ---help---
|
||||
+ Selecting this option causes mac80211 to keep additional
|
||||
+ and very verbose statistics about TX and RX handler use
|
||||
+ and show them in debugfs.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+config MAC80211_VERBOSE_SPECT_MGMT_DEBUG
|
||||
+ bool "Verbose Spectrum Management (IEEE 802.11h)debugging"
|
||||
+ depends on MAC80211_DEBUG_MENU
|
||||
+ ---help---
|
||||
+ Say Y here to print out verbose Spectrum Management (IEEE 802.11h)
|
||||
+ debug messages.
|
@ -0,0 +1,14 @@ |
||||
diff --git a/Makefile b/Makefile
|
||||
index 6a5eff4..225c711 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -20,8 +20,7 @@ NOSTDINC_FLAGS := -I$(M)/include/ -include $(M)/include/net/compat.h $(CFLAGS)
|
||||
obj-y := net/wireless/ net/mac80211/
|
||||
ifeq ($(ONLY_CORE),)
|
||||
obj-$(CONFIG_B44) += drivers/net/b44.o
|
||||
-obj-y += drivers/ssb/ \
|
||||
- drivers/misc/ \
|
||||
+obj-y += drivers/misc/ \
|
||||
drivers/net/usb/ \
|
||||
drivers/net/wireless/
|
||||
endif
|
@ -1,13 +0,0 @@ |
||||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -47,8 +47,9 @@ endif
|
||||
endif # build check
|
||||
endif # kernel Makefile check
|
||||
|
||||
-CONFIG_MAC80211_RC_DEFAULT=pid
|
||||
+CONFIG_MAC80211_RC_DEFAULT=minstrel
|
||||
CONFIG_MAC80211_RC_PID=y
|
||||
+CONFIG_MAC80211_RC_MINSTREL=y
|
||||
|
||||
# enable mesh networking too
|
||||
CONFIG_MAC80211_MESH=y
|
@ -1,44 +1,85 @@ |
||||
diff --git a/config.mk b/config.mk
|
||||
index d94a976..39fcaea 100644
|
||||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -108,12 +108,12 @@ CONFIG_B43LEGACY_PIO=y
|
||||
@@ -69,10 +69,10 @@ CONFIG_MAC80211_LEDS=y
|
||||
CONFIG_MAC80211_MESH=y
|
||||
|
||||
CONFIG_CFG80211=m
|
||||
-CONFIG_LIB80211=m
|
||||
-CONFIG_LIB80211_CRYPT_WEP=m
|
||||
-CONFIG_LIB80211_CRYPT_CCMP=m
|
||||
-CONFIG_LIB80211_CRYPT_TKIP=m
|
||||
+#CONFIG_LIB80211=m
|
||||
+#CONFIG_LIB80211_CRYPT_WEP=m
|
||||
+#CONFIG_LIB80211_CRYPT_CCMP=m
|
||||
+#CONFIG_LIB80211_CRYPT_TKIP=m
|
||||
|
||||
CONFIG_NL80211=y
|
||||
# We'll disable this as soon major distributions
|
||||
@@ -101,14 +101,14 @@ CONFIG_B43=m
|
||||
# B43 uses PCMCIA only for Compact Flash. The Cardbus cards uses PCI
|
||||
# Example, bcm4318:
|
||||
# http://www.multicap.biz/wireless-lan/indoor-wlan-hardware/sdc-cf10g-80211g-compact-flash-module
|
||||
-CONFIG_B43_PCMCIA=y
|
||||
+#CONFIG_B43_PCMCIA=y
|
||||
CONFIG_B43_PIO=y
|
||||
# B43_PIO selects SSB_BLOCKIO
|
||||
CONFIG_SSB_BLOCKIO=y
|
||||
CONFIG_B43_PCI_AUTOSELECT=y
|
||||
CONFIG_B43_PCICORE_AUTOSELECT=y
|
||||
#CONFIG_B43_RFKILL=n
|
||||
-CONFIG_B43_LEDS=y
|
||||
+#CONFIG_B43_LEDS=y
|
||||
# CONFIG_B43_DEBUG is not set
|
||||
|
||||
CONFIG_B43LEGACY=m
|
||||
@@ -119,13 +119,13 @@ CONFIG_B43LEGACY_PIO=y
|
||||
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
||||
|
||||
# The Intel ipws
|
||||
-CONFIG_LIBIPW=m
|
||||
-CONFIG_IPW2100=m
|
||||
-CONFIG_IPW2100_MONITOR=y
|
||||
-CONFIG_IPW2200=m
|
||||
-CONFIG_IPW2200_MONITOR=y
|
||||
-CONFIG_IPW2200_RADIOTAP=y
|
||||
-CONFIG_IPW2200_PROMISCUOUS=y
|
||||
+# CONFIG_IPW2100=m
|
||||
+# CONFIG_IPW2100_MONITOR=y
|
||||
+# CONFIG_IPW2200=m
|
||||
+# CONFIG_IPW2200_MONITOR=y
|
||||
+# CONFIG_IPW2200_RADIOTAP=y
|
||||
+# CONFIG_IPW2200_PROMISCUOUS=y
|
||||
+#CONFIG_LIBIPW=m
|
||||
+#CONFIG_IPW2100=m
|
||||
+#CONFIG_IPW2100_MONITOR=y
|
||||
+#CONFIG_IPW2200=m
|
||||
+#CONFIG_IPW2200_MONITOR=y
|
||||
+#CONFIG_IPW2200_RADIOTAP=y
|
||||
+#CONFIG_IPW2200_PROMISCUOUS=y
|
||||
# The above enables use a second interface prefixed 'rtap'.
|
||||
# Example usage:
|
||||
#
|
||||
@@ -126,9 +126,9 @@ CONFIG_IPW2200_PROMISCUOUS=y
|
||||
@@ -138,7 +138,7 @@ CONFIG_IPW2200_PROMISCUOUS=y
|
||||
# it on via sysfs:
|
||||
#
|
||||
# % echo 1 > /sys/bus/pci/drivers/ipw2200/*/rtap_iface
|
||||
-CONFIG_IPW2200_QOS=y
|
||||
+# CONFIG_IPW2200_QOS=y
|
||||
|
||||
-NEED_IEEE80211=y
|
||||
+# NEED_IEEE80211=y
|
||||
+#CONFIG_IPW2200_QOS=y
|
||||
|
||||
CONFIG_P54_PCI=m
|
||||
|
||||
@@ -227,8 +227,8 @@ CONFIG_SSB_PCICORE_HOSTMODE=n
|
||||
# CONFIG_SSB_DRIVER_EXTIF=y
|
||||
|
||||
@@ -239,15 +239,15 @@ CONFIG_SSB_PCICORE_HOSTMODE=n
|
||||
ifneq ($(CONFIG_USB),)
|
||||
-CONFIG_LIBERTAS_USB=m
|
||||
ifneq ($(CONFIG_LIBERTAS_THINFIRM_USB),m)
|
||||
CONFIG_LIBERTAS_USB=m
|
||||
-NEED_LIBERTAS=y
|
||||
+#CONFIG_LIBERTAS_USB=m
|
||||
+#NEED_LIBERTAS=y
|
||||
endif
|
||||
endif
|
||||
ifneq ($(CONFIG_PCMCIA),)
|
||||
CONFIG_LIBERTAS_CS=m
|
||||
-NEED_LIBERTAS=y
|
||||
+#NEED_LIBERTAS=y
|
||||
endif
|
||||
ifeq ($(NEED_LIBERTAS),y)
|
||||
-CONFIG_LIBERTAS=m
|
||||
+#CONFIG_LIBERTAS=m
|
||||
# Libertas uses the old stack but not fully, it will soon
|
||||
# be cleaned.
|
||||
endif
|
||||
|
@ -1,21 +0,0 @@ |
||||
On ARM alignment is done slightly different from other architectures.
|
||||
struct ieee80211_tx_rate is aligned to word size, even though it only has 3
|
||||
single-byte members, which triggers the BUILD_BUG_ON in
|
||||
ieee80211_tx_info_clear_status
|
||||
|
||||
This patch marks the struct ieee80211_tx_rate as packed, so that ARM
|
||||
behaves like the other architectures.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -299,7 +299,7 @@ struct ieee80211_tx_rate {
|
||||
s8 idx;
|
||||
u8 count;
|
||||
u8 flags;
|
||||
-};
|
||||
+} __attribute__((packed));
|
||||
|
||||
/**
|
||||
* struct ieee80211_tx_info - skb transmit information
|
@ -0,0 +1,248 @@ |
||||
From: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
Date: Thu, 20 Nov 2008 22:29:36 +0000 (+0100)
|
||||
Subject: rt2x00: Implement HW encryption (rt2500usb)
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Fivd%2Frt2x00.git;a=commitdiff_plain;h=52fe465ab5eb6aeead5ac8d91dd70e363d0560b7
|
||||
|
||||
rt2x00: Implement HW encryption (rt2500usb)
|
||||
|
||||
rt2500usb supports hardware encryption.
|
||||
rt2500usb supports up to 4 shared and pairwise keys.
|
||||
|
||||
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
|
||||
---
|
||||
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
|
||||
index 10cb46a..620ac65 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
|
||||
@@ -36,6 +36,13 @@
|
||||
#include "rt2500usb.h"
|
||||
|
||||
/*
|
||||
+ * Allow hardware encryption to be disabled.
|
||||
+ */
|
||||
+static int modparam_nohwcrypt = 0;
|
||||
+module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
|
||||
+MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
|
||||
+
|
||||
+/*
|
||||
* Register access.
|
||||
* All access to the CSR registers will go through the methods
|
||||
* rt2500usb_register_read and rt2500usb_register_write.
|
||||
@@ -323,6 +330,85 @@ static void rt2500usb_init_led(struct rt2x00_dev *rt2x00dev,
|
||||
/*
|
||||
* Configuration handlers.
|
||||
*/
|
||||
+
|
||||
+/*
|
||||
+ * rt2500usb does not differentiate between shared and pairwise
|
||||
+ * keys, so we should use the same function for both key types.
|
||||
+ */
|
||||
+static int rt2500usb_config_key(struct rt2x00_dev *rt2x00dev,
|
||||
+ struct rt2x00lib_crypto *crypto,
|
||||
+ struct ieee80211_key_conf *key)
|
||||
+{
|
||||
+ int timeout;
|
||||
+ u32 mask;
|
||||
+ u16 reg;
|
||||
+
|
||||
+ /* Support up to 4 keys */
|
||||
+ if (key->hw_key_idx >= 4)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
+ if (crypto->cmd == SET_KEY) {
|
||||
+ /*
|
||||
+ * Pairwise key will always be entry 0, but this
|
||||
+ * could collide with a shared key on the same
|
||||
+ * position...
|
||||
+ */
|
||||
+ mask = TXRX_CSR0_KEY_ID.bit_mask;
|
||||
+
|
||||
+ rt2500usb_register_read(rt2x00dev, TXRX_CSR0, ®);
|
||||
+
|
||||
+ if ((reg & mask) && (reg & mask) == mask)
|
||||
+ return -ENOSPC;
|
||||
+
|
||||
+ reg = rt2x00_get_field16(reg, TXRX_CSR0_KEY_ID);
|
||||
+
|
||||
+ key->hw_key_idx += reg ? ffz(reg) : 0;
|
||||
+
|
||||
+ /*
|
||||
+ * The encryption key doesn't fit within the CSR cache,
|
||||
+ * this means we should allocate it seperately and use
|
||||
+ * rt2x00usb_vendor_request() to send the key to the hardware.
|
||||
+ */
|
||||
+ reg = KEY_ENTRY(key->hw_key_idx);
|
||||
+ timeout = REGISTER_TIMEOUT32(sizeof(crypto->key));
|
||||
+ rt2x00usb_vendor_request_large_buff(rt2x00dev, USB_MULTI_WRITE,
|
||||
+ USB_VENDOR_REQUEST_OUT, reg,
|
||||
+ crypto->key,
|
||||
+ sizeof(crypto->key),
|
||||
+ timeout);
|
||||
+
|
||||
+ /*
|
||||
+ * The driver does not support the IV/EIV generation
|
||||
+ * in hardware. However it doesn't support the IV/EIV
|
||||
+ * inside the ieee80211 frame either, but requires it
|
||||
+ * to be provided seperately for the descriptor.
|
||||
+ * rt2x00lib will cut the IV/EIV data out of all frames
|
||||
+ * given to us by mac80211, but we must tell mac80211
|
||||
+ * to generate the IV/EIV data.
|
||||
+ */
|
||||
+ key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
|
||||
+ key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * TXRX_CSR0_KEY_ID contains only single-bit fields to indicate
|
||||
+ * a particular key is valid.
|
||||
+ */
|
||||
+ rt2500usb_register_read(rt2x00dev, TXRX_CSR0, ®);
|
||||
+ rt2x00_set_field16(®, TXRX_CSR0_ALGORITHM, crypto->cipher);
|
||||
+ rt2x00_set_field16(®, TXRX_CSR0_IV_OFFSET, IEEE80211_HEADER);
|
||||
+
|
||||
+ mask = rt2x00_get_field16(reg, TXRX_CSR0_KEY_ID);
|
||||
+ if (crypto->cmd == SET_KEY)
|
||||
+ mask |= 1 << key->hw_key_idx;
|
||||
+ else if (crypto->cmd == DISABLE_KEY)
|
||||
+ mask &= ~(1 << key->hw_key_idx);
|
||||
+ rt2x00_set_field16(®, TXRX_CSR0_KEY_ID, mask);
|
||||
+ rt2500usb_register_write(rt2x00dev, TXRX_CSR0, reg);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void rt2500usb_config_filter(struct rt2x00_dev *rt2x00dev,
|
||||
const unsigned int filter_flags)
|
||||
{
|
||||
@@ -844,7 +930,7 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev)
|
||||
|
||||
rt2500usb_register_read(rt2x00dev, TXRX_CSR0, ®);
|
||||
rt2x00_set_field16(®, TXRX_CSR0_IV_OFFSET, IEEE80211_HEADER);
|
||||
- rt2x00_set_field16(®, TXRX_CSR0_KEY_ID, 0xff);
|
||||
+ rt2x00_set_field16(®, TXRX_CSR0_KEY_ID, 0);
|
||||
rt2500usb_register_write(rt2x00dev, TXRX_CSR0, reg);
|
||||
|
||||
rt2500usb_register_read(rt2x00dev, MAC_CSR18, ®);
|
||||
@@ -1066,7 +1152,7 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||
* Start writing the descriptor words.
|
||||
*/
|
||||
rt2x00_desc_read(txd, 1, &word);
|
||||
- rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, IEEE80211_HEADER);
|
||||
+ rt2x00_set_field32(&word, TXD_W1_IV_OFFSET, txdesc->iv_offset);
|
||||
rt2x00_set_field32(&word, TXD_W1_AIFS, txdesc->aifs);
|
||||
rt2x00_set_field32(&word, TXD_W1_CWMIN, txdesc->cw_min);
|
||||
rt2x00_set_field32(&word, TXD_W1_CWMAX, txdesc->cw_max);
|
||||
@@ -1079,6 +1165,11 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||
rt2x00_set_field32(&word, TXD_W2_PLCP_LENGTH_HIGH, txdesc->length_high);
|
||||
rt2x00_desc_write(txd, 2, word);
|
||||
|
||||
+ if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc->flags)) {
|
||||
+ _rt2x00_desc_write(txd, 3, skbdesc->iv);
|
||||
+ _rt2x00_desc_write(txd, 4, skbdesc->eiv);
|
||||
+ }
|
||||
+
|
||||
rt2x00_desc_read(txd, 0, &word);
|
||||
rt2x00_set_field32(&word, TXD_W0_RETRY_LIMIT, txdesc->retry_limit);
|
||||
rt2x00_set_field32(&word, TXD_W0_MORE_FRAG,
|
||||
@@ -1093,7 +1184,8 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
|
||||
test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags));
|
||||
rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
|
||||
rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skb->len);
|
||||
- rt2x00_set_field32(&word, TXD_W0_CIPHER, CIPHER_NONE);
|
||||
+ rt2x00_set_field32(&word, TXD_W0_CIPHER, txdesc->cipher);
|
||||
+ rt2x00_set_field32(&word, TXD_W0_KEY_ID, txdesc->key_idx);
|
||||
rt2x00_desc_write(txd, 0, word);
|
||||
}
|
||||
|
||||
@@ -1204,6 +1296,7 @@ static void rt2500usb_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
|
||||
static void rt2500usb_fill_rxdone(struct queue_entry *entry,
|
||||
struct rxdone_entry_desc *rxdesc)
|
||||
{
|
||||
+ struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
|
||||
struct queue_entry_priv_usb *entry_priv = entry->priv_data;
|
||||
struct skb_frame_desc *skbdesc = get_skb_frame_desc(entry->skb);
|
||||
__le32 *rxd =
|
||||
@@ -1231,6 +1324,31 @@ static void rt2500usb_fill_rxdone(struct queue_entry *entry,
|
||||
if (rt2x00_get_field32(word0, RXD_W0_PHYSICAL_ERROR))
|
||||
rxdesc->flags |= RX_FLAG_FAILED_PLCP_CRC;
|
||||
|
||||
+ if (test_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags)) {
|
||||
+ rxdesc->cipher = rt2x00_get_field32(word0, RXD_W0_CIPHER);
|
||||
+ if (rt2x00_get_field32(word0, RXD_W0_CIPHER_ERROR))
|
||||
+ rxdesc->cipher_status = RX_CRYPTO_FAIL_KEY;
|
||||
+ }
|
||||
+
|
||||
+ if (rxdesc->cipher != CIPHER_NONE) {
|
||||
+ _rt2x00_desc_read(rxd, 2, &rxdesc->iv);
|
||||
+ _rt2x00_desc_read(rxd, 3, &rxdesc->eiv);
|
||||
+ /* ICV is located at the end of frame */
|
||||
+
|
||||
+ /*
|
||||
+ * Hardware has stripped IV/EIV data from 802.11 frame during
|
||||
+ * decryption. It has provided the data seperately but rt2x00lib
|
||||
+ * should decide if it should be reinserted.
|
||||
+ */
|
||||
+ rxdesc->flags |= RX_FLAG_IV_STRIPPED;
|
||||
+ if (rxdesc->cipher != CIPHER_TKIP)
|
||||
+ rxdesc->flags |= RX_FLAG_MMIC_STRIPPED;
|
||||
+ if (rxdesc->cipher_status == RX_CRYPTO_SUCCESS)
|
||||
+ rxdesc->flags |= RX_FLAG_DECRYPTED;
|
||||
+ else if (rxdesc->cipher_status == RX_CRYPTO_FAIL_MIC)
|
||||
+ rxdesc->flags |= RX_FLAG_MMIC_ERROR;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Obtain the status about this packet.
|
||||
* When frame was received with an OFDM bitrate,
|
||||
@@ -1238,8 +1356,8 @@ static void rt2500usb_fill_rxdone(struct queue_entry *entry,
|
||||
* a CCK bitrate the signal is the rate in 100kbit/s.
|
||||
*/
|
||||
rxdesc->signal = rt2x00_get_field32(word1, RXD_W1_SIGNAL);
|
||||
- rxdesc->rssi = rt2x00_get_field32(word1, RXD_W1_RSSI) -
|
||||
- entry->queue->rt2x00dev->rssi_offset;
|
||||
+ rxdesc->rssi =
|
||||
+ rt2x00_get_field32(word1, RXD_W1_RSSI) - rt2x00dev->rssi_offset;
|
||||
rxdesc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
|
||||
|
||||
if (rt2x00_get_field32(word0, RXD_W0_OFDM))
|
||||
@@ -1729,6 +1847,8 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
|
||||
__set_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags);
|
||||
__set_bit(DRIVER_REQUIRE_BEACON_GUARD, &rt2x00dev->flags);
|
||||
__set_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags);
|
||||
+ if (!modparam_nohwcrypt)
|
||||
+ __set_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags);
|
||||
__set_bit(CONFIG_DISABLE_LINK_TUNING, &rt2x00dev->flags);
|
||||
|
||||
/*
|
||||
@@ -1748,6 +1868,7 @@ static const struct ieee80211_ops rt2500usb_mac80211_ops = {
|
||||
.config = rt2x00mac_config,
|
||||
.config_interface = rt2x00mac_config_interface,
|
||||
.configure_filter = rt2x00mac_configure_filter,
|
||||
+ .set_key = rt2x00mac_set_key,
|
||||
.get_stats = rt2x00mac_get_stats,
|
||||
.bss_info_changed = rt2x00mac_bss_info_changed,
|
||||
.conf_tx = rt2x00mac_conf_tx,
|
||||
@@ -1769,6 +1890,8 @@ static const struct rt2x00lib_ops rt2500usb_rt2x00_ops = {
|
||||
.get_tx_data_len = rt2500usb_get_tx_data_len,
|
||||
.kick_tx_queue = rt2500usb_kick_tx_queue,
|
||||
.fill_rxdone = rt2500usb_fill_rxdone,
|
||||
+ .config_shared_key = rt2500usb_config_key,
|
||||
+ .config_pairwise_key = rt2500usb_config_key,
|
||||
.config_filter = rt2500usb_config_filter,
|
||||
.config_intf = rt2500usb_config_intf,
|
||||
.config_erp = rt2500usb_config_erp,
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
|
||||
index dbb5d68..4347dfd 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2500usb.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2500usb.h
|
||||
@@ -447,6 +447,9 @@
|
||||
#define SEC_CSR30 0x04bc
|
||||
#define SEC_CSR31 0x04be
|
||||
|
||||
+#define KEY_ENTRY(__idx) \
|
||||
+ ( SEC_CSR0 + ((__idx) * 16) )
|
||||
+
|
||||
/*
|
||||
* PHY control registers.
|
||||
*/
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue