rpms/kernel/devel linux-2.6-wireless.patch, NONE, 1.1 git-iwlwifi.patch, 1.4, 1.5 git-wireless-dev.patch, 1.7, 1.8 kernel-2.6.spec, 1.3120, 1.3121

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Tue May 1 00:44:07 UTC 2007


Author: linville

Update of /cvs/dist/rpms/kernel/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv4994

Modified Files:
	git-iwlwifi.patch git-wireless-dev.patch kernel-2.6.spec 
Added Files:
	linux-2.6-wireless.patch 
Log Message:
wireless-dev and iwlwifi updates

linux-2.6-wireless.patch:
 CREDITS                                    |    6 
 Documentation/feature-removal-schedule.txt |   11 
 MAINTAINERS                                |   21 
 drivers/net/Makefile                       |    2 
 drivers/net/wireless/Kconfig               |  120 -
 drivers/net/wireless/bcm43xx/Kconfig       |    3 
 drivers/net/wireless/hostap/Kconfig        |    3 
 drivers/net/wireless/zd1211rw/Kconfig      |    3 
 include/linux/Kbuild                       |    1 
 include/linux/netdevice.h                  |    4 
 include/linux/nl80211.h                    |   38 
 include/net/cfg80211.h                     |   40 
 include/net/iw_handler.h                   |   21 
 include/net/wext.h                         |   24 
 include/net/wireless.h                     |  139 +
 net/Kconfig                                |   11 
 net/Makefile                               |    2 
 net/core/Makefile                          |    1 
 net/core/dev.c                             |   34 
 net/core/rtnetlink.c                       |   31 
 net/core/wireless.c                        | 2371 -----------------------------
 net/ieee80211/Kconfig                      |    3 
 net/wireless/Kconfig                       |   16 
 net/wireless/Makefile                      |    4 
 net/wireless/core.c                        |  224 ++
 net/wireless/core.h                        |   49 
 net/wireless/sysfs.c                       |   80 
 net/wireless/sysfs.h                       |    9 
 net/wireless/wext.c                        | 1509 ++++++++++++++++++
 29 files changed, 2234 insertions(+), 2546 deletions(-)

--- NEW FILE linux-2.6-wireless.patch ---
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.21.noarch/include/net/wireless.h	2007-04-30 19:41:49.000000000 -0400
@@ -0,0 +1,139 @@
+#ifndef __NET_WIRELESS_H
+#define __NET_WIRELESS_H
+
+/*
+ * 802.11 device management
+ *
+ * Copyright 2007	Johannes Berg <johannes at sipsolutions.net>
+ */
+
+#include <linux/netdevice.h>
+#include <linux/debugfs.h>
+#include <linux/list.h>
+#include <net/cfg80211.h>
+
+/**
+ * struct wiphy - wireless hardware description
+ * @idx: the wiphy index assigned to this item
+ * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
+ */
+struct wiphy {
+	/* assign these fields before you register the wiphy */
+
+	/* permanent MAC address */
+	u8 perm_addr[ETH_ALEN];
+
+	/* If multiple wiphys are registered and you're handed e.g.
+	 * a regular netdev with assigned ieee80211_ptr, you won't
+	 * know whether it points to a wiphy your driver has registered
+	 * or not. Assign this to something global to your driver to
+	 * help determine whether you own this wiphy or not. */
+	void *privid;
+
+	/* fields below are read-only, assigned by cfg80211 */
+
+	/* the item in /sys/class/ieee80211/ points to this,
+	 * you need use set_wiphy_dev() (see below) */
+	struct device dev;
+
+	/* dir in debugfs: ieee80211/<wiphyname> */
+	struct dentry *debugfsdir;
+
+	char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
+};
+
+/** struct wireless_dev - wireless per-netdev state
+ *
+ * This structure must be allocated by the driver/stack
+ * that uses the ieee80211_ptr field in struct net_device
+ * (this is intentional so it can be allocated along with
+ * the netdev.)
+ *
+ * @wiphy: pointer to hardware description
+ */
+struct wireless_dev {
+	struct wiphy *wiphy;
+
+	/* private to the generic wireless code */
+	struct list_head list;
+	struct net_device *netdev;
+};
+
+/**
+ * wiphy_priv - return priv from wiphy
+ */
+static inline void *wiphy_priv(struct wiphy *wiphy)
+{
+	BUG_ON(!wiphy);
+	return &wiphy->priv;
+}
+
+/**
+ * set_wiphy_dev - set device pointer for wiphy
+ */
+static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev)
+{
+	wiphy->dev.parent = dev;
+}
+
+/**
+ * wiphy_dev - get wiphy dev pointer
+ */
+static inline struct device *wiphy_dev(struct wiphy *wiphy)
+{
+	return wiphy->dev.parent;
+}
+
+/**
+ * wiphy_name - get wiphy name
+ */
+static inline char *wiphy_name(struct wiphy *wiphy)
+{
+	return wiphy->dev.bus_id;
+}
+
+/**
+ * wdev_priv - return wiphy priv from wireless_dev
+ */
+static inline void *wdev_priv(struct wireless_dev *wdev)
+{
+	BUG_ON(!wdev);
+	return wiphy_priv(wdev->wiphy);
+}
+
+/**
+ * wiphy_new - create a new wiphy for use with cfg80211
+ *
+ * create a new wiphy and associate the given operations with it.
+ * @sizeof_priv bytes are allocated for private use.
+ *
+ * the returned pointer must be assigned to each netdev's
+ * ieee80211_ptr for proper operation.
+ */
+struct wiphy *wiphy_new(struct cfg80211_ops *ops, int sizeof_priv);
+
+/**
+ * wiphy_register - register a wiphy with cfg80211
+ *
+ * register the given wiphy
+ *
+ * Returns a non-negative wiphy index or a negative error code.
+ */
+extern int wiphy_register(struct wiphy *wiphy);
+
+/**
+ * wiphy_unregister - deregister a wiphy from cfg80211
+ *
+ * unregister a device with the given priv pointer.
+ * After this call, no more requests can be made with this priv
+ * pointer, but the call may sleep to wait for an outstanding
+ * request that is being handled.
+ */
+extern void wiphy_unregister(struct wiphy *wiphy);
+
+/**
+ * wiphy_free - free wiphy
+ */
+extern void wiphy_free(struct wiphy *wiphy);
+
+#endif /* __NET_WIRELESS_H */
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.21.noarch/include/net/cfg80211.h	2007-04-30 19:44:47.000000000 -0400
@@ -0,0 +1,40 @@
+#ifndef __NET_CFG80211_H
+#define __NET_CFG80211_H
+
+#include <linux/netlink.h>
+#include <linux/skbuff.h>
+#include <net/genetlink.h>
+
+/*
+ * 802.11 configuration in-kernel interface
+ *
+ * Copyright 2006 Johannes Berg <johannes at sipsolutions.net>
+ */
+
+/* from net/wireless.h */
+struct wiphy;
+
+/**
+ * struct cfg80211_ops - backend description for wireless configuration
+ *
+ * This struct is registered by fullmac card drivers and/or wireless stacks
+ * in order to handle configuration requests on their interfaces.
+ *
+ * All callbacks except where otherwise noted should return 0
+ * on success or a negative error code.
+ *
+ * All operations are currently invoked under rtnl for consistency with the
+ * wireless extensions but this is subject to reevaluation as soon as this
+ * code is used more widely and we have a first user without wext.
+ *
+ * @add_virtual_intf: create a new virtual interface with the given name
+ *
+ * @del_virtual_intf: remove the virtual interface determined by ifindex.
+ */
+struct cfg80211_ops {
+	int	(*add_virtual_intf)(struct wiphy *wiphy, char *name,
+				    unsigned int type);
+	int	(*del_virtual_intf)(struct wiphy *wiphy, int ifindex);
+};
+
+#endif /* __NET_CFG80211_H */
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.21.noarch/include/net/wext.h	2007-04-30 19:45:37.000000000 -0400
@@ -0,0 +1,24 @@
+#ifndef __NET_WEXT_H
+#define __NET_WEXT_H
+
+/*
+ * wireless extensions interface to the core code
+ */
+
+#ifdef CONFIG_WIRELESS_EXT
+extern int wext_proc_init(void);
+extern int wext_handle_ioctl(struct ifreq *ifr, unsigned int cmd,
+			     void __user *arg);
[...4833 lines suppressed...]
+
+/*------------------------------------------------------------------*/
+/*
+ * Standard Wireless Handler : get Spy List
+ */
+int iw_handler_get_spy(struct net_device *	dev,
+		       struct iw_request_info *	info,
+		       union iwreq_data *	wrqu,
+		       char *			extra)
+{
+	struct iw_spy_data *	spydata = get_spydata(dev);
+	struct sockaddr *	address = (struct sockaddr *) extra;
+	int			i;
+
+	/* Make sure driver is not buggy or using the old API */
+	if (!spydata)
+		return -EOPNOTSUPP;
+
+	wrqu->data.length = spydata->spy_number;
+
+	/* Copy addresses. */
+	for (i = 0; i < spydata->spy_number; i++) 	{
+		memcpy(address[i].sa_data, spydata->spy_address[i], ETH_ALEN);
+		address[i].sa_family = AF_UNIX;
+	}
+	/* Copy stats to the user buffer (just after). */
+	if (spydata->spy_number > 0)
+		memcpy(extra  + (sizeof(struct sockaddr) *spydata->spy_number),
+		       spydata->spy_stat,
+		       sizeof(struct iw_quality) * spydata->spy_number);
+	/* Reset updated flags. */
+	for (i = 0; i < spydata->spy_number; i++)
+		spydata->spy_stat[i].updated &= ~IW_QUAL_ALL_UPDATED;
+	return 0;
+}
+EXPORT_SYMBOL(iw_handler_get_spy);
+
+/*------------------------------------------------------------------*/
+/*
+ * Standard Wireless Handler : set spy threshold
+ */
+int iw_handler_set_thrspy(struct net_device *	dev,
+			  struct iw_request_info *info,
+			  union iwreq_data *	wrqu,
+			  char *		extra)
+{
+	struct iw_spy_data *	spydata = get_spydata(dev);
+	struct iw_thrspy *	threshold = (struct iw_thrspy *) extra;
+
+	/* Make sure driver is not buggy or using the old API */
+	if (!spydata)
+		return -EOPNOTSUPP;
+
+	/* Just do it */
+	memcpy(&(spydata->spy_thr_low), &(threshold->low),
+	       2 * sizeof(struct iw_quality));
+
+	/* Clear flag */
+	memset(spydata->spy_thr_under, '\0', sizeof(spydata->spy_thr_under));
+
+	return 0;
+}
+EXPORT_SYMBOL(iw_handler_set_thrspy);
+
+/*------------------------------------------------------------------*/
+/*
+ * Standard Wireless Handler : get spy threshold
+ */
+int iw_handler_get_thrspy(struct net_device *	dev,
+			  struct iw_request_info *info,
+			  union iwreq_data *	wrqu,
+			  char *		extra)
+{
+	struct iw_spy_data *	spydata = get_spydata(dev);
+	struct iw_thrspy *	threshold = (struct iw_thrspy *) extra;
+
+	/* Make sure driver is not buggy or using the old API */
+	if (!spydata)
+		return -EOPNOTSUPP;
+
+	/* Just do it */
+	memcpy(&(threshold->low), &(spydata->spy_thr_low),
+	       2 * sizeof(struct iw_quality));
+
+	return 0;
+}
+EXPORT_SYMBOL(iw_handler_get_thrspy);
+
+/*------------------------------------------------------------------*/
+/*
+ * Prepare and send a Spy Threshold event
+ */
+static void iw_send_thrspy_event(struct net_device *	dev,
+				 struct iw_spy_data *	spydata,
+				 unsigned char *	address,
+				 struct iw_quality *	wstats)
+{
+	union iwreq_data	wrqu;
+	struct iw_thrspy	threshold;
+
+	/* Init */
+	wrqu.data.length = 1;
+	wrqu.data.flags = 0;
+	/* Copy address */
+	memcpy(threshold.addr.sa_data, address, ETH_ALEN);
+	threshold.addr.sa_family = ARPHRD_ETHER;
+	/* Copy stats */
+	memcpy(&(threshold.qual), wstats, sizeof(struct iw_quality));
+	/* Copy also thresholds */
+	memcpy(&(threshold.low), &(spydata->spy_thr_low),
+	       2 * sizeof(struct iw_quality));
+
+	/* Send event to user space */
+	wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold);
+}
+
+/* ---------------------------------------------------------------- */
+/*
+ * Call for the driver to update the spy data.
+ * For now, the spy data is a simple array. As the size of the array is
+ * small, this is good enough. If we wanted to support larger number of
+ * spy addresses, we should use something more efficient...
+ */
+void wireless_spy_update(struct net_device *	dev,
+			 unsigned char *	address,
+			 struct iw_quality *	wstats)
+{
+	struct iw_spy_data *	spydata = get_spydata(dev);
+	int			i;
+	int			match = -1;
+
+	/* Make sure driver is not buggy or using the old API */
+	if (!spydata)
+		return;
+
+	/* Update all records that match */
+	for (i = 0; i < spydata->spy_number; i++)
+		if (!compare_ether_addr(address, spydata->spy_address[i])) {
+			memcpy(&(spydata->spy_stat[i]), wstats,
+			       sizeof(struct iw_quality));
+			match = i;
+		}
+
+	/* Generate an event if we cross the spy threshold.
+	 * To avoid event storms, we have a simple hysteresis : we generate
+	 * event only when we go under the low threshold or above the
+	 * high threshold. */
+	if (match >= 0) {
+		if (spydata->spy_thr_under[match]) {
+			if (wstats->level > spydata->spy_thr_high.level) {
+				spydata->spy_thr_under[match] = 0;
+				iw_send_thrspy_event(dev, spydata,
+						     address, wstats);
+			}
+		} else {
+			if (wstats->level < spydata->spy_thr_low.level) {
+				spydata->spy_thr_under[match] = 1;
+				iw_send_thrspy_event(dev, spydata,
+						     address, wstats);
+			}
+		}
+	}
+}
+EXPORT_SYMBOL(wireless_spy_update);
--- linux-2.6.21.noarch/net/Kconfig.orig	2007-04-30 19:29:14.000000000 -0400
+++ linux-2.6.21.noarch/net/Kconfig	2007-04-30 19:41:49.000000000 -0400
@@ -219,14 +219,17 @@ endmenu
 source "net/ax25/Kconfig"
 source "net/irda/Kconfig"
 source "net/bluetooth/Kconfig"
