rpms/kernel/devel config-generic, 1.55, 1.56 kernel.spec, 1.330, 1.331 linux-2.6-ath5k.patch, 1.8, 1.9 linux-2.6-rtl8180.patch, 1.3, 1.4 linux-2.6-wireless-pending.patch, 1.17, 1.18 linux-2.6-wireless.patch, 1.14, 1.15

John W. Linville (linville) fedora-extras-commits at redhat.com
Fri Dec 21 17:36:06 UTC 2007


Author: linville

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8497

Modified Files:
	config-generic kernel.spec linux-2.6-ath5k.patch 
	linux-2.6-rtl8180.patch linux-2.6-wireless-pending.patch 
	linux-2.6-wireless.patch 
Log Message:
Yet another round of wireless updates...


Index: config-generic
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/config-generic,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- config-generic	18 Dec 2007 22:10:10 -0000	1.55
+++ config-generic	21 Dec 2007 17:35:23 -0000	1.56
@@ -1231,6 +1231,12 @@
 # CONFIG_PCMCIA_RAYCS is not set
 
 CONFIG_MAC80211=m
+CONFIG_MAC80211_RC_DEFAULT_CHOICE=y
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+CONFIG_MAC80211_RC_SIMPLE=y
 CONFIG_MAC80211_LEDS=y
 CONFIG_MAC80211_HT=y
 # CONFIG_MAC80211_DEBUGFS is not set


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.330
retrieving revision 1.331
diff -u -r1.330 -r1.331
--- kernel.spec	21 Dec 2007 04:39:42 -0000	1.330
+++ kernel.spec	21 Dec 2007 17:35:23 -0000	1.331
@@ -622,7 +622,7 @@
 Patch610: linux-2.6-defaults-fat-utf8.patch
 Patch660: linux-2.6-libata-ali-atapi-dma.patch
 Patch670: linux-2.6-ata-quirk.patch
-#Patch680: linux-2.6-wireless.patch
+Patch680: linux-2.6-wireless.patch
 Patch681: linux-2.6-wireless-pending.patch
 Patch690: linux-2.6-at76.patch
 Patch691: linux-2.6-ath5k.patch
@@ -1121,7 +1121,7 @@
 ApplyPatch linux-2.6-ata-quirk.patch
 
 # wireless patches headed for 2.6.24
-#ApplyPatch linux-2.6-wireless.patch
+ApplyPatch linux-2.6-wireless.patch
 # wireless patches headed for 2.6.25
 ApplyPatch linux-2.6-wireless-pending.patch
 
@@ -1741,6 +1741,9 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL} -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf %{with_xen} xen
 
 %changelog
+* Fri Dec 21 2007 John W. Linville <linville at redhat.com>
+- Yet another round of wireless updates...
+
 * Thu Dec 20 2007 Kyle McMartin <kmcmartin at redhat.com>
 - 2.6.24-rc6
 

linux-2.6-ath5k.patch:

Index: linux-2.6-ath5k.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-ath5k.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-ath5k.patch	17 Dec 2007 23:04:26 -0000	1.8
+++ linux-2.6-ath5k.patch	21 Dec 2007 17:35:23 -0000	1.9
@@ -1,6 +1,6 @@
 diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-17 17:25:59.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-12-17 17:35:55.000000000 -0500
+--- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-21 12:15:17.000000000 -0500
++++ linux-2.6.23.noarch/MAINTAINERS	2007-12-21 12:18:50.000000000 -0500
 @@ -646,6 +646,17 @@ M:	ecashin at coraid.com
  W:	http://www.coraid.com/support/linux
  S:	Supported
@@ -20,8 +20,8 @@
  P:	Jay Cliburn
  M:	jcliburn at gmail.com
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-17 17:25:59.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-17 17:35:55.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-21 12:15:17.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-21 12:18:50.000000000 -0500
 @@ -61,3 +61,5 @@ obj-$(CONFIG_RT2X00)	+= rt2x00/
  obj-$(CONFIG_P54_COMMON)	+= p54common.o
  obj-$(CONFIG_P54_USB)		+= p54usb.o
@@ -29,11 +29,11 @@
 +
 +obj-$(CONFIG_ATH5K)	+= ath5k/
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-17 17:25:59.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-17 17:35:55.000000000 -0500
-@@ -605,6 +605,24 @@ config P54_PCI
- 	tristate "Prism54 PCI support"
- 	depends on P54_COMMON && PCI
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 12:15:17.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 12:18:50.000000000 -0500
+@@ -656,6 +656,24 @@ config P54_PCI
+ 
+ 	  If you choose to build a module, it'll be called p54pci.
  
 +config ATH5K
 +	tristate "Atheros 5xxx wireless cards support"
@@ -57,8 +57,8 @@
  source "drivers/net/wireless/hostap/Kconfig"
  source "drivers/net/wireless/bcm43xx/Kconfig"
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,2071 @@
 +/*
 + * PHY functions
@@ -2132,8 +2132,8 @@
 +	return ath5k_hw_txpower(ah, channel, power);
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,1153 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -3289,14 +3289,14 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,2 @@
 +ath5k-objs		= base.o hw.o regdom.o initvals.o phy.o debug.o
 +obj-$(CONFIG_ATH5K)	+= ath5k.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,1987 @@
 +/*
 + * Copyright (c) 2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -5286,8 +5286,8 @@
 +#define	AR5K_PHY_GAIN_2GHZ_MARGIN_TXRX_S	18
 +#define	AR5K_PHY_GAIN_2GHZ_INI_5111	0x6480416c
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,500 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at openbsd.org>
@@ -5790,8 +5790,8 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,216 @@
 +/*
 + * Copyright (c) 2007 Bruno Randolf <bruno at thinktube.com>
@@ -6010,8 +6010,8 @@
 +
 +#endif /* ifndef _ATH5K_DEBUG_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,4349 @@
 + /*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -10363,8 +10363,8 @@
 +	return -EIO;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,588 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -10955,8 +10955,8 @@
 +	return retval;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,1347 @@
 +/*
 + * Initial register settings functions
@@ -12306,8 +12306,8 @@
 +	return 0;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,2822 @@
 +/*-
 + * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -15132,8 +15132,8 @@
 +}
 +
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,469 @@
 +/*
 + * Copyright (c) 2007 Bruno Randolf <bruno at thinktube.com>
@@ -15605,8 +15605,8 @@
 +
 +#endif /* if ATH5K_DEBUG */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,178 @@
 +/*-
 + * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
@@ -15787,8 +15787,8 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2007-12-17 17:35:55.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2007-12-21 12:18:50.000000000 -0500
 @@ -0,0 +1,121 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at vantronix.net>

linux-2.6-rtl8180.patch:

Index: linux-2.6-rtl8180.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-rtl8180.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-rtl8180.patch	17 Dec 2007 23:04:26 -0000	1.3
+++ linux-2.6-rtl8180.patch	21 Dec 2007 17:35:23 -0000	1.4
@@ -1,6 +1,6 @@
 diff -up linux-2.6.23.noarch/include/linux/pci_ids.h.orig linux-2.6.23.noarch/include/linux/pci_ids.h
---- linux-2.6.23.noarch/include/linux/pci_ids.h.orig	2007-12-17 16:00:07.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/pci_ids.h	2007-12-17 17:37:09.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/pci_ids.h.orig	2007-12-21 10:43:39.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/pci_ids.h	2007-12-21 12:28:05.000000000 -0500
 @@ -2078,6 +2078,9 @@
  #define PCI_DEVICE_ID_ALTIMA_AC9100	0x03ea
  #define PCI_DEVICE_ID_ALTIMA_AC1003	0x03eb
@@ -12,8 +12,8 @@
  
  #define PCI_VENDOR_ID_ARECA		0x17d3
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,193 @@
 +
 +/*
@@ -209,13 +209,13 @@
 +	rtl8180_write_phy(dev, 0x1a, 0xa0);
 +}
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-17 17:36:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-17 17:37:09.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-21 12:19:55.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-21 12:28:05.000000000 -0500
 @@ -49,7 +49,10 @@ obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs
  obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
  obj-$(CONFIG_LIBERTAS)		+= libertas/
  
-+rtl8180-objs		:= rtl8180_dev.o rtl8180_rtl8225.o rtl8180_sa2400.o rtl8180_max2820.o
++rtl8180-objs		:= rtl8180_dev.o rtl8180_rtl8225.o rtl8180_sa2400.o rtl8180_max2820.o rtl8180_grf5101.o
  rtl8187-objs		:= rtl8187_dev.o rtl8187_rtl8225.o
 +
 +obj-$(CONFIG_RTL8180)	+= rtl8180.o
@@ -223,8 +223,8 @@
  
  obj-$(CONFIG_ADM8211)	+= adm8211.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,30 @@
 +#ifndef RTL8180_MAX2820_H
 +#define RTL8180_MAX2820_H
@@ -257,8 +257,8 @@
 +
 +#endif /* RTL8180_MAX2820_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,38 @@
 +#ifndef RTL8180_SA2400_H
 +#define RTL8180_SA2400_H
@@ -299,9 +299,9 @@
 +
 +#endif /* RTL8180_SA2400_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c	2007-12-17 17:37:09.000000000 -0500
-@@ -0,0 +1,765 @@
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c	2007-12-21 12:28:05.000000000 -0500
+@@ -0,0 +1,763 @@
 +
 +/*
 + * Radio tuning for RTL8225 on RTL8180
@@ -592,10 +592,6 @@
 +	rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 2, 0x42);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 6, 0x00);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 8, 0x00);
-+
 +	rtl818x_iowrite8(priv, &priv->map->TX_GAIN_OFDM,
 +			 rtl8180_rtl8225_tx_gain_cck_ofdm[ofdm_power/6] >> 1);
 +
@@ -609,10 +605,16 @@
 +
 +int rtl8180_rtl8225_is_z2(struct ieee80211_hw *dev)
 +{
++	struct rtl8180_priv *priv = dev->priv;
 +	int z2 = 0;
 +
++	rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, 0x0480);
++	rtl818x_iowrite16(priv, &priv->map->RFPinsSelect, 0x0488);
++	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
++	rtl818x_ioread8(priv, &priv->map->EEPROM_CMD);
++	msleep(100);
++
 +	rtl8180_rtl8225_write(dev, 0, 0x1B7);
-+	rtl8180_rtl8225_read(dev, 0);
 +
 +	if (rtl8180_rtl8225_read(dev, 8) == 0x588 && rtl8180_rtl8225_read(dev, 9) == 0x700)
 +		z2 = 1;
@@ -693,9 +695,9 @@
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x03, 0x00); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x04, 0x00); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x05, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x06, 0x40); msleep(1);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x06, 0x00); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x07, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x08, 0x40); msleep(1);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x08, 0x00); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); msleep(1);
@@ -703,7 +705,7 @@
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x10, 0x84); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x11, 0x06); msleep(1);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x11, 0x03); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x12, 0x20); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x13, 0x20); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x14, 0x00); msleep(1);
@@ -725,11 +727,6 @@
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);
 +	rtl8180_rtl8225_write_phy_ofdm(dev, 0x27, 0x88); msleep(1);
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0d, rtl8180_rtl8225_gain[1 * 4]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, rtl8180_rtl8225_gain[1 * 4 + 2]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1d, rtl8180_rtl8225_gain[1 * 4 + 3]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x23, rtl8180_rtl8225_gain[1 * 4 + 1]);
-+
 +	rtl8180_rtl8225_write_phy_cck(dev, 0x00, 0x98); msleep(1);
 +	rtl8180_rtl8225_write_phy_cck(dev, 0x03, 0x20); msleep(1);
 +	rtl8180_rtl8225_write_phy_cck(dev, 0x04, 0x7e); msleep(1);
@@ -771,13 +768,14 @@
 +	rtl818x_iowrite32(priv, (__le32 __iomem *)((void __iomem *)priv->map + 0x94), 0x15c00002);
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +
-+	/* set sensitivity */
 +	rtl8180_rtl8225_write(dev, 0x0c, 0x50);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0d, rtl8180_rtl8225_gain[1 * 4]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, rtl8180_rtl8225_gain[1 * 4 + 2]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1d, rtl8180_rtl8225_gain[1 * 4 + 3]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x23, rtl8180_rtl8225_gain[1 * 4 + 1]);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x41, rtl8180_rtl8225_threshold[2]);
