Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
/*-
 * SPDX-License-Identifier: ISC
 *
 * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
 * Copyright (c) 2002-2004 Atheros Communications, Inc.
 *
 * 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.
 *
 * $FreeBSD$
 */
#ifndef _DEV_ATH_AR5210REG_H
#define _DEV_ATH_AR5210REG_H

/*
 * Register defintions for the Atheros AR5210/5110 MAC/Basedband
 * Processor for IEEE 802.11a 5-GHz Wireless LANs.
 */

#ifndef PCI_VENDOR_ATHEROS
#define	PCI_VENDOR_ATHEROS		0x168c
#endif
#define	PCI_PRODUCT_ATHEROS_AR5210	0x0007
#define	PCI_PRODUCT_ATHEROS_AR5210_OLD	0x0004

/* DMA Registers */
#define	AR_TXDP0	0x0000		/* TX queue pointer 0 register */
#define	AR_TXDP1	0x0004		/* TX queue pointer 1 register */
#define	AR_CR		0x0008		/* Command register */
#define	AR_RXDP		0x000c		/* RX queue descriptor ptr register */
#define	AR_CFG		0x0014		/* Configuration and status register */
#define	AR_ISR		0x001c		/* Interrupt status register */
#define	AR_IMR		0x0020		/* Interrupt mask register */
#define	AR_IER		0x0024		/* Interrupt global enable register */
#define	AR_BCR		0x0028		/* Beacon control register */
#define	AR_BSR		0x002c		/* Beacon status register */
#define	AR_TXCFG	0x0030		/* TX configuration register */
#define	AR_RXCFG	0x0034		/* RX configuration register */
#define	AR_MIBC		0x0040		/* MIB control register */
#define	AR_TOPS		0x0044		/* Timeout prescale register */
#define	AR_RXNOFRM	0x0048		/* RX no frame timeout register */
#define	AR_TXNOFRM	0x004c		/* TX no frame timeout register */
#define	AR_RPGTO	0x0050		/* RX frame gap timeout register */
#define	AR_RFCNT	0x0054		/* RX frame count limit register */
#define	AR_MISC		0x0058		/* Misc control and status register */
#define	AR_RC		0x4000		/* Reset control */
#define	AR_SCR		0x4004		/* Sleep control */
#define	AR_INTPEND	0x4008		/* Interrupt pending */
#define	AR_SFR		0x400c		/* Force sleep */
#define	AR_PCICFG	0x4010		/* PCI configuration */
#define	AR_GPIOCR	0x4014		/* GPIO configuration */
#define	AR_GPIODO	0x4018		/* GPIO data output */
#define	AR_GPIODI	0x401c		/* GPIO data input */
#define	AR_SREV		0x4020		/* Silicon revision */
/* EEPROM Access Registers */
#define	AR_EP_AIR_BASE	0x6000		/* EEPROM access initiation regs base */
#define	AR_EP_AIR(n)	(AR_EP_AIR_BASE + (n)*4)
#define	AR_EP_RDATA	0x6800		/* EEPROM read data register */
#define	AR_EP_STA	0x6c00		/* EEPROM access status register */
/* PCU Registers */
#define	AR_STA_ID0	0x8000		/* Lower 32bits of MAC address */
#define	AR_STA_ID1	0x8004		/* Upper 16bits of MAC address */
#define	AR_BSS_ID0	0x8008		/* Lower 32bits of BSSID */
#define	AR_BSS_ID1	0x800c		/* Upper 16bits of BSSID */
#define	AR_SLOT_TIME	0x8010		/* Length of a back-off */
#define	AR_TIME_OUT	0x8014		/* Timeout to wait for ACK and CTS */
#define	AR_RSSI_THR	0x8018		/* Beacon RSSI warning threshold */
#define	AR_RETRY_LMT	0x801c		/* Short and long frame retry limit */
#define	AR_USEC		0x8020		/* Transmit latency */
#define	AR_BEACON	0x8024		/* Beacon control */
#define	AR_CFP_PERIOD	0x8028		/* CFP period */
#define	AR_TIMER0	0x802c		/* Next beacon time */
#define	AR_TIMER1	0x8030		/* Next DMA beacon alert time */
#define	AR_TIMER2	0x8034		/* Next software beacon alert time */
#define	AR_TIMER3	0x8038		/* Next ATIM window time */
#define	AR_IFS0		0x8040		/* Protocol timers */
#define	AR_IFS1		0x8044		/* Protocol time and control */
#define	AR_CFP_DUR	0x8048		/* Maximum CFP duration */
#define	AR_RX_FILTER	0x804c		/* Receive filter */
#define	AR_MCAST_FIL0	0x8050		/* Lower 32bits of mcast filter mask */
#define	AR_MCAST_FIL1	0x8054		/* Upper 16bits of mcast filter mask */
#define	AR_TX_MASK0	0x8058		/* Lower 32bits of TX mask */
#define	AR_TX_MASK1	0x805c		/* Upper 16bits of TX mask */
#define	AR_CLR_TMASK	0x8060		/* Clear TX mask */
#define	AR_TRIG_LEV	0x8064		/* Minimum FIFO fill level before TX */
#define	AR_DIAG_SW	0x8068		/* PCU control */
#define	AR_TSF_L32	0x806c		/* Lower 32bits of local clock */
#define	AR_TSF_U32	0x8070		/* Upper 32bits of local clock */
#define	AR_LAST_TSTP	0x8080		/* Lower 32bits of last beacon tstamp */
#define	AR_RETRY_CNT	0x8084		/* Current short or long retry cnt */
#define	AR_BACKOFF	0x8088		/* Back-off status */
#define	AR_NAV		0x808c		/* Current NAV value */
#define	AR_RTS_OK	0x8090		/* RTS success counter */
#define	AR_RTS_FAIL	0x8094		/* RTS failure counter */
#define	AR_ACK_FAIL	0x8098		/* ACK failure counter */
#define	AR_FCS_FAIL	0x809c		/* FCS failure counter */
#define	AR_BEACON_CNT	0x80a0		/* Valid beacon counter */
#define	AR_KEYTABLE_0	0x9000		/* Encryption key table */
#define	AR_KEYTABLE(n)	(AR_KEYTABLE_0 + ((n)*32))

