rpms/kernel/F-8 kernel.spec, 1.435, 1.436 linux-2.6-wireless-pending-too.patch, 1.8, 1.9

John W. Linville (linville) fedora-extras-commits at redhat.com
Fri May 2 21:16:21 UTC 2008


Author: linville

Update of /cvs/pkgs/rpms/kernel/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4798

Modified Files:
	kernel.spec linux-2.6-wireless-pending-too.patch 
Log Message:
wireless fixes from 2008-05-01


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/kernel.spec,v
retrieving revision 1.435
retrieving revision 1.436
diff -u -r1.435 -r1.436
--- kernel.spec	2 May 2008 03:19:15 -0000	1.435
+++ kernel.spec	2 May 2008 21:15:34 -0000	1.436
@@ -2016,6 +2016,14 @@
 
 
 %changelog
+* Fri May 02 2008 John W. Linville <linville at redhat.com> 2.6.24.5-90
+- iwlwifi: fix debug messages during scanning
+- iwlwifi: fix current channel is not scanned
+- rt2x00: Don't enable short preamble for 1MBs
+- rt2x00: Fix quality/activity led handling
+- Make linux/wireless.h be able to compile
+- b43: Fix some TX/RX locking issues
+
 * Thu May 01 2008 Chuck Ebbert <cebbert at redhat.com> 2.6.24.6-89
 - Linux 2.6.24.6
 

linux-2.6-wireless-pending-too.patch:

Index: linux-2.6-wireless-pending-too.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-8/linux-2.6-wireless-pending-too.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- linux-2.6-wireless-pending-too.patch	1 May 2008 20:21:08 -0000	1.8
+++ linux-2.6-wireless-pending-too.patch	2 May 2008 21:15:35 -0000	1.9
@@ -1,3 +1,89 @@
+commit 61c2b682b8391f13b67e2d95990a0aba34697d9c
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Mon Apr 21 19:01:09 2008 +0200
+
+    rt2x00: Fix quality/activity led handling
+    
+    There was an obvious typo in LED structure
+    initialization which caused the radio and quality/activity
+    leds to be incorrectly initialized which resulted in
+    the leds not being enabled.
+    
+    Additionally add the rt2x00led_led_activity() handler
+    that will enable TX/RX activity leds when the radio
+    is being enabled.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 44a9809b97ec5acd1c549c3120bdd35613897d7c
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Mon Apr 21 19:00:17 2008 +0200
+
+    rt2x00: Don't enable short preamble for 1MBs
+    
+    The timing settings for 1MBs should exclude
+    the short preamble bit since that only applies
+    to 2MBs, 5.5MBs and 11MBs.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 2218228392080f0ca2fc2974604e79f57b12c436
+Author: Kirill A. Shutemov <kirill at shutemov.name>
+Date:   Tue Apr 22 16:38:55 2008 +0300
+
+    Make linux/wireless.h be able to compile
+    
+    Signed-off-by: Kirill A. Shutemov <kirill at shutemov.name>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 786b4557075ae0d8a23e73c316dc4204b41ccb4d
+Author: Bill Moss <bmoss at clemson.edu>
+Date:   Thu Apr 17 16:03:40 2008 -0700
+
+    iwlwifi: fix debug messages during scanning
+    
+    direct_mask will be set when we are not associated and requesting a
+    direct scan. The second debug print will be confusing as priv->essid
+    is not set at that time and it will thus print "<hidden>" while it is
+    known to which AP a direct scan is requested - as previous debug message
+    also indicates.
+    
+    Now make all debugging consistent.
+    
+    Signed-off-by: Bill Moss <bmoss at clemson.edu>
+    Signed-off-by: Reinette Chatre <reinette.chatre at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f52764886540b16e7962bd1d150bd939aec9248c
+Author: Guy Cohen <guy.cohen at intel.com>
+Date:   Mon Apr 21 15:41:57 2008 -0700
+
+    iwlwifi: fix current channel is not scanned
+    
+    All channels should be scanned, including the current channel
+    when the client is associated.
+    
+    Removed also unused flag to scan only active channels.
+    
+    Signed-off-by: Guy Cohen <guy.cohen at intel.com>
+    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 21a75d7788f4e29b6c6d28e08f9f0310c4de828d
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Fri Apr 25 19:29:08 2008 +0200
+
+    b43: Fix some TX/RX locking issues
+    
+    This fixes some TX/RX related locking issues.
+    With this patch applied, some of the PHY transmission errors are fixed.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
 commit c0d43990768b6ca83604ff4be80425b89d317e2f
 Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
 Date:   Tue Apr 29 10:07:56 2008 +0200
@@ -302,9 +388,28 @@
     Acked-by: Ron Rindjunsky <ron.rindjunsky at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