++	/* set OFDM initial gain */
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0d, rtl8180_rtl8225_gain[4 * 4]);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x23, rtl8180_rtl8225_gain[4 * 4 + 1]);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, rtl8180_rtl8225_gain[4 * 4 + 2]);
++	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1d, rtl8180_rtl8225_gain[4 * 4 + 3]);
++	/* set CCK threshold */
++	rtl8180_rtl8225_write_phy_cck(dev, 0x41, rtl8180_rtl8225_threshold[0]);
 +}
 +
 +static const u8 rtl8180_rtl8225z2_tx_power_cck_ch14[] = {
@@ -1068,8 +1066,8 @@
 +	}
 +}
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
---- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-12-17 17:36:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-17 17:37:09.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-12-21 12:19:55.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-21 12:28:05.000000000 -0500
 @@ -395,12 +395,12 @@ static int rtl8187_init_hw(struct ieee80
  	priv->rf_init(dev);
  
@@ -1104,8 +1102,8 @@
  
  	rtl8225_write(dev, 0, 0x1B7);
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h
---- linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h	2007-12-17 17:37:09.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h	2007-12-21 12:28:05.000000000 -0500
 @@ -58,13 +58,17 @@ struct rtl818x_csr {
  #define RTL818X_INT_TX_FO		(1 << 15)
  	__le32	TX_CONF;
@@ -1178,10 +1176,186 @@
  	u8	TALLY_SEL;
  } __attribute__((packed));
  
+diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.c
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.c	2007-12-21 12:28:05.000000000 -0500
+@@ -0,0 +1,172 @@
++
++/*
++ * Radio tuning for GCT GRF5101 on RTL8180
++ *
++ * Copyright 2007 Andrea Merello <andreamrl at tiscali.it>
++ *
++ * Code from the BSD driver and the rtl8181 project have been
++ * very useful to understand certain things
++ *
++ * I want to thanks the Authors of such projects and the Ndiswrapper
++ * project Authors.
++ *
++ * A special Big Thanks also is for all people who donated me cards,
++ * making possible the creation of the original rtl8180 driver
++ * from which this code is derived!
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/init.h>
++#include <linux/pci.h>
++#include <linux/delay.h>
++#include <net/mac80211.h>
++
++#include "rtl8180.h"
++#include "rtl8180_grf5101.h"
++
++static const int grf5101_encode[] = {
++	0x0, 0x8, 0x4, 0xC,
++	0x2, 0xA, 0x6, 0xE,
++	0x1, 0x9, 0x5, 0xD,
++	0x3, 0xB, 0x7, 0xF
++};
++
++static void write_grf5101(struct ieee80211_hw *dev, u8 addr, u32 data)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u32 phy_config;
++
++	phy_config =  grf5101_encode[(data >> 8) & 0xF];
++	phy_config |= grf5101_encode[(data >> 4) & 0xF] << 4;
++	phy_config |= grf5101_encode[data & 0xF] << 8;
++	phy_config |= grf5101_encode[(addr >> 1) & 0xF] << 12;
++	phy_config |= (addr & 1) << 16;
++	phy_config |= grf5101_encode[(data & 0xf000) >> 12] << 24;
++
++	/* MAC will bang bits to the chip */
++	phy_config |= 0x90000000;
++
++	rtl818x_iowrite32(priv,
++		(__le32 __iomem *) &priv->map->RFPinsOutput, phy_config);
++
++	msleep(3);
++}
++
++static void grf5101_write_phy_antenna(struct ieee80211_hw *dev, short chan)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u8 ant = GRF5101_ANTENNA;
++
++	if (priv->rfparam & RF_PARAM_ANTBDEFAULT)
++		ant |= BB_ANTENNA_B;
++
++	if (chan == 14)
++		ant |= BB_ANTATTEN_CHAN14;
++
++	rtl8180_write_phy(dev, 0x10, ant);
++}
++
++void grf5101_rf_set_channel(struct ieee80211_hw *dev,
++			    struct ieee80211_conf *conf)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u32 txpw = priv->channels[conf->channel - 1].val & 0xFF;
++	u32 chan = conf->channel - 1;
++
++	/* set TX power */
++	write_grf5101(dev, 0x15, 0x0);
++	write_grf5101(dev, 0x06, txpw);
++	write_grf5101(dev, 0x15, 0x10);
++	write_grf5101(dev, 0x15, 0x0);
++
++	/* set frequency */
++	write_grf5101(dev, 0x07, 0x0);
++	write_grf5101(dev, 0x0B, chan);
++	write_grf5101(dev, 0x07, 0x1000);
++
++	grf5101_write_phy_antenna(dev, chan);
++}
++
++void grf5101_rf_stop(struct ieee80211_hw *dev)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u32 anaparam;
++
++	anaparam = priv->anaparam;
++	anaparam &= 0x000fffff;
++	anaparam |= 0x3f900000;
++	rtl8180_set_anaparam(priv, anaparam);
++
++	write_grf5101(dev, 0x07, 0x0);
++	write_grf5101(dev, 0x1f, 0x45);
++	write_grf5101(dev, 0x1f, 0x5);
++	write_grf5101(dev, 0x00, 0x8e4);
++}
++
++void grf5101_rf_init(struct ieee80211_hw *dev)
++{
++	struct rtl8180_priv *priv = dev->priv;
++
++	rtl8180_set_anaparam(priv, priv->anaparam);
++
++	write_grf5101(dev, 0x1f, 0x0);
++	write_grf5101(dev, 0x1f, 0x0);
++	write_grf5101(dev, 0x1f, 0x40);
++	write_grf5101(dev, 0x1f, 0x60);
++	write_grf5101(dev, 0x1f, 0x61);
++	write_grf5101(dev, 0x1f, 0x61);
++	write_grf5101(dev, 0x00, 0xae4);
++	write_grf5101(dev, 0x1f, 0x1);
++	write_grf5101(dev, 0x1f, 0x41);
++	write_grf5101(dev, 0x1f, 0x61);
++
++	write_grf5101(dev, 0x01, 0x1a23);
++	write_grf5101(dev, 0x02, 0x4971);
++	write_grf5101(dev, 0x03, 0x41de);
++	write_grf5101(dev, 0x04, 0x2d80);
++	write_grf5101(dev, 0x05, 0x68ff);	/* 0x61ff original value */
++	write_grf5101(dev, 0x06, 0x0);
++	write_grf5101(dev, 0x07, 0x0);
++	write_grf5101(dev, 0x08, 0x7533);
++	write_grf5101(dev, 0x09, 0xc401);
++	write_grf5101(dev, 0x0a, 0x0);
++	write_grf5101(dev, 0x0c, 0x1c7);
++	write_grf5101(dev, 0x0d, 0x29d3);
++	write_grf5101(dev, 0x0e, 0x2e8);
++	write_grf5101(dev, 0x10, 0x192);
++	write_grf5101(dev, 0x11, 0x248);
++	write_grf5101(dev, 0x12, 0x0);
++	write_grf5101(dev, 0x13, 0x20c4);
++	write_grf5101(dev, 0x14, 0xf4fc);
++	write_grf5101(dev, 0x15, 0x0);
++	write_grf5101(dev, 0x16, 0x1500);
++
++	write_grf5101(dev, 0x07, 0x1000);
++
++	/* baseband configuration */
++	rtl8180_write_phy(dev, 0, 0xa8);
++	rtl8180_write_phy(dev, 3, 0x0);
++	rtl8180_write_phy(dev, 4, 0xc0);
++	rtl8180_write_phy(dev, 5, 0x90);
++	rtl8180_write_phy(dev, 6, 0x1e);
++	rtl8180_write_phy(dev, 7, 0x64);
++
++	grf5101_write_phy_antenna(dev, 1);
++
++	rtl8180_write_phy(dev, 0x11, 0x88);
++
++	if (rtl818x_ioread8(priv, &priv->map->CONFIG2) &
++	    RTL818X_CONFIG2_ANTENNA_DIV)
++		rtl8180_write_phy(dev, 0x12, 0xc0); /* enable ant diversity */
++	else
++		rtl8180_write_phy(dev, 0x12, 0x40); /* disable ant diversity */
++
++	rtl8180_write_phy(dev, 0x13, 0x90 | priv->csthreshold);
++
++	rtl8180_write_phy(dev, 0x19, 0x0);
++	rtl8180_write_phy(dev, 0x1a, 0xa0);
++	rtl8180_write_phy(dev, 0x1b, 0x44);
++}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c	2007-12-17 17:37:09.000000000 -0500
-@@ -0,0 +1,1054 @@
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c	2007-12-21 12:28:05.000000000 -0500
+@@ -0,0 +1,1071 @@
 +
 +/*
 + * Linux device driver for RTL8180 / RTL8185
@@ -1210,6 +1384,7 @@
 +#include "rtl8180_rtl8225.h"
 +#include "rtl8180_sa2400.h"
 +#include "rtl8180_max2820.h"
++#include "rtl8180_grf5101.h"
 +
 +MODULE_AUTHOR("Michael Wu <flamingice at sourmilk.net>");
 +MODULE_AUTHOR("Andrea Merello <andreamrl at tiscali.it>");
@@ -1287,6 +1462,9 @@
 +			rx_status.phymode = dev->conf.phymode;
 +			rx_status.mactime = le64_to_cpu(entry->tsft);
 +			rx_status.flag |= RX_FLAG_TSFT;
++			if (flags & RTL8180_RX_DESC_FLAG_CRC32_ERR)
++				rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
++
 +			ieee80211_rx_irqsafe(dev, skb, &rx_status);
 +
 +			skb = new_skb;
@@ -1390,6 +1568,8 @@
 +	unsigned int idx, prio;
 +	dma_addr_t mapping;
 +	u32 tx_flags;
++	u16 plcp_len = 0;
++	__le16 rts_duration = 0;
 +
 +	prio = control->queue;
 +	ring = &priv->tx_ring[prio];
@@ -1413,24 +1593,26 @@
 +	*((struct ieee80211_tx_control **) skb->cb) =
 +		kmemdup(control, sizeof(*control), GFP_ATOMIC);
 +
-+	spin_lock_irqsave(&priv->lock, flags);
-+	idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
-+	entry = &ring->desc[idx];
-+
 +	if (control->flags & IEEE80211_TXCTL_USE_RTS_CTS)
-+		entry->rts_duration =
-+			ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
++		rts_duration = ieee80211_rts_duration(dev, priv->if_id, skb->len, control);
 +
 +	if (!priv->r8185) {
 +		unsigned int remainder;
 +
-+		entry->plcp_len =
-+			DIV_ROUND_UP(16 * (skb->len + 4), (control->rate->rate * 2) / 10);
-+		remainder = (16 * (skb->len + 4)) % ((control->rate->rate * 2) / 10);
++		plcp_len = DIV_ROUND_UP(16 * (skb->len + 4),
++					(control->rate->rate * 2) / 10);
++		remainder = (16 * (skb->len + 4)) %
++			    ((control->rate->rate * 2) / 10);
 +		if (remainder > 0 && remainder <= 6)
-+			entry->plcp_len |= 1 << 15;
++			plcp_len |= 1 << 15;
 +	}
 +
++	spin_lock_irqsave(&priv->lock, flags);
++	idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
++	entry = &ring->desc[idx];
++
++	entry->rts_duration = rts_duration;
++	entry->plcp_len = cpu_to_le16(plcp_len);
 +	entry->tx_buf = cpu_to_le32(mapping);
 +	entry->frame_len = cpu_to_le32(skb->len);
 +	entry->flags2 = control->alt_retry_rate != -1 ?
@@ -1551,7 +1733,8 @@
 +	}
 +
 +	priv->rf_init(dev);
-+	rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
++	if (priv->r8185)
++		rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
 +	return 0;
 +}
 +
@@ -1785,6 +1968,11 @@
 +
 +	priv->rf_stop(dev);
 +
++	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
++	reg = rtl818x_ioread8(priv, &priv->map->CONFIG4);
++	rtl818x_iowrite8(priv, &priv->map->CONFIG4, reg | RTL818X_CONFIG4_VCOOFF);
++	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
++
 +	free_irq(priv->pdev->irq, dev);
 +
 +	rtl8180_free_rx_ring(dev);
@@ -2087,6 +2275,9 @@
 +		break;
 +	case 5:
 +		rf_name = "GCT";
++		priv->rf_init = grf5101_rf_init;
++		priv->rf_stop = grf5101_rf_stop;
++		priv->rf_set_chan = grf5101_rf_set_channel;
 +		break;
 +	case 9:
 +		if (rtl8180_rtl8225_is_z2(dev)) {
@@ -2237,8 +2428,8 @@
 +module_init(rtl8180_init);
 +module_exit(rtl8180_exit);
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,153 @@
 +#ifndef RTL8180_H
 +#define RTL8180_H
@@ -2394,8 +2585,8 @@
 +
 +#endif /* RTL8180_H */
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-17 17:36:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-17 17:37:09.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 12:19:55.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 12:28:05.000000000 -0500
 @@ -553,6 +553,11 @@ config USB_ZD1201
  	  To compile this driver as a module, choose M here: the
  	  module will be called zd1201.