#define	AR_CR_TXE0		0x00000001	/* TX queue 0 enable */
#define	AR_CR_TXE1		0x00000002	/* TX queue 1 enable */
#define	AR_CR_RXE		0x00000004	/* RX enable */
#define	AR_CR_TXD0		0x00000008	/* TX queue 0 disable */
#define	AR_CR_TXD1		0x00000010	/* TX queue 1 disable */
#define	AR_CR_RXD		0x00000020	/* RX disable */
#define	AR_CR_SWI		0x00000040	/* software interrupt */
#define	AR_CR_BITS \
	"\20\1TXE0\2TXE1\3RXE\4TXD0\5TXD1\6RXD\7SWI"

#define	AR_CFG_SWTD		0x00000001	/* BE for TX desc */
#define	AR_CFG_SWTB		0x00000002	/* BE for TX data */
#define	AR_CFG_SWRD		0x00000004	/* BE for RX desc */
#define	AR_CFG_SWRB		0x00000008	/* BE for RX data */
#define	AR_CFG_SWRG		0x00000010	/* BE for registers */
#define	AR_CFG_EEBS		0x00000200	/* EEPROM busy */
#define	AR_CFG_TXCNT		0x00007800	/* number of TX desc in Q */
#define	AR_CFG_TXCNT_S		11
#define	AR_CFG_TXFSTAT		0x00008000	/* TX DMA status */
#define	AR_CFG_TXFSTRT		0x00010000	/* re-enable TX DMA */
#define	AR_CFG_BITS \
	"\20\1SWTD\2SWTB\3SWRD\4SWRB\5SWRG\14EEBS\17TXFSTAT\20TXFSTRT"