+diff -up linux-2.6.24.noarch/include/linux/wireless.h.orig linux-2.6.24.noarch/include/linux/wireless.h
+--- linux-2.6.24.noarch/include/linux/wireless.h.orig	2008-05-02 16:54:37.000000000 -0400
++++ linux-2.6.24.noarch/include/linux/wireless.h	2008-05-02 16:56:09.000000000 -0400
+@@ -69,14 +69,9 @@
+ 
+ /***************************** INCLUDES *****************************/
+ 
+-/* This header is used in user-space, therefore need to be sanitised
+- * for that purpose. Those includes are usually not compatible with glibc.
+- * To know which includes to use in user-space, check iwlib.h. */
+-#ifdef __KERNEL__
+-#include <linux/types.h>		/* for "caddr_t" et al		*/
++#include <linux/types.h>		/* for __u* and __s* typedefs */
+ #include <linux/socket.h>		/* for "struct sockaddr" et al	*/
+ #include <linux/if.h>			/* for IFNAMSIZ and co... */
+-#endif	/* __KERNEL__ */
+ 
+ /***************************** VERSION *****************************/
+ /*
 diff -up linux-2.6.24.noarch/include/linux/ieee80211.h.orig linux-2.6.24.noarch/include/linux/ieee80211.h
---- linux-2.6.24.noarch/include/linux/ieee80211.h.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/include/linux/ieee80211.h	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/include/linux/ieee80211.h.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/include/linux/ieee80211.h	2008-05-02 16:55:36.000000000 -0400
 @@ -113,7 +113,7 @@ struct ieee80211_hdr {
  struct ieee80211s_hdr {
  	u8 flags;
@@ -342,8 +447,8 @@
  	WLAN_EID_PWR_CONSTRAINT = 32,
  	WLAN_EID_PWR_CAPABILITY = 33,
 diff -up linux-2.6.24.noarch/MAINTAINERS.orig linux-2.6.24.noarch/MAINTAINERS
---- linux-2.6.24.noarch/MAINTAINERS.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/MAINTAINERS	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/MAINTAINERS.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/MAINTAINERS	2008-05-02 16:55:36.000000000 -0400
 @@ -2481,12 +2481,10 @@ W:	http://www.tazenda.demon.co.uk/phil/l
  S:	Maintained
  
@@ -360,8 +465,8 @@
  W:	http://linuxwireless.org/
  T:	git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
 diff -up linux-2.6.24.noarch/net/mac80211/mlme.c.orig linux-2.6.24.noarch/net/mac80211/mlme.c
---- linux-2.6.24.noarch/net/mac80211/mlme.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/mlme.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/mlme.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/mlme.c	2008-05-02 16:55:36.000000000 -0400
 @@ -2248,10 +2248,13 @@ static void ieee80211_rx_bss_put(struct 
  				 struct ieee80211_sta_bss *bss)
  {
@@ -407,8 +512,8 @@
  		bss->wmm_ie = NULL;
  		bss->wmm_ie_len = 0;
 diff -up linux-2.6.24.noarch/net/mac80211/rx.c.orig linux-2.6.24.noarch/net/mac80211/rx.c
---- linux-2.6.24.noarch/net/mac80211/rx.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/rx.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/rx.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/rx.c	2008-05-02 16:55:36.000000000 -0400
 @@ -2170,7 +2170,7 @@ void __ieee80211_rx(struct ieee80211_hw 
  	struct ieee80211_supported_band *sband;
  
@@ -419,8 +524,8 @@
  		return;
  	}
 diff -up linux-2.6.24.noarch/net/mac80211/main.c.orig linux-2.6.24.noarch/net/mac80211/main.c
---- linux-2.6.24.noarch/net/mac80211/main.c.orig	2008-05-01 15:26:36.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/main.c	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/main.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/main.c	2008-05-02 16:55:36.000000000 -0400
 @@ -255,22 +255,8 @@ static int ieee80211_open(struct net_dev
  
  	switch (sdata->vif.type) {
@@ -509,8 +614,8 @@
  	} else if (sdata->vif.type == IEEE80211_IF_TYPE_AP) {
  		conf.ssid = sdata->u.ap.ssid;
 diff -up linux-2.6.24.noarch/net/mac80211/mesh.c.orig linux-2.6.24.noarch/net/mac80211/mesh.c
---- linux-2.6.24.noarch/net/mac80211/mesh.c.orig	2008-05-01 15:26:36.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/mesh.c	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/mesh.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/mesh.c	2008-05-02 16:55:36.000000000 -0400
 @@ -8,6 +8,7 @@
   * published by the Free Software Foundation.
   */
@@ -550,8 +655,8 @@
  	return 5;
  }
 diff -up linux-2.6.24.noarch/net/mac80211/tkip.c.orig linux-2.6.24.noarch/net/mac80211/tkip.c