@@ -2409,8 +2600,8 @@
  	tristate "Realtek 8187 USB support"
  	depends on MAC80211 && USB && WLAN_80211 && EXPERIMENTAL
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,28 @@
 +#ifndef RTL8180_RTL8225_H
 +#define RTL8180_RTL8225_H
@@ -2440,9 +2631,43 @@
 +}
 +
 +#endif /* RTL8180_RTL8225_H */
+diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.h
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.h	2007-12-21 12:28:05.000000000 -0500
+@@ -0,0 +1,30 @@
++#ifndef RTL8180_GRF5101_H
++#define RTL8180_GRF5101_H
++
++/*
++ * Radio tuning for GCT GRF5101 on RTL8180
++ *
++ * Copyright 2007 Andrea Merello <andreamrl at tiscali.it>
++ *
++ * Code from the BSD driver and the rtl8181 project have been
++ * very useful to understand certain things
++ *
++ * I want to thanks the Authors of such projects and the Ndiswrapper
++ * project Authors.
++ *
++ * A special Big Thanks also is for all people who donated me cards,
++ * making possible the creation of the original rtl8180 driver
++ * from which this code is derived!
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#define GRF5101_ANTENNA 0xA3
++
++void grf5101_rf_init(struct ieee80211_hw *);
++void grf5101_rf_stop(struct ieee80211_hw *);
++void grf5101_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++
++#endif /* RTL8180_GRF5101_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c	2007-12-17 17:37:09.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c	2007-12-21 12:28:05.000000000 -0500
 @@ -0,0 +1,142 @@
 +/*
 + * Radio tuning for Maxim max2820 on RTL8180

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.17 -r 1.18 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless-pending.patch,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- linux-2.6-wireless-pending.patch	17 Dec 2007 23:04:26 -0000	1.17
+++ linux-2.6-wireless-pending.patch	21 Dec 2007 17:35:23 -0000	1.18
@@ -1,6 +1,209 @@
+diff -up linux-2.6.23.noarch/include/linux/nl80211.h.orig linux-2.6.23.noarch/include/linux/nl80211.h
+--- linux-2.6.23.noarch/include/linux/nl80211.h.orig	2007-12-21 10:43:39.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/nl80211.h	2007-12-21 11:57:47.000000000 -0500
+@@ -7,6 +7,18 @@
+  */
+ 
+ /**
++ * DOC: Station handling
++ *
++ * Stations are added per interface, but a special case exists with VLAN
++ * interfaces. When a station is bound to an AP interface, it may be moved
++ * into a VLAN identified by a VLAN interface index (%NL80211_ATTR_STA_VLAN).
++ * The station is still assumed to belong to the AP interface it was added
++ * to.
++ *
++ * TODO: need more info?
++ */
++
++/**
+  * enum nl80211_commands - supported nl80211 commands
+  *
+  * @NL80211_CMD_UNSPEC: unspecified command to catch errors
+@@ -37,6 +49,35 @@
+  *	userspace to request deletion of a virtual interface, then requires
+  *	attribute %NL80211_ATTR_IFINDEX.
+  *
++ * @NL80211_CMD_GET_KEY: Get sequence counter information for a key specified
++ *	by %NL80211_ATTR_KEY_IDX and/or %NL80211_ATTR_MAC.
++ * @NL80211_CMD_SET_KEY: Set key attributes %NL80211_ATTR_KEY_DEFAULT or
++ *	%NL80211_ATTR_KEY_THRESHOLD.
++ * @NL80211_CMD_NEW_KEY: add a key with given %NL80211_ATTR_KEY_DATA,
++ *	%NL80211_ATTR_KEY_IDX, %NL80211_ATTR_MAC and %NL80211_ATTR_KEY_CIPHER
++ *	attributes.
++ * @NL80211_CMD_DEL_KEY: delete a key identified by %NL80211_ATTR_KEY_IDX
++ *	or %NL80211_ATTR_MAC.
++ *
++ * @NL80211_CMD_GET_BEACON: retrieve beacon information (returned in a
++ *	%NL80222_CMD_NEW_BEACON message)
++ * @NL80211_CMD_SET_BEACON: set the beacon on an access point interface
++ *	using the %NL80211_ATTR_BEACON_INTERVAL, %NL80211_ATTR_DTIM_PERIOD,
++ *	%NL80211_BEACON_HEAD and %NL80211_BEACON_TAIL attributes.
++ * @NL80211_CMD_NEW_BEACON: add a new beacon to an access point interface,
++ *	parameters are like for %NL80211_CMD_SET_BEACON.
++ * @NL80211_CMD_DEL_BEACON: remove the beacon, stop sending it
++ *
++ * @NL80211_CMD_GET_STATION: Get station attributes for station identified by
++ *	%NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
++ * @NL80211_CMD_SET_STATION: Set station attributes for station identified by
++ *	%NL80211_ATTR_MAC on the interface identified by %NL80211_ATTR_IFINDEX.
++ * @NL80211_CMD_NEW_STATION: Add a station with given attributes to the
++ *	the interface identified by %NL80211_ATTR_IFINDEX.
++ * @NL80211_CMD_DEL_STATION: Remove a station identified by %NL80211_ATTR_MAC
++ *	or, if no MAC address given, all stations, on the interface identified
++ *	by %NL80211_ATTR_IFINDEX.
++ *
+  * @NL80211_CMD_MAX: highest used command number
+  * @__NL80211_CMD_AFTER_LAST: internal use
+  */
+@@ -54,6 +95,21 @@ enum nl80211_commands {
+ 	NL80211_CMD_NEW_INTERFACE,
+ 	NL80211_CMD_DEL_INTERFACE,
+ 
++	NL80211_CMD_GET_KEY,
++	NL80211_CMD_SET_KEY,
++	NL80211_CMD_NEW_KEY,
++	NL80211_CMD_DEL_KEY,
++
++	NL80211_CMD_GET_BEACON,
++	NL80211_CMD_SET_BEACON,
++	NL80211_CMD_NEW_BEACON,
++	NL80211_CMD_DEL_BEACON,
++
++	NL80211_CMD_GET_STATION,
++	NL80211_CMD_SET_STATION,
++	NL80211_CMD_NEW_STATION,
++	NL80211_CMD_DEL_STATION,
++
+ 	/* add commands here */
+ 
+ 	/* used to define NL80211_CMD_MAX below */
+@@ -75,6 +131,36 @@ enum nl80211_commands {
+  * @NL80211_ATTR_IFNAME: network interface name
+  * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
+  *
++ * @NL80211_ATTR_MAC: MAC address (various uses)
++ *
++ * @NL80211_ATTR_KEY_DATA: (temporal) key data; for TKIP this consists of
++ *	16 bytes encryption key followed by 8 bytes each for TX and RX MIC
++ *	keys
++ * @NL80211_ATTR_KEY_IDX: key ID (u8, 0-3)
++ * @NL80211_ATTR_KEY_CIPHER: key cipher suite (u32, as defined by IEEE 802.11
++ *	section 7.3.2.25.1, e.g. 0x000FAC04)
++ * @NL80211_ATTR_KEY_SEQ: transmit key sequence number (IV/PN) for TKIP and
++ *	CCMP keys, each six bytes in little endian
++ *
++ * @NL80211_ATTR_BEACON_INTERVAL: beacon interval in TU
++ * @NL80211_ATTR_DTIM_PERIOD: DTIM period for beaconing
++ * @NL80211_ATTR_BEACON_HEAD: portion of the beacon before the TIM IE
++ * @NL80211_ATTR_BEACON_TAIL: portion of the beacon after the TIM IE
++ *
++ * @NL80211_ATTR_STA_AID: Association ID for the station (u16)
++ * @NL80211_ATTR_STA_FLAGS: flags, nested element with NLA_FLAG attributes of
++ *	&enum nl80211_sta_flags.
++ * @NL80211_ATTR_STA_LISTEN_INTERVAL: listen interval as defined by
++ *	IEEE 802.11 7.3.1.6 (u16).
++ * @NL80211_ATTR_STA_SUPPORTED_RATES: supported rates, array of supported
++ *	rates as defined by IEEE 802.11 7.3.2.2 but without the length
++ *	restriction (at most %NL80211_MAX_SUPP_RATES).
++ * @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station
++ *	to, or the AP interface the station was originally added to to.
++ * @NL80211_ATTR_STA_STATS: statistics for a station, part of station info
++ *	given for %NL80211_CMD_GET_STATION, nested attribute containing
++ *	info as possible, see &enum nl80211_sta_stats.
++ *
+  * @NL80211_ATTR_MAX: highest attribute number currently defined
+  * @__NL80211_ATTR_AFTER_LAST: internal use
+  */
+@@ -89,12 +175,34 @@ enum nl80211_attrs {
+ 	NL80211_ATTR_IFNAME,
+ 	NL80211_ATTR_IFTYPE,
+ 
++	NL80211_ATTR_MAC,
++
++	NL80211_ATTR_KEY_DATA,
++	NL80211_ATTR_KEY_IDX,
++	NL80211_ATTR_KEY_CIPHER,
++	NL80211_ATTR_KEY_SEQ,
++	NL80211_ATTR_KEY_DEFAULT,
++
++	NL80211_ATTR_BEACON_INTERVAL,
++	NL80211_ATTR_DTIM_PERIOD,
++	NL80211_ATTR_BEACON_HEAD,
++	NL80211_ATTR_BEACON_TAIL,
++
++	NL80211_ATTR_STA_AID,
++	NL80211_ATTR_STA_FLAGS,
++	NL80211_ATTR_STA_LISTEN_INTERVAL,
++	NL80211_ATTR_STA_SUPPORTED_RATES,
++	NL80211_ATTR_STA_VLAN,
++	NL80211_ATTR_STA_STATS,
++
+ 	/* add attributes here, update the policy in nl80211.c */
+ 
+ 	__NL80211_ATTR_AFTER_LAST,
+ 	NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
+ };
+ 
++#define NL80211_MAX_SUPP_RATES	32
++
+ /**
+  * enum nl80211_iftype - (virtual) interface types
+  *
+@@ -126,4 +234,50 @@ enum nl80211_iftype {
+ 	NL80211_IFTYPE_MAX = __NL80211_IFTYPE_AFTER_LAST - 1
+ };
+ 
++/**
++ * enum nl80211_sta_flags - station flags
++ *
++ * Station flags. When a station is added to an AP interface, it is
++ * assumed to be already associated (and hence authenticated.)
++ *
++ * @NL80211_STA_FLAG_AUTHORIZED: station is authorized (802.1X)
++ * @NL80211_STA_FLAG_SHORT_PREAMBLE: station is capable of receiving frames
++ *	with short barker preamble
++ * @NL80211_STA_FLAG_WME: station is WME/QoS capable
++ */
++enum nl80211_sta_flags {
++	__NL80211_STA_FLAG_INVALID,
++	NL80211_STA_FLAG_AUTHORIZED,
++	NL80211_STA_FLAG_SHORT_PREAMBLE,
++	NL80211_STA_FLAG_WME,
++
++	/* keep last */
++	__NL80211_STA_FLAG_AFTER_LAST,
++	NL80211_STA_FLAG_MAX = __NL80211_STA_FLAG_AFTER_LAST - 1
++};
++
++/**
++ * enum nl80211_sta_stats - station statistics
++ *
++ * These attribute types are used with %NL80211_ATTR_STA_STATS
++ * when getting information about a station.
++ *
++ * @__NL80211_STA_STAT_INVALID: attribute number 0 is reserved
++ * @NL80211_STA_STAT_INACTIVE_TIME: time since last activity (u32, msecs)
++ * @NL80211_STA_STAT_RX_BYTES: total received bytes (u32, from this station)
++ * @NL80211_STA_STAT_TX_BYTES: total transmitted bytes (u32, to this station)
++ * @__NL80211_STA_STAT_AFTER_LAST: internal
++ * @NL80211_STA_STAT_MAX: highest possible station stats attribute
++ */
[...23193 lines suppressed...]
  /*
   * DMA descriptor defines.
@@ -65739,8 +70808,8 @@
  /*
   * Word5
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500usb.h	2007-12-21 11:47:25.000000000 -0500
 @@ -430,10 +430,21 @@
  
  /*
@@ -65776,8 +70845,8 @@
  /*
   * TX descriptor format for TX, PRIO, ATIM and Beacon Ring.
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.h	2007-12-21 11:47:25.000000000 -0500
 @@ -1082,8 +1082,8 @@
  /*
   * DMA descriptor defines.
@@ -65790,8 +70859,8 @@
  /*
   * TX descriptor format for TX, PRIO, ATIM and Beacon Ring.
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00rfkill.c	2007-12-21 11:47:25.000000000 -0500
 @@ -23,11 +23,6 @@
  	Abstract: rt2x00 rfkill routines.
   */
@@ -65877,8 +70946,8 @@
  
  void rt2x00rfkill_free(struct rt2x00_dev *rt2x00dev)
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dump.h
---- /dev/null	2007-12-17 08:39:35.531330196 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dump.h	2007-12-17 17:44:53.000000000 -0500
+--- /dev/null	2007-12-21 08:33:07.834165456 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00dump.h	2007-12-21 11:47:25.000000000 -0500
 @@ -0,0 +1,121 @@
 +/*
 +	Copyright (C) 2004 - 2007 rt2x00 SourceForge Project
@@ -66002,8 +71071,8 @@
 +
 +#endif /* RT2X00DUMP_H */
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00firmware.c	2007-12-21 11:47:25.000000000 -0500
 @@ -23,11 +23,6 @@
  	Abstract: rt2x00 firmware loading routines.
   */
@@ -66017,8 +71086,8 @@
  #include <linux/kernel.h>
  #include <linux/module.h>
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2500pci.c	2007-12-21 11:47:25.000000000 -0500
 @@ -24,11 +24,6 @@
  	Supported chipsets: RT2560.
   */
@@ -66365,8 +71434,8 @@
  	.probe		= rt2x00pci_probe,
  	.remove		= __devexit_p(rt2x00pci_remove),
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt61pci.c	2007-12-21 11:47:25.000000000 -0500
 @@ -24,11 +24,6 @@
  	Supported chipsets: RT2561, RT2561s, RT2661.
   */
@@ -67103,8 +72172,8 @@
  	.probe		= rt2x00pci_probe,
  	.remove		= __devexit_p(rt2x00pci_remove),
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.c	2007-12-21 11:47:25.000000000 -0500
 @@ -23,11 +23,6 @@
  	Abstract: rt2x00 generic pci device routines.
   */
@@ -67278,8 +72347,8 @@
   * Device initialization handlers.
   */
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt2x00pci.h	2007-12-21 11:47:25.000000000 -0500
 @@ -57,7 +57,7 @@
  /*
   * Register access.
@@ -67329,8 +72398,8 @@
  /*
   * Device initialization handlers.
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c
---- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2007-12-21 11:47:25.000000000 -0500
 @@ -24,11 +24,6 @@
  	Supported chipsets: rt2571W & rt2671.
   */
@@ -67888,8 +72957,8 @@
  	.probe		= rt2x00usb_probe,
  	.disconnect	= rt2x00usb_disconnect,
 diff -up linux-2.6.23.noarch/drivers/net/wireless/p54pci.c.orig linux-2.6.23.noarch/drivers/net/wireless/p54pci.c
---- linux-2.6.23.noarch/drivers/net/wireless/p54pci.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/p54pci.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/p54pci.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/p54pci.c	2007-12-21 11:47:25.000000000 -0500
 @@ -141,6 +141,7 @@ static irqreturn_t p54p_simple_interrupt
  static int p54p_read_eeprom(struct ieee80211_hw *dev)
  {
@@ -68111,8 +73180,8 @@
  
  static int __devinit p54p_probe(struct pci_dev *pdev,
 diff -up linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c	2007-12-17 17:45:06.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/hostap/hostap_ioctl.c	2007-12-21 11:47:25.000000000 -0500
 @@ -1089,6 +1089,9 @@ static int prism2_ioctl_giwrange(struct 
  	range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
  		IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
@@ -68124,8 +73193,8 @@
  }
  
 diff -up linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c.orig linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c
---- linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-12-21 11:47:25.000000000 -0500
 @@ -27,6 +27,7 @@ static const struct pci_device_id b43_pc
  	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4321) },
  	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) },