#define	AR_ISR_RXOK_INT		0x00000001	/* RX frame OK */
#define	AR_ISR_RXDESC_INT	0x00000002	/* RX intr request */
#define	AR_ISR_RXERR_INT	0x00000004	/* RX error */
#define	AR_ISR_RXNOFRM_INT	0x00000008	/* no frame received */
#define	AR_ISR_RXEOL_INT	0x00000010	/* RX desc empty */
#define	AR_ISR_RXORN_INT	0x00000020	/* RX fifo overrun */
#define	AR_ISR_TXOK_INT		0x00000040	/* TX frame OK */
#define	AR_ISR_TXDESC_INT	0x00000080	/* TX intr request */
#define	AR_ISR_TXERR_INT	0x00000100	/* TX error */
#define	AR_ISR_TXNOFRM_INT	0x00000200	/* no frame transmitted */
#define	AR_ISR_TXEOL_INT	0x00000400	/* TX desc empty */
#define	AR_ISR_TXURN_INT	0x00000800	/* TX fifo underrun */
#define	AR_ISR_MIB_INT		0x00001000	/* MIB interrupt */
#define	AR_ISR_SWI_INT		0x00002000	/* software interrupt */
#define	AR_ISR_RXPHY_INT	0x00004000	/* PHY RX error */
#define	AR_ISR_RXKCM_INT	0x00008000	/* Key cache miss */
#define	AR_ISR_SWBA_INT		0x00010000	/* software beacon alert */
#define	AR_ISR_BRSSI_INT	0x00020000	/* beacon threshold */
#define	AR_ISR_BMISS_INT	0x00040000	/* beacon missed */
#define	AR_ISR_MCABT_INT	0x00100000	/* master cycle abort */
#define	AR_ISR_SSERR_INT	0x00200000	/* SERR on PCI */
#define	AR_ISR_DPERR_INT	0x00400000	/* Parity error on PCI */
#define	AR_ISR_GPIO_INT		0x01000000	/* GPIO interrupt */
#define	AR_ISR_BITS \
	"\20\1RXOK\2RXDESC\3RXERR\4RXNOFM\5RXEOL\6RXORN\7TXOK\10TXDESC"\
	"\11TXERR\12TXNOFRM\13TXEOL\14TXURN\15MIB\16SWI\17RXPHY\20RXKCM"\
	"\21SWBA\22BRSSI\23BMISS\24MCABT\25SSERR\26DPERR\27GPIO"

#define	AR_IMR_RXOK_INT		0x00000001	/* RX frame OK */
#define	AR_IMR_RXDESC_INT	0x00000002	/* RX intr request */
#define	AR_IMR_RXERR_INT	0x00000004	/* RX error */
#define	AR_IMR_RXNOFRM_INT	0x00000008	/* no frame received */
#define	AR_IMR_RXEOL_INT	0x00000010	/* RX desc empty */
#define	AR_IMR_RXORN_INT	0x00000020	/* RX fifo overrun */
#define	AR_IMR_TXOK_INT		0x00000040	/* TX frame OK */
#define	AR_IMR_TXDESC_INT	0x00000080	/* TX intr request */
#define	AR_IMR_TXERR_INT	0x00000100	/* TX error */
#define	AR_IMR_TXNOFRM_INT	0x00000200	/* no frame transmitted */
#define	AR_IMR_TXEOL_INT	0x00000400	/* TX desc empty */
#define	AR_IMR_TXURN_INT	0x00000800	/* TX fifo underrun */
#define	AR_IMR_MIB_INT		0x00001000	/* MIB interrupt */
#define	AR_IMR_SWI_INT		0x00002000	/* software interrupt */
#define	AR_IMR_RXPHY_INT	0x00004000	/* PHY RX error */
#define	AR_IMR_RXKCM_INT	0x00008000	/* Key cache miss */
#define	AR_IMR_SWBA_INT		0x00010000	/* software beacon alert */
#define	AR_IMR_BRSSI_INT	0x00020000	/* beacon threshold */
#define	AR_IMR_BMISS_INT	0x00040000	/* beacon missed */
#define	AR_IMR_MCABT_INT	0x00100000	/* master cycle abort */
#define	AR_IMR_SSERR_INT	0x00200000	/* SERR on PCI */
#define	AR_IMR_DPERR_INT	0x00400000	/* Parity error on PCI */
#define	AR_IMR_GPIO_INT		0x01000000	/* GPIO interrupt */
#define	AR_IMR_BITS	AR_ISR_BITS

#define	AR_IER_DISABLE		0x00000000	/* pseudo-flag */
#define	AR_IER_ENABLE		0x00000001	/* global interrupt enable */
#define	AR_IER_BITS	"\20\1ENABLE"

