rpms/kernel/devel kernel.spec, 1.731, 1.732 linux-2.6-wireless-pending.patch, 1.58, 1.59 linux-2.6-wireless.patch, 1.44, 1.45

John W. Linville (linville) fedora-extras-commits at redhat.com
Thu Jul 3 17:55:42 UTC 2008


Author: linville

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

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


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.731
retrieving revision 1.732
diff -u -r1.731 -r1.732
--- kernel.spec	3 Jul 2008 15:57:05 -0000	1.731
+++ kernel.spec	3 Jul 2008 17:54:55 -0000	1.732
@@ -1146,9 +1146,9 @@
 #ApplyPatch linux-2.6-selinux-ecryptfs-support.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
+ApplyPatch linux-2.6-wireless-pending.patch
 
 # Add misc wireless bits from upstream wireless tree
 ApplyPatch linux-2.6-at76.patch
@@ -1796,6 +1796,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
+* Thu Jul 03 2008 John W. Linville <linville at redhat.com>
+- Upstream wireless fixes from 2008-07-02
+  (http://marc.info/?l=linux-netdev&m=121503163124089&w=2)
+
 * Thu Jul 03 2008 Dave Jones <davej at redhat.com>
 - 2.6.26-rc8-git3
 

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.58 -r 1.59 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.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- linux-2.6-wireless-pending.patch	1 Jul 2008 15:29:57 -0000	1.58
+++ linux-2.6-wireless-pending.patch	3 Jul 2008 17:54:55 -0000	1.59
@@ -97,18 +97,6 @@
     Signed-off-by: Zhu Yi <yi.zhu at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a6ecfe5a9bd32c9426f9af801e62f21da132a2cc
-Author: Zhu Yi <yi.zhu at intel.com>
-Date:   Mon Jun 30 17:23:29 2008 +0800
-
-    iwlwifi: drop skb silently for Tx request in monitor mode
-    
-    This patch fixes the problem to keep mac80211 resubmitting SKBs
-    when Tx request cannot be met in monitor mode.
-    
-    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
 commit 6fe878497b04b9c428842ab9c89c0e2d712860ad
 Author: Rick Farrington <rickdic at hotmail.com>
 Date:   Mon Jun 30 17:23:28 2008 +0800
@@ -132,23 +120,6 @@
     Signed-off-by: Zhu Yi <yi.zhu at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 32c932be01d96abe84340b0831db949ca4713292
-Author: Rick Farrington <rickdic at hotmail.com>
-Date:   Mon Jun 30 17:23:27 2008 +0800
-
-    iwlwifi: fix incorrect 5GHz rates reported in monitor mode
-    
-    This patch fixes the rates reported in monitor mode operation
-    (Wireshark) for iwlwifi.
-    
-    Previously, packets with rates of 6M..24M would be reported
-    incorrectly and packets with rates of 36M..54M would not passed
-    up the stack.
-    
-    Signed-off-by: Rick Farrington <rickdic at hotmail.com>
-    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
 commit 0a078ffa011209c307880da10917ef205b4b11f4
 Author: Tomas Winkler <tomas.winkler at intel.com>
 Date:   Mon Jun 30 17:23:26 2008 +0800
@@ -6681,8 +6652,8 @@
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
 diff -up /dev/null linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/hostapd.conf
---- /dev/null	2008-07-01 08:25:54.335004873 -0400
-+++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/hostapd.conf	2008-07-01 10:55:58.000000000 -0400
+--- /dev/null	2008-07-03 09:55:47.025003120 -0400
++++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/hostapd.conf	2008-07-03 13:46:32.000000000 -0400
 @@ -0,0 +1,11 @@
 +interface=wlan0
 +driver=nl80211
@@ -6696,8 +6667,8 @@
 +wpa_pairwise=CCMP
 +wpa_passphrase=12345678
 diff -up /dev/null linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/README
---- /dev/null	2008-07-01 08:25:54.335004873 -0400
-+++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/README	2008-07-01 10:55:58.000000000 -0400
+--- /dev/null	2008-07-03 09:55:47.025003120 -0400
++++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/README	2008-07-03 13:46:32.000000000 -0400
 @@ -0,0 +1,67 @@
 +mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
 +Copyright (c) 2008, Jouni Malinen <j at w1.fi>
@@ -6767,8 +6738,8 @@
 +# Run wpa_supplicant (station) for wlan1
 +wpa_supplicant -Dwext -iwlan1 -c wpa_supplicant.conf
 diff -up /dev/null linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/wpa_supplicant.conf
---- /dev/null	2008-07-01 08:25:54.335004873 -0400
-+++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/wpa_supplicant.conf	2008-07-01 10:55:58.000000000 -0400
+--- /dev/null	2008-07-03 09:55:47.025003120 -0400
++++ linux-2.6.25.noarch/Documentation/networking/mac80211_hwsim/wpa_supplicant.conf	2008-07-03 13:46:32.000000000 -0400
 @@ -0,0 +1,10 @@
 +ctrl_interface=/var/run/wpa_supplicant
 +
@@ -6781,8 +6752,8 @@
 +	group=CCMP
 +}
 diff -up linux-2.6.25.noarch/Documentation/rfkill.txt.orig linux-2.6.25.noarch/Documentation/rfkill.txt
---- linux-2.6.25.noarch/Documentation/rfkill.txt.orig	2008-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/Documentation/rfkill.txt	2008-07-01 10:55:58.000000000 -0400
+--- linux-2.6.25.noarch/Documentation/rfkill.txt.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/Documentation/rfkill.txt	2008-07-03 13:46:32.000000000 -0400
 @@ -1,89 +1,528 @@
  rfkill - RF switch subsystem support
  ====================================
@@ -7371,8 +7342,8 @@
 +available through sysfs in a generic way at this time, and it is not available
 +through the rfkill class AT ALL.
 diff -up linux-2.6.25.noarch/drivers/net/b44.c.orig linux-2.6.25.noarch/drivers/net/b44.c
---- linux-2.6.25.noarch/drivers/net/b44.c.orig	2008-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/b44.c	2008-07-01 10:55:58.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/b44.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/b44.c	2008-07-03 13:46:32.000000000 -0400
 @@ -148,9 +148,9 @@ static inline void b44_sync_dma_desc_for
  						unsigned long offset,
  						enum dma_data_direction dir)
@@ -7660,8 +7631,8 @@
  			kfree(tx_ring);
  			goto out_err;
 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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/Kconfig	2008-07-01 10:55:58.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/Kconfig.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/Kconfig	2008-07-03 13:46:32.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.
