rpms/kernel/devel kernel.spec, 1.318, 1.319 linux-2.6-ath5k.patch, 1.7, 1.8 linux-2.6-rtl8180.patch, 1.2, 1.3 linux-2.6-wireless-pending.patch, 1.16, 1.17 linux-2.6-wireless.patch, 1.13, 1.14

John W. Linville (linville) fedora-extras-commits at redhat.com
Mon Dec 17 23:05:15 UTC 2007


Author: linville

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

Modified Files:
	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:
Some wireless stack and driver fixes headed towards 2.6.24 ; Some wireless stack and driver bits destined for 2.6.25


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.318
retrieving revision 1.319
diff -u -r1.318 -r1.319
--- kernel.spec	17 Dec 2007 22:34:49 -0000	1.318
+++ kernel.spec	17 Dec 2007 23:04:26 -0000	1.319
@@ -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
 
@@ -1737,6 +1737,10 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL} -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf %{with_xen} xen
 
 %changelog
+* Mon Dec 17 2007 John W. Linville <linville at redhat.com>
+- Some wireless stack and driver fixes headed towards 2.6.24
+- Some wireless stack and driver bits destined for 2.6.25
+
 * Mon Dec 17 2007 Kyle McMartin <kmcmartin at redhat.com>
 - 2.6.24-rc5-git4
 

linux-2.6-ath5k.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.7 -r 1.8 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.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- linux-2.6-ath5k.patch	4 Dec 2007 22:03:28 -0000	1.7
+++ linux-2.6-ath5k.patch	17 Dec 2007 23:04:26 -0000	1.8
@@ -1,7 +1,37 @@
+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
+@@ -646,6 +646,17 @@ M:	ecashin at coraid.com
+ W:	http://www.coraid.com/support/linux
+ S:	Supported
+ 
++ATHEROS ATH5K WIRELESS DRIVER
++P:	Jiri Slaby
++M:	jirislaby at gmail.com
++P:	Nick Kossifidis
++M:	mickflemm at gmail.com
++P:	Luis R. Rodriguez
++M:	mcgrof at gmail.com
++L:	linux-wireless at vger.kernel.org
++L:	ath5k-devel at lists.ath5k.org
++S:	Maintained
++
+ ATL1 ETHERNET DRIVER
+ 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
+@@ -61,3 +61,5 @@ obj-$(CONFIG_RT2X00)	+= rt2x00/
+ obj-$(CONFIG_P54_COMMON)	+= p54common.o
+ obj-$(CONFIG_P54_USB)		+= p54usb.o
+ obj-$(CONFIG_P54_PCI)		+= p54pci.o
++
++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-04 15:09:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-04 15:09:44.000000000 -0500
-@@ -604,6 +604,24 @@ config P54_PCI
+--- 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
  
@@ -26,237 +56,12 @@
  source "drivers/net/wireless/iwlwifi/Kconfig"
  source "drivers/net/wireless/hostap/Kconfig"
  source "drivers/net/wireless/bcm43xx/Kconfig"
-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-04 15:09:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-04 15:09:44.000000000 -0500
-@@ -61,3 +61,5 @@ obj-$(CONFIG_RT2X00)	+= rt2x00/
- obj-$(CONFIG_P54_COMMON)	+= p54common.o
- obj-$(CONFIG_P54_USB)		+= p54usb.o
- obj-$(CONFIG_P54_PCI)		+= p54pci.o
-+
-+obj-$(CONFIG_ATH5K)	+= ath5k/
-diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h
---- /dev/null	2007-11-21 18:00:15.874485932 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h	2007-12-04 15:09:44.000000000 -0500
-@@ -0,0 +1,212 @@
-+/*
-+ * Copyright (c) 2007 Bruno Randolf <bruno at thinktube.com>
-+ *
-+ *  This file is free software: you may copy, redistribute and/or modify it
-+ *  under the terms of the GNU General Public License as published by the
-+ *  Free Software Foundation, either version 2 of the License, or (at your
-+ *  option) any later version.
-+ *
-+ *  This file is distributed in the hope that it will be useful, but
-+ *  WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ *  General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-+ *
-+ *
-+ * This file incorporates work covered by the following copyright and
-+ * permission notice:
-+ *
-+ * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
-+ * Copyright (c) 2004-2005 Atheros Communications, Inc.
-+ * Copyright (c) 2006 Devicescape Software, Inc.
-+ * Copyright (c) 2007 Jiri Slaby <jirislaby at gmail.com>
-+ * Copyright (c) 2007 Luis R. Rodriguez <mcgrof at winlab.rutgers.edu>
-+ *
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ *    notice, this list of conditions and the following disclaimer,
-+ *    without modification.
-+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
-+ *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
-+ *    redistribution must be conditioned upon including a substantially
-+ *    similar Disclaimer requirement for further binary redistribution.
-+ * 3. Neither the names of the above-listed copyright holders nor the names
-+ *    of any contributors may be used to endorse or promote products derived
-+ *    from this software without specific prior written permission.
-+ *
-+ * Alternatively, this software may be distributed under the terms of the
-+ * GNU General Public License ("GPL") version 2 as published by the Free
-+ * Software Foundation.
-+ *
-+ * NO WARRANTY
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
-+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
-+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-+ * THE POSSIBILITY OF SUCH DAMAGES.
-+ */
-+
-+#ifndef _ATH5K_DEBUG_H
-+#define _ATH5K_DEBUG_H
-+
-+/* set this to 1 for debugging output */
-+#ifndef ATH5K_DEBUG
-+#define ATH5K_DEBUG	0
-+#endif
-+
-+struct ath5k_softc;
-+struct ath5k_hw;
-+struct ieee80211_hw_mode;
-+struct sk_buff;
-+struct ath5k_buf;
-+
-+struct ath5k_dbg_info {
-+	unsigned int		level;		/* debug level */
-+	/* debugfs entries */
-+	struct dentry		*debugfs_phydir;
-+	struct dentry		*debugfs_debug;
-+};
-+
-+/**
-+ * enum ath5k_debug_level - ath5k debug level
-+ *
-+ * @ATH5K_DEBUG_RESET: reset processing
-+ * @ATH5K_DEBUG_INTR: interrupt handling
-+ * @ATH5K_DEBUG_MODE: mode init/setup
-+ * @ATH5K_DEBUG_XMIT: basic xmit operation
-+ * @ATH5K_DEBUG_BEACON: beacon handling
-+ * @ATH5K_DEBUG_BEACON_PROC: beacon ISR proc
-+ * @ATH5K_DEBUG_CALIBRATE: periodic calibration
-+ * @ATH5K_DEBUG_TXPOWER: transmit power setting
-+ * @ATH5K_DEBUG_LED: led management
-+ * @ATH5K_DEBUG_DUMP_RX: print received skb content
-+ * @ATH5K_DEBUG_DUMP_TX: print transmit skb content
-+ * @ATH5K_DEBUG_DUMPMODES: dump modes
-+ * @ATH5K_DEBUG_TRACE: trace function calls
-+ * @ATH5K_DEBUG_FATAL: fatal errors
-+ * @ATH5K_DEBUG_ANY: show at any debug level
-+ *
-+ * The debug level is used to control the amount and type of debugging output
-+ * we want to see. The debug level is given in calls to ATH5K_DBG to specify
-+ * where the message should appear, and the user can control the debugging
-+ * messages he wants to see, either by the module parameter 'debug' on module
-+ * load, or dynamically by using debugfs 'ath5k/phyX/debug'. these levels can
-+ * be combined together by bitwise OR.
-+ */
-+enum ath5k_debug_level {
-+	ATH5K_DEBUG_RESET	= 0x00000001,
-+	ATH5K_DEBUG_INTR	= 0x00000002,
-+	ATH5K_DEBUG_MODE	= 0x00000004,
-+	ATH5K_DEBUG_XMIT	= 0x00000008,
-+	ATH5K_DEBUG_BEACON	= 0x00000010,
-+	ATH5K_DEBUG_BEACON_PROC	= 0x00000020,
-+	ATH5K_DEBUG_CALIBRATE	= 0x00000100,
-+	ATH5K_DEBUG_TXPOWER	= 0x00000200,
-+	ATH5K_DEBUG_LED		= 0x00000400,
-+	ATH5K_DEBUG_DUMP_RX	= 0x00001000,
-+	ATH5K_DEBUG_DUMP_TX	= 0x00002000,
-+	ATH5K_DEBUG_DUMPMODES	= 0x00004000,
-+	ATH5K_DEBUG_TRACE	= 0x00010000,
-+	ATH5K_DEBUG_FATAL	= 0x80000000,
-+	ATH5K_DEBUG_ANY		= 0xffffffff
-+};
-+
-+#if ATH5K_DEBUG
-+
-+#define ATH5K_TRACE(_sc) do { \
-+	if (unlikely((_sc)->debug.level & ATH5K_DEBUG_TRACE)) \
-+		printk(KERN_DEBUG "ath5k trace %s:%d\n", __func__, __LINE__); \
-+	} while (0)
-+
-+#define ATH5K_DBG(_sc, _m, _fmt, ...) do { \
-+	if (unlikely((_sc)->debug.level & (_m) && net_ratelimit())) \
[...28656 lines suppressed...]
-+extern void ath5k_hw_set_mcast_filter(struct ath5k_hw *ah, u32 filter0, u32 filter1);
-+extern int ath5k_hw_set_mcast_filterindex(struct ath5k_hw *ah, u32 index);
-+extern int ath5k_hw_clear_mcast_filter_idx(struct ath5k_hw *ah, u32 index);
-+extern u32 ath5k_hw_get_rx_filter(struct ath5k_hw *ah);
-+extern void ath5k_hw_set_rx_filter(struct ath5k_hw *ah, u32 filter);
-+/* Beacon related functions */
-+extern u32 ath5k_hw_get_tsf32(struct ath5k_hw *ah);
-+extern u64 ath5k_hw_get_tsf64(struct ath5k_hw *ah);
-+extern void ath5k_hw_reset_tsf(struct ath5k_hw *ah);
-+extern void ath5k_hw_init_beacon(struct ath5k_hw *ah, u32 next_beacon, u32 interval);
-+extern int ath5k_hw_set_beacon_timers(struct ath5k_hw *ah, const struct ath5k_beacon_state *state);
-+extern void ath5k_hw_reset_beacon(struct ath5k_hw *ah);
-+extern int ath5k_hw_wait_for_beacon(struct ath5k_hw *ah, unsigned long phys_addr);
-+extern void ath5k_hw_update_mib_counters(struct ath5k_hw *ah, struct ath5k_mib_stats *statistics);
-+/* ACK bit rate */
-+void ath5k_hw_set_ack_bitrate_high(struct ath5k_hw *ah, bool high);
-+/* ACK/CTS Timeouts */
-+extern int ath5k_hw_set_ack_timeout(struct ath5k_hw *ah, unsigned int timeout);
-+extern unsigned int ath5k_hw_get_ack_timeout(struct ath5k_hw *ah);
-+extern int ath5k_hw_set_cts_timeout(struct ath5k_hw *ah, unsigned int timeout);
-+extern unsigned int ath5k_hw_get_cts_timeout(struct ath5k_hw *ah);
-+/* Key table (WEP) functions */
-+extern int ath5k_hw_reset_key(struct ath5k_hw *ah, u16 entry);
-+extern int ath5k_hw_is_key_valid(struct ath5k_hw *ah, u16 entry);
-+extern int ath5k_hw_set_key(struct ath5k_hw *ah, u16 entry, const struct ieee80211_key_conf *key, const u8 *mac);
-+extern int ath5k_hw_set_key_lladdr(struct ath5k_hw *ah, u16 entry, const u8 *mac);
-+/* Queue Control Unit, DFS Control Unit Functions */
-+extern int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum ath5k_tx_queue queue_type, struct ath5k_txq_info *queue_info);
-+extern int ath5k_hw_setup_tx_queueprops(struct ath5k_hw *ah, int queue, const struct ath5k_txq_info *queue_info);
-+extern int ath5k_hw_get_tx_queueprops(struct ath5k_hw *ah, int queue, struct ath5k_txq_info *queue_info);
-+extern void ath5k_hw_release_tx_queue(struct ath5k_hw *ah, unsigned int queue);
-+extern int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue);
-+extern u32 ath5k_hw_num_tx_pending(struct ath5k_hw *ah, unsigned int queue);
-+extern int ath5k_hw_set_slot_time(struct ath5k_hw *ah, unsigned int slot_time);
-+extern unsigned int ath5k_hw_get_slot_time(struct ath5k_hw *ah);
-+/* Hardware Descriptor Functions */
-+extern int ath5k_hw_setup_rx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc, u32 size, unsigned int flags);
-+/* GPIO Functions */
-+extern void ath5k_hw_set_ledstate(struct ath5k_hw *ah, unsigned int state);
-+extern int ath5k_hw_set_gpio_output(struct ath5k_hw *ah, u32 gpio);
-+extern int ath5k_hw_set_gpio_input(struct ath5k_hw *ah, u32 gpio);
-+extern u32 ath5k_hw_get_gpio(struct ath5k_hw *ah, u32 gpio);
-+extern int ath5k_hw_set_gpio(struct ath5k_hw *ah, u32 gpio, u32 val);
-+extern void ath5k_hw_set_gpio_intr(struct ath5k_hw *ah, unsigned int gpio, u32 interrupt_level);
-+/* Regulatory Domain/Channels Setup */
-+extern u16 ath5k_get_regdomain(struct ath5k_hw *ah);
-+/* Misc functions */
-+extern int ath5k_hw_get_capability(struct ath5k_hw *ah, enum ath5k_capability_type cap_type, u32 capability, u32 *result);
++/*
++ * Basic regulation domain extensions for the IEEE 802.11 stack
++ */
 +
