rpms/kernel/F-7 linux-2.6-at76.patch, NONE, 1.1 linux-2.6-ath5k.patch, NONE, 1.1 linux-2.6-mac80211-extras.patch, NONE, 1.1 linux-2.6-zd1211rw-mac80211.patch, NONE, 1.1 kernel-2.6.spec, 1.3348, 1.3349 linux-2.6-wireless-pending.patch, 1.3, 1.4 linux-2.6-wireless.patch, 1.11, 1.12 git-wireless-dev.patch, 1.25, NONE
John W. Linville (linville)
fedora-extras-commits at redhat.com
Thu Sep 27 15:33:55 UTC 2007
- Previous message (by thread): rpms/policycoreutils/devel .cvsignore, 1.161, 1.162 policycoreutils-gui.patch, 1.35, 1.36 policycoreutils.spec, 1.452, 1.453 sources, 1.166, 1.167
- Next message (by thread): rpms/lyx/EL-5 lyx.spec,1.51,1.52
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: linville
Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13399
Modified Files:
kernel-2.6.spec linux-2.6-wireless-pending.patch
linux-2.6-wireless.patch
Added Files:
linux-2.6-at76.patch linux-2.6-ath5k.patch
linux-2.6-mac80211-extras.patch
linux-2.6-zd1211rw-mac80211.patch
Removed Files:
git-wireless-dev.patch
Log Message:
Update and restructure wireless patches
linux-2.6-at76.patch:
--- NEW FILE linux-2.6-at76.patch ---
diff -up linux-2.6.22.noarch/MAINTAINERS.orig linux-2.6.22.noarch/MAINTAINERS
--- linux-2.6.22.noarch/MAINTAINERS.orig 2007-09-27 11:19:28.000000000 -0400
+++ linux-2.6.22.noarch/MAINTAINERS 2007-09-27 11:23:09.000000000 -0400
@@ -690,6 +690,15 @@ W: http://www.thekelleys.org.uk/atmel
W: http://atmelwlandriver.sourceforge.net/
S: Maintained
+ATMEL USB WIRELESS DRIVER
+P: Pavel Roskin
+M: proski at gnu.org
+L: linux-wireless at vger.kernel.org
+L: at76c503a-user at lists.berlios.de
+L: at76c503a-develop at lists.berlios.de
+W: http://at76c503a.berlios.de/
+S: Maintained
+
AUDIT SUBSYSTEM
P: David Woodhouse
M: dwmw2 at infradead.org
diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/at76_usb.h
--- /dev/null 2007-09-27 08:31:24.563724082 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/at76_usb.h 2007-09-27 11:23:09.000000000 -0400
@@ -0,0 +1,662 @@
+/*
+ * Copyright (c) 2002,2003 Oliver Kurth
+ * (c) 2003,2004 Joerg Albert <joerg.albert at gmx.de>
+ * (c) 2007 Guido Guenther <agx at sigxcpu.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This driver was based on information from the Sourceforge driver
+ * released and maintained by Atmel:
+ *
+ * http://sourceforge.net/projects/atmelwlandriver/
+ *
+ * Although the code was completely re-written,
+ * it would have been impossible without Atmel's decision to
+ * release an Open Source driver (unfortunately the firmware was
+ * kept binary only). Thanks for that decision to Atmel!
+ */
+
+#ifndef _AT76_USB_H
+#define _AT76_USB_H
+
+#include <net/ieee80211.h>
+
+/* current driver version */
+#define DRIVER_VERSION "0.16"
+
+/* Board types */
+enum board_type {
+ BOARD_503_ISL3861 = 1,
+ BOARD_503_ISL3863 = 2,
+ BOARD_503 = 3,
+ BOARD_503_ACC = 4,
+ BOARD_505 = 5,
+ BOARD_505_2958 = 6,
+ BOARD_505A = 7,
+ BOARD_505AMX = 8
+};
+
+/* our private ioctl's */
+/* preamble length (0 - long, 1 - short, 2 - auto) */
+#define AT76_SET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 0)
+#define AT76_GET_SHORT_PREAMBLE (SIOCIWFIRSTPRIV + 1)
+/* which debug channels are enabled */
+#define AT76_SET_DEBUG (SIOCIWFIRSTPRIV + 2)
+#define AT76_GET_DEBUG (SIOCIWFIRSTPRIV + 3)
+/* power save mode (incl. the Atmel proprietary smart save mode) */
+#define AT76_SET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 4)
+#define AT76_GET_POWERSAVE_MODE (SIOCIWFIRSTPRIV + 5)
+/* min and max channel times for scan */
+#define AT76_SET_SCAN_TIMES (SIOCIWFIRSTPRIV + 6)
+#define AT76_GET_SCAN_TIMES (SIOCIWFIRSTPRIV + 7)
+/* scan mode (0 - active, 1 - passive) */
+#define AT76_SET_SCAN_MODE (SIOCIWFIRSTPRIV + 8)
+#define AT76_GET_SCAN_MODE (SIOCIWFIRSTPRIV + 9)
+
+#define CMD_STATUS_IDLE 0x00
+#define CMD_STATUS_COMPLETE 0x01
+#define CMD_STATUS_UNKNOWN 0x02
+#define CMD_STATUS_INVALID_PARAMETER 0x03
+#define CMD_STATUS_FUNCTION_NOT_SUPPORTED 0x04
+#define CMD_STATUS_TIME_OUT 0x07
+#define CMD_STATUS_IN_PROGRESS 0x08
+#define CMD_STATUS_HOST_FAILURE 0xff
+#define CMD_STATUS_SCAN_FAILED 0xf0
+
+/* answers to get op mode */
+#define OPMODE_NONE 0x00
+#define OPMODE_NORMAL_NIC_WITH_FLASH 0x01
+#define OPMODE_HW_CONFIG_MODE 0x02
+#define OPMODE_DFU_MODE_WITH_FLASH 0x03
+#define OPMODE_NORMAL_NIC_WITHOUT_FLASH 0x04
+
+#define CMD_SET_MIB 0x01
+#define CMD_GET_MIB 0x02
+#define CMD_SCAN 0x03
+#define CMD_JOIN 0x04
+#define CMD_START_IBSS 0x05
+#define CMD_RADIO 0x06
+#define CMD_STARTUP 0x0B
+#define CMD_GETOPMODE 0x33
+
+#define MIB_LOCAL 0x01
+#define MIB_MAC_ADDR 0x02
+#define MIB_MAC 0x03
+#define MIB_MAC_MGMT 0x05
+#define MIB_MAC_WEP 0x06
+#define MIB_PHY 0x07
+#define MIB_FW_VERSION 0x08
+#define MIB_MDOMAIN 0x09
+
+#define ADHOC_MODE 1
+#define INFRASTRUCTURE_MODE 2
+
+/* values for struct mib_local, field preamble_type */
+#define PREAMBLE_TYPE_LONG 0
+#define PREAMBLE_TYPE_SHORT 1
+#define PREAMBLE_TYPE_AUTO 2
+
+/* values for tx_rate */
+#define TX_RATE_1MBIT 0
+#define TX_RATE_2MBIT 1
+#define TX_RATE_5_5MBIT 2
+#define TX_RATE_11MBIT 3
+#define TX_RATE_AUTO 4
+
+/* power management modes */
+#define AT76_PM_OFF 1
+#define AT76_PM_ON 2
+#define AT76_PM_SMART 3
+
+struct hwcfg_r505 {
+ u8 cr39_values[14];
+ u8 reserved1[14];
+ u8 bb_cr[14];
+ u8 pidvid[4];
+ u8 mac_addr[ETH_ALEN];
+ u8 regulatory_domain;
+ u8 reserved2[14];
+ u8 cr15_values[14];
+ u8 reserved3[3];
+} __attribute__((packed));
+
+struct hwcfg_rfmd {
+ u8 cr20_values[14];
+ u8 cr21_values[14];
+ u8 bb_cr[14];
+ u8 pidvid[4];
+ u8 mac_addr[ETH_ALEN];
+ u8 regulatory_domain;
+ u8 low_power_values[14];
+ u8 normal_power_values[14];
+ u8 reserved1[3];
+} __attribute__((packed));
+
+struct hwcfg_intersil {
+ u8 mac_addr[ETH_ALEN];
+ u8 cr31_values[14];
+ u8 cr58_values[14];
+ u8 pidvid[4];
+ u8 regulatory_domain;
+ u8 reserved[1];
+} __attribute__((packed));
+
+union at76_hwcfg {
+ struct hwcfg_intersil i;
+ struct hwcfg_rfmd r3;
+ struct hwcfg_r505 r5;
+};
+
+#define WEP_SMALL_KEY_LEN (40 / 8)
+#define WEP_LARGE_KEY_LEN (104 / 8)
+
+struct at76_card_config {
+ u8 exclude_unencrypted;
+ u8 promiscuous_mode;
+ u8 short_retry_limit;
+ u8 encryption_type;
+ __le16 rts_threshold;
+ __le16 fragmentation_threshold; /* 256..2346 */
+ u8 basic_rate_set[4];
+ u8 auto_rate_fallback; /* 0,1 */
+ u8 channel;
+ u8 privacy_invoked;
+ u8 wep_default_key_id; /* 0..3 */
+ u8 current_ssid[32];
+ u8 wep_default_key_value[4][WEP_KEY_LEN];
+ u8 ssid_len;
+ u8 short_preamble;
+ __le16 beacon_period;
+} __attribute__((packed));
+
+struct at76_command {
+ u8 cmd;
[...5873 lines suppressed...]
+{
+ int ret;
+ struct at76_priv *priv;
+ struct fwentry *fwe;
+ struct usb_device *udev;
+ int op_mode;
+ int need_ext_fw = 0;
+ struct mib_fw_version fwv;
+ int board_type = (int)id->driver_info;
+
+ udev = usb_get_dev(interface_to_usbdev(interface));
+
+ /* Load firmware into kernel memory */
+ fwe = at76_load_firmware(udev, board_type);
+ if (!fwe) {
+ ret = -ENOENT;
+ goto error;
+ }
+
+ op_mode = at76_get_op_mode(udev);
+
+ at76_dbg(DBG_DEVSTART, "opmode %d", op_mode);
+
+ /* we get OPMODE_NONE with 2.4.23, SMC2662W-AR ???
+ we get 204 with 2.4.23, Fiberline FL-WL240u (505A+RFMD2958) ??? */
+
+ if (op_mode == OPMODE_HW_CONFIG_MODE) {
+ err("cannot handle a device in HW_CONFIG_MODE (opmode %d)",
+ op_mode);
+ ret = -EBUSY;
+ goto error;
+ }
+
+ if (op_mode != OPMODE_NORMAL_NIC_WITH_FLASH
+ && op_mode != OPMODE_NORMAL_NIC_WITHOUT_FLASH) {
+ /* download internal firmware part */
+ at76_dbg(DBG_DEVSTART, "downloading internal firmware");
+ ret = at76_load_internal_fw(udev, fwe);
+ if (ret < 0) {
+ err("error %d downloading internal firmware", ret);
+ goto error;
+ }
+ usb_put_dev(udev);
+ return ret;
+ }
+
+ /* Internal firmware already inside the device. Get firmware
+ * version to test if external firmware is loaded.
+ * This works only for newer firmware, e.g. the Intersil 0.90.x
+ * says "control timeout on ep0in" and subsequent
+ * at76_get_op_mode() fail too :-( */
+
+ /* if version >= 0.100.x.y or device with built-in flash we can
+ * query the device for the fw version */
+ if ((fwe->fw_version.major > 0 || fwe->fw_version.minor >= 100)
+ || (op_mode == OPMODE_NORMAL_NIC_WITH_FLASH)) {
+ ret = at76_get_mib(udev, MIB_FW_VERSION, &fwv, sizeof(fwv));
+ if (ret < 0 || (fwv.major | fwv.minor) == 0)
+ need_ext_fw = 1;
+ } else
+ /* No way to check firmware version, reload to be sure */
+ need_ext_fw = 1;
+
+ if (need_ext_fw) {
+ at76_dbg(DBG_DEVSTART, "downloading external firmware");
+
+ ret = at76_load_external_fw(udev, fwe);
+ if (ret)
+ goto error;
+
+ /* Re-check firmware version */
+ ret = at76_get_mib(udev, MIB_FW_VERSION, &fwv, sizeof(fwv));
+ if (ret < 0) {
+ err("error %d getting firmware version", ret);
+ goto error;
+ }
+
+ /* Major and minor version must match */
+ if (fwv.major != fwe->fw_version.major
+ || fwv.minor != fwe->fw_version.minor) {
+ printk(KERN_ERR DRIVER_NAME
+ ": wrong firmware version, loaded %d.%d.%d-%d, "
+ "read back %d.%d.%d-%d\n",
+ fwe->fw_version.major, fwe->fw_version.minor,
+ fwe->fw_version.patch, fwe->fw_version.build,
+ fwv.major, fwv.minor, fwv.patch, fwv.build);
+ ret = -EBUSY;
+ goto error;
+ }
+ }
+
+ priv = at76_alloc_new_device(udev);
+ if (!priv) {
+ ret = -ENOMEM;
+ goto error;
+ }
+
+ SET_NETDEV_DEV(priv->netdev, &interface->dev);
+ usb_set_intfdata(interface, priv);
+
+ memcpy(&priv->fw_version, &fwv, sizeof(struct mib_fw_version));
+ priv->board_type = board_type;
+
+ ret = at76_init_new_device(priv, interface);
+ if (ret < 0)
+ at76_delete_device(priv);
+
+ return ret;
+
+error:
+ usb_put_dev(udev);
+ return ret;
+}
+
+static void at76_disconnect(struct usb_interface *interface)
+{
+ struct at76_priv *priv;
+
+ priv = usb_get_intfdata(interface);
+ usb_set_intfdata(interface, NULL);
+
+ /* Disconnect after loading internal firmware */
+ if (!priv)
+ return;
+
+ printk(KERN_INFO "%s: disconnecting\n", priv->netdev->name);
+ at76_delete_device(priv);
+ printk(KERN_INFO DRIVER_NAME ": disconnected\n");
+}
+
+/* Structure for registering this driver with the USB subsystem */
+static struct usb_driver at76_driver = {
+ .name = DRIVER_NAME,
+ .probe = at76_probe,
+ .disconnect = at76_disconnect,
+ .id_table = dev_table,
+};
+
+static int __init at76_mod_init(void)
+{
+ int result;
+
+ printk(KERN_INFO DRIVER_DESC " " DRIVER_VERSION " loading\n");
+
+ mutex_init(&fw_mutex);
+
+ /* register this driver with the USB subsystem */
+ result = usb_register(&at76_driver);
+ if (result < 0)
+ err("usb_register failed (status %d)", result);
+
+ led_trigger_register_simple("at76_usb-tx", &ledtrig_tx);
+ return result;
+}
+
+static void __exit at76_mod_exit(void)
+{
+ int i;
+
+ printk(KERN_INFO DRIVER_DESC " " DRIVER_VERSION " unloading\n");
+ usb_deregister(&at76_driver);
+ for (i = 0; i < ARRAY_SIZE(firmwares); i++) {
+ if (firmwares[i].fw)
+ release_firmware(firmwares[i].fw);
+ }
+ led_trigger_unregister_simple(ledtrig_tx);
+}
+
+module_param_named(debug, at76_debug, int, 0600);
+MODULE_PARM_DESC(debug, "Debugging level");
+
+module_init(at76_mod_init);
+module_exit(at76_mod_exit);
+
+MODULE_AUTHOR("Oliver Kurth <oku at masqmail.cx>");
+MODULE_AUTHOR("Joerg Albert <joerg.albert at gmx.de>");
+MODULE_AUTHOR("Alex <alex at foogod.com>");
+MODULE_AUTHOR("Nick Jones");
+MODULE_AUTHOR("Balint Seeber <n0_5p4m_p13453 at hotmail.com>");
+MODULE_AUTHOR("Pavel Roskin <proski at gnu.org>");
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("GPL");
diff -up linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.22.noarch/drivers/net/wireless/Kconfig
--- linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig 2007-09-27 11:19:26.000000000 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/Kconfig 2007-09-27 11:23:09.000000000 -0400
@@ -381,6 +381,14 @@ config PCI_HERMES
common. Some of the built-in wireless adaptors in laptops are of
this variety.
+config USB_ATMEL
+ tristate "Atmel at76c503/at76c505/at76c505a USB cards"
+ depends on WLAN_80211 && USB
+ select FW_LOADER
+ ---help---
+ Enable support for USB Wireless devices using Atmel at76c503,
+ at76c505 or at76c505a chips.
+
config PCMCIA_HERMES
tristate "Hermes PCMCIA card support"
depends on PCMCIA && HERMES
linux-2.6-ath5k.patch:
--- NEW FILE linux-2.6-ath5k.patch ---
diff -up linux-2.6.22.noarch/MAINTAINERS.orig linux-2.6.22.noarch/MAINTAINERS
--- linux-2.6.22.noarch/MAINTAINERS.orig 2007-09-27 11:23:09.000000000 -0400
+++ linux-2.6.22.noarch/MAINTAINERS 2007-09-27 11:24:13.000000000 -0400
@@ -652,6 +652,14 @@ M: ecashin at coraid.com
W: http://www.coraid.com/support/linux
S: Supported
+ATHEROS ATH5K WIRELESS DRIVER
+P: Jiri Slaby
+M: jirislaby at gmail.com
+P: Luis R. Rodriguez
+M: mcgrof at gmail.com
+L: linux-wireless at vger.kernel.org
+S: Maintained
+
ATL1 ETHERNET DRIVER
P: Jay Cliburn
M: jcliburn at gmail.com
diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/ath5k.h
--- /dev/null 2007-09-27 08:31:24.563724082 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/ath5k.h 2007-09-27 11:24:13.000000000 -0400
@@ -0,0 +1,1104 @@
+/*
+ * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
+ * Copyright (c) 2006-2007 Nick Kossifidis <mickflemm at gmail.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef _ATH5K_H
+#define _ATH5K_H
+
+/* Set this to 1 to disable regulatory domain restrictions for channel tests.
+ * WARNING: This is for debuging only and has side effects (eg. scan takes too
+ * long and results timeouts). It's also illegal to tune to some of the
+ * supported frequencies in some countries, so use this at your own risk,
+ * you've been warned. */
+#define CHAN_DEBUG 0
+
+/* Uncomment this for debuging (warning that it results in TOO much output) */
+/*#define AR5K_DEBUG 1 */
+
+#include <linux/types.h>
+#include <net/mac80211.h>
+
+#include "ath5k_hw.h"
+#include "ath5k_regdom.h"
+
+/* PCI IDs */
+#define PCI_DEVICE_ID_ATHEROS_AR5210 0x0007 /* AR5210 */
+#define PCI_DEVICE_ID_ATHEROS_AR5311 0x0011 /* AR5311 */
+#define PCI_DEVICE_ID_ATHEROS_AR5211 0x0012 /* AR5211 */
+#define PCI_DEVICE_ID_ATHEROS_AR5212 0x0013 /* AR5212 */
+#define PCI_DEVICE_ID_3COM_3CRDAG675 0x0013 /* 3CRDAG675 (Atheros AR5212) */
+#define PCI_DEVICE_ID_3COM_2_3CRPAG175 0x0013 /* 3CRPAG175 (Atheros AR5212) */
+#define PCI_DEVICE_ID_ATHEROS_AR5210_AP 0x0207 /* AR5210 (Early) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_IBM 0x1014 /* AR5212 (IBM MiniPCI) */
+#define PCI_DEVICE_ID_ATHEROS_AR5210_DEFAULT 0x1107 /* AR5210 (no eeprom) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_DEFAULT 0x1113 /* AR5212 (no eeprom) */
+#define PCI_DEVICE_ID_ATHEROS_AR5211_DEFAULT 0x1112 /* AR5211 (no eeprom) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_FPGA 0xf013 /* AR5212 (emulation board) */
+#define PCI_DEVICE_ID_ATHEROS_AR5211_LEGACY 0xff12 /* AR5211 (emulation board) */
+#define PCI_DEVICE_ID_ATHEROS_AR5211_FPGA11B 0xf11b /* AR5211 (emulation board) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_REV2 0x0052 /* AR5312 WMAC (AP31) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_REV7 0x0057 /* AR5312 WMAC (AP30-040) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_REV8 0x0058 /* AR5312 WMAC (AP43-030) */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0014 0x0014 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0015 0x0015 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0016 0x0016 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0017 0x0017 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0018 0x0018 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR5212_0019 0x0019 /* AR5212 compatible */
+#define PCI_DEVICE_ID_ATHEROS_AR2413 0x001a /* AR2413 (Griffin-lite) */
+#define PCI_DEVICE_ID_ATHEROS_AR5413 0x001b /* AR5413 (Eagle) */
+#define PCI_DEVICE_ID_ATHEROS_AR5424 0x001c /* AR5424 (Condor PCI-E) */
+
+/****************************\
+ GENERIC DRIVER DEFINITIONS
+\****************************/
+
+#define AR5K_PRINTF(fmt, ...) printk("%s: " fmt, __func__, ##__VA_ARGS__)
+#define AR5K_PRINT(fmt) printk("%s: " fmt, __func__)
+#ifdef AR5K_DEBUG
+#define AR5K_TRACE printk(KERN_DEBUG "%s:%d\n", __func__, __LINE__)
+#else
+#define AR5K_TRACE
+#endif
+
+/*
+ * Some tuneable values (these should be changeable by the user)
+ */
+#define AR5K_TUNE_DMA_BEACON_RESP 2
+#define AR5K_TUNE_SW_BEACON_RESP 10
+#define AR5K_TUNE_ADDITIONAL_SWBA_BACKOFF 0
+#define AR5K_TUNE_RADAR_ALERT false
+#define AR5K_TUNE_MIN_TX_FIFO_THRES 1
+#define AR5K_TUNE_MAX_TX_FIFO_THRES ((IEEE80211_MAX_LEN / 64) + 1)
+#define AR5K_TUNE_RSSI_THRES 1792
+#define AR5K_TUNE_REGISTER_TIMEOUT 20000
+#define AR5K_TUNE_REGISTER_DWELL_TIME 20000
+#define AR5K_TUNE_BEACON_INTERVAL 100
+#define AR5K_TUNE_AIFS 2
+#define AR5K_TUNE_AIFS_11B 2
+#define AR5K_TUNE_AIFS_XR 0
+#define AR5K_TUNE_CWMIN 15
+#define AR5K_TUNE_CWMIN_11B 31
+#define AR5K_TUNE_CWMIN_XR 3
+#define AR5K_TUNE_CWMAX 1023
+#define AR5K_TUNE_CWMAX_11B 1023
+#define AR5K_TUNE_CWMAX_XR 7
+#define AR5K_TUNE_NOISE_FLOOR -72
+#define AR5K_TUNE_MAX_TXPOWER 60
+#define AR5K_TUNE_DEFAULT_TXPOWER 30
+#define AR5K_TUNE_TPC_TXPOWER true
+#define AR5K_TUNE_ANT_DIVERSITY true
+#define AR5K_TUNE_HWTXTRIES 4
+
+/* token to use for aifs, cwmin, cwmax in MadWiFi */
+#define AR5K_TXQ_USEDEFAULT ((u32) -1)
+
+/* GENERIC CHIPSET DEFINITIONS */
+
+/* MAC Chips */
+enum ath5k_version {
+ AR5K_AR5210 = 0,
+ AR5K_AR5211 = 1,
+ AR5K_AR5212 = 2,
+};
+
+/* PHY Chips */
+enum ath5k_radio {
+ AR5K_RF5110 = 0,
+ AR5K_RF5111 = 1,
+ AR5K_RF5112 = 2,
+};
+
+/*
+ * Common silicon revision/version values
+ */
+enum ath5k_srev_type {
+ AR5K_VERSION_VER,
+ AR5K_VERSION_REV,
+ AR5K_VERSION_RAD,
+ AR5K_VERSION_DEV
+};
+
+struct ath5k_srev_name {
+ const char *sr_name;
+ enum ath5k_srev_type sr_type;
+ u_int sr_val;
+};
+
+#define AR5K_SREV_NAME { \
+ { "5210", AR5K_VERSION_VER, AR5K_SREV_VER_AR5210 }, \
+ { "5311", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311 }, \
+ { "5311a", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311A },\
+ { "5311b", AR5K_VERSION_VER, AR5K_SREV_VER_AR5311B },\
+ { "5211", AR5K_VERSION_VER, AR5K_SREV_VER_AR5211 }, \
+ { "5212", AR5K_VERSION_VER, AR5K_SREV_VER_AR5212 }, \
+ { "5213", AR5K_VERSION_VER, AR5K_SREV_VER_AR5213 }, \
+ { "xxxx", AR5K_VERSION_VER, AR5K_SREV_UNKNOWN }, \
+ { "5110", AR5K_VERSION_RAD, AR5K_SREV_RAD_5110 }, \
+ { "5111", AR5K_VERSION_RAD, AR5K_SREV_RAD_5111 }, \
+ { "2111", AR5K_VERSION_RAD, AR5K_SREV_RAD_2111 }, \
+ { "5112", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112 }, \
+ { "5112a", AR5K_VERSION_RAD, AR5K_SREV_RAD_5112A }, \
+ { "2112", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112 }, \
+ { "2112a", AR5K_VERSION_RAD, AR5K_SREV_RAD_2112A }, \
+ { "xxxx", AR5K_VERSION_RAD, AR5K_SREV_UNKNOWN }, \
+ { "2413", AR5K_VERSION_DEV, PCI_DEVICE_ID_ATHEROS_AR2413 },\
+ { "5413", AR5K_VERSION_DEV, PCI_DEVICE_ID_ATHEROS_AR5413 },\
+ { "5424", AR5K_VERSION_DEV, PCI_DEVICE_ID_ATHEROS_AR5424 },\
+ { "xxxx", AR5K_VERSION_DEV, AR5K_SREV_UNKNOWN } \
+}
+
+#define AR5K_SREV_UNKNOWN 0xffff
+
+#define AR5K_SREV_VER_AR5210 0x00
+#define AR5K_SREV_VER_AR5311 0x10
+#define AR5K_SREV_VER_AR5311A 0x20
+#define AR5K_SREV_VER_AR5311B 0x30
+#define AR5K_SREV_VER_AR5211 0x40
+#define AR5K_SREV_VER_AR5212 0x50
+#define AR5K_SREV_VER_AR5213 0x55
+#define AR5K_SREV_VER_UNSUPP 0x60
+
+#define AR5K_SREV_RAD_5110 0x00
+#define AR5K_SREV_RAD_5111 0x10
+#define AR5K_SREV_RAD_5111A 0x15
[...13868 lines suppressed...]
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ * of any contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * $FreeBSD: src/sys/dev/ath/if_athvar.h,v 1.20 2005/01/24 20:31:24 sam Exp $
+ */
+
+/*
+ * Defintions for the Atheros Wireless LAN controller driver.
+ */
+#ifndef _DEV_ATH_ATHVAR_H
+#define _DEV_ATH_ATHVAR_H
+
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/wireless.h>
+#include <linux/if_ether.h>
+
+#include "ath5k.h"
+
+#define ATH_TIMEOUT 1000
+
+#define ATH_LONG_CALIB 30 /* seconds */
+#define ATH_SHORT_CALIB 1
+
+/*
+ * Maximum acceptable MTU
+ * MAXFRAMEBODY - WEP - QOS - RSN/WPA:
+ * 2312 - 8 - 2 - 12 = 2290
+ */
+#define ATH_MAX_MTU 2290
+#define ATH_MIN_MTU 32
+
+#define ATH_RXBUF 40 /* number of RX buffers */
+#define ATH_TXBUF 200 /* number of TX buffers */
+#define ATH_TXDESC 1 /* number of descriptors per buffer */
+#define ATH_BCBUF 1 /* number of beacon buffers */
+#define ATH_TXMAXTRY 11 /* max number of transmit attempts */
+#define ATH_TXINTR_PERIOD 5 /* max number of batched tx descriptors */
+
+#define ATH_BEACON_AIFS_DEFAULT 0 /* default aifs for ap beacon q */
+#define ATH_BEACON_CWMIN_DEFAULT 0 /* default cwmin for ap beacon q */
+#define ATH_BEACON_CWMAX_DEFAULT 0 /* default cwmax for ap beacon q */
+
+#define ATH_RSSI_LPF_LEN 10
+#define ATH_RSSI_DUMMY_MARKER 0x127
+#define ATH_EP_MUL(x, mul) ((x) * (mul))
+#define ATH_RSSI_IN(x) (ATH_EP_MUL((x), AR5K_RSSI_EP_MULTIPLIER))
+#define ATH_LPF_RSSI(x, y, len) \
+ ((x != ATH_RSSI_DUMMY_MARKER) ? (((x) * ((len) - 1) + (y)) / (len)) : (y))
+#define ATH_RSSI_LPF(x, y) do { \
+ if ((y) >= -20) \
+ x = ATH_LPF_RSSI((x), ATH_RSSI_IN((y)), ATH_RSSI_LPF_LEN); \
+} while (0)
+
+struct ath_buf {
+ struct list_head list;
+ unsigned int flags; /* tx descriptor flags */
+ struct ath_desc *desc; /* virtual addr of desc */
+ dma_addr_t daddr; /* physical addr of desc */
+ struct sk_buff *skb; /* skbuff for buf */
+ dma_addr_t skbaddr;/* physical addr of skb data */
+ struct ieee80211_tx_control ctl;
+};
+
+/*
+ * Data transmit queue state. One of these exists for each
+ * hardware transmit queue. Packets sent to us from above
+ * are assigned to queues based on their priority. Not all
+ * devices support a complete set of hardware transmit queues.
+ * For those devices the array sc_ac2q will map multiple
+ * priorities to fewer hardware queues (typically all to one
+ * hardware queue).
+ */
+struct ath_txq {
+ unsigned int qnum; /* hardware q number */
+ u32 *link; /* link ptr in last TX desc */
+ struct list_head q; /* transmit queue */
+ spinlock_t lock; /* lock on q and link */
+ bool setup;
+};
+
+#if CHAN_DEBUG
+#define ATH_CHAN_MAX (26+26+26+200+200)
+#else
+#define ATH_CHAN_MAX (14+14+14+252+20) /* XXX what's the max? */
+#endif
+
+struct ath_softc {
+ struct pci_dev *pdev; /* for dma mapping */
+ void __iomem *iobase; /* address of the device */
+ struct mutex lock; /* dev-level lock */
+ struct ieee80211_tx_queue_stats tx_stats;
+ struct ieee80211_low_level_stats ll_stats;
+ struct ieee80211_hw *hw; /* IEEE 802.11 common */
+ struct ieee80211_hw_mode modes[NUM_IEEE80211_MODES];
+ struct ieee80211_channel channels[ATH_CHAN_MAX];
+ struct ieee80211_rate rates[AR5K_MAX_RATES * NUM_IEEE80211_MODES];
+ enum ieee80211_if_types opmode;
+ struct ath_hw *ah; /* Atheros HW */
+
+ int debug;
+
+ struct ath_buf *bufptr; /* allocated buffer ptr */
+ struct ath_desc *desc; /* TX/RX descriptors */
+ dma_addr_t desc_daddr; /* DMA (physical) address */
+ size_t desc_len; /* size of TX/RX descriptors */
+ u16 cachelsz; /* cache line size */
+
+ DECLARE_BITMAP(status, 6);
+#define ATH_STAT_INVALID 0 /* disable hardware accesses */
+#define ATH_STAT_MRRETRY 1 /* multi-rate retry support */
+#define ATH_STAT_PROMISC 2
+#define ATH_STAT_LEDBLINKING 3 /* LED blink operation active */
+#define ATH_STAT_LEDENDBLINK 4 /* finish LED blink operation */
+#define ATH_STAT_LEDSOFT 5 /* enable LED gpio status */
+
+ unsigned int curmode; /* current phy mode */
+ struct ieee80211_channel *curchan; /* current h/w channel */
+
+ int iface_id; /* add/remove_interface id */
+
+ struct {
+ u8 rxflags; /* radiotap rx flags */
+ u8 txflags; /* radiotap tx flags */
+ u16 ledon; /* softled on time */
+ u16 ledoff; /* softled off time */
+ } hwmap[32]; /* h/w rate ix mappings */
+
+ enum ath5k_int imask; /* interrupt mask copy */
+
+ DECLARE_BITMAP(keymap, AR5K_KEYCACHE_SIZE); /* key use bit map */
+
+ u8 bssidmask[ETH_ALEN];
+
+ unsigned int led_pin, /* GPIO pin for driving LED */
+ led_on, /* pin setting for LED on */
+ led_off; /* off time for current blink */
+ struct timer_list led_tim; /* led off timer */
+ u8 led_rxrate; /* current rx rate for LED */
+ u8 led_txrate; /* current tx rate for LED */
+
+ struct tasklet_struct restq; /* reset tasklet */
+
+ unsigned int rxbufsize; /* rx size based on mtu */
+ struct list_head rxbuf; /* receive buffer */
+ spinlock_t rxbuflock;
+ u32 *rxlink; /* link ptr in last RX desc */
+ struct tasklet_struct rxtq; /* rx intr tasklet */
+
+ struct list_head txbuf; /* transmit buffer */
+ spinlock_t txbuflock;
+ unsigned int txbuf_len; /* buf count in txbuf list */
+ struct ath_txq txqs[2]; /* beacon and tx */
+
+ struct ath_txq *txq; /* beacon and tx*/
+ struct tasklet_struct txtq; /* tx intr tasklet */
+
+ struct ath_buf *bbuf; /* beacon buffer */
+ unsigned int bhalq, /* HAL q for outgoing beacons */
+ bmisscount, /* missed beacon transmits */
+ bintval, /* beacon interval */
+ bsent;
+
+ struct timer_list calib_tim; /* calibration timer */
+};
+
+#define ath5k_hw_hasbssidmask(_ah) \
+ (ath5k_hw_get_capability(_ah, AR5K_CAP_BSSIDMASK, 0, NULL) == 0)
+#define ath5k_hw_hasveol(_ah) \
+ (ath5k_hw_get_capability(_ah, AR5K_CAP_VEOL, 0, NULL) == 0)
+
+#endif
linux-2.6-mac80211-extras.patch:
--- NEW FILE linux-2.6-mac80211-extras.patch ---
diff -up linux-2.6.22.noarch/include/linux/ieee80211.h.orig linux-2.6.22.noarch/include/linux/ieee80211.h
--- linux-2.6.22.noarch/include/linux/ieee80211.h.orig 2007-09-27 11:19:25.000000000 -0400
+++ linux-2.6.22.noarch/include/linux/ieee80211.h 2007-09-27 11:25:33.000000000 -0400
@@ -106,6 +106,75 @@ struct ieee80211_hdr {
} __attribute__ ((packed));
+struct ieee80211_ht_capability {
+ __le16 capabilities_info;
+ u8 mac_ht_params_info;
+ u8 supported_mcs_set[16];
+ __le16 extended_ht_capability_info;
+ __le32 tx_BF_capability_info;
+ u8 antenna_selection_info;
+}__attribute__ ((packed));
+
+struct ieee80211_ht_additional_info {
+ u8 control_chan;
+ u8 ht_param;
+ __le16 operation_mode;
+ __le16 stbc_param;
+ u8 basic_set[16];
+}__attribute__ ((packed));
+
+
+#define IEEE80211_TSINFO_TYPE(a) ((a.byte1 & 0x01) >> 0)
+#define IEEE80211_TSINFO_TSID(a) ((a.byte1 & 0x1E) >> 1)
+#define IEEE80211_TSINFO_DIR(a) ((a.byte1 & 0x60) >> 5)
+#define IEEE80211_TSINFO_POLICY(a) ((a.byte1 & 0x80) >> 7 + \
+ (a.byte2 & 0x01) << 1)
+#define IEEE80211_TSINFO_AGG(a) ((a.byte2 & 0x02) >> 1)
+#define IEEE80211_TSINFO_APSD(a) ((a.byte2 & 0x04) >> 2)
+#define IEEE80211_TSINFO_UP(a) ((a.byte2 & 0x38) >> 3)
+#define IEEE80211_TSINFO_ACK(a) ((a.byte2 & 0xC0) >> 6)
+#define IEEE80211_TSINFO_SCHEDULE(a) ((a.byte3 & 0x01) >> 0)
+
+#define IEEE80211_SET_TSINFO_TYPE(i, d) (i.byte1 |= (d << 0) & 0x01)
+#define IEEE80211_SET_TSINFO_TSID(i, d) (i.byte1 |= (d << 1) & 0x1E)
+#define IEEE80211_SET_TSINFO_DIR(i, d) (i.byte1 |= (d << 5) & 0x60)
+#define IEEE80211_SET_TSINFO_POLICY(i, d) \
+do { \
+ i.byte1 |= (d & 0x01) << 7; \
+ i.byte2 |= (d & 0x02) >> 1; \
+} while(0)
+#define IEEE80211_SET_TSINFO_AGG(i, d) (i.byte2 |= (d << 1) & 0x02)
+#define IEEE80211_SET_TSINFO_APSD(i, d) (i.byte2 |= (d << 2) & 0x04)
+#define IEEE80211_SET_TSINFO_UP(i, d) (i.byte2 |= (d << 3) & 0x38)
+#define IEEE80211_SET_TSINFO_ACK(i, d) (i.byte2 |= (d << 6) & 0xC0)
+#define IEEE80211_SET_TSINFO_SCHEDULE(i, d) (i.byte3 |= (d << 0) & 0x01)
+
+struct ieee80211_ts_info {
+ u8 byte1;
+ u8 byte2;
+ u8 byte3;
+} __attribute__ ((packed));
+
+struct ieee80211_elem_tspec {
+ struct ieee80211_ts_info ts_info;
+ __le16 nominal_msdu_size;
+ __le16 max_msdu_size;
+ __le32 min_service_interval;
+ __le32 max_service_interval;
+ __le32 inactivity_interval;
+ __le32 suspension_interval;
+ __le32 service_start_time;
+ __le32 min_data_rate;
+ __le32 mean_data_rate;
+ __le32 peak_data_rate;
+ __le32 burst_size;
+ __le32 delay_bound;
+ __le32 min_phy_rate;
+ __le16 surplus_band_allow;
+ __le16 medium_time;
+} __attribute__ ((packed));
+
+
struct ieee80211_mgmt {
__le16 frame_control;
__le16 duration;
@@ -173,9 +242,51 @@ struct ieee80211_mgmt {
struct {
u8 action_code;
u8 dialog_token;
+ u8 variable[0];
+ } __attribute__ ((packed)) addts_req;
+ struct {
+ u8 action_code;
+ u8 dialog_token;
+ __le16 status_code;
+ u8 variable[0];
+ } __attribute__ ((packed)) addts_resp;
+ struct {
+ u8 action_code;
+ struct ieee80211_ts_info ts_info;
+ __le16 reason_code;
+ } __attribute__ ((packed)) delts;
+ struct {
+ u8 action_code;
+ u8 dialog_token;
u8 status_code;
u8 variable[0];
} __attribute__ ((packed)) wme_action;
+ struct {
+ u8 action_code;
+ u8 dest[6];
+ u8 src[6];
+ __le16 capab_info;
+ __le16 timeout;
+ /* Followed by Supported Rates and
+ * Extended Supported Rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) dls_req;
+ struct {
+ u8 action_code;
+ __le16 status_code;
+ u8 dest[6];
+ u8 src[6];
+ /* Followed by Capability Information,
+ * Supported Rates and Extended
+ * Supported Rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) dls_resp;
+ struct {
+ u8 action_code;
+ u8 dest[6];
+ u8 src[6];
+ __le16 reason_code;
+ } __attribute__ ((packed)) dls_teardown;
struct{
u8 action_code;
u8 element_id;
@@ -184,6 +295,25 @@ struct ieee80211_mgmt {
u8 new_chan;
u8 switch_count;
} __attribute__((packed)) chan_switch;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ __le16 capab;
+ __le16 timeout;
+ __le16 start_seq_num;
+ } __attribute__((packed)) addba_req;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ __le16 status;
+ __le16 capab;
+ __le16 timeout;
+ } __attribute__((packed)) addba_resp;
+ struct{
+ u8 action_code;
+ __le16 params;
+ __le16 reason_code;
+ }__attribute__((packed)) delba;
} u;
} __attribute__ ((packed)) action;
} u;
@@ -270,6 +400,18 @@ enum ieee80211_statuscode {
WLAN_STATUS_UNSUPP_RSN_VERSION = 44,
WLAN_STATUS_INVALID_RSN_IE_CAP = 45,
WLAN_STATUS_CIPHER_SUITE_REJECTED = 46,
+ /* 802.11e */
+ WLAN_STATUS_UNSPECIFIED_QOS = 32,
+ WLAN_STATUS_ASSOC_DENIED_NOBANDWIDTH = 33,
+ WLAN_STATUS_ASSOC_DENIED_LOWACK = 34,
+ WLAN_STATUS_ASSOC_DENIED_UNSUPP_QOS = 35,
+ WLAN_STATUS_REQUEST_DECLINED = 37,
+ WLAN_STATUS_INVALID_QOS_PARAM = 38,
+ WLAN_STATUS_CHANGE_TSPEC = 39,
+ WLAN_STATUS_WAIT_TS_DELAY = 47,
+ WLAN_STATUS_NO_DIRECT_LINK = 48,
+ WLAN_STATUS_STA_NOT_PRESENT = 49,
+ WLAN_STATUS_STA_NOT_QSTA = 50,
};
@@ -300,9 +442,50 @@ enum ieee80211_reasoncode {
WLAN_REASON_INVALID_RSN_IE_CAP = 22,
WLAN_REASON_IEEE8021X_FAILED = 23,
WLAN_REASON_CIPHER_SUITE_REJECTED = 24,
+ /* 802.11e */
+ WLAN_REASON_DISASSOC_UNSPECIFIED_QOS = 32,
+ WLAN_REASON_DISASSOC_QAP_NO_BANDWIDTH = 33,
+ WLAN_REASON_DISASSOC_LOW_ACK = 34,
+ WLAN_REASON_DISASSOC_QAP_EXCEED_TXOP = 35,
+ WLAN_REASON_QSTA_LEAVE_QBSS = 36,
+ WLAN_REASON_QSTA_NOT_USE = 37,
+ WLAN_REASON_QSTA_REQUIRE_SETUP = 38,
+ WLAN_REASON_QSTA_TIMEOUT = 39,
+ WLAN_REASON_QSTA_CIPHER_NOT_SUPP = 45,
};
+/* Category Code */
+enum ieee80211_category {
+ WLAN_CATEGORY_SPECTRUM_MGMT = 0,
+ WLAN_CATEGORY_QOS = 1,
+ WLAN_CATEGORY_DLS = 2,
+ WLAN_CATEGORY_BACK = 3,
[...3755 lines suppressed...]
+ printk(" %02x", mic[i]);
+ printk("\n");
+ printk(KERN_DEBUG " SA=" MAC_FMT " DA=" MAC_FMT " key",
+ MAC_ARG(sa), MAC_ARG(da));
+ for (i = 0; i < 8; i++)
+ printk(" %02x", key[i]);
+ printk(" (%d)\n", authenticator);
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
mac80211_ev_michael_mic_failure(rx->dev, rx->key->conf.keyidx,
(void *) skb->data);
@@ -208,12 +271,30 @@ static int tkip_encrypt_skb(struct ieee8
memmove(pos, pos + TKIP_IV_LEN, hdrlen);
pos += hdrlen;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_REPLAY)
+ goto skip_iv_inc;
+iv_inc:
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
/* Increase IV for the frame */
key->u.tkip.iv16++;
if (key->u.tkip.iv16 == 0)
key->u.tkip.iv32++;
- if (tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_SKIP_SEQ) {
+ test = 0;
+ goto iv_inc;
+ }
+skip_iv_inc:
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
+ if (tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ && !tx->wpa_test
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+ ) {
hdr = (struct ieee80211_hdr *)skb->data;
/* hwaccel - with preallocated room for IV */
@@ -255,6 +336,37 @@ ieee80211_tx_h_tkip_encrypt(struct ieee8
tx->u.tx.control->iv_len = TKIP_IV_LEN;
ieee80211_tx_set_iswep(tx);
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if ((tx->sta && tx->sta->wpa_trigger & WPA_TRIGGER_FAIL_TX_ICV) ||
+ (!(tx->flags & IEEE80211_TXRXD_TXUNICAST) &&
+ tx->local->wpa_trigger & WPA_TRIGGER_FAIL_TX_ICV)) {
+ wpa_test = 1;
+ }
+
+ if (tx->sta) {
+ test = tx->sta->wpa_trigger;
+ tx->sta->wpa_trigger &=
+ ~(WPA_TRIGGER_TX_REPLAY | WPA_TRIGGER_TX_REPLAY_FRAG |
+ WPA_TRIGGER_TX_SKIP_SEQ);
+ } else {
+ test = tx->local->wpa_trigger;
+ tx->local->wpa_trigger &=
+ ~(WPA_TRIGGER_TX_REPLAY | WPA_TRIGGER_TX_REPLAY_FRAG |
+ WPA_TRIGGER_TX_SKIP_SEQ);
+ }
+ if (test &
+ (WPA_TRIGGER_TX_REPLAY | WPA_TRIGGER_TX_REPLAY_FRAG |
+ WPA_TRIGGER_TX_SKIP_SEQ)) {
+ printk(KERN_INFO "%s: WPA testing - TKIP TX packet number "
+ "%s%s%s%s\n", tx->dev->name,
+ tx->sta ? "[UNICAST]" : "[MULTICAST]",
+ test & WPA_TRIGGER_TX_REPLAY ? "[REPLAY]" : "",
+ test & WPA_TRIGGER_TX_REPLAY_FRAG ?
+ "[REPLAY FRAG]" : "",
+ test & WPA_TRIGGER_TX_SKIP_SEQ ? "[SKIP SEQ]" : "");
+ }
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
if ((tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) &&
!(tx->key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) &&
!wpa_test) {
@@ -268,6 +380,10 @@ ieee80211_tx_h_tkip_encrypt(struct ieee8
if (tx->u.tx.extra_frag) {
int i;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_REPLAY_FRAG)
+ test |= WPA_TRIGGER_TX_REPLAY;
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
for (i = 0; i < tx->u.tx.num_extra_frag; i++) {
if (tkip_encrypt_skb(tx, tx->u.tx.extra_frag[i], test)
< 0)
@@ -275,6 +391,23 @@ ieee80211_tx_h_tkip_encrypt(struct ieee8
}
}
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (tx->sta && tx->sta->wpa_trigger & WPA_TRIGGER_FAIL_TX_ICV) {
+ printk(KERN_INFO "%s: WPA testing - corrupting TX TKIP ICV "
+ "for STA " MAC_FMT "\n",
+ tx->dev->name, MAC_ARG(tx->sta->addr));
+ tx->sta->wpa_trigger &= ~WPA_TRIGGER_FAIL_TX_ICV;
+ skb->data[skb->len - 1]++;
+ } else if (!(tx->flags & IEEE80211_TXRXD_TXUNICAST) &&
+ tx->local->wpa_trigger & WPA_TRIGGER_FAIL_TX_ICV) {
+ printk(KERN_INFO "%s: WPA testing - corrupting TX TKIP ICV "
+ "for Group Key\n",
+ tx->dev->name);
+ tx->local->wpa_trigger &= ~WPA_TRIGGER_FAIL_TX_ICV;
+ skb->data[skb->len - 1]++;
+ }
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
return TXRX_CONTINUE;
}
@@ -299,6 +432,17 @@ ieee80211_rx_h_tkip_decrypt(struct ieee8
if (!rx->sta || skb->len - hdrlen < 12)
return TXRX_DROP;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (rx->sta && rx->sta->wpa_trigger & WPA_TRIGGER_FAIL_RX_ICV) {
+ printk(KERN_INFO "%s: WPA testing - corrupting RX TKIP ICV "
+ "for STA " MAC_FMT "\n",
+ rx->dev->name, MAC_ARG(rx->sta->addr));
+ rx->sta->wpa_trigger &= ~WPA_TRIGGER_FAIL_RX_ICV;
+ skb->data[skb->len - 1]++;
+ wpa_test = 1;
+ }
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
if (rx->u.rx.status->flag & RX_FLAG_DECRYPTED) {
if (rx->u.rx.status->flag & RX_FLAG_IV_STRIPPED) {
/*
@@ -467,12 +611,26 @@ static int ccmp_encrypt_skb(struct ieee8
/* PN = PN + 1 */
pn = key->u.ccmp.tx_pn;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_REPLAY)
+ goto skip_pn_inc;
+pn_inc:
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
for (i = CCMP_PN_LEN - 1; i >= 0; i--) {
pn[i]++;
if (pn[i])
break;
}
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_SKIP_SEQ) {
+ test = 0;
+ goto pn_inc;
+ }
+skip_pn_inc:
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
ccmp_pn2hdr(pos, pn, key->conf.keyidx);
if (key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) {
@@ -504,6 +662,27 @@ ieee80211_tx_h_ccmp_encrypt(struct ieee8
if (!key || key->conf.alg != ALG_CCMP || !WLAN_FC_DATA_PRESENT(fc))
return TXRX_CONTINUE;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (tx->sta) {
+ test = tx->sta->wpa_trigger;
+ tx->sta->wpa_trigger = 0;
+ } else {
+ test = tx->local->wpa_trigger;
+ tx->local->wpa_trigger = 0;
+ }
+ if (test &
+ (WPA_TRIGGER_TX_REPLAY | WPA_TRIGGER_TX_REPLAY_FRAG |
+ WPA_TRIGGER_TX_SKIP_SEQ)) {
+ printk(KERN_INFO "%s: WPA testing - CCMP TX packet number "
+ "%s%s%s%s\n", tx->dev->name,
+ tx->sta ? "[UNICAST]" : "[MULTICAST]",
+ test & WPA_TRIGGER_TX_REPLAY ? "[REPLAY]" : "",
+ test & WPA_TRIGGER_TX_REPLAY_FRAG ?
+ "[REPLAY FRAG]" : "",
+ test & WPA_TRIGGER_TX_SKIP_SEQ ? "[SKIP SEQ]" : "");
+ }
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
+
tx->u.tx.control->icv_len = CCMP_MIC_LEN;
tx->u.tx.control->iv_len = CCMP_HDR_LEN;
ieee80211_tx_set_iswep(tx);
@@ -521,6 +700,10 @@ ieee80211_tx_h_ccmp_encrypt(struct ieee8
if (tx->u.tx.extra_frag) {
int i;
+#ifdef CONFIG_HOSTAPD_WPA_TESTING
+ if (test & WPA_TRIGGER_TX_REPLAY_FRAG)
+ test |= WPA_TRIGGER_TX_REPLAY;
+#endif /* CONFIG_HOSTAPD_WPA_TESTING */
for (i = 0; i < tx->u.tx.num_extra_frag; i++) {
if (ccmp_encrypt_skb(tx, tx->u.tx.extra_frag[i], test)
< 0)
linux-2.6-zd1211rw-mac80211.patch:
--- NEW FILE linux-2.6-zd1211rw-mac80211.patch ---
diff -up linux-2.6.22.noarch/MAINTAINERS.orig linux-2.6.22.noarch/MAINTAINERS
--- linux-2.6.22.noarch/MAINTAINERS.orig 2007-09-27 11:24:13.000000000 -0400
+++ linux-2.6.22.noarch/MAINTAINERS 2007-09-27 11:24:44.000000000 -0400
@@ -4157,6 +4157,16 @@ W: http://www.qsl.net/dl1bke/
L: linux-hams at vger.kernel.org
S: Maintained
+ZD1211RW-MAC80211 WIRELESS DRIVER
+P: Daniel Drake
+M: dsd at gentoo.org
+P: Ulrich Kunitz
+M: kune at deine-taler.de
+W: http://zd1211.ath.cx/wiki/DriverRewrite
+L: linux-wireless at vger.kernel.org
+L: zd1211-devs at lists.sourceforge.net (subscribers-only)
+S: Maintained
+
ZD1211RW WIRELESS DRIVER
P: Daniel Drake
M: dsd at gentoo.org
diff -up linux-2.6.22.noarch/drivers/net/wireless/Makefile.orig linux-2.6.22.noarch/drivers/net/wireless/Makefile
--- linux-2.6.22.noarch/drivers/net/wireless/Makefile.orig 2007-09-27 11:24:13.000000000 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/Makefile 2007-09-27 11:24:44.000000000 -0400
@@ -41,6 +41,7 @@ obj-$(CONFIG_BCM43XX) += bcm43xx/
obj-$(CONFIG_B43) += b43/
obj-$(CONFIG_B43LEGACY) += b43legacy/
obj-$(CONFIG_ZD1211RW) += zd1211rw/
+obj-$(CONFIG_ZD1211RW_MAC80211) += zd1211rw-mac80211/
# 16-bit wireless PCMCIA client drivers
obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/zd1211rw-mac80211/zd_chip.c
--- /dev/null 2007-09-27 08:31:24.563724082 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw-mac80211/zd_chip.c 2007-09-27 11:24:44.000000000 -0400
@@ -0,0 +1,1619 @@
+/* zd_chip.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+/* This file implements all the hardware specific functions for the ZD1211
+ * and ZD1211B chips. Support for the ZD1211B was possible after Timothy
+ * Legge sent me a ZD1211B device. Thank you Tim. -- Uli
+ */
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+
+#include "zd_def.h"
+#include "zd_chip.h"
+#include "zd_ieee80211.h"
+#include "zd_mac.h"
+#include "zd_rf.h"
+#include "zd_util.h"
+
+void zd_chip_init(struct zd_chip *chip,
+ struct ieee80211_hw *hw,
+ struct usb_interface *intf)
+{
+ memset(chip, 0, sizeof(*chip));
+ mutex_init(&chip->mutex);
+ zd_usb_init(&chip->usb, hw, intf);
+ zd_rf_init(&chip->rf);
+}
+
+void zd_chip_clear(struct zd_chip *chip)
+{
+ ZD_ASSERT(!mutex_is_locked(&chip->mutex));
+ zd_usb_clear(&chip->usb);
+ zd_rf_clear(&chip->rf);
+ mutex_destroy(&chip->mutex);
+ ZD_MEMCLEAR(chip, sizeof(*chip));
+}
+
+static int scnprint_mac_oui(struct zd_chip *chip, char *buffer, size_t size)
+{
+ u8 *addr = zd_chip_to_mac(chip)->hwaddr;
+ return scnprintf(buffer, size, "%02x-%02x-%02x",
+ addr[0], addr[1], addr[2]);
+}
+
+/* Prints an identifier line, which will support debugging. */
+static int scnprint_id(struct zd_chip *chip, char *buffer, size_t size)
+{
+ int i = 0;
+
+ i = scnprintf(buffer, size, "zd1211%s chip ",
+ zd_chip_is_zd1211b(chip) ? "b" : "");
+ i += zd_usb_scnprint_id(&chip->usb, buffer+i, size-i);
+ i += scnprintf(buffer+i, size-i, " ");
+ i += scnprint_mac_oui(chip, buffer+i, size-i);
+ i += scnprintf(buffer+i, size-i, " ");
+ i += zd_rf_scnprint_id(&chip->rf, buffer+i, size-i);
+ i += scnprintf(buffer+i, size-i, " pa%1x %c%c%c%c%c", chip->pa_type,
+ chip->patch_cck_gain ? 'g' : '-',
+ chip->patch_cr157 ? '7' : '-',
+ chip->patch_6m_band_edge ? '6' : '-',
+ chip->new_phy_layout ? 'N' : '-',
+ chip->al2230s_bit ? 'S' : '-');
+ return i;
+}
+
+static void print_id(struct zd_chip *chip)
+{
+ char buffer[80];
+
+ scnprint_id(chip, buffer, sizeof(buffer));
+ buffer[sizeof(buffer)-1] = 0;
+ dev_info(zd_chip_dev(chip), "%s\n", buffer);
+}
+
+static zd_addr_t inc_addr(zd_addr_t addr)
+{
+ u16 a = (u16)addr;
+ /* Control registers use byte addressing, but everything else uses word
+ * addressing. */
+ if ((a & 0xf000) == CR_START)
+ a += 2;
+ else
+ a += 1;
+ return (zd_addr_t)a;
+}
+
+/* Read a variable number of 32-bit values. Parameter count is not allowed to
+ * exceed USB_MAX_IOREAD32_COUNT.
+ */
+int zd_ioread32v_locked(struct zd_chip *chip, u32 *values, const zd_addr_t *addr,
+ unsigned int count)
+{
+ int r;
+ int i;
+ zd_addr_t *a16 = (zd_addr_t *)NULL;
+ u16 *v16;
+ unsigned int count16;
+
+ if (count > USB_MAX_IOREAD32_COUNT)
+ return -EINVAL;
+
+ /* Allocate a single memory block for values and addresses. */
+ count16 = 2*count;
+ a16 = (zd_addr_t *)kmalloc(count16 * (sizeof(zd_addr_t) + sizeof(u16)),
+ GFP_KERNEL);
+ if (!a16) {
+ dev_dbg_f(zd_chip_dev(chip),
+ "error ENOMEM in allocation of a16\n");
+ r = -ENOMEM;
+ goto out;
+ }
+ v16 = (u16 *)(a16 + count16);
+
+ for (i = 0; i < count; i++) {
+ int j = 2*i;
+ /* We read the high word always first. */
+ a16[j] = inc_addr(addr[i]);
+ a16[j+1] = addr[i];
+ }
+
+ r = zd_ioread16v_locked(chip, v16, a16, count16);
+ if (r) {
+ dev_dbg_f(zd_chip_dev(chip),
+ "error: zd_ioread16v_locked. Error number %d\n", r);
+ goto out;
+ }
+
+ for (i = 0; i < count; i++) {
+ int j = 2*i;
+ values[i] = (v16[j] << 16) | v16[j+1];
+ }
+
+out:
+ kfree((void *)a16);
+ return r;
+}
+
+int _zd_iowrite32v_locked(struct zd_chip *chip, const struct zd_ioreq32 *ioreqs,
+ unsigned int count)
+{
+ int i, j, r;
+ struct zd_ioreq16 *ioreqs16;
+ unsigned int count16;
+
+ ZD_ASSERT(mutex_is_locked(&chip->mutex));
+
+ if (count == 0)
+ return 0;
+ if (count > USB_MAX_IOWRITE32_COUNT)
+ return -EINVAL;
[...7628 lines suppressed...]
+ hash = mac->multicast_hash;
+ spin_unlock_irq(&mac->lock);
+
+ zd_chip_set_multicast_hash(&mac->chip, &hash);
+}
+
+static void zd_op_set_multicast_list(struct ieee80211_hw *hw,
+ unsigned short dev_flags, int mc_count)
+{
+ struct zd_mc_hash hash;
+ struct zd_mac *mac = zd_hw_mac(hw);
+ unsigned long flags;
+
+ if ((dev_flags & (IFF_PROMISC|IFF_ALLMULTI)) ||
+ has_monitor_interfaces(mac))
+ {
+ zd_mc_add_all(&hash);
+ } else {
+ struct dev_mc_list *mc = NULL;
+ void *tmp = NULL;
+
+ zd_mc_clear(&hash);
+ while ((mc = ieee80211_get_mc_list_item(hw, mc, &tmp))) {
+ dev_dbg_f(zd_mac_dev(mac), "mc addr " MAC_FMT "\n",
+ MAC_ARG(mc->dmi_addr));
+ zd_mc_add_addr(&hash, mc->dmi_addr);
+ }
+ }
+
+ spin_lock_irqsave(&mac->lock, flags);
+ mac->multicast_hash = hash;
+ spin_unlock_irqrestore(&mac->lock, flags);
+ queue_work(zd_workqueue, &mac->set_multicast_hash_work);
+}
+
+static void set_rts_cts_work(struct work_struct *work)
+{
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, set_rts_cts_work);
+ unsigned long flags;
+ unsigned int short_preamble;
+
+ mutex_lock(&mac->chip.mutex);
+
+ spin_lock_irqsave(&mac->lock, flags);
+ mac->updating_rts_rate = 0;
+ short_preamble = mac->short_preamble;
+ spin_unlock_irqrestore(&mac->lock, flags);
+
+ zd_chip_set_rts_cts_rate_locked(&mac->chip, short_preamble);
+ mutex_unlock(&mac->chip.mutex);
+}
+
+static void zd_op_erp_ie_changed(struct ieee80211_hw *hw, u8 changes,
+ int cts_protection, int preamble)
+{
+ struct zd_mac *mac = zd_hw_mac(hw);
+ unsigned long flags;
+
+ dev_dbg_f(zd_mac_dev(mac), "changes: %x\n", changes);
+
+ if (changes & IEEE80211_ERP_CHANGE_PREAMBLE) {
+ spin_lock_irqsave(&mac->lock, flags);
+ mac->short_preamble = !preamble;
+ if (!mac->updating_rts_rate) {
+ mac->updating_rts_rate = 1;
+ /* FIXME: should disable TX here, until work has
+ * completed and RTS_CTS reg is updated */
+ queue_work(zd_workqueue, &mac->set_rts_cts_work);
+ }
+ spin_unlock_irqrestore(&mac->lock, flags);
+ }
+}
+
+static const struct ieee80211_ops zd_ops = {
+ .tx = zd_op_tx,
+ .open = zd_op_open,
+ .stop = zd_op_stop,
+ .add_interface = zd_op_add_interface,
+ .remove_interface = zd_op_remove_interface,
+ .config = zd_op_config,
+ .config_interface = zd_op_config_interface,
+ .set_multicast_list = zd_op_set_multicast_list,
+ .erp_ie_changed = zd_op_erp_ie_changed,
+};
+
+struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf)
+{
+ struct zd_mac *mac;
+ struct ieee80211_hw *hw;
+ int i;
+
+ hw = ieee80211_alloc_hw(sizeof(struct zd_mac), &zd_ops);
+ if (!hw) {
+ dev_dbg_f(&intf->dev, "out of memory\n");
+ return NULL;
+ }
+
+ mac = zd_hw_mac(hw);
+
+ memset(mac, 0, sizeof(*mac));
+ spin_lock_init(&mac->lock);
+ mac->hw = hw;
+
+ mac->type = IEEE80211_IF_TYPE_MGMT;
+ mac->hwaddr = hw->wiphy->perm_addr;
+
+ memcpy(mac->channels, zd_channels, sizeof(zd_channels));
+ memcpy(mac->rates, zd_rates, sizeof(zd_rates));
+ mac->modes[0].mode = MODE_IEEE80211G;
+ mac->modes[0].num_rates = ARRAY_SIZE(zd_rates);
+ mac->modes[0].rates = mac->rates;
+ mac->modes[0].num_channels = ARRAY_SIZE(zd_channels);
+ mac->modes[0].channels = mac->channels;
+ mac->modes[1].mode = MODE_IEEE80211B;
+ mac->modes[1].num_rates = 4;
+ mac->modes[1].rates = mac->rates;
+ mac->modes[1].num_channels = ARRAY_SIZE(zd_channels);
+ mac->modes[1].channels = mac->channels;
+
+ hw->flags = IEEE80211_HW_RX_INCLUDES_FCS |
+ IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED;
+ hw->max_rssi = 100;
+ hw->max_signal = 100;
+
+ hw->queues = 1;
+ hw->extra_tx_headroom = sizeof(struct zd_ctrlset);
+
+ skb_queue_head_init(&mac->ack_wait_queue);
+
+ for (i = 0; i < 2; i++) {
+ if (ieee80211_register_hwmode(hw, &mac->modes[i])) {
+ dev_dbg_f(&intf->dev, "cannot register hwmode\n");
+ ieee80211_free_hw(hw);
+ return NULL;
+ }
+ }
+
+ zd_chip_init(&mac->chip, hw, intf);
+ housekeeping_init(mac);
+ INIT_WORK(&mac->set_multicast_hash_work, set_multicast_hash_handler);
+ INIT_WORK(&mac->set_rts_cts_work, set_rts_cts_work);
+
+ SET_IEEE80211_DEV(hw, &intf->dev);
+ return hw;
+}
+
+#define LINK_LED_WORK_DELAY HZ
+
+static void link_led_handler(struct work_struct *work)
+{
+ struct zd_mac *mac =
+ container_of(work, struct zd_mac, housekeeping.link_led_work.work);
+ struct zd_chip *chip = &mac->chip;
+ int is_associated;
+ int r;
+
+ spin_lock_irq(&mac->lock);
+ is_associated = mac->associated;
+ spin_unlock_irq(&mac->lock);
+
+ r = zd_chip_control_leds(chip,
+ is_associated ? LED_ASSOCIATED : LED_SCANNING);
+ if (r)
+ dev_err(zd_mac_dev(mac), "zd_chip_control_leds error %d\n", r);
+
+ queue_delayed_work(zd_workqueue, &mac->housekeeping.link_led_work,
+ LINK_LED_WORK_DELAY);
+}
+
+static void housekeeping_init(struct zd_mac *mac)
+{
+ INIT_DELAYED_WORK(&mac->housekeeping.link_led_work, link_led_handler);
+}
+
+static void housekeeping_enable(struct zd_mac *mac)
+{
+ dev_dbg_f(zd_mac_dev(mac), "\n");
+ queue_delayed_work(zd_workqueue, &mac->housekeeping.link_led_work,
+ 0);
+}
+
+static void housekeeping_disable(struct zd_mac *mac)
+{
+ dev_dbg_f(zd_mac_dev(mac), "\n");
+ cancel_rearming_delayed_workqueue(zd_workqueue,
+ &mac->housekeeping.link_led_work);
+ zd_chip_control_leds(&mac->chip, LED_OFF);
+}
diff -up linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.22.noarch/drivers/net/wireless/Kconfig
--- linux-2.6.22.noarch/drivers/net/wireless/Kconfig.orig 2007-09-27 11:24:13.000000000 -0400
+++ linux-2.6.22.noarch/drivers/net/wireless/Kconfig 2007-09-27 11:24:44.000000000 -0400
@@ -616,6 +616,7 @@ source "drivers/net/wireless/bcm43xx/Kco
source "drivers/net/wireless/b43/Kconfig"
source "drivers/net/wireless/b43legacy/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"
+source "drivers/net/wireless/zd1211rw-mac80211/Kconfig"
source "drivers/net/wireless/rt2x00/Kconfig"
source "drivers/net/wireless/iwlwifi/Kconfig"
Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3348
retrieving revision 1.3349
diff -u -r1.3348 -r1.3349
--- kernel-2.6.spec 26 Sep 2007 23:18:11 -0000 1.3348
+++ kernel-2.6.spec 27 Sep 2007 15:33:19 -0000 1.3349
@@ -614,7 +614,10 @@
Patch681: linux-2.6-wireless.patch
Patch682: linux-2.6-wireless-pending.patch
Patch683: linux-2.6-bcm43xx-pci-neuter.patch
-Patch690: git-wireless-dev.patch
+Patch690: linux-2.6-at76.patch
+Patch691: linux-2.6-ath5k.patch
+Patch692: linux-2.6-zd1211rw-mac80211.patch
+Patch693: linux-2.6-mac80211-extras.patch
Patch700: linux-2.6-b43-module-alias.patch
Patch701: linux-2.6-b43-use-old-fw.patch
Patch710: linux-2.6-e1000-ich9.patch
@@ -1349,8 +1352,11 @@
# pre-2.6.24 wireless patches from upstream
ApplyPatch linux-2.6-wireless-pending.patch
-# Add wireless stack and driver updates from wireless-dev
-ApplyPatch git-wireless-dev.patch
+# Add misc wireless bits from upstream wireless tree
+ApplyPatch linux-2.6-at76.patch
+ApplyPatch linux-2.6-ath5k.patch
+ApplyPatch linux-2.6-zd1211rw-mac80211.patch
+ApplyPatch linux-2.6-mac80211-extras.patch
# avoid bcm3xx vs bcm43xx-mac80211 PCI ID conflicts
ApplyPatch linux-2.6-bcm43xx-pci-neuter.patch
# add module alias for "bcm43xx-mac80211"
@@ -2355,6 +2361,9 @@
%endif
%changelog
+* Thu Sep 27 2007 John W. Linville <linville at redhat.com>
+- Update and restructure wireless patches
+
* Wed Sep 26 2007 Chuck Ebbert <cebbert at redhat.com>
- libata pata_sis: DMA fixes (#202291)
- libata sata_sil24: IRQ clearing race fixes
linux-2.6-wireless-pending.patch:
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.3 -r 1.4 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wireless-pending.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- linux-2.6-wireless-pending.patch 18 Sep 2007 15:08:25 -0000 1.3
+++ linux-2.6-wireless-pending.patch 27 Sep 2007 15:33:19 -0000 1.4
@@ -1,6 +1,1769 @@
+diff -up linux-2.6.22.noarch/CREDITS.orig linux-2.6.22.noarch/CREDITS
+--- linux-2.6.22.noarch/CREDITS.orig 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22.noarch/CREDITS 2007-09-27 11:00:31.000000000 -0400
+@@ -665,6 +665,11 @@ D: Minor updates to SCSI types, added /p
+ S: (ask for current address)
+ S: USA
+
++N: Robin Cornelius
++E: robincornelius at users.sourceforge.net
++D: Ralink rt2x00 WLAN driver
++S: Cornwall, U.K.
++
+ N: Mark Corner
+ E: mcorner at umich.edu
+ W: http://www.eecs.umich.edu/~mcorner/
+@@ -679,6 +684,11 @@ D: Kernel module SMART utilities
+ S: Santa Cruz, California
+ S: USA
+
++N: Luis Correia
++E: lfcorreia at users.sf.net
++D: Ralink rt2x00 WLAN driver
++S: Belas, Portugal
++
+ N: Alan Cox
+ W: http://www.linux.org.uk/diary/
+ D: Linux Networking (0.99.10->2.0.29)
+@@ -833,6 +843,12 @@ S: Lancs
+ S: PR4 6AX
+ S: United Kingdom
+
++N: Ivo van Doorn
++E: IvDoorn at gmail.com
++W: http://www.mendiosus.nl
++D: Ralink rt2x00 WLAN driver
++S: Haarlem, The Netherlands
++
+ N: John G Dorsey
+ E: john+ at cs.cmu.edu
+ D: ARM Linux ports to Assabet/Neponset, Spot
+@@ -3516,6 +3532,12 @@ S: Maastrichterweg 63
+ S: 5554 GG Valkenswaard
+ S: The Netherlands
+
++N: Mark Wallis
++E: mwallis at serialmonkey.com
++W: http://mark.serialmonkey.com
++D: Ralink rt2x00 WLAN driver
++S: Newcastle, Australia
++
+ N: Peter Shaobo Wang
+ E: pwang at mmdcorp.com
+ W: http://www.mmdcorp.com/pw/linux
+@@ -3650,6 +3672,15 @@ S: Alte Regensburger Str. 11a
+ S: 93149 Nittenau
+ S: Germany
+
++N: Gertjan van Wingerde
++E: gwingerde at home.nl
++D: Ralink rt2x00 WLAN driver
++D: Minix V2 file-system
++D: Misc fixes
++S: Geessinkweg 177
++S: 7544 TX Enschede
++S: The Netherlands
++
+ N: Lars Wirzenius
+ E: liw at iki.fi
+ D: Linux System Administrator's Guide, author, former maintainer
+diff -up linux-2.6.22.noarch/include/linux/nl80211.h.orig linux-2.6.22.noarch/include/linux/nl80211.h
+--- linux-2.6.22.noarch/include/linux/nl80211.h.orig 2007-07-08 19:32:17.000000000 -0400
++++ linux-2.6.22.noarch/include/linux/nl80211.h 2007-09-27 11:10:41.000000000 -0400
+@@ -7,7 +7,113 @@
+ */
+
+ /**
++ * enum nl80211_commands - supported nl80211 commands
++ *
++ * @NL80211_CMD_UNSPEC: unspecified command to catch errors
++ *
++ * @NL80211_CMD_GET_WIPHY: request information about a wiphy or dump request
++ * to get a list of all present wiphys.
++ * @NL80211_CMD_SET_WIPHY: set wiphy name, needs %NL80211_ATTR_WIPHY and
++ * %NL80211_ATTR_WIPHY_NAME.
++ * @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
++ * or rename notification. Has attributes %NL80211_ATTR_WIPHY and
++ * %NL80211_ATTR_WIPHY_NAME.
++ * @NL80211_CMD_DEL_WIPHY: Wiphy deleted. Has attributes
++ * %NL80211_ATTR_WIPHY and %NL80211_ATTR_WIPHY_NAME.
++ *
++ * @NL80211_CMD_GET_INTERFACE: Request an interface's configuration;
++ * either a dump request on a %NL80211_ATTR_WIPHY or a specific get
++ * on an %NL80211_ATTR_IFINDEX is supported.
++ * @NL80211_CMD_SET_INTERFACE: Set type of a virtual interface, requires
++ %NL80211_ATTR_IFINDEX and %NL80211_ATTR_IFTYPE.
++ * @NL80211_CMD_NEW_INTERFACE: Newly created virtual interface or response
++ * to %NL80211_CMD_GET_INTERFACE. Has %NL80211_ATTR_IFINDEX,
++ * %NL80211_ATTR_WIPHY and %NL80211_ATTR_IFTYPE attributes. Can also
++ * be sent from userspace to request creation of a new virtual interface,
++ * then requires attributes %NL80211_ATTR_WIPHY, %NL80211_ATTR_IFTYPE and
++ * %NL80211_ATTR_IFNAME.
++ * @NL80211_CMD_DEL_INTERFACE: Virtual interface was deleted, has attributes
++ * %NL80211_ATTR_IFINDEX and %NL80211_ATTR_WIPHY. Can also be sent from
++ * userspace to request deletion of a virtual interface, then requires
++ * attribute %NL80211_ATTR_IFINDEX.
++ *
++ * @NL80211_CMD_MAX: highest used command number
++ * @__NL80211_CMD_AFTER_LAST: internal use
++ */
++enum nl80211_commands {
++/* don't change the order or add anything inbetween, this is ABI! */
++ NL80211_CMD_UNSPEC,
++
++ NL80211_CMD_GET_WIPHY, /* can dump */
++ NL80211_CMD_SET_WIPHY,
++ NL80211_CMD_NEW_WIPHY,
++ NL80211_CMD_DEL_WIPHY,
++
++ NL80211_CMD_GET_INTERFACE, /* can dump */
++ NL80211_CMD_SET_INTERFACE,
++ NL80211_CMD_NEW_INTERFACE,
++ NL80211_CMD_DEL_INTERFACE,
++
++ /* add commands here */
++
++ /* used to define NL80211_CMD_MAX below */
++ __NL80211_CMD_AFTER_LAST,
++ NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1
++};
++
++/**
++ * enum nl80211_multicast_groups - multicast groups for nl80211
++ * @NL80211_GROUP_CONFIG: members of this group are notified of
++ * configuration changes
++ */
++enum nl80211_multicast_groups {
++ /* be notified of configuration changes like wiphy renames */
++ NL80211_GROUP_CONFIG,
++
++ /* add groups here */
++
++ /* keep last */
++ __NL80211_GROUP_AFTER_LAST
++};
++#define NL80211_GROUP_MAX (__NL80211_GROUP_AFTER_LAST - 1)
++
++
++/**
++ * enum nl80211_attrs - nl80211 netlink attributes
++ *
++ * @NL80211_ATTR_UNSPEC: unspecified attribute to catch errors
++ *
++ * @NL80211_ATTR_WIPHY: index of wiphy to operate on, cf.
++ * /sys/class/ieee80211/<phyname>/index
++ * @NL80211_ATTR_WIPHY_NAME: wiphy name (used for renaming)
++ *
++ * @NL80211_ATTR_IFINDEX: network interface index of the device to operate on
++ * @NL80211_ATTR_IFNAME: network interface name
++ * @NL80211_ATTR_IFTYPE: type of virtual interface, see &enum nl80211_iftype
++ *
++ * @NL80211_ATTR_MAX: highest attribute number currently defined
++ * @__NL80211_ATTR_AFTER_LAST: internal use
++ */
++enum nl80211_attrs {
++/* don't change the order or add anything inbetween, this is ABI! */
++ NL80211_ATTR_UNSPEC,
++
++ NL80211_ATTR_WIPHY,
++ NL80211_ATTR_WIPHY_NAME,
++
++ NL80211_ATTR_IFINDEX,
++ NL80211_ATTR_IFNAME,
++ NL80211_ATTR_IFTYPE,
++
++ /* add attributes here, update the policy in nl80211.c */
++
++ __NL80211_ATTR_AFTER_LAST,
++ NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
++};
++
++/**
+ * enum nl80211_iftype - (virtual) interface types
++ *
+ * @NL80211_IFTYPE_UNSPECIFIED: unspecified type, driver decides
+ * @NL80211_IFTYPE_ADHOC: independent BSS member
+ * @NL80211_IFTYPE_STATION: managed BSS member
+@@ -15,9 +121,10 @@
+ * @NL80211_IFTYPE_AP_VLAN: VLAN interface for access points
+ * @NL80211_IFTYPE_WDS: wireless distribution interface
+ * @NL80211_IFTYPE_MONITOR: monitor interface receiving all frames
++ * @NL80211_IFTYPE_MAX: highest interface type number currently defined
[...130476 lines suppressed...]
++ return 0;
++
++ return !mips_busprobe32(tmp, (bus->mmio + (pc->dev->core_index * SSB_CORE_SIZE)));
++}
++#endif /* CONFIG_SSB_PCICORE_HOSTMODE */
++
++
++/**************************************************
++ * Generic and Clientmode operation code.
++ **************************************************/
++
++static void ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
++{
++ /* Disable PCI interrupts. */
++ ssb_write32(pc->dev, SSB_INTVEC, 0);
++}
++
++void ssb_pcicore_init(struct ssb_pcicore *pc)
++{
++ struct ssb_device *dev = pc->dev;
++ struct ssb_bus *bus;
++
++ if (!dev)
++ return;
++ bus = dev->bus;
++ if (!ssb_device_is_enabled(dev))
++ ssb_device_enable(dev, 0);
++
++#ifdef CONFIG_SSB_PCICORE_HOSTMODE
++ pc->hostmode = pcicore_is_in_hostmode(pc);
++ if (pc->hostmode)
++ ssb_pcicore_init_hostmode(pc);
++#endif /* CONFIG_SSB_PCICORE_HOSTMODE */
++ if (!pc->hostmode)
++ ssb_pcicore_init_clientmode(pc);
++}
++
++static u32 ssb_pcie_read(struct ssb_pcicore *pc, u32 address)
++{
++ pcicore_write32(pc, 0x130, address);
++ return pcicore_read32(pc, 0x134);
++}
++
++static void ssb_pcie_write(struct ssb_pcicore *pc, u32 address, u32 data)
++{
++ pcicore_write32(pc, 0x130, address);
++ pcicore_write32(pc, 0x134, data);
++}
++
++static void ssb_pcie_mdio_write(struct ssb_pcicore *pc, u8 device,
++ u8 address, u16 data)
++{
++ const u16 mdio_control = 0x128;
++ const u16 mdio_data = 0x12C;
++ u32 v;
++ int i;
++
++ v = 0x80; /* Enable Preamble Sequence */
++ v |= 0x2; /* MDIO Clock Divisor */
++ pcicore_write32(pc, mdio_control, v);
++
++ v = (1 << 30); /* Start of Transaction */
++ v |= (1 << 28); /* Write Transaction */
++ v |= (1 << 17); /* Turnaround */
++ v |= (u32)device << 22;
++ v |= (u32)address << 18;
++ v |= data;
++ pcicore_write32(pc, mdio_data, v);
++ /* Wait for the device to complete the transaction */
++ udelay(10);
++ for (i = 0; i < 10; i++) {
++ v = pcicore_read32(pc, mdio_control);
++ if (v & 0x100 /* Trans complete */)
++ break;
++ msleep(1);
++ }
++ pcicore_write32(pc, mdio_control, 0);
++}
++
++static void ssb_broadcast_value(struct ssb_device *dev,
++ u32 address, u32 data)
++{
++ /* This is used for both, PCI and ChipCommon core, so be careful. */
++ BUILD_BUG_ON(SSB_PCICORE_BCAST_ADDR != SSB_CHIPCO_BCAST_ADDR);
++ BUILD_BUG_ON(SSB_PCICORE_BCAST_DATA != SSB_CHIPCO_BCAST_DATA);
++
++ ssb_write32(dev, SSB_PCICORE_BCAST_ADDR, address);
++ ssb_read32(dev, SSB_PCICORE_BCAST_ADDR); /* flush */
++ ssb_write32(dev, SSB_PCICORE_BCAST_DATA, data);
++ ssb_read32(dev, SSB_PCICORE_BCAST_DATA); /* flush */
++}
++
++static void ssb_commit_settings(struct ssb_bus *bus)
++{
++ struct ssb_device *dev;
++
++ dev = bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev;
++ if (WARN_ON(!dev))
++ return;
++ /* This forces an update of the cached registers. */
++ ssb_broadcast_value(dev, 0xFD8, 0);
++}
++
++int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc,
++ struct ssb_device *dev)
++{
++ struct ssb_device *pdev = pc->dev;
++ struct ssb_bus *bus;
++ int err = 0;
++ u32 tmp;
++
++ might_sleep();
++
++ if (!pdev)
++ goto out;
++ bus = pdev->bus;
++
++ /* Enable interrupts for this device. */
++ if (bus->host_pci &&
++ ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) {
++ u32 coremask;
++
++ /* Calculate the "coremask" for the device. */
++ coremask = (1 << dev->core_index);
++
++ err = pci_read_config_dword(bus->host_pci, SSB_PCI_IRQMASK, &tmp);
++ if (err)
++ goto out;
++ tmp |= coremask << 8;
++ err = pci_write_config_dword(bus->host_pci, SSB_PCI_IRQMASK, tmp);
++ if (err)
++ goto out;
++ } else {
++ u32 intvec;
++
++ intvec = ssb_read32(pdev, SSB_INTVEC);
++ if ((bus->chip_id & 0xFF00) == 0x4400) {
++ /* Workaround: On the BCM44XX the BPFLAG routing
++ * bit is wrong. Use a hardcoded constant. */
++ intvec |= 0x00000002;
++ } else {
++ tmp = ssb_read32(dev, SSB_TPSFLAG);
++ tmp &= SSB_TPSFLAG_BPFLAG;
++ intvec |= tmp;
++ }
++ ssb_write32(pdev, SSB_INTVEC, intvec);
++ }
++
++ /* Setup PCIcore operation. */
++ if (pc->setup_done)
++ goto out;
++ if (pdev->id.coreid == SSB_DEV_PCI) {
++ tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
++ tmp |= SSB_PCICORE_SBTOPCI_PREF;
++ tmp |= SSB_PCICORE_SBTOPCI_BURST;
++ pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
++
++ if (pdev->id.revision < 5) {
++ tmp = ssb_read32(pdev, SSB_IMCFGLO);
++ tmp &= ~SSB_IMCFGLO_SERTO;
++ tmp |= 2;
++ tmp &= ~SSB_IMCFGLO_REQTO;
++ tmp |= 3 << SSB_IMCFGLO_REQTO_SHIFT;
++ ssb_write32(pdev, SSB_IMCFGLO, tmp);
++ ssb_commit_settings(bus);
++ } else if (pdev->id.revision >= 11) {
++ tmp = pcicore_read32(pc, SSB_PCICORE_SBTOPCI2);
++ tmp |= SSB_PCICORE_SBTOPCI_MRM;
++ pcicore_write32(pc, SSB_PCICORE_SBTOPCI2, tmp);
++ }
++ } else {
++ WARN_ON(pdev->id.coreid != SSB_DEV_PCIE);
++ //TODO: Better make defines for all these magic PCIE values.
++ if ((pdev->id.revision == 0) || (pdev->id.revision == 1)) {
++ /* TLP Workaround register. */
++ tmp = ssb_pcie_read(pc, 0x4);
++ tmp |= 0x8;
++ ssb_pcie_write(pc, 0x4, tmp);
++ }
++ if (pdev->id.revision == 0) {
++ const u8 serdes_rx_device = 0x1F;
++
++ ssb_pcie_mdio_write(pc, serdes_rx_device,
++ 2 /* Timer */, 0x8128);
++ ssb_pcie_mdio_write(pc, serdes_rx_device,
++ 6 /* CDR */, 0x0100);
++ ssb_pcie_mdio_write(pc, serdes_rx_device,
++ 7 /* CDR BW */, 0x1466);
++ } else if (pdev->id.revision == 1) {
++ /* DLLP Link Control register. */
++ tmp = ssb_pcie_read(pc, 0x100);
++ tmp |= 0x40;
++ ssb_pcie_write(pc, 0x100, tmp);
++ }
++ }
++ pc->setup_done = 1;
++out:
++ return err;
++}
++EXPORT_SYMBOL(ssb_pcicore_dev_irqvecs_enable);
linux-2.6-wireless.patch:
Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-wireless.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- linux-2.6-wireless.patch 26 Sep 2007 18:58:34 -0000 1.11
+++ linux-2.6-wireless.patch 27 Sep 2007 15:33:19 -0000 1.12
@@ -1,6 +1,6 @@
diff -up linux-2.6.22.noarch/include/linux/ieee80211.h.orig linux-2.6.22.noarch/include/linux/ieee80211.h
--- linux-2.6.22.noarch/include/linux/ieee80211.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/linux/ieee80211.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/include/linux/ieee80211.h 2007-09-27 10:50:46.000000000 -0400
@@ -227,6 +227,17 @@ struct ieee80211_cts {
#define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10)
#define WLAN_CAPABILITY_DSSS_OFDM (1<<13)
@@ -21,7 +21,7 @@
WLAN_STATUS_SUCCESS = 0,
diff -up linux-2.6.22.noarch/include/net/cfg80211.h.orig linux-2.6.22.noarch/include/net/cfg80211.h
--- linux-2.6.22.noarch/include/net/cfg80211.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/cfg80211.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/include/net/cfg80211.h 2007-09-27 10:50:46.000000000 -0400
@@ -11,6 +11,44 @@
* Copyright 2006 Johannes Berg <johannes at sipsolutions.net>
*/
@@ -69,7 +69,7 @@
diff -up linux-2.6.22.noarch/include/net/mac80211.h.orig linux-2.6.22.noarch/include/net/mac80211.h
--- linux-2.6.22.noarch/include/net/mac80211.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/include/net/mac80211.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/include/net/mac80211.h 2007-09-27 10:50:46.000000000 -0400
@@ -347,9 +347,16 @@ enum ieee80211_if_types {
* @mac_addr: pointer to MAC address of the interface. This pointer is valid
* until the interface is removed (i.e. it cannot be used after
@@ -118,7 +118,7 @@
* headers). If the data in the sk_buff is too short to contain a valid 802.11
diff -up linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c.orig linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c
--- linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/ieee80211/ieee80211_wx.c 2007-09-27 10:50:46.000000000 -0400
@@ -90,14 +90,11 @@ static char *ieee80211_translate_scan(st
}
@@ -137,24 +137,104 @@
/* Add encryption capability */
diff -up linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c.orig linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c
---- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c.orig 2007-09-18 10:09:24.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c 2007-09-18 10:10:25.000000000 -0400
-@@ -271,8 +271,11 @@ ieee80211softmac_assoc_work(struct work_
+--- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c.orig 2007-09-27 10:46:59.000000000 -0400
++++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_assoc.c 2007-09-27 10:53:45.000000000 -0400
+@@ -271,8 +271,9 @@ ieee80211softmac_assoc_work(struct work_
*/
dprintk(KERN_INFO PFX "Associate: Scanning for networks first.\n");
ieee80211softmac_notify(mac->dev, IEEE80211SOFTMAC_EVENT_SCAN_FINISHED, ieee80211softmac_assoc_notify_scan, NULL);
- if (ieee80211softmac_start_scan(mac))
+ if (ieee80211softmac_start_scan(mac)) {
dprintk(KERN_INFO PFX "Associate: failed to initiate scan. Is device up?\n");
-+ mac->associnfo.associating = 0;
-+ mac->associnfo.associated = 0;
+ }
goto out;
} else {
mac->associnfo.associating = 0;
+diff -up linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c.orig linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c
+--- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c.orig 2007-09-27 10:46:57.000000000 -0400
++++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_wx.c 2007-09-27 10:53:45.000000000 -0400
+@@ -70,44 +70,30 @@ ieee80211softmac_wx_set_essid(struct net
+ char *extra)
+ {
+ struct ieee80211softmac_device *sm = ieee80211_priv(net_dev);
+- struct ieee80211softmac_network *n;
+ struct ieee80211softmac_auth_queue_item *authptr;
+ int length = 0;
+
+ check_assoc_again:
+ mutex_lock(&sm->associnfo.mutex);
+- /* Check if we're already associating to this or another network
+- * If it's another network, cancel and start over with our new network
+- * If it's our network, ignore the change, we're already doing it!
+- */
+ if((sm->associnfo.associating || sm->associnfo.associated) &&
+ (data->essid.flags && data->essid.length)) {
+- /* Get the associating network */
+- n = ieee80211softmac_get_network_by_bssid(sm, sm->associnfo.bssid);
+- if(n && n->essid.len == data->essid.length &&
+- !memcmp(n->essid.data, extra, n->essid.len)) {
+- dprintk(KERN_INFO PFX "Already associating or associated to "MAC_FMT"\n",
+- MAC_ARG(sm->associnfo.bssid));
+- goto out;
+- } else {
+- dprintk(KERN_INFO PFX "Canceling existing associate request!\n");
+- /* Cancel assoc work */
+- cancel_delayed_work(&sm->associnfo.work);
+- /* We don't have to do this, but it's a little cleaner */
+- list_for_each_entry(authptr, &sm->auth_queue, list)
+- cancel_delayed_work(&authptr->work);
+- sm->associnfo.bssvalid = 0;
+- sm->associnfo.bssfixed = 0;
+- sm->associnfo.associating = 0;
+- sm->associnfo.associated = 0;
+- /* We must unlock to avoid deadlocks with the assoc workqueue
+- * on the associnfo.mutex */
+- mutex_unlock(&sm->associnfo.mutex);
+- flush_scheduled_work();
+- /* Avoid race! Check assoc status again. Maybe someone started an
+- * association while we flushed. */
+- goto check_assoc_again;
+- }
++ dprintk(KERN_INFO PFX "Canceling existing associate request!\n");
++ /* Cancel assoc work */
++ cancel_delayed_work(&sm->associnfo.work);
++ /* We don't have to do this, but it's a little cleaner */
++ list_for_each_entry(authptr, &sm->auth_queue, list)
++ cancel_delayed_work(&authptr->work);
++ sm->associnfo.bssvalid = 0;
++ sm->associnfo.bssfixed = 0;
++ sm->associnfo.associating = 0;
++ sm->associnfo.associated = 0;
++ /* We must unlock to avoid deadlocks with the assoc workqueue
++ * on the associnfo.mutex */
++ mutex_unlock(&sm->associnfo.mutex);
++ flush_scheduled_work();
++ /* Avoid race! Check assoc status again. Maybe someone started an
++ * association while we flushed. */
++ goto check_assoc_again;
+ }
+
+ sm->associnfo.static_essid = 0;
+@@ -153,13 +139,13 @@ ieee80211softmac_wx_get_essid(struct net
+ data->essid.length = sm->associnfo.req_essid.len;
+ data->essid.flags = 1; /* active */
+ memcpy(extra, sm->associnfo.req_essid.data, sm->associnfo.req_essid.len);
+- }
+-
++ dprintk(KERN_INFO PFX "Getting essid from req_essid\n");
++ } else if (sm->associnfo.associated || sm->associnfo.associating) {
+ /* If we're associating/associated, return that */
+- if (sm->associnfo.associated || sm->associnfo.associating) {
+ data->essid.length = sm->associnfo.associate_essid.len;
+ data->essid.flags = 1; /* active */
+ memcpy(extra, sm->associnfo.associate_essid.data, sm->associnfo.associate_essid.len);
++ dprintk(KERN_INFO PFX "Getting essid from associate_essid\n");
+ }
+ mutex_unlock(&sm->associnfo.mutex);
+
diff -up linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_module.c.orig linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_module.c
--- linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_module.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_module.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/ieee80211/softmac/ieee80211softmac_module.c 2007-09-27 10:50:46.000000000 -0400
@@ -456,18 +456,13 @@ void
ieee80211softmac_add_network_locked(struct ieee80211softmac_device *mac,
struct ieee80211softmac_network *add_net)
@@ -216,7 +296,7 @@
return softmac_net;
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_iface.c.orig linux-2.6.22.noarch/net/mac80211/ieee80211_iface.c
--- linux-2.6.22.noarch/net/mac80211/ieee80211_iface.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_iface.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_iface.c 2007-09-27 10:50:46.000000000 -0400
@@ -157,6 +157,8 @@ void ieee80211_if_set_type(struct net_de
struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
int oldtype = sdata->type;
@@ -236,7 +316,7 @@
printk(KERN_WARNING "%s: %s: Unknown interface type 0x%x",
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_ioctl.c.orig linux-2.6.22.noarch/net/mac80211/ieee80211_ioctl.c
--- linux-2.6.22.noarch/net/mac80211/ieee80211_ioctl.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_ioctl.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_ioctl.c 2007-09-27 10:50:46.000000000 -0400
@@ -27,20 +27,6 @@
#include "aes_ccm.h"
#include "debugfs_key.h"
@@ -749,7 +829,7 @@
(iw_handler) ieee80211_ioctl_siwfrag, /* SIOCSIWFRAG */
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_rate.c.orig linux-2.6.22.noarch/net/mac80211/ieee80211_rate.c
--- linux-2.6.22.noarch/net/mac80211/ieee80211_rate.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_rate.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_rate.c 2007-09-27 10:50:46.000000000 -0400
@@ -24,11 +24,10 @@ int ieee80211_rate_control_register(stru
{
struct rate_control_alg *alg;
@@ -765,7 +845,7 @@
mutex_lock(&rate_ctrl_mutex);
diff -up linux-2.6.22.noarch/net/mac80211/Makefile.orig linux-2.6.22.noarch/net/mac80211/Makefile
--- linux-2.6.22.noarch/net/mac80211/Makefile.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/Makefile 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/Makefile 2007-09-27 10:50:46.000000000 -0400
@@ -13,6 +13,7 @@ mac80211-objs := \
ieee80211_iface.o \
ieee80211_rate.o \
@@ -775,8 +855,8 @@
aes_ccm.o \
wme.o \
diff -up /dev/null linux-2.6.22.noarch/net/mac80211/regdomain.c
---- /dev/null 2007-09-18 08:44:28.563724362 -0400
-+++ linux-2.6.22.noarch/net/mac80211/regdomain.c 2007-09-18 10:10:25.000000000 -0400
+--- /dev/null 2007-09-27 08:31:24.563724082 -0400
++++ linux-2.6.22.noarch/net/mac80211/regdomain.c 2007-09-27 10:50:46.000000000 -0400
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2002-2005, Instant802 Networks, Inc.
@@ -938,7 +1018,7 @@
+
diff -up linux-2.6.22.noarch/net/mac80211/hostapd_ioctl.h.orig linux-2.6.22.noarch/net/mac80211/hostapd_ioctl.h
--- linux-2.6.22.noarch/net/mac80211/hostapd_ioctl.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/hostapd_ioctl.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/hostapd_ioctl.h 2007-09-27 10:50:46.000000000 -0400
@@ -26,24 +26,16 @@
* mess shall be deleted completely. */
enum {
@@ -966,7 +1046,7 @@
PRISM2_PARAM_DEFAULT_WEP_ONLY = 1026,
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_common.h.orig linux-2.6.22.noarch/net/mac80211/ieee80211_common.h
--- linux-2.6.22.noarch/net/mac80211/ieee80211_common.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_common.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_common.h 2007-09-27 10:50:46.000000000 -0400
@@ -47,21 +47,16 @@ enum ieee80211_msg_type {
ieee80211_msg_normal = 0,
ieee80211_msg_tx_callback_ack = 1,
@@ -993,7 +1073,7 @@
char ifname[IFNAMSIZ];
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211.c.orig linux-2.6.22.noarch/net/mac80211/ieee80211.c
--- linux-2.6.22.noarch/net/mac80211/ieee80211.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211.c 2007-09-18 10:11:06.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211.c 2007-09-27 10:50:46.000000000 -0400
@@ -24,6 +24,7 @@
#include <linux/compiler.h>
#include <linux/bitmap.h>
@@ -1688,7 +1768,7 @@
MODULE_DESCRIPTION("IEEE 802.11 subsystem");
diff -up linux-2.6.22.noarch/net/mac80211/wme.c.orig linux-2.6.22.noarch/net/mac80211/wme.c
--- linux-2.6.22.noarch/net/mac80211/wme.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/wme.c 2007-09-18 10:11:06.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/wme.c 2007-09-27 10:50:46.000000000 -0400
@@ -424,7 +424,7 @@ static int wme_qdiscop_init(struct Qdisc
skb_queue_head_init(&q->requeued[i]);
q->queues[i] = qdisc_create_dflt(qd->dev, &pfifo_qdisc_ops,
@@ -1700,7 +1780,7 @@
}
diff -up linux-2.6.22.noarch/net/mac80211/rc80211_simple.c.orig linux-2.6.22.noarch/net/mac80211/rc80211_simple.c
--- linux-2.6.22.noarch/net/mac80211/rc80211_simple.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/rc80211_simple.c 2007-09-18 10:11:06.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/rc80211_simple.c 2007-09-27 10:50:46.000000000 -0400
@@ -187,9 +187,13 @@ static void rate_control_simple_tx_statu
}
#endif
@@ -1750,7 +1830,7 @@
MODULE_DESCRIPTION("Simple rate control algorithm for ieee80211");
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_i.h.orig linux-2.6.22.noarch/net/mac80211/ieee80211_i.h
--- linux-2.6.22.noarch/net/mac80211/ieee80211_i.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_i.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_i.h 2007-09-27 10:50:46.000000000 -0400
@@ -99,6 +99,12 @@ struct ieee80211_sta_bss {
int probe_resp;
unsigned long last_update;
@@ -1835,7 +1915,7 @@
diff -up linux-2.6.22.noarch/net/mac80211/ieee80211_sta.c.orig linux-2.6.22.noarch/net/mac80211/ieee80211_sta.c
--- linux-2.6.22.noarch/net/mac80211/ieee80211_sta.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/ieee80211_sta.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/ieee80211_sta.c 2007-09-27 10:50:46.000000000 -0400
@@ -25,7 +25,6 @@
#include <linux/wireless.h>
#include <linux/random.h>
@@ -2075,7 +2155,7 @@
diff -up linux-2.6.22.noarch/net/mac80211/debugfs_netdev.c.orig linux-2.6.22.noarch/net/mac80211/debugfs_netdev.c
--- linux-2.6.22.noarch/net/mac80211/debugfs_netdev.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/mac80211/debugfs_netdev.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/mac80211/debugfs_netdev.c 2007-09-27 10:50:46.000000000 -0400
@@ -118,7 +118,7 @@ static ssize_t ieee80211_if_fmt_flags(
sdata->u.sta.authenticated ? "AUTH\n" : "",
sdata->u.sta.associated ? "ASSOC\n" : "",
@@ -2126,7 +2206,7 @@
}
diff -up linux-2.6.22.noarch/net/wireless/Makefile.orig linux-2.6.22.noarch/net/wireless/Makefile
--- linux-2.6.22.noarch/net/wireless/Makefile.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/wireless/Makefile 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/net/wireless/Makefile 2007-09-27 10:50:46.000000000 -0400
@@ -1,4 +1,4 @@
obj-$(CONFIG_WIRELESS_EXT) += wext.o
obj-$(CONFIG_CFG80211) += cfg80211.o
@@ -2134,8 +2214,8 @@
-cfg80211-y += core.o sysfs.o
+cfg80211-y += core.o sysfs.o radiotap.o
diff -up /dev/null linux-2.6.22.noarch/net/wireless/radiotap.c
---- /dev/null 2007-09-18 08:44:28.563724362 -0400
-+++ linux-2.6.22.noarch/net/wireless/radiotap.c 2007-09-18 10:10:25.000000000 -0400
+--- /dev/null 2007-09-27 08:31:24.563724082 -0400
++++ linux-2.6.22.noarch/net/wireless/radiotap.c 2007-09-27 10:50:46.000000000 -0400
@@ -0,0 +1,257 @@
+/*
+ * Radiotap parser
@@ -2396,7 +2476,7 @@
+EXPORT_SYMBOL(ieee80211_radiotap_iterator_next);
diff -up linux-2.6.22.noarch/net/wireless/core.c.orig linux-2.6.22.noarch/net/wireless/core.c
--- linux-2.6.22.noarch/net/wireless/core.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/wireless/core.c 2007-09-18 10:11:06.000000000 -0400
++++ linux-2.6.22.noarch/net/wireless/core.c 2007-09-27 10:50:46.000000000 -0400
@@ -213,7 +213,7 @@ out_fail_notifier:
out_fail_sysfs:
return err;
@@ -2408,7 +2488,7 @@
{
diff -up linux-2.6.22.noarch/net/wireless/sysfs.c.orig linux-2.6.22.noarch/net/wireless/sysfs.c
--- linux-2.6.22.noarch/net/wireless/sysfs.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/net/wireless/sysfs.c 2007-09-18 10:11:06.000000000 -0400
++++ linux-2.6.22.noarch/net/wireless/sysfs.c 2007-09-27 10:50:46.000000000 -0400
@@ -52,12 +52,14 @@ static void wiphy_dev_release(struct dev
cfg80211_dev_free(rdev);
}
@@ -2426,7 +2506,7 @@
.name = "ieee80211",
diff -up linux-2.6.22.noarch/drivers/net/wireless/airo.c.orig linux-2.6.22.noarch/drivers/net/wireless/airo.c
--- linux-2.6.22.noarch/drivers/net/wireless/airo.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/airo.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/airo.c 2007-09-27 10:50:46.000000000 -0400
@@ -52,6 +52,8 @@
#include "airo.h"
@@ -3044,7 +3124,7 @@
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.c 2007-09-27 10:50:46.000000000 -0400
@@ -49,8 +49,9 @@ void zd_chip_clear(struct zd_chip *chip)
ZD_MEMCLEAR(chip, sizeof(*chip));
}
@@ -3227,7 +3307,7 @@
ZD_ASSERT(mutex_is_locked(&chip->mutex));
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/Makefile.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/Makefile
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/Makefile.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/Makefile 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/Makefile 2007-09-27 10:50:46.000000000 -0400
@@ -3,7 +3,7 @@ obj-$(CONFIG_ZD1211RW) += zd1211rw.o
zd1211rw-objs := zd_chip.o zd_ieee80211.o \
zd_mac.o zd_netdev.o \
@@ -3239,7 +3319,7 @@
ifeq ($(CONFIG_ZD1211RW_DEBUG),y)
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.h.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.h
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.h 2007-09-27 10:50:46.000000000 -0400
@@ -26,7 +26,7 @@
#define AL2210_RF 0x7
#define MAXIM_NEW_RF 0x8
@@ -3303,7 +3383,7 @@
#endif /* _ZD_RF_H */
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.h.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.h
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_chip.h 2007-09-27 10:50:46.000000000 -0400
@@ -608,6 +608,9 @@ enum {
#define CR_ZD1211B_TXOP CTL_REG(0x0b20)
#define CR_ZD1211B_RETRY_MAX CTL_REG(0x0b28)
@@ -3359,7 +3439,7 @@
int zd_chip_switch_radio_off(struct zd_chip *chip);
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al2230.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al2230.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al2230.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al2230.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al2230.c 2007-09-27 10:50:46.000000000 -0400
@@ -21,6 +21,8 @@
#include "zd_usb.h"
#include "zd_chip.h"
@@ -3423,7 +3503,7 @@
}
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_rf2959.c 2007-09-27 10:50:46.000000000 -0400
@@ -265,7 +265,7 @@ int zd_rf_init_rf2959(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
@@ -3435,7 +3515,7 @@
" devices\n");
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.h.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.h
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.h 2007-09-27 10:50:46.000000000 -0400
@@ -188,6 +188,7 @@ struct zd_usb {
struct zd_usb_rx rx;
struct zd_usb_tx tx;
@@ -3455,7 +3535,7 @@
#endif /* _ZD_USB_H */
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf.c 2007-09-27 10:50:46.000000000 -0400
@@ -34,7 +34,7 @@ static const char * const rfs[] = {
[AL2210_RF] = "AL2210_RF",
[MAXIM_NEW_RF] = "MAXIM_NEW_RF",
@@ -3523,8 +3603,8 @@
r = zd_chip_lock_phy_regs(chip);
diff -up /dev/null linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c
---- /dev/null 2007-09-18 08:44:28.563724362 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c 2007-09-18 10:10:25.000000000 -0400
+--- /dev/null 2007-09-27 08:31:24.563724082 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_uw2453.c 2007-09-27 10:50:46.000000000 -0400
@@ -0,0 +1,534 @@
+/* zd_rf_uw2453.c: Functions for the UW2453 RF controller
+ *
@@ -4062,7 +4142,7 @@
+
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.h.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.h
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.h 2007-09-27 10:50:46.000000000 -0400
@@ -189,7 +189,8 @@ int zd_mac_init(struct zd_mac *mac,
struct usb_interface *intf);
void zd_mac_clear(struct zd_mac *mac);
@@ -4075,7 +4155,7 @@
int zd_mac_stop(struct net_device *netdev);
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_rf_al7230b.c 2007-09-27 10:50:46.000000000 -0400
@@ -473,7 +473,7 @@ int zd_rf_init_al7230b(struct zd_rf *rf)
{
struct zd_chip *chip = zd_rf_to_chip(rf);
@@ -4095,7 +4175,7 @@
rf->switch_radio_off = al7230b_switch_radio_off;
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_usb.c 2007-09-27 10:50:46.000000000 -0400
@@ -15,7 +15,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
@@ -4309,7 +4389,7 @@
"couldn't initialize mac. Error number %d\n", r);
diff -up linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.c
--- linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/zd1211rw/zd_mac.c 2007-09-27 10:50:46.000000000 -0400
@@ -86,38 +86,46 @@ out:
return r;
}
@@ -4433,7 +4513,7 @@
/*
diff -up linux-2.6.22.noarch/drivers/net/wireless/libertas/wext.c.orig linux-2.6.22.noarch/drivers/net/wireless/libertas/wext.c
--- linux-2.6.22.noarch/drivers/net/wireless/libertas/wext.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/libertas/wext.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/libertas/wext.c 2007-09-27 10:50:46.000000000 -0400
@@ -1719,9 +1719,6 @@ static int wlan_set_encodeext(struct net
pkey->type = KEY_TYPE_ID_TKIP;
} else if (alg == IW_ENCODE_ALG_CCMP) {
@@ -4446,7 +4526,7 @@
/* If WPA isn't enabled yet, do that now */
diff -up linux-2.6.22.noarch/drivers/net/wireless/libertas/rx.c.orig linux-2.6.22.noarch/drivers/net/wireless/libertas/rx.c
--- linux-2.6.22.noarch/drivers/net/wireless/libertas/rx.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/libertas/rx.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/libertas/rx.c 2007-09-27 10:50:46.000000000 -0400
@@ -439,7 +439,6 @@ static int process_rxed_802_11_packet(wl
ret = 0;
@@ -4457,7 +4537,7 @@
}
diff -up linux-2.6.22.noarch/drivers/net/wireless/libertas/main.c.orig linux-2.6.22.noarch/drivers/net/wireless/libertas/main.c
--- linux-2.6.22.noarch/drivers/net/wireless/libertas/main.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/libertas/main.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/libertas/main.c 2007-09-27 10:50:46.000000000 -0400
@@ -613,6 +613,7 @@ static int wlan_service_main_thread(void
init_waitqueue_entry(&wait, current);
@@ -4468,7 +4548,7 @@
"currenttxskb=%p dnld_sent=%d\n",
diff -up linux-2.6.22.noarch/drivers/net/wireless/libertas/cmd.c.orig linux-2.6.22.noarch/drivers/net/wireless/libertas/cmd.c
--- linux-2.6.22.noarch/drivers/net/wireless/libertas/cmd.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/libertas/cmd.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/libertas/cmd.c 2007-09-27 10:50:46.000000000 -0400
@@ -240,7 +240,7 @@ static int wlan_cmd_802_11_enable_rsn(wl
if (*enable)
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
@@ -4480,7 +4560,7 @@
lbs_deb_leave(LBS_DEB_CMD);
diff -up linux-2.6.22.noarch/drivers/net/wireless/ipw2100.c.orig linux-2.6.22.noarch/drivers/net/wireless/ipw2100.c
--- linux-2.6.22.noarch/drivers/net/wireless/ipw2100.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ipw2100.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ipw2100.c 2007-09-27 10:50:46.000000000 -0400
@@ -1768,7 +1768,8 @@ static int ipw2100_up(struct ipw2100_pri
if (priv->stop_rf_kill) {
@@ -4544,7 +4624,7 @@
timeout = timeout_duration[level - 1] / 1000;
diff -up linux-2.6.22.noarch/drivers/net/wireless/prism54/islpci_hotplug.c.orig linux-2.6.22.noarch/drivers/net/wireless/prism54/islpci_hotplug.c
--- linux-2.6.22.noarch/drivers/net/wireless/prism54/islpci_hotplug.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/prism54/islpci_hotplug.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/prism54/islpci_hotplug.c 2007-09-27 10:50:46.000000000 -0400
@@ -87,7 +87,6 @@ static struct pci_driver prism54_driver
.remove = prism54_remove,
.suspend = prism54_suspend,
@@ -4555,7 +4635,7 @@
/******************************************************************************
diff -up linux-2.6.22.noarch/drivers/net/wireless/prism54/isl_ioctl.c.orig linux-2.6.22.noarch/drivers/net/wireless/prism54/isl_ioctl.c
--- linux-2.6.22.noarch/drivers/net/wireless/prism54/isl_ioctl.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/prism54/isl_ioctl.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/prism54/isl_ioctl.c 2007-09-27 10:50:46.000000000 -0400
@@ -1853,7 +1853,6 @@ prism54_del_mac(struct net_device *ndev,
islpci_private *priv = netdev_priv(ndev);
struct islpci_acl *acl = &priv->acl;
@@ -4631,7 +4711,7 @@
}
diff -up linux-2.6.22.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.22.noarch/drivers/net/wireless/ipw2200.c
--- linux-2.6.22.noarch/drivers/net/wireless/ipw2200.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/ipw2200.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/ipw2200.c 2007-09-27 10:50:46.000000000 -0400
@@ -70,7 +70,7 @@
#define VQ
#endif
@@ -4715,7 +4795,7 @@
diff -up linux-2.6.22.noarch/drivers/net/wireless/wl3501_cs.c.orig linux-2.6.22.noarch/drivers/net/wireless/wl3501_cs.c
--- linux-2.6.22.noarch/drivers/net/wireless/wl3501_cs.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/wl3501_cs.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/wl3501_cs.c 2007-09-27 10:50:46.000000000 -0400
@@ -1011,7 +1011,7 @@ static inline void wl3501_md_ind_interru
} else {
skb->dev = dev;
@@ -4727,7 +4807,7 @@
skb->protocol = eth_type_trans(skb, dev);
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ap.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ap.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ap.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ap.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ap.c 2007-09-27 10:50:46.000000000 -0400
@@ -326,7 +326,6 @@ static int ap_control_proc_read(char *pa
char *p = page;
struct ap_data *ap = (struct ap_data *) data;
@@ -4854,7 +4934,7 @@
}
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_config.h.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_config.h
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_config.h.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_config.h 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_config.h 2007-09-27 10:50:46.000000000 -0400
@@ -1,8 +1,6 @@
#ifndef HOSTAP_CONFIG_H
#define HOSTAP_CONFIG_H
@@ -4866,7 +4946,7 @@
* configuration. From now on, support for hostapd is always included and it is
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_pci.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_pci.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_pci.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_pci.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_pci.c 2007-09-27 10:50:46.000000000 -0400
@@ -20,7 +20,6 @@
#include "hostap_wlan.h"
@@ -4909,7 +4989,7 @@
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_cs.c 2007-09-27 10:50:46.000000000 -0400
@@ -22,7 +22,6 @@
#include "hostap_wlan.h"
@@ -4943,7 +5023,7 @@
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_main.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_main.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_main.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_main.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_main.c 2007-09-27 10:50:46.000000000 -0400
@@ -37,7 +37,6 @@
MODULE_AUTHOR("Jouni Malinen");
MODULE_DESCRIPTION("Host AP common routines");
@@ -4954,7 +5034,7 @@
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_ioctl.c 2007-09-27 10:50:46.000000000 -0400
@@ -3893,8 +3893,6 @@ static void prism2_get_drvinfo(struct ne
local = iface->local;
@@ -4966,7 +5046,7 @@
(local->sta_fw_ver >> 8) & 0xff,
diff -up linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_plx.c.orig linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_plx.c
--- linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_plx.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_plx.c 2007-09-18 10:10:25.000000000 -0400
++++ linux-2.6.22.noarch/drivers/net/wireless/hostap/hostap_plx.c 2007-09-27 10:50:46.000000000 -0400
@@ -23,7 +23,6 @@
#include "hostap_wlan.h"
@@ -5010,7 +5090,7 @@
diff -up linux-2.6.22.noarch/fs/compat_ioctl.c.orig linux-2.6.22.noarch/fs/compat_ioctl.c
--- linux-2.6.22.noarch/fs/compat_ioctl.c.orig 2007-07-08 19:32:17.000000000 -0400
-+++ linux-2.6.22.noarch/fs/compat_ioctl.c 2007-09-18 10:11:13.000000000 -0400
++++ linux-2.6.22.noarch/fs/compat_ioctl.c 2007-09-27 10:53:45.000000000 -0400
@@ -2306,8 +2306,10 @@ static int do_wireless_ioctl(unsigned in
struct iwreq __user *iwr_u;
struct iw_point __user *iwp;
@@ -5056,9 +5136,18 @@
}
/* Since old style bridge ioctl's endup using SIOCDEVPRIVATE
+@@ -3174,6 +3188,8 @@ COMPATIBLE_IOCTL(SIOCSIWRETRY)
+ COMPATIBLE_IOCTL(SIOCGIWRETRY)
+ COMPATIBLE_IOCTL(SIOCSIWPOWER)
+ COMPATIBLE_IOCTL(SIOCGIWPOWER)
++COMPATIBLE_IOCTL(SIOCSIWAUTH)
++COMPATIBLE_IOCTL(SIOCGIWAUTH)
+ /* hiddev */
+ COMPATIBLE_IOCTL(HIDIOCGVERSION)
+ COMPATIBLE_IOCTL(HIDIOCAPPLICATION)
diff -up /dev/null linux-2.6.22.noarch/Documentation/networking/mac80211-injection.txt
---- /dev/null 2007-09-18 08:44:28.563724362 -0400
-+++ linux-2.6.22.noarch/Documentation/networking/mac80211-injection.txt 2007-09-18 10:10:25.000000000 -0400
+--- /dev/null 2007-09-27 08:31:24.563724082 -0400
++++ linux-2.6.22.noarch/Documentation/networking/mac80211-injection.txt 2007-09-27 10:50:46.000000000 -0400
@@ -0,0 +1,59 @@
+How to use packet injection with mac80211
+=========================================
@@ -5120,8 +5209,8 @@
+
+Andy Green <andy at warmcat.com>
diff -up /dev/null linux-2.6.22.noarch/Documentation/networking/radiotap-headers.txt
---- /dev/null 2007-09-18 08:44:28.563724362 -0400
-+++ linux-2.6.22.noarch/Documentation/networking/radiotap-headers.txt 2007-09-18 10:10:25.000000000 -0400
+--- /dev/null 2007-09-27 08:31:24.563724082 -0400
++++ linux-2.6.22.noarch/Documentation/networking/radiotap-headers.txt 2007-09-27 10:50:46.000000000 -0400
@@ -0,0 +1,152 @@
+How to use radiotap headers
+===========================
--- git-wireless-dev.patch DELETED ---
- Previous message (by thread): rpms/policycoreutils/devel .cvsignore, 1.161, 1.162 policycoreutils-gui.patch, 1.35, 1.36 policycoreutils.spec, 1.452, 1.453 sources, 1.166, 1.167
- Next message (by thread): rpms/lyx/EL-5 lyx.spec,1.51,1.52
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list