@@ -7683,8 +7654,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c	2008-07-01 10:55:58.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c	2008-07-03 13:46:32.000000000 -0400
 @@ -110,7 +110,7 @@ static void gelic_card_get_ether_port_st
  void gelic_card_up(struct gelic_card *card)
  {
@@ -7731,8 +7702,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h	2008-07-01 10:55:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h	2008-07-03 13:46:32.000000000 -0400
 @@ -298,7 +298,7 @@ struct gelic_card {
  	wait_queue_head_t waitq;
  
@@ -7743,8 +7714,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c	2008-07-01 10:55:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c	2008-07-03 13:46:32.000000000 -0400
 @@ -45,7 +45,8 @@
  #include "ps3_gelic_wireless.h"
  
@@ -8410,8 +8381,8 @@
  	destroy_workqueue(wl->eurus_cmd_queue);
  	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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h	2008-07-01 10:55:59.000000000 -0400
+--- 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-07-03 13:46:32.000000000 -0400
 @@ -241,7 +241,7 @@ enum gelic_wl_assoc_state {
  #define GELIC_WEP_KEYS 4
  struct gelic_wl_info {
@@ -8441,8 +8412,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-07-01 10:55:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-07-03 13:46:32.000000000 -0400
 @@ -306,11 +306,10 @@ static int adm8211_get_tx_stats(struct i
  				struct ieee80211_tx_queue_stats *stats)
  {
@@ -8605,8 +8576,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-07-01 10:55:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-07-03 13:46:32.000000000 -0400
 @@ -443,7 +443,6 @@ struct adm8211_rx_ring_info {
  struct adm8211_tx_ring_info {
  	struct sk_buff *skb;
@@ -8616,8 +8587,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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-07-01 10:55:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-07-03 13:21:02.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-07-03 13:46:32.000000000 -0400
 @@ -85,10 +85,10 @@ static struct pci_driver airo_driver = {
  
  /* Include Wireless Extension definition and check version - Jean II */
@@ -9063,8 +9034,8 @@
  						 &net->bss);
  
 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-07-01 10:55:41.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h	2008-07-01 10:55:59.000000000 -0400
[...3802 lines suppressed...]
  	}
  
@@ -77001,7 +76983,7 @@
  		set_bit(i, q->qdisc_pool);
  
  	return err;
-@@ -408,16 +379,6 @@ static int wme_qdiscop_init(struct Qdisc
+@@ -407,16 +378,6 @@ static int wme_qdiscop_init(struct Qdisc
  
  static int wme_qdiscop_dump(struct Qdisc *qd, struct sk_buff *skb)
  {
@@ -77018,7 +77000,7 @@
  	return -1;
  }
  
-@@ -430,7 +391,7 @@ static int wme_classop_graft(struct Qdis
+@@ -429,7 +390,7 @@ static int wme_classop_graft(struct Qdis
  	struct ieee80211_hw *hw = &local->hw;
  	unsigned long queue = arg - 1;
  
@@ -77027,7 +77009,7 @@
  		return -EINVAL;
  
  	if (!new)
-@@ -454,7 +415,7 @@ wme_classop_leaf(struct Qdisc *qd, unsig
+@@ -453,7 +414,7 @@ wme_classop_leaf(struct Qdisc *qd, unsig
  	struct ieee80211_hw *hw = &local->hw;
  	unsigned long queue = arg - 1;
  
@@ -77036,7 +77018,7 @@
  		return NULL;
  
  	return q->queues[queue];
-@@ -467,7 +428,7 @@ static unsigned long wme_classop_get(str
+@@ -466,7 +427,7 @@ static unsigned long wme_classop_get(str
  	struct ieee80211_hw *hw = &local->hw;
  	unsigned long queue = TC_H_MIN(classid);
  
@@ -77045,7 +77027,7 @@
  		return 0;
  
  	return queue;
-@@ -493,7 +454,7 @@ static int wme_classop_change(struct Qdi
+@@ -492,7 +453,7 @@ static int wme_classop_change(struct Qdi
  	struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
  	struct ieee80211_hw *hw = &local->hw;
  
@@ -77054,7 +77036,7 @@
  		return -ENOENT;
  
  	/* TODO: put code to program hardware queue parameters here,
-@@ -510,7 +471,7 @@ static int wme_classop_delete(struct Qdi
+@@ -509,7 +470,7 @@ static int wme_classop_delete(struct Qdi
  	struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
  	struct ieee80211_hw *hw = &local->hw;
  
@@ -77063,7 +77045,7 @@
  		return -ENOENT;
  	return 0;
  }
-@@ -523,7 +484,7 @@ static int wme_classop_dump_class(struct
+@@ -522,7 +483,7 @@ static int wme_classop_dump_class(struct
  	struct ieee80211_local *local = wdev_priv(qd->dev->ieee80211_ptr);
  	struct ieee80211_hw *hw = &local->hw;
  
@@ -77072,7 +77054,7 @@
  		return -ENOENT;
  	tcm->tcm_handle = TC_H_MIN(cl);
  	tcm->tcm_parent = qd->handle;
-@@ -541,7 +502,7 @@ static void wme_classop_walk(struct Qdis
+@@ -540,7 +501,7 @@ static void wme_classop_walk(struct Qdis
  	if (arg->stop)
  		return;
  
@@ -77081,7 +77063,7 @@
  		if (arg->count < arg->skip) {
  			arg->count++;
  			continue;
-@@ -658,10 +619,13 @@ int ieee80211_ht_agg_queue_add(struct ie
+@@ -657,10 +618,13 @@ int ieee80211_ht_agg_queue_add(struct ie
  	DECLARE_MAC_BUF(mac);
  
  	/* prepare the filter and save it for the SW queue
@@ -77097,7 +77079,7 @@
  		if (!test_and_set_bit(i, q->qdisc_pool)) {
  			ieee80211_stop_queue(local_to_hw(local), i);
  			sta->tid_to_tx_q[tid] = i;
-@@ -690,13 +654,14 @@ void ieee80211_ht_agg_queue_remove(struc
+@@ -689,13 +653,14 @@ void ieee80211_ht_agg_queue_remove(struc
  				   struct sta_info *sta, u16 tid,
  				   u8 requeue)
  {
@@ -77113,7 +77095,7 @@
  
  	if (requeue)
  		ieee80211_requeue(local, agg_queue);
-@@ -715,7 +680,6 @@ void ieee80211_requeue(struct ieee80211_
+@@ -714,7 +679,6 @@ void ieee80211_requeue(struct ieee80211_
  	if (!qdisc || !qdisc->dequeue)
  		return;
  
@@ -77122,8 +77104,8 @@
  		skb = qdisc->dequeue(qdisc);
  		root_qd->q.qlen--;
 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-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.h.orig	2008-07-03 13:21:05.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-07-03 13:46:33.000000000 -0400
 @@ -31,7 +31,7 @@ static inline int WLAN_FC_IS_QOS_DATA(u1
  	return (fc & 0x8C) == 0x88;
  }
@@ -77134,8 +77116,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-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-07-01 10:56:51.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wpa.c.orig	2008-07-03 13:21:05.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-07-03 13:46:33.000000000 -0400
 @@ -24,46 +24,22 @@ static int ieee80211_get_hdr_info(const 
  {
  	struct ieee80211_hdr *hdr;
@@ -77574,8 +77556,8 @@
  		}
  	}
 diff -up linux-2.6.25.noarch/net/rfkill/rfkill.c.orig linux-2.6.25.noarch/net/rfkill/rfkill.c
---- linux-2.6.25.noarch/net/rfkill/rfkill.c.orig	2008-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/rfkill/rfkill.c	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/rfkill/rfkill.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/rfkill/rfkill.c	2008-07-03 13:46:33.000000000 -0400
 @@ -39,8 +39,56 @@ MODULE_LICENSE("GPL");
  static LIST_HEAD(rfkill_list);	/* list of registered rf switches */
  static DEFINE_MUTEX(rfkill_mutex);
@@ -78037,8 +78019,8 @@
  }
  
 diff -up linux-2.6.25.noarch/net/rfkill/rfkill-input.c.orig linux-2.6.25.noarch/net/rfkill/rfkill-input.c
---- linux-2.6.25.noarch/net/rfkill/rfkill-input.c.orig	2008-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/rfkill/rfkill-input.c	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/rfkill/rfkill-input.c.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/rfkill/rfkill-input.c	2008-07-03 13:46:33.000000000 -0400
 @@ -30,39 +30,62 @@ struct rfkill_task {
  	spinlock_t lock; /* for accessing last and desired state */
  	unsigned long last; /* last schedule */
@@ -78196,8 +78178,8 @@
  };
  
 diff -up linux-2.6.25.noarch/net/rfkill/rfkill-input.h.orig linux-2.6.25.noarch/net/rfkill/rfkill-input.h
---- linux-2.6.25.noarch/net/rfkill/rfkill-input.h.orig	2008-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/rfkill/rfkill-input.h	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/rfkill/rfkill-input.h.orig	2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/rfkill/rfkill-input.h	2008-07-03 13:46:33.000000000 -0400
 @@ -12,5 +12,6 @@
  #define __RFKILL_INPUT_H
  
@@ -78206,8 +78188,8 @@
  
  #endif /* __RFKILL_INPUT_H */
 diff -up linux-2.6.25.noarch/net/socket.c.orig linux-2.6.25.noarch/net/socket.c
---- linux-2.6.25.noarch/net/socket.c.orig	2008-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/socket.c	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/socket.c.orig	2008-07-03 13:21:06.000000000 -0400
++++ linux-2.6.25.noarch/net/socket.c	2008-07-03 13:46:33.000000000 -0400
 @@ -90,6 +90,7 @@
  #include <asm/unistd.h>
  
@@ -78237,8 +78219,8 @@
  }
  #endif
 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-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/core.c	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/core.c.orig	2008-07-03 13:21:06.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/core.c	2008-07-03 13:46:33.000000000 -0400
 @@ -143,8 +143,11 @@ void cfg80211_put_dev(struct cfg80211_re
  int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
  			char *newname)
@@ -78302,8 +78284,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-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-07-01 10:56:00.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-07-03 13:46:33.000000000 -0400
 @@ -59,23 +59,21 @@ int ieee80211_radiotap_iterator_init(
  		return -EINVAL;
  
@@ -78345,8 +78327,8 @@
  			} else
  				/* no more bitmaps: end */
 diff -up linux-2.6.25.noarch/net/wireless/wext.c.orig linux-2.6.25.noarch/net/wireless/wext.c
---- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-07-01 10:55:42.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/wext.c	2008-07-01 10:56:00.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/wext.c.orig	2008-07-03 13:21:06.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/wext.c	2008-07-03 13:46:33.000000000 -0400
 @@ -500,7 +500,7 @@ static int call_commit_handler(struct ne
  /*
   * Calculate size of private arguments

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.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- linux-2.6-wireless.patch	1 Jul 2008 15:29:57 -0000	1.44
+++ linux-2.6-wireless.patch	3 Jul 2008 17:54:55 -0000	1.45
@@ -1,956 +1,114 @@
-commit 23976efedd5ecb420b87455787c537eb4aed1981
-Author: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-Date:   Sat Jun 28 02:50:13 2008 +0300
+commit 7b58ccfe32f40eca8c8ca29aa723a5d0e814f0c9
+Author: andrey at cozybit.com <andrey at cozybit.com>
+Date:   Tue Jul 1 11:43:53 2008 -0700
 
-    mac80211: don't accept WEP keys other than WEP40 and WEP104
+    libertas: support USB persistence on suspend/resume (resend)
     
-    This patch makes mac80211 refuse a WEP key whose length is not WEP40 nor
-    WEP104.
+    Handle .reset_resume() so that libertas can survive suspend/resume without
+    reloading the firmware.
     
-    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: Andrey Yurovsky <andrey at cozybit.com>
+    Acked-by: Deepak Saxena <dsaxena at laptop.org>
+    Acked-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1bcca3c463e4930cef9986b05165bb0b3eb46f63
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri Jun 27 16:19:58 2008 -0400
+commit 6afe6828b19b4567768264831d101026cb5510ff
+Author: Zhu Yi <yi.zhu at intel.com>
+Date:   Tue Jul 1 09:20:34 2008 +0800
 
-    hostap: fix sparse warnings
+    iwlwifi: drop skb silently for Tx request in monitor mode
     
-    Rewrite AID calculation in handle_pspoll() to avoid truncating bits.
-    Make hostap_80211_header_parse() static, don't export it.  Avoid
-    shadowing variables.
+    This patch fixes the problem to keep mac80211 resubmitting SKBs
+    when Tx request cannot be met in monitor mode.
     
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 15ea0ebc5b7305cc75189cb6b7924d0db5278e0c
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri Jun 27 16:19:52 2008 -0400
-
-    hostap: don't report useless WDS frames by default
-    
-    DEBUG_EXTRA is reported to the kernel log by default, but DEBUG_EXTRA2
-    is not.  Unrelated WDS frames pollute the log unnecessarily.
-    
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 00eb7fe77eb455f807c396f9917f0f623d4c84bb
-Author: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-Date:   Thu Jun 26 12:13:46 2008 +0300
-
-    mac80211: fix an oops in several failure paths in key allocation
-    
-    This patch fixes an oops in several failure paths in key allocation. This
-    Oops occurs when freeing a key that has not been linked yet, so the
-    key->sdata is not set.
-    
-    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
-    Acked-by: Johannes Berg <johannes at sipsolutions.net>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 5f4a6fae46a214c4dce3bd63a6219a5f1c818c78
-Author: Harvey Harrison <harvey.harrison at gmail.com>
-Date:   Wed Jun 25 14:20:37 2008 -0700
-
-    prism: islpci_eth.c endianness fix
-    
-    clock is already cpu-endian (see le32_to_cpu slightly before), so
-    le64_to_cpu doesn't make much sense.
-    
-    Signed-off-by: Harvey Harrison <harvey.harrison at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 980dfcb93232907034a2c92d62d3a7d6ac7bef44
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Wed Jun 25 21:27:00 2008 +0200
-
-    rt2x00: Fix lock dependency errror
-    
-    This fixes a circular locking dependency in the workqueue handling.
-    The interface work task uses the mac80211 function
-    ieee80211_iterate_active_interfaces() which grabs the RTNL lock.
-    
-    However when the interface is brough down, this happens under the RTNL
-    lock as well, this causes problems because mac80211 will flush the workqueue
-    during the ifdown event. This causes mac80211 to wait until the driver has
-    completed all work which can't finish because it is waiting on the RTNL lock.
-    
-    This is fixed by moving rt2x00 workqueue tasks on a different workqueue,
-    this workqueue can be flushed when the ieee80211_hw structure is removed
-    by the driver (when the driver is unloaded) which does not happen under the
-    RTNL lock.
-    
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 66b5004d85164a6439d3ba1e7757734472ee2cac
-Author: Ron Rindjunsky <ron.rindjunsky at intel.com>
-Date:   Wed Jun 25 16:46:31 2008 +0800
-
-    iwlwifi: improve scanning band selection management
-    
-    This patch modifies the band selection management when scanning, so
-    bands are now scanned according to HW band support.
-    
-    Signed-off-by: Ron Rindjunsky <ron.rindjunsky at intel.com>
-    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
     Signed-off-by: Zhu Yi <yi.zhu at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 99ade2597e3f7f0ad463c489aaccd6cc605e242c
-Author: Ivo van Doorn <ivdoorn at gmail.com>
-Date:   Fri Jun 20 22:11:00 2008 +0200
+commit ec04fd60fd74a9db9c63fe11d519be3642cabfdd
+Author: Rick Farrington <rickdic at hotmail.com>
+Date:   Tue Jul 1 09:20:33 2008 +0800
 
-    rt2x00: Fix unbalanced mutex locking
+    iwlwifi: fix incorrect 5GHz rates reported in monitor mode
     
-    The usb_cache_mutex was not correctly released
-    under all circumstances. Both rt73usb as rt2500usb
-    didn't release the mutex under certain conditions
-    when the register access failed. Obviously such
-    failure would lead to deadlocks.
-    
-    In addition under similar circumstances when the
-    bbp register couldn't be read the value must be
-    set to 0xff to indicate that the value is wrong.
-    This too didn't happen under all circumstances.
-    
-    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 2f9ec47d0954f9d2e5a00209c2689cbc477a8c89
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Fri Jun 20 11:40:46 2008 +0200
-
-    b43legacy: Fix possible NULL pointer dereference in DMA code
-    
-    This fixes a possible NULL pointer dereference in an error path of the
-    DMA allocation error checking code. This is also necessary for a future
-    DMA API change that is on its way into the mainline kernel that adds
-    an additional dev parameter to dma_mapping_error().
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Cc: stable <stable at kernel.org>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 7b3abfc87ec13a81b255012b6e1bd4caeeb05aec
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Sun Jun 15 16:01:24 2008 +0200
-
-    b43: Fix possible MMIO access while device is down
-    
-    This fixes a possible MMIO access while the device is still down
-    from a suspend cycle. MMIO accesses with the device powered down
-    may cause crashes on certain devices.
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 664f200610a3c9641ff58fc91b986b804cb1cc2d
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Sun Jun 15 15:27:49 2008 +0200
-
-    b43legacy: Do not return TX_BUSY from op_tx
+    This patch fixes the rates reported in monitor mode operation
+    (Wireshark) for iwlwifi.
     
-    Never return TX_BUSY from op_tx. It doesn't make sense to return
-    TX_BUSY, if we can not transmit the packet.
-    Drop the packet and return TX_OK.
+    Previously, packets with rates of 6M..24M would be reported
+    incorrectly and packets with rates of 36M..54M would not passed
+    up the stack.
     
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit c9e8eae0935f03e2d03a7ad7af80d8fc6c53e68c
-Author: Michael Buesch <mb at bu3sch.de>
-Date:   Sun Jun 15 15:17:29 2008 +0200
-
-    b43: Do not return TX_BUSY from op_tx
-    
-    Never return TX_BUSY from op_tx. It doesn't make sense to return
-    TX_BUSY, if we can not transmit the packet.
-    Drop the packet and return TX_OK.
-    This will fix the resume hang.
-    
-    Signed-off-by: Michael Buesch <mb at bu3sch.de>
-    Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
-commit 59d393ad92f719d9ef36b96eae56d4817a7eeb10
-Author: Tony Vroon <tony at linx.net>
-Date:   Wed Jun 11 16:23:56 2008 -0400
-
-    mac80211: implement EU regulatory domain
-    
-    Implement missing EU regulatory domain for mac80211. Based on the
-    information in IEEE 802.11-2007 (specifically pages 1142, 1143 & 1148)
-    and ETSI 301 893 (V1.4.1).
-    With thanks to Johannes Berg.
-    
-    Signed-off-by: Tony Vroon <tony at linx.net>
-    Acked-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: Rick Farrington <rickdic at hotmail.com>
+    Signed-off-by: Zhu Yi <yi.zhu at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/leds.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/leds.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43/leds.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/leds.c	2008-07-01 10:48:12.000000000 -0400
-@@ -72,6 +72,9 @@ static void b43_led_brightness_set(struc
- 	struct b43_wldev *dev = led->dev;
- 	bool radio_enabled;
- 
-+	if (unlikely(b43_status(dev) < B43_STAT_INITIALIZED))
-+		return;
-+
- 	/* Checking the radio-enabled status here is slightly racy,
- 	 * but we want to avoid the locking overhead and we don't care
- 	 * whether the LED has the wrong state for a second. */
-diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c	2008-07-01 10:48:12.000000000 -0400
-@@ -876,6 +876,7 @@ struct b43legacy_dmaring *b43legacy_setu
- 	if (!ring)
- 		goto out;
- 	ring->type = type;
-+	ring->dev = dev;
- 
- 	nr_slots = B43legacy_RXRING_SLOTS;
- 	if (for_tx)
-@@ -922,7 +923,6 @@ struct b43legacy_dmaring *b43legacy_setu
- 				 DMA_TO_DEVICE);
- 	}
- 
--	ring->dev = dev;
- 	ring->nr_slots = nr_slots;
- 	ring->mmio_base = b43legacy_dmacontroller_base(type, controller_index);
- 	ring->index = controller_index;
-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-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c	2008-07-01 10:48:12.000000000 -0400
-@@ -2378,8 +2378,10 @@ static int b43legacy_op_tx(struct ieee80
- 	} else
- 		err = b43legacy_dma_tx(dev, skb, ctl);
- out:
--	if (unlikely(err))
--		return NETDEV_TX_BUSY;
-+	if (unlikely(err)) {
-+		/* Drop the packet. */
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2008-07-03 13:21:06.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2008-07-03 13:38:42.000000000 -0400
+@@ -6687,7 +6687,8 @@ static int iwl3945_mac_tx(struct ieee802
+ 
+ 	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) {
+ 		IWL_DEBUG_MAC80211("leave - monitor\n");
+-		return -1;
 +		dev_kfree_skb_any(skb);
-+	}
- 	return NETDEV_TX_OK;
- }
- 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/main.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43/main.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/main.c	2008-07-01 10:48:12.000000000 -0400
-@@ -2883,12 +2883,11 @@ static int b43_op_tx(struct ieee80211_hw
- 
- 	if (unlikely(skb->len < 2 + 2 + 6)) {
- 		/* Too short, this can't be a valid frame. */
--		dev_kfree_skb_any(skb);
--		return NETDEV_TX_OK;
-+		goto drop_packet;
++		return 0;
  	}
- 	B43_WARN_ON(skb_shinfo(skb)->nr_frags);
- 	if (unlikely(!dev))
--		return NETDEV_TX_BUSY;
-+		goto drop_packet;
- 
- 	/* Transmissions on seperate queues can run concurrently. */
- 	read_lock_irqsave(&wl->tx_lock, flags);
-@@ -2904,7 +2903,12 @@ static int b43_op_tx(struct ieee80211_hw
- 	read_unlock_irqrestore(&wl->tx_lock, flags);
  
- 	if (unlikely(err))
--		return NETDEV_TX_BUSY;
-+		goto drop_packet;
-+	return NETDEV_TX_OK;
+ 	IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c.orig	2008-07-03 13:21:03.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945.c	2008-07-03 13:38:42.000000000 -0400
+@@ -588,8 +588,12 @@ static void iwl3945_add_radiotap(struct 
+ 
+ 	if (rate == -1)
+ 		iwl3945_rt->rt_rate = 0;
+-	else
++	else {
++		if (stats->band == IEEE80211_BAND_5GHZ)
++			rate += IWL_FIRST_OFDM_RATE;
 +
-+drop_packet:
-+	/* We can not transmit this packet. Drop it. */
-+	dev_kfree_skb_any(skb);
- 	return NETDEV_TX_OK;
- }
- 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_80211_rx.c.orig linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_80211_rx.c
---- linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_80211_rx.c.orig	2008-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_80211_rx.c	2008-07-01 10:48:57.000000000 -0400
-@@ -64,7 +64,7 @@ int prism2_rx_80211(struct net_device *d
- 	int hdrlen, phdrlen, head_need, tail_need;
- 	u16 fc;
- 	int prism_header, ret;
--	struct ieee80211_hdr_4addr *hdr;
-+	struct ieee80211_hdr_4addr *fhdr;
- 
- 	iface = netdev_priv(dev);
- 	local = iface->local;
-@@ -83,8 +83,8 @@ int prism2_rx_80211(struct net_device *d
- 		phdrlen = 0;
- 	}
- 
--	hdr = (struct ieee80211_hdr_4addr *) skb->data;
--	fc = le16_to_cpu(hdr->frame_ctl);
-+	fhdr = (struct ieee80211_hdr_4addr *) skb->data;
-+	fc = le16_to_cpu(fhdr->frame_ctl);
- 
- 	if (type == PRISM2_RX_MGMT && (fc & IEEE80211_FCTL_VERS)) {
- 		printk(KERN_DEBUG "%s: dropped management frame with header "
-@@ -551,7 +551,7 @@ hostap_rx_frame_wds(local_info_t *local,
- 	     hdr->addr1[2] != 0xff || hdr->addr1[3] != 0xff ||
- 	     hdr->addr1[4] != 0xff || hdr->addr1[5] != 0xff)) {
- 		/* RA (or BSSID) is not ours - drop */
--		PDEBUG(DEBUG_EXTRA, "%s: received WDS frame with "
-+		PDEBUG(DEBUG_EXTRA2, "%s: received WDS frame with "
- 		       "not own or broadcast %s=%s\n",
- 		       local->dev->name,
- 		       fc & IEEE80211_FCTL_FROMDS ? "RA" : "BSSID",
-diff -up linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_ap.c.orig linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_ap.c
---- linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_ap.c.orig	2008-07-01 10:47:45.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_ap.c	2008-07-01 10:48:57.000000000 -0400
-@@ -1930,7 +1930,7 @@ static void handle_pspoll(local_info_t *
- 		PDEBUG(DEBUG_PS, "   PSPOLL and AID[15:14] not set\n");
- 		return;
- 	}
--	aid &= ~BIT(15) & ~BIT(14);
-+	aid &= ~(BIT(15) | BIT(14));
- 	if (aid == 0 || aid > MAX_AID_TABLE_SIZE) {
- 		PDEBUG(DEBUG_PS, "   invalid aid=%d\n", aid);
- 		return;
-diff -up linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_cs.c
---- linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig	2008-07-01 10:34:15.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_cs.c	2008-07-01 10:48:57.000000000 -0400
-@@ -533,10 +533,10 @@ static void prism2_detach(struct pcmcia_
- do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)
- 
- #define CFG_CHECK2(fn, retf) \
--do { int ret = (retf); \
--if (ret != 0) { \
--	PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", ret); \
--	cs_error(link, fn, ret); \
-+do { int _ret = (retf); \
-+if (_ret != 0) { \
-+	PDEBUG(DEBUG_EXTRA, "CardServices(" #fn ") returned %d\n", _ret); \
-+	cs_error(link, fn, _ret); \
- 	goto next_entry; \
- } \
- } while (0)
-diff -up linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_hw.c.orig linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_hw.c
---- linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_hw.c.orig	2008-07-01 10:34:15.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_hw.c	2008-07-01 10:48:57.000000000 -0400
-@@ -2835,7 +2835,7 @@ static void hostap_passive_scan(unsigned
- {
- 	local_info_t *local = (local_info_t *) data;
- 	struct net_device *dev = local->dev;
--	u16 channel;
-+	u16 chan;
- 
- 	if (local->passive_scan_interval <= 0)
- 		return;
-@@ -2872,11 +2872,11 @@ static void hostap_passive_scan(unsigned
- 
- 		printk(KERN_DEBUG "%s: passive scan channel %d\n",
- 		       dev->name, local->passive_scan_channel);
--		channel = local->passive_scan_channel;
-+		chan = local->passive_scan_channel;
- 		local->passive_scan_state = PASSIVE_SCAN_WAIT;
- 		local->passive_scan_timer.expires = jiffies + HZ / 10;
- 	} else {
--		channel = local->channel;
-+		chan = local->channel;
- 		local->passive_scan_state = PASSIVE_SCAN_LISTEN;
- 		local->passive_scan_timer.expires = jiffies +
- 			local->passive_scan_interval * HZ;
-@@ -2884,9 +2884,9 @@ static void hostap_passive_scan(unsigned
- 
- 	if (hfa384x_cmd_callback(dev, HFA384X_CMDCODE_TEST |
- 				 (HFA384X_TEST_CHANGE_CHANNEL << 8),
--				 channel, NULL, 0))
-+				 chan, NULL, 0))
- 		printk(KERN_ERR "%s: passive scan channel set %d "
--		       "failed\n", dev->name, channel);
-+		       "failed\n", dev->name, chan);
- 
- 	add_timer(&local->passive_scan_timer);
- }
-diff -up linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_main.c.orig linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_main.c
---- linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_main.c.orig	2008-07-01 10:34:15.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_main.c	2008-07-01 10:48:57.000000000 -0400
-@@ -594,7 +594,8 @@ void hostap_dump_tx_header(const char *n
- }
- 
- 
--int hostap_80211_header_parse(const struct sk_buff *skb, unsigned char *haddr)
-+static int hostap_80211_header_parse(const struct sk_buff *skb,
-+				     unsigned char *haddr)
- {
- 	struct hostap_interface *iface = netdev_priv(skb->dev);
- 	local_info_t *local = iface->local;
-@@ -857,7 +858,6 @@ const struct header_ops hostap_80211_ops
- 	.rebuild	= eth_rebuild_header,
- 	.cache		= eth_header_cache,
- 	.cache_update	= eth_header_cache_update,
--
- 	.parse		= hostap_80211_header_parse,
- };
- EXPORT_SYMBOL(hostap_80211_ops);
-@@ -1150,7 +1150,6 @@ EXPORT_SYMBOL(hostap_set_roaming);
- EXPORT_SYMBOL(hostap_set_auth_algs);
- EXPORT_SYMBOL(hostap_dump_rx_header);
- EXPORT_SYMBOL(hostap_dump_tx_header);
--EXPORT_SYMBOL(hostap_80211_header_parse);
- EXPORT_SYMBOL(hostap_80211_get_hdrlen);
- EXPORT_SYMBOL(hostap_get_stats);
- EXPORT_SYMBOL(hostap_setup_dev);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
---- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2008-07-01 10:48:12.000000000 -0400
-@@ -2227,7 +2227,10 @@ static int iwl3945_scan_initiate(struct 
- 	}
- 
- 	IWL_DEBUG_INFO("Starting scan...\n");
--	priv->scan_bands = 2;
-+	if (priv->cfg->sku & IWL_SKU_G)
-+		priv->scan_bands |= BIT(IEEE80211_BAND_2GHZ);
-+	if (priv->cfg->sku & IWL_SKU_A)
-+		priv->scan_bands |= BIT(IEEE80211_BAND_5GHZ);
- 	set_bit(STATUS_SCANNING, &priv->status);
- 	priv->scan_start = jiffies;
- 	priv->scan_pass_start = priv->scan_start;
-@@ -3352,13 +3355,18 @@ static void iwl3945_rx_scan_complete_not
- 	cancel_delayed_work(&priv->scan_check);
- 
- 	IWL_DEBUG_INFO("Scan pass on %sGHz took %dms\n",
--		       (priv->scan_bands == 2) ? "2.4" : "5.2",
-+		       (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ)) ?
-+							"2.4" : "5.2",
- 		       jiffies_to_msecs(elapsed_jiffies
- 					(priv->scan_pass_start, jiffies)));
- 
--	/* Remove this scanned band from the list
--	 * of pending bands to scan */
--	priv->scan_bands--;
-+	/* Remove this scanned band from the list of pending
-+	 * bands to scan, band G precedes A in order of scanning
-+	 * as seen in iwl3945_bg_request_scan */
-+	if (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ))
-+		priv->scan_bands &= ~BIT(IEEE80211_BAND_2GHZ);
-+	else if (priv->scan_bands &  BIT(IEEE80211_BAND_5GHZ))
-+		priv->scan_bands &= ~BIT(IEEE80211_BAND_5GHZ);
- 
- 	/* If a request to abort was given, or the scan did not succeed
- 	 * then we reset the scan state machine and terminate,
-@@ -4972,7 +4980,7 @@ static int iwl3945_get_channels_for_scan
- 
- 		ch_info = iwl3945_get_channel_info(priv, band, scan_ch->channel);
- 		if (!is_channel_valid(ch_info)) {
--			IWL_DEBUG_SCAN("Channel %d is INVALID for this SKU.\n",
-+			IWL_DEBUG_SCAN("Channel %d is INVALID for this band.\n",
- 				       scan_ch->channel);
- 			continue;
- 		}
-@@ -6315,21 +6323,16 @@ static void iwl3945_bg_request_scan(stru
- 
- 	/* flags + rate selection */
+ 		iwl3945_rt->rt_rate = iwl3945_rates[rate].ieee;
++	}
  
--	switch (priv->scan_bands) {
--	case 2:
-+	if (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ)) {
- 		scan->flags = RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK;
- 		scan->tx_cmd.rate = IWL_RATE_1M_PLCP;
- 		scan->good_CRC_th = 0;
- 		band = IEEE80211_BAND_2GHZ;
--		break;
--
--	case 1:
-+	} else if (priv->scan_bands & BIT(IEEE80211_BAND_5GHZ)) {
- 		scan->tx_cmd.rate = IWL_RATE_6M_PLCP;
- 		scan->good_CRC_th = IWL_GOOD_CRC_TH;
- 		band = IEEE80211_BAND_5GHZ;
--		break;
--
--	default:
-+	} else {
- 		IWL_WARNING("Invalid scan band count\n");
- 		goto done;
- 	}
-@@ -6770,7 +6773,7 @@ static int iwl3945_mac_config(struct iee
- 	ch_info = iwl3945_get_channel_info(priv, conf->channel->band,
- 					   conf->channel->hw_value);
- 	if (!is_channel_valid(ch_info)) {
--		IWL_DEBUG_SCAN("Channel %d [%d] is INVALID for this SKU.\n",
-+		IWL_DEBUG_SCAN("Channel %d [%d] is INVALID for this band.\n",
- 			       conf->channel->hw_value, conf->channel->band);
- 		IWL_DEBUG_MAC80211("leave - invalid channel\n");
- 		spin_unlock_irqrestore(&priv->lock, flags);
+ 	/* antenna number */
+ 	antenna = phy_flags_hw & RX_RES_PHY_FLAGS_ANTENNA_MSK;
 diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
---- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2008-07-01 10:48:12.000000000 -0400
-@@ -1774,7 +1774,10 @@ static int iwl4965_scan_initiate(struct 
- 	}
- 
- 	IWL_DEBUG_INFO("Starting scan...\n");
--	priv->scan_bands = 2;
-+	if (priv->cfg->sku & IWL_SKU_G)
-+		priv->scan_bands |= BIT(IEEE80211_BAND_2GHZ);
-+	if (priv->cfg->sku & IWL_SKU_A)
-+		priv->scan_bands |= BIT(IEEE80211_BAND_5GHZ);
- 	set_bit(STATUS_SCANNING, &priv->status);
- 	priv->scan_start = jiffies;
- 	priv->scan_pass_start = priv->scan_start;
-@@ -3023,8 +3026,9 @@ static void iwl4965_rx_reply_tx(struct i
- 
- 	IWL_DEBUG_TX_REPLY("Tx queue reclaim %d\n", index);
- 	if (index != -1) {
--		int freed = iwl4965_tx_queue_reclaim(priv, txq_id, index);
- #ifdef CONFIG_IWL4965_HT
-+		int freed = iwl4965_tx_queue_reclaim(priv, txq_id, index);
-+
- 		if (tid != MAX_TID_COUNT)
- 			priv->stations[sta_id].tid[tid].tfds_in_queue -= freed;
- 		if (iwl4965_queue_space(&txq->q) > txq->q.low_mark &&
-@@ -3276,13 +3280,18 @@ static void iwl4965_rx_scan_complete_not
- 	cancel_delayed_work(&priv->scan_check);
- 
- 	IWL_DEBUG_INFO("Scan pass on %sGHz took %dms\n",
--		       (priv->scan_bands == 2) ? "2.4" : "5.2",
-+		       (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ)) ?
-+						"2.4" : "5.2",
- 		       jiffies_to_msecs(elapsed_jiffies
- 					(priv->scan_pass_start, jiffies)));
- 
--	/* Remove this scanned band from the list
--	 * of pending bands to scan */
--	priv->scan_bands--;
-+	/* Remove this scanned band from the list of pending
-+	 * bands to scan, band G precedes A in order of scanning
-+	 * as seen in iwl_bg_request_scan */
-+	if (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ))
-+		priv->scan_bands &= ~BIT(IEEE80211_BAND_2GHZ);
-+	else if (priv->scan_bands &  BIT(IEEE80211_BAND_5GHZ))
-+		priv->scan_bands &= ~BIT(IEEE80211_BAND_5GHZ);
- 
- 	/* If a request to abort was given, or the scan did not succeed
- 	 * then we reset the scan state machine and terminate,
-@@ -3292,7 +3301,7 @@ static void iwl4965_rx_scan_complete_not
- 		clear_bit(STATUS_SCAN_ABORTING, &priv->status);
- 	} else {
- 		/* If there are more bands on this scan pass reschedule */
--		if (priv->scan_bands > 0)
-+		if (priv->scan_bands)
- 			goto reschedule;
- 	}
- 
-@@ -4635,10 +4644,9 @@ static int iwl4965_get_channels_for_scan
- 
- 		scan_ch->channel = ieee80211_frequency_to_channel(channels[i].center_freq);
- 
--		ch_info = iwl_get_channel_info(priv, band,
--					 scan_ch->channel);
-+		ch_info = iwl_get_channel_info(priv, band, scan_ch->channel);
- 		if (!is_channel_valid(ch_info)) {
--			IWL_DEBUG_SCAN("Channel %d is INVALID for this SKU.\n",
-+			IWL_DEBUG_SCAN("Channel %d is INVALID for this band.\n",
- 				       scan_ch->channel);
- 			continue;
- 		}
-@@ -5830,8 +5838,7 @@ static void iwl4965_bg_request_scan(stru
- 	scan->tx_cmd.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
- 
- 
--	switch (priv->scan_bands) {
--	case 2:
-+	if (priv->scan_bands & BIT(IEEE80211_BAND_2GHZ)) {
- 		scan->flags = RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK;
- 		scan->tx_cmd.rate_n_flags =
- 				iwl4965_hw_set_rate_n_flags(IWL_RATE_1M_PLCP,
-@@ -5839,17 +5846,13 @@ static void iwl4965_bg_request_scan(stru
- 
- 		scan->good_CRC_th = 0;
- 		band = IEEE80211_BAND_2GHZ;
--		break;
--
--	case 1:
-+	} else if (priv->scan_bands & BIT(IEEE80211_BAND_5GHZ)) {
- 		scan->tx_cmd.rate_n_flags =
- 				iwl4965_hw_set_rate_n_flags(IWL_RATE_6M_PLCP,
- 				RATE_MCS_ANT_B_MSK);
- 		scan->good_CRC_th = IWL_GOOD_CRC_TH;
- 		band = IEEE80211_BAND_5GHZ;
--		break;
--
--	default:
-+	} else {
- 		IWL_WARNING("Invalid scan band count\n");
- 		goto done;
- 	}
-diff -up linux-2.6.25.noarch/drivers/net/wireless/prism54/islpci_eth.c.orig linux-2.6.25.noarch/drivers/net/wireless/prism54/islpci_eth.c
---- linux-2.6.25.noarch/drivers/net/wireless/prism54/islpci_eth.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/prism54/islpci_eth.c	2008-07-01 10:48:12.000000000 -0400
-@@ -290,7 +290,7 @@ islpci_monitor_rx(islpci_private *priv, 
- 
- 		avs->version = cpu_to_be32(P80211CAPTURE_VERSION);
- 		avs->length = cpu_to_be32(sizeof (struct avs_80211_1_header));
--		avs->mactime = cpu_to_be64(le64_to_cpu(clock));
-+		avs->mactime = cpu_to_be64(clock);
- 		avs->hosttime = cpu_to_be64(jiffies);
- 		avs->phytype = cpu_to_be32(6);	/*OFDM: 6 for (g), 8 for (a) */
- 		avs->channel = cpu_to_be32(channel_of_freq(freq));
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2500usb.c
---- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2500usb.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2500usb.c	2008-07-01 10:48:12.000000000 -0400
-@@ -138,11 +138,8 @@ static void rt2500usb_bbp_write(struct r
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt2500usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR8 register busy. Write failed.\n");
--		mutex_unlock(&rt2x00dev->usb_cache_mutex);
--		return;
--	}
-+	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY))
-+		goto exit_fail;
- 
- 	/*
- 	 * Write the data into the BBP.
-@@ -155,6 +152,13 @@ static void rt2500usb_bbp_write(struct r
- 	rt2500usb_register_write_lock(rt2x00dev, PHY_CSR7, reg);
- 
- 	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	return;
-+
-+exit_fail:
-+	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	ERROR(rt2x00dev, "PHY_CSR8 register busy. Write failed.\n");
- }
- 
- static void rt2500usb_bbp_read(struct rt2x00_dev *rt2x00dev,
-@@ -168,10 +172,8 @@ static void rt2500usb_bbp_read(struct rt
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt2500usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR8 register busy. Read failed.\n");
--		return;
--	}
-+	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY))
-+		goto exit_fail;
- 
- 	/*
- 	 * Write the request into the BBP.
-@@ -186,17 +188,21 @@ static void rt2500usb_bbp_read(struct rt
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt2500usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR8 register busy. Read failed.\n");
--		*value = 0xff;
--		mutex_unlock(&rt2x00dev->usb_cache_mutex);
--		return;
--	}
-+	if (rt2x00_get_field16(reg, PHY_CSR8_BUSY))
-+		goto exit_fail;
- 
- 	rt2500usb_register_read_lock(rt2x00dev, PHY_CSR7, &reg);
- 	*value = rt2x00_get_field16(reg, PHY_CSR7_DATA);
- 
- 	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	return;
-+
-+exit_fail:
-+	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	ERROR(rt2x00dev, "PHY_CSR8 register busy. Read failed.\n");
-+	*value = 0xff;
- }
- 
- static void rt2500usb_rf_write(struct rt2x00_dev *rt2x00dev,
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c
---- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c	2008-07-01 10:48:12.000000000 -0400
-@@ -75,7 +75,7 @@ static void rt2x00lib_start_link_tuner(s
- 
- 	rt2x00lib_reset_link_tuner(rt2x00dev);
- 
--	queue_delayed_work(rt2x00dev->hw->workqueue,
-+	queue_delayed_work(rt2x00dev->workqueue,
- 			   &rt2x00dev->link.work, LINK_TUNE_INTERVAL);
- }
- 
-@@ -137,14 +137,6 @@ void rt2x00lib_disable_radio(struct rt2x
- 		return;
- 
- 	/*
--	 * Stop all scheduled work.
--	 */
--	if (work_pending(&rt2x00dev->intf_work))
--		cancel_work_sync(&rt2x00dev->intf_work);
--	if (work_pending(&rt2x00dev->filter_work))
--		cancel_work_sync(&rt2x00dev->filter_work);
--
--	/*
- 	 * Stop the TX queues.
- 	 */
- 	ieee80211_stop_queues(rt2x00dev->hw);
-@@ -398,8 +390,8 @@ static void rt2x00lib_link_tuner(struct 
- 	 * Increase tuner counter, and reschedule the next link tuner run.
- 	 */
- 	rt2x00dev->link.count++;
--	queue_delayed_work(rt2x00dev->hw->workqueue, &rt2x00dev->link.work,
--			   LINK_TUNE_INTERVAL);
-+	queue_delayed_work(rt2x00dev->workqueue,
-+			   &rt2x00dev->link.work, LINK_TUNE_INTERVAL);
- }
- 
- static void rt2x00lib_packetfilter_scheduled(struct work_struct *work)
-@@ -433,6 +425,15 @@ static void rt2x00lib_intf_scheduled_ite
- 
- 	spin_unlock(&intf->lock);
- 
-+	/*
-+	 * It is possible the radio was disabled while the work had been
-+	 * scheduled. If that happens we should return here immediately,
-+	 * note that in the spinlock protected area above the delayed_flags
-+	 * have been cleared correctly.
-+	 */
-+	if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
-+		return;
-+
- 	if (delayed_flags & DELAYED_UPDATE_BEACON) {
- 		skb = ieee80211_beacon_get(rt2x00dev->hw, vif, &control);
- 		if (skb && rt2x00dev->ops->hw->beacon_update(rt2x00dev->hw,
-@@ -441,7 +442,7 @@ static void rt2x00lib_intf_scheduled_ite
- 	}
- 
- 	if (delayed_flags & DELAYED_CONFIG_ERP)
--		rt2x00lib_config_erp(rt2x00dev, intf, &intf->conf);
-+		rt2x00lib_config_erp(rt2x00dev, intf, &conf);
- 
- 	if (delayed_flags & DELAYED_LED_ASSOC)
- 		rt2x00leds_led_assoc(rt2x00dev, !!rt2x00dev->intf_associated);
-@@ -487,7 +488,7 @@ void rt2x00lib_beacondone(struct rt2x00_
- 						   rt2x00lib_beacondone_iter,
- 						   rt2x00dev);
- 
--	queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work);
-+	queue_work(rt2x00dev->workqueue, &rt2x00dev->intf_work);
- }
- EXPORT_SYMBOL_GPL(rt2x00lib_beacondone);
- 
-@@ -1130,6 +1131,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
- 	/*
- 	 * Initialize configuration work.
- 	 */
-+	rt2x00dev->workqueue = create_singlethread_workqueue("rt2x00lib");
-+	if (!rt2x00dev->workqueue)
-+		goto exit;
-+
- 	INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled);
- 	INIT_WORK(&rt2x00dev->filter_work, rt2x00lib_packetfilter_scheduled);
- 	INIT_DELAYED_WORK(&rt2x00dev->link.work, rt2x00lib_link_tuner);
-@@ -1190,6 +1195,13 @@ void rt2x00lib_remove_dev(struct rt2x00_
- 	rt2x00leds_unregister(rt2x00dev);
- 
- 	/*
-+	 * Stop all queued work. Note that most tasks will already be halted
-+	 * during rt2x00lib_disable_radio() and rt2x00lib_uninitialize().
-+	 */
-+	flush_workqueue(rt2x00dev->workqueue);
-+	destroy_workqueue(rt2x00dev->workqueue);
-+
-+	/*
- 	 * Free ieee80211_hw memory.
- 	 */
- 	rt2x00lib_remove_hw(rt2x00dev);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00.h.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00.h
---- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00.h.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00.h	2008-07-01 10:48:12.000000000 -0400
-@@ -821,6 +821,7 @@ struct rt2x00_dev {
- 	/*
- 	 * Scheduled work.
- 	 */
-+	struct workqueue_struct *workqueue;
- 	struct work_struct intf_work;
- 	struct work_struct filter_work;
- 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00mac.c.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00mac.c
---- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00mac.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00mac.c	2008-07-01 10:48:12.000000000 -0400
-@@ -428,7 +428,7 @@ void rt2x00mac_configure_filter(struct i
- 	if (!test_bit(DRIVER_REQUIRE_SCHEDULED, &rt2x00dev->flags))
- 		rt2x00dev->ops->lib->config_filter(rt2x00dev, *total_flags);
- 	else
--		queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->filter_work);
-+		queue_work(rt2x00dev->workqueue, &rt2x00dev->filter_work);
- }
- EXPORT_SYMBOL_GPL(rt2x00mac_configure_filter);
- 
-@@ -509,7 +509,7 @@ void rt2x00mac_bss_info_changed(struct i
- 	memcpy(&intf->conf, bss_conf, sizeof(*bss_conf));
- 	if (delayed) {
- 		intf->delayed_flags |= delayed;
--		queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work);
-+		queue_work(rt2x00dev->workqueue, &rt2x00dev->intf_work);
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2008-07-03 13:21:06.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2008-07-03 13:38:42.000000000 -0400
+@@ -6237,7 +6237,8 @@ static int iwl4965_mac_tx(struct ieee802
+ 
+ 	if (priv->iw_mode == IEEE80211_IF_TYPE_MNTR) {
+ 		IWL_DEBUG_MAC80211("leave - monitor\n");
+-		return -1;
++		dev_kfree_skb_any(skb);
++		return 0;
  	}
- 	spin_unlock(&intf->lock);
- }
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt73usb.c
---- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt73usb.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt73usb.c	2008-07-01 10:48:12.000000000 -0400
-@@ -134,11 +134,8 @@ static void rt73usb_bbp_write(struct rt2
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt73usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR3 register busy. Write failed.\n");
--		mutex_unlock(&rt2x00dev->usb_cache_mutex);
--		return;
--	}
-+	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY))
-+		goto exit_fail;
- 
- 	/*
- 	 * Write the data into the BBP.
-@@ -151,6 +148,13 @@ static void rt73usb_bbp_write(struct rt2
  
- 	rt73usb_register_write_lock(rt2x00dev, PHY_CSR3, reg);
- 	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	return;
-+
-+exit_fail:
-+	mutex_unlock(&rt2x00dev->usb_cache_mutex);
+ 	IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c.orig	2008-07-03 13:21:03.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965.c	2008-07-03 13:38:42.000000000 -0400
+@@ -3528,8 +3528,12 @@ static void iwl4965_add_radiotap(struct 
+ 
+ 	if (rate == -1)
+ 		iwl4965_rt->rt_rate = 0;
+-	else
++	else {
++		if (stats->band == IEEE80211_BAND_5GHZ)
++			rate += IWL_FIRST_OFDM_RATE;
 +
-+	ERROR(rt2x00dev, "PHY_CSR3 register busy. Write failed.\n");
- }
- 
- static void rt73usb_bbp_read(struct rt2x00_dev *rt2x00dev,
-@@ -164,11 +168,8 @@ static void rt73usb_bbp_read(struct rt2x
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt73usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR3 register busy. Read failed.\n");
--		mutex_unlock(&rt2x00dev->usb_cache_mutex);
--		return;
--	}
-+	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY))
-+		goto exit_fail;
- 
- 	/*
- 	 * Write the request into the BBP.
-@@ -184,14 +185,19 @@ static void rt73usb_bbp_read(struct rt2x
- 	 * Wait until the BBP becomes ready.
- 	 */
- 	reg = rt73usb_bbp_check(rt2x00dev);
--	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY)) {
--		ERROR(rt2x00dev, "PHY_CSR3 register busy. Read failed.\n");
--		*value = 0xff;
--		return;
--	}
-+	if (rt2x00_get_field32(reg, PHY_CSR3_BUSY))
-+		goto exit_fail;
- 
- 	*value = rt2x00_get_field32(reg, PHY_CSR3_VALUE);
- 	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	return;
-+
-+exit_fail:
-+	mutex_unlock(&rt2x00dev->usb_cache_mutex);
-+
-+	ERROR(rt2x00dev, "PHY_CSR3 register busy. Read failed.\n");
-+	*value = 0xff;
- }
- 
- static void rt73usb_rf_write(struct rt2x00_dev *rt2x00dev,
-diff -up linux-2.6.25.noarch/include/net/mac80211.h.orig linux-2.6.25.noarch/include/net/mac80211.h
---- linux-2.6.25.noarch/include/net/mac80211.h.orig	2008-07-01 10:47:45.000000000 -0400
-+++ linux-2.6.25.noarch/include/net/mac80211.h	2008-07-01 10:48:57.000000000 -0400
-@@ -595,6 +595,15 @@ enum ieee80211_key_alg {
- 	ALG_CCMP,
- };
- 
-+/**
-+ * enum ieee80211_key_len - key length
-+ * @WEP40: WEP 5 byte long key
-+ * @WEP104: WEP 13 byte long key
-+ */
-+enum ieee80211_key_len {
-+	LEN_WEP40 = 5,
-+	LEN_WEP104 = 13,
-+};
- 
- /**
-  * enum ieee80211_key_flags - key flags
-diff -up linux-2.6.25.noarch/net/mac80211/key.c.orig linux-2.6.25.noarch/net/mac80211/key.c
---- linux-2.6.25.noarch/net/mac80211/key.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/key.c	2008-07-01 10:48:12.000000000 -0400
-@@ -380,6 +380,15 @@ void ieee80211_key_free(struct ieee80211
- 	if (!key)
- 		return;
- 
-+	if (!key->sdata) {
-+		/* The key has not been linked yet, simply free it
-+		 * and don't Oops */
-+		if (key->conf.alg == ALG_CCMP)
-+			ieee80211_aes_key_free(key->u.ccmp.tfm);
-+		kfree(key);
-+		return;
+ 		iwl4965_rt->rt_rate = iwl4965_rates[rate].ieee;
 +	}
-+
- 	spin_lock_irqsave(&key->sdata->local->key_lock, flags);
- 	__ieee80211_key_free(key);
- 	spin_unlock_irqrestore(&key->sdata->local->key_lock, flags);
-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-07-01 10:47:46.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-07-01 10:48:57.000000000 -0400
-@@ -95,6 +95,13 @@ static int ieee80211_set_encryption(stru
- 			}
- 		}
- 
-+		if (alg == ALG_WEP &&
-+			key_len != LEN_WEP40 && key_len != LEN_WEP104) {
-+			ieee80211_key_free(key);
-+			err = -EINVAL;
-+			goto out_unlock;
-+		}
-+
- 		ieee80211_key_link(key, sdata, sta);
  
- 		if (set_tx_key || (!sta && !sdata->default_key && key))
-diff -up linux-2.6.25.noarch/net/wireless/reg.c.orig linux-2.6.25.noarch/net/wireless/reg.c
---- linux-2.6.25.noarch/net/wireless/reg.c.orig	2008-07-01 10:47:49.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/reg.c	2008-07-01 10:48:12.000000000 -0400
-@@ -80,6 +80,23 @@ static const struct ieee80211_channel_ra
- 				     IEEE80211_CHAN_RADAR),
- };
- 
-+static const struct ieee80211_channel_range ieee80211_EU_channels[] = {
-+	/* IEEE 802.11b/g, channels 1..13 */
-+	RANGE_PWR(2412, 2472, 20, 6, 0),
-+	/* IEEE 802.11a, channel 36*/
-+	RANGE_PWR(5180, 5180, 23, 6, IEEE80211_CHAN_PASSIVE_SCAN),
-+	/* IEEE 802.11a, channel 40*/
-+	RANGE_PWR(5200, 5200, 23, 6, IEEE80211_CHAN_PASSIVE_SCAN),
-+	/* IEEE 802.11a, channel 44*/
-+	RANGE_PWR(5220, 5220, 23, 6, IEEE80211_CHAN_PASSIVE_SCAN),
-+	/* IEEE 802.11a, channels 48..64 */
-+	RANGE_PWR(5240, 5320, 23, 6, IEEE80211_CHAN_NO_IBSS |
-+				     IEEE80211_CHAN_RADAR),
-+	/* IEEE 802.11a, channels 100..140 */
-+	RANGE_PWR(5500, 5700, 30, 6, IEEE80211_CHAN_NO_IBSS |
-+				     IEEE80211_CHAN_RADAR),
-+};
-+
- #define REGDOM(_code)							\
- 	{								\
- 		.code = __stringify(_code),				\
-@@ -90,6 +107,7 @@ static const struct ieee80211_channel_ra
- static const struct ieee80211_regdomain ieee80211_regdoms[] = {
- 	REGDOM(US),
- 	REGDOM(JP),
-+	REGDOM(EU),
+ 	/*
+ 	 * "antenna number"
+diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/if_usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/if_usb.c
+--- linux-2.6.25.noarch/drivers/net/wireless/libertas/if_usb.c.orig	2008-07-03 13:21:03.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/libertas/if_usb.c	2008-07-03 13:38:42.000000000 -0400
+@@ -925,6 +925,7 @@ static struct usb_driver if_usb_driver =
+ 	.id_table = if_usb_table,
+ 	.suspend = if_usb_suspend,
+ 	.resume = if_usb_resume,
++	.reset_resume = if_usb_resume,
  };
  
- 
+ static int __init if_usb_init_module(void)




More information about the fedora-extras-commits mailing list