---- linux-2.6.24.noarch/net/mac80211/tkip.c.orig	2008-05-01 15:26:36.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/tkip.c	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/tkip.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/tkip.c	2008-05-02 16:55:36.000000000 -0400
 @@ -230,10 +230,8 @@ void ieee80211_get_tkip_key(struct ieee8
  
  	iv16 = data[hdr_len] << 8;
@@ -566,8 +671,8 @@
  #ifdef CONFIG_TKIP_DEBUG
  	printk(KERN_DEBUG "TKIP encrypt: iv16 = 0x%04x, iv32 = 0x%08x\n",
 diff -up linux-2.6.24.noarch/net/mac80211/wme.c.orig linux-2.6.24.noarch/net/mac80211/wme.c
---- linux-2.6.24.noarch/net/mac80211/wme.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/wme.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/wme.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/wme.c	2008-05-02 16:55:36.000000000 -0400
 @@ -709,7 +709,7 @@ void ieee80211_requeue(struct ieee80211_
  	struct ieee80211_sched_data *q = qdisc_priv(root_qd);
  	struct Qdisc *qdisc = q->queues[queue];
@@ -578,8 +683,8 @@
  	if (!qdisc || !qdisc->dequeue)
  		return;
 diff -up linux-2.6.24.noarch/net/mac80211/mesh.h.orig linux-2.6.24.noarch/net/mac80211/mesh.h
---- linux-2.6.24.noarch/net/mac80211/mesh.h.orig	2008-05-01 15:26:36.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/mesh.h	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/mesh.h.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/mesh.h	2008-05-02 16:55:36.000000000 -0400
 @@ -139,7 +139,7 @@ struct rmc_entry {
  
  struct mesh_rmc {
@@ -590,8 +695,8 @@
  
  
 diff -up linux-2.6.24.noarch/net/mac80211/ieee80211_i.h.orig linux-2.6.24.noarch/net/mac80211/ieee80211_i.h
---- linux-2.6.24.noarch/net/mac80211/ieee80211_i.h.orig	2008-05-01 15:26:36.000000000 -0400
-+++ linux-2.6.24.noarch/net/mac80211/ieee80211_i.h	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/net/mac80211/ieee80211_i.h.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/net/mac80211/ieee80211_i.h	2008-05-02 16:55:36.000000000 -0400
 @@ -354,7 +354,7 @@ struct ieee80211_if_sta {
  	int preq_queue_len;
  	struct mesh_stats mshstats;
@@ -602,8 +707,8 @@
  #endif
  	u16 aid;
 diff -up linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c.orig linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c
---- linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/b43/phy.c	2008-05-02 16:55:36.000000000 -0400
 @@ -2043,7 +2043,7 @@ int b43_phy_init(struct b43_wldev *dev)
  void b43_set_rx_antenna(struct b43_wldev *dev, int antenna)
  {
@@ -614,8 +719,8 @@
  	int autodiv = 0;
  
 diff -up linux-2.6.24.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.24.noarch/drivers/net/wireless/b43/main.c
---- linux-2.6.24.noarch/drivers/net/wireless/b43/main.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/b43/main.c	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/b43/main.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/b43/main.c	2008-05-02 16:56:09.000000000 -0400
 @@ -83,6 +83,10 @@ int b43_modparam_qos = 1;
  module_param_named(qos, b43_modparam_qos, int, 0444);
  MODULE_PARM_DESC(qos, "Enable QOS support (default on)");
@@ -627,7 +732,98 @@
  
  static const struct ssb_device_id b43_ssb_tbl[] = {
  	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, 5),
-@@ -3705,8 +3709,10 @@ static void setup_struct_wldev_for_init(
+@@ -724,6 +728,7 @@ static void b43_synchronize_irq(struct b
+  */
+ void b43_dummy_transmission(struct b43_wldev *dev)
+ {
++	struct b43_wl *wl = dev->wl;
+ 	struct b43_phy *phy = &dev->phy;
+ 	unsigned int i, max_loop;
+ 	u16 value;
+@@ -750,6 +755,9 @@ void b43_dummy_transmission(struct b43_w
+ 		return;
+ 	}
+ 
++	spin_lock_irq(&wl->irq_lock);
++	write_lock(&wl->tx_lock);
++
+ 	for (i = 0; i < 5; i++)
+ 		b43_ram_write(dev, i * 4, buffer[i]);
+ 
+@@ -790,6 +798,9 @@ void b43_dummy_transmission(struct b43_w
+ 	}
+ 	if (phy->radio_ver == 0x2050 && phy->radio_rev <= 0x5)
+ 		b43_radio_write16(dev, 0x0051, 0x0037);
++
++	write_unlock(&wl->tx_lock);
++	spin_unlock_irq(&wl->irq_lock);
+ }
+ 
+ static void key_write(struct b43_wldev *dev,
+@@ -2835,24 +2846,31 @@ static int b43_op_tx(struct ieee80211_hw
+ {
+ 	struct b43_wl *wl = hw_to_b43_wl(hw);
+ 	struct b43_wldev *dev = wl->current_dev;
+-	int err = -ENODEV;
++	unsigned long flags;
++	int err;
+ 
+ 	if (unlikely(skb->len < 2 + 2 + 6)) {
+ 		/* Too short, this can't be a valid frame. */
+-		return -EINVAL;
++		dev_kfree_skb_any(skb);
++		return NETDEV_TX_OK;
+ 	}
+ 	B43_WARN_ON(skb_shinfo(skb)->nr_frags);
+-
+ 	if (unlikely(!dev))
+-		goto out;
+-	if (unlikely(b43_status(dev) < B43_STAT_STARTED))
+-		goto out;
+-	/* TX is done without a global lock. */
+-	if (b43_using_pio_transfers(dev))
+-		err = b43_pio_tx(dev, skb, ctl);
+-	else
+-		err = b43_dma_tx(dev, skb, ctl);
+-out:
++		return NETDEV_TX_BUSY;
++
++	/* Transmissions on seperate queues can run concurrently. */
++	read_lock_irqsave(&wl->tx_lock, flags);
++
++	err = -ENODEV;
++	if (likely(b43_status(dev) >= B43_STAT_STARTED)) {
++		if (b43_using_pio_transfers(dev))
++			err = b43_pio_tx(dev, skb, ctl);
++		else
++			err = b43_dma_tx(dev, skb, ctl);
++	}
++
++	read_unlock_irqrestore(&wl->tx_lock, flags);
++
+ 	if (unlikely(err))
+ 		return NETDEV_TX_BUSY;
+ 	return NETDEV_TX_OK;
+@@ -3471,7 +3489,9 @@ static void b43_wireless_core_stop(struc
+ 	spin_unlock_irqrestore(&wl->irq_lock, flags);
+ 	b43_synchronize_irq(dev);
+ 
++	write_lock_irqsave(&wl->tx_lock, flags);
+ 	b43_set_status(dev, B43_STAT_INITIALIZED);
++	write_unlock_irqrestore(&wl->tx_lock, flags);
+ 
+ 	b43_pio_stop(dev);
+ 	mutex_unlock(&wl->mutex);
+@@ -3480,8 +3500,6 @@ static void b43_wireless_core_stop(struc
+ 	cancel_delayed_work_sync(&dev->periodic_work);
+ 	mutex_lock(&wl->mutex);
+ 
+-	ieee80211_stop_queues(wl->hw);	//FIXME this could cause a deadlock, as mac80211 seems buggy.
+-
+ 	b43_mac_suspend(dev);
+ 	free_irq(dev->dev->irq, dev);
+ 	b43dbg(wl, "Wireless interface stopped\n");
+@@ -3705,8 +3723,10 @@ static void setup_struct_wldev_for_init(
  static void b43_bluetooth_coext_enable(struct b43_wldev *dev)
  {
  	struct ssb_sprom *sprom = &dev->dev->bus->sprom;
@@ -639,7 +835,7 @@
  	if (!(sprom->boardflags_lo & B43_BFL_BTCOEXIST))
  		return;
  	if (dev->phy.type != B43_PHYTYPE_B && !dev->phy.gmode)
-@@ -3718,11 +3724,13 @@ static void b43_bluetooth_coext_enable(s
+@@ -3718,11 +3738,13 @@ static void b43_bluetooth_coext_enable(s
  	else
  		hf |= B43_HF_BTCOEX;
  	b43_hf_write(dev, hf);
@@ -655,7 +851,7 @@
  }
  
  static void b43_imcfglo_timeouts_workaround(struct b43_wldev *dev)
-@@ -3849,7 +3857,8 @@ static int b43_wireless_core_init(struct
+@@ -3849,7 +3871,8 @@ static int b43_wireless_core_init(struct
  	struct ssb_sprom *sprom = &bus->sprom;
  	struct b43_phy *phy = &dev->phy;
  	int err;
@@ -665,7 +861,7 @@
  
  	B43_WARN_ON(b43_status(dev) != B43_STAT_UNINIT);
  
-@@ -4312,6 +4321,14 @@ static int b43_wireless_core_attach(stru
+@@ -4312,6 +4335,14 @@ static int b43_wireless_core_attach(stru
  		err = -EOPNOTSUPP;
  		goto err_powerdown;
  	}
@@ -680,7 +876,7 @@
  	dev->phy.gmode = have_2ghz_phy;
  	tmp = dev->phy.gmode ? B43_TMSLOW_GMODE : 0;
  	b43_wireless_core_reset(dev, tmp);
-@@ -4409,8 +4426,16 @@ static int b43_one_core_attach(struct ss
+@@ -4409,8 +4440,16 @@ static int b43_one_core_attach(struct ss
  	return err;
  }
  
@@ -697,7 +893,7 @@
  	/* boardflags workarounds */
  	if (bus->boardinfo.vendor == SSB_BOARDVENDOR_DELL &&
  	    bus->chip_id == 0x4301 && bus->boardinfo.rev == 0x74)
-@@ -4418,6 +4443,13 @@ static void b43_sprom_fixup(struct ssb_b
+@@ -4418,6 +4457,13 @@ static void b43_sprom_fixup(struct ssb_b
  	if (bus->boardinfo.vendor == PCI_VENDOR_ID_APPLE &&
  	    bus->boardinfo.type == 0x4E && bus->boardinfo.rev > 0x40)
  		bus->sprom.boardflags_lo |= B43_BFL_PACTRL;
@@ -711,9 +907,17 @@
  }
  
  static void b43_wireless_exit(struct ssb_device *dev, struct b43_wl *wl)
+@@ -4461,6 +4507,7 @@ static int b43_wireless_init(struct ssb_
+ 	memset(wl, 0, sizeof(*wl));
+ 	wl->hw = hw;
+ 	spin_lock_init(&wl->irq_lock);
++	rwlock_init(&wl->tx_lock);
+ 	spin_lock_init(&wl->leds_lock);
+ 	spin_lock_init(&wl->shm_lock);
+ 	mutex_init(&wl->mutex);
 diff -up linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c.orig linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c
---- linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/b43/dma.c	2008-05-02 16:55:36.000000000 -0400
 @@ -980,6 +980,42 @@ void b43_dma_free(struct b43_wldev *dev)
  	destroy_ring(dma, tx_ring_mcast);
  }
@@ -775,9 +979,23 @@
  
  	err = -ENOMEM;
  	/* setup TX DMA channels. */
+diff -up linux-2.6.24.noarch/drivers/net/wireless/b43/b43.h.orig linux-2.6.24.noarch/drivers/net/wireless/b43/b43.h
+--- linux-2.6.24.noarch/drivers/net/wireless/b43/b43.h.orig	2008-05-02 16:54:37.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/b43/b43.h	2008-05-02 16:56:09.000000000 -0400
+@@ -691,6 +691,10 @@ struct b43_wl {
+ 
+ 	struct mutex mutex;
+ 	spinlock_t irq_lock;
++	/* R/W lock for data transmission.
++	 * Transmissions on 2+ queues can run concurrently, but somebody else
++	 * might sync with TX by write_lock_irqsave()'ing. */
++	rwlock_t tx_lock;
+ 	/* Lock for LEDs access. */
+ 	spinlock_t leds_lock;
+ 	/* Lock for SHM access. */
 diff -up linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c.orig linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c
---- linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c.orig	2008-05-01 15:26:37.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c	2008-05-01 15:45:10.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/libertas/scan.c	2008-05-02 16:55:36.000000000 -0400
 @@ -298,7 +298,8 @@ static int lbs_do_scan(struct lbs_privat
  	uint8_t *tlv;	/* pointer into our current, growing TLV storage area */
  
@@ -789,8 +1007,8 @@
  	/* create the fixed part for scan command */
  	scan_cmd = kzalloc(MAX_SCAN_CFG_ALLOC, GFP_KERNEL);
 diff -up linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c.orig linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c
---- linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/prism54/isl_ioctl.c	2008-05-02 16:55:36.000000000 -0400
 @@ -1186,7 +1186,7 @@ prism54_get_encode(struct net_device *nd
  	rvalue |= mgt_get_request(priv, DOT11_OID_DEFKEYID, 0, NULL, &r);
  	devindex = r.u;
@@ -801,9 +1019,69 @@
  		index = devindex;
  	rvalue |= mgt_get_request(priv, DOT11_OID_DEFKEYX, index, NULL, &r);
 diff -up linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
---- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2008-05-01 15:42:00.000000000 -0400
-@@ -6473,7 +6473,6 @@ static int iwl4965_mac_config_interface(
+--- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2008-05-02 16:55:30.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2008-05-02 16:56:09.000000000 -0400
+@@ -4633,17 +4633,6 @@ static int iwl4965_get_channels_for_scan
+ 		if (channels[i].flags & IEEE80211_CHAN_DISABLED)
+ 			continue;
+ 
+-		if (ieee80211_frequency_to_channel(channels[i].center_freq) ==
+-		    le16_to_cpu(priv->active_rxon.channel)) {
+-			if (iwl_is_associated(priv)) {
+-				IWL_DEBUG_SCAN
+-				    ("Skipping current channel %d\n",
+-				     le16_to_cpu(priv->active_rxon.channel));
+-				continue;
+-			}
+-		} else if (priv->only_active_channel)
+-			continue;
+-
+ 		scan_ch->channel = ieee80211_frequency_to_channel(channels[i].center_freq);
+ 
+ 		ch_info = iwl_get_channel_info(priv, band,
+@@ -5824,11 +5813,15 @@ static void iwl4965_bg_request_scan(stru
+ 		       priv->direct_ssid, priv->direct_ssid_len);
+ 		direct_mask = 1;
+ 	} else if (!iwl_is_associated(priv) && priv->essid_len) {
++		IWL_DEBUG_SCAN
++		  ("Kicking off one direct scan for '%s' when not associated\n",
++		   iwl4965_escape_essid(priv->essid, priv->essid_len));
+ 		scan->direct_scan[0].id = WLAN_EID_SSID;
+ 		scan->direct_scan[0].len = priv->essid_len;
+ 		memcpy(scan->direct_scan[0].ssid, priv->essid, priv->essid_len);
+ 		direct_mask = 1;
+ 	} else {
++		IWL_DEBUG_SCAN("Kicking off one indirect scan.\n");
+ 		direct_mask = 0;
+ 	}
+ 
+@@ -5881,23 +5874,18 @@ static void iwl4965_bg_request_scan(stru
+ 	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR)
+ 		scan->filter_flags = RXON_FILTER_PROMISC_MSK;
+ 
+-	if (direct_mask) {
+-		IWL_DEBUG_SCAN
+-		    ("Initiating direct scan for %s.\n",
+-		     iwl4965_escape_essid(priv->essid, priv->essid_len));
++	if (direct_mask)
+ 		scan->channel_count =
+ 			iwl4965_get_channels_for_scan(
+ 				priv, band, 1, /* active */
+ 				direct_mask,
+ 				(void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
+-	} else {
+-		IWL_DEBUG_SCAN("Initiating indirect scan.\n");
++	else
+ 		scan->channel_count =
+ 			iwl4965_get_channels_for_scan(
+ 				priv, band, 0, /* passive */
+ 				direct_mask,
+ 				(void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
+-	}
+ 
+ 	cmd.len += le16_to_cpu(scan->tx_cmd.len) +
+ 	    scan->channel_count * sizeof(struct iwl4965_scan_channel);
+@@ -6473,7 +6461,6 @@ static int iwl4965_mac_config_interface(
  
  	if (priv->vif != vif) {
  		IWL_DEBUG_MAC80211("leave - priv->vif != vif\n");
@@ -811,10 +1089,104 @@
  		return 0;
  	}
  
+@@ -7062,8 +7049,6 @@ static void iwl4965_mac_reset_tsf(struct
+ 		return;
+ 	}
+ 
+-	priv->only_active_channel = 0;
+-
+ 	iwl4965_set_rate(priv);
+ 
+ 	mutex_unlock(&priv->mutex);
+diff -up linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-4965.h.orig linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-4965.h
+--- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-4965.h.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-4965.h	2008-05-02 16:56:09.000000000 -0400
+@@ -996,7 +996,6 @@ struct iwl_priv {
+ 	u8 direct_ssid_len;
+ 	u8 direct_ssid[IW_ESSID_MAX_SIZE];
+ 	struct iwl4965_scan_cmd *scan;
+-	u8 only_active_channel;
+ 
+ 	/* spinlock */
+ 	spinlock_t lock;	/* protect general shared data */
+diff -up linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-3945.h.orig linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-3945.h
+--- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-3945.h.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl-3945.h	2008-05-02 16:56:09.000000000 -0400
+@@ -742,7 +742,6 @@ struct iwl3945_priv {
+ 	u8 direct_ssid_len;
+ 	u8 direct_ssid[IW_ESSID_MAX_SIZE];
+ 	struct iwl3945_scan_cmd *scan;
+-	u8 only_active_channel;
+ 
+ 	/* spinlock */
+ 	spinlock_t lock;	/* protect general shared data */
 diff -up linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
---- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2008-05-01 15:42:00.000000000 -0400
-@@ -6907,7 +6907,6 @@ static int iwl3945_mac_config_interface(
+--- linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2008-05-02 16:55:31.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2008-05-02 16:56:09.000000000 -0400
+@@ -4968,17 +4968,6 @@ static int iwl3945_get_channels_for_scan
+ 		if (channels[i].flags & IEEE80211_CHAN_DISABLED)
+ 			continue;
+ 
+-		if (channels[i].hw_value ==
+-		    le16_to_cpu(priv->active_rxon.channel)) {
+-			if (iwl3945_is_associated(priv)) {
+-				IWL_DEBUG_SCAN
+-				    ("Skipping current channel %d\n",
+-				     le16_to_cpu(priv->active_rxon.channel));
+-				continue;
+-			}
+-		} else if (priv->only_active_channel)
+-			continue;
+-
+ 		scan_ch->channel = channels[i].hw_value;
+ 
+ 		ch_info = iwl3945_get_channel_info(priv, band, scan_ch->channel);
+@@ -6303,12 +6292,17 @@ static void iwl3945_bg_request_scan(stru
+ 		       priv->direct_ssid, priv->direct_ssid_len);
+ 		direct_mask = 1;
+ 	} else if (!iwl3945_is_associated(priv) && priv->essid_len) {
++		IWL_DEBUG_SCAN
++		  ("Kicking off one direct scan for '%s' when not associated\n",
++		   iwl3945_escape_essid(priv->essid, priv->essid_len));
+ 		scan->direct_scan[0].id = WLAN_EID_SSID;
+ 		scan->direct_scan[0].len = priv->essid_len;
+ 		memcpy(scan->direct_scan[0].ssid, priv->essid, priv->essid_len);
+ 		direct_mask = 1;
+-	} else
++	} else {
++		IWL_DEBUG_SCAN("Kicking off one indirect scan.\n");
+ 		direct_mask = 0;
++	}
+ 
+ 	/* We don't build a direct scan probe request; the uCode will do
+ 	 * that based on the direct_mask added to each channel entry */
+@@ -6346,23 +6340,18 @@ static void iwl3945_bg_request_scan(stru
+ 	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR)
+ 		scan->filter_flags = RXON_FILTER_PROMISC_MSK;
+ 
+-	if (direct_mask) {
+-		IWL_DEBUG_SCAN
+-		    ("Initiating direct scan for %s.\n",
+-		     iwl3945_escape_essid(priv->essid, priv->essid_len));
++	if (direct_mask)
+ 		scan->channel_count =
+ 			iwl3945_get_channels_for_scan(
+ 				priv, band, 1, /* active */
+ 				direct_mask,
+ 				(void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
+-	} else {
+-		IWL_DEBUG_SCAN("Initiating indirect scan.\n");
++	else
+ 		scan->channel_count =
+ 			iwl3945_get_channels_for_scan(
+ 				priv, band, 0, /* passive */
+ 				direct_mask,
+ 				(void *)&scan->data[le16_to_cpu(scan->tx_cmd.len)]);
+-	}
+ 
+ 	cmd.len += le16_to_cpu(scan->tx_cmd.len) +
+ 	    scan->channel_count * sizeof(struct iwl3945_scan_channel);
+@@ -6907,7 +6896,6 @@ static int iwl3945_mac_config_interface(
  
  	if (priv->vif != vif) {
  		IWL_DEBUG_MAC80211("leave - priv->vif != vif\n");
@@ -822,9 +1194,163 @@
  		return 0;
  	}
  
+@@ -7315,8 +7303,6 @@ static void iwl3945_mac_reset_tsf(struct
+ 		return;
+ 	}
+ 
+-	priv->only_active_channel = 0;
+-
+ 	iwl3945_set_rate(priv);
+ 
+ 	mutex_unlock(&priv->mutex);
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c	2008-05-02 16:56:09.000000000 -0400
+@@ -114,6 +114,7 @@ int rt2x00lib_enable_radio(struct rt2x00
+ 		return status;
+ 
+ 	rt2x00leds_led_radio(rt2x00dev, true);
++	rt2x00led_led_activity(rt2x00dev, true);
+ 
+ 	__set_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags);
+ 
+@@ -157,6 +158,7 @@ void rt2x00lib_disable_radio(struct rt2x
+ 	 * Disable radio.
+ 	 */
+ 	rt2x00dev->ops->lib->set_device_state(rt2x00dev, STATE_RADIO_OFF);
++	rt2x00led_led_activity(rt2x00dev, false);
+ 	rt2x00leds_led_radio(rt2x00dev, false);
+ }
+ 
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2400pci.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2400pci.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2400pci.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2400pci.c	2008-05-02 16:56:09.000000000 -0400
+@@ -366,7 +366,7 @@ static void rt2400pci_config_erp(struct 
+ 	rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
+ 
+ 	rt2x00pci_register_read(rt2x00dev, ARCSR2, &reg);
+-	rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00 | preamble_mask);
++	rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00);
+ 	rt2x00_set_field32(&reg, ARCSR2_SERVICE, 0x04);
+ 	rt2x00_set_field32(&reg, ARCSR2_LENGTH, get_duration(ACK_SIZE, 10));
+ 	rt2x00pci_register_write(rt2x00dev, ARCSR2, reg);
+@@ -1313,7 +1313,7 @@ static int rt2400pci_init_eeprom(struct 
+ 
+ 	if (value == LED_MODE_TXRX_ACTIVITY) {
+ 		rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
+-		rt2x00dev->led_radio.type = LED_TYPE_ACTIVITY;
++		rt2x00dev->led_qual.type = LED_TYPE_ACTIVITY;
+ 		rt2x00dev->led_qual.led_dev.brightness_set =
+ 		    rt2400pci_brightness_set;
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24))
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500usb.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500usb.c	2008-05-02 16:56:09.000000000 -0400
+@@ -1399,7 +1399,7 @@ static int rt2500usb_init_eeprom(struct 
+ 
+ 	if (value == LED_MODE_TXRX_ACTIVITY) {
+ 		rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
+-		rt2x00dev->led_radio.type = LED_TYPE_ACTIVITY;
++		rt2x00dev->led_qual.type = LED_TYPE_ACTIVITY;
+ 		rt2x00dev->led_qual.led_dev.brightness_set =
+ 		    rt2500usb_brightness_set;
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24))
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00lib.h.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00lib.h
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00lib.h.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00lib.h	2008-05-02 16:56:09.000000000 -0400
+@@ -185,6 +185,7 @@ static inline void rt2x00rfkill_resume(s
+  */
+ #ifdef CONFIG_RT2X00_LIB_LEDS
+ void rt2x00leds_led_quality(struct rt2x00_dev *rt2x00dev, int rssi);
++void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev, bool enabled);
+ void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev, bool enabled);
+ void rt2x00leds_led_radio(struct rt2x00_dev *rt2x00dev, bool enabled);
+ void rt2x00leds_register(struct rt2x00_dev *rt2x00dev);
+@@ -197,6 +198,11 @@ static inline void rt2x00leds_led_qualit
+ {
+ }
+ 
++static inline void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev,
++					  bool enabled)
++{
++}
++
+ static inline void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev,
+ 					bool enabled)
+ {
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2500pci.c	2008-05-02 16:56:09.000000000 -0400
+@@ -373,7 +373,7 @@ static void rt2500pci_config_erp(struct 
+ 	rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
+ 
+ 	rt2x00pci_register_read(rt2x00dev, ARCSR2, &reg);
+-	rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00 | preamble_mask);
++	rt2x00_set_field32(&reg, ARCSR2_SIGNAL, 0x00);
+ 	rt2x00_set_field32(&reg, ARCSR2_SERVICE, 0x04);
+ 	rt2x00_set_field32(&reg, ARCSR2_LENGTH, get_duration(ACK_SIZE, 10));
+ 	rt2x00pci_register_write(rt2x00dev, ARCSR2, reg);
+@@ -1490,7 +1490,7 @@ static int rt2500pci_init_eeprom(struct 
+ 
+ 	if (value == LED_MODE_TXRX_ACTIVITY) {
+ 		rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
+-		rt2x00dev->led_radio.type = LED_TYPE_ACTIVITY;
++		rt2x00dev->led_qual.type = LED_TYPE_ACTIVITY;
+ 		rt2x00dev->led_qual.led_dev.brightness_set =
+ 		    rt2500pci_brightness_set;
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24))
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00leds.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00leds.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00leds.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt2x00leds.c	2008-05-02 16:56:09.000000000 -0400
+@@ -73,6 +73,21 @@ void rt2x00leds_led_quality(struct rt2x0
+ 	}
+ }
+ 
++void rt2x00led_led_activity(struct rt2x00_dev *rt2x00dev, bool enabled)
++{
++	struct rt2x00_led *led = &rt2x00dev->led_qual;
++	unsigned int brightness;
++
++	if ((led->type != LED_TYPE_ACTIVITY) || !(led->flags & LED_REGISTERED))
++		return;
++
++	brightness = enabled ? LED_FULL : LED_OFF;
++	if (brightness != led->led_dev.brightness) {
++		led->led_dev.brightness_set(&led->led_dev, brightness);
++		led->led_dev.brightness = brightness;
++	}
++}
++
+ void rt2x00leds_led_assoc(struct rt2x00_dev *rt2x00dev, bool enabled)
+ {
+ 	struct rt2x00_led *led = &rt2x00dev->led_assoc;
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt61pci.c	2008-05-02 16:56:09.000000000 -0400
+@@ -2094,7 +2094,7 @@ static int rt61pci_init_eeprom(struct rt
+ 
+ 	if (value == LED_MODE_SIGNAL_STRENGTH) {
+ 		rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
+-		rt2x00dev->led_radio.type = LED_TYPE_QUALITY;
++		rt2x00dev->led_qual.type = LED_TYPE_QUALITY;
+ 		rt2x00dev->led_qual.led_dev.brightness_set =
+ 		    rt61pci_brightness_set;
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24))
+diff -up linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c
+--- linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2008-05-02 16:54:38.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2008-05-02 16:56:09.000000000 -0400
+@@ -1654,7 +1654,7 @@ static int rt73usb_init_eeprom(struct rt
+ 
+ 	if (value == LED_MODE_SIGNAL_STRENGTH) {
+ 		rt2x00dev->led_qual.rt2x00dev = rt2x00dev;
+-		rt2x00dev->led_radio.type = LED_TYPE_QUALITY;
++		rt2x00dev->led_qual.type = LED_TYPE_QUALITY;
+ 		rt2x00dev->led_qual.led_dev.brightness_set =
+ 		    rt73usb_brightness_set;
+ #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24))
 diff -up linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c.orig linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c
---- linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c.orig	2008-05-02 16:55:31.000000000 -0400
++++ linux-2.6.24.noarch/drivers/net/wireless/ath5k/hw.c	2008-05-02 16:55:36.000000000 -0400
 @@ -304,14 +304,20 @@ struct ath5k_hw *ath5k_hw_attach(struct 
  		ah->ah_radio = AR5K_RF2413;
  		ah->ah_phy_spending = AR5K_PHY_SPENDING_RF5112A;
@@ -851,8 +1377,8 @@
  	 * Register returns 0x4 for radio revision
  	 * so ath5k_hw_radio_revision doesn't parse the value
 diff -up linux-2.6.24.noarch/drivers/ssb/pci.c.orig linux-2.6.24.noarch/drivers/ssb/pci.c
---- linux-2.6.24.noarch/drivers/ssb/pci.c.orig	2008-05-01 15:41:55.000000000 -0400
-+++ linux-2.6.24.noarch/drivers/ssb/pci.c	2008-05-01 15:42:00.000000000 -0400
+--- linux-2.6.24.noarch/drivers/ssb/pci.c.orig	2008-05-02 16:55:31.000000000 -0400
++++ linux-2.6.24.noarch/drivers/ssb/pci.c	2008-05-02 16:55:36.000000000 -0400
 @@ -484,6 +484,11 @@ static int sprom_extract(struct ssb_bus 
  			goto unsupported;
  	}




More information about the fedora-extras-commits mailing list