-source "net/ieee80211/Kconfig"
-
-config WIRELESS_EXT
-	bool
 
 config FIB_RULES
 	bool
 
+menu "Wireless"
+
+source "net/wireless/Kconfig"
+source "net/ieee80211/Kconfig"
+
+endmenu
+
 endif   # if NET
 endmenu # Networking
 
--- linux-2.6.21.noarch/net/ieee80211/Kconfig.orig	2007-04-30 19:29:14.000000000 -0400
+++ linux-2.6.21.noarch/net/ieee80211/Kconfig	2007-04-30 19:41:49.000000000 -0400
@@ -56,7 +56,8 @@ config IEEE80211_CRYPT_CCMP
 
 config IEEE80211_CRYPT_TKIP
 	tristate "IEEE 802.11i TKIP encryption"
-	depends on IEEE80211 && NET_RADIO
+	depends on IEEE80211
+	select WIRELESS_EXT
 	select CRYPTO
 	select CRYPTO_MICHAEL_MIC
 	select CRYPTO_ECB

git-iwlwifi.patch:
 Kconfig               |    1 
 Makefile              |    1 
 iwlwifi/Kconfig       |   52 
 iwlwifi/Makefile      |    2 
 iwlwifi/base.c        |12347 ++++++++++++++++++++++++++++++++++++++++++++++++++
 iwlwifi/iwl-3945-rs.c |  962 +++
 iwlwifi/iwl-3945-rs.h |   89 
 iwlwifi/iwlwifi.h     | 1296 +++++
 iwlwifi/iwlwifi_hw.h  | 1973 +++++++
 9 files changed, 16723 insertions(+)

Index: git-iwlwifi.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/git-iwlwifi.patch,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- git-iwlwifi.patch	27 Apr 2007 19:16:57 -0000	1.4
+++ git-iwlwifi.patch	1 May 2007 00:44:04 -0000	1.5
@@ -1,10 +1,10 @@
 rsync://www.intellinuxwireless.org/repos/iwlwifi.git
 
