rpms/kernel/devel kernel.spec, 1.681, 1.682 linux-2.6-wireless-pending.patch, 1.51, 1.52 linux-2.6-wireless.patch, 1.39, 1.40
John W. Linville (linville)
fedora-extras-commits at redhat.com
Tue Jun 10 19:09:11 UTC 2008
Author: linville
Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv30519
Modified Files:
kernel.spec linux-2.6-wireless-pending.patch
linux-2.6-wireless.patch
Log Message:
Upstream wireless fixes from 2008-06-09
Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.681
retrieving revision 1.682
diff -u -r1.681 -r1.682
--- kernel.spec 10 Jun 2008 16:44:15 -0000 1.681
+++ kernel.spec 10 Jun 2008 19:08:27 -0000 1.682
@@ -1129,7 +1129,7 @@
ApplyPatch linux-2.6-selinux-new-proc-checks.patch
# wireless patches headed for 2.6.26
-#ApplyPatch linux-2.6-wireless.patch
+ApplyPatch linux-2.6-wireless.patch
# wireless patches headed for 2.6.27
ApplyPatch linux-2.6-wireless-pending.patch
@@ -1774,6 +1774,10 @@
%kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL}.xen -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.xen.conf %{with_xen} xen
%changelog
+* Tue Jun 10 2008 John W. Linville <linville at redhat.com>
+- Upstream wireless fixes from 2008-06-09
+ (http://marc.info/?l=linux-kernel&m=121304710726632&w=2)
+
* Tue Jun 10 2008 Dave Jones <davej at redhat.com>
- 2.6.26-rc5-git4
linux-2.6-wireless-pending.patch:
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.51 -r 1.52 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless-pending.patch,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- linux-2.6-wireless-pending.patch 3 Jun 2008 21:08:46 -0000 1.51
+++ linux-2.6-wireless-pending.patch 10 Jun 2008 19:08:27 -0000 1.52
@@ -1,23 +1,3 @@
-commit 30935069be7faad5323553d1ce6292a33846c2c7
-Author: Dan Williams <dcbw at redhat.com>
-Date: Mon Jun 2 17:51:23 2008 -0400
-
- ipw2200: queue direct scans
-
- When another scan is in progress, a direct scan gets dropped on the
- floor. However, that direct scan is usually the scan that's really
- needed by userspace, and gets stomped on by all the broadcast scans the
- ipw2200 driver issues internally. Make sure the direct scan happens
- eventually, and as a bonus ensure that the passive scan worker is
- cleaned up when appropriate.
-
- The change of request_passive_scan form a struct work to struct
- delayed_work is only to make the set_wx_scan() code a bit simpler, it's
- still only used with a delay of 0 to match previous behavior.
-
- Signed-off-by: Dan Williams <dcbw at redhat.com>
- Signed-off-by: John W. Linville <linville at tuxdriver.com>
-
commit 78cf07472f0ede8394bacc4bc02354505080cfe1
Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
Date: Mon Jun 2 09:25:05 2008 +0200
@@ -3773,8 +3753,8 @@
Signed-off-by: John W. Linville <linville at tuxdriver.com>
diff -up linux-2.6.25.noarch/drivers/net/Kconfig.orig linux-2.6.25.noarch/drivers/net/Kconfig
---- linux-2.6.25.noarch/drivers/net/Kconfig.orig 2008-06-03 16:17:35.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/Kconfig 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/Kconfig.orig 2008-06-10 13:13:57.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/Kconfig 2008-06-10 13:17:26.000000000 -0400
@@ -2283,6 +2283,19 @@ config GELIC_WIRELESS
the driver automatically distinguishes the models, you can
safely enable this option even if you have a wireless-less model.
@@ -3796,8 +3776,8 @@
tristate "Gianfar Ethernet"
depends on FSL_SOC
diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig 2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.c 2008-06-10 13:17:26.000000000 -0400
@@ -110,7 +110,7 @@ static void gelic_card_get_ether_port_st
void gelic_card_up(struct gelic_card *card)
{
@@ -3844,8 +3824,8 @@
return card;
diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig 2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_net.h 2008-06-10 13:17:26.000000000 -0400
@@ -298,7 +298,7 @@ struct gelic_card {
wait_queue_head_t waitq;
@@ -3856,8 +3836,8 @@
u64 ether_port_status;
diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c
---- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig 2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.c 2008-06-10 13:17:26.000000000 -0400
@@ -45,7 +45,8 @@
#include "ps3_gelic_wireless.h"
@@ -4401,7 +4381,7 @@
destroy_workqueue(wl->event_queue);
diff -up linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h.orig linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h
--- linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h.orig 2008-04-16 22:49:44.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h 2008-06-03 16:45:59.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/ps3_gelic_wireless.h 2008-06-10 13:17:26.000000000 -0400
@@ -241,7 +241,7 @@ enum gelic_wl_assoc_state {
#define GELIC_WEP_KEYS 4
struct gelic_wl_info {
@@ -4431,8 +4411,8 @@
struct iw_statistics iwstat;
};
diff -up linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig linux-2.6.25.noarch/drivers/net/wireless/adm8211.c
---- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.c 2008-06-10 13:17:26.000000000 -0400
@@ -306,11 +306,10 @@ static int adm8211_get_tx_stats(struct i
struct ieee80211_tx_queue_stats *stats)
{
@@ -4581,8 +4561,8 @@
return 0;
diff -up linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig linux-2.6.25.noarch/drivers/net/wireless/adm8211.h
---- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/adm8211.h.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/adm8211.h 2008-06-10 13:17:26.000000000 -0400
@@ -443,7 +443,6 @@ struct adm8211_rx_ring_info {
struct adm8211_tx_ring_info {
struct sk_buff *skb;
@@ -4592,8 +4572,8 @@
};
diff -up linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig linux-2.6.25.noarch/drivers/net/wireless/airo.c
---- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/airo.c 2008-06-10 13:17:26.000000000 -0400
@@ -1148,7 +1148,6 @@ static u8 airo_dbm_to_pct (tdsRssiEntry
static void airo_networks_free(struct airo_info *ai);
@@ -4762,8 +4742,8 @@
}
buffer = (u16*)skb_put (skb, len + hdrlen);
diff -up linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig linux-2.6.25.noarch/drivers/net/wireless/arlan.h
---- linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan.h.orig 2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan.h 2008-06-10 13:17:26.000000000 -0400
@@ -330,7 +330,6 @@ struct TxParam
#define TX_RING_SIZE 2
/* Information that need to be kept for each board. */
@@ -4773,8 +4753,8 @@
struct arlan_shmem * conf;
diff -up linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c
---- linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c.orig 2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/arlan-main.c 2008-06-10 13:17:26.000000000 -0400
@@ -125,7 +125,7 @@ static inline int arlan_drop_tx(struct n
{
struct arlan_private *priv = netdev_priv(dev);
@@ -4859,8 +4839,8 @@
diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c
---- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.c 2008-06-10 13:17:26.000000000 -0400
@@ -167,8 +167,7 @@ static struct pci_driver ath5k_pci_drive
/*
* Prototypes - MAC 802.11 stack related functions
@@ -5150,8 +5130,8 @@
sc->bbuf->skb = NULL;
else
diff -up linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h
---- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ath5k/base.h 2008-06-10 13:17:26.000000000 -0400
@@ -60,7 +60,6 @@ struct ath5k_buf {
dma_addr_t daddr; /* physical addr of desc */
struct sk_buff *skb; /* skbuff for buf */
@@ -5171,8 +5151,8 @@
struct ieee80211_hw *hw; /* IEEE 802.11 common */
struct ieee80211_supported_band sbands[IEEE80211_NUM_BANDS];
diff -up linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig linux-2.6.25.noarch/drivers/net/wireless/atmel.c
---- linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/atmel.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/atmel.c 2008-06-10 13:17:26.000000000 -0400
@@ -433,7 +433,6 @@ struct atmel_private {
struct net_device *dev;
struct device *sys_dev;
@@ -5352,8 +5332,8 @@
dev->do_ioctl = atmel_ioctl;
dev->irq = irq;
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/b43.h 2008-06-10 13:17:26.000000000 -0400
@@ -410,8 +410,7 @@ enum {
#define B43_IRQ_TIMEOUT 0x80000000
@@ -5437,8 +5417,8 @@
#define INT_TO_Q52(i) ((i) << 2)
/* Convert a Q5.2 value to an integer (precision loss!) */
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig 2008-06-03 16:45:19.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c 2008-06-03 16:45:32.000000000 -0400
+--- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c.orig 2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.c 2008-06-10 13:17:26.000000000 -0400
@@ -270,24 +270,22 @@ static int restart_write_file(struct b43
return err;
}
@@ -5564,8 +5544,8 @@
#undef add_dyn_dbg
}
diff -up linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h.orig linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h
---- linux-2.6.25.noarch/drivers/net/wireless/b43/debugfs.h.orig 2008-06-03 16:45:19.000000000 -0400
[...2360 lines suppressed...]
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_algo.c 2008-06-10 13:17:43.000000000 -0400
@@ -237,8 +237,7 @@ static void rate_control_pid_sample(stru
}
@@ -51210,8 +50849,8 @@
#ifdef CONFIG_MAC80211_DEBUGFS
rate_control_pid_event_tx_rate(
diff -up linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c
---- linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid_debugfs.c 2008-06-10 13:17:43.000000000 -0400
@@ -39,11 +39,11 @@ static void rate_control_pid_event(struc
}
@@ -51238,8 +50877,8 @@
case RC_PID_EVENT_TYPE_RATE_CHANGE:
p += snprintf(pb + p, length - p, "rate_change %d %d",
diff -up linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig linux-2.6.25.noarch/net/mac80211/rc80211_pid.h
---- linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rc80211_pid.h.orig 2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rc80211_pid.h 2008-06-10 13:17:43.000000000 -0400
@@ -61,7 +61,7 @@ enum rc_pid_event_type {
union rc_pid_event_data {
/* RC_PID_EVENT_TX_STATUS */
@@ -51259,8 +50898,8 @@
void rate_control_pid_event_rate_change(struct rc_pid_event_buffer *buf,
int index, int rate);
diff -up linux-2.6.25.noarch/net/mac80211/rx.c.orig linux-2.6.25.noarch/net/mac80211/rx.c
---- linux-2.6.25.noarch/net/mac80211/rx.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/rx.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/rx.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/rx.c 2008-06-10 13:17:43.000000000 -0400
@@ -77,6 +77,134 @@ static inline int should_drop_frame(stru
return 0;
}
@@ -51732,8 +51371,8 @@
rcu_read_unlock();
}
diff -up linux-2.6.25.noarch/net/mac80211/sta_info.c.orig linux-2.6.25.noarch/net/mac80211/sta_info.c
---- linux-2.6.25.noarch/net/mac80211/sta_info.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.c 2008-06-10 13:17:43.000000000 -0400
@@ -202,14 +202,12 @@ void sta_info_destroy(struct sta_info *s
dev_kfree_skb_any(skb);
@@ -51820,8 +51459,8 @@
diff -up linux-2.6.25.noarch/net/mac80211/sta_info.h.orig linux-2.6.25.noarch/net/mac80211/sta_info.h
---- linux-2.6.25.noarch/net/mac80211/sta_info.h.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/sta_info.h 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/sta_info.h.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/sta_info.h 2008-06-10 13:17:43.000000000 -0400
@@ -32,7 +32,7 @@
* @WLAN_STA_WDS: Station is one of our WDS peers.
* @WLAN_STA_PSPOLL: Station has just PS-polled us.
@@ -51981,8 +51620,8 @@
/* Maximum number of concurrently registered stations */
#define MAX_STA_COUNT 2007
diff -up linux-2.6.25.noarch/net/mac80211/tkip.c.orig linux-2.6.25.noarch/net/mac80211/tkip.c
---- linux-2.6.25.noarch/net/mac80211/tkip.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.c 2008-06-10 13:17:43.000000000 -0400
@@ -6,25 +6,23 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
@@ -52363,8 +52002,8 @@
-
-
diff -up linux-2.6.25.noarch/net/mac80211/tkip.h.orig linux-2.6.25.noarch/net/mac80211/tkip.h
---- linux-2.6.25.noarch/net/mac80211/tkip.h.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tkip.h 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tkip.h.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tkip.h 2008-06-10 13:17:43.000000000 -0400
@@ -13,12 +13,8 @@
#include <linux/crypto.h>
#include "key.h"
@@ -52381,8 +52020,8 @@
struct ieee80211_key *key,
u8 *pos, size_t payload_len, u8 *ta);
diff -up linux-2.6.25.noarch/net/mac80211/tx.c.orig linux-2.6.25.noarch/net/mac80211/tx.c
---- linux-2.6.25.noarch/net/mac80211/tx.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/tx.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/tx.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/tx.c 2008-06-10 13:17:43.000000000 -0400
@@ -91,11 +91,12 @@ static u16 ieee80211_duration(struct iee
int next_frag_len)
{
@@ -53781,8 +53420,8 @@
return skb;
diff -up linux-2.6.25.noarch/net/mac80211/util.c.orig linux-2.6.25.noarch/net/mac80211/util.c
---- linux-2.6.25.noarch/net/mac80211/util.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/util.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/util.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/util.c 2008-06-10 13:17:43.000000000 -0400
@@ -258,7 +258,7 @@ EXPORT_SYMBOL(ieee80211_generic_frame_du
__le16 ieee80211_rts_duration(struct ieee80211_hw *hw,
@@ -53913,8 +53552,8 @@
}
EXPORT_SYMBOL(ieee80211_wake_queues);
diff -up linux-2.6.25.noarch/net/mac80211/wep.c.orig linux-2.6.25.noarch/net/mac80211/wep.c
---- linux-2.6.25.noarch/net/mac80211/wep.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.c 2008-06-10 13:17:43.000000000 -0400
@@ -93,13 +93,9 @@ static u8 *ieee80211_wep_add_iv(struct i
fc |= IEEE80211_FCTL_PROTECTED;
hdr->frame_control = cpu_to_le16(fc);
@@ -53960,8 +53599,8 @@
if (wep_encrypt_skb(tx, tx->skb) < 0) {
diff -up linux-2.6.25.noarch/net/mac80211/wep.h.orig linux-2.6.25.noarch/net/mac80211/wep.h
---- linux-2.6.25.noarch/net/mac80211/wep.h.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wep.h 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wep.h.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wep.h 2008-06-10 13:17:43.000000000 -0400
@@ -26,7 +26,7 @@ int ieee80211_wep_encrypt(struct ieee802
struct ieee80211_key *key);
int ieee80211_wep_decrypt(struct ieee80211_local *local, struct sk_buff *skb,
@@ -53972,8 +53611,8 @@
ieee80211_rx_result
ieee80211_crypto_wep_decrypt(struct ieee80211_rx_data *rx);
diff -up linux-2.6.25.noarch/net/mac80211/wext.c.orig linux-2.6.25.noarch/net/mac80211/wext.c
---- linux-2.6.25.noarch/net/mac80211/wext.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wext.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wext.c.orig 2008-06-10 13:15:51.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c 2008-06-10 13:17:43.000000000 -0400
@@ -169,14 +169,26 @@ static int ieee80211_ioctl_giwrange(stru
range->num_encoding_sizes = 2;
range->max_encoding_tokens = NUM_DEFAULT_KEYS;
@@ -54007,7 +53646,7 @@
range->avg_qual.updated = local->wstats_flags;
range->enc_capa = IW_ENC_CAPA_WPA | IW_ENC_CAPA_WPA2 |
-@@ -1000,8 +1012,8 @@ static struct iw_statistics *ieee80211_g
+@@ -1007,8 +1019,8 @@ static struct iw_statistics *ieee80211_g
wstats->qual.noise = 0;
wstats->qual.updated = IW_QUAL_ALL_INVALID;
} else {
@@ -54019,8 +53658,8 @@
wstats->qual.updated = local->wstats_flags;
}
diff -up linux-2.6.25.noarch/net/mac80211/wme.c.orig linux-2.6.25.noarch/net/mac80211/wme.c
---- linux-2.6.25.noarch/net/mac80211/wme.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.c 2008-06-10 13:17:43.000000000 -0400
@@ -19,16 +19,22 @@
#include "wme.h"
@@ -54395,8 +54034,8 @@
if (requeue)
ieee80211_requeue(local, agg_queue);
diff -up linux-2.6.25.noarch/net/mac80211/wme.h.orig linux-2.6.25.noarch/net/mac80211/wme.h
---- linux-2.6.25.noarch/net/mac80211/wme.h.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wme.h 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wme.h.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wme.h 2008-06-10 13:17:43.000000000 -0400
@@ -31,7 +31,7 @@ static inline int WLAN_FC_IS_QOS_DATA(u1
return (fc & 0x8C) == 0x88;
}
@@ -54407,8 +54046,8 @@
int ieee80211_qdisc_installed(struct net_device *dev);
int ieee80211_ht_agg_queue_add(struct ieee80211_local *local,
diff -up linux-2.6.25.noarch/net/mac80211/wpa.c.orig linux-2.6.25.noarch/net/mac80211/wpa.c
---- linux-2.6.25.noarch/net/mac80211/wpa.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/mac80211/wpa.c 2008-06-03 16:45:59.000000000 -0400
+--- linux-2.6.25.noarch/net/mac80211/wpa.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wpa.c 2008-06-10 13:17:43.000000000 -0400
@@ -79,6 +79,7 @@ ieee80211_tx_h_michael_mic_add(struct ie
struct sk_buff *skb = tx->skb;
int authenticator;
@@ -54654,8 +54293,8 @@
}
}
diff -up linux-2.6.25.noarch/net/wireless/core.c.orig linux-2.6.25.noarch/net/wireless/core.c
---- linux-2.6.25.noarch/net/wireless/core.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/core.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/core.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/core.c 2008-06-10 13:17:43.000000000 -0400
@@ -143,8 +143,11 @@ void cfg80211_put_dev(struct cfg80211_re
int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
char *newname)
@@ -54719,8 +54358,8 @@
/* exported functions */
diff -up linux-2.6.25.noarch/net/wireless/radiotap.c.orig linux-2.6.25.noarch/net/wireless/radiotap.c
---- linux-2.6.25.noarch/net/wireless/radiotap.c.orig 2008-06-03 16:45:20.000000000 -0400
-+++ linux-2.6.25.noarch/net/wireless/radiotap.c 2008-06-03 16:45:33.000000000 -0400
+--- linux-2.6.25.noarch/net/wireless/radiotap.c.orig 2008-04-16 22:49:44.000000000 -0400
++++ linux-2.6.25.noarch/net/wireless/radiotap.c 2008-06-10 13:17:43.000000000 -0400
@@ -59,23 +59,21 @@ int ieee80211_radiotap_iterator_init(
return -EINVAL;
linux-2.6-wireless.patch:
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless.patch,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- linux-2.6-wireless.patch 3 Jun 2008 21:08:46 -0000 1.39
+++ linux-2.6-wireless.patch 10 Jun 2008 19:08:27 -0000 1.40
@@ -1,270 +1,717 @@
-commit c2b25f240163c9d3a7a391747f996da9e18a067d
-Author: Kirill A. Shutemov <kirill at shutemov.name>
-Date: Tue Jun 3 13:48:08 2008 -0400
+commit b6b16196b064bbff83e8161359f8b73465d4aa36
+Author: Marcin Slusarz <marcin.slusarz at gmail.com>
+Date: Sun Jun 8 13:13:06 2008 +0200
+
+ iwlwifi: fix oops in iwl3945_led_brightness_set
+
+ fix race between:
+ ieee80211_open->ieee80211_led_radio->led_trigger_event->led_set_brightness->iwl3945_led_brightness_set
+ (which assumes that "led->priv" is not NULL)
+ and
+ iwl3945_pci_probe->iwl3945_setup_deferred_work->(...)->iwl3945_bg_alive_start->iwl3945_alive_start->iwl3945_led_register->iwl3945_led_register_led
+ which sets priv field in struct iwl3945_led
+ after
+ led->led_dev.brightness_set = iwl3945_led_brightness_set;
+ (...)
+ led_classdev_register(device, &led->led_dev);
+
+ http://kerneloops.org/guilty.php?guilty=iwl3945_led_brightness_set&version=2.6.25-release&start=1671168&end=1703935&class=oops
+
+ Signed-off-by: Marcin Slusarz <marcin.slusarz at gmail.com>
+ Cc: Zhu Yi <yi.zhu at intel.com>
+ Cc: Reinette Chatre <reinette.chatre at intel.com>
+ Cc: Tomas Winkler <tomas.winkler at intel.com>
+ Cc: linux-wireless at vger.kernel.org
+ Cc: ipw3945-devel at lists.sourceforge.net
+ Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 585c5434f0e02ff0ffc567ec223af61e2d8e2e88
+Author: Adrian Bunk <bunk at kernel.org>
+Date: Thu Jun 5 21:29:49 2008 +0300
- wireless.h: improve userland include-ability
+ include/linux/ssb/ssb_driver_gige.h typo fix
- This patch partially reverts commit 2218228392080f0ca2fc2974604e79f57b12c436
- ("Make linux/wireless.h be able to compile") while still making it
- easier to include wireless.h in userland apps.
+ This patch fixes a typo in the name of a config variable.
- Signed-off-by: Kirill A. Shutemov <kirill at shutemov.name>
+ Reported-by: Robert P. J. Day <rpjday at crashcourse.ca>
+ Signed-off-by: Adrian Bunk <bunk at kernel.org>
+ Reviewed-by: Michael Buesch <mb at bu3sch.de>
+ Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit be038b376465953c358d675cb38a611898a49dc2
+Author: Assaf Krauss <assaf.krauss at intel.com>
+Date: Thu Jun 5 19:55:21 2008 +0300
+
+ mac80211: Checking IBSS support while changing channel in ad-hoc mode
+
+ This patch adds a check to the set_channel flow. When attempting to change
+ the channel while in IBSS mode, and the new channel does not support IBSS
+ mode, the flow return with an error value with no consequences on the
+ mac80211 and driver state.
+
+ Signed-off-by: Assaf Krauss <assaf.krauss at intel.com>
+ Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach at intel.com>
+ Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit 9aec7e67335224ff499ea8c53028c8483432194e
-Author: Felix Homann <fexpop at onlinehome.de>
-Date: Thu May 29 00:36:45 2008 -0700
+commit 872ba53395b2a8be08c3ea2d39e225e5b4a8cb40
+Author: Dan Williams <dcbw at redhat.com>
+Date: Wed Jun 4 13:59:34 2008 -0400
- USB ID for Philips CPWUA054/00 Wireless USB Adapter 11g
+ mac80211: decrease IBSS creation latency
- Enable the Philips CPWUA054/00 in p54usb.
+ Sufficient scans (at least 2 or 3) should have been done within 7
+ seconds to find an existing IBSS to join. This should improve IBSS
+ creation latency; and since IBSS merging is still in effect, shouldn't
+ have detrimental effects on eventual IBSS convergence.
- Cc: Jeff Garzik <jeff at garzik.org>
- Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+ Signed-off-by: Dan Williams <dcbw at redhat.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit 1867a00ea8b4e70f413c3d2eca5d6236cacf1138
+commit d005b1d042a1d5dcd8d898f26d8d9bb03f865284
Author: Michael Buesch <mb at bu3sch.de>
-Date: Mon Jun 2 16:15:23 2008 +0200
+Date: Thu Jun 5 16:55:10 2008 +0200
- ssb: Fix context assertion in ssb_pcicore_dev_irqvecs_enable
+ zd1211rw: Fix data padding for QoS
- This fixes a context assertion in ssb that makes b44 print
- out warnings on resume.
-
- This fixes the following kernel oops:
- http://www.kerneloops.org/oops.php?number=12732
- http://www.kerneloops.org/oops.php?number=11410
+ This patch fixes a data alignment issue in the zd1211rw driver.
+ The IEEE80211_STYPE_QOS_DATA bit should be used as a bitwise test
+ to test for the presence of the 2 byte QoS control field.
Signed-off-by: Michael Buesch <mb at bu3sch.de>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit f67d115e318e0b4f596e61f89b84c44691dc7538
-Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
-Date: Fri May 30 14:53:22 2008 +0200
-
- libertas: fix command size for CMD_802_11_SUBSCRIBE_EVENT
+commit ad81b2f97d42e13ef78bb3798e046cd5f0492980
+Author: Assaf Krauss <assaf.krauss at intel.com>
+Date: Wed Jun 4 20:27:59 2008 +0300
+
+ mac80211: Fixing slow IBSS rejoin
+
+ This patch fixes the issue of slow reconnection to an IBSS cell after
+ disconnection from it. Now the interface's bssid is reset upon ifdown.
+
+ ieee80211_sta_find_ibss:
+ if (found && memcmp(ifsta->bssid, bssid, ETH_ALEN) != 0 &&
+ (bss = ieee80211_rx_bss_get(dev, bssid,
+ local->hw.conf.channel->center_freq,
+ ifsta->ssid, ifsta->ssid_len)))
- The size was two small by two bytes.
+ Note:
+ In general disconnection is still not handled properly in mac80211
- Signed-off-by: Holger Schurig
+ Signed-off-by: Assaf Krauss <assaf.krauss at intel.com>
+ Signed-off-by: Tomas Winkler <tomas.winkler at intel.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit ff9c7e3ef7fbcf7bf145f6d48054934fd7852141
-Author: Dan Williams <dcbw at redhat.com>
-Date: Thu May 29 14:38:28 2008 -0400
+commit a01f5450401f081f07a866612121e780e0730cfd
+Author: Holger Schurig <hs4233 at mail.mn-solutions.de>
+Date: Wed Jun 4 11:10:40 2008 +0200
- ipw2200: expire and use oldest BSS on adhoc create
+ libertas: fix sleep confirmation
- If there are no networks on the free list, expire the oldest one when
- creating a new adhoc network. Because ipw2200 and the ieee80211 stack
- don't actually cull old networks and place them back on the free list
- unless they are needed for new probe responses, over time the free list
- would become empty and creating an adhoc network would fail due to the !
- list_empty(...) check.
+ This fixes an issus that made "iwconfig eth1 power on" non-working.
+ When we get a "PS sleep" event, we have to confirm this to the firmware.
+ The confirm happens with a command, but this command is special: the
+ firmware won't send us a response. if_cs_host_to_card() is setting
+ priv->dnld_sent anyway, so this variable stayed at DNLD_DATA_SENT and
+ was never cleared back.
+
+ Now I put the special knowledge that the CMD_802_11_PS_MODE with
+ CMD_SUBCMD_SLEEP_CONFIRMED doesn't need to need a response by directly
+ clearing the dnld_sent state in lbs_send_confirmsleep().
- Signed-off-by: Dan Williams <dcbw at redhat.com>
+ Signed-off-by: Holger Schurig <hs4233 at mail.mn-solutions.de>
+ Acked-by: Dan Williams <dcbw at redhat.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit ef81633f881c715793a57a1d7aeccc72e465d035
-Author: Andrew Morton <akpm at linux-foundation.org>
-Date: Wed May 28 12:40:39 2008 -0700
+commit 507b06d0622480f8026d49a94f86068bb0fd6ed6
+Author: Dan Williams <dcbw at redhat.com>
+Date: Tue Jun 3 23:39:55 2008 -0400
- airo warning fix
-
- WARNING: space prohibited between function name and open parenthesis '('
- #22: FILE: drivers/net/wireless/airo.c:2907:
- + while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
-
- total: 0 errors, 1 warnings, 8 lines checked
-
- ./patches/wireless-airo-waitbusy-wont-delay.patch has style problems, please review. If any of these errors
- are false positives report them to the maintainer, see
- CHECKPATCH in MAINTAINERS.
+ mac80211: send association event on IBSS create
- Please run checkpatch prior to sending patches
+ Otherwise userspace has no idea the IBSS creation succeeded.
- Cc: Dan Williams <dcbw at redhat.com>
- Cc: Roel Kluin <roel.kluin at gmail.com>
- Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+ Signed-off-by: Dan Williams <dcbw at redhat.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-commit 8679a8d704ab8c1083abb13b0de49df22f110e64
-Author: Michael Buesch <mb at bu3sch.de>
-Date: Thu May 22 17:06:36 2008 +0200
+commit ea177305b321a4127e448b88de20d5792682ace1
+Author: Dan Williams <dcbw at redhat.com>
+Date: Mon Jun 2 17:51:23 2008 -0400
- b43legacy: Fix controller restart crash
+ ipw2200: queue direct scans
- This fixes a kernel crash on rmmod, in the case where the controller
- was restarted before doing the rmmod.
+ When another scan is in progress, a direct scan gets dropped on the
+ floor. However, that direct scan is usually the scan that's really
+ needed by userspace, and gets stomped on by all the broadcast scans the
+ ipw2200 driver issues internally. Make sure the direct scan happens
+ eventually, and as a bonus ensure that the passive scan worker is
+ cleaned up when appropriate.
+
+ The change of request_passive_scan form a struct work to struct
+ delayed_work is only to make the set_wx_scan() code a bit simpler, it's
+ still only used with a delay of 0 to match previous behavior.
- Signed-off-by: Michael Buesch <mb at bu3sch.de>
+ Signed-off-by: Dan Williams <dcbw at redhat.com>
Signed-off-by: John W. Linville <linville at tuxdriver.com>
-diff -up linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig linux-2.6.25.noarch/drivers/net/wireless/airo.c
---- linux-2.6.25.noarch/drivers/net/wireless/airo.c.orig 2008-06-03 16:21:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/airo.c 2008-06-03 16:22:29.000000000 -0400
-@@ -2905,7 +2905,7 @@ EXPORT_SYMBOL(init_airo_card);
-
- static int waitbusy (struct airo_info *ai) {
- int delay = 0;
-- while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
-+ while ((IN4500(ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) {
- udelay (10);
- if ((++delay % 20) == 0)
- OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c
---- linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c.orig 2008-06-03 16:21:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/b43legacy/main.c 2008-06-03 16:22:29.000000000 -0400
-@@ -3039,7 +3039,6 @@ static void b43legacy_set_pretbtt(struct
- /* Locking: wl->mutex */
- static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev)
- {
-- struct b43legacy_wl *wl = dev->wl;
- struct b43legacy_phy *phy = &dev->phy;
- u32 macctl;
-
-@@ -3054,12 +3053,6 @@ static void b43legacy_wireless_core_exit
- macctl |= B43legacy_MACCTL_PSM_JMP0;
- b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl);
-
-- mutex_unlock(&wl->mutex);
-- /* Must unlock as it would otherwise deadlock. No races here.
-- * Cancel possibly pending workqueues. */
-- cancel_work_sync(&dev->restart_work);
-- mutex_lock(&wl->mutex);
--
- b43legacy_leds_exit(dev);
- b43legacy_rng_exit(dev->wl);
- b43legacy_pio_free(dev);
-@@ -3486,6 +3479,8 @@ static void b43legacy_chip_reset(struct
+diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c
+--- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c 2008-06-10 13:15:51.000000000 -0400
+@@ -1753,6 +1753,8 @@ static int ipw_radio_kill_sw(struct ipw_
+
+ if (priv->workqueue) {
+ cancel_delayed_work(&priv->request_scan);
++ cancel_delayed_work(&priv->request_direct_scan);
++ cancel_delayed_work(&priv->request_passive_scan);
+ cancel_delayed_work(&priv->scan_event);
}
+ queue_work(priv->workqueue, &priv->down);
+@@ -2005,6 +2007,8 @@ static void ipw_irq_tasklet(struct ipw_p
+ wake_up_interruptible(&priv->wait_command_queue);
+ priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING);
+ cancel_delayed_work(&priv->request_scan);
++ cancel_delayed_work(&priv->request_direct_scan);
++ cancel_delayed_work(&priv->request_passive_scan);
+ cancel_delayed_work(&priv->scan_event);
+ schedule_work(&priv->link_down);
+ queue_delayed_work(priv->workqueue, &priv->rf_kill, 2 * HZ);
+@@ -4712,6 +4716,12 @@ static void ipw_rx_notification(struct i
+ priv->status &= ~STATUS_SCAN_FORCED;
+ #endif /* CONFIG_IPW2200_MONITOR */
+
++ /* Do queued direct scans first */
++ if (priv->status & STATUS_DIRECT_SCAN_PENDING) {
++ queue_delayed_work(priv->workqueue,
++ &priv->request_direct_scan, 0);
++ }
++
+ if (!(priv->status & (STATUS_ASSOCIATED |
+ STATUS_ASSOCIATING |
+ STATUS_ROAMING |
+@@ -6267,7 +6277,7 @@ static void ipw_add_scan_channels(struct
}
- out:
-+ if (err)
-+ wl->current_dev = NULL; /* Failed to init the dev. */
- mutex_unlock(&wl->mutex);
- if (err)
- b43legacyerr(wl, "Controller restart FAILED\n");
-@@ -3618,9 +3613,11 @@ static void b43legacy_one_core_detach(st
- struct b43legacy_wldev *wldev;
- struct b43legacy_wl *wl;
+ }
-+ /* Do not cancel ieee80211-workqueue based work here.
-+ * See comment in b43legacy_remove(). */
+-static int ipw_request_scan_helper(struct ipw_priv *priv, int type)
++static int ipw_request_scan_helper(struct ipw_priv *priv, int type, int direct)
+ {
+ struct ipw_scan_request_ext scan;
+ int err = 0, scan_type;
+@@ -6278,22 +6288,31 @@ static int ipw_request_scan_helper(struc
+
+ mutex_lock(&priv->mutex);
+
++ if (direct && (priv->direct_scan_ssid_len == 0)) {
++ IPW_DEBUG_HC("Direct scan requested but no SSID to scan for\n");
++ priv->status &= ~STATUS_DIRECT_SCAN_PENDING;
++ goto done;
++ }
+
- wldev = ssb_get_drvdata(dev);
- wl = wldev->wl;
-- cancel_work_sync(&wldev->restart_work);
- b43legacy_debugfs_remove_device(wldev);
- b43legacy_wireless_core_detach(wldev);
- list_del(&wldev->list);
-@@ -3789,6 +3786,10 @@ static void b43legacy_remove(struct ssb_
- struct b43legacy_wl *wl = ssb_get_devtypedata(dev);
- struct b43legacy_wldev *wldev = ssb_get_drvdata(dev);
-
-+ /* We must cancel any work here before unregistering from ieee80211,
-+ * as the ieee80211 unreg will destroy the workqueue. */
-+ cancel_work_sync(&wldev->restart_work);
+ if (priv->status & STATUS_SCANNING) {
+- IPW_DEBUG_HC("Concurrent scan requested. Ignoring.\n");
+- priv->status |= STATUS_SCAN_PENDING;
++ IPW_DEBUG_HC("Concurrent scan requested. Queuing.\n");
++ priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++ STATUS_SCAN_PENDING;
+ goto done;
+ }
+
+ if (!(priv->status & STATUS_SCAN_FORCED) &&
+ priv->status & STATUS_SCAN_ABORTING) {
+ IPW_DEBUG_HC("Scan request while abort pending. Queuing.\n");
+- priv->status |= STATUS_SCAN_PENDING;
++ priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++ STATUS_SCAN_PENDING;
+ goto done;
+ }
+
+ if (priv->status & STATUS_RF_KILL_MASK) {
+- IPW_DEBUG_HC("Aborting scan due to RF Kill activation\n");
+- priv->status |= STATUS_SCAN_PENDING;
++ IPW_DEBUG_HC("Queuing scan due to RF Kill activation\n");
++ priv->status |= direct ? STATUS_DIRECT_SCAN_PENDING :
++ STATUS_SCAN_PENDING;
+ goto done;
+ }
+
+@@ -6321,6 +6340,7 @@ static int ipw_request_scan_helper(struc
+ cpu_to_le16(20);
+
+ scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120);
++ scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20);
+
+ #ifdef CONFIG_IPW2200_MONITOR
+ if (priv->ieee->iw_mode == IW_MODE_MONITOR) {
+@@ -6360,13 +6380,23 @@ static int ipw_request_scan_helper(struc
+ cpu_to_le16(2000);
+ } else {
+ #endif /* CONFIG_IPW2200_MONITOR */
+- /* If we are roaming, then make this a directed scan for the
+- * current network. Otherwise, ensure that every other scan
+- * is a fast channel hop scan */
+- if ((priv->status & STATUS_ROAMING)
+- || (!(priv->status & STATUS_ASSOCIATED)
+- && (priv->config & CFG_STATIC_ESSID)
+- && (le32_to_cpu(scan.full_scan_index) % 2))) {
++ /* Honor direct scans first, otherwise if we are roaming make
++ * this a direct scan for the current network. Finally,
++ * ensure that every other scan is a fast channel hop scan */
++ if (direct) {
++ err = ipw_send_ssid(priv, priv->direct_scan_ssid,
++ priv->direct_scan_ssid_len);
++ if (err) {
++ IPW_DEBUG_HC("Attempt to send SSID command "
++ "failed\n");
++ goto done;
++ }
+
- B43legacy_WARN_ON(!wl);
- if (wl->current_dev == wldev)
- ieee80211_unregister_hw(wl->hw);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c
---- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c.orig 2008-06-03 16:17:36.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.c 2008-06-03 16:22:29.000000000 -0400
-@@ -7558,8 +7558,31 @@ static int ipw_associate(void *data)
- priv->ieee->iw_mode == IW_MODE_ADHOC &&
- priv->config & CFG_ADHOC_CREATE &&
- priv->config & CFG_STATIC_ESSID &&
-- priv->config & CFG_STATIC_CHANNEL &&
-- !list_empty(&priv->ieee->network_free_list)) {
-+ priv->config & CFG_STATIC_CHANNEL) {
-+ /* Use oldest network if the free list is empty */
-+ if (list_empty(&priv->ieee->network_free_list)) {
-+ struct ieee80211_network *oldest = NULL;
-+ struct ieee80211_network *target;
-+ DECLARE_MAC_BUF(mac);
++ scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN;
++ } else if ((priv->status & STATUS_ROAMING)
++ || (!(priv->status & STATUS_ASSOCIATED)
++ && (priv->config & CFG_STATIC_ESSID)
++ && (le32_to_cpu(scan.full_scan_index) % 2))) {
+ err = ipw_send_ssid(priv, priv->essid, priv->essid_len);
+ if (err) {
+ IPW_DEBUG_HC("Attempt to send SSID command "
+@@ -6391,7 +6421,12 @@ send_request:
+ }
+
+ priv->status |= STATUS_SCANNING;
+- priv->status &= ~STATUS_SCAN_PENDING;
++ if (direct) {
++ priv->status &= ~STATUS_DIRECT_SCAN_PENDING;
++ priv->direct_scan_ssid_len = 0;
++ } else
++ priv->status &= ~STATUS_SCAN_PENDING;
+
-+ list_for_each_entry(target, &priv->ieee->network_list, list) {
-+ if ((oldest == NULL) ||
-+ (target->last_scanned < oldest->last_scanned))
-+ oldest = target;
-+ }
+ queue_delayed_work(priv->workqueue, &priv->scan_check,
+ IPW_SCAN_CHECK_WATCHDOG);
+ done:
+@@ -6402,15 +6437,22 @@ done:
+ static void ipw_request_passive_scan(struct work_struct *work)
+ {
+ struct ipw_priv *priv =
+- container_of(work, struct ipw_priv, request_passive_scan);
+- ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE);
++ container_of(work, struct ipw_priv, request_passive_scan.work);
++ ipw_request_scan_helper(priv, IW_SCAN_TYPE_PASSIVE, 0);
+ }
+
+ static void ipw_request_scan(struct work_struct *work)
+ {
+ struct ipw_priv *priv =
+ container_of(work, struct ipw_priv, request_scan.work);
+- ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE);
++ ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 0);
++}
+
-+ /* If there are no more slots, expire the oldest */
-+ list_del(&oldest->list);
-+ target = oldest;
-+ IPW_DEBUG_ASSOC("Expired '%s' (%s) from "
-+ "network list.\n",
-+ escape_essid(target->ssid,
-+ target->ssid_len),
-+ print_mac(mac, target->bssid));
-+ list_add_tail(&target->list,
-+ &priv->ieee->network_free_list);
-+ }
++static void ipw_request_direct_scan(struct work_struct *work)
++{
++ struct ipw_priv *priv =
++ container_of(work, struct ipw_priv, request_direct_scan.work);
++ ipw_request_scan_helper(priv, IW_SCAN_TYPE_ACTIVE, 1);
+ }
+
+ static void ipw_bg_abort_scan(struct work_struct *work)
+@@ -9477,99 +9519,38 @@ static int ipw_wx_get_retry(struct net_d
+ return 0;
+ }
+
+-static int ipw_request_direct_scan(struct ipw_priv *priv, char *essid,
+- int essid_len)
+-{
+- struct ipw_scan_request_ext scan;
+- int err = 0, scan_type;
+-
+- if (!(priv->status & STATUS_INIT) ||
+- (priv->status & STATUS_EXIT_PENDING))
+- return 0;
+-
+- mutex_lock(&priv->mutex);
+-
+- if (priv->status & STATUS_RF_KILL_MASK) {
+- IPW_DEBUG_HC("Aborting scan due to RF kill activation\n");
+- priv->status |= STATUS_SCAN_PENDING;
+- goto done;
+- }
+-
+- IPW_DEBUG_HC("starting request direct scan!\n");
+-
+- if (priv->status & (STATUS_SCANNING | STATUS_SCAN_ABORTING)) {
+- /* We should not sleep here; otherwise we will block most
+- * of the system (for instance, we hold rtnl_lock when we
+- * get here).
+- */
+- err = -EAGAIN;
+- goto done;
+- }
+- memset(&scan, 0, sizeof(scan));
+-
+- if (priv->config & CFG_SPEED_SCAN)
+- scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] =
+- cpu_to_le16(30);
+- else
+- scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_SCAN] =
+- cpu_to_le16(20);
+-
+- scan.dwell_time[IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN] =
+- cpu_to_le16(20);
+- scan.dwell_time[IPW_SCAN_PASSIVE_FULL_DWELL_SCAN] = cpu_to_le16(120);
+- scan.dwell_time[IPW_SCAN_ACTIVE_DIRECT_SCAN] = cpu_to_le16(20);
+-
+- scan.full_scan_index = cpu_to_le32(ieee80211_get_scans(priv->ieee));
+-
+- err = ipw_send_ssid(priv, essid, essid_len);
+- if (err) {
+- IPW_DEBUG_HC("Attempt to send SSID command failed\n");
+- goto done;
+- }
+- scan_type = IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN;
+-
+- ipw_add_scan_channels(priv, &scan, scan_type);
+-
+- err = ipw_send_scan_request_ext(priv, &scan);
+- if (err) {
+- IPW_DEBUG_HC("Sending scan command failed: %08X\n", err);
+- goto done;
+- }
+-
+- priv->status |= STATUS_SCANNING;
+-
+- done:
+- mutex_unlock(&priv->mutex);
+- return err;
+-}
+-
+ static int ipw_wx_set_scan(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+ {
+ struct ipw_priv *priv = ieee80211_priv(dev);
+ struct iw_scan_req *req = (struct iw_scan_req *)extra;
++ struct delayed_work *work = NULL;
+
+ mutex_lock(&priv->mutex);
+
- element = priv->ieee->network_free_list.next;
- network = list_entry(element, struct ieee80211_network, list);
- ipw_adhoc_create(priv, network);
-diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c
---- linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c.orig 2008-06-03 16:17:37.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/libertas/debugfs.c 2008-06-03 16:22:29.000000000 -0400
-@@ -312,8 +312,8 @@ static ssize_t lbs_threshold_write(uint1
- if (tlv_type != TLV_TYPE_BCNMISS)
- tlv->freq = freq;
-
-- /* The command header, the event mask, and the one TLV */
-- events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv));
-+ /* The command header, the action, the event mask, and one TLV */
-+ events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv));
-
- ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events);
-
-diff -up linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c.orig linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c
---- linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c.orig 2008-06-03 16:17:37.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/net/wireless/p54/p54usb.c 2008-06-03 16:22:29.000000000 -0400
-@@ -49,6 +49,7 @@ static struct usb_device_id p54u_table[]
- {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */
-
- /* Version 2 devices (3887) */
-+ {USB_DEVICE(0x0471, 0x1230)}, /* Philips CPWUA054/00 */
- {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */
- {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */
- {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */
-diff -up linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c.orig linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c
---- linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c.orig 2008-06-03 16:17:38.000000000 -0400
-+++ linux-2.6.25.noarch/drivers/ssb/driver_pcicore.c 2008-06-03 16:22:29.000000000 -0400
-@@ -537,12 +537,12 @@ int ssb_pcicore_dev_irqvecs_enable(struc
- int err = 0;
- u32 tmp;
-
-- might_sleep();
--
- if (!pdev)
- goto out;
- bus = pdev->bus;
+ priv->user_requested_scan = 1;
+- mutex_unlock(&priv->mutex);
-+ might_sleep_if(pdev->id.coreid != SSB_DEV_PCI);
+ if (wrqu->data.length == sizeof(struct iw_scan_req)) {
+ if (wrqu->data.flags & IW_SCAN_THIS_ESSID) {
+- ipw_request_direct_scan(priv, req->essid,
+- req->essid_len);
+- return 0;
+- }
+- if (req->scan_type == IW_SCAN_TYPE_PASSIVE) {
+- queue_work(priv->workqueue,
+- &priv->request_passive_scan);
+- return 0;
++ int len = min((int)req->essid_len,
++ (int)sizeof(priv->direct_scan_ssid));
++ memcpy(priv->direct_scan_ssid, req->essid, len);
++ priv->direct_scan_ssid_len = len;
++ work = &priv->request_direct_scan;
++ } else if (req->scan_type == IW_SCAN_TYPE_PASSIVE) {
++ work = &priv->request_passive_scan;
+ }
++ } else {
++ /* Normal active broadcast scan */
++ work = &priv->request_scan;
+ }
+
++ mutex_unlock(&priv->mutex);
+
- /* Enable interrupts for this device. */
- if (bus->host_pci &&
- ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) {
-diff -up linux-2.6.25.noarch/include/linux/wireless.h.orig linux-2.6.25.noarch/include/linux/wireless.h
---- linux-2.6.25.noarch/include/linux/wireless.h.orig 2008-06-03 16:21:29.000000000 -0400
-+++ linux-2.6.25.noarch/include/linux/wireless.h 2008-06-03 16:22:29.000000000 -0400
-@@ -70,8 +70,14 @@
- /***************************** INCLUDES *****************************/
+ IPW_DEBUG_WX("Start scan\n");
+
+- queue_delayed_work(priv->workqueue, &priv->request_scan, 0);
++ queue_delayed_work(priv->workqueue, work, 0);
- #include <linux/types.h> /* for __u* and __s* typedefs */
+ return 0;
+ }
+@@ -10731,6 +10712,8 @@ static void ipw_link_up(struct ipw_priv
+ }
+
+ cancel_delayed_work(&priv->request_scan);
++ cancel_delayed_work(&priv->request_direct_scan);
++ cancel_delayed_work(&priv->request_passive_scan);
+ cancel_delayed_work(&priv->scan_event);
+ ipw_reset_stats(priv);
+ /* Ensure the rate is updated immediately */
+@@ -10761,6 +10744,8 @@ static void ipw_link_down(struct ipw_pri
+
+ /* Cancel any queued work ... */
+ cancel_delayed_work(&priv->request_scan);
++ cancel_delayed_work(&priv->request_direct_scan);
++ cancel_delayed_work(&priv->request_passive_scan);
+ cancel_delayed_work(&priv->adhoc_check);
+ cancel_delayed_work(&priv->gather_stats);
+
+@@ -10800,8 +10785,9 @@ static int __devinit ipw_setup_deferred_
+ INIT_WORK(&priv->up, ipw_bg_up);
+ INIT_WORK(&priv->down, ipw_bg_down);
+ INIT_DELAYED_WORK(&priv->request_scan, ipw_request_scan);
++ INIT_DELAYED_WORK(&priv->request_direct_scan, ipw_request_direct_scan);
++ INIT_DELAYED_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
+ INIT_DELAYED_WORK(&priv->scan_event, ipw_scan_event);
+- INIT_WORK(&priv->request_passive_scan, ipw_request_passive_scan);
+ INIT_DELAYED_WORK(&priv->gather_stats, ipw_bg_gather_stats);
+ INIT_WORK(&priv->abort_scan, ipw_bg_abort_scan);
+ INIT_WORK(&priv->roam, ipw_bg_roam);
+@@ -11835,6 +11821,8 @@ static void __devexit ipw_pci_remove(str
+ cancel_delayed_work(&priv->adhoc_check);
+ cancel_delayed_work(&priv->gather_stats);
+ cancel_delayed_work(&priv->request_scan);
++ cancel_delayed_work(&priv->request_direct_scan);
++ cancel_delayed_work(&priv->request_passive_scan);
+ cancel_delayed_work(&priv->scan_event);
+ cancel_delayed_work(&priv->rf_kill);
+ cancel_delayed_work(&priv->scan_check);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h.orig linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h
+--- linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/ipw2200.h 2008-06-10 13:15:51.000000000 -0400
+@@ -1037,6 +1037,7 @@ struct ipw_cmd { /* XXX */
+ #define STATUS_DISASSOC_PENDING (1<<12)
+ #define STATUS_STATE_PENDING (1<<13)
+
++#define STATUS_DIRECT_SCAN_PENDING (1<<19)
+ #define STATUS_SCAN_PENDING (1<<20)
+ #define STATUS_SCANNING (1<<21)
+ #define STATUS_SCAN_ABORTING (1<<22)
+@@ -1292,6 +1293,8 @@ struct ipw_priv {
+ struct iw_public_data wireless_data;
+
+ int user_requested_scan;
++ u8 direct_scan_ssid[IW_ESSID_MAX_SIZE];
++ u8 direct_scan_ssid_len;
+
+ struct workqueue_struct *workqueue;
+
+@@ -1301,8 +1304,9 @@ struct ipw_priv {
+ struct work_struct system_config;
+ struct work_struct rx_replenish;
+ struct delayed_work request_scan;
++ struct delayed_work request_direct_scan;
++ struct delayed_work request_passive_scan;
+ struct delayed_work scan_event;
+- struct work_struct request_passive_scan;
+ struct work_struct adapter_restart;
+ struct delayed_work rf_kill;
+ struct work_struct up;
+diff -up linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c.orig linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c
+--- linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/iwlwifi/iwl-3945-led.c 2008-06-10 13:15:51.000000000 -0400
+@@ -229,14 +229,15 @@ static int iwl3945_led_register_led(stru
+ led->led_dev.brightness_set = iwl3945_led_brightness_set;
+ led->led_dev.default_trigger = trigger;
+
++ led->priv = priv;
++ led->type = type;
++
+ ret = led_classdev_register(device, &led->led_dev);
+ if (ret) {
+ IWL_ERROR("Error: failed to register led handler.\n");
+ return ret;
+ }
+
+- led->priv = priv;
+- led->type = type;
+ led->registered = 1;
+
+ if (set_led && led->led_on)
+diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c
+--- linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/libertas/cmd.c 2008-06-10 13:15:51.000000000 -0400
+@@ -1842,6 +1842,9 @@ static void lbs_send_confirmsleep(struct
+
+ spin_lock_irqsave(&priv->driver_lock, flags);
+
++ /* We don't get a response on the sleep-confirmation */
++ priv->dnld_sent = DNLD_RES_RECEIVED;
++
+ /* If nothing to do, go back to sleep (?) */
+ if (!__kfifo_len(priv->event_fifo) && !priv->resp_len[priv->resp_idx])
+ priv->psstate = PS_STATE_SLEEP;
+@@ -1904,12 +1907,12 @@ void lbs_ps_confirm_sleep(struct lbs_pri
+
+ lbs_deb_enter(LBS_DEB_HOST);
+
++ spin_lock_irqsave(&priv->driver_lock, flags);
+ if (priv->dnld_sent) {
+ allowed = 0;
+ lbs_deb_host("dnld_sent was set\n");
+ }
+
+- spin_lock_irqsave(&priv->driver_lock, flags);
+ /* In-progress command? */
+ if (priv->cur_cmd) {
+ allowed = 0;
+diff -up linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c.orig linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c
+--- linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/libertas/main.c 2008-06-10 13:15:51.000000000 -0400
+@@ -732,8 +732,8 @@ static int lbs_thread(void *data)
+ lbs_deb_thread("4: currenttxskb %p, dnld_sent %d\n",
+ priv->currenttxskb, priv->dnld_sent);
+
+- spin_lock_irq(&priv->driver_lock);
+ /* Process any pending command response */
++ spin_lock_irq(&priv->driver_lock);
+ resp_idx = priv->resp_idx;
+ if (priv->resp_len[resp_idx]) {
+ spin_unlock_irq(&priv->driver_lock);
+diff -up linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c
+--- linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig 2008-06-10 13:13:48.000000000 -0400
++++ linux-2.6.25.noarch/drivers/net/wireless/zd1211rw/zd_mac.c 2008-06-10 13:15:51.000000000 -0400
+@@ -719,7 +719,7 @@ int zd_mac_rx(struct ieee80211_hw *hw, c
+ fc = le16_to_cpu(*((__le16 *) buffer));
+
+ is_qos = ((fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) &&
+- ((fc & IEEE80211_FCTL_STYPE) == IEEE80211_STYPE_QOS_DATA);
++ (fc & IEEE80211_STYPE_QOS_DATA);
+ is_4addr = (fc & (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) ==
+ (IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS);
+ need_padding = is_qos ^ is_4addr;
+diff -up linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h.orig linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h
+--- linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h.orig 2008-06-10 13:13:54.000000000 -0400
++++ linux-2.6.25.noarch/include/linux/ssb/ssb_driver_gige.h 2008-06-10 13:15:51.000000000 -0400
+@@ -100,7 +100,7 @@ extern char * nvram_get(const char *name
+ /* Get the device MAC address */
+ static inline void ssb_gige_get_macaddr(struct pci_dev *pdev, u8 *macaddr)
+ {
+-#ifdef CONFIG_BCM947XX
++#ifdef CONFIG_BCM47XX
+ char *res = nvram_get("et0macaddr");
+ if (res)
+ memcpy(macaddr, res, 6);
+diff -up linux-2.6.25.noarch/net/mac80211/ieee80211_i.h.orig linux-2.6.25.noarch/net/mac80211/ieee80211_i.h
+--- linux-2.6.25.noarch/net/mac80211/ieee80211_i.h.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/ieee80211_i.h 2008-06-10 13:15:51.000000000 -0400
+@@ -899,7 +899,7 @@ extern const struct iw_handler_def ieee8
+
+
+ /* ieee80211_ioctl.c */
+-int ieee80211_set_freq(struct ieee80211_local *local, int freq);
++int ieee80211_set_freq(struct net_device *dev, int freq);
+ /* ieee80211_sta.c */
+ void ieee80211_sta_timer(unsigned long data);
+ void ieee80211_sta_work(struct work_struct *work);
+diff -up linux-2.6.25.noarch/net/mac80211/main.c.orig linux-2.6.25.noarch/net/mac80211/main.c
+--- linux-2.6.25.noarch/net/mac80211/main.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/main.c 2008-06-10 13:15:51.000000000 -0400
+@@ -511,6 +511,7 @@ static int ieee80211_stop(struct net_dev
+ case IEEE80211_IF_TYPE_STA:
+ case IEEE80211_IF_TYPE_IBSS:
+ sdata->u.sta.state = IEEE80211_DISABLED;
++ memset(sdata->u.sta.bssid, 0, ETH_ALEN);
+ del_timer_sync(&sdata->u.sta.timer);
+ /*
+ * When we get here, the interface is marked down.
+diff -up linux-2.6.25.noarch/net/mac80211/mlme.c.orig linux-2.6.25.noarch/net/mac80211/mlme.c
+--- linux-2.6.25.noarch/net/mac80211/mlme.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/mlme.c 2008-06-10 13:15:51.000000000 -0400
+@@ -44,7 +44,7 @@
+ #define IEEE80211_RETRY_AUTH_INTERVAL (1 * HZ)
+ #define IEEE80211_SCAN_INTERVAL (2 * HZ)
+ #define IEEE80211_SCAN_INTERVAL_SLOW (15 * HZ)
+-#define IEEE80211_IBSS_JOIN_TIMEOUT (20 * HZ)
++#define IEEE80211_IBSS_JOIN_TIMEOUT (7 * HZ)
+
+ #define IEEE80211_PROBE_DELAY (HZ / 33)
+ #define IEEE80211_CHANNEL_TIME (HZ / 33)
+@@ -2336,6 +2336,7 @@ static int ieee80211_sta_join_ibss(struc
+ u8 *pos;
+ struct ieee80211_sub_if_data *sdata;
+ struct ieee80211_supported_band *sband;
++ union iwreq_data wrqu;
+
+ sband = local->hw.wiphy->bands[local->hw.conf.channel->band];
+
+@@ -2358,13 +2359,10 @@ static int ieee80211_sta_join_ibss(struc
+ sdata->drop_unencrypted = bss->capability &
+ WLAN_CAPABILITY_PRIVACY ? 1 : 0;
+
+- res = ieee80211_set_freq(local, bss->freq);
++ res = ieee80211_set_freq(dev, bss->freq);
+
+- if (local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS) {
+- printk(KERN_DEBUG "%s: IBSS not allowed on frequency "
+- "%d MHz\n", dev->name, local->oper_channel->center_freq);
+- return -1;
+- }
++ if (res)
++ return res;
+
+ /* Set beacon template */
+ skb = dev_alloc_skb(local->hw.extra_tx_headroom + 400);
+@@ -2479,6 +2477,10 @@ static int ieee80211_sta_join_ibss(struc
+ ifsta->state = IEEE80211_IBSS_JOINED;
+ mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL);
+
++ memset(&wrqu, 0, sizeof(wrqu));
++ memcpy(wrqu.ap_addr.sa_data, bss->bssid, ETH_ALEN);
++ wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
+
-+/* This header is used in user-space, therefore need to be sanitised
-+ * for that purpose. Those includes are usually not compatible with glibc.
-+ * To know which includes to use in user-space, check iwlib.h. */
-+#ifdef __KERNEL__
- #include <linux/socket.h> /* for "struct sockaddr" et al */
- #include <linux/if.h> /* for IFNAMSIZ and co... */
-+#endif /* __KERNEL__ */
+ return res;
+ }
+
+@@ -3486,7 +3488,7 @@ static int ieee80211_sta_config_auth(str
+ spin_unlock_bh(&local->sta_bss_lock);
+
+ if (selected) {
+- ieee80211_set_freq(local, selected->freq);
++ ieee80211_set_freq(dev, selected->freq);
+ if (!(ifsta->flags & IEEE80211_STA_SSID_SET))
+ ieee80211_sta_set_ssid(dev, selected->ssid,
+ selected->ssid_len);
+diff -up linux-2.6.25.noarch/net/mac80211/wext.c.orig linux-2.6.25.noarch/net/mac80211/wext.c
+--- linux-2.6.25.noarch/net/mac80211/wext.c.orig 2008-06-10 13:13:55.000000000 -0400
++++ linux-2.6.25.noarch/net/mac80211/wext.c 2008-06-10 13:15:51.000000000 -0400
+@@ -290,14 +290,22 @@ static int ieee80211_ioctl_giwmode(struc
+ return 0;
+ }
+
+-int ieee80211_set_freq(struct ieee80211_local *local, int freqMHz)
++int ieee80211_set_freq(struct net_device *dev, int freqMHz)
+ {
+ int ret = -EINVAL;
+ struct ieee80211_channel *chan;
++ struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
++ struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+
+ chan = ieee80211_get_channel(local->hw.wiphy, freqMHz);
+
+ if (chan && !(chan->flags & IEEE80211_CHAN_DISABLED)) {
++ if (sdata->vif.type == IEEE80211_IF_TYPE_IBSS &&
++ chan->flags & IEEE80211_CHAN_NO_IBSS) {
++ printk(KERN_DEBUG "%s: IBSS not allowed on frequency "
++ "%d MHz\n", dev->name, chan->center_freq);
++ return ret;
++ }
+ local->oper_channel = chan;
- /***************************** VERSION *****************************/
- /*
+ if (local->sta_sw_scanning || local->sta_hw_scanning)
+@@ -315,7 +323,6 @@ static int ieee80211_ioctl_siwfreq(struc
+ struct iw_request_info *info,
+ struct iw_freq *freq, char *extra)
+ {
+- struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+ struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+
+ if (sdata->vif.type == IEEE80211_IF_TYPE_STA)
+@@ -329,14 +336,14 @@ static int ieee80211_ioctl_siwfreq(struc
+ IEEE80211_STA_AUTO_CHANNEL_SEL;
+ return 0;
+ } else
+- return ieee80211_set_freq(local,
++ return ieee80211_set_freq(dev,
+ ieee80211_channel_to_frequency(freq->m));
+ } else {
+ int i, div = 1000000;
+ for (i = 0; i < freq->e; i++)
+ div /= 10;
+ if (div > 0)
+- return ieee80211_set_freq(local, freq->m / div);
++ return ieee80211_set_freq(dev, freq->m / div);
+ else
+ return -EINVAL;
+ }
More information about the fedora-extras-commits
mailing list