++#include <linux/kernel.h>
++#include <linux/string.h>
 +
-+/* Initial register settings functions */
-+extern int ath5k_hw_write_initvals(struct ath5k_hw *ah, u8 mode, bool change_channel);
-+/* Initialize RF */
-+extern int ath5k_hw_rfregs(struct ath5k_hw *ah, struct ieee80211_channel *channel, unsigned int mode);
-+extern int ath5k_hw_rfgain(struct ath5k_hw *ah, unsigned int freq);
-+extern enum ath5k_rfgain ath5k_hw_get_rf_gain(struct ath5k_hw *ah);
-+extern int ath5k_hw_set_rfgain_opt(struct ath5k_hw *ah);
++#include "regdom.h"
 +
++static const struct ath5k_regdommap {
++	enum ath5k_regdom dmn;
++	enum ath5k_regdom dmn5;
++	enum ath5k_regdom dmn2;
++} r_map[] = {
++	{ DMN_DEFAULT,		DMN_DEBUG,	DMN_DEBUG },
++	{ DMN_NULL_WORLD,	DMN_NULL,	DMN_WORLD },
++	{ DMN_NULL_ETSIB,	DMN_NULL,	DMN_ETSIB },
++	{ DMN_NULL_ETSIC,	DMN_NULL,	DMN_ETSIC },
++	{ DMN_FCC1_FCCA,	DMN_FCC1,	DMN_FCCA },
++	{ DMN_FCC1_WORLD,	DMN_FCC1,	DMN_WORLD },
++	{ DMN_FCC2_FCCA,	DMN_FCC2,	DMN_FCCA },
++	{ DMN_FCC2_WORLD,	DMN_FCC2,	DMN_WORLD },
++	{ DMN_FCC2_ETSIC,	DMN_FCC2,	DMN_ETSIC },
++	{ DMN_FRANCE_NULL,	DMN_ETSI3,	DMN_ETSI3 },
++	{ DMN_FCC3_FCCA,	DMN_FCC3,	DMN_WORLD },
++	{ DMN_ETSI1_WORLD,	DMN_ETSI1,	DMN_WORLD },
++	{ DMN_ETSI3_ETSIA,	DMN_ETSI3,	DMN_WORLD },
++	{ DMN_ETSI2_WORLD,	DMN_ETSI2,	DMN_WORLD },
++	{ DMN_ETSI3_WORLD,	DMN_ETSI3,	DMN_WORLD },
++	{ DMN_ETSI4_WORLD,	DMN_ETSI4,	DMN_WORLD },
++	{ DMN_ETSI4_ETSIC,	DMN_ETSI4,	DMN_ETSIC },
++	{ DMN_ETSI5_WORLD,	DMN_ETSI5,	DMN_WORLD },
++	{ DMN_ETSI6_WORLD,	DMN_ETSI6,	DMN_WORLD },
++	{ DMN_ETSI_NULL,	DMN_ETSI1,	DMN_ETSI1 },
++	{ DMN_MKK1_MKKA,	DMN_MKK1,	DMN_MKKA },
++	{ DMN_MKK1_MKKB,	DMN_MKK1,	DMN_MKKA },
++	{ DMN_APL4_WORLD,	DMN_APL4,	DMN_WORLD },
++	{ DMN_MKK2_MKKA,	DMN_MKK2,	DMN_MKKA },
++	{ DMN_APL_NULL,		DMN_APL1,	DMN_NULL },
++	{ DMN_APL2_WORLD,	DMN_APL2,	DMN_WORLD },
++	{ DMN_APL2_APLC,	DMN_APL2,	DMN_WORLD },
++	{ DMN_APL3_WORLD,	DMN_APL3,	DMN_WORLD },
++	{ DMN_MKK1_FCCA,	DMN_MKK1,	DMN_FCCA },
++	{ DMN_APL2_APLD,	DMN_APL2,	DMN_APLD },
++	{ DMN_MKK1_MKKA1,	DMN_MKK1,	DMN_MKKA },
++	{ DMN_MKK1_MKKA2,	DMN_MKK1,	DMN_MKKA },
++	{ DMN_APL1_WORLD,	DMN_APL1,	DMN_WORLD },
++	{ DMN_APL1_FCCA,	DMN_APL1,	DMN_FCCA },
++	{ DMN_APL1_APLA,	DMN_APL1,	DMN_WORLD },
++	{ DMN_APL1_ETSIC,	DMN_APL1,	DMN_ETSIC },
++	{ DMN_APL2_ETSIC,	DMN_APL2,	DMN_ETSIC },
++	{ DMN_APL5_WORLD,	DMN_APL5,	DMN_WORLD },
++	{ DMN_WOR0_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR1_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR2_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR3_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR4_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR5_ETSIC,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR01_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WOR02_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_EU1_WORLD,	DMN_ETSI1,	DMN_WORLD },
++	{ DMN_WOR9_WORLD,	DMN_WORLD,	DMN_WORLD },
++	{ DMN_WORA_WORLD,	DMN_WORLD,	DMN_WORLD },
++};
 +