-commit 440a9ee592a409e926f77633ce41ccad7be6c429
+commit db63be081b46f80a784cb0a1ae67a074d92aabf8
 
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c	2007-04-27 14:33:42.000000000 -0400
-@@ -0,0 +1,12363 @@
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c	2007-04-30 20:21:52.000000000 -0400
+@@ -0,0 +1,12347 @@
 +/******************************************************************************
 +
 +  Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
@@ -113,7 +113,7 @@
 +
 +#include "iwlwifi.h"
 +
-+#define IWLWIFI_VERSION "0.0.14k"
++#define IWLWIFI_VERSION "0.0.15k"
 +
 +#define DRV_DESCRIPTION	"Intel(R) Wireless Link driver for Linux"
 +#define DRV_COPYRIGHT	"Copyright(c) 2003-2006 Intel Corporation"
@@ -1685,7 +1685,7 @@
 +	if (ipw_is_associated(priv))
 +		add_time = ipw_usecs_to_beacons(
 +			params->start_time - priv->last_tsf,
-+			priv->rxon_timing.beaconInterval);
++			priv->rxon_timing.beacon_interval);
 +
 +	memset(&spectrum, 0, sizeof(spectrum));
 +
@@ -1700,7 +1700,7 @@
 +		spectrum.start_time =
 +		    ipw_add_beacon_time(priv->last_beacon_time,
 +					add_time,
-+					priv->rxon_timing.beaconInterval);
++					priv->rxon_timing.beacon_interval);
 +	else
 +		spectrum.start_time = params->start_time;
 +
@@ -3773,7 +3773,7 @@
 +{
 +	const struct ipw_eeprom_txpower_group *chnl_grp = NULL;
 +	s32 index0, index1;
-+	s32 rPower = 2 * requested_power;
++	s32 power = 2 * requested_power;
 +	s32 i;
 +	const struct ipw_eeprom_txpower_sample *samples;
 +	s32 gains0, gains1;
@@ -3783,19 +3783,19 @@
 +	chnl_grp = &priv->eeprom.groups[setting_index];
 +	samples = chnl_grp->samples;
 +	for (i = 0; i < 5; i++) {
-+		if (rPower == samples[i].power) {
++		if (power == samples[i].power) {
 +			*new_index = samples[i].gain_index;
 +			return 0;
 +		}
 +	}
 +
-+	if (rPower > samples[1].power) {
++	if (power > samples[1].power) {
 +		index0 = 0;
 +		index1 = 1;
-+	} else if (rPower > samples[2].power) {
++	} else if (power > samples[2].power) {
 +		index0 = 1;
 +		index1 = 2;
-+	} else if (rPower > samples[3].power) {
++	} else if (power > samples[3].power) {
 +		index0 = 2;
 +		index1 = 3;
 +	} else {
@@ -3809,7 +3809,7 @@
 +	gains0 = (s32) samples[index0].gain_index * (1 << 19);
 +	gains1 = (s32) samples[index1].gain_index * (1 << 19);
 +	res = gains0 + (gains1 - gains0) *
-+	    ((s32) rPower - (s32) samples[index0].power) / denominator +
++	    ((s32) power - (s32) samples[index0].power) / denominator +
 +	    (1 << 18);
 +	*new_index = res >> 19;
 +	return 0;
@@ -4034,10 +4034,10 @@
 +{
 +	struct ipw_bt_cmd bt_cmd = {
 +		.flags = 3,
-+		.leadTime = 0xAA,
-+		.maxKill = 1,
-+		.killAckMask = 0,
-+		.killCTSMask = 0,
++		.lead_time = 0xAA,
++		.max_kill = 1,
++		.kill_ack_mask = 0,
++		.kill_cts_mask = 0,
 +	};
 +
 +	return ipw_send_cmd_pdu(priv, REPLY_BT_CONFIG,
@@ -4221,7 +4221,7 @@
 +	priv->rxon_timing.timestamp.dw[1] = priv->timestamp1;
 +	priv->rxon_timing.timestamp.dw[0] = priv->timestamp0;
 +
-+	priv->rxon_timing.listenInterval = INTEL_CONN_LISTEN_INTERVAL;
++	priv->rxon_timing.listen_interval = INTEL_CONN_LISTEN_INTERVAL;
 +
 +	tsf = priv->timestamp1;
 +	tsf = ((tsf << 32) | priv->timestamp0);
@@ -4230,35 +4230,35 @@
 +
 +	if (priv->iw_mode == IEEE80211_IF_TYPE_STA) {
 +		if (conf->beacon_int == 0) {
-+			priv->rxon_timing.beaconInterval = 100;
-+			priv->rxon_timing.beaconTimerInitVal = 102400;
++			priv->rxon_timing.beacon_interval = 100;
++			priv->rxon_timing.beacon_init_val = 102400;
 +		} else {
-+			priv->rxon_timing.beaconInterval = conf->beacon_int;
-+			priv->rxon_timing.beaconInterval =
++			priv->rxon_timing.beacon_interval = conf->beacon_int;
++			priv->rxon_timing.beacon_interval =
 +			    ipw_adjust_beacon_interval(priv->
 +						       rxon_timing.
-+						       beaconInterval);
++						       beacon_interval);
 +		}
 +
-+		priv->rxon_timing.atimWindow = 0;
++		priv->rxon_timing.atim_window = 0;
 +	} else {
-+		priv->rxon_timing.beaconInterval =
++		priv->rxon_timing.beacon_interval =
 +		    ipw_adjust_beacon_interval(conf->beacon_int);
 +		/*MAC80211 we need to get atim_window from upper stack
 +		   for now we set to 0 TODO */
-+		priv->rxon_timing.atimWindow = 0;
++		priv->rxon_timing.atim_window = 0;
 +	}
 +
-+	interval_tm_unit = (priv->rxon_timing.beaconInterval * 1024);
++	interval_tm_unit = (priv->rxon_timing.beacon_interval * 1024);
 +	result = do_div(tsf, interval_tm_unit);
-+	priv->rxon_timing.beaconTimerInitVal =
++	priv->rxon_timing.beacon_init_val =
 +	    (u32) ((u64) interval_tm_unit - result);
 +
 +	IPW_DEBUG_ASSOC
 +	    ("beacon interval %d beacon timer %d beacon tim %d\n",
-+	     priv->rxon_timing.beaconInterval,
-+	     priv->rxon_timing.beaconTimerInitVal,
-+	     priv->rxon_timing.atimWindow);
++	     priv->rxon_timing.beacon_interval,
++	     priv->rxon_timing.beacon_init_val,
++	     priv->rxon_timing.atim_window);
 +	return rc;
 +}
 +#endif
@@ -4295,41 +4295,6 @@
 +#define IEEE80211_ERP_USE_PROTECTION           (0x02)
 +#define IEEE80211_ERP_BARKER_PREAMBLE_MODE     (0x04)
 +
-+union ht_cap_info {
-+	struct {
-+		u16 advancedCodingCapability:1;
-+		u16 supportedChannelWidthSet:1;
-+		u16 mimoPowerSaveMode:2;
-+		u16 greenField:1;
-+		u16 shortGI20:1;
-+		u16 shortGI40:1;
-+		u16 TxStbc:1;
-+		u16 RxStbc:1;
-+		u16 beamForming:1;
-+		u16 delayedBA:1;
-+		u16 maximalAMsduSize:1;
-+		u16 cckModeAt40MHz:1;
-+		u16 psmpSupport:1;
-+		u16 stbcControlFrameSupport:1;
-+		u16 lSigTxOpProtectionSupport:1;
-+	};
-+	u16 val;
-+} __attribute__ ((packed));
-+
-+union ht_param_info {
-+	struct {
-+		u8 maxRxAMpduFactor:2;
-+		u8 mpduDensity:3;
-+		u8 reserved:3;
-+	};
-+	u8 val;
-+} __attribute__ ((packed));
-+
-+#define CFG_HT_RX_AMPDU_FACTOR_DEF  (0x3)
-+#define HT_IE_MAX_AMSDU_SIZE_4K     (0)
-+#define CFG_HT_MPDU_DENSITY_2USEC   (0x5)
-+#define CFG_HT_MPDU_DENSITY_DEF CFG_HT_MPDU_DENSITY_2USEC
-+
 +/*
 +  fill in all required fields and ie for probe request frame
 +*/
