rpms/kernel/FC-6 jwltest-iwlwifi-fixes.patch, NONE, 1.1.10.1 jwltest-iwlwifi.patch, NONE, 1.1.22.1 jwltest-mac80211-backport-2_6_20-fixup.patch, NONE, 1.1.12.1 jwltest-mac80211-backport.patch, NONE, 1.1.22.1 kernel-2.6.spec, 1.2944, 1.2944.6.1

fedora-cvs-commits at redhat.com fedora-cvs-commits at redhat.com
Tue May 1 17:48:27 UTC 2007


Author: linville

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

Modified Files:
      Tag: private-linville-jwltest-fc6-33-branch
	kernel-2.6.spec 
Added Files:
      Tag: private-linville-jwltest-fc6-33-branch
	jwltest-iwlwifi-fixes.patch jwltest-iwlwifi.patch 
	jwltest-mac80211-backport-2_6_20-fixup.patch 
	jwltest-mac80211-backport.patch 
Log Message:


jwltest-iwlwifi-fixes.patch:
 base.c    |    2 +-
 iwlwifi.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE jwltest-iwlwifi-fixes.patch ---
--- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c.orig	2007-05-01 13:02:21.000000000 -0400
+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c	2007-05-01 13:04:05.000000000 -0400
@@ -9927,7 +9927,7 @@ static int ipw_update_power_cmd(struct i
 	u8 period = 0;
 	struct ipw_power_mgr *pow_data;
 
-	if ((mode < IPW_POWER_MODE_CAM) || (mode > IPW_POWER_INDEX_5)) {
+	if (mode > IPW_POWER_INDEX_5) {
 		IPW_DEBUG_POWER("Error invalid power mode \n");
 		return -1;
 	}
--- linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi.h.orig	2007-05-01 13:02:21.000000000 -0400
+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/iwlwifi.h	2007-05-01 13:04:05.000000000 -0400
@@ -180,7 +180,7 @@ do { if (ipw_debug_level & (level)) \
 #define IPW_DL_QOS           (1<<31)
 
 #define IPW_ERROR(f, a...) printk(KERN_ERR DRV_NAME ": " f, ## a)
-#define IPW_WARNING(f, a...) printk(KERN_ERR DRV_NAME ": " f, ## a)
+#define IPW_WARNING(f, a...) printk(KERN_WARNING DRV_NAME ": " f, ## a)
 #define IPW_DEBUG_INFO(f, a...)    IPW_DEBUG(IPW_DL_INFO, f, ## a)
 
 #define IPW_DEBUG_MAC80211(f, a...)     IPW_DEBUG(IPW_DL_MAC80211, f, ## a)

jwltest-iwlwifi.patch:
 Kconfig               |    1 
 Makefile              |    1 
 iwlwifi/Kconfig       |   52 
 iwlwifi/Makefile      |    2 
 iwlwifi/base.c        |12341 ++++++++++++++++++++++++++++++++++++++++++++++++++
 iwlwifi/iwl-3945-rs.c |  962 +++
 iwlwifi/iwl-3945-rs.h |   89 
 iwlwifi/iwlwifi.h     | 1296 +++++
 iwlwifi/iwlwifi_hw.h  | 1977 ++++++++
 9 files changed, 16721 insertions(+)

--- NEW FILE jwltest-iwlwifi.patch ---
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/iwlwifi/base.c	2007-05-01 13:02:21.000000000 -0400
@@ -0,0 +1,12341 @@
+/******************************************************************************
+
+  Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
+
+  Portions of this file are derived from the ipw3945 project, as well
+  as portions of the ieee80211 subsystem header files.
+
+  802.11 status code portion of this file from ethereal-0.10.6:
+    Copyright 2000, Axis Communications AB
+    Ethereal - Network traffic analyzer
+    By Gerald Combs <gerald at ethereal.com>
+    Copyright 1998 Gerald Combs
+
+  This program is free software; you can redistribute it and/or modify it
+  under the terms of version 2 of the GNU General Public License as
+  published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful, but WITHOUT
+  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+  more details.
+
+  You should have received a copy of the GNU General Public License along with
+  this program; if not, write to the Free Software Foundation, Inc.,
+  51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+
+  The full GNU General Public License is included in this distribution in the
+  file called LICENSE.
+
+  Contact Information:
+  James P. Ketrenos <ipw2100-admin at linux.intel.com>
+  Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
+
+******************************************************************************/
+
+/*
+ * Theory of operation:
+ *
+ * The primary NIC mode of operation is configured within the RXON command.
+ * As such, there are two instances of RXON data -- staging_rxon and
+ * active_rxon.  The former is used to configure the device, the later to
+ * reflect the actual currently active configuration.
+ *
+ * After configuring staging_rxon, it is activated by calling
+ * ipw_commit_rxon(). The ipw_commit_rxon() will ensure the correct sequence
+ * of commands are invoked on the hardware to result in Tx being possible
+ * (if the channel is appropriate for Tx)
+ *
+ * About the threading and lock model of the driver...
+ *
+ * There are three paths of execution through the driver.
+ *
+ * 1.  ioctl based (wireless extensions, netdev, etc.)
+ * 2.  interrupt based
+ * 3.  scheduled work queue items
+ *
+ * As soon as an interrupt comes in, it schedules a tasklet.  That tasklet,
+ * when run, does any HW checks, pulls any data from the read queue,
+ * and schedules other layers to do the actual work.
+ *
+ * NOTE: This driver is a work in progress.  It is currently structured
+ * in a way that we can add support for the next wireless adapter
+ * available from Intel.
+ *
+ * Our current focus is as follows:
+ * 1.  Get the driver working w/ mac80211 in STA(client) mode.
+ * 2.  Clean up the dual-driver code from function redirection to
+ *     if/else switches where the code detlas are minimal.
+ * 3.  Evaluate the amount of delta between the hardware versions and
+ *     possibly split iwlwifi into multiple drivers for each piece of
+ *     HW, sharing as much base code as possible (would result in
+ *     multiple driver files on disk vs. a single module that works
+ *     with multiple hardware types)
+ * 4.  Document the uCode regulatory enforcement
+ * 5.  Document the rate scaling capabilities of the 3945
+ * 6.  Provide an initial rate scaling algorithm tailored for the
+ *     statistic data exposed by the 3945.
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/dma-mapping.h>
+#include <linux/delay.h>
+#include <linux/skbuff.h>
+#include <linux/netdevice.h>
+#include <linux/wireless.h>
+#include <linux/firmware.h>
+#include <net/iw_handler.h>
+
+//#define BIT(x) (1 << (x))
+#include <net/mac80211.h>
+#include <net/ieee80211.h>
+
+#include <../net/mac80211/ieee80211_rate.h>
+
+#include <net/ieee80211_radiotap.h>
+	
+#ifndef ETH_P_80211_RAW
+#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
+#endif
+
+#include <linux/if_arp.h>
+#include <asm/div64.h>
+
+#include "iwlwifi.h"
+
+#define IWLWIFI_VERSION "0.0.16k"
+
+#define DRV_DESCRIPTION	"Intel(R) Wireless Link driver for Linux"
+#define DRV_COPYRIGHT	"Copyright(c) 2003-2006 Intel Corporation"
+#define DRV_VERSION     IWLWIFI_VERSION
+
+MODULE_DESCRIPTION(DRV_DESCRIPTION);
+MODULE_VERSION(DRV_VERSION);
+MODULE_AUTHOR(DRV_COPYRIGHT);
+MODULE_LICENSE("GPL");
+
+/*MAC80211  move this to mac80211 files */
+#define IEEE80211_FC(type, stype) cpu_to_le16((type << 2) | (stype << 4))
+
+#define IEEE80211_CHAN_W_RADAR_DETECT 0x00000010
+
+#define IEEE80211_24GHZ_BAND     (1<<0)
+#define IEEE80211_52GHZ_BAND     (1<<1)
+
+#define IEEE80211_OFDM_SHIFT_MASK_A         4
+
+/*MAC80211 end */
+
+static u32 ipw_debug_level;
+
+static int param_disable_hw_scan = 0;
+static int param_debug = 0;
+static int param_channel = 0;
+static int param_mode = 0;
+static int param_auto_create = 1;	/* def: create new adhoc network if needed */
+static int param_led = 1;	/* def: use LEDs */
+static int param_disable = 0;	/* def: enable radio */
+static int param_antenna = 0;	/* def: 0 = both antennas (use diversity) */
+static int param_hwcrypto = 0;	/* def: using software encryption */
+static int param_qos_enable = 1;
+static int param_rtap_iface = 0;
+
+static const char ipw_modes[] = {
+	'a', 'b', 'g', '?'
+};
+
+#define LD_TIME_LINK_ON 300
+
+static int ipw_power_init_handle(struct ipw_priv *priv);
+
+static int ipw_queue_tx_hcmd(struct ipw_priv *priv, struct ipw_host_cmd *cmd);
+
+static int ipw_rate_scale_rxon_handle(struct ipw_priv *priv, s32 sta_id);
+static u8 ipw_find_station(struct ipw_priv *priv, u8 * bssid);
+static void ipw_clear_stations_table(struct ipw_priv *priv);
+
+static void ipw_link_up(struct ipw_priv *priv);
+
+static int ipw_wx_set_powermode(struct ipw_priv *priv, int mode);
+
+#define SLP PMC_TCMD_FLAG_DRIVER_ALLOW_SLEEP_MSK
+
+#define MSEC_TO_USEC 1024
+
+/* default power management (not Tx power) table values */
+static struct ipw_power_vec_entry range_0[IPW_POWER_AC] = {	// for tim  0-10
+	{{0, 0 * MSEC_TO_USEC, 0 * MSEC_TO_USEC, {0, 0, 0, 0, 0}}, 0},
+	{{SLP, 200 * MSEC_TO_USEC, 500 * MSEC_TO_USEC,
+	  {1, 2, 3, 4, 4}}, 0},
+	{{SLP, 200 * MSEC_TO_USEC, 300 * MSEC_TO_USEC,
+	  {2, 4, 6, 7, 7}}, 0},
+	{{SLP, 50 * MSEC_TO_USEC, 100 * MSEC_TO_USEC,
+	  {2, 6, 9, 9, 10}}, 0},
+	{{SLP, 50 * MSEC_TO_USEC, 25 * MSEC_TO_USEC,
+	  {2, 7, 9, 9, 10}}, 1},
+	{{SLP, 25 * MSEC_TO_USEC, 25 * MSEC_TO_USEC,
+	  {4, 7, 10, 10, 10}}, 1}
+};
+
+static struct ipw_power_vec_entry range_1[IPW_POWER_AC] = {	// for tim > 10
+	{{0, 0 * MSEC_TO_USEC, 0 * MSEC_TO_USEC, {0, 0, 0, 0, 0}}, 0},
+	{{SLP, 200 * MSEC_TO_USEC, 500 * MSEC_TO_USEC,
+	  {1, 2, 3, 4, 0xFF}}, 0},
+	{{SLP, 200 * MSEC_TO_USEC, 300 * MSEC_TO_USEC,
+	  {2, 4, 6, 7, 0xFF}}, 0},
+	{{SLP, 50 * MSEC_TO_USEC, 100 * MSEC_TO_USEC,
+	  {2, 6, 9, 9, 0xFF}}, 0},
+	{{SLP, 50 * MSEC_TO_USEC, 25 * MSEC_TO_USEC,
+	  {2, 7, 9, 9, 0xFF}}, 0},
+	{{SLP, 25 * MSEC_TO_USEC, 25 * MSEC_TO_USEC,
+	  {4, 7, 10, 10, 0xFF}}, 0}
+};
+
[...16355 lines suppressed...]
+{
+	u8 low = IPW_INVALID_RATE;
+	u8 high = IPW_INVALID_RATE;
+	u16 high_low;
+	int index;
+	struct ipw_rate_scale_priv *scale_priv;
+	struct ipw_rate_scale_data *window = NULL;
+	int current_tpt = IPW_INVALID_VALUE;
+	int low_tpt = IPW_INVALID_VALUE;
+	int high_tpt = IPW_INVALID_VALUE;
+	u32 fail_count;
+	s8 scale_action = 0;
+	unsigned long flags;
+	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+	struct sta_info *sta;
+	u16 fc, rate_mask;
+	struct ipw_priv *priv = (struct ipw_priv *)priv_rate;
+
+	IPW_DEBUG_RATE("enter\n");
+
+	memset(extra, 0, sizeof(*extra));
+
+	fc = le16_to_cpu(hdr->frame_control);
+	if ((WLAN_FC_GET_TYPE(fc) != IEEE80211_FTYPE_DATA) ||
+	    (is_multicast_ether_addr(hdr->addr1))) {
+		/* Send management frames and broadcast/multicast data using
+		 * lowest rate. */
+		/* TODO: this could probably be improved.. */
+  		IPW_DEBUG_RATE("leave: lowest rate (not data or is "
+			       "multicast)\n");
+		
+		return ipw_get_lowest_rate(local);
+	}
+	    
+	sta = sta_info_get(local, hdr->addr1);
+	if (!sta || !sta->rate_ctrl_priv) {
+		IPW_DEBUG_RATE("leave: No STA priv data to update!\n");
+		if (sta)
+			sta_info_put(sta);
+		return NULL;
+	}
+
+	rate_mask = sta->supp_rates;
+	index = min(sta->txrate & 0xffff, IPW_MAX_RATES - 1);
+	
+	spin_lock_irqsave(&priv->lq_mngr.lock, flags);
+
+	scale_priv = (struct ipw_rate_scale_priv*)
+		sta->rate_ctrl_priv;
+
+	if (scale_priv->start_rate != IPW_INVALID_RATE) {
+		index = scale_priv->start_rate;
+		scale_priv->start_rate = IPW_INVALID_RATE;
+	}
+
+	window = &(scale_priv->win[index]);
+
+	fail_count = window->counter - window->success_counter;
+
+	if (((fail_count <= IPW_RATE_SCALE_MIN_FAILURE_TH) &&
+	     (window->success_counter < IPW_RATE_SCALE_MIN_SUCCESS_TH))
+	    || (priv->lq_mngr.expected_tpt == NULL)) {
+
+		window->average_tpt = IPW_INVALID_VALUE;
+		spin_unlock_irqrestore(&priv->lq_mngr.lock, flags);
+
+  		IPW_DEBUG_RATE("Invalid average_tpt on rate %d: "
+			       "counter: %d, success_counter: %d, "
+			       "expected_tpt is %sNULL\n", 
+			       index,
+			       window->counter, 
+			       window->success_counter,
+			       priv->lq_mngr.expected_tpt ? "not " : "");
+		goto out;
+
+	} 
+
+	window->average_tpt = ((window->success_ratio *
+				priv->lq_mngr.
+				expected_tpt[index] + 64) / 128);
+
+	high_low = ipw_get_adjacent_rate(priv, index, rate_mask);
+	low = high_low & 0xff;
+	high = (high_low >> 8) & 0xff;
+
+	current_tpt = window->average_tpt;
+
+	if (low  != IPW_INVALID_RATE) 
+		low_tpt = scale_priv->win[low].average_tpt;
+
+	if (high != IPW_INVALID_RATE)
+		high_tpt = scale_priv->win[high].average_tpt;
+
+	spin_unlock_irqrestore(&priv->lq_mngr.lock, flags);
+
+	scale_action = 1;
+
+	if ((window->success_ratio < IPW_RATE_SCALE_DECREASE_TH) ||
+	    !current_tpt) {
+		IPW_DEBUG_RATE("decrease rate because of low success_ratio\n");
+		scale_action = -1;
+	} else if ((low_tpt == IPW_INVALID_VALUE) &&
+		   (high_tpt == IPW_INVALID_VALUE)) {
+		scale_action = 1;
+	} else if ((low_tpt != IPW_INVALID_VALUE) &&
+		   (high_tpt != IPW_INVALID_VALUE)
+		   && (low_tpt < current_tpt)
+		   && (high_tpt < current_tpt)) {
+		IPW_DEBUG_RATE("No action -- low [%d] & high [%d] < "
+			       "current_tpt [%d]\n",
+			       low_tpt, high_tpt, current_tpt);
+		scale_action = 0;
+	} else {
+		if (high_tpt != IPW_INVALID_VALUE) {
+			if (high_tpt > current_tpt)
+				scale_action = 1;
+			else {
+				IPW_DEBUG_RATE
+					("decrease rate because of high tpt\n");
+				scale_action = -1;
+			}
+		} else if (low_tpt != IPW_INVALID_VALUE) {
+			if (low_tpt > current_tpt) {
+				IPW_DEBUG_RATE
+					("decrease rate because of low tpt\n");
+				scale_action = -1;
+			} else
+				scale_action = 1;
+		}
+	}
+
+	if ((window->success_ratio > IPW_RATE_SCALE_HIGH_TH) ||
+	    (current_tpt > (128 * window->average_tpt))) {
+		IPW_DEBUG_RATE("No action -- success_ratio [%d] > HIGH_TH or "
+			       "current_tpt [%d] > average_tpt [%d]\n",
+			       window->success_ratio,
+			       current_tpt, 128 * window->average_tpt);
+		scale_action = 0;
+	}
+
+	switch (scale_action) {
+	case -1:
+		if (low != IPW_INVALID_RATE)
+			index = low;
+		break;
+
+	case 1:
+		if (high != IPW_INVALID_RATE)
+			index = high;
+
+		break;
+
+	case 0:
+	default:
+		break;
+	}
+
+	IPW_DEBUG_RATE("Selected %d (action %d) - low %d high %d\n",
+		       index, scale_action, low, high);
+
+ out:
+	    
+	sta->last_txrate = index;
+	sta->txrate = sta->last_txrate;
+	sta_info_put(sta);
+
+	IPW_DEBUG_RATE("leave: %d\n", index);
+	return &priv->ieee_rates[index];
+}
+
+
+static char* rs_name = "iwlwifi rate-scale";
+static void ipw_set_rate_scale_handlers(struct ipw_priv *priv)
+{
+	priv->rate_control.module = NULL;
+	priv->rate_control.name = rs_name;
+	priv->rate_control.tx_status = &rs_tx_status;
+	priv->rate_control.get_rate = &rs_get_rate;
+	priv->rate_control.rate_init = rs_rate_init;
+	priv->rate_control.clear = rs_clear;
+	priv->rate_control.alloc = rs_alloc;
+	priv->rate_control.free = rs_free;
+	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-05-01 13:01:48.000000000 -0400
+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/Makefile	2007-05-01 13:02:21.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-05-01 13:01:48.000000000 -0400
+++ linux-2.6.20.noarch/drivers/net/wireless/mac80211/Kconfig	2007-05-01 13:02:21.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"
 source "drivers/net/wireless/mac80211/rtl818x/Kconfig"
+source "drivers/net/wireless/mac80211/iwlwifi/Kconfig"

jwltest-mac80211-backport-2_6_20-fixup.patch:
 core.c    |    6 ++++--
 nl80211.c |    4 ++++
 2 files changed, 8 insertions(+), 2 deletions(-)

--- NEW FILE jwltest-mac80211-backport-2_6_20-fixup.patch ---
--- linux-2.6.20.noarch/net/wireless/nl80211.c.orig	2007-04-12 12:57:55.000000000 -0400
+++ linux-2.6.20.noarch/net/wireless/nl80211.c	2007-04-12 12:57:51.000000000 -0400
@@ -694,6 +694,7 @@ static int nl80211_rename_wiphy(struct s
 	struct cfg80211_registered_device *rdev;
 	int result;
 
+#if 0 /* Not in FC6 */
 	if (!info->attrs[NL80211_ATTR_WIPHY_NAME])
 		return -EINVAL;
 
@@ -705,6 +706,9 @@ static int nl80211_rename_wiphy(struct s
 
 	cfg80211_put_dev(rdev);
 	return result;
+#else
+	return -EINVAL;
+#endif
 }
 
 static int nl80211_key_cmd(struct sk_buff *skb, struct genl_info *info)
--- linux-2.6.20.noarch/net/wireless/core.c.orig	2007-04-12 12:55:32.000000000 -0400
+++ linux-2.6.20.noarch/net/wireless/core.c	2007-04-12 12:58:36.000000000 -0400
@@ -141,6 +141,7 @@ void cfg80211_put_dev(struct cfg80211_re
 	mutex_unlock(&drv->mtx);
 }
 
+#if 0 /* Not in FC6 */
 int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
 			char *newname)
 {
@@ -172,6 +173,7 @@ int cfg80211_dev_rename(struct cfg80211_
 
 	return 0;
 }
+#endif
 
 /* exported functions */
 
@@ -291,7 +293,7 @@ static int cfg80211_netdev_notifier_call
 	case NETDEV_REGISTER:
 		mutex_lock(&rdev->devlist_mtx);
 		list_add(&dev->ieee80211_ptr->list, &rdev->netdev_list);
-		if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj,
+		if (sysfs_create_link(&dev->class_dev.kobj, &rdev->wiphy.dev.kobj,
 				      "phy80211")) {
 			printk(KERN_ERR "wireless: failed to add phy80211 symlink to netdev!\n");
 		}
@@ -301,7 +303,7 @@ static int cfg80211_netdev_notifier_call
 	case NETDEV_UNREGISTER:
 		mutex_lock(&rdev->devlist_mtx);
 		if (!list_empty(&dev->ieee80211_ptr->list)) {
-			sysfs_remove_link(&dev->dev.kobj, "phy80211");
+			sysfs_remove_link(&dev->class_dev.kobj, "phy80211");
 			list_del_init(&dev->ieee80211_ptr->list);
 		}
 		mutex_unlock(&rdev->devlist_mtx);

jwltest-mac80211-backport.patch:
 CREDITS                                                 |   37 
 MAINTAINERS                                             |   70 
 drivers/Kconfig                                         |    2 
 drivers/Makefile                                        |    1 
 drivers/misc/Kconfig                                    |    6 
 drivers/misc/Makefile                                   |    1 
 drivers/misc/eeprom_93cx6.c                             |  347 +
 drivers/net/Makefile                                    |    2 
 drivers/net/wireless/Kconfig                            |  120 
 drivers/net/wireless/Makefile                           |    3 
 drivers/net/wireless/bcm43xx/Kconfig                    |    4 
 drivers/net/wireless/hostap/Kconfig                     |    3 
 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                   |    4 
 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                             |    6 
 drivers/usb/host/ohci-ssb.c                             |  254 
 fs/compat_ioctl.c                                       |    9 
 include/linux/Kbuild                                    |    1 
 include/linux/crc-itu-t.h                               |   27 
 include/linux/eeprom_93cx6.h                            |   77 
 include/linux/ieee80211.h                               |  403 +
 include/linux/netdevice.h                               |    4 
 include/linux/nl80211.h                                 |  301 
 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/linux/wireless.h                                |   21 
 include/net/cfg80211.h                                  |  154 
 include/net/iw_handler.h                                |   43 
 include/net/mac80211.h                                  | 1060 +++
 include/net/wext.h                                      |   24 
 include/net/wireless.h                                  |  139 
 lib/Kconfig                                             |    8 
 lib/Makefile                                            |    1 
 lib/crc-itu-t.c                                         |   64 
 net/Kconfig                                             |   12 
 net/Makefile                                            |    4 
 net/core/Makefile                                       |    1 
 net/core/dev.c                                          |   34 
 net/core/rtnetlink.c                                    |   29 
 net/core/wireless.c                                     | 2353 -------
 net/ieee80211/Kconfig                                   |    3 
 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                                    |   31 
 net/wireless/Makefile                                   |    5 
 net/wireless/core.c                                     |  367 +
 net/wireless/core.h                                     |   81 
 net/wireless/nl80211.c                                  |  993 +++
 net/wireless/nl80211.h                                  |   24 
 net/wireless/sysfs.c                                    |  130 
 net/wireless/sysfs.h                                    |    9 
 net/wireless/wext.c                                     | 1509 ++++
 195 files changed, 81312 insertions(+), 2519 deletions(-)

--- NEW FILE jwltest-mac80211-backport.patch ---
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.20.noarch/include/net/wireless.h	2007-05-01 12:50:27.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.20.noarch/include/net/mac80211.h	2007-05-01 12:50:27.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
+ * published by the Free Software Foundation.
+ */
+
+#ifndef MAC80211_H
+#define MAC80211_H
+
+#include <linux/kernel.h>
+#include <linux/if_ether.h>
+#include <linux/skbuff.h>
+#include <linux/wireless.h>
+#include <linux/device.h>
+#include <linux/ieee80211.h>
+#include <net/wireless.h>
+#include <net/cfg80211.h>
+
+/* Note! Only ieee80211_tx_status_irqsafe() and ieee80211_rx_irqsafe() can be
+ * called in hardware interrupt context. The low-level driver must not call any
+ * other functions in hardware interrupt context. If there is a need for such
+ * call, the low-level driver should first ACK the interrupt and perform the
+ * IEEE 802.11 code call after this, e.g., from a scheduled tasklet (in
+ * software interrupt context).
+ */
+
+/*
+ * Frame format used when passing frame between low-level hardware drivers
+ * and IEEE 802.11 driver the same as used in the wireless media, i.e.,
+ * buffers start with IEEE 802.11 header and include the same octets that
+ * are sent over air.
+ *
+ * If hardware uses IEEE 802.3 headers (and perform 802.3 <-> 802.11
+ * conversion in firmware), upper layer 802.11 code needs to be changed to
+ * support this.
+ *
+ * If the receive frame format is not the same as the real frame sent
+ * on the wireless media (e.g., due to padding etc.), upper layer 802.11 code
+ * could be updated to provide support for such format assuming this would
+ * optimize the performance, e.g., by removing need to re-allocation and
+ * copying of the data.
+ */
+
+#define IEEE80211_CHAN_W_SCAN 0x00000001
+#define IEEE80211_CHAN_W_ACTIVE_SCAN 0x00000002
+#define IEEE80211_CHAN_W_IBSS 0x00000004
+
+/* Channel information structure. Low-level driver is expected to fill in chan,
+ * 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
[...84597 lines suppressed...]
+	if (bss) {
+		char *buf;
+		buf = kmalloc(30, GFP_ATOMIC);
+		if (buf) {
+			memset(&iwe, 0, sizeof(iwe));
+			iwe.cmd = IWEVCUSTOM;
+			sprintf(buf, "tsf=%016llx", (unsigned long long)(bss->timestamp));
+			iwe.u.data.length = strlen(buf);
+			current_ev = iwe_stream_add_point(current_ev, end_buf,
+							  &iwe, buf);
+			kfree(buf);
+		}
+	}
+
+	do {
+		char *buf;
+
+		if (!(local->scan_flags & IEEE80211_SCAN_EXTRA_INFO))
+			break;
+
+		buf = kmalloc(100, GFP_ATOMIC);
+		if (!buf)
+			break;
+
+		memset(&iwe, 0, sizeof(iwe));
+		iwe.cmd = IWEVCUSTOM;
+		sprintf(buf, "bcn_int=%d", bss->beacon_int);
+		iwe.u.data.length = strlen(buf);
+		current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe,
+						  buf);
+
+		memset(&iwe, 0, sizeof(iwe));
+		iwe.cmd = IWEVCUSTOM;
+		sprintf(buf, "capab=0x%04x", bss->capability);
+		iwe.u.data.length = strlen(buf);
+		current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe,
+						  buf);
+
+		kfree(buf);
+		break;
+	} while (0);
+
+	return current_ev;
+}
+
+
+int ieee80211_sta_scan_results(struct net_device *dev, char *buf, size_t len)
+{
+	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+	char *current_ev = buf;
+	char *end_buf = buf + len;
+	struct ieee80211_sta_bss *bss;
+
+	spin_lock_bh(&local->sta_bss_lock);
+	list_for_each_entry(bss, &local->sta_bss_list, list) {
+		if (buf + len - current_ev <= IW_EV_ADDR_LEN) {
+			spin_unlock_bh(&local->sta_bss_lock);
+			return -E2BIG;
+		}
+		current_ev = ieee80211_sta_scan_result(dev, bss, current_ev,
+						       end_buf);
+	}
+	spin_unlock_bh(&local->sta_bss_lock);
+	return current_ev - buf;
+}
+
+
+int ieee80211_sta_set_extra_ie(struct net_device *dev, char *ie, size_t len)
+{
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_if_sta *ifsta = &sdata->u.sta;
+	kfree(ifsta->extra_ie);
+	if (len == 0) {
+		ifsta->extra_ie = NULL;
+		ifsta->extra_ie_len = 0;
+		return 0;
+	}
+	ifsta->extra_ie = kmalloc(len, GFP_KERNEL);
+	if (!ifsta->extra_ie) {
+		ifsta->extra_ie_len = 0;
+		return -ENOMEM;
+	}
+	memcpy(ifsta->extra_ie, ie, len);
+	ifsta->extra_ie_len = len;
+	return 0;
+}
+
+
+struct sta_info * ieee80211_ibss_add_sta(struct net_device *dev,
+					 struct sk_buff *skb, u8 *bssid,
+					 u8 *addr)
+{
+	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+	struct sta_info *sta;
+	struct ieee80211_sub_if_data *sdata = NULL;
+
+	/* TODO: Could consider removing the least recently used entry and
+	 * allow new one to be added. */
+	if (local->num_sta >= IEEE80211_IBSS_MAX_STA_ENTRIES) {
+		if (net_ratelimit()) {
+			printk(KERN_DEBUG "%s: No room for a new IBSS STA "
+			       "entry " MAC_FMT "\n", dev->name, MAC_ARG(addr));
+		}
+		return NULL;
+	}
+
+	printk(KERN_DEBUG "%s: Adding new IBSS station " MAC_FMT " (dev=%s)\n",
+	       local->mdev->name, MAC_ARG(addr), dev->name);
+
+	sta = sta_info_add(local, dev, addr, GFP_ATOMIC);
+	if (!sta)
+		return NULL;
+
+	sta->supp_rates = sdata->u.sta.supp_rates_bits;
+
+	rate_control_rate_init(sta, local);
+
+	return sta; /* caller will call sta_info_put() */
+}
+
+
+int ieee80211_sta_deauthenticate(struct net_device *dev, u16 reason)
+{
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_if_sta *ifsta = &sdata->u.sta;
+
+	printk(KERN_DEBUG "%s: deauthenticate(reason=%d)\n",
+	       dev->name, reason);
+
+	if (sdata->type != IEEE80211_IF_TYPE_STA &&
+	    sdata->type != IEEE80211_IF_TYPE_IBSS)
+		return -EINVAL;
+
+	ieee80211_send_deauth(dev, ifsta, reason);
+	ieee80211_set_disassoc(dev, ifsta, 1);
+	return 0;
+}
+
+
+int ieee80211_sta_disassociate(struct net_device *dev, u16 reason)
+{
+	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+	struct ieee80211_if_sta *ifsta = &sdata->u.sta;
+
+	printk(KERN_DEBUG "%s: disassociate(reason=%d)\n",
+	       dev->name, reason);
+
+	if (sdata->type != IEEE80211_IF_TYPE_STA)
+		return -EINVAL;
+
+	if (!ifsta->associated)
+		return -1;
+
+	ieee80211_send_disassoc(dev, ifsta, reason);
+	ieee80211_set_disassoc(dev, ifsta, 0);
+	return 0;
+}
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.20.noarch/net/mac80211/ieee80211_cfg.h	2007-05-01 12:50:32.000000000 -0400
@@ -0,0 +1,9 @@
+/*
+ * mac80211 configuration hooks for cfg80211
+ */
+#ifndef __IEEE80211_CFG_H
+#define __IEEE80211_CFG_H
+
+extern struct cfg80211_ops mac80211_config_ops;
+
+#endif /* __IEEE80211_CFG_H */
--- /dev/null	2007-04-17 21:17:54.747954992 -0400
+++ linux-2.6.20.noarch/net/mac80211/debugfs.h	2007-05-01 12:50:32.000000000 -0400
@@ -0,0 +1,16 @@
+#ifndef __MAC80211_DEBUGFS_H
+#define __MAC80211_DEBUGFS_H
+
+#ifdef CONFIG_MAC80211_DEBUGFS
+extern void debugfs_hw_add(struct ieee80211_local *local);
+extern void debugfs_hw_del(struct ieee80211_local *local);
+extern int mac80211_open_file_generic(struct inode *inode, struct file *file);
+#else
+static inline void debugfs_hw_add(struct ieee80211_local *local)
+{
+	return;
+}
+static inline void debugfs_hw_del(struct ieee80211_local *local) {}
+#endif
+
+#endif /* __MAC80211_DEBUGFS_H */
--- linux-2.6.20.noarch/net/ieee80211/Kconfig.orig	2007-05-01 12:49:35.000000000 -0400
+++ linux-2.6.20.noarch/net/ieee80211/Kconfig	2007-05-01 12:50:32.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


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/dist/rpms/kernel/FC-6/kernel-2.6.spec,v
retrieving revision 1.2944
retrieving revision 1.2944.6.1
diff -u -r1.2944 -r1.2944.6.1
--- kernel-2.6.spec	10 Apr 2007 21:15:52 -0000	1.2944
+++ kernel-2.6.spec	1 May 2007 17:48:25 -0000	1.2944.6.1
@@ -54,7 +54,7 @@
 # that the kernel isn't the stock distribution kernel, for example,
 # by setting the define to ".local" or ".bz123456"
 #
-#% define buildid .local
+%define buildid .jwltest.33
 #
 %define sublevel 20
 %define kversion 2.6.%{sublevel}
@@ -586,6 +586,14 @@
 Patch5060: linux-2.6-olpc-battery.patch
 
 #
+# mac80211 backport
+#
+Patch6000: jwltest-mac80211-backport.patch
+Patch6001: jwltest-mac80211-backport-2_6_20-fixup.patch
+Patch6002: jwltest-iwlwifi.patch
+Patch6003: jwltest-iwlwifi-fixes.patch
+
+#
 # 10000 to 20000 is for stuff that has to come last due to the
 # amount of drivers they touch. But only these should go here.
 # Not patches you're too lazy for to put in the proper place.
@@ -1366,6 +1374,12 @@
 # final stuff
 #
 
+# mac80211 stuff
+%patch6000 -p1
+%patch6001 -p1
+%patch6002 -p1
+%patch6003 -p1
+
 #
 # misc small stuff to make things compile or otherwise improve performance
 #




More information about the fedora-cvs-commits mailing list