@@ -68135,8 +73204,8 @@
  };
  MODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl);
 diff -up linux-2.6.23.noarch/drivers/ssb/main.c.orig linux-2.6.23.noarch/drivers/ssb/main.c
---- linux-2.6.23.noarch/drivers/ssb/main.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/ssb/main.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/ssb/main.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/main.c	2007-12-21 11:47:25.000000000 -0500
 @@ -872,14 +872,22 @@ EXPORT_SYMBOL(ssb_clockspeed);
  
  static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev)
@@ -68162,8 +73231,8 @@
  	}
  	return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23);
 diff -up linux-2.6.23.noarch/drivers/ssb/pci.c.orig linux-2.6.23.noarch/drivers/ssb/pci.c
---- linux-2.6.23.noarch/drivers/ssb/pci.c.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-12-17 17:44:53.000000000 -0500
+--- linux-2.6.23.noarch/drivers/ssb/pci.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-12-21 11:47:25.000000000 -0500
 @@ -212,29 +212,29 @@ static inline u8 ssb_crc8(u8 crc, u8 dat
  	return t[crc ^ data];
  }
@@ -68554,9 +73623,9 @@
  		err = -EINVAL;
  		goto out_kfree;
 diff -up linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig	2007-12-17 17:44:47.000000000 -0500