@@ -5264,7 +5229,7 @@
 +		rxb = list_entry(element, struct ipw_rx_mem_buffer, list);
 +		rxb->skb =
 +		    alloc_skb(priv->hw_setting.rx_buffer_size,
-+			      GFP_DMA | __GFP_NOWARN | GFP_ATOMIC);
++			      __GFP_NOWARN | GFP_ATOMIC);
 +		if (!rxb->skb) {
 +			printk(KERN_CRIT
 +			       "%s: Can not allocate SKB buffers.\n",
@@ -6515,8 +6480,8 @@
 +	priv->stations[i].current_rate.s.rate = R_1M;
 +	memset(&priv->stations[i].sta, 0, sizeof(struct ipw_addsta_cmd));
 +	memcpy(priv->stations[i].sta.sta.MACAddr, bssid, ETH_ALEN);
-+	priv->stations[i].sta.ctrlAddModify = 0;
-+	priv->stations[i].sta.sta.staID = i;
++	priv->stations[i].sta.control = 0;
++	priv->stations[i].sta.sta.sta_id = i;
 +	priv->stations[i].sta.station_flags = 0;
 +
 +	//todoG do we need this
@@ -6584,7 +6549,7 @@
 +		    STA_CONTROL_MODIFY_MSK;
 +		priv->stations[sta_id].sta.tx_rate.rate_n_flags = tx_rate;
 +		priv->stations[sta_id].current_rate.rate_n_flags = tx_rate;
-+		priv->stations[sta_id].sta.ctrlAddModify =
++		priv->stations[sta_id].sta.control =
 +		    STA_CONTROL_MODIFY_MSK;
 +
 +		spin_unlock_irqrestore(&priv->sta_lock, flags_spin);
@@ -8700,9 +8665,9 @@
 +			}
 +
 +		case REPLY_ERROR:{
-+				u32 err_type = pkt->u.err_resp.enumErrorType;
-+				u8 cmd_id = pkt->u.err_resp.currentCmdID;
-+				u16 seq = pkt->u.err_resp.erroneousCmdSeqNum;
++				u32 err_type = pkt->u.err_resp.error_type;
++				u8 cmd_id = pkt->u.err_resp.cmd_id;
++				u16 seq = pkt->u.err_resp.bad_cmd_seq_num;
 +				u32 info = pkt->u.err_resp.error_info;
 +				IPW_ERROR("Error Reply type 0x%08X "
 +					  "cmd %s (0x%02X) "
@@ -8783,17 +8748,17 @@
 +			break;
 +
 +		case BEACON_NOTIFICATION:{
-+				struct BeaconNtfSpecifics *beacon =
++				struct beacon_notif_specifics *beacon =
 +				    &(pkt->u.beacon_status);
 +				IPW_DEBUG_INFO
 +				    ("beacon status %x retries %d iss %d "
 +				     "tsf %d %d rate %d\n",
-+				     beacon->bconNotifHdr.status,
-+				     beacon->bconNotifHdr.
++				     beacon->beacon_notif_hdr.status,
++				     beacon->beacon_notif_hdr.
 +				     failure_frame,
-+				     beacon->ibssMgrStatus,
-+				     beacon->highTSF, beacon->lowTSF,
-+				     beacon->bconNotifHdr.rate);
++				     beacon->ibss_mgr_status,
++				     beacon->high_tsf, beacon->low_tsf,
++				     beacon->beacon_notif_hdr.rate);
 +
 +			}
 +			break;
@@ -9245,6 +9210,14 @@
 +	return 0;
 +}
 +
++static inline u16* ieee80211_get_qos_ctrl(struct ieee80211_hdr  *hdr)
++{
++	int hdr_len=ieee80211_get_hdrlen(hdr->frame_control);
++	if (hdr_len == 26)
++		return (u16 *)((u8 *) hdr + (hdr_len) - QOS_CONTROL_LEN);
++	return NULL;
++}
++
 +/*
 +  handle build REPLY_TX command notification.
 +*/
@@ -9256,6 +9229,7 @@
 +{
 +	u32 tx_flags;
 +	u16 fc = le16_to_cpu(hdr->frame_control);
++	u16 *qc;
 +
 +	tx_flags = cmd->cmd.tx.tx_flags;
 +
@@ -9282,14 +9256,12 @@
 +	cmd->cmd.tx.sta_id = std_id;
 +	if (ieee80211_get_morefrag(hdr))
 +		tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK;
-+	if (ieee80211_get_hdrlen(fc) == 26) {
-+		u16 *qc = (u16 *)((u8 *)hdr + 
-+				  (ieee80211_get_hdrlen(fc) - 
-+				   QOS_CONTROL_LEN));
-+		cmd->cmd.tx.tid_tspec = (u8)(*qc & 0xF);
-+	} else
++	qc = ieee80211_get_qos_ctrl(hdr);
++	if (qc)
++		cmd->cmd.tx.tid_tspec = (u8)(*qc & 0xf);
++	else
 +		tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
-+
++	
 +	if (ctrl->flags & IEEE80211_TXCTL_USE_RTS_CTS) {
 +		tx_flags |= TX_CMD_FLG_RTS_MSK;
 +		tx_flags &= ~TX_CMD_FLG_CTS_MSK;
@@ -9429,7 +9401,6 @@
 +	return IPW3945_BROADCAST_ID;
 +}
 +
-+
 +/*
 +  start REPLY_TX command process
 +*/
@@ -9448,9 +9419,10 @@
 +	u8 id, hdr_len, unicast;
 +	u8 sta_id;
 +	u16 seq_number = 0;
-+	int rc;
 +	u16 fc;
 +	int len_org = 0, wait_write_ptr = 0;
++	u16 *qc;
++	int rc;
 +
 +	if (priv->status & STATUS_RF_KILL_MASK)
 +		goto drop;
@@ -9473,12 +9445,15 @@
 +
 +	IPW_DEBUG_RATE("station Id %d\n", sta_id);
 +
-+	if (ieee80211_get_hdrlen(fc) == 26) {
-+		seq_number = priv->stations[sta_id].tid[tx_id].seq_number;
++	qc = ieee80211_get_qos_ctrl(hdr);
++	if (qc) {
++		u8 tid = (u8)(*qc * 0xf);
++		seq_number = priv->stations[sta_id].tid[tid].seq_number;
 +		if (!(ieee80211_get_morefrag(hdr)))
-+			priv->stations[sta_id].tid[tx_id].seq_number += 0x10;
-+		if (WLAN_FC_GET_TYPE(fc) == IEEE80211_FTYPE_DATA)
-+			hdr->seq_ctrl |= cpu_to_le16(seq_number);
++			priv->stations[sta_id].tid[tid].seq_number += 0x10;
++		
++		hdr->seq_ctrl = cpu_to_le16(seq_number) | 
++			(hdr->seq_ctrl & 0xf);
 +	}
 +
 +	tfd = (u8 *) (&txq->bd[q->first_empty * q->element_size]);
@@ -9517,10 +9492,15 @@
 +	if (ctl->key_idx != -1)
 +		ipw_build_tx_cmd_hwcrypto(priv, ctl, out_cmd, skb, 0);
 +
-+	phys_addr = pci_map_single(priv->pci_dev, skb->data + hdr_len,
-+				   skb->len - hdr_len, PCI_DMA_TODEVICE);
 +	len = skb->len - hdr_len;
-+	attach_buffer_to_tfd_frame(priv, tfd, phys_addr, len);
++
++	/* 802.11 null functions have no payload... */
++	if (len) {
++		phys_addr = pci_map_single(priv->pci_dev, skb->data + hdr_len,
++					   skb->len - hdr_len, 
++					   PCI_DMA_TODEVICE);
++		attach_buffer_to_tfd_frame(priv, tfd, phys_addr, len);
++	}
 +
 +	out_cmd->cmd.tx.len = skb->len;
 +	if (priv->is_3945)
@@ -9991,24 +9971,24 @@
 +	} else {
 +		max_sleep =
 +		    (cmd->
-+		     SleepInterval[PMC_TCMD_SLEEP_INTRVL_TABLE_SIZE -
++		     sleep_interval[PMC_TCMD_SLEEP_INTRVL_TABLE_SIZE -
 +				   1] / period) * period;
 +		cmd->flags |= PMC_TCMD_FLAG_SLEEP_OVER_DTIM_MSK;
 +	}
 +
 +	for (i = 0; i < PMC_TCMD_SLEEP_INTRVL_TABLE_SIZE; i++) {
-+		if (cmd->SleepInterval[i] > max_sleep)
-+			cmd->SleepInterval[i] = max_sleep;
++		if (cmd->sleep_interval[i] > max_sleep)
++			cmd->sleep_interval[i] = max_sleep;
 +	}
 +
 +	IPW_DEBUG_POWER("Flags value = 0x%08X\n", cmd->flags);
-+	IPW_DEBUG_POWER("Tx timeout = %u\n", cmd->TxDataTimeout);
-+	IPW_DEBUG_POWER("Rx timeout = %u\n", cmd->RxDataTimeout);
++	IPW_DEBUG_POWER("Tx timeout = %u\n", cmd->tx_data_timeout);
++	IPW_DEBUG_POWER("Rx timeout = %u\n", cmd->rx_data_timeout);
 +	IPW_DEBUG_POWER
 +	    ("Sleep interval vector = { %d , %d , %d , %d , %d }\n",
-+	     cmd->SleepInterval[0], cmd->SleepInterval[1],
-+	     cmd->SleepInterval[2], cmd->SleepInterval[3],
-+	     cmd->SleepInterval[4]);
++	     cmd->sleep_interval[0], cmd->sleep_interval[1],
++	     cmd->sleep_interval[2], cmd->sleep_interval[3],
++	     cmd->sleep_interval[4]);
 +
 +	return rc;
 +}
@@ -10895,7 +10875,7 @@
 +	       keyconf->keylen);
 +	priv->stations[sta_id].sta.key.key_flags = key_flags;
 +	priv->stations[sta_id].sta.sta.modify_mask |= STA_MODIFY_KEY_MASK;
-+	priv->stations[sta_id].sta.ctrlAddModify |= STA_CONTROL_MODIFY_MSK;
++	priv->stations[sta_id].sta.control |= STA_CONTROL_MODIFY_MSK;
 +
 +	spin_unlock_irqrestore(&priv->sta_lock, flags);
 +
@@ -11683,6 +11663,10 @@
 +
 +	priv->status |= STATUS_EXIT_PENDING;
 +
++	/* prevent ipw_down from queuing priv->up
++	 * when we are in fw error */
++	priv->status &= ~STATUS_FW_ERROR;
++
 +	ipw_down(priv);
 +
 +	mutex_unlock(&priv->mutex);
@@ -11901,7 +11885,7 @@
 +
 +static int ipw3945_stop_tx_queue(struct ipw_priv *priv)
 +{
-+	int queueId;
++	int id;
 +	int rc;
 +	unsigned long flags;
 +
@@ -11916,11 +11900,11 @@
 +	ipw_write_restricted_reg(priv, SCD_MODE_REG, 0);
 +
 +	/* reset TFD queues */
-+	for (queueId = TFD_QUEUE_MIN; queueId < TFD_QUEUE_MAX; queueId++) {
-+		ipw_write_restricted(priv, FH_TCSR_CONFIG(queueId), 0x0);
++	for (id = TFD_QUEUE_MIN; id < TFD_QUEUE_MAX; id++) {
++		ipw_write_restricted(priv, FH_TCSR_CONFIG(id), 0x0);
 +		ipw_poll_restricted_bit(priv, FH_TSSR_TX_STATUS,
 +					ALM_FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE
-+					(queueId), 1000);
++					(id), 1000);
 +	}
 +
 +	ipw_release_restricted_access(priv);
@@ -12368,13 +12352,13 @@
 +
 +	return 0;
 +}
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/Makefile.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/Makefile	2007-04-27 14:33:25.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/Makefile	2007-04-30 20:19:23.000000000 -0400
 @@ -0,0 +1,2 @@
 +iwlwifi-objs		:= base.o
 +obj-$(CONFIG_IWLWIFI)	+= iwlwifi.o
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi.h.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi.h	2007-04-27 14:33:42.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi.h	2007-04-30 20:21:52.000000000 -0400
 @@ -0,0 +1,1296 @@
 +/******************************************************************************
 +
@@ -13672,8 +13656,8 @@
 +#define IPW3945_RX_BUF_SIZE 3000
 +
 +#endif				/* __iwlwifi_h__ */
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/Kconfig.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/Kconfig	2007-04-27 14:33:25.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/Kconfig	2007-04-30 20:19:23.000000000 -0400
 @@ -0,0 +1,52 @@
 +config IWLWIFI
 +	tristate "Intel PRO/Wireless 3945ABG Network Connection adapter"
@@ -13727,8 +13711,8 @@
 +	  If this is your first time using this driver, you should say Y here
 +	  as the debug information can assist others in helping you resolve
 +	  any problems you may encounter.
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.h.orig	2007-04-27 14:33:50.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.h	2007-04-27 14:33:42.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.h	2007-04-30 20:21:52.000000000 -0400
 @@ -0,0 +1,89 @@
 +#ifndef __iwl_3945_rs_h__
 +#define __iwl_3945_rs_h__
