rpms/kernel/devel kernel.spec, 1.681, 1.682 linux-2.6-wireless-pending.patch, 1.51, 1.52 linux-2.6-wireless.patch, 1.39, 1.40

John W. Linville (linville) fedora-extras-commits at redhat.com
Tue Jun 10 19:09:11 UTC 2008


Author: linville

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

Modified Files:
	kernel.spec linux-2.6-wireless-pending.patch 
	linux-2.6-wireless.patch 
Log Message:
Upstream wireless fixes from 2008-06-09


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.681
retrieving revision 1.682
diff -u -r1.681 -r1.682
--- kernel.spec	10 Jun 2008 16:44:15 -0000	1.681
+++ kernel.spec	10 Jun 2008 19:08:27 -0000	1.682
@@ -1129,7 +1129,7 @@
 ApplyPatch linux-2.6-selinux-new-proc-checks.patch
 
 # wireless patches headed for 2.6.26
-#ApplyPatch linux-2.6-wireless.patch
+ApplyPatch linux-2.6-wireless.patch
 # wireless patches headed for 2.6.27
 ApplyPatch linux-2.6-wireless-pending.patch
 
@@ -1774,6 +1774,10 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
 
 %changelog
+* Tue Jun 10 2008 John W. Linville <linville at redhat.com>
+- Upstream wireless fixes from 2008-06-09
+  (http://marc.info/?l=linux-kernel&m=121304710726632&w=2)
+
 * Tue Jun 10 2008 Dave Jones <davej at redhat.com>
 - 2.6.26-rc5-git4
 

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.51 -r 1.52 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.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- linux-2.6-wireless-pending.patch	3 Jun 2008 21:08:46 -0000	1.51
+++ linux-2.6-wireless-pending.patch	10 Jun 2008 19:08:27 -0000	1.52
@@ -1,23 +1,3 @@
-commit 30935069be7faad5323553d1ce6292a33846c2c7
-Author: Dan Williams <dcbw at redhat.com>
-Date:   Mon Jun 2 17:51:23 2008 -0400
-
-    ipw2200: queue direct scans
-    
-    When another scan is in progress, a direct scan gets dropped on the
-    floor.  However, that direct scan is usually the scan that's really
-    needed by userspace, and gets stomped on by all the broadcast scans the
-    ipw2200 driver issues internally.  Make sure the direct scan happens
-    eventually, and as a bonus ensure that the passive scan worker is
-    cleaned up when appropriate.
-    
-    The change of request_passive_scan form a struct work to struct
-    delayed_work is only to make the set_wx_scan() code a bit simpler, it's
-    still only used with a delay of 0 to match previous behavior.
-    
-    Signed-off-by: Dan Williams <dcbw at redhat.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
 commit 78cf07472f0ede8394bacc4bc02354505080cfe1
 Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
 Date:   Mon Jun 2 09:25:05 2008 +0200
@@ -3773,8 +3753,8 @@
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
 diff -up linux-2.6.25.noarch/drivers/net/Kconfig.orig linux-2.6.25.noarch/drivers/net/Kconfig
---- linux-2.6.25.noarch/drivers/net/Kconfig.orig	2008-06-03 16:17:35.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/Kconfig	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/Kconfig.orig	2008-06-10 13:13:57.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/Kconfig	2008-06-10 13:17:26.000000000 -0400
 @@ -2283,6 +2283,19 @@ config GELIC_WIRELESS
  	  the driver automatically distinguishes the models, you can
  	  safely enable this option even if you have a wireless-less model.
@@ -3796,8 +3776,8 @@
  	tristate "Gianfar Ethernet"
  	depends on FSL_SOC
 diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig	2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c	2008-06-10 13:17:26.000000000 -0400
 @@ -110,7 +110,7 @@ static void gelic_card_get_ether_port_st
  void gelic_card_up(struct gelic_card *card)
  {
@@ -3844,8 +3824,8 @@
  
  	return card;
 diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig	2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h	2008-06-10 13:17:26.000000000 -0400
 @@ -298,7 +298,7 @@ struct gelic_card {
  	wait_queue_head_t waitq;
  
@@ -3856,8 +3836,8 @@
  
  	u64 ether_port_status;
 diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig	2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c	2008-06-10 13:17:26.000000000 -0400
 @@ -45,7 +45,8 @@
  #include "ps3_gelic_wireless.h"
  
@@ -4401,7 +4381,7 @@
  	destroy_workqueue(wl->event_queue);
 diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h
 --- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h.orig	2008-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h	2008-06-03 16:45:59.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h	2008-06-10 13:17:26.000000000 -0400
 @@ -241,7 +241,7 @@ enum gelic_wl_assoc_state {
  #define GELIC_WEP_KEYS 4
  struct gelic_wl_info {
@@ -4431,8 +4411,8 @@
  	struct iw_statistics iwstat;
  };
 diff -up linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig linux-2.6.25.noarch/drivers/net/wireless/adm8211.c
---- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-06-10 13:17:26.000000000 -0400
 @@ -306,11 +306,10 @@ static int adm8211_get_tx_stats(struct i
  				struct ieee80211_tx_queue_stats *stats)
  {
@@ -4581,8 +4561,8 @@
  
  	return 0;
 diff -up linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig linux-2.6.25.noarch/drivers/net/wireless/adm8211.h
---- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-06-10 13:17:26.000000000 -0400
 @@ -443,7 +443,6 @@ struct adm8211_rx_ring_info {
  struct adm8211_tx_ring_info {
  	struct sk_buff *skb;
@@ -4592,8 +4572,8 @@
  };
  
 diff -up linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig linux-2.6.25.noarch/drivers/net/wireless/airo.c
---- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-06-10 13:17:26.000000000 -0400
 @@ -1148,7 +1148,6 @@ static u8 airo_dbm_to_pct (tdsRssiEntry 
  static void airo_networks_free(struct airo_info *ai);
  
@@ -4762,8 +4742,8 @@
  	}
  	buffer = (u16*)skb_put (skb, len + hdrlen);
 diff -up linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig linux-2.6.25.noarch/drivers/net/wireless/arlan.h
---- linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h	2008-06-10 13:17:26.000000000 -0400
 @@ -330,7 +330,6 @@ struct TxParam
  #define TX_RING_SIZE 2
  /* Information that need to be kept for each board. */
@@ -4773,8 +4753,8 @@
        struct arlan_shmem * conf;
  
 diff -up linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c
---- linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c	2008-06-10 13:17:26.000000000 -0400
 @@ -125,7 +125,7 @@ static inline int arlan_drop_tx(struct n
  {
  	struct arlan_private *priv = netdev_priv(dev);
@@ -4859,8 +4839,8 @@
  
  
 diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c
---- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-06-10 13:17:26.000000000 -0400
 @@ -167,8 +167,7 @@ static struct pci_driver ath5k_pci_drive
  /*
   * Prototypes - MAC 802.11 stack related functions
@@ -5150,8 +5130,8 @@
  		sc->bbuf->skb = NULL;
  	else
 diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h
---- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h	2008-06-10 13:17:26.000000000 -0400
 @@ -60,7 +60,6 @@ struct ath5k_buf {
  	dma_addr_t		daddr;	/* physical addr of desc */
  	struct sk_buff		*skb;	/* skbuff for buf */
@@ -5171,8 +5151,8 @@
  	struct ieee80211_hw	*hw;		/* IEEE 802.11 common */
  	struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
 diff -up linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig linux-2.6.25.noarch/drivers/net/wireless/atmel.c
---- linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c	2008-06-10 13:17:26.000000000 -0400
 @@ -433,7 +433,6 @@ struct atmel_private {
  	struct net_device *dev;
  	struct device *sys_dev;
@@ -5352,8 +5332,8 @@
  	dev->do_ioctl = atmel_ioctl;
  	dev->irq = irq;
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-06-10 13:17:26.000000000 -0400
 @@ -410,8 +410,7 @@ enum {
  #define B43_IRQ_TIMEOUT			0x80000000
  
@@ -5437,8 +5417,8 @@
  #define INT_TO_Q52(i)	((i) << 2)
  /* Convert a Q5.2 value to an integer (precision loss!) */
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig	2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c	2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c	2008-06-10 13:17:26.000000000 -0400
 @@ -270,24 +270,22 @@ static int restart_write_file(struct b43
  	return err;
  }
@@ -5564,8 +5544,8 @@
  #undef add_dyn_dbg
  }
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h.orig	2008-06-03 16:45:19.000000000 -0400
[...2360 lines suppressed...]
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_algo.c	2008-06-10 13:17:43.000000000 -0400
 @@ -237,8 +237,7 @@ static void rate_control_pid_sample(stru
  }
  
@@ -51210,8 +50849,8 @@
  #ifdef CONFIG_MAC80211_DEBUGFS
  	rate_control_pid_event_tx_rate(
 diff -up linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c
---- linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c	2008-06-10 13:17:43.000000000 -0400
 @@ -39,11 +39,11 @@ static void rate_control_pid_event(struc
  }
  
@@ -51238,8 +50877,8 @@
  	case RC_PID_EVENT_TYPE_RATE_CHANGE:
  		p += snprintf(pb + p, length - p, "rate_change %d %d",
 diff -up linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig linux-2.6.25.noarch/net/mac80211/rc80211_pid.h
---- linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h	2008-06-10 13:17:43.000000000 -0400
 @@ -61,7 +61,7 @@ enum rc_pid_event_type {
  union rc_pid_event_data {
  	/* RC_PID_EVENT_TX_STATUS */
@@ -51259,8 +50898,8 @@
  void rate_control_pid_event_rate_change(struct rc_pid_event_buffer *buf,
  					       int index, int rate);
 diff -up linux-2.6.25.noarch/net/mac80211/rx.c.orig linux-2.6.25.noarch/net/mac80211/rx.c
---- linux-2.6.25.noarch/net/mac80211/rx.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rx.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rx.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rx.c	2008-06-10 13:17:43.000000000 -0400
 @@ -77,6 +77,134 @@ static inline int should_drop_frame(stru
  	return 0;
  }
@@ -51732,8 +51371,8 @@
  	rcu_read_unlock();
  }
 diff -up linux-2.6.25.noarch/net/mac80211/sta_info.c.orig linux-2.6.25.noarch/net/mac80211/sta_info.c
---- linux-2.6.25.noarch/net/mac80211/sta_info.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.c	2008-06-10 13:17:43.000000000 -0400
 @@ -202,14 +202,12 @@ void sta_info_destroy(struct sta_info *s
  		dev_kfree_skb_any(skb);
  
@@ -51820,8 +51459,8 @@
  
  
 diff -up linux-2.6.25.noarch/net/mac80211/sta_info.h.orig linux-2.6.25.noarch/net/mac80211/sta_info.h
---- linux-2.6.25.noarch/net/mac80211/sta_info.h.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.h	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.h.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.h	2008-06-10 13:17:43.000000000 -0400
 @@ -32,7 +32,7 @@
   * @WLAN_STA_WDS: Station is one of our WDS peers.
   * @WLAN_STA_PSPOLL: Station has just PS-polled us.
@@ -51981,8 +51620,8 @@
  /* Maximum number of concurrently registered stations */
  #define MAX_STA_COUNT 2007
 diff -up linux-2.6.25.noarch/net/mac80211/tkip.c.orig linux-2.6.25.noarch/net/mac80211/tkip.c
---- linux-2.6.25.noarch/net/mac80211/tkip.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.c	2008-06-10 13:17:43.000000000 -0400
 @@ -6,25 +6,23 @@
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
@@ -52363,8 +52002,8 @@
 -
 -
 diff -up linux-2.6.25.noarch/net/mac80211/tkip.h.orig linux-2.6.25.noarch/net/mac80211/tkip.h
---- linux-2.6.25.noarch/net/mac80211/tkip.h.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.h	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.h.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.h	2008-06-10 13:17:43.000000000 -0400
 @@ -13,12 +13,8 @@
  #include <linux/crypto.h>
  #include "key.h"
@@ -52381,8 +52020,8 @@
  				 struct ieee80211_key *key,
  				 u8 *pos, size_t payload_len, u8 *ta);
 diff -up linux-2.6.25.noarch/net/mac80211/tx.c.orig linux-2.6.25.noarch/net/mac80211/tx.c
---- linux-2.6.25.noarch/net/mac80211/tx.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tx.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tx.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tx.c	2008-06-10 13:17:43.000000000 -0400
 @@ -91,11 +91,12 @@ static u16 ieee80211_duration(struct iee
  			      int next_frag_len)
  {
@@ -53781,8 +53420,8 @@
  
  	return skb;
 diff -up linux-2.6.25.noarch/net/mac80211/util.c.orig linux-2.6.25.noarch/net/mac80211/util.c
---- linux-2.6.25.noarch/net/mac80211/util.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/util.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/util.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/util.c	2008-06-10 13:17:43.000000000 -0400
 @@ -258,7 +258,7 @@ EXPORT_SYMBOL(ieee80211_generic_frame_du
  
  __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
@@ -53913,8 +53552,8 @@
  }
  EXPORT_SYMBOL(ieee80211_wake_queues);
 diff -up linux-2.6.25.noarch/net/mac80211/wep.c.orig linux-2.6.25.noarch/net/mac80211/wep.c
---- linux-2.6.25.noarch/net/mac80211/wep.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.c	2008-06-10 13:17:43.000000000 -0400
 @@ -93,13 +93,9 @@ static u8 *ieee80211_wep_add_iv(struct i
  	fc |= IEEE80211_FCTL_PROTECTED;
  	hdr->frame_control = cpu_to_le16(fc);
@@ -53960,8 +53599,8 @@
  
  	if (wep_encrypt_skb(tx, tx->skb) < 0) {
 diff -up linux-2.6.25.noarch/net/mac80211/wep.h.orig linux-2.6.25.noarch/net/mac80211/wep.h
---- linux-2.6.25.noarch/net/mac80211/wep.h.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.h	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.h.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.h	2008-06-10 13:17:43.000000000 -0400
 @@ -26,7 +26,7 @@ int ieee80211_wep_encrypt(struct ieee802
  			  struct ieee80211_key *key);
  int ieee80211_wep_decrypt(struct ieee80211_local *local, struct sk_buff *skb,
@@ -53972,8 +53611,8 @@
  ieee80211_rx_result
  ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx);
 diff -up linux-2.6.25.noarch/net/mac80211/wext.c.orig linux-2.6.25.noarch/net/mac80211/wext.c
---- linux-2.6.25.noarch/net/mac80211/wext.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wext.c.orig	2008-06-10 13:15:51.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-06-10 13:17:43.000000000 -0400
 @@ -169,14 +169,26 @@ static int ieee80211_ioctl_giwrange(stru
  	range->num_encoding_sizes = 2;
  	range->max_encoding_tokens = NUM_DEFAULT_KEYS;
@@ -54007,7 +53646,7 @@
  	range->avg_qual.updated = local->wstats_flags;
  
  	range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
-@@ -1000,8 +1012,8 @@ static struct iw_statistics *ieee80211_g
+@@ -1007,8 +1019,8 @@ static struct iw_statistics *ieee80211_g
  		wstats->qual.noise = 0;
  		wstats->qual.updated = IW_QUAL_ALL_INVALID;
  	} else {
@@ -54019,8 +53658,8 @@
  		wstats->qual.updated = local->wstats_flags;
  	}
 diff -up linux-2.6.25.noarch/net/mac80211/wme.c.orig linux-2.6.25.noarch/net/mac80211/wme.c
---- linux-2.6.25.noarch/net/mac80211/wme.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.c	2008-06-10 13:17:43.000000000 -0400
 @@ -19,16 +19,22 @@
  #include "wme.h"
  
@@ -54395,8 +54034,8 @@
  	if (requeue)
  		ieee80211_requeue(local, agg_queue);
 diff -up linux-2.6.25.noarch/net/mac80211/wme.h.orig linux-2.6.25.noarch/net/mac80211/wme.h
---- linux-2.6.25.noarch/net/mac80211/wme.h.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.h.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-06-10 13:17:43.000000000 -0400
 @@ -31,7 +31,7 @@ static inline int WLAN_FC_IS_QOS_DATA(u1
  	return (fc & 0x8C) == 0x88;
  }
@@ -54407,8 +54046,8 @@
  int ieee80211_qdisc_installed(struct net_device *dev);
  int ieee80211_ht_agg_queue_add(struct ieee80211_local *local,
 diff -up linux-2.6.25.noarch/net/mac80211/wpa.c.orig linux-2.6.25.noarch/net/mac80211/wpa.c
---- linux-2.6.25.noarch/net/mac80211/wpa.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wpa.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-06-10 13:17:43.000000000 -0400
 @@ -79,6 +79,7 @@ ieee80211_tx_h_michael_mic_add(struct ie
  	struct sk_buff *skb = tx->skb;
  	int authenticator;
@@ -54654,8 +54293,8 @@
  		}
  	}
 diff -up linux-2.6.25.noarch/net/wireless/core.c.orig linux-2.6.25.noarch/net/wireless/core.c
---- linux-2.6.25.noarch/net/wireless/core.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/core.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/core.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/core.c	2008-06-10 13:17:43.000000000 -0400
 @@ -143,8 +143,11 @@ void cfg80211_put_dev(struct cfg80211_re
  int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
  			char *newname)
@@ -54719,8 +54358,8 @@
  
  /* exported functions */
 diff -up linux-2.6.25.noarch/net/wireless/radiotap.c.orig linux-2.6.25.noarch/net/wireless/radiotap.c
---- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-06-10 13:17:43.000000000 -0400
 @@ -59,23 +59,21 @@ int ieee80211_radiotap_iterator_init(
  		return -EINVAL;
  

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.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- linux-2.6-wireless.patch	3 Jun 2008 21:08:46 -0000	1.39
+++ linux-2.6-wireless.patch	10 Jun 2008 19:08:27 -0000	1.40
@@ -1,270 +1,717 @@
-commit c2b25f240163c9d3a7a391747f996da9e18a067d
-Author: Kirill A. Shutemov <kirill at shutemov.name>
-Date:   Tue Jun 3 13:48:08 2008 -0400
+commit b6b16196b064bbff83e8161359f8b73465d4aa36
+Author: Marcin Slusarz <marcin.slusarz at gmail.com>
+Date:   Sun Jun 8 13:13:06 2008 +0200
+
+    iwlwifi: fix oops in iwl3945_led_brightness_set
+    
+    fix race between:
+    ieee80211_open->ieee80211_led_radio->led_trigger_event->led_set_brightness->iwl3945_led_brightness_set
+    (which assumes that "led->priv" is not NULL)
+    and
+    iwl3945_pci_probe->iwl3945_setup_deferred_work->(...)->iwl3945_bg_alive_start->iwl3945_alive_start->iwl3945_led_register->iwl3945_led_register_led
+    which sets priv field in struct iwl3945_led
+    after
+    led->led_dev.brightness_set = iwl3945_led_brightness_set;
+    (...)
+    led_classdev_register(device, &led->led_dev);
+    
+    http://kerneloops.org/guilty.php?guilty=iwl3945_led_brightness_set&version=2.6.25-release&start=1671168&end=1703935&class=oops
+    
+    Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
+    Cc: Zhu Yi <yi.zhu at intel.com>
+    Cc: Reinette Chatre <reinette.chatre at intel.com>
+    Cc: Tomas Winkler <tomas.winkler at intel.com>
+    Cc: linux-wireless at vger.kernel.org
+    Cc: ipw3945-devel at lists.sourceforge.net
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 585c5434f0e02ff0ffc567ec223af61e2d8e2e88
+Author: Adrian Bunk <bunk at kernel.org>
+Date:   Thu Jun 5 21:29:49 2008 +0300
 
-    wireless.h: improve userland include-ability
+    include/linux/ssb/ssb_driver_gige.h typo fix
     
-    This patch partially reverts commit 2218228392080f0ca2fc2974604e79f57b12c436
-    ("Make linux/wireless.h be able to compile") while still making it
-    easier to include wireless.h in userland apps.
+    This patch fixes a typo in the name of a config variable.
     
-    Signed-off-by: Kirill A. Shutemov <kirill at shutemov.name>
+    Reported-by: Robert P. J. Day <rpjday at crashcourse.ca>
+    Signed-off-by: Adrian Bunk <bunk at kernel.org>
+    Reviewed-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit be038b376465953c358d675cb38a611898a49dc2
+Author: Assaf Krauss <assaf.krauss at intel.com>
+Date:   Thu Jun 5 19:55:21 2008 +0300
+
+    mac80211: Checking IBSS support while changing channel in ad-hoc mode
+    
+    This patch adds a check to the set_channel flow. When attempting to change
+    the channel while in IBSS mode, and the new channel does not support IBSS
+    mode, the flow return with an error value with no consequences on the
+    mac80211 and driver state.
+    
+    Signed-off-by: Assaf Krauss <assaf.krauss 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 9aec7e67335224ff499ea8c53028c8483432194e
-Author: Felix Homann <fexpop at onlinehome.de>
-Date:   Thu May 29 00:36:45 2008 -0700
+commit 872ba53395b2a8be08c3ea2d39e225e5b4a8cb40
+Author: Dan Williams <dcbw at redhat.com>
+Date:   Wed Jun 4 13:59:34 2008 -0400
 
-    USB ID for Philips CPWUA054/00 Wireless USB Adapter 11g
+    mac80211: decrease IBSS creation latency
     
-    Enable the Philips CPWUA054/00 in p54usb.
+    Sufficient scans (at least 2 or 3) should have been done within 7
+    seconds to find an existing IBSS to join.  This should improve IBSS
+    creation latency; and since IBSS merging is still in effect, shouldn't
+    have detrimental effects on eventual IBSS convergence.
     
-    Cc: Jeff Garzik <jeff at garzik.org>
-    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+    Signed-off-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1867a00ea8b4e70f413c3d2eca5d6236cacf1138
+commit d005b1d042a1d5dcd8d898f26d8d9bb03f865284
 Author: Michael Buesch <mb at bu3sch.de>
-Date:   Mon Jun 2 16:15:23 2008 +0200
+Date:   Thu Jun 5 16:55:10 2008 +0200
 
-    ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable
+    zd1211rw: Fix data padding for QoS
     
-    This fixes a context assertion in ssb that makes b44 print
-    out warnings on resume.
-    
-    This fixes the following kernel oops:
-    http://www.kerneloops.org/oops.php?number=12732
-    http://www.kerneloops.org/oops.php?number=11410
+    This patch fixes a data alignment issue in the zd1211rw driver.
+    The IEEE80211_STYPE_QOS_DATA bit should be used as a bitwise test
+    to test for the presence of the 2 byte QoS control field.
     
     Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f67d115e318e0b4f596e61f89b84c44691dc7538
-Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
-Date:   Fri May 30 14:53:22 2008 +0200
-
-    libertas: fix command size for CMD_802_11_SUBSCRIBE_EVENT
+commit ad81b2f97d42e13ef78bb3798e046cd5f0492980
+Author: Assaf Krauss <assaf.krauss at intel.com>
+Date:   Wed Jun 4 20:27:59 2008 +0300
+
+    mac80211: Fixing slow IBSS rejoin
+    
+    This patch fixes the issue of slow reconnection to an IBSS cell after
+    disconnection from it. Now the interface's bssid is reset upon ifdown.
+    
+    ieee80211_sta_find_ibss:
+    if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0 &&
+    	    (bss = ieee80211_rx_bss_get(dev, bssid,
+    					local->hw.conf.channel->center_freq,
+    					ifsta->ssid, ifsta->ssid_len)))
     
-    The size was two small by two bytes.
+    Note:
+    In general disconnection is still not handled properly in mac80211
     
-    Signed-off-by: Holger Schurig
+    Signed-off-by: Assaf Krauss <assaf.krauss at intel.com>
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ff9c7e3ef7fbcf7bf145f6d48054934fd7852141
-Author: Dan Williams <dcbw at redhat.com>
-Date:   Thu May 29 14:38:28 2008 -0400
+commit a01f5450401f081f07a866612121e780e0730cfd
+Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
+Date:   Wed Jun 4 11:10:40 2008 +0200
 
-    ipw2200: expire and use oldest BSS on adhoc create
+    libertas: fix sleep confirmation
     
-    If there are no networks on the free list, expire the oldest one when
-    creating a new adhoc network.  Because ipw2200 and the ieee80211 stack
-    don't actually cull old networks and place them back on the free list
-    unless they are needed for new probe responses, over time the free list
-    would become empty and creating an adhoc network would fail due to the !
-    list_empty(...) check.
+    This fixes an issus that made "iwconfig eth1 power on" non-working.
+    When we get a "PS sleep" event, we have to confirm this to the firmware.
+    The confirm happens with a command, but this command is special: the
+    firmware won't send us a response. if_cs_host_to_card() is setting
+    priv->dnld_sent anyway, so this variable stayed at DNLD_DATA_SENT and
+    was never cleared back.
+    
+    Now I put the special knowledge that the CMD_802_11_PS_MODE with
+    CMD_SUBCMD_SLEEP_CONFIRMED doesn't need to need a response by directly
+    clearing the dnld_sent state in lbs_send_confirmsleep().
     
-    Signed-off-by: Dan Williams <dcbw at redhat.com>
+    Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>
+    Acked-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ef81633f881c715793a57a1d7aeccc72e465d035
-Author: Andrew Morton <akpm at linux-foundation.org>
-Date:   Wed May 28 12:40:39 2008 -0700
+commit 507b06d0622480f8026d49a94f86068bb0fd6ed6
+Author: Dan Williams <dcbw at redhat.com>
+Date:   Tue Jun 3 23:39:55 2008 -0400
 
-    airo warning fix
-    
-    WARNING: space prohibited between function name and open parenthesis '('
-    #22: FILE: drivers/net/wireless/airo.c:2907:
-    +	while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
-    
-    total: 0 errors, 1 warnings, 8 lines checked
-    
-    ./patches/wireless-airo-waitbusy-wont-delay.patch has style problems, please review.  If any of these errors
-    are false positives report them to the maintainer, see
-    CHECKPATCH in MAINTAINERS.
+    mac80211: send association event on IBSS create
     
-    Please run checkpatch prior to sending patches
+    Otherwise userspace has no idea the IBSS creation succeeded.
     
-    Cc: Dan Williams <dcbw at redhat.com>
-    Cc: Roel Kluin <roel.kluin at gmail.com>
-    Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+    Signed-off-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8679a8d704ab8c1083abb13b0de49df22f110e64
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Thu May 22 17:06:36 2008 +0200
+commit ea177305b321a4127e448b88de20d5792682ace1
+Author: Dan Williams <dcbw at redhat.com>
+Date:   Mon Jun 2 17:51:23 2008 -0400
 
-    b43legacy: Fix controller restart crash
+    ipw2200: queue direct scans
     
-    This fixes a kernel crash on rmmod, in the case where the controller
-    was restarted before doing the rmmod.
+    When another scan is in progress, a direct scan gets dropped on the
+    floor.  However, that direct scan is usually the scan that's really
+    needed by userspace, and gets stomped on by all the broadcast scans the
+    ipw2200 driver issues internally.  Make sure the direct scan happens
+    eventually, and as a bonus ensure that the passive scan worker is
+    cleaned up when appropriate.
+    
+    The change of request_passive_scan form a struct work to struct
+    delayed_work is only to make the set_wx_scan() code a bit simpler, it's
+    still only used with a delay of 0 to match previous behavior.
     
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig linux-2.6.25.noarch/drivers/net/wireless/airo.c
---- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-06-03 16:21:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-06-03 16:22:29.000000000 -0400
-@@ -2905,7 +2905,7 @@ EXPORT_SYMBOL(init_airo_card);
- 
- static int waitbusy (struct airo_info *ai) {
- 	int delay = 0;
--	while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
-+	while ((IN4500(ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
- 		udelay (10);
- 		if ((++delay % 20) == 0)
- 			OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig	2008-06-03 16:21:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c	2008-06-03 16:22:29.000000000 -0400
-@@ -3039,7 +3039,6 @@ static void b43legacy_set_pretbtt(struct
- /* Locking: wl->mutex */
- static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev)
- {
--	struct b43legacy_wl *wl = dev->wl;
- 	struct b43legacy_phy *phy = &dev->phy;
- 	u32 macctl;
- 
-@@ -3054,12 +3053,6 @@ static void b43legacy_wireless_core_exit
- 	macctl |= B43legacy_MACCTL_PSM_JMP0;
- 	b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl);
- 
--	mutex_unlock(&wl->mutex);
--	/* Must unlock as it would otherwise deadlock. No races here.
--	 * Cancel possibly pending workqueues. */
--	cancel_work_sync(&dev->restart_work);
--	mutex_lock(&wl->mutex);
--
- 	b43legacy_leds_exit(dev);
- 	b43legacy_rng_exit(dev->wl);
- 	b43legacy_pio_free(dev);
-@@ -3486,6 +3479,8 @@ static void b43legacy_chip_reset(struct 
+diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c
+--- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c	2008-06-10 13:15:51.000000000 -0400
+@@ -1753,6 +1753,8 @@ static int ipw_radio_kill_sw(struct ipw_
+ 
+ 		if (priv->workqueue) {
+ 			cancel_delayed_work(&priv->request_scan);
++			cancel_delayed_work(&priv->request_direct_scan);
++			cancel_delayed_work(&priv->request_passive_scan);
+ 			cancel_delayed_work(&priv->scan_event);
  		}
+ 		queue_work(priv->workqueue, &priv->down);
+@@ -2005,6 +2007,8 @@ static void ipw_irq_tasklet(struct ipw_p
+ 		wake_up_interruptible(&priv->wait_command_queue);
+ 		priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING);
+ 		cancel_delayed_work(&priv->request_scan);
++		cancel_delayed_work(&priv->request_direct_scan);
++		cancel_delayed_work(&priv->request_passive_scan);
+ 		cancel_delayed_work(&priv->scan_event);
+ 		schedule_work(&priv->link_down);
+ 		queue_delayed_work(priv->workqueue, &priv->rf_kill, 2 * HZ);
+@@ -4712,6 +4716,12 @@ static void ipw_rx_notification(struct i
+ 			priv->status &= ~STATUS_SCAN_FORCED;
+ #endif				/* CONFIG_IPW2200_MONITOR */
+ 
++			/* Do queued direct scans first */
++			if (priv->status & STATUS_DIRECT_SCAN_PENDING) {
++				queue_delayed_work(priv->workqueue,
++						   &priv->request_direct_scan, 0);
++			}
++
+ 			if (!(priv->status & (STATUS_ASSOCIATED |
+ 					      STATUS_ASSOCIATING |
+ 					      STATUS_ROAMING |
+@@ -6267,7 +6277,7 @@ static void ipw_add_scan_channels(struct
  	}
- out:
-+	if (err)
-+		wl->current_dev = NULL; /* Failed to init the dev. */
- 	mutex_unlock(&wl->mutex);
- 	if (err)
- 		b43legacyerr(wl, "Controller restart FAILED\n");
-@@ -3618,9 +3613,11 @@ static void b43legacy_one_core_detach(st
- 	struct b43legacy_wldev *wldev;
- 	struct b43legacy_wl *wl;
+ }
  
-+	/* Do not cancel ieee80211-workqueue based work here.
-+	 * See comment in b43legacy_remove(). */
+-static int ipw_request_scan_helper(struct ipw_priv *priv, int type)
++static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct)
+ {
+ 	struct ipw_scan_request_ext scan;
+ 	int err = 0, scan_type;
+@@ -6278,22 +6288,31 @@ static int ipw_request_scan_helper(struc
+ 
+ 	mutex_lock(&priv->mutex);
+ 
++	if (direct && (priv->direct_scan_ssid_len == 0)) {
++		IPW_DEBUG_HC("Direct scan requested but no SSID to scan for\n");
++		priv->status &= ~STATUS_DIRECT_SCAN_PENDING;
++		goto done;
++	}
 +
- 	wldev = ssb_get_drvdata(dev);
- 	wl = wldev->wl;
--	cancel_work_sync(&wldev->restart_work);
- 	b43legacy_debugfs_remove_device(wldev);
- 	b43legacy_wireless_core_detach(wldev);
- 	list_del(&wldev->list);
-@@ -3789,6 +3786,10 @@ static void b43legacy_remove(struct ssb_
- 	struct b43legacy_wl *wl = ssb_get_devtypedata(dev);
- 	struct b43legacy_wldev *wldev = ssb_get_drvdata(dev);
- 
-+	/* We must cancel any work here before unregistering from ieee80211,
-+	 * as the ieee80211 unreg will destroy the workqueue. */
-+	cancel_work_sync(&wldev->restart_work);
+ 	if (priv->status & STATUS_SCANNING) {
+-		IPW_DEBUG_HC("Concurrent scan requested.  Ignoring.\n");
+-		priv->status |= STATUS_SCAN_PENDING;
++		IPW_DEBUG_HC("Concurrent scan requested.  Queuing.\n");
++		priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++					STATUS_SCAN_PENDING;
+ 		goto done;
+ 	}
+ 
+ 	if (!(priv->status & STATUS_SCAN_FORCED) &&
+ 	    priv->status & STATUS_SCAN_ABORTING) {
+ 		IPW_DEBUG_HC("Scan request while abort pending.  Queuing.\n");
+-		priv->status |= STATUS_SCAN_PENDING;
++		priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++					STATUS_SCAN_PENDING;
+ 		goto done;
+ 	}
+ 
+ 	if (priv->status & STATUS_RF_KILL_MASK) {
+-		IPW_DEBUG_HC("Aborting scan due to RF Kill activation\n");
+-		priv->status |= STATUS_SCAN_PENDING;
++		IPW_DEBUG_HC("Queuing scan due to RF Kill activation\n");
++		priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++					STATUS_SCAN_PENDING;
+ 		goto done;
+ 	}
+ 
+@@ -6321,6 +6340,7 @@ static int ipw_request_scan_helper(struc
+ 		cpu_to_le16(20);
+ 
+   	scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120);
++	scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20);
+ 
+ #ifdef CONFIG_IPW2200_MONITOR
+ 	if (priv->ieee->iw_mode == IW_MODE_MONITOR) {
+@@ -6360,13 +6380,23 @@ static int ipw_request_scan_helper(struc
+ 			cpu_to_le16(2000);
+ 	} else {
+ #endif				/* CONFIG_IPW2200_MONITOR */
+-		/* If we are roaming, then make this a directed scan for the
+-		 * current network.  Otherwise, ensure that every other scan
+-		 * is a fast channel hop scan */
+-		if ((priv->status & STATUS_ROAMING)
+-		    || (!(priv->status & STATUS_ASSOCIATED)
+-			&& (priv->config & CFG_STATIC_ESSID)
+-			&& (le32_to_cpu(scan.full_scan_index) % 2))) {
++		/* Honor direct scans first, otherwise if we are roaming make
++		 * this a direct scan for the current network.  Finally,
++		 * ensure that every other scan is a fast channel hop scan */
++		if (direct) {
++			err = ipw_send_ssid(priv, priv->direct_scan_ssid,
++			                    priv->direct_scan_ssid_len);
++			if (err) {
++				IPW_DEBUG_HC("Attempt to send SSID command  "
++					     "failed\n");
++				goto done;
++			}
 +
- 	B43legacy_WARN_ON(!wl);
- 	if (wl->current_dev == wldev)
- 		ieee80211_unregister_hw(wl->hw);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c
---- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig	2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c	2008-06-03 16:22:29.000000000 -0400
-@@ -7558,8 +7558,31 @@ static int ipw_associate(void *data)
- 	    priv->ieee->iw_mode == IW_MODE_ADHOC &&
- 	    priv->config & CFG_ADHOC_CREATE &&
- 	    priv->config & CFG_STATIC_ESSID &&
--	    priv->config & CFG_STATIC_CHANNEL &&
--	    !list_empty(&priv->ieee->network_free_list)) {
-+	    priv->config & CFG_STATIC_CHANNEL) {
-+		/* Use oldest network if the free list is empty */
-+		if (list_empty(&priv->ieee->network_free_list)) {
-+			struct ieee80211_network *oldest = NULL;
-+			struct ieee80211_network *target;
-+			DECLARE_MAC_BUF(mac);
++			scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN;
++		} else if ((priv->status & STATUS_ROAMING)
++			   || (!(priv->status & STATUS_ASSOCIATED)
++			       && (priv->config & CFG_STATIC_ESSID)
++			       && (le32_to_cpu(scan.full_scan_index) % 2))) {
+ 			err = ipw_send_ssid(priv, priv->essid, priv->essid_len);
+ 			if (err) {
+ 				IPW_DEBUG_HC("Attempt to send SSID command "
+@@ -6391,7 +6421,12 @@ send_request:
+ 	}
+ 
+ 	priv->status |= STATUS_SCANNING;
+-	priv->status &= ~STATUS_SCAN_PENDING;
++	if (direct) {
++		priv->status &= ~STATUS_DIRECT_SCAN_PENDING;
++		priv->direct_scan_ssid_len = 0;
++	} else
++		priv->status &= ~STATUS_SCAN_PENDING;
 +
-+			list_for_each_entry(target, &priv->ieee->network_list, list) {
-+				if ((oldest == NULL) ||
-+				    (target->last_scanned < oldest->last_scanned))
-+					oldest = target;
-+			}
+ 	queue_delayed_work(priv->workqueue, &priv->scan_check,
+ 			   IPW_SCAN_CHECK_WATCHDOG);
+ done:
+@@ -6402,15 +6437,22 @@ done:
+ static void ipw_request_passive_scan(struct work_struct *work)
+ {
+ 	struct ipw_priv *priv =
+-		container_of(work, struct ipw_priv, request_passive_scan);
+-  	ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE);
++		container_of(work, struct ipw_priv, request_passive_scan.work);
++	ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE, 0);
+ }
+ 
+ static void ipw_request_scan(struct work_struct *work)
+ {
+ 	struct ipw_priv *priv =
+ 		container_of(work, struct ipw_priv, request_scan.work);
+-	ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE);
++	ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 0);
++}
 +
-+			/* If there are no more slots, expire the oldest */
-+			list_del(&oldest->list);
-+			target = oldest;
-+			IPW_DEBUG_ASSOC("Expired '%s' (%s) from "
-+					"network list.\n",
-+					escape_essid(target->ssid,
-+						     target->ssid_len),
-+					print_mac(mac, target->bssid));
-+			list_add_tail(&target->list,
-+				      &priv->ieee->network_free_list);
-+		}
++static void ipw_request_direct_scan(struct work_struct *work)
++{
++	struct ipw_priv *priv =
++		container_of(work, struct ipw_priv, request_direct_scan.work);
++	ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 1);
+ }
+ 
+ static void ipw_bg_abort_scan(struct work_struct *work)
+@@ -9477,99 +9519,38 @@ static int ipw_wx_get_retry(struct net_d
+ 	return 0;
+ }
+ 
+-static int ipw_request_direct_scan(struct ipw_priv *priv, char *essid,
+-				   int essid_len)
+-{
+-	struct ipw_scan_request_ext scan;
+-	int err = 0, scan_type;
+-
+-	if (!(priv->status & STATUS_INIT) ||
+-	    (priv->status & STATUS_EXIT_PENDING))
+-		return 0;
+-
+-	mutex_lock(&priv->mutex);
+-
+-	if (priv->status & STATUS_RF_KILL_MASK) {
+-		IPW_DEBUG_HC("Aborting scan due to RF kill activation\n");
+-		priv->status |= STATUS_SCAN_PENDING;
+-		goto done;
+-	}
+-
+-	IPW_DEBUG_HC("starting request direct scan!\n");
+-
+-	if (priv->status & (STATUS_SCANNING | STATUS_SCAN_ABORTING)) {
+-		/* We should not sleep here; otherwise we will block most
+-		 * of the system (for instance, we hold rtnl_lock when we
+-		 * get here).
+-		 */
+-		err = -EAGAIN;
+-		goto done;
+-	}
+-	memset(&scan, 0, sizeof(scan));
+-
+-	if (priv->config & CFG_SPEED_SCAN)
+-		scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] =
+-		    cpu_to_le16(30);
+-	else
+-		scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] =
+-		    cpu_to_le16(20);
+-
+-	scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN] =
+-	    cpu_to_le16(20);
+-	scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120);
+-	scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20);
+-
+-	scan.full_scan_index = cpu_to_le32(ieee80211_get_scans(priv->ieee));
+-
+-	err = ipw_send_ssid(priv, essid, essid_len);
+-	if (err) {
+-		IPW_DEBUG_HC("Attempt to send SSID command failed\n");
+-		goto done;
+-	}
+-	scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN;
+-
+-	ipw_add_scan_channels(priv, &scan, scan_type);
+-
+-	err = ipw_send_scan_request_ext(priv, &scan);
+-	if (err) {
+-		IPW_DEBUG_HC("Sending scan command failed: %08X\n", err);
+-		goto done;
+-	}
+-
+-	priv->status |= STATUS_SCANNING;
+-
+-      done:
+-	mutex_unlock(&priv->mutex);
+-	return err;
+-}
+-
+ static int ipw_wx_set_scan(struct net_device *dev,
+ 			   struct iw_request_info *info,
+ 			   union iwreq_data *wrqu, char *extra)
+ {
+ 	struct ipw_priv *priv = ieee80211_priv(dev);
+ 	struct iw_scan_req *req = (struct iw_scan_req *)extra;
++	struct delayed_work *work = NULL;
+ 
+ 	mutex_lock(&priv->mutex);
 +
- 		element = priv->ieee->network_free_list.next;
- 		network = list_entry(element, struct ieee80211_network, list);
- 		ipw_adhoc_create(priv, network);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c
---- linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c.orig	2008-06-03 16:17:37.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c	2008-06-03 16:22:29.000000000 -0400
-@@ -312,8 +312,8 @@ static ssize_t lbs_threshold_write(uint1
- 	if (tlv_type != TLV_TYPE_BCNMISS)
- 		tlv->freq = freq;
- 
--	/* The command header, the event mask, and the one TLV */
--	events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv));
-+	/* The command header, the action, the event mask, and one TLV */
-+	events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv));
- 
- 	ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events);
- 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c
---- linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c.orig	2008-06-03 16:17:37.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c	2008-06-03 16:22:29.000000000 -0400
-@@ -49,6 +49,7 @@ static struct usb_device_id p54u_table[]
- 	{USB_DEVICE(0x5041, 0x2235)},	/* Linksys WUSB54G Portable */
- 
- 	/* Version 2 devices (3887) */
-+	{USB_DEVICE(0x0471, 0x1230)},   /* Philips CPWUA054/00 */
- 	{USB_DEVICE(0x050d, 0x7050)},	/* Belkin F5D7050 ver 1000 */
- 	{USB_DEVICE(0x0572, 0x2000)},	/* Cohiba Proto board */
- 	{USB_DEVICE(0x0572, 0x2002)},	/* Cohiba Proto board */
-diff -up linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c.orig linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c
---- linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c.orig	2008-06-03 16:17:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c	2008-06-03 16:22:29.000000000 -0400
-@@ -537,12 +537,12 @@ int ssb_pcicore_dev_irqvecs_enable(struc
- 	int err = 0;
- 	u32 tmp;
- 
--	might_sleep();
--
- 	if (!pdev)
- 		goto out;
- 	bus = pdev->bus;
+ 	priv->user_requested_scan = 1;
+-	mutex_unlock(&priv->mutex);
  
-+	might_sleep_if(pdev->id.coreid != SSB_DEV_PCI);
+ 	if (wrqu->data.length == sizeof(struct iw_scan_req)) {
+ 		if (wrqu->data.flags & IW_SCAN_THIS_ESSID) {
+-			ipw_request_direct_scan(priv, req->essid,
+-						req->essid_len);
+-			return 0;
+-		}
+-		if (req->scan_type == IW_SCAN_TYPE_PASSIVE) {
+-			queue_work(priv->workqueue,
+-				   &priv->request_passive_scan);
+-			return 0;
++			int len = min((int)req->essid_len,
++			              (int)sizeof(priv->direct_scan_ssid));
++			memcpy(priv->direct_scan_ssid, req->essid, len);
++			priv->direct_scan_ssid_len = len;
++			work = &priv->request_direct_scan;
++		} else if (req->scan_type == IW_SCAN_TYPE_PASSIVE) {
++			work = &priv->request_passive_scan;
+ 		}
++	} else {
++		/* Normal active broadcast scan */
++		work = &priv->request_scan;
+ 	}
+ 
++	mutex_unlock(&priv->mutex);
 +
- 	/* Enable interrupts for this device. */
- 	if (bus->host_pci &&
- 	    ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) {
-diff -up linux-2.6.25.noarch/include/linux/wireless.h.orig linux-2.6.25.noarch/include/linux/wireless.h
---- linux-2.6.25.noarch/include/linux/wireless.h.orig	2008-06-03 16:21:29.000000000 -0400
-+++ linux-2.6.25.noarch/include/linux/wireless.h	2008-06-03 16:22:29.000000000 -0400
-@@ -70,8 +70,14 @@
- /***************************** INCLUDES *****************************/
+ 	IPW_DEBUG_WX("Start scan\n");
+ 
+-	queue_delayed_work(priv->workqueue, &priv->request_scan, 0);
++	queue_delayed_work(priv->workqueue, work, 0);
  
- #include <linux/types.h>		/* for __u* and __s* typedefs */
+ 	return 0;
+ }
+@@ -10731,6 +10712,8 @@ static void ipw_link_up(struct ipw_priv 
+ 	}
+ 
+ 	cancel_delayed_work(&priv->request_scan);
++	cancel_delayed_work(&priv->request_direct_scan);
++	cancel_delayed_work(&priv->request_passive_scan);
+ 	cancel_delayed_work(&priv->scan_event);
+ 	ipw_reset_stats(priv);
+ 	/* Ensure the rate is updated immediately */
+@@ -10761,6 +10744,8 @@ static void ipw_link_down(struct ipw_pri
+ 
+ 	/* Cancel any queued work ... */
+ 	cancel_delayed_work(&priv->request_scan);
++	cancel_delayed_work(&priv->request_direct_scan);
++	cancel_delayed_work(&priv->request_passive_scan);
+ 	cancel_delayed_work(&priv->adhoc_check);
+ 	cancel_delayed_work(&priv->gather_stats);
+ 
+@@ -10800,8 +10785,9 @@ static int __devinit ipw_setup_deferred_
+ 	INIT_WORK(&priv->up, ipw_bg_up);
+ 	INIT_WORK(&priv->down, ipw_bg_down);
+ 	INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan);
++	INIT_DELAYED_WORK(&priv->request_direct_scan, ipw_request_direct_scan);
++	INIT_DELAYED_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
+ 	INIT_DELAYED_WORK(&priv->scan_event, ipw_scan_event);
+-	INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
+ 	INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats);
+ 	INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan);
+ 	INIT_WORK(&priv->roam, ipw_bg_roam);
+@@ -11835,6 +11821,8 @@ static void __devexit ipw_pci_remove(str
+ 	cancel_delayed_work(&priv->adhoc_check);
+ 	cancel_delayed_work(&priv->gather_stats);
+ 	cancel_delayed_work(&priv->request_scan);
++	cancel_delayed_work(&priv->request_direct_scan);
++	cancel_delayed_work(&priv->request_passive_scan);
+ 	cancel_delayed_work(&priv->scan_event);
+ 	cancel_delayed_work(&priv->rf_kill);
+ 	cancel_delayed_work(&priv->scan_check);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h
+--- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h	2008-06-10 13:15:51.000000000 -0400
+@@ -1037,6 +1037,7 @@ struct ipw_cmd {	 /* XXX */
+ #define STATUS_DISASSOC_PENDING (1<<12)
+ #define STATUS_STATE_PENDING    (1<<13)
+ 
++#define STATUS_DIRECT_SCAN_PENDING (1<<19)
+ #define STATUS_SCAN_PENDING     (1<<20)
+ #define STATUS_SCANNING         (1<<21)
+ #define STATUS_SCAN_ABORTING    (1<<22)
+@@ -1292,6 +1293,8 @@ struct ipw_priv {
+ 	struct iw_public_data wireless_data;
+ 
+ 	int user_requested_scan;
++	u8 direct_scan_ssid[IW_ESSID_MAX_SIZE];
++	u8 direct_scan_ssid_len;
+ 
+ 	struct workqueue_struct *workqueue;
+ 
+@@ -1301,8 +1304,9 @@ struct ipw_priv {
+ 	struct work_struct system_config;
+ 	struct work_struct rx_replenish;
+ 	struct delayed_work request_scan;
++	struct delayed_work request_direct_scan;
++	struct delayed_work request_passive_scan;
+ 	struct delayed_work scan_event;
+-  	struct work_struct request_passive_scan;
+ 	struct work_struct adapter_restart;
+ 	struct delayed_work rf_kill;
+ 	struct work_struct up;
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c	2008-06-10 13:15:51.000000000 -0400
+@@ -229,14 +229,15 @@ static int iwl3945_led_register_led(stru
+ 	led->led_dev.brightness_set = iwl3945_led_brightness_set;
+ 	led->led_dev.default_trigger = trigger;
+ 
++	led->priv = priv;
++	led->type = type;
++
+ 	ret = led_classdev_register(device, &led->led_dev);
+ 	if (ret) {
+ 		IWL_ERROR("Error: failed to register led handler.\n");
+ 		return ret;
+ 	}
+ 
+-	led->priv = priv;
+-	led->type = type;
+ 	led->registered = 1;
+ 
+ 	if (set_led && led->led_on)
+diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c
+--- linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c	2008-06-10 13:15:51.000000000 -0400
+@@ -1842,6 +1842,9 @@ static void lbs_send_confirmsleep(struct
+ 
+ 	spin_lock_irqsave(&priv->driver_lock, flags);
+ 
++	/* We don't get a response on the sleep-confirmation */
++	priv->dnld_sent = DNLD_RES_RECEIVED;
++
+ 	/* If nothing to do, go back to sleep (?) */
+ 	if (!__kfifo_len(priv->event_fifo) && !priv->resp_len[priv->resp_idx])
+ 		priv->psstate = PS_STATE_SLEEP;
+@@ -1904,12 +1907,12 @@ void lbs_ps_confirm_sleep(struct lbs_pri
+ 
+ 	lbs_deb_enter(LBS_DEB_HOST);
+ 
++	spin_lock_irqsave(&priv->driver_lock, flags);
+ 	if (priv->dnld_sent) {
+ 		allowed = 0;
+ 		lbs_deb_host("dnld_sent was set\n");
+ 	}
+ 
+-	spin_lock_irqsave(&priv->driver_lock, flags);
+ 	/* In-progress command? */
+ 	if (priv->cur_cmd) {
+ 		allowed = 0;
+diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c
+--- linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c	2008-06-10 13:15:51.000000000 -0400
+@@ -732,8 +732,8 @@ static int lbs_thread(void *data)
+ 		lbs_deb_thread("4: currenttxskb %p, dnld_sent %d\n",
+ 		       priv->currenttxskb, priv->dnld_sent);
+ 
+-		spin_lock_irq(&priv->driver_lock);
+ 		/* Process any pending command response */
++		spin_lock_irq(&priv->driver_lock);
+ 		resp_idx = priv->resp_idx;
+ 		if (priv->resp_len[resp_idx]) {
+ 			spin_unlock_irq(&priv->driver_lock);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c
+--- linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig	2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c	2008-06-10 13:15:51.000000000 -0400
+@@ -719,7 +719,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, c
+ 	fc = le16_to_cpu(*((__le16 *) buffer));
+ 
+ 	is_qos = ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
+-		 ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_QOS_DATA);
++		 (fc & IEEE80211_STYPE_QOS_DATA);
+ 	is_4addr = (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
+ 		   (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS);
+ 	need_padding = is_qos ^ is_4addr;
+diff -up linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h.orig linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h
+--- linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h.orig	2008-06-10 13:13:54.000000000 -0400
++++ linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h	2008-06-10 13:15:51.000000000 -0400
+@@ -100,7 +100,7 @@ extern char * nvram_get(const char *name
+ /* Get the device MAC address */
+ static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
+ {
+-#ifdef CONFIG_BCM947XX
++#ifdef CONFIG_BCM47XX
+ 	char *res = nvram_get("et0macaddr");
+ 	if (res)
+ 		memcpy(macaddr, res, 6);
+diff -up linux-2.6.25.noarch/net/mac80211/ieee80211_i.h.orig linux-2.6.25.noarch/net/mac80211/ieee80211_i.h
+--- linux-2.6.25.noarch/net/mac80211/ieee80211_i.h.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/ieee80211_i.h	2008-06-10 13:15:51.000000000 -0400
+@@ -899,7 +899,7 @@ extern const struct iw_handler_def ieee8
+ 
+ 
+ /* ieee80211_ioctl.c */
+-int ieee80211_set_freq(struct ieee80211_local *local, int freq);
++int ieee80211_set_freq(struct net_device *dev, int freq);
+ /* ieee80211_sta.c */
+ void ieee80211_sta_timer(unsigned long data);
+ void ieee80211_sta_work(struct work_struct *work);
+diff -up linux-2.6.25.noarch/net/mac80211/main.c.orig linux-2.6.25.noarch/net/mac80211/main.c
+--- linux-2.6.25.noarch/net/mac80211/main.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/main.c	2008-06-10 13:15:51.000000000 -0400
+@@ -511,6 +511,7 @@ static int ieee80211_stop(struct net_dev
+ 	case IEEE80211_IF_TYPE_STA:
+ 	case IEEE80211_IF_TYPE_IBSS:
+ 		sdata->u.sta.state = IEEE80211_DISABLED;
++		memset(sdata->u.sta.bssid, 0, ETH_ALEN);
+ 		del_timer_sync(&sdata->u.sta.timer);
+ 		/*
+ 		 * When we get here, the interface is marked down.
+diff -up linux-2.6.25.noarch/net/mac80211/mlme.c.orig linux-2.6.25.noarch/net/mac80211/mlme.c
+--- linux-2.6.25.noarch/net/mac80211/mlme.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/mlme.c	2008-06-10 13:15:51.000000000 -0400
+@@ -44,7 +44,7 @@
+ #define IEEE80211_RETRY_AUTH_INTERVAL (1 * HZ)
+ #define IEEE80211_SCAN_INTERVAL (2 * HZ)
+ #define IEEE80211_SCAN_INTERVAL_SLOW (15 * HZ)
+-#define IEEE80211_IBSS_JOIN_TIMEOUT (20 * HZ)
++#define IEEE80211_IBSS_JOIN_TIMEOUT (7 * HZ)
+ 
+ #define IEEE80211_PROBE_DELAY (HZ / 33)
+ #define IEEE80211_CHANNEL_TIME (HZ / 33)
+@@ -2336,6 +2336,7 @@ static int ieee80211_sta_join_ibss(struc
+ 	u8 *pos;
+ 	struct ieee80211_sub_if_data *sdata;
+ 	struct ieee80211_supported_band *sband;
++	union iwreq_data wrqu;
+ 
+ 	sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
+ 
+@@ -2358,13 +2359,10 @@ static int ieee80211_sta_join_ibss(struc
+ 	sdata->drop_unencrypted = bss->capability &
+ 		WLAN_CAPABILITY_PRIVACY ? 1 : 0;
+ 
+-	res = ieee80211_set_freq(local, bss->freq);
++	res = ieee80211_set_freq(dev, bss->freq);
+ 
+-	if (local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS) {
+-		printk(KERN_DEBUG "%s: IBSS not allowed on frequency "
+-		       "%d MHz\n", dev->name, local->oper_channel->center_freq);
+-		return -1;
+-	}
++	if (res)
++		return res;
+ 
+ 	/* Set beacon template */
+ 	skb = dev_alloc_skb(local->hw.extra_tx_headroom + 400);
+@@ -2479,6 +2477,10 @@ static int ieee80211_sta_join_ibss(struc
+ 	ifsta->state = IEEE80211_IBSS_JOINED;
+ 	mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL);
+ 
++	memset(&wrqu, 0, sizeof(wrqu));
++	memcpy(wrqu.ap_addr.sa_data, bss->bssid, ETH_ALEN);
++	wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
 +
-+/* 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/socket.h>		/* for "struct sockaddr" et al	*/
- #include <linux/if.h>			/* for IFNAMSIZ and co... */
-+#endif	/* __KERNEL__ */
+ 	return res;
+ }
+ 
+@@ -3486,7 +3488,7 @@ static int ieee80211_sta_config_auth(str
+ 	spin_unlock_bh(&local->sta_bss_lock);
+ 
+ 	if (selected) {
+-		ieee80211_set_freq(local, selected->freq);
++		ieee80211_set_freq(dev, selected->freq);
+ 		if (!(ifsta->flags & IEEE80211_STA_SSID_SET))
+ 			ieee80211_sta_set_ssid(dev, selected->ssid,
+ 					       selected->ssid_len);
+diff -up linux-2.6.25.noarch/net/mac80211/wext.c.orig linux-2.6.25.noarch/net/mac80211/wext.c
+--- linux-2.6.25.noarch/net/mac80211/wext.c.orig	2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-06-10 13:15:51.000000000 -0400
+@@ -290,14 +290,22 @@ static int ieee80211_ioctl_giwmode(struc
+ 	return 0;
+ }
+ 
+-int ieee80211_set_freq(struct ieee80211_local *local, int freqMHz)
++int ieee80211_set_freq(struct net_device *dev, int freqMHz)
+ {
+ 	int ret = -EINVAL;
+ 	struct ieee80211_channel *chan;
++	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
++	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ 
+ 	chan = ieee80211_get_channel(local->hw.wiphy, freqMHz);
+ 
+ 	if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) {
++		if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
++		    chan->flags & IEEE80211_CHAN_NO_IBSS) {
++			printk(KERN_DEBUG "%s: IBSS not allowed on frequency "
++				"%d MHz\n", dev->name, chan->center_freq);
++			return ret;
++		}
+ 		local->oper_channel = chan;
  
- /***************************** VERSION *****************************/
- /*
+ 		if (local->sta_sw_scanning || local->sta_hw_scanning)
+@@ -315,7 +323,6 @@ static int ieee80211_ioctl_siwfreq(struc
+ 				   struct iw_request_info *info,
+ 				   struct iw_freq *freq, char *extra)
+ {
+-	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+ 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ 
+ 	if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
+@@ -329,14 +336,14 @@ static int ieee80211_ioctl_siwfreq(struc
+ 					IEEE80211_STA_AUTO_CHANNEL_SEL;
+ 			return 0;
+ 		} else
+-			return ieee80211_set_freq(local,
++			return ieee80211_set_freq(dev,
+ 				ieee80211_channel_to_frequency(freq->m));
+ 	} else {
+ 		int i, div = 1000000;
+ 		for (i = 0; i < freq->e; i++)
+ 			div /= 10;
+ 		if (div > 0)
+-			return ieee80211_set_freq(local, freq->m / div);
++			return ieee80211_set_freq(dev, freq->m / div);
+ 		else
+ 			return -EINVAL;
+ 	}




More information about the fedora-extras-commits mailing list