-+/* PHY/RF channel functions */
-+extern bool ath5k_channel_ok(struct ath5k_hw *ah, u16 freq, unsigned int flags);
-+extern int ath5k_hw_channel(struct ath5k_hw *ah, struct ieee80211_channel *channel);
-+/* PHY calibration */
-+extern int ath5k_hw_phy_calibrate(struct ath5k_hw *ah, struct ieee80211_channel *channel);
-+extern int ath5k_hw_phy_disable(struct ath5k_hw *ah);
-+/* Misc PHY functions */
-+extern u16 ath5k_hw_radio_revision(struct ath5k_hw *ah, unsigned int chan);
-+extern void ath5k_hw_set_def_antenna(struct ath5k_hw *ah, unsigned int ant);
-+extern unsigned int ath5k_hw_get_def_antenna(struct ath5k_hw *ah);
-+extern int ath5k_hw_noise_floor_calibration(struct ath5k_hw *ah, short freq);
-+/* TX power setup */
-+extern int ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel, unsigned int txpower);
-+extern int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, unsigned int power);
++enum ath5k_regdom ath5k_regdom2flag(enum ath5k_regdom dmn, u16 mhz)
++{
++	unsigned int i;
 +
++	for (i = 0; i < ARRAY_SIZE(r_map); i++) {
++		if (r_map[i].dmn == dmn) {
++			if (mhz >= 2000 && mhz <= 3000)
++				return r_map[i].dmn2;
++			if (mhz >= IEEE80211_CHANNELS_5GHZ_MIN &&
++					mhz <= IEEE80211_CHANNELS_5GHZ_MAX)
++				return r_map[i].dmn5;
++		}
++	}
 +
-+static inline u32 ath5k_hw_reg_read(struct ath5k_hw *ah, u16 reg)
-+{
-+	return ioread32(ah->ah_iobase + reg);
++	return DMN_DEBUG;
 +}
 +
-+static inline void ath5k_hw_reg_write(struct ath5k_hw *ah, u32 val, u16 reg)
++u16 ath5k_regdom_from_ieee(enum ath5k_regdom ieee)
 +{
-+	iowrite32(val, ah->ah_iobase + reg);
++	u32 regdomain = (u32)ieee;
++
++	/*
++	 * Use the default regulation domain if the value is empty
++	 * or not supported by the net80211 regulation code.
++	 */
++	if (ath5k_regdom2flag(regdomain, IEEE80211_CHANNELS_5GHZ_MIN) ==
++			DMN_DEBUG)
++		return (u16)AR5K_TUNE_REGDOMAIN;
++
++	/* It is supported, just return the value */
++	return regdomain;
 +}
 +
-+#endif
-diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-04 15:09:15.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-12-04 15:09:44.000000000 -0500
-@@ -648,6 +648,17 @@ M:	ecashin at coraid.com
- W:	http://www.coraid.com/support/linux
- S:	Supported
- 
-+ATHEROS ATH5K WIRELESS DRIVER
-+P:	Jiri Slaby
-+M:	jirislaby at gmail.com
-+P:	Nick Kossifidis
-+M:	mickflemm at gmail.com
-+P:	Luis R. Rodriguez
-+M:	mcgrof at gmail.com
-+L:	linux-wireless at vger.kernel.org
-+L:	ath5k-devel at lists.ath5k.org
-+S:	Maintained
++enum ath5k_regdom ath5k_regdom_to_ieee(u16 regdomain)
++{
++	enum ath5k_regdom ieee = (enum ath5k_regdom)regdomain;
++
++	return ieee;
++}
 +
- ATL1 ETHERNET DRIVER
- P:	Jay Cliburn
- M:	jcliburn at gmail.com

linux-2.6-rtl8180.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.2 -r 1.3 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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- linux-2.6-rtl8180.patch	4 Dec 2007 22:03:29 -0000	1.2
+++ linux-2.6-rtl8180.patch	17 Dec 2007 23:04:26 -0000	1.3
@@ -1,116 +1,23 @@
-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-04 14:25:23.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-04 15:37:19.000000000 -0500
-@@ -393,12 +393,12 @@ static int rtl8187_init_hw(struct ieee80
- 	priv->rf_init(dev);
- 
- 	rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
--	reg = rtl818x_ioread16(priv, &priv->map->PGSELECT) & 0xfffe;
--	rtl818x_iowrite16(priv, &priv->map->PGSELECT, reg | 0x1);
-+	reg = rtl818x_ioread8(priv, &priv->map->PGSELECT) & ~1;
-+	rtl818x_iowrite8(priv, &priv->map->PGSELECT, reg | 1);
- 	rtl818x_iowrite16(priv, (__le16 *)0xFFFE, 0x10);
- 	rtl818x_iowrite8(priv, &priv->map->TALLY_SEL, 0x80);
- 	rtl818x_iowrite8(priv, (u8 *)0xFFFF, 0x60);
--	rtl818x_iowrite16(priv, &priv->map->PGSELECT, reg);
-+	rtl818x_iowrite8(priv, &priv->map->PGSELECT, reg);
- 
- 	return 0;
- }
-@@ -750,13 +750,13 @@ static int __devinit rtl8187_probe(struc
- 	eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_BASE,
- 			  &priv->txpwr_base);
- 
--	reg = rtl818x_ioread16(priv, &priv->map->PGSELECT) & ~1;
--	rtl818x_iowrite16(priv, &priv->map->PGSELECT, reg | 1);
-+	reg = rtl818x_ioread8(priv, &priv->map->PGSELECT) & ~1;
-+	rtl818x_iowrite8(priv, &priv->map->PGSELECT, reg | 1);
- 	/* 0 means asic B-cut, we should use SW 3 wire
- 	 * bit-by-bit banging for radio. 1 means we can use
- 	 * USB specific request to write radio registers */
- 	priv->asic_rev = rtl818x_ioread8(priv, (u8 *)0xFFFE) & 0x3;
--	rtl818x_iowrite16(priv, &priv->map->PGSELECT, reg);
-+	rtl818x_iowrite8(priv, &priv->map->PGSELECT, reg);
- 	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
- 
- 	rtl8225_write(dev, 0, 0x1B7);
-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-04 15:36:33.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-04 15:37:19.000000000 -0500
-@@ -552,6 +552,11 @@ config USB_ZD1201
- 	  To compile this driver as a module, choose M here: the
- 	  module will be called zd1201.
+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
+@@ -2078,6 +2078,9 @@
+ #define PCI_DEVICE_ID_ALTIMA_AC9100	0x03ea
+ #define PCI_DEVICE_ID_ALTIMA_AC1003	0x03eb
  
-+config RTL8180
-+	tristate "Realtek 8185 PCI support"
-+	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
-+	select EEPROM_93CX6
-+
- config RTL8187
- 	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_sa2400.h
---- /dev/null	2007-11-21 18:00:15.874485932 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h	2007-12-04 15:37:19.000000000 -0500
-@@ -0,0 +1,38 @@
-+#ifndef RTL8180_SA2400_H
-+#define RTL8180_SA2400_H
-+
-+/*
-+ * Radio tuning for Philips SA2400 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 SA2400_ANTENNA 0x91
-+#define SA2400_DIG_ANAPARAM_PWR1_ON 0x8
-+#define SA2400_ANA_ANAPARAM_PWR1_ON 0x28
-+#define SA2400_ANAPARAM_PWR0_ON 0x3
-+
-+/* RX sensitivity in dbm */
-+#define SA2400_MAX_SENS 85
-+
-+#define SA2400_REG4_FIRDAC_SHIFT 7
-+
-+void sa2400_rf_init(struct ieee80211_hw *);
-+void sa2400_rf_stop(struct ieee80211_hw *);
-+void sa2400_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++#define PCI_VENDOR_ID_BELKIN		0x1799
++#define PCI_DEVICE_ID_BELKIN_F5D7010V7	0x701f
 +
-+#endif /* RTL8180_SA2400_H */
-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-04 15:36:33.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-04 15:37:19.000000000 -0500
-@@ -49,7 +49,10 @@ obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs
- obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
- obj-$(CONFIG_LIBERTAS)		+= libertas/
+ #define PCI_VENDOR_ID_LENOVO		0x17aa
  
-+rtl8180-objs		:= rtl8180_dev.o rtl8180_rtl8225.o rtl8180_sa2400.o rtl8180_max2820.o
- rtl8187-objs		:= rtl8187_dev.o rtl8187_rtl8225.o
+ #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
+@@ -0,0 +1,193 @@
 +
-+obj-$(CONFIG_RTL8180)	+= rtl8180.o
- obj-$(CONFIG_RTL8187)	+= rtl8187.o
- 
- obj-$(CONFIG_ADM8211)	+= adm8211.o
-diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c
---- /dev/null	2007-11-21 18:00:15.874485932 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c	2007-12-04 15:37:19.000000000 -0500
-@@ -0,0 +1,142 @@
 +/*
-+ * Radio tuning for Maxim max2820 on RTL8180
++ * Radio tuning for Philips SA2400 on RTL8180
 + *
 + * Copyright 2007 Andrea Merello <andreamrl at tiscali.it>
 + *
@@ -135,135 +42,275 @@
 +#include <net/mac80211.h>
 +
 +#include "rtl8180.h"
-+#include "rtl8180_max2820.h"
++#include "rtl8180_sa2400.h"
 +
-+u32 max2820_chan[] = {
-+	12, /* CH 1 */
-+	17,
-+	22,
-+	27,
-+	32,
-+	37,
-+	42,
-+	47,
-+	52,
-+	57,
-+	62,
-+	67,
-+	72,
-+	84, /* CH 14 */
++static const u32 sa2400_chan[] = {
++	0x00096c, /* ch1 */
++	0x080970,
++	0x100974,
++	0x180978,
++	0x000980,
++	0x080984,
++	0x100988,
++	0x18098c,
++	0x000994,
++	0x080998,
++	0x10099c,
++	0x1809a0,
++	0x0009a8,
++	0x0009b4, /* ch 14 */
 +};
 +
-+static void write_max2820(struct ieee80211_hw *dev, u8 addr, u32 data)
++static void write_sa2400(struct ieee80211_hw *dev, u8 addr, u32 data)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u32 phy_config;
 +
-+	phy_config = 0x90 + (data & 0xf);
-+	phy_config <<= 16;
-+	phy_config += addr;
-+	phy_config <<= 8;
-+	phy_config += (data >> 4) & 0xff;
++	/* MAC will bang bits to the sa2400. sw 3-wire is NOT used */
++	phy_config = 0xb0000000;
++
++	phy_config |= ((u32)(addr & 0xf)) << 24;
++	phy_config |= data & 0xffffff;
 +
 +	rtl818x_iowrite32(priv,
 +		(__le32 __iomem *) &priv->map->RFPinsOutput, phy_config);
 +
-+	msleep(1);
[...3930 lines suppressed...]
 @@ -0,0 +1,153 @@
 +#ifndef RTL8180_H
 +#define RTL8180_H
@@ -2573,3 +2393,196 @@
 +}
 +
 +#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
