aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Guenther <agx@sigxcpu.org>2007-03-02 23:40:41 +0100
committerGuido Guenther <agx@bogon.sigxcpu.org>2007-03-02 23:40:41 +0100
commitdc96bd56324ce0b7c8c0fdb658ed2ba64d19265c (patch)
tree527ae13b85943909fa5c2dedb8c952123fe4a16e
parent904fc50bb39072b726a9bb31e09869b7ac255e61 (diff)
move code around a bit for better readability, remove superflous macros and match the code layout to other (wireless) drivers
-rw-r--r--at76c503.c901
-rw-r--r--at76c503.h180
2 files changed, 470 insertions, 611 deletions
diff --git a/at76c503.c b/at76c503.c
index 1088549..400cd80 100644
--- a/at76c503.c
+++ b/at76c503.c
@@ -1,4 +1,3 @@
-/* -*- linux-c -*- */
/*
* USB at76c503/at76c505 driver
*
@@ -6,22 +5,19 @@
* Copyright (c) 2004 Joerg Albert <joerg.albert@gmx.de>
* Copyright (c) 2004 Nick Jones
* Copyright (c) 2004 Balint Seeber <n0_5p4m_p13453@hotmail.com>
+ * Copyritht (c) 2007 Guido Guenther <agx@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 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 file is part of the Berlios driver for WLAN USB devices based on the
- * Atmel AT76C503A/505/505A. See at76c503.h for details.
+ * Atmel AT76C503A/505/505A.
*
* Some iw_handler code was taken from airo.c, (C) 1999 Benjamin Reed
*/
-#ifndef AUTOCONF_INCLUDED
-#include <linux/config.h>
-#endif
-
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/version.h>
@@ -51,239 +47,258 @@
#include "at76c503.h"
-/* number of endpoints of an interface */
-#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints
-#define EP(intf,nr) (intf)->altsetting[0].endpoint[(nr)].desc
-
-#define set_eth_hdr(s,p) (s)->mac.raw=(unsigned char *)(p)
-
-/* wireless extension level this source currently supports */
-#define WIRELESS_EXT_SUPPORTED 21
+/* Version Information */
+#define DRIVER_NAME "at76_usb"
+#define DRIVER_AUTHOR "Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, Alex <alex@foogod.com>, Nick Jones, Balint Seeber <n0_5p4m_p13453@hotmail.com>"
+#define DRIVER_DESC "Atmel at76x USB Wireless LAN Driver"
-#define FILL_BULK_URB(a,b,c,d,e,f,g) usb_fill_bulk_urb(a,b,c,d,e,f,g)
+/* USB Device IDs supported by this driver */
+#define VENDOR_ID_3COM 0x0506
+#define VENDOR_ID_ACTIONTEC 0x1668
+#define VENDOR_ID_ADDTRON 0x05dd
+#define VENDOR_ID_ARESCOM 0x0d8e
+#define VENDOR_ID_ATMEL 0x03eb
+#define VENDOR_ID_BELKIN 0x0d5c
+#define VENDOR_ID_BELKIN_2 0x050d
+#define VENDOR_ID_BENQ 0x04a5
+#define VENDOR_ID_BLITZ 0x07b8
+#define VENDOR_ID_BT 0x069a
+#define VENDOR_ID_CNET 0x1371
+#define VENDOR_ID_COMPAQ 0x049f
+#define VENDOR_ID_CONCEPTRONIC 0x0d8e
+#define VENDOR_ID_COREGA 0x07aa
+#define VENDOR_ID_DICK_SMITH_ELECTR 0x1371 /* Dick Smith Electronics */
+#define VENDOR_ID_DLINK 0x2001
+#define VENDOR_ID_DYNALINK 0x069a
+#define VENDOR_ID_GIGABYTE 0x1044
+#define VENDOR_ID_GIGASET 0x1690
+#define VENDOR_ID_HP 0x03f0
+#define VENDOR_ID_INTEL 0x8086
+#define VENDOR_ID_IO_DATA 0x04bb
+#define VENDOR_ID_LINKSYS 0x077b
+#define VENDOR_ID_LINKSYS_1915 0x1915
+#define VENDOR_ID_LINKSYS_OLD 0x066b
+#define VENDOR_ID_MSI 0x0db0
+#define VENDOR_ID_M4Y750 0x0cde /* Unknown Vendor ID */
+#define VENDOR_ID_NETGEAR 0x0864
+#define VENDOR_ID_SAMSUNG 0x055d
+#define VENDOR_ID_SIEMENS 0x0681
+#define VENDOR_ID_SMC 0x083a
+#define VENDOR_ID_SMC_OLD 0x0d5c
+#define VENDOR_ID_PLANEX 0x2019
+#define VENDOR_ID_TEKRAM 0x0b3b
+#define VENDOR_ID_XTERASYS 0x12fd
+
+#define PRODUCT_ID_ATMEL_503I 0x7603 /* Generic AT76C503/3861 device */
+#define PRODUCT_ID_LINKSYS_WUSB11_V21 0x2211 /* Linksys WUSB11 v2.1/v2.6 */
+#define PRODUCT_ID_NETGEAR_MA101A 0x4100 /* Netgear MA 101 Rev. A */
+#define PRODUCT_ID_TEKRAM_U300C 0x1612 /* Tekram U-300C / Allnet ALL0193 */
+#define PRODUCT_ID_HP_HN210W 0x011c /* HP HN210W PKW-J7801A */
+#define PRODUCT_ID_M4Y750 0x0001 /* Sitecom/Z-Com/Zyxel M4Y-750 */
+#define PRODUCT_ID_DYNALINK_WLL013_I 0x0320 /* Dynalink/Askey WLL013 (intersil) */
+#define PRODUCT_ID_SMC2662W_V1 0xa001 /* EZ connect 11Mpbs
+ Wireless USB Adapter SMC2662W (v1) */
+#define PRODUCT_ID_BENQ_AWL_300 0x9000 /* AWL-300 */
+#define PRODUCT_ID_ADDTRON_AWU120 0xff31 /* AWU-120, Compex WLU11 */
+#define PRODUCT_ID_INTEL_AP310 0x0200 /* AP310 AnyPoint II USB */
+#define PRODUCT_ID_CONCEPTRONIC_C11U 0x7100 /* also Dynalink L11U */
+#define PRODUCT_ID_WL_210 0x7110 /* Arescom WL-210,
+ FCC id 07J-GL2411USB */
+#define PRODUCT_ID_IO_DATA_WN_B11_USB 0x0919 /* IO-DATA WN-B11/USB */
+#define PRODUCT_ID_BT_VOYAGER_1010 0x0821 /* BT Voyager 1010 */
+#define PRODUCT_ID_ATMEL_503_I3863 0x7604 /* Generic AT76C503/3863 device */
+#define PRODUCT_ID_SAMSUNG_SWL2100U 0xa000 /* Samsung SWL-2100U */
+#define PRODUCT_ID_ATMEL_503R 0x7605 /* Generic AT76C503/RFMD device */
+#define PRODUCT_ID_W_BUDDIE_WN210 0x4102 /* AirVast W-Buddie WN210 */
+#define PRODUCT_ID_DYNALINK_WLL013_R 0x0321 /* Dynalink/Askey WLL013 (rfmd) */
+#define PRODUCT_ID_LINKSYS_WUSB11_V26 0x2219 /* Linksys WUSB11 v2.6 */
+#define PRODUCT_ID_NE_NWU11B 0x2227 /* Network Everywhere NWU11B */
+#define PRODUCT_ID_NETGEAR_MA101B 0x4102 /* Netgear MA 101 Rev. B */
+#define PRODUCT_ID_ACTIONTEC_802UAT1 0x7605 /* Actiontec 802UAT1, HWU01150-01UK */
+#define PRODUCT_ID_DLINK_DWL120 0x3200 /* DWL-120 rev. E */
+#define PRODUCT_ID_DSE_XH1153 0x5743 /* XH1153 802.11b USB adapter */
+#define PRODUCT_ID_WL_200U 0x0002 /* WL-200U */
+#define PRODUCT_ID_BENQ_AWL_400 0x9001 /* BenQ AWL-400 USB stick */
+#define PRODUCT_ID_3COM_3CRSHEW696 0x0a01 /* 3COM 3CRSHEW696 */
+#define PRODUCT_ID_SIEMENS_SANTIS_WLL013 0x001b /* Siemens Santis ADSL WLAN
+ USB adapter WLL 013 */
+#define PRODUCT_ID_BELKIN_F5D6050_V2 0x0050 /* Belkin F5D6050, version 2 */
+#define PRODUCT_ID_BLITZ_NETWAVE_BWU613 0xb000 /* iBlitzz, BWU613 (not *B or *SB) */
+#define PRODUCT_ID_GIGABYTE_GN_WLBM101 0x8003 /* Gigabyte GN-WLBM101 */
+#define PRODUCT_ID_PLANEX_GW_US11S 0x3220 /* Planex GW-US11S */
+#define PRODUCT_ID_IPAQ_INT_WLAN 0x0032 /* internal WLAN adapter in h5[4,5]xx series iPAQs */
+#define PRODUCT_ID_BELKIN_F5D6050 0xa002 /* Belkin F5D6050 / SMC 2662W v2 / SMC 2662W-AR */
+#define PRODUCT_ID_SMC_2664W 0x3501
+#define PRODUCT_ID_ATMEL_505R 0x7606 /* Generic AT76C505/RFMD */
+#define PRODUCT_ID_ATMEL_505R2958 0x7613 /* Generic AT76C505/RFMD, OvisLink WL-1130USB */
+#define PRODUCT_ID_CNET_CNUSB611G 0x0013 /* CNet CNUSB 611G */
+#define PRODUCT_ID_FL_WL240U 0x0014 /* Fiberline WL-240U with CNet vendor id */
+#define PRODUCT_ID_LINKSYS_WUSB11V28 0x2233 /* Linksys WUSB11 v2.8 */
+#define PRODUCT_ID_XTERASYS_XN_2122B 0x1001 /* Xterasys XN-2122B,
+ IBlitzz BWU613B/BWU613SB */
+#define PRODUCT_ID_COREGA_USB_STICK_11_KK 0x7613 /* Corega WLAN USB Stick 11 (K.K.) */
+#define PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC 0x1020
+#define PRODUCT_ID_ATMEL_505A 0x7614 /* Generic AT76C505A device */
+#define PRODUCT_ID_ATMEL_505AS 0x7617 /* Generic AT76C505AS device */
+#define PRODUCT_ID_GIGASET_11 0x0701
+#define PRODUCT_ID_ATMEL_505AMX 0x7615 /* Generic AT76C505AMX device */
+
+#define BOARDTYPE_503_INTERSIL_3861 1
+#define BOARDTYPE_503_INTERSIL_3863 2
+#define BOARDTYPE_503_RFMD 3
+#define BOARDTYPE_503_RFMD_ACC 4
+#define BOARDTYPE_505_RFMD 5
+#define BOARDTYPE_505_RFMD_2958 6
+#define BOARDTYPE_505A_RFMD_2958 7
+#define BOARDTYPE_505AMX_RFMD 8
static int at76_debug = DBG_DEFAULTS;
-/* how often do we re-try these packets ? */
-#define AUTH_RETRIES 3
-#define ASSOC_RETRIES 3
-#define DISASSOC_RETRIES 3
-
-static unsigned long spin_l_istate_flags;
-#define LOCK_ISTATE() spin_lock_irqsave(&dev->istate_spinlock,spin_l_istate_flags);
-#define UNLOCK_ISTATE() spin_unlock_irqrestore(&dev->istate_spinlock,spin_l_istate_flags);
-
-#define NEW_STATE(dev,newstate) \
- do {\
- scan_hook(newstate == SCANNING); \
- LOCK_ISTATE() \
- dbg(DBG_PROGRESS, "%s: state %d -> %d (" #newstate ")",\
- dev->netdev->name, dev->istate, newstate);\
- dev->istate = newstate;\
- UNLOCK_ISTATE() \
- } while (0)
-
-/* the beacon timeout in infra mode when we are connected (in seconds) */
-#define BEACON_TIMEOUT 10
-
-/* the interval in ticks we poll if scan is completed */
-#define SCAN_POLL_INTERVAL (HZ/4)
+/* Firmware names - this must be in sync with boardtype definitions */
+static struct fwentry {
+ const char *const fwname;
+ const struct firmware *fw;
+} firmwares[] = {
+ { "" },
+ { "atmel_at76c503-i3861.bin" },
+ { "atmel_at76c503-i3863.bin" },
+ { "atmel_at76c503-rfmd.bin" },
+ { "atmel_at76c503-rfmd-acc.bin" },
+ { "atmel_at76c505-rfmd.bin" },
+ { "atmel_at76c505-rfmd2958.bin" },
+ { "atmel_at76c505a-rfmd2958.bin" },
+ { "atmel_at76c505amx-rfmd.bin" }
+};
-/* Version Information */
-#define DRIVER_NAME "at76_usb"
-#define DRIVER_AUTHOR \
-"Oliver Kurth <oku@masqmail.cx>, Joerg Albert <joerg.albert@gmx.de>, " \
-"Alex <alex@foogod.com>, Nick Jones, Balint Seeber <n0_5p4m_p13453@hotmail.com>"
-#define DRIVER_DESC "Atmel at76c50x USB Wireless LAN Driver"
+static struct usb_device_id dev_table[] = {
+ /* at76c503-i3861 */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503I),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_LINKSYS_OLD, PRODUCT_ID_LINKSYS_WUSB11_V21),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101A),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_TEKRAM, PRODUCT_ID_TEKRAM_U300C),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_HP, PRODUCT_ID_HP_HN210W),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_M4Y750, PRODUCT_ID_M4Y750),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_I),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_SMC_OLD, PRODUCT_ID_SMC2662W_V1),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_300),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_ADDTRON, PRODUCT_ID_ADDTRON_AWU120),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_INTEL, PRODUCT_ID_INTEL_AP310),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_CONCEPTRONIC,PRODUCT_ID_CONCEPTRONIC_C11U),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_ARESCOM, PRODUCT_ID_WL_210),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_IO_DATA, PRODUCT_ID_IO_DATA_WN_B11_USB),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ { USB_DEVICE(VENDOR_ID_BT, PRODUCT_ID_BT_VOYAGER_1010),
+ .driver_info = BOARDTYPE_503_INTERSIL_3861 },
+ /* at76c503-i3863 */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503_I3863),
+ .driver_info = BOARDTYPE_503_INTERSIL_3863 },
+ { USB_DEVICE(VENDOR_ID_SAMSUNG, PRODUCT_ID_SAMSUNG_SWL2100U),
+ .driver_info = BOARDTYPE_503_INTERSIL_3863 },
+ /* at76c503-rfmd */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503R),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_R),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_LINKSYS_WUSB11_V26),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_NE_NWU11B),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101B),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_DLINK_DWL120),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_ACTIONTEC,PRODUCT_ID_ACTIONTEC_802UAT1),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_W_BUDDIE_WN210),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_DSE_XH1153),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_WL_200U),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_400),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_3COM, PRODUCT_ID_3COM_3CRSHEW696),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_SIEMENS, PRODUCT_ID_SIEMENS_SANTIS_WLL013),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BELKIN_2, PRODUCT_ID_BELKIN_F5D6050_V2),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_BLITZ, PRODUCT_ID_BLITZ_NETWAVE_BWU613),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_GIGABYTE, PRODUCT_ID_GIGABYTE_GN_WLBM101),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_PLANEX, PRODUCT_ID_PLANEX_GW_US11S),
+ .driver_info = BOARDTYPE_503_RFMD },
+ { USB_DEVICE(VENDOR_ID_COMPAQ, PRODUCT_ID_IPAQ_INT_WLAN),
+ .driver_info = BOARDTYPE_503_RFMD },
+ /* at76c503-rfmd-acc */
+ { USB_DEVICE(VENDOR_ID_SMC, PRODUCT_ID_SMC_2664W),
+ .driver_info = BOARDTYPE_503_RFMD_ACC },
+ { USB_DEVICE(VENDOR_ID_BELKIN, PRODUCT_ID_BELKIN_F5D6050),
+ .driver_info = BOARDTYPE_503_RFMD_ACC },
+ /* at76c505-rfmd */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R),
+ .driver_info = BOARDTYPE_505_RFMD },
+ /* at76c505-rfmd2958 */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R2958),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_FL_WL240U),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_CNET_CNUSB611G),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_LINKSYS_1915, PRODUCT_ID_LINKSYS_WUSB11V28),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_XTERASYS, PRODUCT_ID_XTERASYS_XN_2122B),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_COREGA, PRODUCT_ID_COREGA_USB_STICK_11_KK),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_MSI, PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC),
+ .driver_info = BOARDTYPE_505_RFMD_2958 },
+ /* at76c505a-rfmd2958 */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505A),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AS),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+ { USB_DEVICE(VENDOR_ID_GIGASET, PRODUCT_ID_GIGASET_11),
+ .driver_info = BOARDTYPE_505A_RFMD_2958 },
+ /* at76c505amx-rfmd */
+ { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AMX),
+ .driver_info = BOARDTYPE_505AMX_RFMD },
+ { }
+};
-/* Module paramaters */
-module_param_named(debug, at76_debug, int, 0600);
-MODULE_PARM_DESC(debug, "Debugging level");
+MODULE_DEVICE_TABLE (usb, dev_table);
+/* module parameters */
static int rx_copybreak = 200;
-module_param(rx_copybreak, int, 0400);
-MODULE_PARM_DESC(rx_copybreak, "rx packet copy threshold");
-
static int scan_min_time = 10;
-module_param(scan_min_time, int, 0400);
-MODULE_PARM_DESC(scan_min_time, "scan min channel time (default: 10)");
-
static int scan_max_time = 120;
-module_param(scan_max_time, int, 0400);
-MODULE_PARM_DESC(scan_max_time, "scan max channel time (default: 120)");
-
static int scan_mode = SCAN_TYPE_ACTIVE;
-module_param(scan_mode, int, 0400);
-MODULE_PARM_DESC(scan_mode, "scan mode: 0 active (with ProbeReq, default), 1 passive");
-
static int preamble_type = PREAMBLE_TYPE_LONG;
-module_param(preamble_type, int, 0400);
-MODULE_PARM_DESC(preamble_type, "preamble type: 0 long (default), 1 short");
-
static int auth_mode = 0;
-module_param(auth_mode, int, 0400);
-MODULE_PARM_DESC(auth_mode, "authentication mode: 0 open system (default), "
- "1 shared secret");
-
static int pm_mode = PM_ACTIVE;
-module_param(pm_mode, int, 0400);
-MODULE_PARM_DESC(pm_mode, "power management mode: 1 active (def.), 2 powersave, 3 smart save");
-
static int pm_period = 0;
-module_param(pm_period, int, 0400);
-MODULE_PARM_DESC(pm_period, "period of waking up the device in usec");
-
static int international_roaming = IR_OFF;
-module_param(international_roaming, int, 0400);
-MODULE_PARM_DESC(international_roaming, "enable international roaming: 0 (no, default), 1 (yes)");
-
static int default_iw_mode = IW_MODE_INFRA;
-module_param(default_iw_mode, int, 0400);
-MODULE_PARM_DESC(default_iw_mode, "default IW mode for a new device: "
- "1 (ad-hoc), 2 (infrastructure, def.), 6 (monitor mode)");
-
static int monitor_scan_min_time = 50;
-module_param(monitor_scan_min_time, int, 0400);
-MODULE_PARM_DESC(monitor_scan_min_time, "scan min channel time in MONITOR MODE (default: 50)");
-
static int monitor_scan_max_time = 600;
-module_param(monitor_scan_max_time, int, 0400);
-MODULE_PARM_DESC(monitor_scan_max_time, "scan max channel time in MONITOR MODE (default: 600)");
-
static char* netdev_name = "wlan%d";
-module_param(netdev_name, charp, 0400);
-MODULE_PARM_DESC(netdev_name, "network device name (default is wlan%d)");
-
-
-#define DEF_RTS_THRESHOLD 1536
-#define DEF_FRAG_THRESHOLD 1536
-#define DEF_SHORT_RETRY_LIMIT 8
-#define DEF_CHANNEL 10
-
-#define MAX_RTS_THRESHOLD (MAX_FRAG_THRESHOLD + 1)
-
-/* The frequency of each channel in MHz */
-static const long channel_frequency[] = {
- 2412, 2417, 2422, 2427, 2432, 2437, 2442,
- 2447, 2452, 2457, 2462, 2467, 2472, 2484
-};
-#define NUM_CHANNELS ( sizeof(channel_frequency) / sizeof(channel_frequency[0]) )
-
-/* the broadcast address */
-static const u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
-static const u8 off_addr[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-/* the supported rates of this hardware, bit7 marks a basic rate */
-static const u8 hw_rates[4] = {0x82,0x84,0x0b,0x16};
-
-/* the max padding size for tx in bytes (see calc_padding)*/
-#define MAX_PADDING_SIZE 53
-
-/* the size of the ieee802.11 header (excl. the at76c503 tx header) */
-#define IEEE802_11_MGMT_HEADER_SIZE offsetof(struct ieee80211_hdr_3addr, payload)
-#define BEACON_MAX_DATA_LENGTH 1500
-/* beacon in ieee80211_hdr_3addr.payload */
-struct ieee802_11_beacon_data {
- u8 timestamp[8]; /* TSFTIMER */
- __le16 beacon_interval; /* Kms between TBTTs (Target Beacon Transmission Times) */
- __le16 capability_information;
- u8 data[BEACON_MAX_DATA_LENGTH]; /* contains: SSID (tag,length,value),
- Supported Rates (tlv), channel */
-} __attribute__ ((packed));
-
-/* disassoc frame in ieee80211_hdr_3addr.payload */
-struct ieee802_11_disassoc_frame {
- __le16 reason;
-} __attribute__ ((packed));
-#define DISASSOC_FRAME_SIZE \
- (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
- sizeof(struct ieee802_11_disassoc_frame))
-
-/* assoc request in ieee80211_hdr_3addr.payload */
-struct ieee802_11_assoc_req {
- __le16 capability;
- __le16 listen_interval;
- u8 data[1]; /* variable number of bytes for SSID
- and supported rates (tlv coded) */
-};
-/* the maximum size of an AssocReq packet */
-#define ASSOCREQ_MAX_SIZE \
- (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
- offsetof(struct ieee802_11_assoc_req,data) +\
- 1+1+IW_ESSID_MAX_SIZE + 1+1+4)
-
-/* reassoc request in ieee80211_hdr_3addr.payload */
-struct ieee802_11_reassoc_req {
- __le16 capability;
- __le16 listen_interval;
- u8 curr_ap[ETH_ALEN]; /* the bssid of the AP we are
- currently associated to */
- u8 data[1]; /* variable number of bytes for SSID
- and supported rates (tlv coded) */
-} __attribute__ ((packed));
-
-/* the maximum size of an AssocReq packet */
-#define REASSOCREQ_MAX_SIZE \
- (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
- offsetof(struct ieee802_11_reassoc_req,data) +\
- 1+1+IW_ESSID_MAX_SIZE + 1+1+4)
-
-
-/* assoc/reassoc response */
-struct ieee802_11_assoc_resp {
- __le16 capability;
- __le16 status;
- __le16 assoc_id;
- u8 data[1]; /* variable number of bytes for
- supported rates (tlv coded) */
-} __attribute__ ((packed));
-
-/* auth. request/response in ieee80211_hdr_3addr.payload */
-struct ieee802_11_auth_frame {
- __le16 algorithm;
- __le16 seq_nr;
- __le16 status;
- u8 challenge[0];
-} __attribute__ ((packed));
-/* for shared secret auth, add the challenge text size */
-#define AUTH_FRAME_SIZE \
- (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
- sizeof(struct ieee802_11_auth_frame))
-
-/* deauth frame in ieee80211_hdr_3addr.payload */
-struct ieee802_11_deauth_frame {
- __le16 reason;
-} __attribute__ ((packed));
-#define DEAUTH_FRAME_SIZE \
- (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
- sizeof(struct ieee802_11_disauth_frame))
-
-
-#define KEVENT_CTRL_HALT 1
-#define KEVENT_NEW_BSS 2
-#define KEVENT_SET_PROMISC 3
-#define KEVENT_MGMT_TIMEOUT 4
-#define KEVENT_SCAN 5
-#define KEVENT_JOIN 6
-#define KEVENT_STARTIBSS 7
-#define KEVENT_SUBMIT_RX 8
-#define KEVENT_RESTART 9 /* restart the device */
-#define KEVENT_ASSOC_DONE 10 /* execute the power save settings:
- listen interval, pm mode, assoc id */
-#define KEVENT_EXTERNAL_FW 11
-#define KEVENT_INTERNAL_FW 12
-#define KEVENT_RESET_DEVICE 13
-
-
-static u8 snapsig[] = {0xaa, 0xaa, 0x03};
-/* RFC 1042 encapsulates Ethernet frames in 802.2 SNAP (0xaa, 0xaa, 0x03) with
- * a SNAP OID of 0 (0x00, 0x00, 0x00) */
-static u8 rfc1042sig[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
-
-/* local function prototypes */
+/* Function prototypes */
static void iwspy_update(struct at76c503 *dev, struct at76c503_rx_buffer *buf);
-
static void at76c503_read_bulk_callback (struct urb *urb);
static void at76c503_write_bulk_callback(struct urb *urb);
static void defer_kevent (struct at76c503 *dev, int flag);
@@ -298,13 +313,30 @@ static int reassoc_req(struct at76c503 *dev, struct bss_info *curr,
static void dump_bss_table(struct at76c503 *dev, int force_output);
static int submit_rx_urb(struct at76c503 *dev);
static int startup_device(struct at76c503 *dev);
-
static int set_iroaming(struct at76c503 *dev, int onoff);
static void set_monitor_mode(struct at76c503 *dev, int use_prism);
-
/* second step of initialization (after fw download) */
static int init_new_device(struct at76c503 *dev);
+/* number of endpoints of an interface */
+#define NUM_EP(intf) (intf)->altsetting[0].desc.bNumEndpoints
+#define EP(intf,nr) (intf)->altsetting[0].endpoint[(nr)].desc
+
+static unsigned long spin_l_istate_flags;
+#define LOCK_ISTATE() spin_lock_irqsave(&dev->istate_spinlock,spin_l_istate_flags);
+#define UNLOCK_ISTATE() spin_unlock_irqrestore(&dev->istate_spinlock,spin_l_istate_flags);
+
+#define NEW_STATE(dev,newstate) \
+ do {\
+ scan_hook(newstate == SCANNING);\
+ LOCK_ISTATE();\
+ dbg(DBG_PROGRESS, "%s: state %d -> %d (" #newstate ")",\
+ dev->netdev->name, dev->istate, newstate);\
+ dev->istate = newstate;\
+ UNLOCK_ISTATE();\
+ } while (0)
+
+/* Firmware download */
/* DFU states */
#define STATE_IDLE 0x00
#define STATE_DETACH 0x01
@@ -328,8 +360,7 @@ static int init_new_device(struct at76c503 *dev);
#define DFU_ABORT 6
#define DFU_PACKETSIZE 1024
-
-#define USB_SUCCESS(a) ((a) >= 0)
+#define DFU_USB_SUCCESS(a) ((a) >= 0)
struct dfu_status {
unsigned char bStatus;
@@ -346,7 +377,6 @@ struct dfu_ctx {
u8 *buf;
};
-
static
int dfu_download_block(struct dfu_ctx *ctx, u8 *buffer,
int bytes, int block)
@@ -387,7 +417,6 @@ int dfu_get_status(struct dfu_ctx *ctx, struct dfu_status *status)
status, /* Buffer */
sizeof(struct dfu_status), /* Size */
HZ);
-
return result;
}
@@ -404,7 +433,6 @@ u8 dfu_get_state(struct usb_device *udev, u8 *state)
state, /* Buffer */
1, /* Size */
HZ);
-
return result;
}
@@ -416,7 +444,6 @@ u32 __get_timeout(struct dfu_status *s)
ret = (unsigned long) (s->bwPollTimeout[2] << 16);
ret |= (unsigned long) (s->bwPollTimeout[1] << 8);
ret |= (unsigned long) (s->bwPollTimeout[0]);
-
return ret;
}
@@ -466,7 +493,7 @@ static int usbdfu_download(struct usb_device *udev, u8 *dfu_buffer,
do {
if (need_dfu_state) {
status = dfu_get_state(ctx->udev, &ctx->dfu_state);
- if (!USB_SUCCESS(status)) {
+ if (!DFU_USB_SUCCESS(status)) {
err("DFU: Failed to get DFU state: %d", status);
goto exit;
}
@@ -478,7 +505,7 @@ static int usbdfu_download(struct usb_device *udev, u8 *dfu_buffer,
case STATE_DFU_DOWNLOAD_SYNC:
dbg(DBG_DFU, "STATE_DFU_DOWNLOAD_SYNC");
status = dfu_get_status(ctx, dfu_stat_buf);
- if (USB_SUCCESS(status)) {
+ if (DFU_USB_SUCCESS(status)) {
dfu_state = dfu_stat_buf->bState;
dfu_timeout = __get_timeout(dfu_stat_buf);
need_dfu_state = 0;
@@ -519,7 +546,7 @@ static int usbdfu_download(struct usb_device *udev, u8 *dfu_buffer,
dfu_buffer_offset += dfu_block_bytes;
dfu_block_cnt++;
- if (!USB_SUCCESS(status))
+ if (!DFU_USB_SUCCESS(status))
err("dfu_download_block failed with %d", status);
need_dfu_state = 1;
break;
@@ -529,7 +556,7 @@ static int usbdfu_download(struct usb_device *udev, u8 *dfu_buffer,
status = dfu_get_status(ctx, dfu_stat_buf);
- if (USB_SUCCESS(status)) {
+ if (DFU_USB_SUCCESS(status)) {
dfu_state = dfu_stat_buf->bState;
dfu_timeout = __get_timeout(dfu_stat_buf);
need_dfu_state = 0;
@@ -573,7 +600,7 @@ static int usbdfu_download(struct usb_device *udev, u8 *dfu_buffer,
status = -EINVAL;
break;
}
- } while (!is_done && USB_SUCCESS(status));
+ } while (!is_done && DFU_USB_SUCCESS(status));
exit:
kfree(ctx);
@@ -1750,7 +1777,6 @@ static void handle_mgmt_timeout_scan(struct at76c503 *dev)
return;
}
-
if ((ret=get_cmd_status(dev->udev, CMD_SCAN, cmd_status)) < 0) {
err("%s: %s: get_cmd_status failed with %d",
dev->netdev->name, __FUNCTION__, ret);
@@ -1810,10 +1836,6 @@ static void handle_mgmt_timeout_scan(struct at76c503 *dev)
/* report the end of scan to user space */
iwevent_scan_complete(dev->netdev);
NEW_STATE(dev,JOINING);
-#if 0
- assert(dev->curr_bss == NULL); /* done in free_bss_list,
- find_bss will start with first bss */
-#endif
/* call join_bss immediately after
re-run of all other threads in kevent */
defer_kevent(dev,KEVENT_JOIN);
@@ -2034,14 +2056,14 @@ static int send_mgmt_bulk(struct at76c503 *dev, struct at76c503_tx_buffer *txbuf
/* txbuf was not consumed above -> send mgmt msg immediately */
memcpy(dev->bulk_out_buffer, txbuf,
le16_to_cpu(txbuf->wlength) + AT76C503_TX_HDRLEN);
- FILL_BULK_URB(dev->write_urb, dev->udev,
- usb_sndbulkpipe(dev->udev,
+ usb_fill_bulk_urb(dev->write_urb, dev->udev,
+ usb_sndbulkpipe(dev->udev,
dev->bulk_out_endpointAddr),
- dev->bulk_out_buffer,
- le16_to_cpu(txbuf->wlength) +
- txbuf->padding +
- AT76C503_TX_HDRLEN,
- (usb_complete_t)at76c503_write_bulk_callback, dev);
+ dev->bulk_out_buffer,
+ le16_to_cpu(txbuf->wlength) +
+ txbuf->padding +
+ AT76C503_TX_HDRLEN,
+ (usb_complete_t)at76c503_write_bulk_callback, dev);
ret = usb_submit_urb(dev->write_urb, GFP_ATOMIC);
if (ret) {
err("%s: %s error in tx submit urb: %d",
@@ -2279,7 +2301,6 @@ static int reassoc_req(struct at76c503 *dev, struct bss_info *curr_bss,
memcpy(req->curr_ap, curr_bss->bssid, ETH_ALEN);
/* write TLV data elements */
-
*tlv++ = MFIE_TYPE_SSID;
*tlv++ = new_bss->ssid_len;
memcpy(tlv,new_bss->ssid, new_bss->ssid_len);
@@ -2518,12 +2539,12 @@ end_join:
if (test_bit(KEVENT_SCAN, &dev->kevent_flags)) {
clear_bit(KEVENT_SCAN, &dev->kevent_flags);
+
LOCK_ISTATE()
assert(dev->istate == SCANNING);
-
/* only clear the bss list when a scan is actively initiated,
* otherwise simply rely on bss_list_timeout */
- if ( dev->site_survey_state == SITE_SURVEY_IN_PROGRESS)
+ if (dev->site_survey_state == SITE_SURVEY_IN_PROGRESS)
free_bss_list(dev);
UNLOCK_ISTATE()
@@ -3591,7 +3612,7 @@ static void ieee80211_to_eth(struct sk_buff *skb, int iw_mode)
}
eth_hdr_p = (struct ethhdr *)(skb->data-sizeof(struct ethhdr));
- set_eth_hdr(skb, eth_hdr_p);
+ skb->mac.raw=(unsigned char *)eth_hdr_p;
if (build_ethhdr) {
/* This needs to be done in this order (eth_hdr_p->h_dest may
* overlap src_addr) */
@@ -3971,10 +3992,10 @@ static int submit_rx_urb(struct at76c503 *dev)
}
size = skb_tailroom(skb);
- FILL_BULK_URB(dev->read_urb, dev->udev,
- usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
- skb_put(skb, size), size,
- (usb_complete_t)at76c503_read_bulk_callback, dev);
+ usb_fill_bulk_urb(dev->read_urb, dev->udev,
+ usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr),
+ skb_put(skb, size), size,
+ (usb_complete_t)at76c503_read_bulk_callback, dev);
ret = usb_submit_urb(dev->read_urb, GFP_ATOMIC);
if (ret < 0) {
if (ret == -ENODEV)
@@ -4259,13 +4280,13 @@ static void at76c503_write_bulk_callback (struct urb *urb)
memcpy(dev->bulk_out_buffer, mgmt_buf,
le16_to_cpu(mgmt_buf->wlength) +
offsetof(struct at76c503_tx_buffer,packet));
- FILL_BULK_URB(dev->write_urb, dev->udev,
- usb_sndbulkpipe(dev->udev,
- dev->bulk_out_endpointAddr),
- dev->bulk_out_buffer,
- le16_to_cpu(mgmt_buf->wlength) +
- mgmt_buf->padding + AT76C503_TX_HDRLEN,
- (usb_complete_t)at76c503_write_bulk_callback, dev);
+ usb_fill_bulk_urb(dev->write_urb, dev->udev,
+ usb_sndbulkpipe(dev->udev,
+ dev->bulk_out_endpointAddr),
+ dev->bulk_out_buffer,
+ le16_to_cpu(mgmt_buf->wlength) +
+ mgmt_buf->padding + AT76C503_TX_HDRLEN,
+ (usb_complete_t)at76c503_write_bulk_callback, dev);
ret = usb_submit_urb(dev->write_urb, GFP_ATOMIC);
if (ret) {
err("%s: %s error in tx submit urb: %d",
@@ -4291,7 +4312,6 @@ static void
ipaq_blink_led (void)
{
ipaq_led_on (RED_LED_2);
-
mod_timer (&led_timer, jiffies + (HZ / 25));
}
@@ -4299,7 +4319,6 @@ static void
ipaq_init_led (void)
{
led_timer.function = ipaq_clear_led;
-
init_timer (&led_timer);
}
@@ -4427,10 +4446,10 @@ static int at76c503_tx(struct sk_buff *skb, struct net_device *netdev)
netif_stop_queue(netdev);
netdev->trans_start = jiffies;
- FILL_BULK_URB(dev->write_urb, dev->udev,
- usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
- tx_buffer, submit_len,
- (usb_complete_t)at76c503_write_bulk_callback, dev);
+ usb_fill_bulk_urb(dev->write_urb, dev->udev,
+ usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
+ tx_buffer, submit_len,
+ (usb_complete_t)at76c503_write_bulk_callback, dev);
ret = usb_submit_urb(dev->write_urb, GFP_ATOMIC);
if (ret) {
stats->tx_errors++;
@@ -4672,7 +4691,6 @@ static int at76c503_stop(struct net_device *netdev)
dev->open_count--;
up(&dev->sem);
-
dbg(DBG_DEVSTART, "%s: EXIT", __FUNCTION__);
return 0;
@@ -4681,7 +4699,6 @@ static int at76c503_stop(struct net_device *netdev)
static struct net_device_stats *at76c503_get_stats(struct net_device *netdev)
{
struct at76c503 *dev = (struct at76c503 *)netdev->priv;
-
return &dev->stats;
}
@@ -4794,11 +4811,7 @@ static int at76c503_iw_handler_commit(struct net_device *netdev,
dbg(DBG_IOCTL, "%s %s: restarting the device", netdev->name,
__FUNCTION__);
- /* stop any pending tx bulk urb
- TODO */
-
- /* jal: TODO: protect access to dev->istate by a spinlock
- (ISR's on other processors may read/write it) */
+ /* TODO: stop any pending tx bulk urb */
LOCK_ISTATE()
if (dev->istate != INIT) {
UNLOCK_ISTATE()
@@ -4831,9 +4844,7 @@ static int at76c503_iw_handler_get_name(struct net_device *netdev,
char *extra)
{
strcpy(name, "IEEE 802.11b");
-
dbg(DBG_IOCTL, "%s: SIOCGIWNAME - name %s", netdev->name, name);
-
return 0;
}
@@ -5012,7 +5023,7 @@ static int at76c503_iw_handler_get_range(struct net_device *netdev,
range->num_txpower = 1;
range->txpower_capa = IW_TXPOW_DBM;
- range->we_version_source = WIRELESS_EXT_SUPPORTED;
+ range->we_version_source = WIRELESS_EXT;
range->we_version_compiled = WIRELESS_EXT;
/* same as the values used in atmel.c */
@@ -6101,9 +6112,7 @@ static const iw_handler at76c503_handlers[] =
[SIOCGIWPOWER -SIOCIWFIRST] = (iw_handler) at76c503_iw_handler_get_power,
};
-/*******************************************************************************
- * structure that advertises the private iw handlers of this driver
- */
+/*structure that advertises the private iw handlers of this driver */
static const iw_handler at76c503_priv_handlers[] =
{
(iw_handler) at76c503_iw_handler_PRIV_IOCTL_SET_SHORT_PREAMBLE,
@@ -6165,7 +6174,6 @@ static struct ethtool_ops at76c503_ethtool_ops = {
.get_link = at76c503_ethtool_get_link,
};
-
static void at76c503_delete_device(struct at76c503 *dev)
{
int i;
@@ -6241,6 +6249,7 @@ static void at76c503_delete_device(struct at76c503 *dev)
dbg(DBG_PROC_ENTRY, "%s: EXIT", __FUNCTION__);
}
+
static int at76c503_alloc_urbs(struct at76c503 *dev)
{
struct usb_interface *interface = dev->interface;
@@ -6290,11 +6299,11 @@ static int at76c503_alloc_urbs(struct at76c503 *dev)
err("couldn't allocate bulk_out_buffer");
return -1;
}
- FILL_BULK_URB(dev->write_urb, udev,
- usb_sndbulkpipe(udev,
+ usb_fill_bulk_urb(dev->write_urb, udev,
+ usb_sndbulkpipe(udev,
endpoint->bEndpointAddress),
- dev->bulk_out_buffer, buffer_size,
- (usb_complete_t)at76c503_write_bulk_callback, dev);
+ dev->bulk_out_buffer, buffer_size,
+ (usb_complete_t)at76c503_write_bulk_callback, dev);
}
}
@@ -6705,299 +6714,6 @@ error:
return ret;
}
-
-/* Firmware names - this must be in sync with boardtype definitions */
-static struct fwentry {
- const char *const fwname;
- const struct firmware *fw;
-} firmwares[] = {
- { "" },
- { "atmel_at76c503-i3861.bin" },
- { "atmel_at76c503-i3863.bin" },
- { "atmel_at76c503-rfmd.bin" },
- { "atmel_at76c503-rfmd-acc.bin" },
- { "atmel_at76c505-rfmd.bin" },
- { "atmel_at76c505-rfmd2958.bin" },
- { "atmel_at76c505a-rfmd2958.bin" },
- { "atmel_at76c505amx-rfmd.bin" }
-};
-
-/* USB Device IDs supported by this driver */
-
-/* at76c503-i3861 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503I 0x7603 /* Generic AT76C503/3861 device */
-
-#define VENDOR_ID_LINKSYS_OLD 0x066b
-#define PRODUCT_ID_LINKSYS_WUSB11_V21 0x2211 /* Linksys WUSB11 v2.1/v2.6 */
-
-#define VENDOR_ID_NETGEAR 0x0864
-#define PRODUCT_ID_NETGEAR_MA101A 0x4100 /* Netgear MA 101 Rev. A */
-
-#define VENDOR_ID_TEKRAM 0x0b3b
-#define PRODUCT_ID_TEKRAM_U300C 0x1612 /* Tekram U-300C / Allnet ALL0193 */
-
-#define VENDOR_ID_HP 0x03f0
-#define PRODUCT_ID_HP_HN210W 0x011c /* HP HN210W PKW-J7801A */
-
-#define VENDOR_ID_M4Y750 0x0cde /* Unknown Vendor ID! */
-#define PRODUCT_ID_M4Y750 0x0001 /* Sitecom/Z-Com/Zyxel M4Y-750 */
-
-#define VENDOR_ID_DYNALINK 0x069a
-#define PRODUCT_ID_DYNALINK_WLL013_I 0x0320 /* Dynalink/Askey WLL013 (intersil) */
-
-#define VENDOR_ID_SMC_OLD 0x0d5c
-#define PRODUCT_ID_SMC2662W_V1 0xa001 /* EZ connect 11Mpbs
-Wireless USB Adapter SMC2662W (v1) */
-
-#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
-#define PRODUCT_ID_BENQ_AWL_300 0x9000 /* AWL-300 */
-
-/* this adapter contains flash */
-#define VENDOR_ID_ADDTRON 0x05dd /* Addtron */
-#define PRODUCT_ID_ADDTRON_AWU120 0xff31 /* AWU-120 */
-/* also Compex WLU11 */
-
-#define VENDOR_ID_INTEL 0x8086 /* Intel */
-#define PRODUCT_ID_INTEL_AP310 0x0200 /* AP310 AnyPoint II USB */
-
-#define VENDOR_ID_CONCEPTRONIC 0x0d8e
-#define PRODUCT_ID_CONCEPTRONIC_C11U 0x7100 /* also Dynalink L11U */
-
-#define VENDOR_ID_ARESCOM 0xd8e
-#define PRODUCT_ID_WL_210 0x7110 /* Arescom WL-210,
- FCC id 07J-GL2411USB */
-#define VENDOR_ID_IO_DATA 0x04bb
-#define PRODUCT_ID_IO_DATA_WN_B11_USB 0x0919 /* IO-DATA WN-B11/USB */
-
-#define VENDOR_ID_BT 0x069a
-#define PRODUCT_ID_BT_VOYAGER_1010 0x0821 /* BT Voyager 1010 */
-
-
-/* at76c503-i3863 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503_I3863 0x7604 /* Generic AT76C503/3863 device */
-
-#define VENDOR_ID_SAMSUNG 0x055d
-#define PRODUCT_ID_SAMSUNG_SWL2100U 0xa000 /* Samsung SWL-2100U */
-
-
-/* at76c503-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_503R 0x7605 /* Generic AT76C503/RFMD device */
-#define PRODUCT_ID_W_BUDDIE_WN210 0x4102 /* AirVast W-Buddie WN210 */
-
-#define VENDOR_ID_DYNALINK 0x069a
-#define PRODUCT_ID_DYNALINK_WLL013_R 0x0321 /* Dynalink/Askey WLL013 (rfmd) */
-
-#define VENDOR_ID_LINKSYS 0x077b
-#define PRODUCT_ID_LINKSYS_WUSB11_V26 0x2219 /* Linksys WUSB11 v2.6 */
-#define PRODUCT_ID_NE_NWU11B 0x2227 /* Network Everywhere NWU11B */
-
-#define VENDOR_ID_NETGEAR 0x0864
-#define PRODUCT_ID_NETGEAR_MA101B 0x4102 /* Netgear MA 101 Rev. B */
-
-#define VENDOR_ID_ACTIONTEC 0x1668
-#define PRODUCT_ID_ACTIONTEC_802UAT1 0x7605 /* Actiontec 802UAT1, HWU01150-01UK */
-
-#define VENDOR_ID_DLINK 0x2001 /* D-Link */
-#define PRODUCT_ID_DLINK_DWL120 0x3200 /* DWL-120 rev. E */
-
-#define VENDOR_ID_DICK_SMITH_ELECTR 0x1371 /* Dick Smith Electronics */
-#define PRODUCT_ID_DSE_XH1153 0x5743 /* XH1153 802.11b USB adapter */
- /* also: CNet CNUSB611 (D) */
-#define PRODUCT_ID_WL_200U 0x0002 /* WL-200U */
-
-#define VENDOR_ID_BENQ 0x04a5 /* BenQ (Acer) */
-#define PRODUCT_ID_BENQ_AWL_400 0x9001 /* BenQ AWL-400 USB stick */
-
-#define VENDOR_ID_3COM 0x506
-#define PRODUCT_ID_3COM_3CRSHEW696 0xa01 /* 3COM 3CRSHEW696 */
-
-#define VENDOR_ID_SIEMENS 0x681
-#define PRODUCT_ID_SIEMENS_SANTIS_WLL013 0x1b /* Siemens Santis ADSL WLAN
- USB adapter WLL 013 */
-
-#define VENDOR_ID_BELKIN_2 0x50d
-#define PRODUCT_ID_BELKIN_F5D6050_V2 0x50 /* Belkin F5D6050, version 2 */
-
-#define VENDOR_ID_BLITZ 0x07b8
-#define PRODUCT_ID_BLITZ_NETWAVE_BWU613 0xb000 /* iBlitzz, BWU613 (not *B or *SB !) */
-
-#define VENDOR_ID_GIGABYTE 0x1044
-#define PRODUCT_ID_GIGABYTE_GN_WLBM101 0x8003 /* Gigabyte GN-WLBM101 */
-
-#define VENDOR_ID_PLANEX 0x2019
-#define PRODUCT_ID_PLANEX_GW_US11S 0x3220 /* Planex GW-US11S */
-
-#define VENDOR_ID_COMPAQ 0x049f
-#define PRODUCT_ID_IPAQ_INT_WLAN 0x0032 /* internal WLAN adapter in h5[4,5]xx series iPAQs */
-
-
-/* at76c503-rfmd-acc */
-#define VENDOR_ID_BELKIN 0x0d5c
-#define PRODUCT_ID_BELKIN_F5D6050 0xa002 /* Belkin F5D6050 / SMC 2662W v2 / SMC 2662W-AR */
-
-#define VENDOR_ID_SMC 0x083a
-#define PRODUCT_ID_SMC_2664W 0x3501
-
-
-/* at76c505-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505R 0x7606 /* Generic AT76C505/RFMD device */
-
-
-/* at76c505-rfmd2958 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505R2958 0x7613 /* Generic AT76C505/RFMD device
- also OvisLink WL-1130USB */
-
-#define VENDOR_ID_CNET 0x1371
-#define PRODUCT_ID_CNET_CNUSB611G 0x0013 /* CNet CNUSB 611G */
-#define PRODUCT_ID_FL_WL240U 0x0014 /* Fiberline WL-240U with the
- CNet vendor id */
-
-#define VENDOR_ID_LINKSYS_1915 0x1915
-#define PRODUCT_ID_LINKSYS_WUSB11V28 0x2233 /* Linksys WUSB11 v2.8 */
-
-#define VENDOR_ID_XTERASYS 0x12fd
-#define PRODUCT_ID_XTERASYS_XN_2122B 0x1001 /* Xterasys XN-2122B, also
- IBlitzz BWU613B / BWU613SB */
-
-#define VENDOR_ID_COREGA 0x07aa
-#define PRODUCT_ID_COREGA_USB_STICK_11_KK 0x7613 /* Corega WLAN USB Stick 11 (K.K.) */
-
-#define VENDOR_ID_MSI 0x0db0
-#define PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC 0x1020
-
-
-/* at76c505a-rfmd2958 */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505A 0x7614 /* Generic AT76C505A device */
-#define PRODUCT_ID_ATMEL_505AS 0x7617 /* Generic AT76C505AS device */
-
-#define VENDOR_ID_GIGASET 0x1690
-#define PRODUCT_ID_GIGASET_11 0x0701
-
-
-/* at76c505amx-rfmd */
-#define VENDOR_ID_ATMEL 0x03eb
-#define PRODUCT_ID_ATMEL_505AMX 0x7615 /* Generic AT76C505AMX device */
-
-
-static struct usb_device_id dev_table[] = {
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503I ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_LINKSYS_OLD, PRODUCT_ID_LINKSYS_WUSB11_V21),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101A ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_TEKRAM, PRODUCT_ID_TEKRAM_U300C ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_HP, PRODUCT_ID_HP_HN210W ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_M4Y750, PRODUCT_ID_M4Y750 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_I ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_SMC_OLD, PRODUCT_ID_SMC2662W_V1 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_300 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_ADDTRON, PRODUCT_ID_ADDTRON_AWU120 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_INTEL, PRODUCT_ID_INTEL_AP310 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_CONCEPTRONIC,PRODUCT_ID_CONCEPTRONIC_C11U),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_ARESCOM, PRODUCT_ID_WL_210),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_IO_DATA, PRODUCT_ID_IO_DATA_WN_B11_USB),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
- { USB_DEVICE(VENDOR_ID_BT, PRODUCT_ID_BT_VOYAGER_1010 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3861 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503_I3863 ),
- .driver_info = BOARDTYPE_503_INTERSIL_3863 },
- { USB_DEVICE(VENDOR_ID_SAMSUNG, PRODUCT_ID_SAMSUNG_SWL2100U),
- .driver_info = BOARDTYPE_503_INTERSIL_3863 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_503R ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DYNALINK, PRODUCT_ID_DYNALINK_WLL013_R ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_LINKSYS_WUSB11_V26),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_LINKSYS, PRODUCT_ID_NE_NWU11B ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_NETGEAR, PRODUCT_ID_NETGEAR_MA101B ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DLINK, PRODUCT_ID_DLINK_DWL120 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_ACTIONTEC,PRODUCT_ID_ACTIONTEC_802UAT1 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_W_BUDDIE_WN210 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_DSE_XH1153),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_DICK_SMITH_ELECTR, PRODUCT_ID_WL_200U),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BENQ, PRODUCT_ID_BENQ_AWL_400),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_3COM, PRODUCT_ID_3COM_3CRSHEW696),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_SIEMENS, PRODUCT_ID_SIEMENS_SANTIS_WLL013),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BELKIN_2, PRODUCT_ID_BELKIN_F5D6050_V2 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_BLITZ, PRODUCT_ID_BLITZ_NETWAVE_BWU613 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_GIGABYTE, PRODUCT_ID_GIGABYTE_GN_WLBM101 ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_PLANEX, PRODUCT_ID_PLANEX_GW_US11S ),
- .driver_info = BOARDTYPE_503_RFMD },
- { USB_DEVICE(VENDOR_ID_COMPAQ, PRODUCT_ID_IPAQ_INT_WLAN),
- .driver_info = BOARDTYPE_503_RFMD },
-
- { USB_DEVICE(VENDOR_ID_SMC, PRODUCT_ID_SMC_2664W),
- .driver_info = BOARDTYPE_503_RFMD_ACC },
- { USB_DEVICE(VENDOR_ID_BELKIN, PRODUCT_ID_BELKIN_F5D6050 ),
- .driver_info = BOARDTYPE_503_RFMD_ACC },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R ),
- .driver_info = BOARDTYPE_505_RFMD },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505R2958 ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_FL_WL240U ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_CNET, PRODUCT_ID_CNET_CNUSB611G ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_LINKSYS_1915, PRODUCT_ID_LINKSYS_WUSB11V28 ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_XTERASYS, PRODUCT_ID_XTERASYS_XN_2122B ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_COREGA, PRODUCT_ID_COREGA_USB_STICK_11_KK ),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_MSI, PRODUCT_ID_MSI_MS6978_WLAN_BOX_PC2PC),
- .driver_info = BOARDTYPE_505_RFMD_2958 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505A ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AS ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
- { USB_DEVICE(VENDOR_ID_GIGASET, PRODUCT_ID_GIGASET_11 ),
- .driver_info = BOARDTYPE_505A_RFMD_2958 },
-
- { USB_DEVICE(VENDOR_ID_ATMEL, PRODUCT_ID_ATMEL_505AMX ),
- .driver_info = BOARDTYPE_505AMX_RFMD },
-
- { }
-};
-
-MODULE_DEVICE_TABLE (usb, dev_table);
-
-
static int at76c50x_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{
@@ -7049,7 +6765,6 @@ static struct usb_driver module_usb = {
.id_table = dev_table,
};
-
static int __init mod_init(void)
{
int result;
@@ -7095,6 +6810,34 @@ static void __exit mod_exit(void)
#endif
}
+module_param_named(debug, at76_debug, int, 0600);
+MODULE_PARM_DESC(debug, "Debugging level");
+module_param(rx_copybreak, int, 0400);
+MODULE_PARM_DESC(rx_copybreak, "rx packet copy threshold");
+module_param(scan_min_time, int, 0400);
+MODULE_PARM_DESC(scan_min_time, "scan min channel time (default: 10)");
+module_param(scan_max_time, int, 0400);
+MODULE_PARM_DESC(scan_max_time, "scan max channel time (default: 120)");
+module_param(scan_mode, int, 0400);
+MODULE_PARM_DESC(scan_mode, "scan mode: 0 active (with ProbeReq, default), 1 passive");
+module_param(preamble_type, int, 0400);
+MODULE_PARM_DESC(preamble_type, "preamble type: 0 long (default), 1 short");
+module_param(auth_mode, int, 0400);
+MODULE_PARM_DESC(auth_mode, "authentication mode: 0 open system (default), 1 shared secret");
+module_param(pm_mode, int, 0400);
+MODULE_PARM_DESC(pm_mode, "power management mode: 1 active (def.), 2 powersave, 3 smart save");
+module_param(pm_period, int, 0400);
+MODULE_PARM_DESC(pm_period, "period of waking up the device in usec");
+module_param(international_roaming, int, 0400);
+MODULE_PARM_DESC(international_roaming, "enable international roaming: 0 (no, default), 1 (yes)");
+module_param(default_iw_mode, int, 0400);
+MODULE_PARM_DESC(default_iw_mode, "default IW mode for a new device: 1 (ad-hoc), 2 (infrastructure, def.), 6 (monitor mode)");
+module_param(monitor_scan_min_time, int, 0400);
+MODULE_PARM_DESC(monitor_scan_min_time, "scan min channel time in MONITOR MODE (default: 50)");
+module_param(monitor_scan_max_time, int, 0400);
+MODULE_PARM_DESC(monitor_scan_max_time, "scan max channel time in MONITOR MODE (default: 600)");
+module_param(netdev_name, charp, 0400);
+
module_init(mod_init);
module_exit(mod_exit);
diff --git a/at76c503.h b/at76c503.h
index b2b03a0..8af15aa 100644
--- a/at76c503.h
+++ b/at76c503.h
@@ -1,26 +1,22 @@
-/* -*- linux-c -*- */
/*
- * Copyright (c) 2002 - 2003 Oliver Kurth
- * (c) 2003 - 2004 Jörg Albert <joerg.albert@gmx.de>
+ * Copyright (c) 2002,2003 Oliver Kurth
+ * (c) 2003,2004 Jörg Albert <joerg.albert@gmx.de>
+ * (c) 2007 Guido Guenther <agx@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 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:
+ * 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!
- *
- * For the latest version of this driver, mailinglists
- * and other info, please check
- * http://at76c503a.berlios.de/
+ * 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 _AT76C503_H
@@ -29,8 +25,7 @@
#include <net/ieee80211.h>
/* current driver version */
-#define DRIVER_VERSION "0.14dev"
-
+#define DRIVER_VERSION "0.15dev"
/* our private ioctl's */
/* set preamble length*/
@@ -137,15 +132,6 @@
#define PRIVACY_OPT_IMPL offsetof(struct mib_mac_mgmt, privacy_option_implemented)
-#define BOARDTYPE_503_INTERSIL_3861 1
-#define BOARDTYPE_503_INTERSIL_3863 2
-#define BOARDTYPE_503_RFMD 3
-#define BOARDTYPE_503_RFMD_ACC 4
-#define BOARDTYPE_505_RFMD 5
-#define BOARDTYPE_505_RFMD_2958 6
-#define BOARDTYPE_505A_RFMD_2958 7
-#define BOARDTYPE_505AMX_RFMD 8
-
struct hwcfg_r505 {
u8 cr39_values[14];
u8 reserved1[14];
@@ -379,6 +365,11 @@ struct mib_mdomain {
u8 channel_list[14]; /* 0 for invalid channels */
} __attribute__ ((packed));
+static u8 snapsig[] = {0xaa, 0xaa, 0x03};
+/* RFC 1042 encapsulates Ethernet frames in 802.2 SNAP (0xaa, 0xaa, 0x03) with
+ * a SNAP OID of 0 (0x00, 0x00, 0x00) */
+static u8 rfc1042sig[] = {0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00};
+
/* states in infrastructure mode */
enum infra_state {
INIT,
@@ -396,6 +387,21 @@ enum infra_state {
MONITORING,
};
+#define KEVENT_CTRL_HALT 1
+#define KEVENT_NEW_BSS 2
+#define KEVENT_SET_PROMISC 3
+#define KEVENT_MGMT_TIMEOUT 4
+#define KEVENT_SCAN 5
+#define KEVENT_JOIN 6
+#define KEVENT_STARTIBSS 7
+#define KEVENT_SUBMIT_RX 8
+#define KEVENT_RESTART 9 /* restart the device */
+#define KEVENT_ASSOC_DONE 10 /* execute the power save settings:
+ listen interval, pm mode, assoc id */
+#define KEVENT_EXTERNAL_FW 11
+#define KEVENT_INTERNAL_FW 12
+#define KEVENT_RESET_DEVICE 13
+
/* a description of a regulatory domain and the allowed channels */
struct reg_domain {
u16 code;
@@ -408,7 +414,6 @@ struct reg_domain {
(by iwlist ?) after the device started, because all entries from
other channels than the one the device locks on get removed, too */
#define BSS_LIST_TIMEOUT (120*HZ)
-
/* struct to store BSS info found during scan */
#define BSS_LIST_MAX_RATE_LEN 32 /* 32 rates should be enough ... */
@@ -451,7 +456,6 @@ struct rx_data_buf {
};
#define NR_RX_DATA_BUF 8
-
/* how often do we try to submit a rx urb until giving up */
#define NR_SUBMIT_RX_TRIES 8
@@ -636,8 +640,8 @@ typedef struct p80211msg
uint8_t devname[IFNAMSIZ];
} __attribute__ ((packed)) p80211msg_t;
-#define P80211ENUM_msgitem_status_data_ok 0
-#define P80211ENUM_msgitem_status_no_value 1
+#define P80211ENUM_msgitem_status_data_ok 0
+#define P80211ENUM_msgitem_status_no_value 1
#define P80211ENUM_truth_false 0
#define P80211ENUM_truth_true 1
@@ -670,6 +674,118 @@ typedef struct p80211msg_lnxind_wlansniffrm
p80211item_uint32_t frmlen;
} __attribute__ ((packed)) p80211msg_lnxind_wlansniffrm_t;
+#define BEACON_MAX_DATA_LENGTH 1500
+/* beacon in ieee80211_hdr_3addr.payload */
+struct ieee802_11_beacon_data {
+ u8 timestamp[8]; /* TSFTIMER */
+ __le16 beacon_interval; /* Kms between TBTTs (Target Beacon Transmission Times) */
+ __le16 capability_information;
+ u8 data[BEACON_MAX_DATA_LENGTH]; /* contains: SSID (tag,length,value),
+ Supported Rates (tlv), channel */
+} __attribute__ ((packed));
+
+/* disassoc frame in ieee80211_hdr_3addr.payload */
+struct ieee802_11_disassoc_frame {
+ __le16 reason;
+} __attribute__ ((packed));
+#define DISASSOC_FRAME_SIZE \
+ (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
+ sizeof(struct ieee802_11_disassoc_frame))
+
+/* assoc request in ieee80211_hdr_3addr.payload */
+struct ieee802_11_assoc_req {
+ __le16 capability;
+ __le16 listen_interval;
+ u8 data[1]; /* variable number of bytes for SSID
+ and supported rates (tlv coded) */
+};
+/* the maximum size of an AssocReq packet */
+#define ASSOCREQ_MAX_SIZE \
+ (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
+ offsetof(struct ieee802_11_assoc_req,data) +\
+ 1+1+IW_ESSID_MAX_SIZE + 1+1+4)
+
+/* reassoc request in ieee80211_hdr_3addr.payload */
+struct ieee802_11_reassoc_req {
+ __le16 capability;
+ __le16 listen_interval;
+ u8 curr_ap[ETH_ALEN]; /* the bssid of the AP we are
+ currently associated to */
+ u8 data[1]; /* variable number of bytes for SSID
+ and supported rates (tlv coded) */
+} __attribute__ ((packed));
+
+/* the maximum size of an AssocReq packet */
+#define REASSOCREQ_MAX_SIZE \
+ (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
+ offsetof(struct ieee802_11_reassoc_req,data) +\
+ 1+1+IW_ESSID_MAX_SIZE + 1+1+4)
+
+/* assoc/reassoc response */
+struct ieee802_11_assoc_resp {
+ __le16 capability;
+ __le16 status;
+ __le16 assoc_id;
+ u8 data[1]; /* variable number of bytes for
+ supported rates (tlv coded) */
+} __attribute__ ((packed));
+
+/* auth. request/response in ieee80211_hdr_3addr.payload */
+struct ieee802_11_auth_frame {
+ __le16 algorithm;
+ __le16 seq_nr;
+ __le16 status;
+ u8 challenge[0];
+} __attribute__ ((packed));
+/* for shared secret auth, add the challenge text size */
+#define AUTH_FRAME_SIZE \
+ (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
+ sizeof(struct ieee802_11_auth_frame))
+
+/* deauth frame in ieee80211_hdr_3addr.payload */
+struct ieee802_11_deauth_frame {
+ __le16 reason;
+} __attribute__ ((packed));
+#define DEAUTH_FRAME_SIZE \
+ (AT76C503_TX_HDRLEN + IEEE802_11_MGMT_HEADER_SIZE +\
+ sizeof(struct ieee802_11_disauth_frame))
+
+/* how often do we re-try these packets ? */
+#define AUTH_RETRIES 3
+#define ASSOC_RETRIES 3
+#define DISASSOC_RETRIES 3
+
+/* the beacon timeout in infra mode when we are connected (in seconds) */
+#define BEACON_TIMEOUT 10
+/* the interval in ticks we poll if scan is completed */
+#define SCAN_POLL_INTERVAL (HZ/4)
+
+#define DEF_RTS_THRESHOLD 1536
+#define DEF_FRAG_THRESHOLD 1536
+#define DEF_SHORT_RETRY_LIMIT 8
+#define DEF_CHANNEL 10
+
+#define MAX_RTS_THRESHOLD (MAX_FRAG_THRESHOLD + 1)
+
+/* The frequency of each channel in MHz */
+static const long channel_frequency[] = {
+ 2412, 2417, 2422, 2427, 2432, 2437, 2442,
+ 2447, 2452, 2457, 2462, 2467, 2472, 2484
+};
+#define NUM_CHANNELS ( sizeof(channel_frequency) / sizeof(channel_frequency[0]) )
+
+/* the broadcast address */
+static const u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
+static const u8 off_addr[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+/* the supported rates of this hardware, bit7 marks a basic rate */
+static const u8 hw_rates[4] = {0x82,0x84,0x0b,0x16};
+
+/* the max padding size for tx in bytes (see calc_padding) */
+#define MAX_PADDING_SIZE 53
+
+/* the size of the ieee802.11 header (excl. the at76c503 tx header) */
+#define IEEE802_11_MGMT_HEADER_SIZE offsetof(struct ieee80211_hdr_3addr, payload)
+
/* at76_debug bits */
#define DBG_PROGRESS 0x00000001 /* progress of scan-join-(auth-assoc)-connected */
#define DBG_BSS_TABLE 0x00000002 /* show the bss table after scans */