#define	AR_BCR_BCMD		0x00000001	/* ad hoc beacon mode */
#define	AR_BCR_BDMAE		0x00000002	/* beacon DMA enable */
#define	AR_BCR_TQ1FV		0x00000004	/* use TXQ1 for non-beacon */
#define	AR_BCR_TQ1V		0x00000008	/* TXQ1 valid for beacon */
#define	AR_BCR_BCGET		0x00000010	/* force a beacon fetch */
#define	AR_BCR_BITS	"\20\1BCMD\2BDMAE\3TQ1FV\4TQ1V\5BCGET"

#define	AR_BSR_BDLYSW		0x00000001	/* software beacon delay */
#define	AR_BSR_BDLYDMA		0x00000002	/* DMA beacon delay */
#define	AR_BSR_TXQ1F		0x00000004	/* TXQ1 fetch */
#define	AR_BSR_ATIMDLY		0x00000008	/* ATIM delay */
#define	AR_BSR_SNPBCMD		0x00000100	/* snapshot of BCMD */
#define	AR_BSR_SNPBDMAE		0x00000200	/* snapshot of BDMAE */
#define	AR_BSR_SNPTQ1FV		0x00000400	/* snapshot of TQ1FV */
#define	AR_BSR_SNPTQ1V		0x00000800	/* snapshot of TQ1V */
#define	AR_BSR_SNAPPEDBCRVALID	0x00001000	/* snapshot of BCR are valid */
#define	AR_BSR_SWBA_CNT		0x00ff0000	/* software beacon alert cnt */
#define	AR_BSR_BITS \
	"\20\1BDLYSW\2BDLYDMA\3TXQ1F\4ATIMDLY\11SNPBCMD\12SNPBDMAE"\
	"\13SNPTQ1FV\14SNPTQ1V\15SNAPPEDBCRVALID"

#define	AR_TXCFG_SDMAMR		0x00000007	/* DMA burst size 2^(2+x) */
#define	AR_TXCFG_TXFSTP		0x00000008	/* Stop TX DMA on filtered */
#define	AR_TXCFG_TXFULL		0x00000070	/* TX DMA desc Q full thresh */
#define	AR_TXCFG_TXCONT_EN	0x00000080	/* Enable continuous TX mode */
#define	AR_TXCFG_BITS	"\20\3TXFSTP\7TXCONT_EN"

#define	AR_RXCFG_SDMAMW		0x00000007	/* DMA burst size 2^(2+x) */
#define	AR_RXCFG_ZLFDMA		0x00000010	/* enable zero length DMA */

/* DMA sizes used for both AR_TXCFG_SDMAMR and AR_RXCFG_SDMAMW */
#define	AR_DMASIZE_4B		0		/* DMA size 4 bytes */
#define	AR_DMASIZE_8B		1		/* DMA size 8 bytes */
#define	AR_DMASIZE_16B		2		/* DMA size 16 bytes */
#define	AR_DMASIZE_32B		3		/* DMA size 32 bytes */
#define	AR_DMASIZE_64B		4		/* DMA size 64 bytes */
#define	AR_DMASIZE_128B		5		/* DMA size 128 bytes */
#define	AR_DMASIZE_256B		6		/* DMA size 256 bytes */
#define	AR_DMASIZE_512B		7		/* DMA size 512 bytes */

#define	AR_MIBC_COW		0x00000001	/* counter overflow warning */
#define	AR_MIBC_FMC		0x00000002	/* freeze MIB counters */
#define	AR_MIBC_CMC		0x00000004	/* clear MIB counters */
#define	AR_MIBC_MCS		0x00000008	/* MIB counter strobe */

#define	AR_RFCNT_RFCL		0x0000000f	/* RX frame count limit */

#define	AR_MISC_LED_DECAY	0x001c0000	/* LED decay rate */
#define	AR_MISC_LED_BLINK	0x00e00000	/* LED blink rate */

#define	AR_RC_RPCU		0x00000001	/* PCU Warm Reset */
#define	AR_RC_RDMA		0x00000002	/* DMA Warm Reset */
#define	AR_RC_RMAC		0x00000004	/* MAC Warm Reset */
#define	AR_RC_RPHY		0x00000008	/* PHY Warm Reset */
#define	AR_RC_RPCI		0x00000010	/* PCI Core Warm Reset */
#define	AR_RC_BITS	"\20\1RPCU\2RDMA\3RMAC\4RPHY\5RPCI"