-+++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2007-12-17 17:44:53.000000000 -0500
-@@ -333,3 +333,20 @@ Why:	This driver has been marked obsolet
+--- linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig	2007-12-21 10:43:26.000000000 -0500
++++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2007-12-21 11:57:47.000000000 -0500
+@@ -333,3 +333,28 @@ Why:	This driver has been marked obsolet
  Who:	Stephen Hemminger <shemminger at linux-foundation.org>
  
  ---------------------------
@@ -68570,10 +73639,18 @@
 +
 +---------------------------
 +
-+What:	iee80211 softmac wireless networking component
++What:	ieee80211 softmac wireless networking component
 +When:	2.6.26 (or after removal of bcm43xx and port of zd1211rw to mac80211)
 +Files:	net/ieee80211/softmac
 +Why:	No in-kernel drivers will depend on it any longer.
 +Who:	John W. Linville <linville at tuxdriver.com>
 +
 +---------------------------
++
++What:	rc80211-simple rate control algorithm for mac80211
++When:	2.6.26
++Files:	net/mac80211/rc80211-simple.c
++Why:	This algorithm was provided for reference but always exhibited bad
++	responsiveness and performance and has some serious flaws. It has been
++	replaced by rc80211-pid.
++Who:	Stefano Brivio <stefano.brivio at polimi.it>

