xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ath/ar5523/ar5523_hw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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