#define	AR_SCR_SLDUR		0x0000ffff	/* sleep duration */
#define	AR_SCR_SLE		0x00030000	/* sleep enable */
#define	AR_SCR_SLE_S		16
/*
 * The previous values for the following three defines were:
 *
 *	AR_SCR_SLE_WAKE		0x00000000
 *	AR_SCR_SLE_SLP		0x00010000
 *	AR_SCR_SLE_ALLOW	0x00020000
 *
 * However, these have been pre-shifted with AR_SCR_SLE_S.  The
 * OS_REG_READ() macro would attempt to shift them again, effectively
 * shifting out any of the set bits completely.
 */
#define	AR_SCR_SLE_WAKE		0		/* force wake */
#define	AR_SCR_SLE_SLP		1		/* force sleep */
#define	AR_SCR_SLE_ALLOW	2		/* allow to control sleep */
#define	AR_SCR_BITS	"\20\20SLE_SLP\21SLE_ALLOW"

#define	AR_INTPEND_IP		0x00000001	/* interrupt pending */
#define	AR_INTPEND_BITS	"\20\1IP"

#define	AR_SFR_SF		0x00000001	/* force sleep immediately */

#define	AR_PCICFG_EEPROMSEL	0x00000001	/* EEPROM access enable */
#define	AR_PCICFG_CLKRUNEN	0x00000004	/* CLKRUN enable */
#define	AR_PCICFG_LED_PEND	0x00000020	/* LED for assoc pending */
#define	AR_PCICFG_LED_ACT	0x00000040	/* LED for assoc active */
#define	AR_PCICFG_SL_INTEN	0x00000800	/* Enable sleep intr */
#define	AR_PCICFG_LED_BCTL	0x00001000	/* LED blink for local act */
#define	AR_PCICFG_SL_INPEN	0x00002800	/* sleep even intr pending */
#define	AR_PCICFG_SPWR_DN	0x00010000	/* sleep indication */
#define	AR_PCICFG_BITS \
	"\20\1EEPROMSEL\3CLKRUNEN\5LED_PEND\6LED_ACT\13SL_INTEN"\
	"\14LED_BCTL\20SPWR_DN"

#define	AR_GPIOCR_IN(n)		(0<<((n)*2))	/* input-only */
#define	AR_GPIOCR_OUT0(n)	(1<<((n)*2))	/* output-only if GPIODO = 0 */
#define	AR_GPIOCR_OUT1(n)	(2<<((n)*2))	/* output-only if GPIODO = 1 */
#define	AR_GPIOCR_OUT(n)	(3<<((n)*2))	/* always output */
#define	AR_GPIOCR_ALL(n)	(3<<((n)*2))	/* all bits for pin */
#define	AR_GPIOCR_INT_SEL(n)	((n)<<12)	/* GPIO interrupt pin select */
#define	AR_GPIOCR_INT_ENA	0x00008000	/* Enable GPIO interrupt */
#define	AR_GPIOCR_INT_SELL	0x00000000	/* Interrupt if pin is low */
#define	AR_GPIOCR_INT_SELH	0x00010000	/* Interrupt if pin is high */

#define	AR_SREV_CRETE		4		/* Crete 1st version */
#define	AR_SREV_CRETE_MS	5		/* Crete FCS version */
#define	AR_SREV_CRETE_23	8		/* Crete version 2.3 */

#define	AR_EP_STA_RDERR		0x00000001	/* read error */
#define	AR_EP_STA_RDCMPLT	0x00000002	/* read complete */
#define	AR_EP_STA_WRERR		0x00000004	/* write error */
#define	AR_EP_STA_WRCMPLT	0x00000008	/* write complete */
#define	AR_EP_STA_BITS \
	"\20\1RDERR\2RDCMPLT\3WRERR\4WRCMPLT"

