1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr> 3*4882a593Smuzhiyun * Copyright (c) 2006 Sam Leffler, Errno Consulting 4*4882a593Smuzhiyun * Copyright (c) 2007 Christoph Hellwig <hch@lst.de> 5*4882a593Smuzhiyun * Copyright (c) 2008-2009 Weongyo Jeong <weongyo@freebsd.org> 6*4882a593Smuzhiyun * Copyright (c) 2012 Pontus Fuchs <pontus.fuchs@gmail.com> 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Permission to use, copy, modify, and/or distribute this software for any 9*4882a593Smuzhiyun * purpose with or without fee is hereby granted, provided that the above 10*4882a593Smuzhiyun * copyright notice and this permission notice appear in all copies. 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 13*4882a593Smuzhiyun * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 14*4882a593Smuzhiyun * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 15*4882a593Smuzhiyun * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 16*4882a593Smuzhiyun * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 17*4882a593Smuzhiyun * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 18*4882a593Smuzhiyun * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* all fields are big endian */ 22*4882a593Smuzhiyun struct ar5523_fwblock { 23*4882a593Smuzhiyun __be32 flags; 24*4882a593Smuzhiyun #define AR5523_WRITE_BLOCK (1 << 4) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun __be32 len; 27*4882a593Smuzhiyun #define AR5523_MAX_FWBLOCK_SIZE 2048 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun __be32 total; 30*4882a593Smuzhiyun __be32 remain; 31*4882a593Smuzhiyun __be32 rxtotal; 32*4882a593Smuzhiyun __be32 pad[123]; 33*4882a593Smuzhiyun } __packed; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define AR5523_MAX_RXCMDSZ 1024 36*4882a593Smuzhiyun #define AR5523_MAX_TXCMDSZ 1024 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun struct ar5523_cmd_hdr { 39*4882a593Smuzhiyun __be32 len; 40*4882a593Smuzhiyun __be32 code; 41*4882a593Smuzhiyun /* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */ 42*4882a593Smuzhiyun /* messages from Host -> Target */ 43*4882a593Smuzhiyun #define WDCMSG_HOST_AVAILABLE 0x01 44*4882a593Smuzhiyun #define WDCMSG_BIND 0x02 45*4882a593Smuzhiyun #define WDCMSG_TARGET_RESET 0x03 46*4882a593Smuzhiyun #define WDCMSG_TARGET_GET_CAPABILITY 0x04 47*4882a593Smuzhiyun #define WDCMSG_TARGET_SET_CONFIG 0x05 48*4882a593Smuzhiyun #define WDCMSG_TARGET_GET_STATUS 0x06 49*4882a593Smuzhiyun #define WDCMSG_TARGET_GET_STATS 0x07 50*4882a593Smuzhiyun #define WDCMSG_TARGET_START 0x08 51*4882a593Smuzhiyun #define WDCMSG_TARGET_STOP 0x09 52*4882a593Smuzhiyun #define WDCMSG_TARGET_ENABLE 0x0a 53*4882a593Smuzhiyun #define WDCMSG_TARGET_DISABLE 0x0b 54*4882a593Smuzhiyun #define WDCMSG_CREATE_CONNECTION 0x0c 55*4882a593Smuzhiyun #define WDCMSG_UPDATE_CONNECT_ATTR 0x0d 56*4882a593Smuzhiyun #define WDCMSG_DELETE_CONNECT 0x0e 57*4882a593Smuzhiyun #define WDCMSG_SEND 0x0f 58*4882a593Smuzhiyun #define WDCMSG_FLUSH 0x10 59*4882a593Smuzhiyun /* messages from Target -> Host */ 60*4882a593Smuzhiyun #define WDCMSG_STATS_UPDATE 0x11 61*4882a593Smuzhiyun #define WDCMSG_BMISS 0x12 62*4882a593Smuzhiyun #define WDCMSG_DEVICE_AVAIL 0x13 63*4882a593Smuzhiyun #define WDCMSG_SEND_COMPLETE 0x14 64*4882a593Smuzhiyun #define WDCMSG_DATA_AVAIL 0x15 65*4882a593Smuzhiyun #define WDCMSG_SET_PWR_MODE 0x16 66*4882a593Smuzhiyun #define WDCMSG_BMISS_ACK 0x17 67*4882a593Smuzhiyun #define WDCMSG_SET_LED_STEADY 0x18 68*4882a593Smuzhiyun #define WDCMSG_SET_LED_BLINK 0x19 69*4882a593Smuzhiyun /* more messages */ 70*4882a593Smuzhiyun #define WDCMSG_SETUP_BEACON_DESC 0x1a 71*4882a593Smuzhiyun #define WDCMSG_BEACON_INIT 0x1b 72*4882a593Smuzhiyun #define WDCMSG_RESET_KEY_CACHE 0x1c 73*4882a593Smuzhiyun #define WDCMSG_RESET_KEY_CACHE_ENTRY 0x1d 74*4882a593Smuzhiyun #define WDCMSG_SET_KEY_CACHE_ENTRY 0x1e 75*4882a593Smuzhiyun #define WDCMSG_SET_DECOMP_MASK 0x1f 76*4882a593Smuzhiyun #define WDCMSG_SET_REGULATORY_DOMAIN 0x20 77*4882a593Smuzhiyun #define WDCMSG_SET_LED_STATE 0x21 78*4882a593Smuzhiyun #define WDCMSG_WRITE_ASSOCID 0x22 79*4882a593Smuzhiyun #define WDCMSG_SET_STA_BEACON_TIMERS 0x23 80*4882a593Smuzhiyun #define WDCMSG_GET_TSF 0x24 81*4882a593Smuzhiyun #define WDCMSG_RESET_TSF 0x25 82*4882a593Smuzhiyun #define WDCMSG_SET_ADHOC_MODE 0x26 83*4882a593Smuzhiyun #define WDCMSG_SET_BASIC_RATE 0x27 84*4882a593Smuzhiyun #define WDCMSG_MIB_CONTROL 0x28 85*4882a593Smuzhiyun #define WDCMSG_GET_CHANNEL_DATA 0x29 86*4882a593Smuzhiyun #define WDCMSG_GET_CUR_RSSI 0x2a 87*4882a593Smuzhiyun #define WDCMSG_SET_ANTENNA_SWITCH 0x2b 88*4882a593Smuzhiyun #define WDCMSG_USE_SHORT_SLOT_TIME 0x2f 89*4882a593Smuzhiyun #define WDCMSG_SET_POWER_MODE 0x30 90*4882a593Smuzhiyun #define WDCMSG_SETUP_PSPOLL_DESC 0x31 91*4882a593Smuzhiyun #define WDCMSG_SET_RX_MULTICAST_FILTER 0x32 92*4882a593Smuzhiyun #define WDCMSG_RX_FILTER 0x33 93*4882a593Smuzhiyun #define WDCMSG_PER_CALIBRATION 0x34 94*4882a593Smuzhiyun #define WDCMSG_RESET 0x35 95*4882a593Smuzhiyun #define WDCMSG_DISABLE 0x36 96*4882a593Smuzhiyun #define WDCMSG_PHY_DISABLE 0x37 97*4882a593Smuzhiyun #define WDCMSG_SET_TX_POWER_LIMIT 0x38 98*4882a593Smuzhiyun #define WDCMSG_SET_TX_QUEUE_PARAMS 0x39 99*4882a593Smuzhiyun #define WDCMSG_SETUP_TX_QUEUE 0x3a 100*4882a593Smuzhiyun #define WDCMSG_RELEASE_TX_QUEUE 0x3b 101*4882a593Smuzhiyun #define WDCMSG_SET_DEFAULT_KEY 0x43 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun __u32 priv; /* driver private data, 104*4882a593Smuzhiyun don't care about endianess */ 105*4882a593Smuzhiyun __be32 magic; 106*4882a593Smuzhiyun __be32 reserved2[4]; 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun struct ar5523_cmd_host_available { 110*4882a593Smuzhiyun __be32 sw_ver_major; 111*4882a593Smuzhiyun __be32 sw_ver_minor; 112*4882a593Smuzhiyun __be32 sw_ver_patch; 113*4882a593Smuzhiyun __be32 sw_ver_build; 114*4882a593Smuzhiyun } __packed; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun #define ATH_SW_VER_MAJOR 1 117*4882a593Smuzhiyun #define ATH_SW_VER_MINOR 5 118*4882a593Smuzhiyun #define ATH_SW_VER_PATCH 0 119*4882a593Smuzhiyun #define ATH_SW_VER_BUILD 9999 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun struct ar5523_chunk { 122*4882a593Smuzhiyun u8 seqnum; /* sequence number for ordering */ 123*4882a593Smuzhiyun u8 flags; 124*4882a593Smuzhiyun #define UATH_CFLAGS_FINAL 0x01 /* final chunk of a msg */ 125*4882a593Smuzhiyun #define UATH_CFLAGS_RXMSG 0x02 /* chunk contains rx completion */ 126*4882a593Smuzhiyun #define UATH_CFLAGS_DEBUG 0x04 /* for debugging */ 127*4882a593Smuzhiyun __be16 length; /* chunk size in bytes */ 128*4882a593Smuzhiyun /* chunk data follows */ 129*4882a593Smuzhiyun } __packed; 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* 132*4882a593Smuzhiyun * Message format for a WDCMSG_DATA_AVAIL message from Target to Host. 133*4882a593Smuzhiyun */ 134*4882a593Smuzhiyun struct ar5523_rx_desc { 135*4882a593Smuzhiyun __be32 len; /* msg length including header */ 136*4882a593Smuzhiyun __be32 code; /* WDCMSG_DATA_AVAIL */ 137*4882a593Smuzhiyun __be32 gennum; /* generation number */ 138*4882a593Smuzhiyun __be32 status; /* start of RECEIVE_INFO */ 139*4882a593Smuzhiyun #define UATH_STATUS_OK 0 140*4882a593Smuzhiyun #define UATH_STATUS_STOP_IN_PROGRESS 1 141*4882a593Smuzhiyun #define UATH_STATUS_CRC_ERR 2 142*4882a593Smuzhiyun #define UATH_STATUS_PHY_ERR 3 143*4882a593Smuzhiyun #define UATH_STATUS_DECRYPT_CRC_ERR 4 144*4882a593Smuzhiyun #define UATH_STATUS_DECRYPT_MIC_ERR 5 145*4882a593Smuzhiyun #define UATH_STATUS_DECOMP_ERR 6 146*4882a593Smuzhiyun #define UATH_STATUS_KEY_ERR 7 147*4882a593Smuzhiyun #define UATH_STATUS_ERR 8 148*4882a593Smuzhiyun __be32 tstamp_low; /* low-order 32-bits of rx timestamp */ 149*4882a593Smuzhiyun __be32 tstamp_high; /* high-order 32-bits of rx timestamp */ 150*4882a593Smuzhiyun __be32 framelen; /* frame length */ 151*4882a593Smuzhiyun __be32 rate; /* rx rate code */ 152*4882a593Smuzhiyun __be32 antenna; 153*4882a593Smuzhiyun __be32 rssi; 154*4882a593Smuzhiyun __be32 channel; 155*4882a593Smuzhiyun __be32 phyerror; 156*4882a593Smuzhiyun __be32 connix; /* key table ix for bss traffic */ 157*4882a593Smuzhiyun __be32 decrypterror; 158*4882a593Smuzhiyun __be32 keycachemiss; 159*4882a593Smuzhiyun __be32 pad; /* XXX? */ 160*4882a593Smuzhiyun } __packed; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun struct ar5523_tx_desc { 163*4882a593Smuzhiyun __be32 msglen; 164*4882a593Smuzhiyun u32 msgid; /* msg id (supplied by host) */ 165*4882a593Smuzhiyun __be32 type; /* opcode: WDMSG_SEND or WDCMSG_FLUSH */ 166*4882a593Smuzhiyun __be32 txqid; /* tx queue id and flags */ 167*4882a593Smuzhiyun #define UATH_TXQID_MASK 0x0f 168*4882a593Smuzhiyun #define UATH_TXQID_MINRATE 0x10 /* use min tx rate */ 169*4882a593Smuzhiyun #define UATH_TXQID_FF 0x20 /* content is fast frame */ 170*4882a593Smuzhiyun __be32 connid; /* tx connection id */ 171*4882a593Smuzhiyun #define UATH_ID_INVALID 0xffffffff /* for sending prior to connection */ 172*4882a593Smuzhiyun __be32 flags; /* non-zero if response desired */ 173*4882a593Smuzhiyun #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */ 174*4882a593Smuzhiyun __be32 buflen; /* payload length */ 175*4882a593Smuzhiyun } __packed; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun #define AR5523_ID_BSS 2 179*4882a593Smuzhiyun #define AR5523_ID_BROADCAST 0xffffffff 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun /* structure for command UATH_CMD_WRITE_MAC */ 182*4882a593Smuzhiyun struct ar5523_write_mac { 183*4882a593Smuzhiyun __be32 reg; 184*4882a593Smuzhiyun __be32 len; 185*4882a593Smuzhiyun u8 data[32]; 186*4882a593Smuzhiyun } __packed; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun struct ar5523_cmd_rateset { 189*4882a593Smuzhiyun __u8 length; 190*4882a593Smuzhiyun #define AR5523_MAX_NRATES 32 191*4882a593Smuzhiyun __u8 set[AR5523_MAX_NRATES]; 192*4882a593Smuzhiyun }; 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun struct ar5523_cmd_set_associd { /* AR5523_WRITE_ASSOCID */ 195*4882a593Smuzhiyun __be32 defaultrateix; 196*4882a593Smuzhiyun __be32 associd; 197*4882a593Smuzhiyun __be32 timoffset; 198*4882a593Smuzhiyun __be32 turboprime; 199*4882a593Smuzhiyun __u8 bssid[6]; 200*4882a593Smuzhiyun } __packed; 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun /* structure for command WDCMSG_RESET */ 203*4882a593Smuzhiyun struct ar5523_cmd_reset { 204*4882a593Smuzhiyun __be32 flags; /* channel flags */ 205*4882a593Smuzhiyun #define UATH_CHAN_TURBO 0x0100 206*4882a593Smuzhiyun #define UATH_CHAN_CCK 0x0200 207*4882a593Smuzhiyun #define UATH_CHAN_OFDM 0x0400 208*4882a593Smuzhiyun #define UATH_CHAN_2GHZ 0x1000 209*4882a593Smuzhiyun #define UATH_CHAN_5GHZ 0x2000 210*4882a593Smuzhiyun __be32 freq; /* channel frequency */ 211*4882a593Smuzhiyun __be32 maxrdpower; 212*4882a593Smuzhiyun __be32 cfgctl; 213*4882a593Smuzhiyun __be32 twiceantennareduction; 214*4882a593Smuzhiyun __be32 channelchange; 215*4882a593Smuzhiyun __be32 keeprccontent; 216*4882a593Smuzhiyun } __packed; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun /* structure for command WDCMSG_SET_BASIC_RATE */ 219*4882a593Smuzhiyun struct ar5523_cmd_rates { 220*4882a593Smuzhiyun __be32 connid; 221*4882a593Smuzhiyun __be32 keeprccontent; 222*4882a593Smuzhiyun __be32 size; 223*4882a593Smuzhiyun struct ar5523_cmd_rateset rateset; 224*4882a593Smuzhiyun } __packed; 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun enum { 227*4882a593Smuzhiyun WLAN_MODE_NONE = 0, 228*4882a593Smuzhiyun WLAN_MODE_11b, 229*4882a593Smuzhiyun WLAN_MODE_11a, 230*4882a593Smuzhiyun WLAN_MODE_11g, 231*4882a593Smuzhiyun WLAN_MODE_11a_TURBO, 232*4882a593Smuzhiyun WLAN_MODE_11g_TURBO, 233*4882a593Smuzhiyun WLAN_MODE_11a_TURBO_PRIME, 234*4882a593Smuzhiyun WLAN_MODE_11g_TURBO_PRIME, 235*4882a593Smuzhiyun WLAN_MODE_11a_XR, 236*4882a593Smuzhiyun WLAN_MODE_11g_XR, 237*4882a593Smuzhiyun }; 238*4882a593Smuzhiyun 239*4882a593Smuzhiyun struct ar5523_cmd_connection_attr { 240*4882a593Smuzhiyun __be32 longpreambleonly; 241*4882a593Smuzhiyun struct ar5523_cmd_rateset rateset; 242*4882a593Smuzhiyun __be32 wlanmode; 243*4882a593Smuzhiyun } __packed; 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun /* structure for command AR5523_CREATE_CONNECTION */ 246*4882a593Smuzhiyun struct ar5523_cmd_create_connection { 247*4882a593Smuzhiyun __be32 connid; 248*4882a593Smuzhiyun __be32 bssid; 249*4882a593Smuzhiyun __be32 size; 250*4882a593Smuzhiyun struct ar5523_cmd_connection_attr connattr; 251*4882a593Smuzhiyun } __packed; 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun struct ar5523_cmd_ledsteady { /* WDCMSG_SET_LED_STEADY */ 254*4882a593Smuzhiyun __be32 lednum; 255*4882a593Smuzhiyun #define UATH_LED_LINK 0 256*4882a593Smuzhiyun #define UATH_LED_ACTIVITY 1 257*4882a593Smuzhiyun __be32 ledmode; 258*4882a593Smuzhiyun #define UATH_LED_OFF 0 259*4882a593Smuzhiyun #define UATH_LED_ON 1 260*4882a593Smuzhiyun } __packed; 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun struct ar5523_cmd_ledblink { /* WDCMSG_SET_LED_BLINK */ 263*4882a593Smuzhiyun __be32 lednum; 264*4882a593Smuzhiyun __be32 ledmode; 265*4882a593Smuzhiyun __be32 blinkrate; 266*4882a593Smuzhiyun __be32 slowmode; 267*4882a593Smuzhiyun } __packed; 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun struct ar5523_cmd_ledstate { /* WDCMSG_SET_LED_STATE */ 270*4882a593Smuzhiyun __be32 connected; 271*4882a593Smuzhiyun } __packed; 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun struct ar5523_cmd_txq_attr { 274*4882a593Smuzhiyun __be32 priority; 275*4882a593Smuzhiyun __be32 aifs; 276*4882a593Smuzhiyun __be32 logcwmin; 277*4882a593Smuzhiyun __be32 logcwmax; 278*4882a593Smuzhiyun __be32 bursttime; 279*4882a593Smuzhiyun __be32 mode; 280*4882a593Smuzhiyun __be32 qflags; 281*4882a593Smuzhiyun } __packed; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun struct ar5523_cmd_txq_setup { /* WDCMSG_SETUP_TX_QUEUE */ 284*4882a593Smuzhiyun __be32 qid; 285*4882a593Smuzhiyun __be32 len; 286*4882a593Smuzhiyun struct ar5523_cmd_txq_attr attr; 287*4882a593Smuzhiyun } __packed; 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun struct ar5523_cmd_rx_filter { /* WDCMSG_RX_FILTER */ 290*4882a593Smuzhiyun __be32 bits; 291*4882a593Smuzhiyun #define UATH_FILTER_RX_UCAST 0x00000001 292*4882a593Smuzhiyun #define UATH_FILTER_RX_MCAST 0x00000002 293*4882a593Smuzhiyun #define UATH_FILTER_RX_BCAST 0x00000004 294*4882a593Smuzhiyun #define UATH_FILTER_RX_CONTROL 0x00000008 295*4882a593Smuzhiyun #define UATH_FILTER_RX_BEACON 0x00000010 /* beacon frames */ 296*4882a593Smuzhiyun #define UATH_FILTER_RX_PROM 0x00000020 /* promiscuous mode */ 297*4882a593Smuzhiyun #define UATH_FILTER_RX_PHY_ERR 0x00000040 /* phy errors */ 298*4882a593Smuzhiyun #define UATH_FILTER_RX_PHY_RADAR 0x00000080 /* radar phy errors */ 299*4882a593Smuzhiyun #define UATH_FILTER_RX_XR_POOL 0x00000400 /* XR group polls */ 300*4882a593Smuzhiyun #define UATH_FILTER_RX_PROBE_REQ 0x00000800 301*4882a593Smuzhiyun __be32 op; 302*4882a593Smuzhiyun #define UATH_FILTER_OP_INIT 0x0 303*4882a593Smuzhiyun #define UATH_FILTER_OP_SET 0x1 304*4882a593Smuzhiyun #define UATH_FILTER_OP_CLEAR 0x2 305*4882a593Smuzhiyun #define UATH_FILTER_OP_TEMP 0x3 306*4882a593Smuzhiyun #define UATH_FILTER_OP_RESTORE 0x4 307*4882a593Smuzhiyun } __packed; 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun enum { 310*4882a593Smuzhiyun CFG_NONE, /* Sentinal to indicate "no config" */ 311*4882a593Smuzhiyun CFG_REG_DOMAIN, /* Regulatory Domain */ 312*4882a593Smuzhiyun CFG_RATE_CONTROL_ENABLE, 313*4882a593Smuzhiyun CFG_DEF_XMIT_DATA_RATE, /* NB: if rate control is not enabled */ 314*4882a593Smuzhiyun CFG_HW_TX_RETRIES, 315*4882a593Smuzhiyun CFG_SW_TX_RETRIES, 316*4882a593Smuzhiyun CFG_SLOW_CLOCK_ENABLE, 317*4882a593Smuzhiyun CFG_COMP_PROC, 318*4882a593Smuzhiyun CFG_USER_RTS_THRESHOLD, 319*4882a593Smuzhiyun CFG_XR2NORM_RATE_THRESHOLD, 320*4882a593Smuzhiyun CFG_XRMODE_SWITCH_COUNT, 321*4882a593Smuzhiyun CFG_PROTECTION_TYPE, 322*4882a593Smuzhiyun CFG_BURST_SEQ_THRESHOLD, 323*4882a593Smuzhiyun CFG_ABOLT, 324*4882a593Smuzhiyun CFG_IQ_LOG_COUNT_MAX, 325*4882a593Smuzhiyun CFG_MODE_CTS, 326*4882a593Smuzhiyun CFG_WME_ENABLED, 327*4882a593Smuzhiyun CFG_GPRS_CBR_PERIOD, 328*4882a593Smuzhiyun CFG_SERVICE_TYPE, 329*4882a593Smuzhiyun /* MAC Address to use. Overrides EEPROM */ 330*4882a593Smuzhiyun CFG_MAC_ADDR, 331*4882a593Smuzhiyun CFG_DEBUG_EAR, 332*4882a593Smuzhiyun CFG_INIT_REGS, 333*4882a593Smuzhiyun /* An ID for use in error & debug messages */ 334*4882a593Smuzhiyun CFG_DEBUG_ID, 335*4882a593Smuzhiyun CFG_COMP_WIN_SZ, 336*4882a593Smuzhiyun CFG_DIVERSITY_CTL, 337*4882a593Smuzhiyun CFG_TP_SCALE, 338*4882a593Smuzhiyun CFG_TPC_HALF_DBM5, 339*4882a593Smuzhiyun CFG_TPC_HALF_DBM2, 340*4882a593Smuzhiyun CFG_OVERRD_TX_POWER, 341*4882a593Smuzhiyun CFG_USE_32KHZ_CLOCK, 342*4882a593Smuzhiyun CFG_GMODE_PROTECTION, 343*4882a593Smuzhiyun CFG_GMODE_PROTECT_RATE_INDEX, 344*4882a593Smuzhiyun CFG_GMODE_NON_ERP_PREAMBLE, 345*4882a593Smuzhiyun CFG_WDC_TRANSPORT_CHUNK_SIZE, 346*4882a593Smuzhiyun }; 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun enum { 349*4882a593Smuzhiyun /* Sentinal to indicate "no capability" */ 350*4882a593Smuzhiyun CAP_NONE, 351*4882a593Smuzhiyun CAP_ALL, /* ALL capabilities */ 352*4882a593Smuzhiyun CAP_TARGET_VERSION, 353*4882a593Smuzhiyun CAP_TARGET_REVISION, 354*4882a593Smuzhiyun CAP_MAC_VERSION, 355*4882a593Smuzhiyun CAP_MAC_REVISION, 356*4882a593Smuzhiyun CAP_PHY_REVISION, 357*4882a593Smuzhiyun CAP_ANALOG_5GHz_REVISION, 358*4882a593Smuzhiyun CAP_ANALOG_2GHz_REVISION, 359*4882a593Smuzhiyun /* Target supports WDC message debug features */ 360*4882a593Smuzhiyun CAP_DEBUG_WDCMSG_SUPPORT, 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun CAP_REG_DOMAIN, 363*4882a593Smuzhiyun CAP_COUNTRY_CODE, 364*4882a593Smuzhiyun CAP_REG_CAP_BITS, 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun CAP_WIRELESS_MODES, 367*4882a593Smuzhiyun CAP_CHAN_SPREAD_SUPPORT, 368*4882a593Smuzhiyun CAP_SLEEP_AFTER_BEACON_BROKEN, 369*4882a593Smuzhiyun CAP_COMPRESS_SUPPORT, 370*4882a593Smuzhiyun CAP_BURST_SUPPORT, 371*4882a593Smuzhiyun CAP_FAST_FRAMES_SUPPORT, 372*4882a593Smuzhiyun CAP_CHAP_TUNING_SUPPORT, 373*4882a593Smuzhiyun CAP_TURBOG_SUPPORT, 374*4882a593Smuzhiyun CAP_TURBO_PRIME_SUPPORT, 375*4882a593Smuzhiyun CAP_DEVICE_TYPE, 376*4882a593Smuzhiyun CAP_XR_SUPPORT, 377*4882a593Smuzhiyun CAP_WME_SUPPORT, 378*4882a593Smuzhiyun CAP_TOTAL_QUEUES, 379*4882a593Smuzhiyun CAP_CONNECTION_ID_MAX, /* Should absorb CAP_KEY_CACHE_SIZE */ 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun CAP_LOW_5GHZ_CHAN, 382*4882a593Smuzhiyun CAP_HIGH_5GHZ_CHAN, 383*4882a593Smuzhiyun CAP_LOW_2GHZ_CHAN, 384*4882a593Smuzhiyun CAP_HIGH_2GHZ_CHAN, 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun CAP_MIC_AES_CCM, 387*4882a593Smuzhiyun CAP_MIC_CKIP, 388*4882a593Smuzhiyun CAP_MIC_TKIP, 389*4882a593Smuzhiyun CAP_MIC_TKIP_WME, 390*4882a593Smuzhiyun CAP_CIPHER_AES_CCM, 391*4882a593Smuzhiyun CAP_CIPHER_CKIP, 392*4882a593Smuzhiyun CAP_CIPHER_TKIP, 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun CAP_TWICE_ANTENNAGAIN_5G, 395*4882a593Smuzhiyun CAP_TWICE_ANTENNAGAIN_2G, 396*4882a593Smuzhiyun }; 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun enum { 399*4882a593Smuzhiyun ST_NONE, /* Sentinal to indicate "no status" */ 400*4882a593Smuzhiyun ST_ALL, 401*4882a593Smuzhiyun ST_SERVICE_TYPE, 402*4882a593Smuzhiyun ST_WLAN_MODE, 403*4882a593Smuzhiyun ST_FREQ, 404*4882a593Smuzhiyun ST_BAND, 405*4882a593Smuzhiyun ST_LAST_RSSI, 406*4882a593Smuzhiyun ST_PS_FRAMES_DROPPED, 407*4882a593Smuzhiyun ST_CACHED_DEF_ANT, 408*4882a593Smuzhiyun ST_COUNT_OTHER_RX_ANT, 409*4882a593Smuzhiyun ST_USE_FAST_DIVERSITY, 410*4882a593Smuzhiyun ST_MAC_ADDR, 411*4882a593Smuzhiyun ST_RX_GENERATION_NUM, 412*4882a593Smuzhiyun ST_TX_QUEUE_DEPTH, 413*4882a593Smuzhiyun ST_SERIAL_NUMBER, 414*4882a593Smuzhiyun ST_WDC_TRANSPORT_CHUNK_SIZE, 415*4882a593Smuzhiyun }; 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun enum { 418*4882a593Smuzhiyun TARGET_DEVICE_AWAKE, 419*4882a593Smuzhiyun TARGET_DEVICE_SLEEP, 420*4882a593Smuzhiyun TARGET_DEVICE_PWRDN, 421*4882a593Smuzhiyun TARGET_DEVICE_PWRSAVE, 422*4882a593Smuzhiyun TARGET_DEVICE_SUSPEND, 423*4882a593Smuzhiyun TARGET_DEVICE_RESUME, 424*4882a593Smuzhiyun }; 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun /* this is in net/ieee80211.h, but that conflicts with the mac80211 headers */ 427*4882a593Smuzhiyun #define IEEE80211_2ADDR_LEN 16 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun #define AR5523_MIN_RXBUFSZ \ 430*4882a593Smuzhiyun (((sizeof(__be32) + IEEE80211_2ADDR_LEN + \ 431*4882a593Smuzhiyun sizeof(struct ar5523_rx_desc)) + 3) & ~3) 432