linux-2.6-wireless.patch:

Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless.patch,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- linux-2.6-wireless.patch	17 Dec 2007 23:04:28 -0000	1.14
+++ linux-2.6-wireless.patch	21 Dec 2007 17:35:24 -0000	1.15
@@ -1,386 +1,323 @@
-diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-17 15:59:19.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-12-17 17:23:03.000000000 -0500
-@@ -2489,6 +2489,12 @@ M:	mtk.manpages at gmail.com
- W:	ftp://ftp.kernel.org/pub/linux/docs/manpages
- S:	Maintained
- 
-+MARVELL LIBERTAS WIRELESS DRIVER
-+P:	Dan Williams
-+M:	dcbw at redhat.com
-+L:	libertas-dev at lists.infradead.org
-+S:	Maintained
-+
- MARVELL MV643XX ETHERNET DRIVER
- P:	Dale Farnsworth
- M:	dale at farnsworth.org
-diff -up linux-2.6.23.noarch/net/mac80211/ieee80211_rate.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211_rate.c
---- linux-2.6.23.noarch/net/mac80211/ieee80211_rate.c.orig	2007-12-17 16:00:08.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211_rate.c	2007-12-17 17:23:10.000000000 -0500
-@@ -33,6 +33,7 @@ int ieee80211_rate_control_register(stru
- 		if (!strcmp(alg->ops->name, ops->name)) {
- 			/* don't register an algorithm twice */
- 			WARN_ON(1);
-+			mutex_unlock(&rate_ctrl_mutex);
- 			return -EALREADY;
- 		}
- 	}
-@@ -59,11 +60,11 @@ void ieee80211_rate_control_unregister(s
- 	list_for_each_entry(alg, &rate_ctrl_algs, list) {
- 		if (alg->ops == ops) {
- 			list_del(&alg->list);
-+			kfree(alg);
- 			break;
- 		}
+diff -up linux-2.6.23.noarch/net/mac80211/rx.c.orig linux-2.6.23.noarch/net/mac80211/rx.c
+--- linux-2.6.23.noarch/net/mac80211/rx.c.orig	2007-12-21 10:56:14.000000000 -0500
++++ linux-2.6.23.noarch/net/mac80211/rx.c	2007-12-21 10:56:21.000000000 -0500
+@@ -1443,6 +1443,7 @@ void __ieee80211_rx(struct ieee80211_hw 
+ 	struct ieee80211_sub_if_data *prev = NULL;
+ 	struct sk_buff *skb_new;
+ 	u8 *bssid;
++	int hdrlen;
+ 
+ 	/*
+ 	 * key references and virtual interfaces are protected using RCU
+@@ -1472,6 +1473,18 @@ void __ieee80211_rx(struct ieee80211_hw 
+ 	rx.fc = le16_to_cpu(hdr->frame_control);
+ 	type = rx.fc & IEEE80211_FCTL_FTYPE;
+ 
++	/*
++	 * Drivers are required to align the payload data to a four-byte
++	 * boundary, so the last two bits of the address where it starts
++	 * may not be set. The header is required to be directly before
++	 * the payload data, padding like atheros hardware adds which is
++	 * inbetween the 802.11 header and the payload is not supported,
++	 * the driver is required to move the 802.11 header further back
++	 * in that case.
++	 */
++	hdrlen = ieee80211_get_hdrlen(rx.fc);
++	WARN_ON_ONCE(((unsigned long)(skb->data + hdrlen)) & 3);
++
+ 	if (type == IEEE80211_FTYPE_DATA || type == IEEE80211_FTYPE_MGMT)
+ 		local->dot11ReceivedFragmentCount++;
+ 
+diff -up linux-2.6.23.noarch/net/mac80211/sta_info.c.orig linux-2.6.23.noarch/net/mac80211/sta_info.c
+--- linux-2.6.23.noarch/net/mac80211/sta_info.c.orig	2007-12-21 10:56:14.000000000 -0500
++++ linux-2.6.23.noarch/net/mac80211/sta_info.c	2007-12-21 10:56:21.000000000 -0500
+@@ -14,6 +14,7 @@
+ #include <linux/slab.h>
+ #include <linux/skbuff.h>
+ #include <linux/if_arp.h>
++#include <linux/timer.h>
+ 
+ #include <net/mac80211.h>
+ #include "ieee80211_i.h"
+@@ -306,7 +307,8 @@ static void sta_info_cleanup(unsigned lo
  	}
- 	mutex_unlock(&rate_ctrl_mutex);
--	kfree(alg);
+ 	read_unlock_bh(&local->sta_lock);
+ 
+-	local->sta_cleanup.expires = jiffies + STA_INFO_CLEANUP_INTERVAL;
++	local->sta_cleanup.expires =
++		round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL);
+ 	add_timer(&local->sta_cleanup);
  }
- EXPORT_SYMBOL(ieee80211_rate_control_unregister);
  
-diff -up linux-2.6.23.noarch/net/mac80211/ieee80211.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211.c
---- linux-2.6.23.noarch/net/mac80211/ieee80211.c.orig	2007-12-17 16:00:08.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211.c	2007-12-17 17:23:10.000000000 -0500
-@@ -427,7 +427,6 @@ static const struct header_ops ieee80211
- void ieee80211_if_setup(struct net_device *dev)
- {
- 	ether_setup(dev);
--	dev->header_ops = &ieee80211_header_ops;
- 	dev->hard_start_xmit = ieee80211_subif_start_xmit;
- 	dev->wireless_handlers = &ieee80211_iw_handler_def;
- 	dev->set_multicast_list = ieee80211_set_multicast_list;
-diff -up linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c
---- linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c.orig	2007-12-17 16:00:08.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211_sta.c	2007-12-17 17:23:10.000000000 -0500
-@@ -808,12 +808,8 @@ static void ieee80211_associated(struct 
- 		sta_info_put(sta);
- 	}
- 	if (disassoc) {
--		union iwreq_data wrqu;
--		memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
--		wrqu.ap_addr.sa_family = ARPHRD_ETHER;
--		wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
--		mod_timer(&ifsta->timer, jiffies +
--				      IEEE80211_MONITORING_INTERVAL + 30 * HZ);
-+		ifsta->state = IEEE80211_DISABLED;
-+		ieee80211_set_associated(dev, ifsta, 0);
- 	} else {
- 		mod_timer(&ifsta->timer, jiffies +
- 				      IEEE80211_MONITORING_INTERVAL);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/main.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43/main.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43/main.c	2007-12-17 17:23:03.000000000 -0500
-@@ -2163,7 +2163,6 @@ static void b43_mgmtframe_txantenna(stru
- static void b43_chip_exit(struct b43_wldev *dev)
+@@ -345,7 +347,8 @@ void sta_info_init(struct ieee80211_loca
+ 	INIT_LIST_HEAD(&local->sta_list);
+ 
+ 	init_timer(&local->sta_cleanup);
+-	local->sta_cleanup.expires = jiffies + STA_INFO_CLEANUP_INTERVAL;
++	local->sta_cleanup.expires =
++		round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL);
+ 	local->sta_cleanup.data = (unsigned long) local;
+ 	local->sta_cleanup.function = sta_info_cleanup;
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-21 10:56:25.000000000 -0500
+@@ -38,6 +38,8 @@ static struct usb_device_id rtl8187_tabl
+ 	{USB_DEVICE(0x0846, 0x6a00)},
+ 	/* HP */
+ 	{USB_DEVICE(0x03f0, 0xca02)},
++	/* Sitecom */
++	{USB_DEVICE(0x0df6, 0x000d)},
+ 	{}
+ };
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 10:56:24.000000000 -0500
+@@ -587,15 +587,66 @@ config ADM8211
+ config P54_COMMON
+ 	tristate "Softmac Prism54 support"
+ 	depends on MAC80211 && WLAN_80211 && FW_LOADER && EXPERIMENTAL
++	---help---
++	  This is common code for isl38xx based cards.
++	  This module does nothing by itself - the USB/PCI frontends
++	  also need to be enabled in order to support any devices.
++
++	  These devices require softmac firmware which can be found at
++	  http://prism54.org/
++
++	  If you choose to build a module, it'll be called p54common.
+ 
+ config P54_USB
+ 	tristate "Prism54 USB support"
+ 	depends on P54_COMMON && USB
+ 	select CRC32
++	---help---
++	  This driver is for USB isl38xx based wireless cards.
++	  These are USB based adapters found in devices such as:
++
++	  3COM 3CRWE254G72
++	  SMC 2862W-G
++	  Accton 802.11g WN4501 USB
++	  Siemens Gigaset USB
++	  Netgear WG121
++	  Netgear WG111
++	  Medion 40900, Roper Europe
++	  Shuttle PN15, Airvast WM168g, IOGear GWU513
++	  Linksys WUSB54G
++	  Linksys WUSB54G Portable
++	  DLink DWL-G120 Spinnaker
++	  DLink DWL-G122
++	  Belkin F5D7050 ver 1000
++	  Cohiba Proto board
++	  SMC 2862W-G version 2
++	  U.S. Robotics U5 802.11g Adapter
++	  FUJITSU E-5400 USB D1700
++	  Sagem XG703A
++	  DLink DWL-G120 Cohiba
++	  Spinnaker Proto board
++	  Linksys WUSB54AG
++	  Inventel UR054G
++	  Spinnaker DUT
++
++	  These devices require softmac firmware which can be found at
++	  http://prism54.org/
++
++	  If you choose to build a module, it'll be called p54usb.
+ 
+ config P54_PCI
+ 	tristate "Prism54 PCI support"
+ 	depends on P54_COMMON && PCI
++	---help---
++	  This driver is for PCI isl38xx based wireless cards.
++	  This driver supports most devices that are supported by the
++	  fullmac prism54 driver plus many devices which are not
++	  supported by the fullmac driver/firmware.
++
++	  This driver requires softmac firmware which can be found at
++	  http://prism54.org/
++
++	  If you choose to build a module, it'll be called p54pci.
+ 
+ source "drivers/net/wireless/iwlwifi/Kconfig"
+ source "drivers/net/wireless/hostap/Kconfig"
+diff -up linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c
+--- linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c	2007-12-21 10:56:24.000000000 -0500
+@@ -1233,9 +1233,19 @@ static ssize_t show_event_log(struct dev
  {
- 	b43_radio_turn_off(dev, 1);
--	b43_leds_exit(dev);
- 	b43_gpio_cleanup(dev);
- 	/* firmware is released later */
- }
-@@ -2191,11 +2190,10 @@ static int b43_chip_init(struct b43_wlde
- 	err = b43_gpio_init(dev);
- 	if (err)
- 		goto out;	/* firmware is released later */
--	b43_leds_init(dev);
- 
- 	err = b43_upload_initvals(dev);
- 	if (err)
--		goto err_leds_exit;
-+		goto err_gpio_clean;
- 	b43_radio_turn_on(dev);
- 
- 	b43_write16(dev, 0x03E6, 0x0000);
-@@ -2271,8 +2269,7 @@ out:
- 
- err_radio_off:
- 	b43_radio_turn_off(dev, 1);
--err_leds_exit:
--	b43_leds_exit(dev);
-+err_gpio_clean:
- 	b43_gpio_cleanup(dev);
- 	return err;
+ 	struct ipw_priv *priv = dev_get_drvdata(d);
+ 	u32 log_len = ipw_get_event_log_len(priv);
+-	struct ipw_event log[log_len];
++	u32 log_size;
++	struct ipw_event *log;
+ 	u32 len = 0, i;
+ 
++	/* not using min() because of its strict type checking */
++	log_size = PAGE_SIZE / sizeof(*log) > log_len ?
++			sizeof(*log) * log_len : PAGE_SIZE;
++	log = kzalloc(log_size, GFP_KERNEL);
++	if (!log) {
++		IPW_ERROR("Unable to allocate memory for log\n");
++		return 0;
++	}
++	log_len = log_size / sizeof(*log);
+ 	ipw_capture_event_log(priv, log_len, log);
+ 
+ 	len += snprintf(buf + len, PAGE_SIZE - len, "%08X", log_len);
+@@ -1244,6 +1254,7 @@ static ssize_t show_event_log(struct dev
+ 				"\n%08X%08X%08X",
+ 				log[i].time, log[i].event, log[i].data);
+ 	len += snprintf(buf + len, PAGE_SIZE - len, "\n");
++	kfree(log);
+ 	return len;
  }
-@@ -3273,10 +3270,7 @@ static void b43_wireless_core_exit(struc
- 		return;
- 	b43_set_status(dev, B43_STAT_UNINIT);
- 
--	mutex_unlock(&dev->wl->mutex);
--	b43_rfkill_exit(dev);
--	mutex_lock(&dev->wl->mutex);
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2007-12-21 10:56:24.000000000 -0500
+@@ -6601,8 +6601,6 @@ static void __iwl_down(struct iwl_priv *
+ 	/* Unblock any waiting calls */
+ 	wake_up_interruptible_all(&priv->wait_command_queue);
+ 
+-	iwl_cancel_deferred_work(priv);
 -
-+	b43_leds_exit(dev);
- 	b43_rng_exit(dev->wl);
- 	b43_pio_free(dev);
- 	b43_dma_free(dev);
-@@ -3405,12 +3399,12 @@ static int b43_wireless_core_init(struct
- 	memset(wl->mac_addr, 0, ETH_ALEN);
- 	b43_upload_card_macaddress(dev);
- 	b43_security_init(dev);
--	b43_rfkill_init(dev);
- 	b43_rng_init(wl);
- 
- 	b43_set_status(dev, B43_STAT_INITIALIZED);
- 
--      out:
-+	b43_leds_init(dev);
-+out:
- 	return err;
- 
-       err_chip_exit:
-@@ -3499,6 +3493,10 @@ static int b43_start(struct ieee80211_hw
- 	int did_init = 0;
- 	int err = 0;
- 
-+	/* First register RFkill.
-+	 * LEDs that are registered later depend on it. */
-+	b43_rfkill_init(dev);
-+
- 	mutex_lock(&wl->mutex);
- 
- 	if (b43_status(dev) < B43_STAT_INITIALIZED) {
-@@ -3528,6 +3526,8 @@ static void b43_stop(struct ieee80211_hw
- 	struct b43_wl *wl = hw_to_b43_wl(hw);
- 	struct b43_wldev *dev = wl->current_dev;
- 
-+	b43_rfkill_exit(dev);
-+
- 	mutex_lock(&wl->mutex);
- 	if (b43_status(dev) >= B43_STAT_STARTED)
- 		b43_wireless_core_stop(dev);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/leds.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/leds.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43/leds.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43/leds.c	2007-12-17 17:23:03.000000000 -0500
-@@ -163,6 +163,9 @@ static void b43_map_led(struct b43_wldev
- 		b43_register_led(dev, &dev->led_radio, name,
- 				 b43_rfkill_led_name(dev),
- 				 led_index, activelow);
-+		/* Sync the RF-kill LED state with the switch state. */
-+		if (dev->radio_hw_enable)
-+			b43_led_turn_on(dev, led_index, activelow);
- 		break;
- 	case B43_LED_WEIRD:
- 	case B43_LED_ASSOC:
-@@ -232,4 +235,5 @@ void b43_leds_exit(struct b43_wldev *dev
- 	b43_unregister_led(&dev->led_tx);
- 	b43_unregister_led(&dev->led_rx);
- 	b43_unregister_led(&dev->led_assoc);
-+	b43_unregister_led(&dev->led_radio);
+ 	/* Wipe out the EXIT_PENDING status bit if we are not actually
+ 	 * exiting the module */
+ 	if (!exit_pending)
+@@ -6677,6 +6675,8 @@ static void iwl_down(struct iwl_priv *pr
+ 	mutex_lock(&priv->mutex);
+ 	__iwl_down(priv);
+ 	mutex_unlock(&priv->mutex);
++
++	iwl_cancel_deferred_work(priv);
  }
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/rfkill.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/rfkill.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43/rfkill.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43/rfkill.c	2007-12-17 17:23:03.000000000 -0500
-@@ -25,6 +25,8 @@
- #include "rfkill.h"
- #include "b43.h"
- 
-+#include <linux/kmod.h>
-+
- 
- /* Returns TRUE, if the radio is enabled in hardware. */
- static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
-@@ -50,7 +52,10 @@ static void b43_rfkill_poll(struct input
- 	bool report_change = 0;
- 
- 	mutex_lock(&wl->mutex);
--	B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);
-+	if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED)) {
-+		mutex_unlock(&wl->mutex);
-+		return;
-+	}
- 	enabled = b43_is_hw_radio_enabled(dev);
- 	if (unlikely(enabled != dev->radio_hw_enable)) {
- 		dev->radio_hw_enable = enabled;
-@@ -60,8 +65,12 @@ static void b43_rfkill_poll(struct input
- 	}
- 	mutex_unlock(&wl->mutex);
  
--	if (unlikely(report_change))
--		input_report_key(poll_dev->input, KEY_WLAN, enabled);
-+	/* send the radio switch event to the system - note both a key press
-+	 * and a release are required */
-+	if (unlikely(report_change)) {
-+		input_report_key(poll_dev->input, KEY_WLAN, 1);
-+		input_report_key(poll_dev->input, KEY_WLAN, 0);
-+	}
- }
+ #define MAX_HW_RESTARTS 5
+@@ -9174,10 +9174,9 @@ static void iwl_pci_remove(struct pci_de
  
- /* Called when the RFKILL toggled in software. */
-@@ -69,13 +78,15 @@ static int b43_rfkill_soft_toggle(void *
- {
- 	struct b43_wldev *dev = data;
- 	struct b43_wl *wl = dev->wl;
--	int err = 0;
-+	int err = -EBUSY;
- 
- 	if (!wl->rfkill.registered)
- 		return 0;
- 
- 	mutex_lock(&wl->mutex);
--	B43_WARN_ON(b43_status(dev) < B43_STAT_INITIALIZED);
-+	if (b43_status(dev) < B43_STAT_INITIALIZED)
-+		goto out_unlock;
-+	err = 0;
- 	switch (state) {
- 	case RFKILL_STATE_ON:
- 		if (!dev->radio_hw_enable) {
-@@ -133,9 +144,25 @@ void b43_rfkill_init(struct b43_wldev *d
- 	rfk->poll_dev->poll = b43_rfkill_poll;
- 	rfk->poll_dev->poll_interval = 1000; /* msecs */
- 
-+	rfk->poll_dev->input->name = rfk->name;
-+	rfk->poll_dev->input->id.bustype = BUS_HOST;
-+	rfk->poll_dev->input->id.vendor = dev->dev->bus->boardinfo.vendor;
-+	rfk->poll_dev->input->evbit[0] = BIT(EV_KEY);
-+	set_bit(KEY_WLAN, rfk->poll_dev->input->keybit);
-+
- 	err = rfkill_register(rfk->rfkill);
- 	if (err)
- 		goto err_free_polldev;
-+
-+#ifdef CONFIG_RFKILL_INPUT_MODULE
-+	/* B43 RF-kill isn't useful without the rfkill-input subsystem.
-+	 * Try to load the module. */
-+	err = request_module("rfkill-input");
-+	if (err)
-+		b43warn(wl, "Failed to load the rfkill-input module. "
-+			"The built-in radio LED will not work.\n");
-+#endif /* CONFIG_RFKILL_INPUT */
-+
- 	err = input_register_polled_device(rfk->poll_dev);
- 	if (err)
- 		goto err_unreg_rfk;
-diff -up linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_mac.c
---- linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/zd1211rw/zd_mac.c	2007-12-17 17:23:03.000000000 -0500
-@@ -1130,6 +1130,8 @@ static void zd_mac_rx(struct zd_mac *mac
- 	__skb_trim(skb, skb->len -
- 		        (IEEE80211_FCS_LEN + sizeof(struct rx_status)));
+ 	IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n");
  
-+	ZD_ASSERT(IS_ALIGNED((unsigned long)skb->data, 4));
+-	mutex_lock(&priv->mutex);
+ 	set_bit(STATUS_EXIT_PENDING, &priv->status);
+-	__iwl_down(priv);
+-	mutex_unlock(&priv->mutex);
 +
- 	update_qual_rssi(mac, skb->data, skb->len, stats.signal,
- 		         status->signal_strength);
++	iwl_down(priv);
  
-@@ -1166,15 +1168,19 @@ static void do_rx(unsigned long mac_ptr)
- int zd_mac_rx_irq(struct zd_mac *mac, const u8 *buffer, unsigned int length)
+ 	/* Free MAC hash list for ADHOC */
+ 	for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) {
+@@ -9236,12 +9235,10 @@ static int iwl_pci_suspend(struct pci_de
  {
- 	struct sk_buff *skb;
-+	unsigned int reserved =
-+		ALIGN(max_t(unsigned int,
-+		            sizeof(struct zd_rt_hdr), ZD_PLCP_HEADER_SIZE), 4) -
-+		ZD_PLCP_HEADER_SIZE;
- 
--	skb = dev_alloc_skb(sizeof(struct zd_rt_hdr) + length);
-+	skb = dev_alloc_skb(reserved + length);
- 	if (!skb) {
- 		struct ieee80211_device *ieee = zd_mac_to_ieee80211(mac);
- 		dev_warn(zd_mac_dev(mac), "Could not allocate skb.\n");
- 		ieee->stats.rx_dropped++;
- 		return -ENOMEM;
- 	}
--	skb_reserve(skb, sizeof(struct zd_rt_hdr));
-+	skb_reserve(skb, reserved);
- 	memcpy(__skb_put(skb, length), buffer, length);
- 	skb_queue_tail(&mac->rx_queue, skb);
- 	tasklet_schedule(&mac->rx_tasklet);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-17 16:00:00.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-17 17:23:03.000000000 -0500
-@@ -264,6 +264,7 @@ config IPW2200_DEBUG
- config LIBERTAS
- 	tristate "Marvell 8xxx Libertas WLAN driver support"
- 	depends on WLAN_80211
-+	select WIRELESS_EXT
- 	select IEEE80211
- 	select FW_LOADER
- 	---help---
-diff -up linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c
---- linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c	2007-12-17 17:23:03.000000000 -0500
-@@ -10751,7 +10751,7 @@ static void ipw_bg_link_down(struct work
- 	mutex_unlock(&priv->mutex);
+ 	struct iwl_priv *priv = pci_get_drvdata(pdev);
+ 
+-	mutex_lock(&priv->mutex);
+-
+ 	set_bit(STATUS_IN_SUSPEND, &priv->status);
+ 
+ 	/* Take down the device; powers it off, etc. */
+-	__iwl_down(priv);
++	iwl_down(priv);
+ 
+ 	if (priv->mac80211_registered)
+ 		ieee80211_stop_queues(priv->hw);
+@@ -9250,8 +9247,6 @@ static int iwl_pci_suspend(struct pci_de
+ 	pci_disable_device(pdev);
+ 	pci_set_power_state(pdev, PCI_D3hot);
+ 
+-	mutex_unlock(&priv->mutex);
+-
+ 	return 0;
  }
  
--static int ipw_setup_deferred_work(struct ipw_priv *priv)
-+static int __devinit ipw_setup_deferred_work(struct ipw_priv *priv)
- {
- 	int ret = 0;
+@@ -9309,8 +9304,6 @@ static int iwl_pci_resume(struct pci_dev
  
-@@ -11600,7 +11600,8 @@ static void ipw_prom_free(struct ipw_pri
- #endif
+ 	printk(KERN_INFO "Coming out of suspend...\n");
  
+-	mutex_lock(&priv->mutex);
+-
+ 	pci_set_power_state(pdev, PCI_D0);
+ 	err = pci_enable_device(pdev);
+ 	pci_restore_state(pdev);
+@@ -9324,7 +9317,6 @@ static int iwl_pci_resume(struct pci_dev
+ 	pci_write_config_byte(pdev, 0x41, 0x00);
  
--static int ipw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
-+static int __devinit ipw_pci_probe(struct pci_dev *pdev,
-+				   const struct pci_device_id *ent)
- {
- 	int err = 0;
- 	struct net_device *net_dev;
-@@ -11767,7 +11768,7 @@ static int ipw_pci_probe(struct pci_dev 
- 	return err;
+ 	iwl_resume(priv);
+-	mutex_unlock(&priv->mutex);
+ 
+ 	return 0;
+ }
+diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
+--- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2007-12-21 10:43:36.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2007-12-21 10:56:24.000000000 -0500
+@@ -6246,8 +6246,6 @@ static void __iwl_down(struct iwl_priv *
+ 	/* Unblock any waiting calls */
+ 	wake_up_interruptible_all(&priv->wait_command_queue);
+ 
+-	iwl_cancel_deferred_work(priv);
+-
+ 	/* Wipe out the EXIT_PENDING status bit if we are not actually
+ 	 * exiting the module */
+ 	if (!exit_pending)
+@@ -6322,6 +6320,8 @@ static void iwl_down(struct iwl_priv *pr
+ 	mutex_lock(&priv->mutex);
+ 	__iwl_down(priv);
+ 	mutex_unlock(&priv->mutex);
++
++	iwl_cancel_deferred_work(priv);
  }
  
--static void ipw_pci_remove(struct pci_dev *pdev)
-+static void __devexit ipw_pci_remove(struct pci_dev *pdev)
+ #define MAX_HW_RESTARTS 5
+@@ -8580,10 +8580,9 @@ static void iwl_pci_remove(struct pci_de
+ 
+ 	IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n");
+ 
+-	mutex_lock(&priv->mutex);
+ 	set_bit(STATUS_EXIT_PENDING, &priv->status);
+-	__iwl_down(priv);
+-	mutex_unlock(&priv->mutex);
++
++	iwl_down(priv);
+ 
+ 	/* Free MAC hash list for ADHOC */
+ 	for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) {
+@@ -8642,12 +8641,10 @@ static int iwl_pci_suspend(struct pci_de
  {
- 	struct ipw_priv *priv = pci_get_drvdata(pdev);
- 	struct list_head *p, *q;
-diff -up linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c.orig linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c
---- linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c.orig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_debugfs.c	2007-12-17 17:23:03.000000000 -0500
-@@ -219,7 +219,7 @@ static ssize_t tsf_write_file(struct fil
- 	ssize_t buf_size;
- 	ssize_t res;
- 	unsigned long flags;
--	u64 tsf;
-+	unsigned long long tsf;
+ 	struct iwl_priv *priv = pci_get_drvdata(pdev);
  
- 	buf_size = min(count, sizeof (really_big_buffer) - 1);
- 	down(&big_buffer_sem);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
---- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2007-12-17 17:23:03.000000000 -0500
-@@ -5059,8 +5059,10 @@ static void iwl_irq_tasklet(struct iwl_p
- 		 *   when we loaded driver, and is now set to "enable".
- 		 * After we're Alive, RF_KILL gets handled by
- 		 *   iwl_rx_card_state_notif() */
--		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))
-+		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {
-+			clear_bit(STATUS_RF_KILL_HW, &priv->status);
- 			queue_work(priv->workqueue, &priv->restart);
-+		}
+-	mutex_lock(&priv->mutex);
+-
+ 	set_bit(STATUS_IN_SUSPEND, &priv->status);
  
- 		handled |= CSR_INT_BIT_RF_KILL;
- 	}
-@@ -6527,6 +6529,7 @@ static void iwl_alive_start(struct iwl_p
- 		mutex_lock(&priv->mutex);
+ 	/* Take down the device; powers it off, etc. */
+-	__iwl_down(priv);
++	iwl_down(priv);
+ 
+ 	if (priv->mac80211_registered)
+ 		ieee80211_stop_queues(priv->hw);
+@@ -8656,8 +8653,6 @@ static int iwl_pci_suspend(struct pci_de
+ 	pci_disable_device(pdev);
+ 	pci_set_power_state(pdev, PCI_D3hot);
  
- 		if (rc) {
-+			iwl_rate_control_unregister(priv->hw);
- 			IWL_ERROR("Failed to register network "
- 				  "device (error %d)\n", rc);
- 			return;
-diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
---- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2007-12-17 16:00:01.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2007-12-17 17:23:03.000000000 -0500
-@@ -4743,8 +4743,10 @@ static void iwl_irq_tasklet(struct iwl_p
- 		 *   when we loaded driver, and is now set to "enable".
- 		 * After we're Alive, RF_KILL gets handled by
- 		 *   iwl_rx_card_state_notif() */
--		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status))
-+		if (!hw_rf_kill && !test_bit(STATUS_ALIVE, &priv->status)) {
-+			clear_bit(STATUS_RF_KILL_HW, &priv->status);
- 			queue_work(priv->workqueue, &priv->restart);
-+		}
+-	mutex_unlock(&priv->mutex);
+-
+ 	return 0;
+ }
  
- 		handled |= CSR_INT_BIT_RF_KILL;
- 	}
-@@ -6171,6 +6173,7 @@ static void iwl_alive_start(struct iwl_p
- 		mutex_lock(&priv->mutex);
+@@ -8715,8 +8710,6 @@ static int iwl_pci_resume(struct pci_dev
+ 
+ 	printk(KERN_INFO "Coming out of suspend...\n");
  
- 		if (rc) {
-+			iwl_rate_control_unregister(priv->hw);
- 			IWL_ERROR("Failed to register network "
- 				  "device (error %d)\n", rc);
- 			return;
+-	mutex_lock(&priv->mutex);
+-
+ 	pci_set_power_state(pdev, PCI_D0);
+ 	err = pci_enable_device(pdev);
+ 	pci_restore_state(pdev);
+@@ -8730,7 +8723,6 @@ static int iwl_pci_resume(struct pci_dev
+ 	pci_write_config_byte(pdev, 0x41, 0x00);
+ 
+ 	iwl_resume(priv);
+-	mutex_unlock(&priv->mutex);
+ 
+ 	return 0;
+ }




More information about the fedora-extras-commits mailing list