+@@ -553,6 +553,11 @@ config USB_ZD1201
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called zd1201.
+ 
++config RTL8180
++	tristate "Realtek 8185 PCI support"
++	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
++	select EEPROM_93CX6
++
+ config RTL8187
+ 	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
+@@ -0,0 +1,28 @@
++#ifndef RTL8180_RTL8225_H
++#define RTL8180_RTL8225_H
++
++#define RTL8225_ANAPARAM_ON	0xa0000b59
++#define RTL8225_ANAPARAM2_ON	0x860dec11
++#define RTL8225_ANAPARAM_OFF	0xa00beb59
++#define RTL8225_ANAPARAM2_OFF	0x840dec11
++
++int rtl8180_rtl8225_is_z2(struct ieee80211_hw *dev);
++
++void rtl8180_rtl8225_rf_init(struct ieee80211_hw *);
++void rtl8180_rtl8225z2_rf_init(struct ieee80211_hw *);
++void rtl8180_rtl8225_rf_stop(struct ieee80211_hw *);
++void rtl8180_rtl8225_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++
++static inline void rtl8180_rtl8225_write_phy_ofdm(struct ieee80211_hw *dev,
++					  u8 addr, u8 data)
++{
++	rtl8180_write_phy(dev, addr, data);
++}
++
++static inline void rtl8180_rtl8225_write_phy_cck(struct ieee80211_hw *dev,
++					 u8 addr, u8 data)
++{
++	rtl8180_write_phy(dev, addr, data | 0x10000);
++}
++
++#endif /* RTL8180_RTL8225_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
+@@ -0,0 +1,142 @@
++/*
++ * Radio tuning for Maxim max2820 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_max2820.h"
++
++u32 max2820_chan[] = {
++	12, /* CH 1 */
++	17,
++	22,
++	27,
++	32,
++	37,
++	42,
++	47,
++	52,
++	57,
++	62,
++	67,
++	72,
++	84, /* CH 14 */
++};
++
++static void write_max2820(struct ieee80211_hw *dev, u8 addr, u32 data)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u32 phy_config;
++
++	phy_config = 0x90 + (data & 0xf);
++	phy_config <<= 16;
++	phy_config += addr;
++	phy_config <<= 8;
++	phy_config += (data >> 4) & 0xff;
++
++	rtl818x_iowrite32(priv,
++		(__le32 __iomem *) &priv->map->RFPinsOutput, phy_config);
++
++	msleep(1);
++}
++
++static void max2820_write_phy_antenna(struct ieee80211_hw *dev, short chan)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u8 ant;
++
++	ant = MAXIM_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 max2820_rf_set_channel(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	unsigned int chan_idx = conf ? conf->channel - 1 : 0;
++	u32 txpw = priv->channels[chan_idx].val & 0xFF;
++	u32 chan = max2820_chan[chan_idx];
++
++	/* While philips SA2400 drive the PA bias from
++	 * sa2400, for MAXIM we do this directly from BB */
++	rtl8180_write_phy(dev, 3, txpw);
++
++	max2820_write_phy_antenna(dev, chan);
++	write_max2820(dev, 3, chan);
++}
++
++void max2820_rf_stop(struct ieee80211_hw *dev)
++{
++	rtl8180_write_phy(dev, 3, 0x8);
++	write_max2820(dev, 1, 0);
++}
++
++
++void max2820_rf_init(struct ieee80211_hw *dev)
++{
++	struct rtl8180_priv *priv = dev->priv;
++
++	/* MAXIM from netbsd driver */
++	write_max2820(dev, 0, 0x007); /* test mode as indicated in datasheet */
++	write_max2820(dev, 1, 0x01e); /* enable register */
++	write_max2820(dev, 2, 0x001); /* synt register */
++
++	max2820_rf_set_channel(dev, NULL);
++
++	write_max2820(dev, 4, 0x313); /* rx register */
++
++	/* PA is driven directly by the BB, we keep the MAXIM bias
++	 * at the highest value in case that setting it to lower
++	 * values may introduce some further attenuation somewhere..
++	 */
++	write_max2820(dev, 5, 0x00f);
++
++	/* baseband configuration */
++	rtl8180_write_phy(dev, 0, 0x88); /* sys1       */
++	rtl8180_write_phy(dev, 3, 0x08); /* txagc      */
++	rtl8180_write_phy(dev, 4, 0xf8); /* lnadet     */
++	rtl8180_write_phy(dev, 5, 0x90); /* ifagcinit  */
++	rtl8180_write_phy(dev, 6, 0x1a); /* ifagclimit */
++	rtl8180_write_phy(dev, 7, 0x64); /* ifagcdet   */
++
++	max2820_write_phy_antenna(dev, 1);
++
++	rtl8180_write_phy(dev, 0x11, 0x88); /* trl */
++
++	if (rtl818x_ioread8(priv, &priv->map->CONFIG2) &
++	    RTL818X_CONFIG2_ANTENNA_DIV)
++		rtl8180_write_phy(dev, 0x12, 0xc7);
++	else
++		rtl8180_write_phy(dev, 0x12, 0x47);
++
++	rtl8180_write_phy(dev, 0x13, 0x9b);
++
++	rtl8180_write_phy(dev, 0x19, 0x0);  /* CHESTLIM */
++	rtl8180_write_phy(dev, 0x1a, 0x9f); /* CHSQLIM  */
++
++	max2820_rf_set_channel(dev, NULL);
++}

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.16 -r 1.17 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- linux-2.6-wireless-pending.patch	4 Dec 2007 22:03:29 -0000	1.16
+++ linux-2.6-wireless-pending.patch	17 Dec 2007 23:04:26 -0000	1.17
@@ -1,2125 +1,3043 @@
-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-04 16:14:41.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/ssb/b43_pci_bridge.c	2007-12-04 16:14:53.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) },
- 	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4325) },
-+	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4328) },
- 	{ 0, },
- };
- MODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl);
-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-04 16:14:41.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/ssb/pci.c	2007-12-04 16:14:53.000000000 -0500
-@@ -212,29 +212,29 @@ static inline u8 ssb_crc8(u8 crc, u8 dat
- 	return t[crc ^ data];
- }
- 
--static u8 ssb_sprom_crc(const u16 *sprom)
-+static u8 ssb_sprom_crc(const u16 *sprom, u16 size)
- {
- 	int word;
- 	u8 crc = 0xFF;
- 
--	for (word = 0; word < SSB_SPROMSIZE_WORDS - 1; word++) {
-+	for (word = 0; word < size - 1; word++) {
- 		crc = ssb_crc8(crc, sprom[word] & 0x00FF);
- 		crc = ssb_crc8(crc, (sprom[word] & 0xFF00) >> 8);
- 	}
--	crc = ssb_crc8(crc, sprom[SPOFF(SSB_SPROM_REVISION)] & 0x00FF);
-+	crc = ssb_crc8(crc, sprom[size - 1] & 0x00FF);
- 	crc ^= 0xFF;
- 
- 	return crc;
- }
- 
--static int sprom_check_crc(const u16 *sprom)
-+static int sprom_check_crc(const u16 *sprom, u16 size)
- {
- 	u8 crc;
- 	u8 expected_crc;
- 	u16 tmp;
- 
--	crc = ssb_sprom_crc(sprom);
--	tmp = sprom[SPOFF(SSB_SPROM_REVISION)] & SSB_SPROM_REVISION_CRC;
-+	crc = ssb_sprom_crc(sprom, size);
-+	tmp = sprom[size - 1] & SSB_SPROM_REVISION_CRC;
- 	expected_crc = tmp >> SSB_SPROM_REVISION_CRC_SHIFT;
- 	if (crc != expected_crc)
- 		return -EPROTO;
-@@ -246,7 +246,7 @@ static void sprom_do_read(struct ssb_bus
- {
- 	int i;
- 
--	for (i = 0; i < SSB_SPROMSIZE_WORDS; i++)
-+	for (i = 0; i < bus->sprom_size; i++)
- 		sprom[i] = readw(bus->mmio + SSB_SPROM_BASE + (i * 2));
- }
+diff -up linux-2.6.23.noarch/include/linux/wireless.h.orig linux-2.6.23.noarch/include/linux/wireless.h
+--- linux-2.6.23.noarch/include/linux/wireless.h.orig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/include/linux/wireless.h	2007-12-17 17:45:06.000000000 -0500
+@@ -541,6 +541,16 @@
+ /* Maximum size of returned data */
+ #define IW_SCAN_MAX_DATA	4096	/* In bytes */
+ 
++/* Scan capability flags - in (struct iw_range *)->scan_capa */
++#define IW_SCAN_CAPA_NONE		0x00
++#define IW_SCAN_CAPA_ESSID		0x01
++#define IW_SCAN_CAPA_BSSID		0x02
++#define IW_SCAN_CAPA_CHANNEL	0x04
++#define IW_SCAN_CAPA_MODE		0x08
++#define IW_SCAN_CAPA_RATE		0x10
++#define IW_SCAN_CAPA_TYPE		0x20
++#define IW_SCAN_CAPA_TIME		0x40
++
+ /* Max number of char in custom event - use multiple of them if needed */
+ #define IW_CUSTOM_MAX		256	/* In bytes */
+ 
+@@ -963,6 +973,9 @@ struct	iw_range
+ 	__u16		old_num_channels;
+ 	__u8		old_num_frequency;
  
-@@ -255,6 +255,7 @@ static int sprom_do_write(struct ssb_bus
- 	struct pci_dev *pdev = bus->host_pci;
- 	int i, err;
- 	u32 spromctl;
-+	u16 size = bus->sprom_size;
++	/* Scan capabilities */
++	__u8		scan_capa; 	/* IW_SCAN_CAPA_* bit field */
++
+ 	/* Wireless event capability bitmasks */
+ 	__u32		event_capa[6];
  
- 	ssb_printk(KERN_NOTICE PFX "Writing SPROM. Do NOT turn off the power! Please stand by...\n");
- 	err = pci_read_config_dword(pdev, SSB_SPROMCTL, &spromctl);
-@@ -266,12 +267,12 @@ static int sprom_do_write(struct ssb_bus
- 		goto err_ctlreg;
- 	ssb_printk(KERN_NOTICE PFX "[ 0%%");
- 	msleep(500);
--	for (i = 0; i < SSB_SPROMSIZE_WORDS; i++) {
--		if (i == SSB_SPROMSIZE_WORDS / 4)
-+	for (i = 0; i < size; i++) {
-+		if (i == size / 4)
- 			ssb_printk("25%%");
--		else if (i == SSB_SPROMSIZE_WORDS / 2)
-+		else if (i == size / 2)
- 			ssb_printk("50%%");
--		else if (i == (SSB_SPROMSIZE_WORDS / 4) * 3)
-+		else if (i == (size * 3) / 4)
- 			ssb_printk("75%%");
- 		else if (i % 2)
- 			ssb_printk(".");
-@@ -296,38 +297,38 @@ err_ctlreg:
- 	return err;
- }
+diff -up linux-2.6.23.noarch/include/linux/ieee80211.h.orig linux-2.6.23.noarch/include/linux/ieee80211.h
+--- linux-2.6.23.noarch/include/linux/ieee80211.h.orig	2007-12-17 17:44:46.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/ieee80211.h	2007-12-17 17:44:52.000000000 -0500
+@@ -54,6 +54,8 @@
+ #define IEEE80211_STYPE_ACTION		0x00D0
  
--static void sprom_extract_r1(struct ssb_sprom_r1 *out, const u16 *in)
-+static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in)
- {
- 	int i;
- 	u16 v;
-+	u16 loc[3];
+ /* control */
++#define IEEE80211_STYPE_BACK_REQ	0x0080
++#define IEEE80211_STYPE_BACK		0x0090
+ #define IEEE80211_STYPE_PSPOLL		0x00A0
+ #define IEEE80211_STYPE_RTS		0x00B0
+ #define IEEE80211_STYPE_CTS		0x00C0
+@@ -81,18 +83,18 @@
  
--	SPEX(pci_spid, SSB_SPROM1_SPID, 0xFFFF, 0);
--	SPEX(pci_svid, SSB_SPROM1_SVID, 0xFFFF, 0);
--	SPEX(pci_pid, SSB_SPROM1_PID, 0xFFFF, 0);
-+	if (out->revision == 3) {			/* rev 3 moved MAC */
-+		loc[0] = SSB_SPROM3_IL0MAC;
-+		loc[1] = SSB_SPROM3_ET0MAC;
-+		loc[2] = SSB_SPROM3_ET1MAC;
-+	} else {
-+		loc[0] = SSB_SPROM1_IL0MAC;
-+		loc[1] = SSB_SPROM1_ET0MAC;
-+		loc[2] = SSB_SPROM1_ET1MAC;
-+	}
- 	for (i = 0; i < 3; i++) {
--		v = in[SPOFF(SSB_SPROM1_IL0MAC) + i];
-+		v = in[SPOFF(loc[0]) + i];
- 		*(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
- 	}
- 	for (i = 0; i < 3; i++) {
--		v = in[SPOFF(SSB_SPROM1_ET0MAC) + i];
-+		v = in[SPOFF(loc[1]) + i];
- 		*(((__be16 *)out->et0mac) + i) = cpu_to_be16(v);
- 	}
- 	for (i = 0; i < 3; i++) {
--		v = in[SPOFF(SSB_SPROM1_ET1MAC) + i];
-+		v = in[SPOFF(loc[2]) + i];
- 		*(((__be16 *)out->et1mac) + i) = cpu_to_be16(v);
- 	}
- 	SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0);
- 	SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A,
- 	     SSB_SPROM1_ETHPHY_ET1A_SHIFT);
--	SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
--	SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
--	SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
- 	SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
- 	     SSB_SPROM1_BINF_CCODE_SHIFT);
--	SPEX(antenna_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
--	     SSB_SPROM1_BINF_ANTA_SHIFT);
--	SPEX(antenna_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
--	     SSB_SPROM1_BINF_ANTBG_SHIFT);
- 	SPEX(pa0b0, SSB_SPROM1_PA0B0, 0xFFFF, 0);
- 	SPEX(pa0b1, SSB_SPROM1_PA0B1, 0xFFFF, 0);
- 	SPEX(pa0b2, SSB_SPROM1_PA0B2, 0xFFFF, 0);
-@@ -350,97 +351,75 @@ static void sprom_extract_r1(struct ssb_
- 	SPEX(antenna_gain_a, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_A, 0);
- 	SPEX(antenna_gain_bg, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_BG,
- 	     SSB_SPROM1_AGAIN_BG_SHIFT);
--	for (i = 0; i < 4; i++) {
--		v = in[SPOFF(SSB_SPROM1_OEM) + i];
--		*(((__le16 *)out->oem) + i) = cpu_to_le16(v);
--	}
- }
  
--static void sprom_extract_r2(struct ssb_sprom_r2 *out, const u16 *in)
-+static void sprom_extract_r4(struct ssb_sprom *out, const u16 *in)
- {
- 	int i;
[...119982 lines suppressed...]
-+struct ssb_sprom {
-+	u8 revision;
- 	u8 il0mac[6];		/* MAC address for 802.11b/g */
- 	u8 et0mac[6];		/* MAC address for Ethernet */
- 	u8 et1mac[6];		/* MAC address for 802.11a */
--	u8 et0phyaddr:5;	/* MII address for enet0 */
--	u8 et1phyaddr:5;	/* MII address for enet1 */
--	u8 et0mdcport:1;	/* MDIO for enet0 */
--	u8 et1mdcport:1;	/* MDIO for enet1 */
--	u8 board_rev;		/* Board revision */
--	u8 country_code:4;	/* Country Code */
--	u8 antenna_a:2;		/* Antenna 0/1 available for A-PHY */
--	u8 antenna_bg:2;	/* Antenna 0/1 available for B-PHY and G-PHY */
-+	u8 et0phyaddr;		/* MII address for enet0 */
-+	u8 et1phyaddr;		/* MII address for enet1 */
-+	u8 country_code;	/* Country Code */
- 	u16 pa0b0;
- 	u16 pa0b1;
- 	u16 pa0b2;
-@@ -41,61 +33,15 @@ struct ssb_sprom_r1 {
- 	u8 gpio1;		/* GPIO pin 1 */
- 	u8 gpio2;		/* GPIO pin 2 */
- 	u8 gpio3;		/* GPIO pin 3 */
--	u16 maxpwr_a;		/* A-PHY Power Amplifier Max Power (in dBm Q5.2) */
--	u16 maxpwr_bg;		/* B/G-PHY Power Amplifier Max Power (in dBm Q5.2) */
-+	u16 maxpwr_a;		/* A-PHY Amplifier Max Power (in dBm Q5.2) */
-+	u16 maxpwr_bg;		/* B/G-PHY Amplifier Max Power (in dBm Q5.2) */
- 	u8 itssi_a;		/* Idle TSSI Target for A-PHY */
- 	u8 itssi_bg;		/* Idle TSSI Target for B/G-PHY */
- 	u16 boardflags_lo;	/* Boardflags (low 16 bits) */
- 	u8 antenna_gain_a;	/* A-PHY Antenna gain (in dBm Q5.2) */
- 	u8 antenna_gain_bg;	/* B/G-PHY Antenna gain (in dBm Q5.2) */
--	u8 oem[8];		/* OEM string (rev 1 only) */
--};
--
--struct ssb_sprom_r2 {
--	u16 boardflags_hi;	/* Boardflags (high 16 bits) */
--	u8 maxpwr_a_lo;		/* A-PHY Max Power Low */
--	u8 maxpwr_a_hi;		/* A-PHY Max Power High */
--	u16 pa1lob0;		/* A-PHY PA Low Settings */
--	u16 pa1lob1;		/* A-PHY PA Low Settings */
--	u16 pa1lob2;		/* A-PHY PA Low Settings */
--	u16 pa1hib0;		/* A-PHY PA High Settings */
--	u16 pa1hib1;		/* A-PHY PA High Settings */
--	u16 pa1hib2;		/* A-PHY PA High Settings */
--	u8 ofdm_pwr_off;	/* OFDM Power Offset from CCK Level */
--	u8 country_str[2];	/* Two char Country Code */
--};
+-	if (len < SSB_SPROMSIZE_BYTES * 2)
++	if (len < size * 2)
+ 		return -EINVAL;
  
--struct ssb_sprom_r3 {
--	u32 ofdmapo;		/* A-PHY OFDM Mid Power Offset */
--	u32 ofdmalpo;		/* A-PHY OFDM Low Power Offset */
--	u32 ofdmahpo;		/* A-PHY OFDM High Power Offset */
--	u8 gpioldc_on_cnt;	/* GPIO LED Powersave Duty Cycle ON count */
--	u8 gpioldc_off_cnt;	/* GPIO LED Powersave Duty Cycle OFF count */
--	u8 cckpo_1M:4;		/* CCK Power Offset for Rate 1M */
--	u8 cckpo_2M:4;		/* CCK Power Offset for Rate 2M */
--	u8 cckpo_55M:4;		/* CCK Power Offset for Rate 5.5M */
--	u8 cckpo_11M:4;		/* CCK Power Offset for Rate 11M */
--	u32 ofdmgpo;		/* G-PHY OFDM Power Offset */
--};
--
--struct ssb_sprom_r4 {
--	/* TODO */
--};
--
--struct ssb_sprom {
--	u8 revision;
--	u8 crc;
--	/* The valid r# fields are selected by the "revision".
--	 * Revision 3 and lower inherit from lower revisions.
--	 */
--	union {
--		struct {
--			struct ssb_sprom_r1 r1;
--			struct ssb_sprom_r2 r2;
--			struct ssb_sprom_r3 r3;
--		};
--		struct ssb_sprom_r4 r4;
--	};
-+	/* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */
- };
+-	while (cnt < SSB_SPROMSIZE_WORDS) {
++	while (cnt < size) {
+ 		memcpy(tmp, dump, 4);
+ 		dump += 4;
+ 		parsed = simple_strtoul(tmp, NULL, 16);
+@@ -627,7 +620,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+ 	if (!bus)
+ 		goto out;
+ 	err = -ENOMEM;
+-	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
++	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
+ 	if (!sprom)
+ 		goto out;
  
- /* Information about the PCB the circuitry is soldered on. */
-@@ -288,6 +234,7 @@ struct ssb_bus {
- 	/* ID information about the Chip. */
- 	u16 chip_id;
- 	u16 chip_rev;
-+	u16 sprom_size;		/* number of words in sprom */
- 	u8 chip_package;
+@@ -640,7 +633,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+ 	sprom_do_read(bus, sprom);
+ 	mutex_unlock(&bus->pci_sprom_mutex);
  
- 	/* List of devices (cores) on the backplane. */
+-	count = sprom2hex(sprom, buf, PAGE_SIZE);
++	count = sprom2hex(sprom, buf, PAGE_SIZE, bus->sprom_size);
+ 	err = 0;
+ 
+ out_kfree:
+@@ -662,15 +655,15 @@ static ssize_t ssb_pci_attr_sprom_store(
+ 	if (!bus)
+ 		goto out;
+ 	err = -ENOMEM;
+-	sprom = kcalloc(SSB_SPROMSIZE_WORDS, sizeof(u16), GFP_KERNEL);
++	sprom = kcalloc(bus->sprom_size, sizeof(u16), GFP_KERNEL);
+ 	if (!sprom)
+ 		goto out;
+-	err = hex2sprom(sprom, buf, count);
++	err = hex2sprom(sprom, buf, count, bus->sprom_size);
+ 	if (err) {
+ 		err = -EINVAL;
+ 		goto out_kfree;
+ 	}
+-	err = sprom_check_crc(sprom);
++	err = sprom_check_crc(sprom, bus->sprom_size);
+ 	if (err) {
+ 		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-04 16:14:41.000000000 -0500
-+++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2007-12-04 16:14:53.000000000 -0500
-@@ -343,3 +343,20 @@ Why:	powermac supports proper generic pm
- Who:	Johannes Berg <johannes at sipsolutions.net>
+--- 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
+ Who:	Stephen Hemminger <shemminger at linux-foundation.org>
  
  ---------------------------
 +
@@ -62057,52 +68577,3 @@
 +Who:	John W. Linville <linville at tuxdriver.com>
 +
 +---------------------------
-diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-04 16:14:41.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-12-04 16:14:53.000000000 -0500
-@@ -807,7 +807,7 @@ P:	Stefano Brivio
- M:	stefano.brivio at polimi.it
- L:	linux-wireless at vger.kernel.org
- W:	http://bcm43xx.berlios.de/
--S:	Maintained
-+S:	Obsolete
- 
- BEFS FILE SYSTEM
- P:	Sergey S. Kostyliov
-@@ -2026,10 +2026,12 @@ W:	http://sourceforge.net/projects/e1000
- S:	Supported
- 
- INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
--P:	Yi Zhu
-+P:	Zhu Yi
- M:	yi.zhu at intel.com
- P:	James Ketrenos
- M:	jketreno at linux.intel.com
-+P:	Reinette Chatre
-+M:	reinette.chatre at intel.com
- L:	linux-wireless at vger.kernel.org
- L:	ipw2100-devel at lists.sourceforge.net
- L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
-@@ -2037,10 +2039,12 @@ W:	http://ipw2100.sourceforge.net
- S:	Supported
- 
- INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
--P:	Yi Zhu
-+P:	Zhu Yi
- M:	yi.zhu at intel.com
- P:	James Ketrenos
- M:	jketreno at linux.intel.com
-+P:	Reinette Chatre
-+M:	reinette.chatre at intel.com
- L:	linux-wireless at vger.kernel.org
- L:	ipw2100-devel at lists.sourceforge.net
- L:	http://lists.sourceforge.net/mailman/listinfo/ipw2100-devel
-@@ -2050,6 +2054,8 @@ S:	Supported
- INTEL WIRELESS WIFI LINK (iwlwifi)
- P:	Zhu Yi
- M:	yi.zhu at intel.com
-+P:	Reinette Chatre
-+M:	reinette.chatre at intel.com
- L:	linux-wireless at vger.kernel.org
- L:	ipw3945-devel at lists.sourceforge.net
- W:	http://intellinuxwireless.org

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.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- linux-2.6-wireless.patch	30 Nov 2007 15:26:27 -0000	1.13
+++ linux-2.6-wireless.patch	17 Dec 2007 23:04:28 -0000	1.14
@@ -1,356 +1,386 @@
-diff -up linux-2.6.23.noarch/drivers/net/wireless/p54usb.c.orig linux-2.6.23.noarch/drivers/net/wireless/p54usb.c
---- linux-2.6.23.noarch/drivers/net/wireless/p54usb.c.orig	2007-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/p54usb.c	2007-11-30 09:42:24.000000000 -0500
-@@ -308,7 +308,7 @@ static int p54u_read_eeprom(struct ieee8
- 
- 	buf = kmalloc(0x2020, GFP_KERNEL);
- 	if (!buf) {
--		printk(KERN_ERR "prism54usb: cannot allocate memory for"
-+		printk(KERN_ERR "prism54usb: cannot allocate memory for "
- 		       "eeprom readback!\n");
- 		return -ENOMEM;
- 	}
-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-11-30 09:03:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43/main.c	2007-11-30 09:42:24.000000000 -0500
-@@ -1566,7 +1566,7 @@ static void b43_release_firmware(struct 
- static void b43_print_fw_helptext(struct b43_wl *wl)
- {
- 	b43err(wl, "You must go to "
--	       "http://linuxwireless.org/en/users/Drivers/bcm43xx#devicefirmware "
-+	       "http://linuxwireless.org/en/users/Drivers/b43#devicefirmware "
- 	       "and download the correct firmware (version 4).\n");
- }
- 
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/phy.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/phy.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43/phy.c.orig	2007-11-30 09:03:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43/phy.c	2007-11-30 09:42:24.000000000 -0500
-@@ -2214,7 +2214,7 @@ int b43_phy_init_tssi2dbm_table(struct b
+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;
  		}
- 		dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
- 		if (dyn_tssi2dbm == NULL) {
--			b43err(dev->wl, "Could not allocate memory"
-+			b43err(dev->wl, "Could not allocate memory "
- 			       "for tssi2dbm table\n");
- 			return -ENOMEM;
+ 	}
+@@ -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/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-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2007-11-30 09:42:24.000000000 -0500
-@@ -2915,6 +2915,10 @@ static void iwl_set_rate(struct iwl_priv
- 	int i;
- 
- 	hw = iwl_get_hw_mode(priv, priv->phymode);
-+	if (!hw) {
-+		IWL_ERROR("Failed to set rate: unable to get hw mode\n");
-+		return;
-+	}
+ 	}
+ 	mutex_unlock(&rate_ctrl_mutex);
+-	kfree(alg);
+ }
+ EXPORT_SYMBOL(ieee80211_rate_control_unregister);
  
- 	priv->active_rate = 0;
- 	priv->active_rate_basic = 0;
-@@ -6936,13 +6940,10 @@ static int iwl_mac_add_interface(struct 
- 	DECLARE_MAC_BUF(mac);
- 
- 	IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type);
--	if (conf->mac_addr)
--		IWL_DEBUG_MAC80211("enter: MAC %s\n",
--				   print_mac(mac, conf->mac_addr));
- 
- 	if (priv->interface_id) {
- 		IWL_DEBUG_MAC80211("leave - interface_id != 0\n");
--		return 0;
-+		return -EOPNOTSUPP;
+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)
+ {
+ 	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;
+ }
+@@ -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);
+-
++	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);
  
- 	spin_lock_irqsave(&priv->lock, flags);
-@@ -6951,6 +6952,12 @@ static int iwl_mac_add_interface(struct 
- 	spin_unlock_irqrestore(&priv->lock, flags);
+ 	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;
  
- 	mutex_lock(&priv->mutex);
-+
-+	if (conf->mac_addr) {
-+		IWL_DEBUG_MAC80211("Set: %s\n", print_mac(mac, conf->mac_addr));
-+		memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
-+	}
++	b43_rfkill_exit(dev);
 +
- 	iwl_set_mode(priv, conf->type);
+ 	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);
+ }
+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"
  
- 	IWL_DEBUG_MAC80211("leave\n");
-@@ -8270,6 +8277,7 @@ static void iwl_cancel_deferred_work(str
- {
- 	iwl_hw_cancel_deferred_work(priv);
++#include <linux/kmod.h>
++
  
-+	cancel_delayed_work_sync(&priv->init_alive_start);
- 	cancel_delayed_work(&priv->scan_check);
- 	cancel_delayed_work(&priv->alive_start);
- 	cancel_delayed_work(&priv->post_associate);
-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-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2007-11-30 09:42:24.000000000 -0500
-@@ -3003,6 +3003,10 @@ static void iwl_set_rate(struct iwl_priv
- 	int i;
- 
- 	hw = iwl_get_hw_mode(priv, priv->phymode);
-+	if (!hw) {
-+		IWL_ERROR("Failed to set rate: unable to get hw mode\n");
+ /* 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);
  
- 	priv->active_rate = 0;
- 	priv->active_rate_basic = 0;
-@@ -7326,9 +7330,6 @@ static int iwl_mac_add_interface(struct 
- 	DECLARE_MAC_BUF(mac);
- 
- 	IWL_DEBUG_MAC80211("enter: id %d, type %d\n", conf->if_id, conf->type);
--	if (conf->mac_addr)
--		IWL_DEBUG_MAC80211("enter: MAC %s\n",
--				   print_mac(mac, conf->mac_addr));
- 
- 	if (priv->interface_id) {
- 		IWL_DEBUG_MAC80211("leave - interface_id != 0\n");
-@@ -7341,6 +7342,11 @@ static int iwl_mac_add_interface(struct 
- 	spin_unlock_irqrestore(&priv->lock, flags);
- 
- 	mutex_lock(&priv->mutex);
-+
-+	if (conf->mac_addr) {
-+		IWL_DEBUG_MAC80211("Set %s\n", print_mac(mac, conf->mac_addr));
-+		memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
+-	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);
 +	}
- 	iwl_set_mode(priv, conf->type);
+ }
  
- 	IWL_DEBUG_MAC80211("leave\n");
-@@ -8864,6 +8870,7 @@ static void iwl_cancel_deferred_work(str
+ /* Called when the RFKILL toggled in software. */
+@@ -69,13 +78,15 @@ static int b43_rfkill_soft_toggle(void *
  {
- 	iwl_hw_cancel_deferred_work(priv);
+ 	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)));
  
-+	cancel_delayed_work_sync(&priv->init_alive_start);
- 	cancel_delayed_work(&priv->scan_check);
- 	cancel_delayed_work(&priv->alive_start);
- 	cancel_delayed_work(&priv->post_associate);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c.orig linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c
---- linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c.orig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/drivers/net/wireless/bcm43xx/bcm43xx_phy.c	2007-11-30 09:42:24.000000000 -0500
-@@ -2149,7 +2149,7 @@ int bcm43xx_phy_init_tssi2dbm_table(stru
- 		}
- 		dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
- 		if (dyn_tssi2dbm == NULL) {
--			printk(KERN_ERR PFX "Could not allocate memory"
-+			printk(KERN_ERR PFX "Could not allocate memory "
- 					    "for tssi2dbm table\n");
- 			return -ENOMEM;
- 		}
-diff -up linux-2.6.23.noarch/drivers/net/wireless/netwave_cs.c.orig linux-2.6.23.noarch/drivers/net/wireless/netwave_cs.c
---- linux-2.6.23.noarch/drivers/net/wireless/netwave_cs.c.orig	2007-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/netwave_cs.c	2007-11-30 09:42:24.000000000 -0500
-@@ -806,7 +806,7 @@ static int netwave_pcmcia_config(struct 
-     for (i = 0; i < 6; i++) 
- 	dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i);
- 
--    printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx"
-+    printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx, "
- 	   "id %c%c, hw_addr %s\n",
- 	   dev->name, dev->base_addr, dev->irq,
- 	   (u_long) ramBase,
-diff -up linux-2.6.23.noarch/drivers/net/wireless/libertas/if_cs.c.orig linux-2.6.23.noarch/drivers/net/wireless/libertas/if_cs.c
---- linux-2.6.23.noarch/drivers/net/wireless/libertas/if_cs.c.orig	2007-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/libertas/if_cs.c	2007-11-30 09:42:24.000000000 -0500
-@@ -170,7 +170,8 @@ static int if_cs_poll_while_fw_download(
- #define IF_CS_H_IC_TX_OVER		0x0001
- #define IF_CS_H_IC_RX_OVER		0x0002
- #define IF_CS_H_IC_DNLD_OVER		0x0004
--#define IF_CS_H_IC_HOST_EVENT		0x0008
-+#define IF_CS_H_IC_POWER_DOWN		0x0008
-+#define IF_CS_H_IC_HOST_EVENT		0x0010
- #define IF_CS_H_IC_MASK			0x001f
- 
- #define IF_CS_H_INT_MASK		0x00000004
-diff -up linux-2.6.23.noarch/drivers/net/wireless/libertas/main.c.orig linux-2.6.23.noarch/drivers/net/wireless/libertas/main.c
---- linux-2.6.23.noarch/drivers/net/wireless/libertas/main.c.orig	2007-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/libertas/main.c	2007-11-30 09:42:24.000000000 -0500
-@@ -1165,8 +1165,6 @@ wlan_private *libertas_add_card(void *ca
- #ifdef	WIRELESS_EXT
- 	dev->wireless_handlers = (struct iw_handler_def *)&libertas_handler_def;
- #endif
--#define NETIF_F_DYNALLOC 16
--	dev->features |= NETIF_F_DYNALLOC;
- 	dev->flags |= IFF_BROADCAST | IFF_MULTICAST;
- 	dev->set_multicast_list = libertas_set_multicast_list;
- 
-@@ -1348,8 +1346,6 @@ int libertas_add_mesh(wlan_private *priv
- #ifdef	WIRELESS_EXT
- 	mesh_dev->wireless_handlers = (struct iw_handler_def *)&mesh_handler_def;
- #endif
--#define NETIF_F_DYNALLOC 16
--
- 	/* Register virtual mesh interface */
- 	ret = register_netdev(mesh_dev);
- 	if (ret) {
-diff -up linux-2.6.23.noarch/drivers/net/wireless/libertas/wext.c.orig linux-2.6.23.noarch/drivers/net/wireless/libertas/wext.c
---- linux-2.6.23.noarch/drivers/net/wireless/libertas/wext.c.orig	2007-11-30 09:03:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/libertas/wext.c	2007-11-30 09:42:24.000000000 -0500
-@@ -1528,7 +1528,7 @@ static int wlan_set_encodeext(struct net
- 			&& (ext->key_len != KEY_LEN_WPA_TKIP))
- 		    || ((alg == IW_ENCODE_ALG_CCMP)
- 		        && (ext->key_len != KEY_LEN_WPA_AES))) {
--				lbs_deb_wext("invalid size %d for key of alg"
-+				lbs_deb_wext("invalid size %d for key of alg "
- 				       "type %d\n",
- 				       ext->key_len,
- 				       alg);
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43legacy/dma.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43legacy/dma.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43legacy/dma.c.orig	2007-11-30 09:03:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43legacy/dma.c	2007-11-30 09:42:24.000000000 -0500
-@@ -996,7 +996,7 @@ int b43legacy_dma_init(struct b43legacy_
- 
- 	err = ssb_dma_set_mask(dev->dev, dmamask);
- 	if (err) {
--#ifdef BCM43XX_PIO
-+#ifdef CONFIG_B43LEGACY_PIO
- 		b43legacywarn(dev->wl, "DMA for this device not supported. "
- 			"Falling back to PIO\n");
- 		dev->__using_pio = 1;
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43legacy/main.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43legacy/main.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43legacy/main.c.orig	2007-11-30 09:03:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43legacy/main.c	2007-11-30 09:42:24.000000000 -0500
-@@ -1419,7 +1419,7 @@ static void b43legacy_release_firmware(s
- static void b43legacy_print_fw_helptext(struct b43legacy_wl *wl)
++	ZD_ASSERT(IS_ALIGNED((unsigned long)skb->data, 4));
++
+ 	update_qual_rssi(mac, skb->data, skb->len, stats.signal,
+ 		         status->signal_strength);
+ 
+@@ -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)
  {
- 	b43legacyerr(wl, "You must go to http://linuxwireless.org/en/users/"
--		     "Drivers/bcm43xx#devicefirmware "
-+		     "Drivers/b43#devicefirmware "
- 		     "and download the correct firmware (version 3).\n");
+ 	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);
  }
  
-diff -up linux-2.6.23.noarch/drivers/net/wireless/b43legacy/phy.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43legacy/phy.c
---- linux-2.6.23.noarch/drivers/net/wireless/b43legacy/phy.c.orig	2007-11-30 09:03:15.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/b43legacy/phy.c	2007-11-30 09:42:24.000000000 -0500
-@@ -2020,7 +2020,7 @@ int b43legacy_phy_init_tssi2dbm_table(st
- 			phy->idle_tssi = 62;
- 		dyn_tssi2dbm = kmalloc(64, GFP_KERNEL);
- 		if (dyn_tssi2dbm == NULL) {
--			b43legacyerr(dev->wl, "Could not allocate memory"
-+			b43legacyerr(dev->wl, "Could not allocate memory "
- 			       "for tssi2dbm table\n");
- 			return -ENOMEM;
- 		}
-diff -up linux-2.6.23.noarch/net/ieee80211/ieee80211_tx.c.orig linux-2.6.23.noarch/net/ieee80211/ieee80211_tx.c
---- linux-2.6.23.noarch/net/ieee80211/ieee80211_tx.c.orig	2007-10-09 16:31:38.000000000 -0400
-+++ linux-2.6.23.noarch/net/ieee80211/ieee80211_tx.c	2007-11-30 09:42:20.000000000 -0500
-@@ -144,7 +144,8 @@ static int ieee80211_copy_snap(u8 * data
- 	snap->oui[1] = oui[1];
- 	snap->oui[2] = oui[2];
- 
--	*(u16 *) (data + SNAP_SIZE) = htons(h_proto);
-+	h_proto = htons(h_proto);
-+	memcpy(data + SNAP_SIZE, &h_proto, sizeof(u16));
+-static int ipw_setup_deferred_work(struct ipw_priv *priv)
++static int __devinit ipw_setup_deferred_work(struct ipw_priv *priv)
+ {
+ 	int ret = 0;
  
- 	return SNAP_SIZE + sizeof(u16);
- }
-diff -up linux-2.6.23.noarch/net/mac80211/wep.c.orig linux-2.6.23.noarch/net/mac80211/wep.c
---- linux-2.6.23.noarch/net/mac80211/wep.c.orig	2007-11-30 09:03:28.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/wep.c	2007-11-30 09:42:20.000000000 -0500
-@@ -265,7 +265,8 @@ int ieee80211_wep_decrypt(struct ieee802
- 	if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen,
- 				       skb->data + hdrlen + WEP_IV_LEN,
- 				       len)) {
--		printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
-+		if (net_ratelimit())
-+			printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
- 		ret = -1;
- 	}
+@@ -11600,7 +11600,8 @@ static void ipw_prom_free(struct ipw_pri
+ #endif
  
-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-11-30 09:03:28.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/rx.c	2007-11-30 09:42:20.000000000 -0500
-@@ -997,7 +997,7 @@ ieee80211_rx_h_drop_unencrypted(struct i
- 	if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
- 		     (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
- 		     (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
--		     rx->sdata->drop_unencrypted &&
-+		     (rx->key || rx->sdata->drop_unencrypted) &&
- 		     (rx->sdata->eapol == 0 || !ieee80211_is_eapol(rx->skb)))) {
- 		if (net_ratelimit())
- 			printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
-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-11-30 09:03:32.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/ieee80211.c	2007-11-30 09:42:20.000000000 -0500
-@@ -216,6 +216,7 @@ static int ieee80211_open(struct net_dev
- 			res = local->ops->start(local_to_hw(local));
- 		if (res)
- 			return res;
-+		ieee80211_hw_config(local);
- 	}
  
- 	switch (sdata->type) {
-@@ -232,7 +233,6 @@ static int ieee80211_open(struct net_dev
- 			netif_tx_unlock_bh(local->mdev);
+-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;
+ }
  
- 			local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
--			ieee80211_hw_config(local);
- 		}
- 		break;
- 	case IEEE80211_IF_TYPE_STA:
-@@ -334,8 +334,7 @@ static int ieee80211_stop(struct net_dev
- 			ieee80211_configure_filter(local);
- 			netif_tx_unlock_bh(local->mdev);
- 
--			local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
--			ieee80211_hw_config(local);
-+			local->hw.conf.flags &= ~IEEE80211_CONF_RADIOTAP;
- 		}
- 		break;
- 	case IEEE80211_IF_TYPE_STA:
-@@ -357,6 +356,11 @@ static int ieee80211_stop(struct net_dev
- 			cancel_delayed_work(&local->scan_work);
- 		}
- 		flush_workqueue(local->hw.workqueue);
-+
-+		sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
-+		kfree(sdata->u.sta.extra_ie);
-+		sdata->u.sta.extra_ie = NULL;
-+		sdata->u.sta.extra_ie_len = 0;
- 		/* fall through */
- 	default:
- 		conf.if_id = dev->ifindex;
-diff -up linux-2.6.23.noarch/net/rfkill/rfkill.c.orig linux-2.6.23.noarch/net/rfkill/rfkill.c
---- linux-2.6.23.noarch/net/rfkill/rfkill.c.orig	2007-11-30 09:03:28.000000000 -0500
-+++ linux-2.6.23.noarch/net/rfkill/rfkill.c	2007-11-30 09:42:20.000000000 -0500
-@@ -60,11 +60,7 @@ static void rfkill_led_trigger(struct rf
- static int rfkill_toggle_radio(struct rfkill *rfkill,
- 				enum rfkill_state state)
+-static void ipw_pci_remove(struct pci_dev *pdev)
++static void __devexit ipw_pci_remove(struct pci_dev *pdev)
  {
--	int retval;
--
--	retval = mutex_lock_interruptible(&rfkill->mutex);
--	if (retval)
--		return retval;
-+	int retval = 0;
- 
- 	if (state != rfkill->state) {
- 		retval = rfkill->toggle_radio(rfkill->data, state);
-@@ -74,7 +70,6 @@ static int rfkill_toggle_radio(struct rf
- 		}
- 	}
+ 	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;
  
--	mutex_unlock(&rfkill->mutex);
- 	return retval;
- }
+ 	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);
++		}
+ 
+ 		handled |= CSR_INT_BIT_RF_KILL;
+ 	}
+@@ -6527,6 +6529,7 @@ static void iwl_alive_start(struct iwl_p
+ 		mutex_lock(&priv->mutex);
  
-@@ -158,12 +153,13 @@ static ssize_t rfkill_state_store(struct
- 	if (!capable(CAP_NET_ADMIN))
- 		return -EPERM;
- 
-+	if (mutex_lock_interruptible(&rfkill->mutex))
-+		return -ERESTARTSYS;
- 	error = rfkill_toggle_radio(rfkill,
- 			state ? RFKILL_STATE_ON : RFKILL_STATE_OFF);
--	if (error)
--		return error;
-+	mutex_unlock(&rfkill->mutex);
+ 		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);
++		}
  
--	return count;
-+	return error ? error : count;
- }
+ 		handled |= CSR_INT_BIT_RF_KILL;
+ 	}
+@@ -6171,6 +6173,7 @@ static void iwl_alive_start(struct iwl_p
+ 		mutex_lock(&priv->mutex);
  
- static ssize_t rfkill_claim_show(struct device *dev,
+ 		if (rc) {
++			iwl_rate_control_unregister(priv->hw);
+ 			IWL_ERROR("Failed to register network "
+ 				  "device (error %d)\n", rc);
+ 			return;




More information about the fedora-extras-commits mailing list