@@ -13819,8 +13803,8 @@
 +static int ipw_rate_scale_rxon_handle(struct ipw_priv *priv, s32 sta_id);
 +
 +#endif
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi_hw.h.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi_hw.h	2007-04-27 14:33:42.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi_hw.h	2007-04-30 20:21:52.000000000 -0400
 @@ -0,0 +1,1973 @@
 +/******************************************************************************
 +
@@ -13963,10 +13947,10 @@
 + */
 +
 +struct ipw_error_resp {
-+	u32 enumErrorType;	//7:4
-+	u8 currentCmdID;	//8
++	u32 error_type;	//7:4
++	u8 cmd_id;	//8
 +	u8 reserved1;		//9
-+	u16 erroneousCmdSeqNum;	//11:10
++	u16 bad_cmd_seq_num;	//11:10
 +	u16 reserved2;		//13:12
 +	u32 error_info;		//17:14
 +	union tsf timestamp;	//all TSF  //25:18
@@ -14101,10 +14085,10 @@
 + */
 +struct ipw_rxon_time_cmd {
 +	union tsf timestamp;	// all TSF  //11:4
-+	u16 beaconInterval;	//13:12
-+	u16 atimWindow;		//15:14
-+	u32 beaconTimerInitVal;	//19:16
-+	u16 listenInterval;	//21:20
++	u16 beacon_interval;	//13:12
++	u16 atim_window;		//15:14
++	u32 beacon_init_val;	//19:16
++	u16 listen_interval;	//21:20
 +	u16 reserved;		//23:22
 +} __attribute__ ((packed));
 +
@@ -14190,13 +14174,13 @@
 +struct sta_id_modify {
 +	u8 MACAddr[ETH_ALEN];
 +	u16 reserved1;
-+	u8 staID;
++	u8 sta_id;
 +	u8 modify_mask;
 +	u16 reserved2;
 +} __attribute__ ((packed));
 +
 +struct ipw_addsta_cmd {
-+	u8 ctrlAddModify;
++	u8 control;
 +	u8 reserved[3];
 +	struct sta_id_modify sta;
 +	struct ipw_keyinfo key;
@@ -14707,11 +14691,11 @@
 +// Command Notification and Response Headers are Covered by the
 +
 +// Beacon Notification
-+struct BeaconNtfSpecifics {
-+	struct ipw_tx_resp bconNotifHdr;	//15:4
-+	u32 lowTSF;		//19:16
-+	u32 highTSF;		//23:20
-+	u32 ibssMgrStatus;	//27:24
++struct beacon_notif_specifics {
++	struct ipw_tx_resp beacon_notif_hdr;	//15:4
++	u32 low_tsf;		//19:16
++	u32 high_tsf;		//23:20
++	u32 ibss_mgr_status;	//27:24
 +} __attribute__ ((packed));
 +
 +// TxBeacon Command
@@ -14852,7 +14836,7 @@
 + *               '01' force Mac sleep
 + *               '10' force xtal sleep
 + *               '11' Illegal set
-+ * NOTE: if SleepInterval[SLEEP_INTRVL_TABLE_SIZE-1] > DTIM period then
++ * NOTE: if sleep_interval[SLEEP_INTRVL_TABLE_SIZE-1] > DTIM period then
 + * ucode assume sleep over DTIM is allowed and we don't need to wakeup
 + * for every DTIM.
 + */
@@ -14863,9 +14847,9 @@
 +
 +struct ipw_powertable_cmd {
 +	u32 flags;
-+	u32 RxDataTimeout;
-+	u32 TxDataTimeout;
-+	u32 SleepInterval[PMC_TCMD_SLEEP_INTRVL_TABLE_SIZE];
++	u32 rx_data_timeout;
++	u32 tx_data_timeout;
++	u32 sleep_interval[PMC_TCMD_SLEEP_INTRVL_TABLE_SIZE];
 +} __attribute__ ((packed));
 +
 +struct ipw_sleep_notification {
@@ -14893,11 +14877,11 @@
 +
 +struct ipw_bt_cmd {
 +	u8 flags;
-+	u8 leadTime;
-+	u8 maxKill;
++	u8 lead_time;
++	u8 max_kill;
 +	u8 reserved;
-+	u32 killAckMask;
-+	u32 killCTSMask;
++	u32 kill_ack_mask;
++	u32 kill_cts_mask;
 +} __attribute__ ((packed));
 +
 +struct rx_phy_statistics {
@@ -15724,7 +15708,7 @@
 +		struct ipw_error_resp err_resp;
 +		struct ipw_card_state_notif card_state_notif;
 +		struct ipw_notif_statistics stats;
-+		struct BeaconNtfSpecifics beacon_status;
++		struct beacon_notif_specifics beacon_status;
 +		struct ipw_add_sta_resp add_sta;
 +		struct ipw_sleep_notification sleep_notif;
 +		struct ipw_spectrum_resp spectrum;
@@ -15795,8 +15779,8 @@
 +#define IPW_RX_BUF_SIZE 3000
 +
 +#endif				/* __iwlwifi_hw_h__ */
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.c.orig	2007-04-27 14:33:48.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.c	2007-04-27 14:33:42.000000000 -0400
+--- /dev/null	2007-04-17 21:17:54.747954992 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/iwlwifi/iwl-3945-rs.c	2007-04-30 20:21:52.000000000 -0400
 @@ -0,0 +1,962 @@
 +/*************** RATE-SCALING functions ***********************/
 +
@@ -16760,15 +16744,15 @@
 +	priv->rate_control.alloc_sta = rs_alloc_sta;
 +	priv->rate_control.free_sta = rs_free_sta;
 +}
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/Makefile.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/Makefile	2007-04-27 14:33:25.000000000 -0400
+--- linux-2.6.21.noarch/drivers/net/wireless/mac80211/Makefile.orig	2007-04-30 20:16:33.000000000 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/Makefile	2007-04-30 20:19:23.000000000 -0400
 @@ -4,3 +4,4 @@ obj-$(CONFIG_ADM8211)		+= adm8211/
  obj-$(CONFIG_P54_COMMON)	+= p54/
  obj-$(CONFIG_ZD1211RW_MAC80211)	+= zd1211rw/
  obj-$(CONFIG_RTL818X)		+= rtl818x/
 +obj-$(CONFIG_IWLWIFI)		+= iwlwifi/
---- linux-2.6.20.noarch/drivers/net/wireless/mac80211/Kconfig.orig	2007-04-27 14:33:00.000000000 -0400
-+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/Kconfig	2007-04-27 14:33:25.000000000 -0400
+--- linux-2.6.21.noarch/drivers/net/wireless/mac80211/Kconfig.orig	2007-04-30 20:16:33.000000000 -0400
++++ linux-2.6.21.noarch/drivers/net/wireless/mac80211/Kconfig	2007-04-30 20:19:23.000000000 -0400
 @@ -4,3 +4,4 @@ source "drivers/net/wireless/mac80211/ad
  source "drivers/net/wireless/mac80211/p54/Kconfig"
  source "drivers/net/wireless/mac80211/zd1211rw/Kconfig"

git-wireless-dev.patch:
 .mailmap                                                |    1 
 CREDITS                                                 |   31 
 MAINTAINERS                                             |   49 
 drivers/Kconfig                                         |    2 
 drivers/Makefile                                        |    1 
 drivers/misc/Kconfig                                    |    6 
 drivers/misc/Makefile                                   |    1 
 drivers/misc/eeprom_93cx6.c                             |  347 +
 drivers/net/wireless/Kconfig                            |    2 
 drivers/net/wireless/Makefile                           |    3 
 drivers/net/wireless/bcm43xx/Kconfig                    |    1 
 drivers/net/wireless/mac80211/Kconfig                   |    6 
 drivers/net/wireless/mac80211/Makefile                  |    6 
 drivers/net/wireless/mac80211/README                    |    2 
 drivers/net/wireless/mac80211/adm8211/Kconfig           |   25 
 drivers/net/wireless/mac80211/adm8211/Makefile          |    1 
 drivers/net/wireless/mac80211/adm8211/adm8211.c         | 2172 ++++++
 drivers/net/wireless/mac80211/adm8211/adm8211.h         |  622 +
 drivers/net/wireless/mac80211/bcm43xx/Kconfig           |  101 
 drivers/net/wireless/mac80211/bcm43xx/Makefile          |   18 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx.h         |  885 ++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_debugfs.c |  433 +
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_debugfs.h |  110 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.c     | 1383 ++++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_dma.h     |  361 +
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_leds.c    |  300 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_leds.h    |   56 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_lo.c      | 1110 +++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_lo.h      |   92 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.c    | 4029 ++++++++++++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_main.h    |  156 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_pcmcia.c  |  163 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_pcmcia.h  |   22 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.c     | 4286 +++++++++++++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_phy.h     |  309 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_pio.c     |  671 ++
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_pio.h     |  170 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_power.c   |   82 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_power.h   |   41 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_sysfs.c   |  232 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_sysfs.h   |    9 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_tables.c  |  376 +
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_tables.h  |   28 
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.c    |  603 +
 drivers/net/wireless/mac80211/bcm43xx/bcm43xx_xmit.h    |  250 
 drivers/net/wireless/mac80211/p54/Kconfig               |   10 
 drivers/net/wireless/mac80211/p54/Makefile              |    4 
 drivers/net/wireless/mac80211/p54/net2280.h             |  452 +
 drivers/net/wireless/mac80211/p54/prism54.h             |   77 
 drivers/net/wireless/mac80211/p54/prism54common.c       |  821 ++
 drivers/net/wireless/mac80211/p54/prism54common.h       |  328 +
 drivers/net/wireless/mac80211/p54/prism54magic.h        |   77 
 drivers/net/wireless/mac80211/p54/prism54pci.c          |  700 ++
 drivers/net/wireless/mac80211/p54/prism54pci.h          |  106 
 drivers/net/wireless/mac80211/p54/prism54usb.c          |  946 ++
 drivers/net/wireless/mac80211/p54/prism54usb.h          |  133 
 drivers/net/wireless/mac80211/rt2x00/Kconfig            |   99 
 drivers/net/wireless/mac80211/rt2x00/Makefile           |   14 
 drivers/net/wireless/mac80211/rt2x00/rt2400pci.c        | 1769 +++++
 drivers/net/wireless/mac80211/rt2x00/rt2400pci.h        |  918 ++
 drivers/net/wireless/mac80211/rt2x00/rt2500pci.c        | 1951 ++++++
 drivers/net/wireless/mac80211/rt2x00/rt2500pci.h        | 1185 +++
 drivers/net/wireless/mac80211/rt2x00/rt2500usb.c        | 1729 +++++
 drivers/net/wireless/mac80211/rt2x00/rt2500usb.h        |  738 ++
 drivers/net/wireless/mac80211/rt2x00/rt2x00.h           | 1057 +++
 drivers/net/wireless/mac80211/rt2x00/rt2x00debug.c      |  353 +
 drivers/net/wireless/mac80211/rt2x00/rt2x00debug.h      |   72 
 drivers/net/wireless/mac80211/rt2x00/rt2x00dev.c        |  831 ++
 drivers/net/wireless/mac80211/rt2x00/rt2x00lib.h        |  128 
 drivers/net/wireless/mac80211/rt2x00/rt2x00mac.c        |  426 +
 drivers/net/wireless/mac80211/rt2x00/rt2x00pci.c        |  587 +
 drivers/net/wireless/mac80211/rt2x00/rt2x00pci.h        |   83 
 drivers/net/wireless/mac80211/rt2x00/rt2x00usb.c        |  637 ++
 drivers/net/wireless/mac80211/rt2x00/rt2x00usb.h        |  120 
 drivers/net/wireless/mac80211/rt2x00/rt61pci.c          | 2332 +++++++
 drivers/net/wireless/mac80211/rt2x00/rt61pci.h          | 1348 ++++
 drivers/net/wireless/mac80211/rt2x00/rt73usb.c          | 1966 ++++++
 drivers/net/wireless/mac80211/rt2x00/rt73usb.h          |  937 ++
 drivers/net/wireless/mac80211/rtl818x/Kconfig           |    9 
 drivers/net/wireless/mac80211/rtl818x/Makefile          |    2 
 drivers/net/wireless/mac80211/rtl818x/rtl8187.h         |  126 
 drivers/net/wireless/mac80211/rtl818x/rtl8187_dev.c     |  726 ++
 drivers/net/wireless/mac80211/rtl818x/rtl8187_rtl8225.c |  747 ++
 drivers/net/wireless/mac80211/rtl818x/rtl8187_rtl8225.h |   30 
 drivers/net/wireless/mac80211/rtl818x/rtl818x.h         |  180 
 drivers/net/wireless/mac80211/zd1211rw/Kconfig          |   19 
 drivers/net/wireless/mac80211/zd1211rw/Makefile         |   11 
 drivers/net/wireless/mac80211/zd1211rw/zd_chip.c        | 1679 +++++
 drivers/net/wireless/mac80211/zd1211rw/zd_chip.h        |  910 ++
 drivers/net/wireless/mac80211/zd1211rw/zd_def.h         |   57 
 drivers/net/wireless/mac80211/zd1211rw/zd_ieee80211.h   |   67 
 drivers/net/wireless/mac80211/zd1211rw/zd_mac.c         |  700 ++
 drivers/net/wireless/mac80211/zd1211rw/zd_mac.h         |  250 
 drivers/net/wireless/mac80211/zd1211rw/zd_rf.c          |  170 
 drivers/net/wireless/mac80211/zd1211rw/zd_rf.h          |   80 
 drivers/net/wireless/mac80211/zd1211rw/zd_rf_al2230.c   |  436 +
 drivers/net/wireless/mac80211/zd1211rw/zd_rf_al7230b.c  |  491 +
 drivers/net/wireless/mac80211/zd1211rw/zd_rf_rf2959.c   |  279 
 drivers/net/wireless/mac80211/zd1211rw/zd_usb.c         | 1337 ++++
 drivers/net/wireless/mac80211/zd1211rw/zd_usb.h         |  241 
 drivers/net/wireless/mac80211/zd1211rw/zd_util.c        |   82 
 drivers/net/wireless/mac80211/zd1211rw/zd_util.h        |   29 
 drivers/net/wireless/zd1211rw/Kconfig                   |    1 
 drivers/ssb/Kconfig                                     |   93 
 drivers/ssb/Makefile                                    |   11 
 drivers/ssb/driver_chipcommon.c                         |  402 +
 drivers/ssb/driver_mipscore.c                           |  258 
 drivers/ssb/driver_pcicore.c                            |  556 +
 drivers/ssb/main.c                                      | 1047 +++
 drivers/ssb/pci.c                                       |  672 ++
 drivers/ssb/pcihost_wrapper.c                           |  104 
 drivers/ssb/pcmcia.c                                    |  256 
 drivers/ssb/scan.c                                      |  407 +
 drivers/ssb/ssb_private.h                               |  151 
 drivers/usb/host/Kconfig                                |   13 
 drivers/usb/host/ohci-hcd.c                             |   21 
 drivers/usb/host/ohci-ssb.c                             |  254 
 include/linux/crc-itu-t.h                               |   27 
 include/linux/eeprom_93cx6.h                            |   77 
 include/linux/ieee80211.h                               |  403 +
 include/linux/nl80211.h                                 |  263 
 include/linux/ssb/ssb.h                                 |  403 +
 include/linux/ssb/ssb_driver_chipcommon.h               |  387 +
 include/linux/ssb/ssb_driver_extif.h                    |  163 
 include/linux/ssb/ssb_driver_mips.h                     |   47 
 include/linux/ssb/ssb_driver_pci.h                      |  108 
 include/linux/ssb/ssb_regs.h                            |  294 
 include/net/cfg80211.h                                  |  114 
 include/net/iw_handler.h                                |    8 
 include/net/mac80211.h                                  | 1060 +++
 lib/Kconfig                                             |    8 
 lib/Makefile                                            |    1 
 lib/crc-itu-t.c                                         |   64 
 net/Kconfig                                             |    1 
 net/Makefile                                            |    2 
 net/mac80211/Kconfig                                    |   81 
 net/mac80211/Makefile                                   |   20 
 net/mac80211/aes_ccm.c                                  |  155 
 net/mac80211/aes_ccm.h                                  |   26 
 net/mac80211/debugfs.c                                  |  433 +
 net/mac80211/debugfs.h                                  |   16 
 net/mac80211/debugfs_key.c                              |  253 
 net/mac80211/debugfs_key.h                              |   34 
 net/mac80211/debugfs_netdev.c                           |  440 +
 net/mac80211/debugfs_netdev.h                           |   30 
 net/mac80211/debugfs_sta.c                              |  247 
 net/mac80211/debugfs_sta.h                              |   12 
 net/mac80211/hostapd_ioctl.h                            |  344 +
 net/mac80211/ieee80211.c                                | 5095 ++++++++++++++++
 net/mac80211/ieee80211_cfg.c                            |   72 
 net/mac80211/ieee80211_cfg.h                            |    9 
 net/mac80211/ieee80211_common.h                         |   98 
 net/mac80211/ieee80211_i.h                              |  812 ++
 net/mac80211/ieee80211_iface.c                          |  353 +
 net/mac80211/ieee80211_ioctl.c                          | 3180 +++++++++
 net/mac80211/ieee80211_key.h                            |  106 
 net/mac80211/ieee80211_led.c                            |   91 
 net/mac80211/ieee80211_led.h                            |   32 
 net/mac80211/ieee80211_rate.c                           |  140 
 net/mac80211/ieee80211_rate.h                           |  144 
 net/mac80211/ieee80211_sta.c                            | 3217 ++++++++++
 net/mac80211/michael.c                                  |  104 
 net/mac80211/michael.h                                  |   20 
 net/mac80211/rc80211_simple.c                           |  432 +
 net/mac80211/sta_info.c                                 |  464 +
 net/mac80211/sta_info.h                                 |  167 
 net/mac80211/tkip.c                                     |  341 +
 net/mac80211/tkip.h                                     |   36 
 net/mac80211/wep.c                                      |  328 +
 net/mac80211/wep.h                                      |   40 
 net/mac80211/wme.c                                      |  688 ++
 net/mac80211/wme.h                                      |   39 
 net/mac80211/wpa.c                                      |  846 ++
 net/mac80211/wpa.h                                      |   31 
 net/wireless/Kconfig                                    |   17 
 net/wireless/Makefile                                   |    1 
 net/wireless/core.c                                     |  143 
 net/wireless/core.h                                     |   32 
 net/wireless/nl80211.c                                  |  993 +++
 net/wireless/nl80211.h                                  |   24 
 net/wireless/sysfs.c                                    |   50 
 181 files changed, 79055 insertions(+), 3 deletions(-)

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.7 -r 1.8 git-wireless-dev.patch
Index: git-wireless-dev.patch
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/git-wireless-dev.patch,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- git-wireless-dev.patch	25 Apr 2007 18:07:00 -0000	1.7
+++ git-wireless-dev.patch	1 May 2007 00:44:04 -0000	1.8
@@ -1,175 +1,14 @@
 git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-dev.git
 
-commit 6295da8ac8ad909dbe49d4c02ee9902fbdb04704
+commit 1fd8ffe72853ed41a0d3b489a2d94959aef6af80
 
 --- /dev/null	2007-04-17 21:17:54.747954992 -0400
-+++ linux-2.6.20.noarch/include/net/wireless.h	2007-04-25 11:20:17.000000000 -0400
-@@ -0,0 +1,159 @@
-+#ifndef __NET_WIRELESS_H
-+#define __NET_WIRELESS_H
-+
-+/*
-+ * 802.11 device management
-+ *
-+ * Copyright 2007	Johannes Berg <johannes at sipsolutions.net>
-+ */
-+
-+#include <linux/netdevice.h>
-+#include <linux/debugfs.h>
-+#include <linux/list.h>
-+#include <net/cfg80211.h>
-+
-+/**
-+ * struct wiphy - wireless hardware description
-+ * @idx: the wiphy index assigned to this item
-+ * @class_dev: the class device representing /sys/class/ieee80211/<wiphy-name>
-+ */
-+struct wiphy {
-+	/* assign these fields before you register the wiphy */
-+
-+	/* permanent MAC address */
-+	u8 perm_addr[ETH_ALEN];
-+
-+	/* If multiple wiphys are registered and you're handed e.g.
-+	 * a regular netdev with assigned ieee80211_ptr, you won't
-+	 * know whether it points to a wiphy your driver has registered
-+	 * or not. Assign this to something global to your driver to
-+	 * help determine whether you own this wiphy or not. */
-+	void *privid;
-+
-+	/* fields below are read-only, assigned by cfg80211 */
-+
-+	/* the item in /sys/class/ieee80211/ points to this,
-+	 * you need use set_wiphy_dev() (see below) */
-+	struct device dev;
-+
-+	/* dir in debugfs: ieee80211/<wiphyname> */
-+	struct dentry *debugfsdir;
-+
-+	char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
-+};
-+
-+/** struct wireless_dev - wireless per-netdev state
-+ *
-+ * This structure must be allocated by the driver/stack
-+ * that uses the ieee80211_ptr field in struct net_device
-+ * (this is intentional so it can be allocated along with
-+ * the netdev.)
-+ *
-+ * @wiphy: pointer to hardware description
-+ */
-+struct wireless_dev {
-+	struct wiphy *wiphy;
-+
-+	/* private to the generic wireless code */
-+	struct list_head list;
-+	struct net_device *netdev;
-+};
-+
-+/**
-+ * wiphy_priv - return priv from wiphy
-+ */
-+static inline void *wiphy_priv(struct wiphy *wiphy)
-+{
-+	BUG_ON(!wiphy);
-+	return &wiphy->priv;
-+}
-+
-+/**
-+ * set_wiphy_dev - set device pointer for wiphy
-+ */
-+static inline void set_wiphy_dev(struct wiphy *wiphy, struct device *dev)
-+{
-+	wiphy->dev.parent = dev;
-+}
-+
-+/**
-+ * wiphy_dev - get wiphy dev pointer
-+ */
-+static inline struct device *wiphy_dev(struct wiphy *wiphy)
-+{
-+	return wiphy->dev.parent;
-+}
-+
-+/**
-+ * wiphy_name - get wiphy name
-+ */
-+static inline char *wiphy_name(struct wiphy *wiphy)
-+{
-+	return wiphy->dev.bus_id;
-+}
-+
-+/**
-+ * wdev_priv - return wiphy priv from wireless_dev
-+ */
-+static inline void *wdev_priv(struct wireless_dev *wdev)
-+{
-+	BUG_ON(!wdev);
-+	return wiphy_priv(wdev->wiphy);
-+}
-+
-+/**
-+ * wiphy_new - create a new wiphy for use with cfg80211
-+ *
-+ * create a new wiphy and associate the given operations with it.
-+ * @sizeof_priv bytes are allocated for private use.
-+ *
-+ * the returned pointer must be assigned to each netdev's
-+ * ieee80211_ptr for proper operation.
-+ */
-+struct wiphy *wiphy_new(struct cfg80211_ops *ops, int sizeof_priv);
-+
-+/**
-+ * wiphy_register - register a wiphy with cfg80211
-+ *
-+ * register the given wiphy
-+ *
-+ * Returns a non-negative wiphy index or a negative error code.
-+ */
-+extern int wiphy_register(struct wiphy *wiphy);
-+
-+/**
-+ * wiphy_unregister - deregister a wiphy from cfg80211
-+ *
-+ * unregister a device with the given priv pointer.
-+ * After this call, no more requests can be made with this priv
-+ * pointer, but the call may sleep to wait for an outstanding
-+ * request that is being handled.
-+ */
-+extern void wiphy_unregister(struct wiphy *wiphy);
-+
-+/**
-+ * wiphy_free - free wiphy
-+ */
-+extern void wiphy_free(struct wiphy *wiphy);
-+
-+
-+/*
-+ * internal definitions for wireless
-+ */
-+
-+#if defined(CONFIG_CFG80211_WEXT_COMPAT) || defined(CONFIG_WIRELESS_EXT)
-+int wext_ioctl(unsigned int cmd, struct ifreq *ifreq, void __user *arg);
-+int wireless_proc_init(void);
-+#else
-+static inline
-+int wext_ioctl(unsigned int cmd, struct ifreq *ifreq, void __user *arg)
-+{
-+	return -EINVAL;
-+}
-+static inline int wireless_proc_init(void)
-+{
-+	return 0;
-+}
-+#endif
-+
-+#endif /* __NET_WIRELESS_H */
---- /dev/null	2007-04-17 21:17:54.747954992 -0400
-+++ linux-2.6.20.noarch/include/net/mac80211.h	2007-04-25 11:20:17.000000000 -0400
-@@ -0,0 +1,1103 @@
++++ linux-2.6.21.noarch/include/net/mac80211.h	2007-04-30 20:04:50.000000000 -0400
+@@ -0,0 +1,1060 @@
 +/*
 + * Low-level hardware driver -- IEEE 802.11 driver (80211.o) interface
 + * Copyright 2002-2005, Devicescape Software, Inc.
++ * Copyright 2006-2007	Jiri Benc <jbenc at suse.cz>
 + *
 + * This program is free software; you can redistribute it and/or modify
 + * it under the terms of the GNU General Public License version 2 as
@@ -221,7 +60,9 @@
 + * freq, and val fields. Other fields will be filled in by 80211.o based on
 + * hostapd information and low-level driver does not need to use them. The
 + * limits for each channel will be provided in 'struct ieee80211_conf' when
-+ * configuring the low-level driver with hw->config callback. */
++ * configuring the low-level driver with hw->config callback. If a device has
++ * a default regulatory domain, IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED
++ * can be set to let the driver configure all fields */
 +struct ieee80211_channel {
 +	short chan; /* channel number (IEEE 802.11) */
 +	short freq; /* frequency in MHz */
@@ -385,9 +226,6 @@
[...37310 lines suppressed...]
 +		return 0;
 +	}
@@ -88288,7 +78878,7 @@
 +		    !ieee80211_sta_match_ssid(ifsta, bss->ssid, bss->ssid_len))
 +			continue;
 +
-+		if (top_rssi < bss->rssi) {
++		if (!selected || top_rssi < bss->rssi) {
 +			selected = bss;
 +			top_rssi = bss->rssi;
 +		}
@@ -88305,16 +78895,18 @@
 +		ieee80211_sta_set_bssid(dev, selected->bssid);
 +		ieee80211_rx_bss_put(dev, selected);
 +		ifsta->state = IEEE80211_AUTHENTICATE;
++		rtnl_unlock();
 +		ieee80211_sta_reset_auth(dev, ifsta);
 +		return 0;
 +	} else {
 +		if (ifsta->state != IEEE80211_AUTHENTICATE) {
-+			ieee80211_sta_start_scan(dev, NULL, 0);;
++			ieee80211_sta_start_scan(dev, NULL, 0);
 +			ifsta->state = IEEE80211_AUTHENTICATE;
 +			set_bit(IEEE80211_STA_REQ_AUTH, &ifsta->request);
 +		} else
 +			ifsta->state = IEEE80211_DISABLED;
 +	}
++	rtnl_unlock();
 +	return -1;
 +}
 +
@@ -88764,19 +79356,24 @@
 +		printk(KERN_DEBUG "%s: failed to restore operational"
 +		       "channel after scan\n", dev->name);
 +
++	if (!(local->hw.flags & IEEE80211_HW_NO_PROBE_FILTERING) &&
++	    ieee80211_if_config(dev))
++		printk(KERN_DEBUG "%s: failed to restore operational"
++		       "BSSID after scan\n", dev->name);
++
 +	memset(&wrqu, 0, sizeof(wrqu));
 +	wireless_send_event(dev, SIOCGIWSCAN, &wrqu, NULL);
 +
-+	spin_lock_bh(&local->sub_if_lock);
++	read_lock(&local->sub_if_lock);
 +	list_for_each_entry(sdata, &local->sub_if_list, list) {
 +		if (sdata->type == IEEE80211_IF_TYPE_STA) {
 +			if (sdata->u.sta.associated)
 +				ieee80211_send_nullfunc(local, sdata, 0);
-+			ieee80211_sta_timer((unsigned long)&sdata->u.sta);
++			ieee80211_sta_timer((unsigned long)sdata);
 +		}
 +		netif_wake_queue(sdata->dev);
 +	}
-+	spin_unlock_bh(&local->sub_if_lock);
++	read_unlock(&local->sub_if_lock);
 +
 +	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
 +	if (sdata->type == IEEE80211_IF_TYPE_IBSS) {
@@ -88864,7 +79461,8 @@
 +	}
 +
 +	if (local->sta_scanning)
-+		schedule_delayed_work(&local->scan_work, next_delay);
++		queue_delayed_work(local->hw.workqueue, &local->scan_work,
++				   next_delay);
 +}
 +
 +
@@ -88912,14 +79510,14 @@
 +
 +	local->sta_scanning = 1;
 +
-+	spin_lock_bh(&local->sub_if_lock);
++	read_lock(&local->sub_if_lock);
 +	list_for_each_entry(sdata, &local->sub_if_list, list) {
 +		netif_stop_queue(sdata->dev);
 +		if (sdata->type == IEEE80211_IF_TYPE_STA &&
 +		    sdata->u.sta.associated)
 +			ieee80211_send_nullfunc(local, sdata, 1);
 +	}
-+	spin_unlock_bh(&local->sub_if_lock);
++	read_unlock(&local->sub_if_lock);
 +
 +	if (ssid) {
 +		local->scan_ssid_len = ssid_len;
@@ -88932,8 +79530,15 @@
 +					 list);
 +	local->scan_channel_idx = 0;
 +	local->scan_dev = dev;
++
++	if (!(local->hw.flags & IEEE80211_HW_NO_PROBE_FILTERING) &&
++	    ieee80211_if_config(dev))
++		printk(KERN_DEBUG "%s: failed to set BSSID for scan\n",
++		       dev->name);
++
 +	/* TODO: start scan as soon as all nullfunc frames are ACKed */
-+	schedule_delayed_work(&local->scan_work, IEEE80211_CHANNEL_TIME);
++	queue_delayed_work(local->hw.workqueue, &local->scan_work,
++			   IEEE80211_CHANNEL_TIME);
 +
 +	return 0;
 +}
