rpms/kernel/devel kernel.spec, 1.667, 1.668 linux-2.6-wireless-pending.patch, 1.49, 1.50 linux-2.6-wireless.patch, 1.37, 1.38

John W. Linville (linville) fedora-extras-commits at redhat.com
Thu May 29 18:05:02 UTC 2008


Author: linville

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

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


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.667
retrieving revision 1.668
diff -u -r1.667 -r1.668
--- kernel.spec	29 May 2008 17:11:50 -0000	1.667
+++ kernel.spec	29 May 2008 18:04:14 -0000	1.668
@@ -1131,7 +1131,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
 
@@ -1776,6 +1776,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 May 29 2008 John W. Linville <linville at redhat.com>
+- Upstream wireless fixes from 2008-05-28
+  (http://marc.info/?l=linux-wireless&m=121201250110162&w=2)
+
 * Thu May 29 2008 Kristian Høgsberg <krh at redhat.com>
 - Add linux-2.6-silence-x86-decompressor.patch to silence the
   decompressor spew when 'quiet' is passed.

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.49 -r 1.50 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.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- linux-2.6-wireless-pending.patch	27 May 2008 16:53:53 -0000	1.49
+++ linux-2.6-wireless-pending.patch	29 May 2008 18:04:14 -0000	1.50
@@ -2862,8 +2862,8 @@
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
 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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c	2008-05-29 13:38:13.000000000 -0400
 @@ -306,11 +306,10 @@ static int adm8211_get_tx_stats(struct i
  				struct ieee80211_tx_queue_stats *stats)
  {
@@ -3012,8 +3012,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-05-27 12:02:07.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h	2008-05-29 13:38:13.000000000 -0400
 @@ -443,7 +443,6 @@ struct adm8211_rx_ring_info {
  struct adm8211_tx_ring_info {
  	struct sk_buff *skb;
@@ -3023,8 +3023,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/airo.c	2008-05-29 13:38:13.000000000 -0400
 @@ -1148,7 +1148,6 @@ static u8 airo_dbm_to_pct (tdsRssiEntry 
  static void airo_networks_free(struct airo_info *ai);
  
@@ -3193,8 +3193,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h	2008-05-29 13:38:13.000000000 -0400
 @@ -330,7 +330,6 @@ struct TxParam
  #define TX_RING_SIZE 2
  /* Information that need to be kept for each board. */
@@ -3204,8 +3204,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c	2008-05-29 13:38:13.000000000 -0400
 @@ -125,7 +125,7 @@ static inline int arlan_drop_tx(struct n
  {
  	struct arlan_private *priv = netdev_priv(dev);
@@ -3290,8 +3290,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-05-29 13:38:13.000000000 -0400
 @@ -167,8 +167,7 @@ static struct pci_driver ath5k_pci_drive
  /*
   * Prototypes - MAC 802.11 stack related functions
@@ -3581,8 +3581,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h	2008-05-29 13:38:13.000000000 -0400
 @@ -60,7 +60,6 @@ struct ath5k_buf {
  	dma_addr_t		daddr;	/* physical addr of desc */
  	struct sk_buff		*skb;	/* skbuff for buf */
@@ -3602,8 +3602,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c	2008-05-29 13:38:13.000000000 -0400
 @@ -433,7 +433,6 @@ struct atmel_private {
  	struct net_device *dev;
  	struct device *sys_dev;
@@ -3783,8 +3783,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig	2008-05-29 13:37:03.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-05-29 13:38:13.000000000 -0400
 @@ -410,8 +410,7 @@ enum {
  #define B43_IRQ_TIMEOUT			0x80000000
  
@@ -3829,8 +3829,8 @@
 -	struct ieee80211_tx_control beacon_txctl;
  	bool beacon0_uploaded;
  	bool beacon1_uploaded;
- 	struct work_struct beacon_update_trigger;
-@@ -767,6 +785,13 @@ struct b43_firmware {
+ 	bool beacon_templates_virgin; /* Never wrote the templates? */
+@@ -768,6 +786,13 @@ struct b43_firmware {
  	u16 rev;
  	/* Firmware patchlevel */
  	u16 patch;
@@ -3844,7 +3844,7 @@
  };
  
  /* Device (802.11 core) initialization status. */
-@@ -940,22 +965,6 @@ static inline bool __b43_warn_on_dummy(b
+@@ -941,22 +966,6 @@ static inline bool __b43_warn_on_dummy(b
  # define B43_WARN_ON(x)	__b43_warn_on_dummy(unlikely(!!(x)))
  #endif
  
@@ -3868,8 +3868,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c	2008-05-27 12:18:25.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c	2008-05-29 13:38:13.000000000 -0400
 @@ -270,24 +270,22 @@ static int restart_write_file(struct b43
  	return err;
  }
@@ -3995,8 +3995,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h	2008-05-29 13:38:13.000000000 -0400
 @@ -10,6 +10,7 @@ enum b43_dyndbg {		/* Dynamic debugging 
  	B43_DBG_DMAVERBOSE,
  	B43_DBG_PWORK_FAST,
@@ -4006,8 +4006,8 @@
  };
  
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c.orig	2008-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c	2008-05-27 12:24:18.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/dma.c	2008-05-29 13:38:13.000000000 -0400
 @@ -1131,10 +1131,10 @@ struct b43_dmaring *parse_cookie(struct 
  }
  
@@ -4158,8 +4158,8 @@
  	}
  }
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h.orig	2008-05-27 12:02:08.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/dma.h	2008-05-29 13:38:13.000000000 -0400
 @@ -181,7 +181,6 @@ struct b43_dmadesc_meta {
  	dma_addr_t dmaaddr;
  	/* ieee80211 TX status. Only used once per 802.11 frag. */
@@ -4178,8 +4178,8 @@
  			     const struct b43_txstatus *status);
  
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h.orig	2008-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h	2008-05-27 12:18:26.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/b43legacy.h	2008-05-29 13:38:13.000000000 -0400
 @@ -823,23 +823,6 @@ void b43legacydbg(struct b43legacy_wl *w
  # define b43legacydbg(wl, fmt...) do { /* nothing */ } while (0)
  #endif /* DEBUG */
@@ -4205,8 +4205,8 @@
  #define Q52_FMT		"%u.%u"
  #define Q52_ARG(q52)	((q52) / 4), (((q52) & 3) * 100 / 4)
 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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.c	2008-05-29 13:38:13.000000000 -0400
 @@ -1205,10 +1205,10 @@ struct b43legacy_dmaring *parse_cookie(s
  }
  
@@ -4325,8 +4325,8 @@
  	}
  }
 diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.h.orig	2008-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/dma.h.orig	2008-05-29 13:36:46.000000000 -0400
[...2484 lines suppressed...]
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_algo.c	2008-05-29 13:38:14.000000000 -0400
 @@ -237,8 +237,7 @@ static void rate_control_pid_sample(stru
  }
  
@@ -45202,8 +45202,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-05-27 12:02:15.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c	2008-05-29 13:38:14.000000000 -0400
 @@ -39,11 +39,11 @@ static void rate_control_pid_event(struc
  }
  
@@ -45230,8 +45230,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-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h	2008-05-29 13:38:14.000000000 -0400
 @@ -61,7 +61,7 @@ enum rc_pid_event_type {
  union rc_pid_event_data {
  	/* RC_PID_EVENT_TX_STATUS */
@@ -45251,8 +45251,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rx.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rx.c.orig	2008-05-29 13:37:03.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rx.c	2008-05-29 13:38:14.000000000 -0400
 @@ -77,6 +77,134 @@ static inline int should_drop_frame(stru
  	return 0;
  }
@@ -45724,8 +45724,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.c	2008-05-29 13:38:14.000000000 -0400
 @@ -202,14 +202,12 @@ void sta_info_destroy(struct sta_info *s
  		dev_kfree_skb_any(skb);
  
@@ -45812,8 +45812,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.h.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.h	2008-05-29 13:38:14.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.
@@ -45973,8 +45973,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.c	2008-05-29 13:38:14.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.
@@ -46355,8 +46355,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.h.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.h	2008-05-29 13:38:14.000000000 -0400
 @@ -13,12 +13,8 @@
  #include <linux/crypto.h>
  #include "key.h"
@@ -46373,8 +46373,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tx.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tx.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tx.c	2008-05-29 13:38:14.000000000 -0400
 @@ -91,11 +91,12 @@ static u16 ieee80211_duration(struct iee
  			      int next_frag_len)
  {
@@ -47633,8 +47633,8 @@
  	if (res == TX_DROP) {
  		I802_DEBUG_INC(local->tx_handlers_drop);
 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-05-27 12:02:15.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/util.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/util.c.orig	2008-05-29 13:37:03.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/util.c	2008-05-29 13:38:14.000000000 -0400
 @@ -258,7 +258,7 @@ EXPORT_SYMBOL(ieee80211_generic_frame_du
  
  __le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
@@ -47765,8 +47765,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.c	2008-05-29 13:38:14.000000000 -0400
 @@ -333,11 +333,16 @@ ieee80211_crypto_wep_decrypt(struct ieee
  
  static int wep_encrypt_skb(struct ieee80211_tx_data *tx, struct sk_buff *skb)
@@ -47795,8 +47795,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.h	2008-05-27 12:18:25.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.h.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.h	2008-05-29 13:38:14.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,
@@ -47807,8 +47807,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-05-27 12:18:25.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wext.c.orig	2008-05-29 13:37:03.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-05-29 13:38:14.000000000 -0400
 @@ -169,14 +169,26 @@ static int ieee80211_ioctl_giwrange(stru
  	range->num_encoding_sizes = 2;
  	range->max_encoding_tokens = NUM_DEFAULT_KEYS;
@@ -47842,7 +47842,7 @@
  	range->avg_qual.updated = local->wstats_flags;
  
  	range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
-@@ -995,8 +1007,8 @@ static struct iw_statistics *ieee80211_g
+@@ -1000,8 +1012,8 @@ static struct iw_statistics *ieee80211_g
  		wstats->qual.noise = 0;
  		wstats->qual.updated = IW_QUAL_ALL_INVALID;
  	} else {
@@ -47854,8 +47854,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-05-27 12:18:04.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.c	2008-05-29 13:38:14.000000000 -0400
 @@ -19,16 +19,22 @@
  #include "wme.h"
  
@@ -48230,8 +48230,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-05-27 12:02:15.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.h.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.h	2008-05-29 13:38:14.000000000 -0400
 @@ -31,7 +31,7 @@ static inline int WLAN_FC_IS_QOS_DATA(u1
  	return (fc & 0x8C) == 0x88;
  }
@@ -48242,8 +48242,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-05-27 12:24:19.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wpa.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wpa.c	2008-05-29 13:38:14.000000000 -0400
 @@ -176,22 +176,32 @@ ieee80211_rx_h_michael_mic_verify(struct
  	skb_trim(skb, skb->len - MICHAEL_MIC_LEN);
  
@@ -48412,8 +48412,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/core.c	2008-05-27 12:18:25.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/core.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/core.c	2008-05-29 13:38:14.000000000 -0400
 @@ -143,8 +143,11 @@ void cfg80211_put_dev(struct cfg80211_re
  int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
  			char *newname)
@@ -48477,8 +48477,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-05-27 12:18:05.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-05-27 12:18:25.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/radiotap.c.orig	2008-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/radiotap.c	2008-05-29 13:38:14.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.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- linux-2.6-wireless.patch	21 May 2008 19:24:23 -0000	1.37
+++ linux-2.6-wireless.patch	29 May 2008 18:04:14 -0000	1.38
@@ -1,316 +1,890 @@
-commit 5d283e8cdb8097b6a3e9304c9c8942ad9dc1a4eb
-Author: David Woodhouse <dwmw2 at infradead.org>
-Date:   Mon May 19 16:32:02 2008 +0100
-
-    libertas: Fix ethtool statistics
-    
-    Fix various problems:
-     - We converted MESH_ACCESS to a direct command but missed this caller.
-     - We were trying to access mesh stats even on meshless firmware.
-     - We should really zero the buffer if something goes wrong.
+commit c97c23e38625f59e3e9869664eeeb0cab1822948
+Author: Senthil Balasubramanian <senthilkumar at atheros.com>
+Date:   Wed May 28 23:15:32 2008 +0530
+
+    mac80211: fix alignment issue with compare_ether_addr()
+    
+    This addresses an alignment issue with compare_ether_addr().
+    The addresses passed to compare_ether_addr should be two bytes aligned.
+    It may function properly in x86 platform. However may not work properly
+    on IA-64 or ARM processor.
+    
+    This also fixes a typo in mlme.c where the sk_buff struct name is incorect.
+    Though sizeof() works for any incorrect structure pointer name as its just
+    a pointer length that we want, lets just fix it.
     
-    Signed-off-by: David Woodhouse <dwmw2 at infradead.org>
+    Signed-off-by: Senthil Balasubramanian <senthilkumar at atheros.com>
+    Signed-off-by: Luis R. Rodriguez <lrodriguez at atheros.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 70d251b24c44ab2fcba1807a5206e844cf10eb38
+Author: Senthil Balasubramanian <senthilkumar at atheros.com>
+Date:   Wed May 28 20:08:12 2008 +0530
+
+    mac80211: Fix for NULL pointer dereference in sta_info_get()
+    
+    This addresses a NULL pointer dereference in sta_info_get().
+    TID and sta_info are extracted in ADDBA Timer expiry function
+    through the timer handler's argument.
+    
+    The problem is extracging the TID (which was stored in
+    timer_to_tid[] array of type "u8") through "int *" typecast which
+    may also yield unwanted bytes for the MSB of TID that results
+    in incorrect sta_info and ieee80211_local pointers.
+    
+    ieee80211_local pointer is NULL as illustrated below, it crashes in
+    sta_info_get(). The problem started when extracting ieee80211_local
+    pointer out of sta_info iteself and eventually crashed in
+    stat_info_get().
+    
+    The proper way to fix is to change the data type of TID to u8
+    instead of u16. However changing all the occurences requires
+    some prototype changes as well. We should fix this in upcoming
+    patches.
+    
+    Signed-off-by: Senthil Balasubramanian <senthilkumar at atheros.com>
+    Signed-off-by: Luis Rodriguez <lrodriguez at atheros.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f6d97104890203ba9c2cf8e34894c4c8e64cb880
+Author: Yi Zhu <yi.zhu at intel.com>
+Date:   Tue May 27 17:50:50 2008 +0300
+
+    mac80211: fix a typo in ieee80211_handle_filtered_frame comment
+    
+    fix a typo in ieee80211_handle_filtered_frame comment
+    
+    Signed-off-by: Yi Zhu <yi.zhu at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a7624837261b55259d4a88309fd88529643fbb80
+Author: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
+Date:   Tue May 27 11:15:08 2008 +0300
+
+    rndis_wlan: add missing range check for power_output modparam
+    
+    Range check for power_output were missing.
+    
+    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 135a5484c3e0c6710035630b630cef3c856b78e2
+Author: Guy Cohen <guy.cohen at intel.com>
+Date:   Tue May 27 11:29:35 2008 +0800
+
+    iwlwifi: fix rate scale TLC column selection bug
+    
+    This patch fixes a case that a wrong maximal rate is selected when
+    searching for better configurations.
+    
+    Signed-off-by: Guy Cohen <guy.cohen at intel.com>
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 47cfd463962ab0748ecbad761ff6ef2916b54aac
+Author: Guy Cohen <guy.cohen at intel.com>
+Date:   Tue May 27 11:29:34 2008 +0800
+
+    iwlwifi: fix exit from stay_in_table state
+    
+    When exiting from stay in table state (e.g. timer expiration),
+    all the statistics are reset and the RS flow should not continue
+    but only after enough statistics are collected again.
+    
+    Signed-off-by: Guy Cohen <guy.cohen at intel.com>
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 4364623cb79d02945ace7a4faa1f11e617dde198
+Author: Scott Ashcroft <scott.ashcroft at talk21.com>
+Date:   Tue May 27 00:06:15 2008 +0300
+
+    rndis_wlan: Make connections to TKIP PSK networks work
+    
+    This patch allows the rndis_wlan driver to connect to TKIP PSK
+    networks.  It uses the ASSOCIATION_INFORMATION RNDIS call to pull back
+    the IEs and sends them back to userspace using wireless events. Tested
+    on a few wireless networks I have access to. Based on the similar
+    code in ndiswrapper.
+    
+    Signed-off-by: Scott Ashcroft <scott.ashcroft at talk21.com>
+    [edit: cleanups]
+    Signed-off-by: Jussi Kivilinna <jussi.kivilinna at mbnet.fi>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit d4231ca3e162387a2b6964dacaa83604e065c4e9
+Author: Abhijeet Kolekar <abhijeet.kolekar at intel.com>
+Date:   Fri May 23 10:15:26 2008 -0700
+
+    mac80211 : Fixes the status message for iwconfig
+    
+    iwconfig was showing incorrect status messages when disassociated.
+    Patch fixes this by always checking for association status in
+    ioctl calls for getting ap address.
+    
+    Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar at intel.com>
     Acked-by: Dan Williams <dcbw at redhat.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0d580a774b3682b8b2b5c89ab9b813d149ef28e7
-Author: Helmut Schaa <hschaa at suse.de>
-Date:   Tue May 20 09:56:37 2008 +0200
+commit 633257d3db547e7553500f05e0aa2692c876d7a5
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Fri May 23 18:14:02 2008 +0200
+
+    rt2x00: Use atomic interface iteration in irq context
+    
+    rt2x00lib_beacondone() is called from interrupt context,
+    this means we cannot use the mac80211 interface iterator
+    that uses the rtnl lock (since that uses a mutex which can sleep).
+    Instead we should use the atomic mac80211 interface iterator.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f06a0f486dc8bbe8808f46b81fbfd73241529fae
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Fri May 23 18:13:56 2008 +0200
+
+    rt2x00: Reset antenna RSSI after switch
+    
+    When the antenna configuration has changed we should reset
+    the antenna RSSI value. Otherwise the value will be influenced
+    by the previous configuration quality which in turn will affect
+    the antenna diversity.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 2088d4174e4292aef892bb7095fc3c3ea5bd117c
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Fri May 23 18:13:49 2008 +0200
+
+    rt2x00: Don't count retries as failure
+    
+    Link quality estimation became quite low for all rt2x00 drivers
+    because the number of retries it took to send the frame were
+    counted as failure.
+    This does not correspond to the legacy driver link quality calculation,
+    by not counting it we will send somewhat more optimistic values to
+    mac80211.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-    mac80211: fix NULL pointer dereference in ieee80211_compatible_rates
+commit 0f3e63a55b1a7b695a79bf3eec2ff5ab6b336037
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Fri May 23 18:13:41 2008 +0200
+
+    rt2x00: Fix memleak in tx() path
     
-    Fix a possible NULL pointer dereference in ieee80211_compatible_rates
-    introduced in the patch "mac80211: fix association with some APs". If no bss
-    is available just use all supported rates in the association request.
+    When the tx() handler runs while the device has disapeared,
+    we did return NETDEV_TX_OK but didn't free the skb.
     
-    Signed-off-by: Helmut Schaa <hschaa at suse.de>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 51e779f0daa5c712439d37b907d58543e4fcf12a
-Author: Johannes Berg <johannes at sipsolutions.net>
-Date:   Mon May 19 07:18:10 2008 +0200
+commit 9381be059bf5831d259e8735005cfa35b7488543
+Author: Tomas Winkler <tomas.winkler at intel.com>
+Date:   Fri May 23 01:36:36 2008 +0300
+
+    mac80211: reorder channel and freq reporting in wext scan report
+    
+    This patch switch order of channel and freq (SIOCGIWFREQ) reports
+    in scan results in order to overcome wpa_supplicant inability
+    to handle channel numbers in 5.2Ghz band.
+    Wext reporting channel number is ambiguous as channels 7-12 (802.11j)
+    exist on both bands.
+    
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
+    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
+    Acked-by: Dan Williams <dcbw at redhat.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-    mac80211: don't claim iwspy support
+commit 3bf0a32e22fedc0b46443699db2d61ac2a883ac4
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Thu May 22 16:32:16 2008 +0200
+
+    b43: Fix controller restart crash
     
-    We removed iwspy support a very long time ago because it is useless, but
-    forgot to stop claiming to support it. Apparently, nobody cares, but
-    remove it nonetheless.
+    This fixes a kernel crash on rmmod, in the case where the controller
+    was restarted before doing the rmmod.
     
-    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 682c97c04b3041d0f29241b8bfa013093201e269
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri May 16 17:53:03 2008 -0400
+commit 167ad6f7a2b2ae58dfaa46620b9b3212594f38e6
+Author: Tomas Winkler <tomas.winkler at intel.com>
+Date:   Wed May 21 18:17:05 2008 +0300
 
-    orinoco_cs: add ID for SpeedStream wireless adapters
+    mac80211: fix ieee80211_rx_bss_put/get imbalance
     
-    Reported by Gerald Willmann <gerald.willmann at econ.kuleuven.be>
+    This patch fixes iee80211_rx_bss_put/get imbalance
+    introduced by 'mac80211: enable IBSS merging' patch.
     
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 449fecca0b74502b571f4199d46bcd6a11a5e2c2
-Author: Pavel Roskin <proski at gnu.org>
-Date:   Fri May 16 17:52:57 2008 -0400
+commit 679fda1aa49fddf938bb699df7867c01988371ab
+Author: Nicolas Kaiser <nikai at nikai.net>
+Date:   Tue May 20 18:42:54 2008 +0200
 
-    hostap_cs: add ID for Conceptronic CON11CPro
+    net/mac80211: always true conditionals
     
-    Reported by Santiago Garcia Mantinan <hostap at manty.net>
+    Correct always true conditionals.
     
-    Signed-off-by: Pavel Roskin <proski at gnu.org>
+    Signed-off-by: Nicolas Kaiser <nikai at nikai.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ea8ee240251cbac73b66d70d35eeabfbff86d3ce
-Author: Oliver Neukum <oliver at neukum.org>
-Date:   Thu May 15 21:49:16 2008 +0200
+commit 6b4bec010d888c5b8c731aa596635cd83dd3416c
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Tue May 20 12:16:28 2008 +0200
 
-    rtl8187: resource leak in error case
+    b43: Upload both beacon templates on initial load
     
-    This fixes resource leaks in error cases due to urb submission
-    failures.
+    This updates the beacon template code to upload both templates,
+    if we never uploaded one before.
     
-    Signed-off-by: Oliver Neukum <oneukum at suse.de>
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 89fd2e282ad510f801c1f44a660086f9d5bdf088
-Author: Bob Copeland <me at bobcopeland.com>
-Date:   Mon May 12 21:16:44 2008 -0400
+commit bc1b1fb2753873314ad1bf56bc7d5b8dd447cd2a
+Author: Andrea Merello <andrea.merello at gmail.com>
+Date:   Sat May 10 13:34:16 2008 +0200
 
-    ath5k: Fix loop variable initializations
+    rtl8180: fix wrong parameter in grf5101_rf_set_channel
+    
+    The grf5101 RF code needs to invoke grf5101_write_phy_antenna every time the
+    channel is being switch.
     
-    In ath5k_tasklet_rx, both status structures 'rxs' and 'rs' are
-    initialized at the top of the tasklet, but not within the loop.
-    If the loop is executed multiple times in the tasklet then the
-    variables may see changes from previous packets.
+    This should be done passing the channel number to that function.
+    Incorrectly we were passing the same value that is written on the
+    channel RF register.
+    This may cause problems when operating on ch 14.
     
-    For TKIP, this results in 'Invalid Michael MIC' errors if two packets
-    are processed in the tasklet: rxs.flag gets set to RX_DECRYPTED by
-    mac80211 when it decrypts the first encrypted packet.  The subsequent
-    packet will have RX_DECRYPTED set upon entry to mac80211, so mac80211
-    will not try to decrypt it.
+    This patch fixes it.
     
-    We currently initialize all but two fields in the structures, so fix
-    the other two.
+    Thanks to Alessandro Di Marco who found this issue!
     
-    Signed-off-by: Bob Copeland <me at bobcopeland.com>
+    Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-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-05-21 11:36:33.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/mlme.c	2008-05-21 14:45:53.000000000 -0400
-@@ -730,7 +730,17 @@ static void ieee80211_send_assoc(struct 
- 		if (bss->wmm_ie) {
- 			wmm = 1;
- 		}
+commit 0a0ab41e833c8184c6d4ab663f137d5bbd50e049
+Author: Andrea Merello <andrea.merello at gmail.com>
+Date:   Sat May 10 13:32:34 2008 +0200
+
+    rtl8180: fix wrong parameter in max2820_rf_set_channel
+    
+    The max2820 RF code needs to invoke max2820_write_phy_antenna every time the
+    channel is being switch.
+    
+    This should be done passing the channel number to that function.
+    Incorrectly we were passing the same value that is written on the
+    channel RF register.
+    This may cause problems when operating on ch 14.
+    
+    This patch fixes it.
+    
+    Thanks to Alessandro Di Marco who found this issue!
+    
+    Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 0823b2c3c10a4db21cd39a8c72cda96b4dd6d914
+Author: Andrea Merello <andreamrl at tiscali.it>
+Date:   Sat May 10 13:30:12 2008 +0200
+
+    rtl8180: fix wrong parameter in sa2400_rf_set_channel
+    
+    The sa2400 RF code needs to invoke sa2400_write_phy_antenna every time the
+    channel is being switch.
+    
+    This should be done passing the channel number to that function.
+    Incorrectly we were passing the same value that is written on the
+    channel RF register.
+    This may cause problems when operating on ch 14.
+    
+    This patch fixes it.
+    
+    Thanks to Alessandro Di Marco who found this issue!
+    
+    Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 6f6c218f68e632e4596cae6e6d43658d26a5e0fe
+Author: John W. Linville <linville at tuxdriver.com>
+Date:   Tue May 27 17:01:55 2008 -0400
+
+    rtl8180: avoid NULL dereference in max2820_rf_set_channel
+    
+    The static function max2820_rf_set_channel is called with conf == NULL
+    within its compilation unit.  Originally this defaulted to b/g channel
+    1, but "cfg80211 API for channels/bitrates, mac80211 and driver
+    conversion" (commit 8318d78a44d49ac1edf2bdec7299de3617c4232e) mistakenly
+    dropped this check.  This patch minimally restores the expected
+    behavior.
+    
+    Reported-by: Colin Lai <colin_sh at 163.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+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-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h	2008-05-29 13:37:03.000000000 -0400
+@@ -737,6 +737,7 @@ struct b43_wl {
+ 	struct ieee80211_tx_control beacon_txctl;
+ 	bool beacon0_uploaded;
+ 	bool beacon1_uploaded;
++	bool beacon_templates_virgin; /* Never wrote the templates? */
+ 	struct work_struct beacon_update_trigger;
+ 
+ 	/* The current QOS parameters for the 4 queues.
+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-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/main.c	2008-05-29 13:37:03.000000000 -0400
+@@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_templat
+ 	kfree(probe_resp_data);
+ }
+ 
++static void b43_upload_beacon0(struct b43_wldev *dev)
++{
++	struct b43_wl *wl = dev->wl;
 +
-+		/* get all rates supported by the device and the AP as
-+		 * some APs don't like getting a superset of their rates
-+		 * in the association request (e.g. D-Link DAP 1353 in
-+		 * b-only mode) */
-+		rates_len = ieee80211_compatible_rates(bss, sband, &rates);
++	if (wl->beacon0_uploaded)
++		return;
++	b43_write_beacon_template(dev, 0x68, 0x18);
++	/* FIXME: Probe resp upload doesn't really belong here,
++	 *        but we don't use that feature anyway. */
++	b43_write_probe_resp_template(dev, 0x268, 0x4A,
++				      &__b43_ratetable[3]);
++	wl->beacon0_uploaded = 1;
++}
 +
- 		ieee80211_rx_bss_put(dev, bss);
++static void b43_upload_beacon1(struct b43_wldev *dev)
++{
++	struct b43_wl *wl = dev->wl;
++
++	if (wl->beacon1_uploaded)
++		return;
++	b43_write_beacon_template(dev, 0x468, 0x1A);
++	wl->beacon1_uploaded = 1;
++}
++
+ static void handle_irq_beacon(struct b43_wldev *dev)
+ {
+ 	struct b43_wl *wl = dev->wl;
+@@ -1568,24 +1592,27 @@ static void handle_irq_beacon(struct b43
+ 		return;
+ 	}
+ 
+-	if (!beacon0_valid) {
+-		if (!wl->beacon0_uploaded) {
+-			b43_write_beacon_template(dev, 0x68, 0x18);
+-			b43_write_probe_resp_template(dev, 0x268, 0x4A,
+-						      &__b43_ratetable[3]);
+-			wl->beacon0_uploaded = 1;
+-		}
++	if (unlikely(wl->beacon_templates_virgin)) {
++		/* We never uploaded a beacon before.
++		 * Upload both templates now, but only mark one valid. */
++		wl->beacon_templates_virgin = 0;
++		b43_upload_beacon0(dev);
++		b43_upload_beacon1(dev);
+ 		cmd = b43_read32(dev, B43_MMIO_MACCMD);
+ 		cmd |= B43_MACCMD_BEACON0_VALID;
+ 		b43_write32(dev, B43_MMIO_MACCMD, cmd);
+-	} else if (!beacon1_valid) {
+-		if (!wl->beacon1_uploaded) {
+-			b43_write_beacon_template(dev, 0x468, 0x1A);
+-			wl->beacon1_uploaded = 1;
 +	} else {
-+		rates = ~0;
-+		rates_len = sband->n_bitrates;
++		if (!beacon0_valid) {
++			b43_upload_beacon0(dev);
++			cmd = b43_read32(dev, B43_MMIO_MACCMD);
++			cmd |= B43_MACCMD_BEACON0_VALID;
++			b43_write32(dev, B43_MMIO_MACCMD, cmd);
++		} else if (!beacon1_valid) {
++			b43_upload_beacon1(dev);
++			cmd = b43_read32(dev, B43_MMIO_MACCMD);
++			cmd |= B43_MACCMD_BEACON1_VALID;
++			b43_write32(dev, B43_MMIO_MACCMD, cmd);
+ 		}
+-		cmd = b43_read32(dev, B43_MMIO_MACCMD);
+-		cmd |= B43_MACCMD_BEACON1_VALID;
+-		b43_write32(dev, B43_MMIO_MACCMD, cmd);
  	}
+ }
  
- 	mgmt = (struct ieee80211_mgmt *) skb_put(skb, 24);
-@@ -761,10 +771,7 @@ static void ieee80211_send_assoc(struct 
- 	*pos++ = ifsta->ssid_len;
- 	memcpy(pos, ifsta->ssid, ifsta->ssid_len);
- 
--	/* all supported rates should be added here but some APs
--	 * (e.g. D-Link DAP 1353 in b-only mode) don't like that
--	 * Therefore only add rates the AP supports */
--	rates_len = ieee80211_compatible_rates(bss, sband, &rates);
-+	/* add all rates which were marked to be used above */
- 	supp_rates_len = rates_len;
- 	if (supp_rates_len > 8)
- 		supp_rates_len = 8;
-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-05-21 11:36:27.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-05-21 14:45:53.000000000 -0400
-@@ -209,7 +209,6 @@ static int ieee80211_ioctl_giwrange(stru
- 	range->num_frequency = c;
- 
- 	IW_EVENT_CAPA_SET_KERNEL(range->event_capa);
--	IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWTHRSPY);
- 	IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWAP);
- 	IW_EVENT_CAPA_SET(range->event_capa, SIOCGIWSCAN);
- 
-diff -up linux-2.6.25.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.25.noarch/drivers/net/wireless/rtl8187_dev.c
---- linux-2.6.25.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2008-05-21 11:36:23.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/rtl8187_dev.c	2008-05-21 14:45:53.000000000 -0400
-@@ -92,6 +92,7 @@ static void rtl8187_iowrite_async(struct
- 		u8 data[4];
- 		struct usb_ctrlrequest dr;
- 	} *buf;
-+	int rc;
- 
- 	buf = kmalloc(sizeof(*buf), GFP_ATOMIC);
- 	if (!buf)
-@@ -116,7 +117,11 @@ static void rtl8187_iowrite_async(struct
- 	usb_fill_control_urb(urb, priv->udev, usb_sndctrlpipe(priv->udev, 0),
- 			     (unsigned char *)dr, buf, len,
- 			     rtl8187_iowrite_async_cb, buf);
--	usb_submit_urb(urb, GFP_ATOMIC);
-+	rc = usb_submit_urb(urb, GFP_ATOMIC);
-+	if (rc < 0) {
-+		kfree(buf);
-+		usb_free_urb(urb);
-+	}
+@@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211
+ 	wl->filter_flags = 0;
+ 	wl->radiotap_enabled = 0;
+ 	b43_qos_clear(wl);
++	wl->beacon0_uploaded = 0;
++	wl->beacon1_uploaded = 0;
++	wl->beacon_templates_virgin = 1;
+ 
+ 	/* First register RFkill.
+ 	 * LEDs that are registered later depend on it. */
+@@ -4241,7 +4271,9 @@ static void b43_chip_reset(struct work_s
+ 			goto out;
+ 		}
+ 	}
+-      out:
++out:
++	if (err)
++		wl->current_dev = NULL; /* Failed to init the dev. */
+ 	mutex_unlock(&wl->mutex);
+ 	if (err)
+ 		b43err(wl, "Controller restart FAILED\n");
+@@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct s
+ 	struct b43_wldev *wldev;
+ 	struct b43_wl *wl;
+ 
++	/* Do not cancel ieee80211-workqueue based work here.
++	 * See comment in b43_remove(). */
++
+ 	wldev = ssb_get_drvdata(dev);
+ 	wl = wldev->wl;
+-	cancel_work_sync(&wldev->restart_work);
+ 	b43_debugfs_remove_device(wldev);
+ 	b43_wireless_core_detach(wldev);
+ 	list_del(&wldev->list);
+@@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device
+ 	struct b43_wl *wl = ssb_get_devtypedata(dev);
+ 	struct b43_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);
++
+ 	B43_WARN_ON(!wl);
+ 	if (wl->current_dev == wldev)
+ 		ieee80211_unregister_hw(wl->hw);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c.orig	2008-05-29 13:36:46.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-4965-rs.c	2008-05-29 13:37:03.000000000 -0400
+@@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_p
+ 
+ 			/* Higher rate not available, use the original */
+ 			} else {
+-				new_rate = rate;
+ 				break;
+ 			}
+ 		}
+@@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct
+ 	 * 2)  Not just finishing up a search
+ 	 * 3)  Allowing a new search
+ 	 */
+-	if (!update_lq && !done_search && !lq_sta->stay_in_tbl) {
++	if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) {
+ 		/* Save current throughput to compare with "search" throughput*/
+ 		lq_sta->last_tpt = current_tpt;
+ 
+diff -up linux-2.6.25.noarch/drivers/net/wireless/rndis_wlan.c.orig linux-2.6.25.noarch/drivers/net/wireless/rndis_wlan.c
+--- linux-2.6.25.noarch/drivers/net/wireless/rndis_wlan.c.orig	2008-05-29 11:04:14.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rndis_wlan.c	2008-05-29 13:37:03.000000000 -0400
+@@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval,
+ #define OID_802_11_ENCRYPTION_STATUS		ccpu2(0x0d01011b)
+ #define OID_802_11_ADD_KEY			ccpu2(0x0d01011d)
+ #define OID_802_11_REMOVE_KEY			ccpu2(0x0d01011e)
++#define OID_802_11_ASSOCIATION_INFORMATION	ccpu2(0x0d01011f)
+ #define OID_802_11_PMKID			ccpu2(0x0d010123)
+ #define OID_802_11_NETWORK_TYPES_SUPPORTED	ccpu2(0x0d010203)
+ #define OID_802_11_NETWORK_TYPE_IN_USE		ccpu2(0x0d010204)
+@@ -271,6 +272,26 @@ struct ndis_config_param {
+ 	__le32 value_length;
+ } __attribute__((packed));
+ 
++struct ndis_80211_assoc_info {
++	__le32 length;
++	__le16 req_ies;
++	struct req_ie {
++		__le16 capa;
++		__le16 listen_interval;
++		u8 cur_ap_address[6];
++	} req_ie;
++	__le32 req_ie_length;
++	__le32 offset_req_ies;
++	__le16 resp_ies;
++	struct resp_ie {
++		__le16 capa;
++		__le16 status_code;
++		__le16 assoc_id;
++	} resp_ie;
++	__le32 resp_ie_length;
++	__le32 offset_resp_ies;
++} __attribute__((packed));
++
+ /* these have to match what is in wpa_supplicant */
+ enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP };
+ enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP,
+@@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbd
+ 	return ret;
  }
  
- static inline void rtl818x_iowrite32_async(struct rtl8187_priv *priv,
-@@ -169,6 +174,7 @@ static int rtl8187_tx(struct ieee80211_h
- 	struct urb *urb;
- 	__le16 rts_dur = 0;
- 	u32 flags;
-+	int rc;
- 
- 	urb = usb_alloc_urb(0, GFP_ATOMIC);
- 	if (!urb) {
-@@ -208,7 +214,11 @@ static int rtl8187_tx(struct ieee80211_h
- 	info->dev = dev;
- 	usb_fill_bulk_urb(urb, priv->udev, usb_sndbulkpipe(priv->udev, 2),
- 			  hdr, skb->len, rtl8187_tx_cb, skb);
--	usb_submit_urb(urb, GFP_ATOMIC);
-+	rc = usb_submit_urb(urb, GFP_ATOMIC);
-+	if (rc < 0) {
-+		usb_free_urb(urb);
-+		kfree_skb(skb);
-+	}
++static int get_association_info(struct usbnet *usbdev,
++			struct ndis_80211_assoc_info *info, int len)
++{
++	return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION,
++				info, &len);
++}
  
- 	return 0;
+ static int is_associated(struct usbnet *usbdev)
+ {
+@@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct wor
+ 	struct usbnet *usbdev = priv->usbdev;
+ 	union iwreq_data evt;
+ 	unsigned char bssid[ETH_ALEN];
+-	int ret;
++	struct ndis_80211_assoc_info *info;
++	int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32;
++	int ret, offset;
+ 
+ 	if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) {
+-		ret = get_bssid(usbdev, bssid);
++		info = kzalloc(assoc_size, GFP_KERNEL);
++		if (!info)
++			goto get_bssid;
++
++		/* Get association info IEs from device and send them back to
++		 * userspace. */
++		ret = get_association_info(usbdev, info, assoc_size);
++		if (!ret) {
++			evt.data.length = le32_to_cpu(info->req_ie_length);
++			if (evt.data.length > 0) {
++				offset = le32_to_cpu(info->offset_req_ies);
++				wireless_send_event(usbdev->net,
++					IWEVASSOCREQIE, &evt,
++					(char *)info + offset);
++			}
++
++			evt.data.length = le32_to_cpu(info->resp_ie_length);
++			if (evt.data.length > 0) {
++				offset = le32_to_cpu(info->offset_resp_ies);
++				wireless_send_event(usbdev->net,
++					IWEVASSOCRESPIE, &evt,
++					(char *)info + offset);
++			}
++		}
+ 
++		kfree(info);
++
++get_bssid:
++		ret = get_bssid(usbdev, bssid);
+ 		if (!ret) {
+ 			evt.data.flags = 0;
+ 			evt.data.length = 0;
+@@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usb
+ 	else if (priv->param_power_save > 2)
+ 		priv->param_power_save = 2;
+ 
++	if (priv->param_power_output < 0)
++		priv->param_power_output = 0;
++	else if (priv->param_power_output > 3)
++		priv->param_power_output = 3;
++
+ 	if (priv->param_roamtrigger < -80)
+ 		priv->param_roamtrigger = -80;
+ 	else if (priv->param_roamtrigger > -60)
+diff -up linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00config.c.orig linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00config.c
+--- linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00config.c.orig	2008-05-29 11:04:14.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00config.c	2008-05-29 13:37:03.000000000 -0400
+@@ -129,6 +129,7 @@ void rt2x00lib_config_antenna(struct rt2
+ 	 */
+ 	rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA);
+ 	rt2x00lib_reset_link_tuner(rt2x00dev);
++	rt2x00_reset_link_ant_rssi(&rt2x00dev->link);
+ 
+ 	rt2x00dev->link.ant.active.rx = libconf.ant.rx;
+ 	rt2x00dev->link.ant.active.tx = libconf.ant.tx;
+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-05-29 13:36:47.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00dev.c	2008-05-29 13:37:03.000000000 -0400
+@@ -483,9 +483,9 @@ void rt2x00lib_beacondone(struct rt2x00_
+ 	if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags))
+ 		return;
+ 
+-	ieee80211_iterate_active_interfaces(rt2x00dev->hw,
+-					    rt2x00lib_beacondone_iter,
+-					    rt2x00dev);
++	ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw,
++						   rt2x00lib_beacondone_iter,
++						   rt2x00dev);
+ 
+ 	queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work);
  }
-diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/ethtool.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/ethtool.c
---- linux-2.6.25.noarch/drivers/net/wireless/libertas/ethtool.c.orig	2008-05-21 11:36:23.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/libertas/ethtool.c	2008-05-21 14:45:53.000000000 -0400
-@@ -73,8 +73,8 @@ out:
-         return ret;
+@@ -507,7 +507,7 @@ void rt2x00lib_txdone(struct queue_entry
+ 	 * Update TX statistics.
+ 	 */
+ 	rt2x00dev->link.qual.tx_success += success;
+-	rt2x00dev->link.qual.tx_failed += txdesc->retry + fail;
++	rt2x00dev->link.qual.tx_failed += fail;
+ 
+ 	/*
+ 	 * Initialize TX status
+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-05-29 13:36:47.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00.h	2008-05-29 13:37:03.000000000 -0400
+@@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rs
+ 	return DEFAULT_RSSI;
  }
  
--static void lbs_ethtool_get_stats(struct net_device * dev,
--				struct ethtool_stats * stats, u64 * data)
-+static void lbs_ethtool_get_stats(struct net_device *dev,
-+				  struct ethtool_stats *stats, uint64_t *data)
++static inline void rt2x00_reset_link_ant_rssi(struct link *link)
++{
++	link->ant.rssi_ant = 0;
++}
++
+ static inline int rt2x00_get_link_ant_rssi_history(struct link *link,
+ 						   enum antenna ant)
  {
- 	struct lbs_private *priv = dev->priv;
- 	struct cmd_ds_mesh_access mesh_access;
-@@ -83,12 +83,12 @@ static void lbs_ethtool_get_stats(struct
- 	lbs_deb_enter(LBS_DEB_ETHTOOL);
- 
- 	/* Get Mesh Statistics */
--	ret = lbs_prepare_and_send_command(priv,
--			CMD_MESH_ACCESS, CMD_ACT_MESH_GET_STATS,
--			CMD_OPTION_WAITFORRSP, 0, &mesh_access);
-+	ret = lbs_mesh_access(priv, CMD_ACT_MESH_GET_STATS, &mesh_access);
- 
--	if (ret)
-+	if (ret) {
-+		memset(data, 0, MESH_STATS_NUM*(sizeof(uint64_t)));
- 		return;
-+	}
+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-05-29 13:36:47.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rt2x00/rt2x00mac.c	2008-05-29 13:37:03.000000000 -0400
+@@ -93,6 +93,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw
+ 	 */
+ 	if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) {
+ 		ieee80211_stop_queues(hw);
++		dev_kfree_skb_any(skb);
+ 		return NETDEV_TX_OK;
+ 	}
  
- 	priv->mstats.fwd_drop_rbt = le32_to_cpu(mesh_access.data[0]);
- 	priv->mstats.fwd_drop_ttl = le32_to_cpu(mesh_access.data[1]);
-@@ -111,19 +111,18 @@ static void lbs_ethtool_get_stats(struct
- 	lbs_deb_enter(LBS_DEB_ETHTOOL);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/rtl8180_grf5101.c.orig linux-2.6.25.noarch/drivers/net/wireless/rtl8180_grf5101.c
+--- linux-2.6.25.noarch/drivers/net/wireless/rtl8180_grf5101.c.orig	2008-05-29 11:04:14.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rtl8180_grf5101.c	2008-05-29 13:37:03.000000000 -0400
+@@ -88,7 +88,7 @@ static void grf5101_rf_set_channel(struc
+ 	write_grf5101(dev, 0x0B, chan);
+ 	write_grf5101(dev, 0x07, 0x1000);
+ 
+-	grf5101_write_phy_antenna(dev, chan);
++	grf5101_write_phy_antenna(dev, channel);
  }
  
--static int lbs_ethtool_get_sset_count(struct net_device * dev, int sset)
-+static int lbs_ethtool_get_sset_count(struct net_device *dev, int sset)
+ static void grf5101_rf_stop(struct ieee80211_hw *dev)
+diff -up linux-2.6.25.noarch/drivers/net/wireless/rtl8180_max2820.c.orig linux-2.6.25.noarch/drivers/net/wireless/rtl8180_max2820.c
+--- linux-2.6.25.noarch/drivers/net/wireless/rtl8180_max2820.c.orig	2008-05-29 11:04:14.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rtl8180_max2820.c	2008-05-29 13:37:03.000000000 -0400
+@@ -78,7 +78,8 @@ static void max2820_rf_set_channel(struc
+ 				   struct ieee80211_conf *conf)
  {
--	switch (sset) {
--	case ETH_SS_STATS:
-+	struct lbs_private *priv = dev->priv;
-+
-+	if (sset == ETH_SS_STATS && dev == priv->mesh_dev)
- 		return MESH_STATS_NUM;
--	default:
--		return -EOPNOTSUPP;
--	}
-+
-+	return -EOPNOTSUPP;
+ 	struct rtl8180_priv *priv = dev->priv;
+-	int channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
++	int channel = conf ?
++		ieee80211_frequency_to_channel(conf->channel->center_freq) : 1;
+ 	unsigned int chan_idx = channel - 1;
+ 	u32 txpw = priv->channels[chan_idx].hw_value & 0xFF;
+ 	u32 chan = max2820_chan[chan_idx];
+@@ -87,7 +88,7 @@ static void max2820_rf_set_channel(struc
+ 	 * sa2400, for MAXIM we do this directly from BB */
+ 	rtl8180_write_phy(dev, 3, txpw);
+ 
+-	max2820_write_phy_antenna(dev, chan);
++	max2820_write_phy_antenna(dev, channel);
+ 	write_max2820(dev, 3, chan);
  }
  
- static void lbs_ethtool_get_strings(struct net_device *dev,
--					  u32 stringset,
--					  u8 * s)
-+				    uint32_t stringset, uint8_t *s)
+diff -up linux-2.6.25.noarch/drivers/net/wireless/rtl8180_sa2400.c.orig linux-2.6.25.noarch/drivers/net/wireless/rtl8180_sa2400.c
+--- linux-2.6.25.noarch/drivers/net/wireless/rtl8180_sa2400.c.orig	2008-05-29 11:04:14.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/rtl8180_sa2400.c	2008-05-29 13:37:03.000000000 -0400
+@@ -86,7 +86,7 @@ static void sa2400_rf_set_channel(struct
+ 
+ 	write_sa2400(dev, 7, txpw);
+ 
+-	sa2400_write_phy_antenna(dev, chan);
++	sa2400_write_phy_antenna(dev, channel);
+ 
+ 	write_sa2400(dev, 0, chan);
+ 	write_sa2400(dev, 1, 0xbb50);
+diff -up linux-2.6.25.noarch/net/mac80211/cfg.c.orig linux-2.6.25.noarch/net/mac80211/cfg.c
+--- linux-2.6.25.noarch/net/mac80211/cfg.c.orig	2008-05-29 13:36:47.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/cfg.c	2008-05-29 13:37:03.000000000 -0400
+@@ -672,7 +672,7 @@ static int ieee80211_add_station(struct 
+ 	if (params->vlan) {
+ 		sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
+ 
+-		if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN ||
++		if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN &&
+ 		    sdata->vif.type != IEEE80211_IF_TYPE_AP)
+ 			return -EINVAL;
+ 	} else
+@@ -760,7 +760,7 @@ static int ieee80211_change_station(stru
+ 	if (params->vlan && params->vlan != sta->sdata->dev) {
+ 		vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan);
+ 
+-		if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN ||
++		if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN &&
+ 		    vlansdata->vif.type != IEEE80211_IF_TYPE_AP) {
+ 			rcu_read_unlock();
+ 			return -EINVAL;
+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-05-29 13:36:47.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/main.c	2008-05-29 13:37:03.000000000 -0400
+@@ -1313,7 +1313,7 @@ static void ieee80211_handle_filtered_fr
+ 	/*
+ 	 * Clear the TX filter mask for this STA when sending the next
+ 	 * packet. If the STA went to power save mode, this will happen
+-	 * happen when it wakes up for the next time.
++	 * when it wakes up for the next time.
+ 	 */
+ 	sta->flags |= WLAN_STA_CLEAR_PS_FILT;
+ 
+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-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/mlme.c	2008-05-29 13:37:03.000000000 -0400
+@@ -1325,7 +1325,7 @@ static void ieee80211_sta_process_addba_
+ 
+ 	/* prepare reordering buffer */
+ 	tid_agg_rx->reorder_buf =
+-		kmalloc(buf_size * sizeof(struct sk_buf *), GFP_ATOMIC);
++		kmalloc(buf_size * sizeof(struct sk_buff *), GFP_ATOMIC);
+ 	if (!tid_agg_rx->reorder_buf) {
+ 		if (net_ratelimit())
+ 			printk(KERN_ERR "can not allocate reordering buffer "
+@@ -1334,7 +1334,7 @@ static void ieee80211_sta_process_addba_
+ 		goto end;
+ 	}
+ 	memset(tid_agg_rx->reorder_buf, 0,
+-		buf_size * sizeof(struct sk_buf *));
++		buf_size * sizeof(struct sk_buff *));
+ 
+ 	if (local->ops->ampdu_action)
+ 		ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START,
+@@ -1614,7 +1614,7 @@ void sta_addba_resp_timer_expired(unsign
+ 	 * only one argument, and both sta_info and TID are needed, so init
+ 	 * flow in sta_info_create gives the TID as data, while the timer_to_id
+ 	 * array gives the sta through container_of */
+-	u16 tid = *(int *)data;
++	u16 tid = *(u8 *)data;
+ 	struct sta_info *temp_sta = container_of((void *)data,
+ 		struct sta_info, timer_to_tid[tid]);
+ 
+@@ -1662,7 +1662,7 @@ timer_expired_exit:
+ void sta_rx_agg_session_timer_expired(unsigned long data)
  {
+ 	/* not an elegant detour, but there is no choice as the timer passes
+-	 * only one argument, and verious sta_info are needed here, so init
++	 * only one argument, and various sta_info are needed here, so init
+ 	 * flow in sta_info_create gives the TID as data, while the timer_to_id
+ 	 * array gives the sta through container_of */
+ 	u8 *ptid = (u8 *)data;
+@@ -2479,8 +2479,6 @@ static int ieee80211_sta_join_ibss(struc
+ 	ifsta->state = IEEE80211_IBSS_JOINED;
+ 	mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL);
+ 
+-	ieee80211_rx_bss_put(dev, bss);
+-
+ 	return res;
+ }
+ 
+@@ -3523,6 +3521,7 @@ static int ieee80211_sta_create_ibss(str
+ 	struct ieee80211_supported_band *sband;
+ 	u8 bssid[ETH_ALEN], *pos;
  	int i;
++	int ret;
+ 	DECLARE_MAC_BUF(mac);
  
-diff -up linux-2.6.25.noarch/drivers/net/wireless/orinoco_cs.c.orig linux-2.6.25.noarch/drivers/net/wireless/orinoco_cs.c
---- linux-2.6.25.noarch/drivers/net/wireless/orinoco_cs.c.orig	2008-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/orinoco_cs.c	2008-05-21 14:45:53.000000000 -0400
-@@ -461,6 +461,7 @@ static struct pcmcia_device_id orinoco_c
- 	PCMCIA_DEVICE_MANF_CARD(0x028a, 0x0673), /* Linksys WCF12 Wireless CompactFlash Card */
- 	PCMCIA_DEVICE_MANF_CARD(0x02aa, 0x0002), /* ASUS SpaceLink WL-100 */
- 	PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x0002), /* SpeedStream SS1021 Wireless Adapter */
-+	PCMCIA_DEVICE_MANF_CARD(0x02ac, 0x3021), /* SpeedStream Wireless Adapter */
- 	PCMCIA_DEVICE_MANF_CARD(0x14ea, 0xb001), /* PLANEX RoadLannerWave GW-NS11H */
- 	PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300), /* Airvast WN-100 */
- 	PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021), /* Adaptec Ultra Wireless ANW-8030 */
-diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/hw.c.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/hw.c
---- linux-2.6.25.noarch/drivers/net/wireless/ath5k/hw.c.orig	2008-05-21 11:36:23.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/hw.c	2008-05-21 14:45:53.000000000 -0400
-@@ -4119,6 +4119,7 @@ static int ath5k_hw_proc_5210_rx_status(
- 	rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
- 		AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP);
- 	rs->rs_status = 0;
-+	rs->rs_phyerr = 0;
+ #if 0
+@@ -3567,7 +3566,9 @@ static int ieee80211_sta_create_ibss(str
+ 		*pos++ = (u8) (rate / 5);
+ 	}
  
- 	/*
- 	 * Key table status
-@@ -4145,7 +4146,7 @@ static int ath5k_hw_proc_5210_rx_status(
- 		if (rx_status->rx_status_1 &
- 				AR5K_5210_RX_DESC_STATUS1_PHY_ERROR) {
- 			rs->rs_status |= AR5K_RXERR_PHY;
--			rs->rs_phyerr = AR5K_REG_MS(rx_status->rx_status_1,
-+			rs->rs_phyerr |= AR5K_REG_MS(rx_status->rx_status_1,
- 					   AR5K_5210_RX_DESC_STATUS1_PHY_ERROR);
- 		}
+-	return ieee80211_sta_join_ibss(dev, ifsta, bss);
++	ret = ieee80211_sta_join_ibss(dev, ifsta, bss);
++	ieee80211_rx_bss_put(dev, bss);
++	return ret;
+ }
  
-@@ -4193,6 +4194,7 @@ static int ath5k_hw_proc_5212_rx_status(
- 	rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
- 		AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP);
- 	rs->rs_status = 0;
-+	rs->rs_phyerr = 0;
  
- 	/*
- 	 * Key table status
-@@ -4215,7 +4217,7 @@ static int ath5k_hw_proc_5212_rx_status(
- 		if (rx_status->rx_status_1 &
- 				AR5K_5212_RX_DESC_STATUS1_PHY_ERROR) {
- 			rs->rs_status |= AR5K_RXERR_PHY;
--			rs->rs_phyerr = AR5K_REG_MS(rx_err->rx_error_1,
-+			rs->rs_phyerr |= AR5K_REG_MS(rx_err->rx_error_1,
- 					   AR5K_RX_DESC_ERROR1_PHY_ERROR_CODE);
- 		}
+@@ -3615,10 +3616,13 @@ static int ieee80211_sta_find_ibss(struc
+ 	    (bss = ieee80211_rx_bss_get(dev, bssid,
+ 					local->hw.conf.channel->center_freq,
+ 					ifsta->ssid, ifsta->ssid_len))) {
++		int ret;
+ 		printk(KERN_DEBUG "%s: Selected IBSS BSSID %s"
+ 		       " based on configured SSID\n",
+ 		       dev->name, print_mac(mac, bssid));
+-		return ieee80211_sta_join_ibss(dev, ifsta, bss);
++		ret = ieee80211_sta_join_ibss(dev, ifsta, bss);
++		ieee80211_rx_bss_put(dev, bss);
++		return ret;
+ 	}
+ #ifdef CONFIG_MAC80211_IBSS_DEBUG
+ 	printk(KERN_DEBUG "   did not try to join ibss\n");
+@@ -4095,18 +4099,17 @@ ieee80211_sta_scan_result(struct net_dev
+ 
+ 	memset(&iwe, 0, sizeof(iwe));
+ 	iwe.cmd = SIOCGIWFREQ;
+-	iwe.u.freq.m = bss->freq;
+-	iwe.u.freq.e = 6;
++	iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq);
++	iwe.u.freq.e = 0;
+ 	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
+ 					  IW_EV_FREQ_LEN);
+ 
+ 	memset(&iwe, 0, sizeof(iwe));
+ 	iwe.cmd = SIOCGIWFREQ;
+-	iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq);
+-	iwe.u.freq.e = 0;
++	iwe.u.freq.m = bss->freq;
++	iwe.u.freq.e = 6;
+ 	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
+ 					  IW_EV_FREQ_LEN);
+-
+ 	memset(&iwe, 0, sizeof(iwe));
+ 	iwe.cmd = IWEVQUAL;
+ 	iwe.u.qual.qual = bss->signal;
+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-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rx.c	2008-05-29 13:37:03.000000000 -0400
+@@ -1091,7 +1091,7 @@ ieee80211_data_to_8023(struct ieee80211_
+ 	u16 fc, hdrlen, ethertype;
+ 	u8 *payload;
+ 	u8 dst[ETH_ALEN];
+-	u8 src[ETH_ALEN];
++	u8 src[ETH_ALEN] __aligned(2);
+ 	struct sk_buff *skb = rx->skb;
+ 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ 	DECLARE_MAC_BUF(mac);
+@@ -1234,7 +1234,7 @@ ieee80211_data_to_8023(struct ieee80211_
+  */
+ static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx)
+ {
+-	static const u8 pae_group_addr[ETH_ALEN]
++	static const u8 pae_group_addr[ETH_ALEN] __aligned(2)
+ 		= { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 };
+ 	struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data;
+ 
+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-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/util.c	2008-05-29 13:37:03.000000000 -0400
+@@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_
+ 
+ /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
+ /* Ethernet-II snap header (RFC1042 for most EtherTypes) */
+-const unsigned char rfc1042_header[] =
++const unsigned char rfc1042_header[] __aligned(2) =
+ 	{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 };
+ 
+ /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */
+-const unsigned char bridge_tunnel_header[] =
++const unsigned char bridge_tunnel_header[] __aligned(2) =
+ 	{ 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 };
+ 
  
-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-05-21 11:36:23.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c	2008-05-21 14:45:53.000000000 -0400
-@@ -1787,6 +1787,8 @@ ath5k_tasklet_rx(unsigned long data)
- 
- 	spin_lock(&sc->rxbuflock);
- 	do {
-+		rxs.flag = 0;
-+
- 		if (unlikely(list_empty(&sc->rxbuf))) {
- 			ATH5K_WARN(sc, "empty rx buf pool\n");
- 			break;
-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-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/hostap/hostap_cs.c	2008-05-21 14:45:53.000000000 -0400
-@@ -833,6 +833,7 @@ static struct pcmcia_device_id hostap_cs
- 	PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x0001),
- 	PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300),
- /*	PCMCIA_DEVICE_MANF_CARD(0xc00f, 0x0000),    conflict with pcnet_cs */
-+	PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002),
- 	PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002),
- 	PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005),
- 	PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0010),
+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-05-29 13:36:48.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c	2008-05-29 13:37:03.000000000 -0400
+@@ -489,9 +489,14 @@ static int ieee80211_ioctl_giwap(struct 
+ 	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ 	if (sdata->vif.type == IEEE80211_IF_TYPE_STA ||
+ 	    sdata->vif.type == IEEE80211_IF_TYPE_IBSS) {
+-		ap_addr->sa_family = ARPHRD_ETHER;
+-		memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
+-		return 0;
++		if (sdata->u.sta.state == IEEE80211_ASSOCIATED) {
++			ap_addr->sa_family = ARPHRD_ETHER;
++			memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN);
++			return 0;
++		} else {
++			memset(&ap_addr->sa_data, 0, ETH_ALEN);
++			return 0;
++		}
+ 	} else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) {
+ 		ap_addr->sa_family = ARPHRD_ETHER;
+ 		memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN);




More information about the fedora-extras-commits mailing list