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
- Previous message (by thread): rpms/selinux-policy/F-8 policy-20070703.patch, 1.155, 1.156 selinux-policy.spec, 1.594, 1.595
- Next message (by thread): rpms/swfdec/devel .cvsignore, 1.2, 1.3 sources, 1.2, 1.3 swfdec.spec, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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;
- Previous message (by thread): rpms/selinux-policy/F-8 policy-20070703.patch, 1.155, 1.156 selinux-policy.spec, 1.594, 1.595
- Next message (by thread): rpms/swfdec/devel .cvsignore, 1.2, 1.3 sources, 1.2, 1.3 swfdec.spec, 1.1, 1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list