@@ -88955,7 +79560,7 @@
 +	}
 +
 +	set_bit(IEEE80211_STA_REQ_SCAN, &ifsta->request);
-+	schedule_work(&ifsta->work);
++	queue_work(local->hw.workqueue, &ifsta->work);
 +	return 0;
 +}
 +
@@ -89010,6 +79615,10 @@
 +
 +	memset(&iwe, 0, sizeof(iwe));
 +	iwe.cmd = SIOCGIWFREQ;
++	iwe.u.freq.m = bss->channel;
++	iwe.u.freq.e = 0;
++	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
++					  IW_EV_FREQ_LEN);
 +	iwe.u.freq.m = bss->freq * 100000;
 +	iwe.u.freq.e = 1;
 +	current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
@@ -89163,7 +79772,6 @@
 +	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
 +	struct sta_info *sta;
 +	struct ieee80211_sub_if_data *sdata = NULL;
-+	struct net_device *sta_dev = NULL;
 +
 +	/* TODO: Could consider removing the least recently used entry and
 +	 * allow new one to be added. */
@@ -89175,26 +79783,13 @@
 +		return NULL;
 +	}
 +
-+	spin_lock_bh(&local->sub_if_lock);
-+	list_for_each_entry(sdata, &local->sub_if_list, list)
-+		if (sdata->type == IEEE80211_IF_TYPE_IBSS &&
-+		    memcmp(bssid, sdata->u.sta.bssid, ETH_ALEN) == 0) {
-+			sta_dev = sdata->dev;
-+			break;
-+		}
-+	spin_unlock_bh(&local->sub_if_lock);
-+
-+	if (!sta_dev)
-+		return NULL;
-+
 +	printk(KERN_DEBUG "%s: Adding new IBSS station " MAC_FMT " (dev=%s)\n",
-+	       dev->name, MAC_ARG(addr), sta_dev->name);
++	       local->mdev->name, MAC_ARG(addr), dev->name);
 +
 +	sta = sta_info_add(local, dev, addr, GFP_ATOMIC);
 +	if (!sta)
 +		return NULL;
 +