#define	AR_STA_ID1_AP		0x00010000	/* Access Point Operation */
#define	AR_STA_ID1_ADHOC	0x00020000	/* ad hoc Operation */
#define	AR_STA_ID1_PWR_SV	0x00040000	/* power save report enable */
#define	AR_STA_ID1_NO_KEYSRCH	0x00080000	/* key table search disable */
#define	AR_STA_ID1_NO_PSPOLL	0x00100000	/* auto PS-POLL disable */
#define	AR_STA_ID1_PCF		0x00200000	/* PCF observation enable */
#define	AR_STA_ID1_DESC_ANTENNA 0x00400000	/* use antenna in TX desc */
#define	AR_STA_ID1_DEFAULT_ANTENNA 0x00800000	/* toggle default antenna */
#define	AR_STA_ID1_ACKCTS_6MB	0x01000000	/* use 6Mbps for ACK/CTS */
#define	AR_STA_ID1_BITS \
	"\20\20AP\21ADHOC\22PWR_SV\23NO_KEYSRCH\24NO_PSPOLL\25PCF"\
	"\26DESC_ANTENNA\27DEFAULT_ANTENNA\30ACKCTS_6MB"

#define	AR_BSS_ID1_AID		0xffff0000	/* association ID */
#define	AR_BSS_ID1_AID_S	16

#define	AR_TIME_OUT_ACK		0x00001fff	/* ACK timeout */
#define	AR_TIME_OUT_ACK_S	0
#define	AR_TIME_OUT_CTS		0x1fff0000	/* CTS timeout */
#define	AR_TIME_OUT_CTS_S	16

#define	AR_RSSI_THR_BM_THR	0x00000700	/* missed beacon threshold */
#define	AR_RSSI_THR_BM_THR_S	8

#define	AR_RETRY_LMT_SH_RETRY	0x0000000f	/* short frame retry limit */
#define	AR_RETRY_LMT_SH_RETRY_S	0
#define	AR_RETRY_LMT_LG_RETRY	0x000000f0	/* long frame retry limit */
#define	AR_RETRY_LMT_LG_RETRY_S	4
#define	AR_RETRY_LMT_SSH_RETRY	0x00003f00	/* short station retry limit */
#define	AR_RETRY_LMT_SSH_RETRY_S	8
#define	AR_RETRY_LMT_SLG_RETRY	0x000fc000	/* long station retry limit */
#define	AR_RETRY_LMT_SLG_RETRY_S	14
#define	AR_RETRY_LMT_CW_MIN	0x3ff00000	/* minimum contention window */
#define	AR_RETRY_LMT_CW_MIN_S		20

#define	AR_USEC_1		0x0000007f	/* number of clk in 1us */
#define	AR_USEC_1_S		0
#define	AR_USEC_32		0x00003f80	/* number of 32MHz clk in 1us */
#define	AR_USEC_32_S		7
#define	AR_USEC_TX_LATENCY	0x000fc000	/* transmit latency in us */
#define	AR_USEC_TX_LATENCY_S	14
#define	AR_USEC_RX_LATENCY	0x03f00000	/* receive latency in us */
#define	AR_USEC_RX_LATENCY_S	20

#define	AR_BEACON_PERIOD	0x0000ffff	/* beacon period in TU/ms */
#define	AR_BEACON_PERIOD_S	0
#define	AR_BEACON_TIM 		0x007f0000	/* byte offset */
#define	AR_BEACON_TIM_S	16
#define	AR_BEACON_EN		0x00800000	/* beacon transmission enable */
#define	AR_BEACON_RESET_TSF 	0x01000000	/* TSF reset oneshot */
#define	AR_BEACON_BITS	"\20\27ENABLE\30RESET_TSF"

#define	AR_IFS0_SIFS		0x000007ff	/* SIFS in core clock cycles */
#define	AR_IFS0_SIFS_S		0
#define	AR_IFS0_DIFS		0x007ff800	/* DIFS in core clock cycles */
#define	AR_IFS0_DIFS_S		11

#define	AR_IFS1_PIFS		0x00000fff	/* Programmable IFS */
#define	AR_IFS1_PIFS_S		0
#define	AR_IFS1_EIFS		0x03fff000	/* EIFS in core clock cycles */
#define	AR_IFS1_EIFS_S		12
#define	AR_IFS1_CS_EN		0x04000000	/* carrier sense enable */

