ar5523: Add new driver
This driver is for the AR5523 chipset from Atheros. It was created in 2007 by Christoph Hellwig but it was never finished. I found it a couple of months ago and after some polishing it's working pretty fine. The driver was written with the FreeBSD driver (uath) as reference, which was written with the reverse-engineered windows driver as reference, hence the feature set is very limited. Station mode only, no HW crypto offload. Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
8ff5dc92fe
commit
b7d572e187
@ -7477,6 +7477,12 @@ S: Maintained
|
||||
F: Documentation/usb/acm.txt
|
||||
F: drivers/usb/class/cdc-acm.*
|
||||
|
||||
USB AR5523 WIRELESS DRIVER
|
||||
M: Pontus Fuchs <pontus.fuchs@gmail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/wireless/ath/ar5523/
|
||||
|
||||
USB ATTACHED SCSI
|
||||
M: Matthew Wilcox <willy@linux.intel.com>
|
||||
M: Sarah Sharp <sarah.a.sharp@linux.intel.com>
|
||||
|
@ -26,5 +26,6 @@ source "drivers/net/wireless/ath/ath5k/Kconfig"
|
||||
source "drivers/net/wireless/ath/ath9k/Kconfig"
|
||||
source "drivers/net/wireless/ath/carl9170/Kconfig"
|
||||
source "drivers/net/wireless/ath/ath6kl/Kconfig"
|
||||
source "drivers/net/wireless/ath/ar5523/Kconfig"
|
||||
|
||||
endif
|
||||
|
@ -2,6 +2,7 @@ obj-$(CONFIG_ATH5K) += ath5k/
|
||||
obj-$(CONFIG_ATH9K_HW) += ath9k/
|
||||
obj-$(CONFIG_CARL9170) += carl9170/
|
||||
obj-$(CONFIG_ATH6KL) += ath6kl/
|
||||
obj-$(CONFIG_AR5523) += ar5523/
|
||||
|
||||
obj-$(CONFIG_ATH_COMMON) += ath.o
|
||||
|
||||
|
7
drivers/net/wireless/ath/ar5523/Kconfig
Normal file
7
drivers/net/wireless/ath/ar5523/Kconfig
Normal file
@ -0,0 +1,7 @@
|
||||
config AR5523
|
||||
tristate "Atheros AR5523 wireless driver support"
|
||||
depends on MAC80211 && USB
|
||||
select FW_LOADER
|
||||
---help---
|
||||
This module add support for AR5523 based USB dongles such as D-Link
|
||||
DWL-G132, Netgear WPN111 and many more.
|
1
drivers/net/wireless/ath/ar5523/Makefile
Normal file
1
drivers/net/wireless/ath/ar5523/Makefile
Normal file
@ -0,0 +1 @@
|
||||
obj-$(CONFIG_AR5523) := ar5523.o
|
1806
drivers/net/wireless/ath/ar5523/ar5523.c
Normal file
1806
drivers/net/wireless/ath/ar5523/ar5523.c
Normal file
File diff suppressed because it is too large
Load Diff
152
drivers/net/wireless/ath/ar5523/ar5523.h
Normal file
152
drivers/net/wireless/ath/ar5523/ar5523.h
Normal file
@ -0,0 +1,152 @@
|
||||
/*
|
||||
* Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr>
|
||||
* Copyright (c) 2006 Sam Leffler, Errno Consulting
|
||||
* Copyright (c) 2007 Christoph Hellwig <hch@lst.de>
|
||||
* Copyright (c) 2008-2009 Weongyo Jeong <weongyo@freebsd.org>
|
||||
* Copyright (c) 2012 Pontus Fuchs <pontus.fuchs@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or 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.
|
||||
*/
|
||||
|
||||
#define AR5523_FLAG_PRE_FIRMWARE (1 << 0)
|
||||
#define AR5523_FLAG_ABG (1 << 1)
|
||||
|
||||
#define AR5523_FIRMWARE_FILE "ar5523.bin"
|
||||
|
||||
#define AR5523_CMD_TX_PIPE 0x01
|
||||
#define AR5523_DATA_TX_PIPE 0x02
|
||||
#define AR5523_CMD_RX_PIPE 0x81
|
||||
#define AR5523_DATA_RX_PIPE 0x82
|
||||
|
||||
#define ar5523_cmd_tx_pipe(dev) \
|
||||
usb_sndbulkpipe((dev), AR5523_CMD_TX_PIPE)
|
||||
#define ar5523_data_tx_pipe(dev) \
|
||||
usb_sndbulkpipe((dev), AR5523_DATA_TX_PIPE)
|
||||
#define ar5523_cmd_rx_pipe(dev) \
|
||||
usb_rcvbulkpipe((dev), AR5523_CMD_RX_PIPE)
|
||||
#define ar5523_data_rx_pipe(dev) \
|
||||
usb_rcvbulkpipe((dev), AR5523_DATA_RX_PIPE)
|
||||
|
||||
#define AR5523_DATA_TIMEOUT 10000
|
||||
#define AR5523_CMD_TIMEOUT 1000
|
||||
|
||||
#define AR5523_TX_DATA_COUNT 8
|
||||
#define AR5523_TX_DATA_RESTART_COUNT 2
|
||||
#define AR5523_RX_DATA_COUNT 16
|
||||
#define AR5523_RX_DATA_REFILL_COUNT 8
|
||||
|
||||
#define AR5523_CMD_ID 1
|
||||
#define AR5523_DATA_ID 2
|
||||
|
||||
#define AR5523_TX_WD_TIMEOUT (HZ * 2)
|
||||
#define AR5523_FLUSH_TIMEOUT (HZ * 3)
|
||||
|
||||
enum AR5523_flags {
|
||||
AR5523_HW_UP,
|
||||
AR5523_USB_DISCONNECTED,
|
||||
AR5523_CONNECTED
|
||||
};
|
||||
|
||||
struct ar5523_tx_cmd {
|
||||
struct ar5523 *ar;
|
||||
struct urb *urb_tx;
|
||||
void *buf_tx;
|
||||
void *odata;
|
||||
int olen;
|
||||
int flags;
|
||||
int res;
|
||||
struct completion done;
|
||||
};
|
||||
|
||||
/* This struct is placed in tx_info->driver_data. It must not be larger
|
||||
* than IEEE80211_TX_INFO_DRIVER_DATA_SIZE.
|
||||
*/
|
||||
struct ar5523_tx_data {
|
||||
struct list_head list;
|
||||
struct ar5523 *ar;
|
||||
struct sk_buff *skb;
|
||||
struct urb *urb;
|
||||
};
|
||||
|
||||
struct ar5523_rx_data {
|
||||
struct list_head list;
|
||||
struct ar5523 *ar;
|
||||
struct urb *urb;
|
||||
struct sk_buff *skb;
|
||||
};
|
||||
|
||||
struct ar5523 {
|
||||
struct usb_device *dev;
|
||||
struct ieee80211_hw *hw;
|
||||
|
||||
unsigned long flags;
|
||||
struct mutex mutex;
|
||||
struct workqueue_struct *wq;
|
||||
|
||||
struct ar5523_tx_cmd tx_cmd;
|
||||
|
||||
struct delayed_work stat_work;
|
||||
|
||||
struct timer_list tx_wd_timer;
|
||||
struct work_struct tx_wd_work;
|
||||
struct work_struct tx_work;
|
||||
struct list_head tx_queue_pending;
|
||||
struct list_head tx_queue_submitted;
|
||||
spinlock_t tx_data_list_lock;
|
||||
wait_queue_head_t tx_flush_waitq;
|
||||
|
||||
/* Queued + Submitted TX frames */
|
||||
atomic_t tx_nr_total;
|
||||
|
||||
/* Submitted TX frames */
|
||||
atomic_t tx_nr_pending;
|
||||
|
||||
void *rx_cmd_buf;
|
||||
struct urb *rx_cmd_urb;
|
||||
|
||||
struct ar5523_rx_data rx_data[AR5523_RX_DATA_COUNT];
|
||||
spinlock_t rx_data_list_lock;
|
||||
struct list_head rx_data_free;
|
||||
struct list_head rx_data_used;
|
||||
atomic_t rx_data_free_cnt;
|
||||
|
||||
struct work_struct rx_refill_work;
|
||||
|
||||
int rxbufsz;
|
||||
u8 serial[16];
|
||||
|
||||
struct ieee80211_channel channels[14];
|
||||
struct ieee80211_rate rates[12];
|
||||
struct ieee80211_supported_band band;
|
||||
struct ieee80211_vif *vif;
|
||||
};
|
||||
|
||||
/* flags for sending firmware commands */
|
||||
#define AR5523_CMD_FLAG_READ (1 << 1)
|
||||
#define AR5523_CMD_FLAG_MAGIC (1 << 2)
|
||||
|
||||
#define ar5523_dbg(ar, format, arg...) \
|
||||
dev_dbg(&(ar)->dev->dev, format, ## arg)
|
||||
|
||||
/* On USB hot-unplug there can be a lot of URBs in flight and they'll all
|
||||
* fail. Instead of dealing with them in every possible place just surpress
|
||||
* any messages on USB disconnect.
|
||||
*/
|
||||
#define ar5523_err(ar, format, arg...) \
|
||||
do { \
|
||||
if (!test_bit(AR5523_USB_DISCONNECTED, &ar->flags)) { \
|
||||
dev_err(&(ar)->dev->dev, format, ## arg); \
|
||||
} \
|
||||
} while (0)
|
||||
#define ar5523_info(ar, format, arg...) \
|
||||
dev_info(&(ar)->dev->dev, format, ## arg)
|
431
drivers/net/wireless/ath/ar5523/ar5523_hw.h
Normal file
431
drivers/net/wireless/ath/ar5523/ar5523_hw.h
Normal file
@ -0,0 +1,431 @@
|
||||
/*
|
||||
* Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr>
|
||||
* Copyright (c) 2006 Sam Leffler, Errno Consulting
|
||||
* Copyright (c) 2007 Christoph Hellwig <hch@lst.de>
|
||||
* Copyright (c) 2008-2009 Weongyo Jeong <weongyo@freebsd.org>
|
||||
* Copyright (c) 2012 Pontus Fuchs <pontus.fuchs@gmail.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and/or 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.
|
||||
*/
|
||||
|
||||
/* all fields are big endian */
|
||||
struct ar5523_fwblock {
|
||||
__be32 flags;
|
||||
#define AR5523_WRITE_BLOCK (1 << 4)
|
||||
|
||||
__be32 len;
|
||||
#define AR5523_MAX_FWBLOCK_SIZE 2048
|
||||
|
||||
__be32 total;
|
||||
__be32 remain;
|
||||
__be32 rxtotal;
|
||||
__be32 pad[123];
|
||||
} __packed;
|
||||
|
||||
#define AR5523_MAX_RXCMDSZ 1024
|
||||
#define AR5523_MAX_TXCMDSZ 1024
|
||||
|
||||
struct ar5523_cmd_hdr {
|
||||
__be32 len;
|
||||
__be32 code;
|
||||
/* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */
|
||||
/* messages from Host -> Target */
|
||||
#define WDCMSG_HOST_AVAILABLE 0x01
|
||||
#define WDCMSG_BIND 0x02
|
||||
#define WDCMSG_TARGET_RESET 0x03
|
||||
#define WDCMSG_TARGET_GET_CAPABILITY 0x04
|
||||
#define WDCMSG_TARGET_SET_CONFIG 0x05
|
||||
#define WDCMSG_TARGET_GET_STATUS 0x06
|
||||
#define WDCMSG_TARGET_GET_STATS 0x07
|
||||
#define WDCMSG_TARGET_START 0x08
|
||||
#define WDCMSG_TARGET_STOP 0x09
|
||||
#define WDCMSG_TARGET_ENABLE 0x0a
|
||||
#define WDCMSG_TARGET_DISABLE 0x0b
|
||||
#define WDCMSG_CREATE_CONNECTION 0x0c
|
||||
#define WDCMSG_UPDATE_CONNECT_ATTR 0x0d
|
||||
#define WDCMSG_DELETE_CONNECT 0x0e
|
||||
#define WDCMSG_SEND 0x0f
|
||||
#define WDCMSG_FLUSH 0x10
|
||||
/* messages from Target -> Host */
|
||||
#define WDCMSG_STATS_UPDATE 0x11
|
||||
#define WDCMSG_BMISS 0x12
|
||||
#define WDCMSG_DEVICE_AVAIL 0x13
|
||||
#define WDCMSG_SEND_COMPLETE 0x14
|
||||
#define WDCMSG_DATA_AVAIL 0x15
|
||||
#define WDCMSG_SET_PWR_MODE 0x16
|
||||
#define WDCMSG_BMISS_ACK 0x17
|
||||
#define WDCMSG_SET_LED_STEADY 0x18
|
||||
#define WDCMSG_SET_LED_BLINK 0x19
|
||||
/* more messages */
|
||||
#define WDCMSG_SETUP_BEACON_DESC 0x1a
|
||||
#define WDCMSG_BEACON_INIT 0x1b
|
||||
#define WDCMSG_RESET_KEY_CACHE 0x1c
|
||||
#define WDCMSG_RESET_KEY_CACHE_ENTRY 0x1d
|
||||
#define WDCMSG_SET_KEY_CACHE_ENTRY 0x1e
|
||||
#define WDCMSG_SET_DECOMP_MASK 0x1f
|
||||
#define WDCMSG_SET_REGULATORY_DOMAIN 0x20
|
||||
#define WDCMSG_SET_LED_STATE 0x21
|
||||
#define WDCMSG_WRITE_ASSOCID 0x22
|
||||
#define WDCMSG_SET_STA_BEACON_TIMERS 0x23
|
||||
#define WDCMSG_GET_TSF 0x24
|
||||
#define WDCMSG_RESET_TSF 0x25
|
||||
#define WDCMSG_SET_ADHOC_MODE 0x26
|
||||
#define WDCMSG_SET_BASIC_RATE 0x27
|
||||
#define WDCMSG_MIB_CONTROL 0x28
|
||||
#define WDCMSG_GET_CHANNEL_DATA 0x29
|
||||
#define WDCMSG_GET_CUR_RSSI 0x2a
|
||||
#define WDCMSG_SET_ANTENNA_SWITCH 0x2b
|
||||
#define WDCMSG_USE_SHORT_SLOT_TIME 0x2f
|
||||
#define WDCMSG_SET_POWER_MODE 0x30
|
||||
#define WDCMSG_SETUP_PSPOLL_DESC 0x31
|
||||
#define WDCMSG_SET_RX_MULTICAST_FILTER 0x32
|
||||
#define WDCMSG_RX_FILTER 0x33
|
||||
#define WDCMSG_PER_CALIBRATION 0x34
|
||||
#define WDCMSG_RESET 0x35
|
||||
#define WDCMSG_DISABLE 0x36
|
||||
#define WDCMSG_PHY_DISABLE 0x37
|
||||
#define WDCMSG_SET_TX_POWER_LIMIT 0x38
|
||||
#define WDCMSG_SET_TX_QUEUE_PARAMS 0x39
|
||||
#define WDCMSG_SETUP_TX_QUEUE 0x3a
|
||||
#define WDCMSG_RELEASE_TX_QUEUE 0x3b
|
||||
#define WDCMSG_SET_DEFAULT_KEY 0x43
|
||||
|
||||
__u32 priv; /* driver private data,
|
||||
don't care about endianess */
|
||||
__be32 magic;
|
||||
__be32 reserved2[4];
|
||||
};
|
||||
|
||||
struct ar5523_cmd_host_available {
|
||||
__be32 sw_ver_major;
|
||||
__be32 sw_ver_minor;
|
||||
__be32 sw_ver_patch;
|
||||
__be32 sw_ver_build;
|
||||
} __packed;
|
||||
|
||||
#define ATH_SW_VER_MAJOR 1
|
||||
#define ATH_SW_VER_MINOR 5
|
||||
#define ATH_SW_VER_PATCH 0
|
||||
#define ATH_SW_VER_BUILD 9999
|
||||
|
||||
struct ar5523_chunk {
|
||||
u8 seqnum; /* sequence number for ordering */
|
||||
u8 flags;
|
||||
#define UATH_CFLAGS_FINAL 0x01 /* final chunk of a msg */
|
||||
#define UATH_CFLAGS_RXMSG 0x02 /* chunk contains rx completion */
|
||||
#define UATH_CFLAGS_DEBUG 0x04 /* for debugging */
|
||||
__be16 length; /* chunk size in bytes */
|
||||
/* chunk data follows */
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Message format for a WDCMSG_DATA_AVAIL message from Target to Host.
|
||||
*/
|
||||
struct ar5523_rx_desc {
|
||||
__be32 len; /* msg length including header */
|
||||
__be32 code; /* WDCMSG_DATA_AVAIL */
|
||||
__be32 gennum; /* generation number */
|
||||
__be32 status; /* start of RECEIVE_INFO */
|
||||
#define UATH_STATUS_OK 0
|
||||
#define UATH_STATUS_STOP_IN_PROGRESS 1
|
||||
#define UATH_STATUS_CRC_ERR 2
|
||||
#define UATH_STATUS_PHY_ERR 3
|
||||
#define UATH_STATUS_DECRYPT_CRC_ERR 4
|
||||
#define UATH_STATUS_DECRYPT_MIC_ERR 5
|
||||
#define UATH_STATUS_DECOMP_ERR 6
|
||||
#define UATH_STATUS_KEY_ERR 7
|
||||
#define UATH_STATUS_ERR 8
|
||||
__be32 tstamp_low; /* low-order 32-bits of rx timestamp */
|
||||
__be32 tstamp_high; /* high-order 32-bits of rx timestamp */
|
||||
__be32 framelen; /* frame length */
|
||||
__be32 rate; /* rx rate code */
|
||||
__be32 antenna;
|
||||
__be32 rssi;
|
||||
__be32 channel;
|
||||
__be32 phyerror;
|
||||
__be32 connix; /* key table ix for bss traffic */
|
||||
__be32 decrypterror;
|
||||
__be32 keycachemiss;
|
||||
__be32 pad; /* XXX? */
|
||||
} __packed;
|
||||
|
||||
struct ar5523_tx_desc {
|
||||
__be32 msglen;
|
||||
__be32 msgid; /* msg id (supplied by host) */
|
||||
__be32 type; /* opcode: WDMSG_SEND or WDCMSG_FLUSH */
|
||||
__be32 txqid; /* tx queue id and flags */
|
||||
#define UATH_TXQID_MASK 0x0f
|
||||
#define UATH_TXQID_MINRATE 0x10 /* use min tx rate */
|
||||
#define UATH_TXQID_FF 0x20 /* content is fast frame */
|
||||
__be32 connid; /* tx connection id */
|
||||
#define UATH_ID_INVALID 0xffffffff /* for sending prior to connection */
|
||||
__be32 flags; /* non-zero if response desired */
|
||||
#define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */
|
||||
__be32 buflen; /* payload length */
|
||||
} __packed;
|
||||
|
||||
|
||||
#define AR5523_ID_BSS 2
|
||||
#define AR5523_ID_BROADCAST 0xffffffff
|
||||
|
||||
/* structure for command UATH_CMD_WRITE_MAC */
|
||||
struct ar5523_write_mac {
|
||||
__be32 reg;
|
||||
__be32 len;
|
||||
u8 data[32];
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_rateset {
|
||||
__u8 length;
|
||||
#define AR5523_MAX_NRATES 32
|
||||
__u8 set[AR5523_MAX_NRATES];
|
||||
};
|
||||
|
||||
struct ar5523_cmd_set_associd { /* AR5523_WRITE_ASSOCID */
|
||||
__be32 defaultrateix;
|
||||
__be32 associd;
|
||||
__be32 timoffset;
|
||||
__be32 turboprime;
|
||||
__u8 bssid[6];
|
||||
} __packed;
|
||||
|
||||
/* structure for command WDCMSG_RESET */
|
||||
struct ar5523_cmd_reset {
|
||||
__be32 flags; /* channel flags */
|
||||
#define UATH_CHAN_TURBO 0x0100
|
||||
#define UATH_CHAN_CCK 0x0200
|
||||
#define UATH_CHAN_OFDM 0x0400
|
||||
#define UATH_CHAN_2GHZ 0x1000
|
||||
#define UATH_CHAN_5GHZ 0x2000
|
||||
__be32 freq; /* channel frequency */
|
||||
__be32 maxrdpower;
|
||||
__be32 cfgctl;
|
||||
__be32 twiceantennareduction;
|
||||
__be32 channelchange;
|
||||
__be32 keeprccontent;
|
||||
} __packed;
|
||||
|
||||
/* structure for command WDCMSG_SET_BASIC_RATE */
|
||||
struct ar5523_cmd_rates {
|
||||
__be32 connid;
|
||||
__be32 keeprccontent;
|
||||
__be32 size;
|
||||
struct ar5523_cmd_rateset rateset;
|
||||
} __packed;
|
||||
|
||||
enum {
|
||||
WLAN_MODE_NONE = 0,
|
||||
WLAN_MODE_11b,
|
||||
WLAN_MODE_11a,
|
||||
WLAN_MODE_11g,
|
||||
WLAN_MODE_11a_TURBO,
|
||||
WLAN_MODE_11g_TURBO,
|
||||
WLAN_MODE_11a_TURBO_PRIME,
|
||||
WLAN_MODE_11g_TURBO_PRIME,
|
||||
WLAN_MODE_11a_XR,
|
||||
WLAN_MODE_11g_XR,
|
||||
};
|
||||
|
||||
struct ar5523_cmd_connection_attr {
|
||||
__be32 longpreambleonly;
|
||||
struct ar5523_cmd_rateset rateset;
|
||||
__be32 wlanmode;
|
||||
} __packed;
|
||||
|
||||
/* structure for command AR5523_CREATE_CONNECTION */
|
||||
struct ar5523_cmd_create_connection {
|
||||
__be32 connid;
|
||||
__be32 bssid;
|
||||
__be32 size;
|
||||
struct ar5523_cmd_connection_attr connattr;
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_ledsteady { /* WDCMSG_SET_LED_STEADY */
|
||||
__be32 lednum;
|
||||
#define UATH_LED_LINK 0
|
||||
#define UATH_LED_ACTIVITY 1
|
||||
__be32 ledmode;
|
||||
#define UATH_LED_OFF 0
|
||||
#define UATH_LED_ON 1
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_ledblink { /* WDCMSG_SET_LED_BLINK */
|
||||
__be32 lednum;
|
||||
__be32 ledmode;
|
||||
__be32 blinkrate;
|
||||
__be32 slowmode;
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_ledstate { /* WDCMSG_SET_LED_STATE */
|
||||
__be32 connected;
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_txq_attr {
|
||||
__be32 priority;
|
||||
__be32 aifs;
|
||||
__be32 logcwmin;
|
||||
__be32 logcwmax;
|
||||
__be32 bursttime;
|
||||
__be32 mode;
|
||||
__be32 qflags;
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_txq_setup { /* WDCMSG_SETUP_TX_QUEUE */
|
||||
__be32 qid;
|
||||
__be32 len;
|
||||
struct ar5523_cmd_txq_attr attr;
|
||||
} __packed;
|
||||
|
||||
struct ar5523_cmd_rx_filter { /* WDCMSG_RX_FILTER */
|
||||
__be32 bits;
|
||||
#define UATH_FILTER_RX_UCAST 0x00000001
|
||||
#define UATH_FILTER_RX_MCAST 0x00000002
|
||||
#define UATH_FILTER_RX_BCAST 0x00000004
|
||||
#define UATH_FILTER_RX_CONTROL 0x00000008
|
||||
#define UATH_FILTER_RX_BEACON 0x00000010 /* beacon frames */
|
||||
#define UATH_FILTER_RX_PROM 0x00000020 /* promiscuous mode */
|
||||
#define UATH_FILTER_RX_PHY_ERR 0x00000040 /* phy errors */
|
||||
#define UATH_FILTER_RX_PHY_RADAR 0x00000080 /* radar phy errors */
|
||||
#define UATH_FILTER_RX_XR_POOL 0x00000400 /* XR group polls */
|
||||
#define UATH_FILTER_RX_PROBE_REQ 0x00000800
|
||||
__be32 op;
|
||||
#define UATH_FILTER_OP_INIT 0x0
|
||||
#define UATH_FILTER_OP_SET 0x1
|
||||
#define UATH_FILTER_OP_CLEAR 0x2
|
||||
#define UATH_FILTER_OP_TEMP 0x3
|
||||
#define UATH_FILTER_OP_RESTORE 0x4
|
||||
} __packed;
|
||||
|
||||
enum {
|
||||
CFG_NONE, /* Sentinal to indicate "no config" */
|
||||
CFG_REG_DOMAIN, /* Regulatory Domain */
|
||||
CFG_RATE_CONTROL_ENABLE,
|
||||
CFG_DEF_XMIT_DATA_RATE, /* NB: if rate control is not enabled */
|
||||
CFG_HW_TX_RETRIES,
|
||||
CFG_SW_TX_RETRIES,
|
||||
CFG_SLOW_CLOCK_ENABLE,
|
||||
CFG_COMP_PROC,
|
||||
CFG_USER_RTS_THRESHOLD,
|
||||
CFG_XR2NORM_RATE_THRESHOLD,
|
||||
CFG_XRMODE_SWITCH_COUNT,
|
||||
CFG_PROTECTION_TYPE,
|
||||
CFG_BURST_SEQ_THRESHOLD,
|
||||
CFG_ABOLT,
|
||||
CFG_IQ_LOG_COUNT_MAX,
|
||||
CFG_MODE_CTS,
|
||||
CFG_WME_ENABLED,
|
||||
CFG_GPRS_CBR_PERIOD,
|
||||
CFG_SERVICE_TYPE,
|
||||
/* MAC Address to use. Overrides EEPROM */
|
||||
CFG_MAC_ADDR,
|
||||
CFG_DEBUG_EAR,
|
||||
CFG_INIT_REGS,
|
||||
/* An ID for use in error & debug messages */
|
||||
CFG_DEBUG_ID,
|
||||
CFG_COMP_WIN_SZ,
|
||||
CFG_DIVERSITY_CTL,
|
||||
CFG_TP_SCALE,
|
||||
CFG_TPC_HALF_DBM5,
|
||||
CFG_TPC_HALF_DBM2,
|
||||
CFG_OVERRD_TX_POWER,
|
||||
CFG_USE_32KHZ_CLOCK,
|
||||
CFG_GMODE_PROTECTION,
|
||||
CFG_GMODE_PROTECT_RATE_INDEX,
|
||||
CFG_GMODE_NON_ERP_PREAMBLE,
|
||||
CFG_WDC_TRANSPORT_CHUNK_SIZE,
|
||||
};
|
||||
|
||||
enum {
|
||||
/* Sentinal to indicate "no capability" */
|
||||
CAP_NONE,
|
||||
CAP_ALL, /* ALL capabilities */
|
||||
CAP_TARGET_VERSION,
|
||||
CAP_TARGET_REVISION,
|
||||
CAP_MAC_VERSION,
|
||||
CAP_MAC_REVISION,
|
||||
CAP_PHY_REVISION,
|
||||
CAP_ANALOG_5GHz_REVISION,
|
||||
CAP_ANALOG_2GHz_REVISION,
|
||||
/* Target supports WDC message debug features */
|
||||
CAP_DEBUG_WDCMSG_SUPPORT,
|
||||
|
||||
CAP_REG_DOMAIN,
|
||||
CAP_COUNTRY_CODE,
|
||||
CAP_REG_CAP_BITS,
|
||||
|
||||
CAP_WIRELESS_MODES,
|
||||
CAP_CHAN_SPREAD_SUPPORT,
|
||||
CAP_SLEEP_AFTER_BEACON_BROKEN,
|
||||
CAP_COMPRESS_SUPPORT,
|
||||
CAP_BURST_SUPPORT,
|
||||
CAP_FAST_FRAMES_SUPPORT,
|
||||
CAP_CHAP_TUNING_SUPPORT,
|
||||
CAP_TURBOG_SUPPORT,
|
||||
CAP_TURBO_PRIME_SUPPORT,
|
||||
CAP_DEVICE_TYPE,
|
||||
CAP_XR_SUPPORT,
|
||||
CAP_WME_SUPPORT,
|
||||
CAP_TOTAL_QUEUES,
|
||||
CAP_CONNECTION_ID_MAX, /* Should absorb CAP_KEY_CACHE_SIZE */
|
||||
|
||||
CAP_LOW_5GHZ_CHAN,
|
||||
CAP_HIGH_5GHZ_CHAN,
|
||||
CAP_LOW_2GHZ_CHAN,
|
||||
CAP_HIGH_2GHZ_CHAN,
|
||||
|
||||
CAP_MIC_AES_CCM,
|
||||
CAP_MIC_CKIP,
|
||||
CAP_MIC_TKIP,
|
||||
CAP_MIC_TKIP_WME,
|
||||
CAP_CIPHER_AES_CCM,
|
||||
CAP_CIPHER_CKIP,
|
||||
CAP_CIPHER_TKIP,
|
||||
|
||||
CAP_TWICE_ANTENNAGAIN_5G,
|
||||
CAP_TWICE_ANTENNAGAIN_2G,
|
||||
};
|
||||
|
||||
enum {
|
||||
ST_NONE, /* Sentinal to indicate "no status" */
|
||||
ST_ALL,
|
||||
ST_SERVICE_TYPE,
|
||||
ST_WLAN_MODE,
|
||||
ST_FREQ,
|
||||
ST_BAND,
|
||||
ST_LAST_RSSI,
|
||||
ST_PS_FRAMES_DROPPED,
|
||||
ST_CACHED_DEF_ANT,
|
||||
ST_COUNT_OTHER_RX_ANT,
|
||||
ST_USE_FAST_DIVERSITY,
|
||||
ST_MAC_ADDR,
|
||||
ST_RX_GENERATION_NUM,
|
||||
ST_TX_QUEUE_DEPTH,
|
||||
ST_SERIAL_NUMBER,
|
||||
ST_WDC_TRANSPORT_CHUNK_SIZE,
|
||||
};
|
||||
|
||||
enum {
|
||||
TARGET_DEVICE_AWAKE,
|
||||
TARGET_DEVICE_SLEEP,
|
||||
TARGET_DEVICE_PWRDN,
|
||||
TARGET_DEVICE_PWRSAVE,
|
||||
TARGET_DEVICE_SUSPEND,
|
||||
TARGET_DEVICE_RESUME,
|
||||
};
|
||||
|
||||
/* this is in net/ieee80211.h, but that conflicts with the mac80211 headers */
|
||||
#define IEEE80211_2ADDR_LEN 16
|
||||
|
||||
#define AR5523_MIN_RXBUFSZ \
|
||||
(((sizeof(__be32) + IEEE80211_2ADDR_LEN + \
|
||||
sizeof(struct ar5523_rx_desc)) + 3) & ~3)
|
Loading…
Reference in New Issue
Block a user