-+	sta->dev = sta_dev;
 +	sta->supp_rates = sdata->u.sta.supp_rates_bits;
 +
 +	rate_control_rate_init(sta, local);
@@ -89240,7 +79835,7 @@
 +	return 0;
 +}
 --- /dev/null	2007-04-17 21:17:54.747954992 -0400
-+++ linux-2.6.20.noarch/net/mac80211/ieee80211_cfg.h	2007-04-25 11:20:17.000000000 -0400
++++ linux-2.6.21.noarch/net/mac80211/ieee80211_cfg.h	2007-04-30 20:04:51.000000000 -0400
 @@ -0,0 +1,9 @@
 +/*
 + * mac80211 configuration hooks for cfg80211
@@ -89252,7 +79847,7 @@
 +
 +#endif /* __IEEE80211_CFG_H */
 --- /dev/null	2007-04-17 21:17:54.747954992 -0400
-+++ linux-2.6.20.noarch/net/mac80211/debugfs.h	2007-04-25 11:20:17.000000000 -0400
++++ linux-2.6.21.noarch/net/mac80211/debugfs.h	2007-04-30 20:04:51.000000000 -0400
 @@ -0,0 +1,16 @@
 +#ifndef __MAC80211_DEBUGFS_H
 +#define __MAC80211_DEBUGFS_H