#define	AR_RX_FILTER_UNICAST	0x00000001	/* unicast frame enable */
#define	AR_RX_FILTER_MULTICAST	0x00000002	/* multicast frame enable */
#define	AR_RX_FILTER_BROADCAST	0x00000004	/* broadcast frame enable */
#define	AR_RX_FILTER_CONTROL	0x00000008	/* control frame enable */
#define	AR_RX_FILTER_BEACON	0x00000010	/* beacon frame enable */
#define	AR_RX_FILTER_PROMISCUOUS 0x00000020	/* promiscuous receive enable */
#define	AR_RX_FILTER_BITS \
	"\20\1UCAST\2MCAST\3BCAST\4CONTROL\5BEACON\6PROMISC"

#define	AR_DIAG_SW_DIS_WEP_ACK	0x00000001	/* disable ACK if no key found*/
#define	AR_DIAG_SW_DIS_ACK	0x00000002	/* disable ACK generation */
#define	AR_DIAG_SW_DIS_CTS	0x00000004	/* disable CTS generation */
#define	AR_DIAG_SW_DIS_ENC	0x00000008	/* encryption disable */
#define	AR_DIAG_SW_DIS_DEC	0x00000010	/* decryption disable */
#define	AR_DIAG_SW_DIS_TX	0x00000020	/* TX disable */
#define	AR_DIAG_SW_DIS_RX	0x00000040	/* RX disable */
#define	AR_DIAG_SW_LOOP_BACK	0x00000080	/* TX data loopback enable */
#define	AR_DIAG_SW_CORR_FCS	0x00000100	/* corrupt FCS enable */
#define	AR_DIAG_SW_CHAN_INFO	0x00000200	/* channel information enable */
#define	AR_DIAG_SW_EN_SCRAM_SEED 0x00000400	/* use fixed scrambler seed */
#define	AR_DIAG_SW_SCVRAM_SEED	0x0003f800	/* fixed scrambler seed */
#define	AR_DIAG_SW_DIS_SEQ_INC	0x00040000	/* seq increment disable */
#define	AR_DIAG_SW_FRAME_NV0	0x00080000	/* accept frame vers != 0 */
#define	AR_DIAG_SW_DIS_CRYPTO	(AR_DIAG_SW_DIS_ENC | AR_DIAG_SW_DIS_DEC)
#define	AR_DIAG_SW_BITS \
	"\20\1DIS_WEP_ACK\2DIS_ACK\3DIS_CTS\4DIS_ENC\5DIS_DEC\6DIS_TX"\
	"\7DIS_RX\10LOOP_BACK\11CORR_FCS\12CHAN_INFO\13EN_SCRAM_SEED"\
	"\22DIS_SEQ_INC\24FRAME_NV0"

#define	AR_RETRY_CNT_SSH	0x0000003f	/* current short retry count */
#define	AR_RETRY_CNT_SLG	0x00000fc0	/* current long retry count */

#define	AR_BACKOFF_CW		0x000003ff	/* current contention window */
#define	AR_BACKOFF_CNT		0x03ff0000	/* backoff count */

#define	AR_KEYTABLE_KEY0(n)	(AR_KEYTABLE(n) + 0)	/* key bit 0-31 */
#define	AR_KEYTABLE_KEY1(n)	(AR_KEYTABLE(n) + 4)	/* key bit 32-47 */
#define	AR_KEYTABLE_KEY2(n)	(AR_KEYTABLE(n) + 8)	/* key bit 48-79 */
#define	AR_KEYTABLE_KEY3(n)	(AR_KEYTABLE(n) + 12)	/* key bit 80-95 */
#define	AR_KEYTABLE_KEY4(n)	(AR_KEYTABLE(n) + 16)	/* key bit 96-127 */
#define	AR_KEYTABLE_TYPE(n)	(AR_KEYTABLE(n) + 20)	/* key type */
#define	AR_KEYTABLE_TYPE_40	0x00000000	/* 40 bit key */
#define	AR_KEYTABLE_TYPE_104	0x00000001	/* 104 bit key */
#define	AR_KEYTABLE_TYPE_128	0x00000003	/* 128 bit key */
#define	AR_KEYTABLE_MAC0(n)	(AR_KEYTABLE(n) + 24)	/* MAC address 1-32 */
#define	AR_KEYTABLE_MAC1(n)	(AR_KEYTABLE(n) + 28)	/* MAC address 33-47 */
#define	AR_KEYTABLE_VALID	0x00008000	/* key and MAC address valid */

#endif /* _DEV_ATH_AR5210REG_H */