@@ -89270,20 +79865,8 @@
 +#endif
 +
 +#endif /* __MAC80211_DEBUGFS_H */
---- linux-2.6.20.noarch/net/ieee80211/Kconfig.orig	2007-04-25 11:19:13.000000000 -0400
-+++ linux-2.6.20.noarch/net/ieee80211/Kconfig	2007-04-25 11:20:17.000000000 -0400
-@@ -56,7 +56,8 @@ config IEEE80211_CRYPT_CCMP
- 
- config IEEE80211_CRYPT_TKIP
- 	tristate "IEEE 802.11i TKIP encryption"
--	depends on IEEE80211 && NET_RADIO
-+	depends on IEEE80211
-+	select WIRELESS_EXT
- 	select CRYPTO
- 	select CRYPTO_MICHAEL_MIC
- 	select CRYPTO_ECB
---- linux-2.6.20.noarch/.mailmap.orig	2007-04-25 11:19:13.000000000 -0400
-+++ linux-2.6.20.noarch/.mailmap	2007-04-25 11:20:17.000000000 -0400
+--- linux-2.6.21.noarch/.mailmap.orig	2007-04-30 20:04:37.000000000 -0400
++++ linux-2.6.21.noarch/.mailmap	2007-04-30 20:04:51.000000000 -0400
 @@ -57,6 +57,7 @@ Jean Tourrilhes <jt at hpl.hp.com>
  Jeff Garzik <jgarzik at pretzel.yyz.us>
  Jens Axboe <axboe at suse.de>


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/devel/kernel-2.6.spec,v
retrieving revision 1.3120
retrieving revision 1.3121
diff -u -r1.3120 -r1.3121
--- kernel-2.6.spec	30 Apr 2007 21:32:36 -0000	1.3120
+++ kernel-2.6.spec	1 May 2007 00:44:05 -0000	1.3121
@@ -597,10 +597,11 @@
 Patch2205: linux-2.6-libata-debug.patch
 
 # Wireless bits
-Patch2300: git-wireless-dev.patch
-Patch2301: git-iwlwifi.patch
-Patch2302: git-iwlwifi-fixes.patch
-Patch2303: linux-2.6-zd1211rw-mac80211-queue-limit.patch
+Patch2300: linux-2.6-wireless.patch
+Patch2301: git-wireless-dev.patch
+Patch2302: git-iwlwifi.patch
+Patch2303: git-iwlwifi-fixes.patch
+Patch2304: linux-2.6-zd1211rw-mac80211-queue-limit.patch
 
 # ACPI bits
 
@@ -1340,14 +1341,16 @@
 # Make libata debugging info runtime selectable.
 #%patch2205 -p1
 
-# Add the new wireless stack and drivers from wireless-dev
+# Add critical wireless updates from 2.6.22
 %patch2300 -p1
-# ...and the iwlwifi driver from Intel
+# Add the new wireless stack and drivers from wireless-dev
 %patch2301 -p1
-# ...plus some fixes not yet in Intel's tree
+# ...and the iwlwifi driver from Intel
 %patch2302 -p1
-# limite queueing of URBs to zd1211rw-mac80211 driver
+# ...plus some fixes not yet in Intel's tree
 %patch2303 -p1
+# limite queueing of URBs to zd1211rw-mac80211 driver
+%patch2304 -p1
 
 # ACPI patches
 
@@ -2337,6 +2340,12 @@
 #  - tux.
 
 %changelog
+* Mon Apr 30 2007 John W. Linville <linville at redhat.com>
+- Add critical post-2.6.21 wireless updates
+- Update git-wireless-dev.patch
+- Update git-iwlwifi.patch (iwlwifi version 0.0.15)
+- Remove unused wireless config options
+
 * Mon Apr 30 2007 Dave Jones <davej at redhat.com>
 - Fix oops in sis900 driver.
 




More information about the fedora-cvs-commits mailing list