xref: /openbsd-src/sys/dev/ic/atwreg.h (revision d2cfacca638e31ac44c6759190615f70deac641d)
1*d2cfaccaSjsg /*	$OpenBSD: atwreg.h,v 1.7 2009/08/16 18:03:48 jsg Exp $	*/
2a98accbeSmillert /*	$NetBSD: atwreg.h,v 1.10 2004/07/23 05:01:29 dyoung Exp $	*/
33475e505Smillert 
43475e505Smillert /*
53475e505Smillert  * Copyright (c) 2003 The NetBSD Foundation, Inc.  All rights reserved.
63475e505Smillert  *
73475e505Smillert  * This code is derived from software contributed to The NetBSD Foundation
83475e505Smillert  * by David Young.
93475e505Smillert  *
103475e505Smillert  * Redistribution and use in source and binary forms, with or without
113475e505Smillert  * modification, are permitted provided that the following conditions
123475e505Smillert  * are met:
133475e505Smillert  * 1. Redistributions of source code must retain the above copyright
143475e505Smillert  *    notice, this list of conditions and the following disclaimer.
153475e505Smillert  * 2. Redistributions in binary form must reproduce the above copyright
163475e505Smillert  *    notice, this list of conditions and the following disclaimer in the
173475e505Smillert  *    documentation and/or other materials provided with the distribution.
183475e505Smillert  *
193475e505Smillert  * THIS SOFTWARE IS PROVIDED BY David Young AND CONTRIBUTORS ``AS IS'' AND
203475e505Smillert  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
213475e505Smillert  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
223475e505Smillert  * ARE DISCLAIMED.  IN NO EVENT SHALL David Young
233475e505Smillert  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
243475e505Smillert  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
253475e505Smillert  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
263475e505Smillert  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
273475e505Smillert  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
283475e505Smillert  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
293475e505Smillert  * THE POSSIBILITY OF SUCH DAMAGE.
303475e505Smillert  */
313475e505Smillert 
323475e505Smillert /* glossary */
333475e505Smillert 
343475e505Smillert /* DTIM   Delivery Traffic Indication Map, sent by AP
353475e505Smillert  * ATIM   Ad Hoc Traffic Indication Map
363475e505Smillert  * TU     1024 microseconds
373475e505Smillert  * TSF    time synchronization function
383475e505Smillert  * TBTT   target beacon transmission time
393475e505Smillert  * DIFS   distributed inter-frame space
403475e505Smillert  * SIFS   short inter-frame space
413475e505Smillert  * EIFS   extended inter-frame space
423475e505Smillert  */
433475e505Smillert 
443475e505Smillert /* Macros for bit twiddling. */
453475e505Smillert 
463475e505Smillert #ifndef _BIT_TWIDDLE
473475e505Smillert #define _BIT_TWIDDLE
483475e505Smillert 
493475e505Smillert /* find least significant bit that is set */
503475e505Smillert #define LOWEST_SET_BIT(x) ((((x) - 1) & (x)) ^ (x))
513475e505Smillert 
523475e505Smillert /* for x a power of two and p a non-negative integer, is x a greater power than 2**p? */
533475e505Smillert #define GTEQ_POWER(x, p) (((u_long)(x) >> (p)) != 0)
543475e505Smillert 
553475e505Smillert #define MASK_TO_SHIFT2(m) (GTEQ_POWER(LOWEST_SET_BIT((m)), 1) ? 1 : 0)
563475e505Smillert 
573475e505Smillert #define MASK_TO_SHIFT4(m) \
583475e505Smillert 	(GTEQ_POWER(LOWEST_SET_BIT((m)), 2) \
593475e505Smillert 	    ? 2 + MASK_TO_SHIFT2((m) >> 2) \
603475e505Smillert 	    : MASK_TO_SHIFT2((m)))
613475e505Smillert 
623475e505Smillert #define MASK_TO_SHIFT8(m) \
633475e505Smillert 	(GTEQ_POWER(LOWEST_SET_BIT((m)), 4) \
643475e505Smillert 	    ? 4 + MASK_TO_SHIFT4((m) >> 4) \
653475e505Smillert 	    : MASK_TO_SHIFT4((m)))
663475e505Smillert 
673475e505Smillert #define MASK_TO_SHIFT16(m) \
683475e505Smillert 	(GTEQ_POWER(LOWEST_SET_BIT((m)), 8) \
693475e505Smillert 	    ? 8 + MASK_TO_SHIFT8((m) >> 8) \
703475e505Smillert 	    : MASK_TO_SHIFT8((m)))
713475e505Smillert 
723475e505Smillert #define MASK_TO_SHIFT(m) \
733475e505Smillert 	(GTEQ_POWER(LOWEST_SET_BIT((m)), 16) \
743475e505Smillert 	    ? 16 + MASK_TO_SHIFT16((m) >> 16) \
753475e505Smillert 	    : MASK_TO_SHIFT16((m)))
763475e505Smillert 
773475e505Smillert #define MASK_AND_RSHIFT(x, mask) (((x) & (mask)) >> MASK_TO_SHIFT(mask))
783475e505Smillert #define LSHIFT(x, mask) ((x) << MASK_TO_SHIFT(mask))
793475e505Smillert #define MASK_AND_REPLACE(reg, val, mask) ((reg & ~mask) | LSHIFT(val, mask))
803475e505Smillert #define PRESHIFT(m) MASK_AND_RSHIFT((m), (m))
813475e505Smillert 
823475e505Smillert #endif /* _BIT_TWIDDLE */
833475e505Smillert 
843475e505Smillert /* ADM8211 Host Control and Status Registers */
853475e505Smillert 
863475e505Smillert #define ATW_PAR		0x00	/* PCI access */
873475e505Smillert #define ATW_FRCTL	0x04	/* Frame control */
883475e505Smillert #define ATW_TDR		0x08	/* Transmit demand */
893475e505Smillert #define ATW_WTDP	0x0C	/* Current transmit descriptor pointer */
903475e505Smillert #define ATW_RDR		0x10	/* Receive demand */
913475e505Smillert #define ATW_WRDP	0x14	/* Current receive descriptor pointer */
923475e505Smillert #define ATW_RDB		0x18	/* Receive descriptor base address */
933475e505Smillert #define ATW_CSR3A	0x1C	/* Unused (on ADM8211A) */
943475e505Smillert #define ATW_C_TDBH	0x1C	/* Transmit descriptor base address,
953475e505Smillert 				 * high-priority packet
963475e505Smillert 				 */
973475e505Smillert #define ATW_TDBD	0x20	/* Transmit descriptor base address, DCF */
983475e505Smillert #define ATW_TDBP	0x24	/* Transmit descriptor base address, PCF */
993475e505Smillert #define ATW_STSR	0x28	/* Status */
1003475e505Smillert #define ATW_CSR5A	0x2C	/* Unused */
1013475e505Smillert #define ATW_C_TDBB	0x2C	/* Transmit descriptor base address, buffered
1023475e505Smillert 				 * broadcast/multicast packet
1033475e505Smillert 				 */
1043475e505Smillert #define ATW_NAR		0x30	/* Network access */
1053475e505Smillert #define ATW_CSR6A	0x34	/* Unused */
1063475e505Smillert #define ATW_IER		0x38	/* Interrupt enable */
1073475e505Smillert #define ATW_CSR7A	0x3C
1083475e505Smillert #define ATW_LPC		0x40	/* Lost packet counter */
1093475e505Smillert #define ATW_TEST1	0x44	/* Test register 1 */
1103475e505Smillert #define ATW_SPR		0x48	/* Serial port */
1113475e505Smillert #define ATW_TEST0	0x4C	/* Test register 0 */
1123475e505Smillert #define ATW_WCSR	0x50	/* Wake-up control/status */
1133475e505Smillert #define ATW_WPDR	0x54	/* Wake-up pattern data */
1143475e505Smillert #define ATW_GPTMR	0x58	/* General purpose timer */
1153475e505Smillert #define ATW_GPIO	0x5C	/* GPIO[5:0] configuration and control */
1163475e505Smillert #define ATW_BBPCTL	0x60	/* BBP control port */
1173475e505Smillert #define ATW_SYNCTL	0x64	/* synthesizer control port */
1183475e505Smillert #define ATW_PLCPHD	0x68	/* PLCP header setting */
1193475e505Smillert #define ATW_MMIWADDR	0x6C	/* MMI write address */
1203475e505Smillert #define ATW_MMIRADDR1	0x70	/* MMI read address 1 */
1213475e505Smillert #define ATW_MMIRADDR2	0x74	/* MMI read address 2 */
1223475e505Smillert #define ATW_TXBR	0x78	/* Transmit burst counter */
1233475e505Smillert #define ATW_CSR15A	0x7C	/* Unused */
1243475e505Smillert #define ATW_ALCSTAT	0x80	/* ALC statistics */
1253475e505Smillert #define ATW_TOFS2	0x84	/* Timing offset parameter 2, 16b */
1263475e505Smillert #define ATW_CMDR	0x88	/* Command */
1273475e505Smillert #define ATW_PCIC	0x8C	/* PCI bus performance counter */
1283475e505Smillert #define ATW_PMCSR	0x90	/* Power management command and status */
1293475e505Smillert #define ATW_PAR0	0x94	/* Local MAC address register 0, 32b */
1303475e505Smillert #define ATW_PAR1	0x98	/* Local MAC address register 1, 16b */
1313475e505Smillert #define ATW_MAR0	0x9C	/* Multicast address hash table register 0 */
1323475e505Smillert #define ATW_MAR1	0xA0	/* Multicast address hash table register 1 */
1333475e505Smillert #define ATW_ATIMDA0	0xA4	/* Ad Hoc Traffic Indication Map (ATIM)
1343475e505Smillert 				 * frame DA, byte[3:0]
1353475e505Smillert 				 */
1363475e505Smillert #define ATW_ABDA1	0xA8	/* BSSID address byte[5:4];
1373475e505Smillert 				 * ATIM frame DA byte[5:4]
1383475e505Smillert 				 */
1393475e505Smillert #define ATW_BSSID0	0xAC	/* BSSID  address byte[3:0] */
1403475e505Smillert #define ATW_TXLMT	0xB0	/* WLAN retry limit, 8b;
1413475e505Smillert 				 * Max TX MSDU lifetime, 16b
1423475e505Smillert 				 */
1433475e505Smillert #define ATW_MIBCNT	0xB4	/* RTS/ACK/FCS MIB count, 32b */
1443475e505Smillert #define ATW_BCNT	0xB8	/* Beacon transmission time, 32b */
1453475e505Smillert #define ATW_TSFTH	0xBC	/* TSFT[63:32], 32b */
1463475e505Smillert #define ATW_TSC		0xC0	/* TSFT[39:32] down count value */
1473475e505Smillert #define ATW_SYNRF	0xC4	/* SYN RF IF direct control */
1483475e505Smillert #define ATW_BPLI	0xC8	/* Beacon interval, 16b.
1493475e505Smillert 				 * STA listen interval, 16b.
1503475e505Smillert 				 */
1513475e505Smillert #define ATW_CAP0	0xCC	/* Current channel, 4b. RCVDTIM, 1b. */
1523475e505Smillert #define ATW_CAP1	0xD0	/* Capability information, 16b.
1533475e505Smillert 				 * ATIM window, 1b.
1543475e505Smillert 				 */
1553475e505Smillert #define ATW_RMD		0xD4	/* RX max reception duration, 16b */
1563475e505Smillert #define ATW_CFPP	0xD8	/* CFP parameter, 32b */
1573475e505Smillert #define ATW_TOFS0	0xDC	/* Timing offset parameter 0, 28b */
1583475e505Smillert #define ATW_TOFS1	0xE0	/* Timing offset parameter 1, 24b */
1593475e505Smillert #define ATW_IFST	0xE4	/* IFS timing parameter 1, 32b */
1603475e505Smillert #define ATW_RSPT	0xE8	/* Response time, 24b */
1613475e505Smillert #define ATW_TSFTL	0xEC	/* TSFT[31:0], 32b */
1623475e505Smillert #define ATW_WEPCTL	0xF0	/* WEP control */
1633475e505Smillert #define ATW_WESK	0xF4	/* Write entry for shared/individual key */
1643475e505Smillert #define ATW_WEPCNT	0xF8	/* WEP count */
1653475e505Smillert #define ATW_MACTEST	0xFC
1663475e505Smillert 
1673475e505Smillert #define ATW_FER		0x100	/* Function event */
1683475e505Smillert #define ATW_FEMR	0x104	/* Function event mask */
1693475e505Smillert #define ATW_FPSR	0x108	/* Function present state */
1703475e505Smillert #define ATW_FFER	0x10C	/* Function force event */
1713475e505Smillert 
1723475e505Smillert 
173*d2cfaccaSjsg #define ATW_PAR_MWIE		(1<<24)		/* memory write and invalidate
1743475e505Smillert 						 * enable
1753475e505Smillert 						 */
176*d2cfaccaSjsg #define ATW_PAR_MRLE		(1<<23)		/* memory read line enable */
177*d2cfaccaSjsg #define ATW_PAR_MRME		(1<<21)		/* memory read multiple
1783475e505Smillert 						 * enable
1793475e505Smillert 						 */
180c33247eeSjsg #define ATW_PAR_RAP_MASK	0x60000	/* receive auto-polling in
1813475e505Smillert 						 * receive suspended state
1823475e505Smillert 						 */
183c33247eeSjsg #define ATW_PAR_CAL_MASK	0xc000	/* cache alignment */
1843475e505Smillert #define		ATW_PAR_CAL_PBL		0x0
1853475e505Smillert 						/* min(8 DW, PBL) */
1863475e505Smillert #define		ATW_PAR_CAL_8DW		LSHIFT(0x1, ATW_PAR_CAL_MASK)
1873475e505Smillert 						/* min(16 DW, PBL) */
1883475e505Smillert #define		ATW_PAR_CAL_16DW	LSHIFT(0x2, ATW_PAR_CAL_MASK)
1893475e505Smillert 						/* min(32 DW, PBL) */
1903475e505Smillert #define		ATW_PAR_CAL_32DW	LSHIFT(0x3, ATW_PAR_CAL_MASK)
191c33247eeSjsg #define ATW_PAR_PBL_MASK	0x3f00	/* programmable burst length */
1923475e505Smillert #define		ATW_PAR_PBL_UNLIMITED	0x0
1933475e505Smillert #define		ATW_PAR_PBL_1DW		LSHIFT(0x1, ATW_PAR_PBL_MASK)
1943475e505Smillert #define		ATW_PAR_PBL_2DW		LSHIFT(0x2, ATW_PAR_PBL_MASK)
1953475e505Smillert #define		ATW_PAR_PBL_4DW		LSHIFT(0x4, ATW_PAR_PBL_MASK)
1963475e505Smillert #define		ATW_PAR_PBL_8DW		LSHIFT(0x8, ATW_PAR_PBL_MASK)
1973475e505Smillert #define		ATW_PAR_PBL_16DW	LSHIFT(0x16, ATW_PAR_PBL_MASK)
1983475e505Smillert #define		ATW_PAR_PBL_32DW	LSHIFT(0x32, ATW_PAR_PBL_MASK)
199*d2cfaccaSjsg #define ATW_PAR_BLE		(1<<7)		/* big/little endian selection */
200c33247eeSjsg #define ATW_PAR_DSL_MASK	0x7c	/* descriptor skip length */
201*d2cfaccaSjsg #define ATW_PAR_BAR		(1<<1)		/* bus arbitration */
202*d2cfaccaSjsg #define ATW_PAR_SWR		(1<<0)		/* software reset */
2033475e505Smillert 
204*d2cfaccaSjsg #define ATW_FRCTL_PWRMGMT	(1<<31)		/* power management */
205c33247eeSjsg #define ATW_FRCTL_VER_MASK	0x60000000	/* protocol version */
206*d2cfaccaSjsg #define ATW_FRCTL_ORDER		(1<<28)		/* order bit */
207*d2cfaccaSjsg #define ATW_FRCTL_MAXPSP	(1<<27)		/* maximum power saving */
208*d2cfaccaSjsg #define ATW_C_FRCTL_PRSP	(1<<26)		/* 1: driver sends probe
2093475e505Smillert 						 *    response
2103475e505Smillert 						 * 0: ASIC sends prresp
2113475e505Smillert 						 */
212*d2cfaccaSjsg #define ATW_C_FRCTL_DRVBCON	(1<<25)		/* 1: driver sends beacons
2133475e505Smillert 						 * 0: ASIC sends beacons
2143475e505Smillert 						 */
215*d2cfaccaSjsg #define ATW_C_FRCTL_DRVLINKCTRL	(1<<24)		/* 1: driver controls link LED
2163475e505Smillert 						 * 0: ASIC controls link LED
2173475e505Smillert 						 */
218*d2cfaccaSjsg #define ATW_C_FRCTL_DRVLINKON	(1<<23)		/* 1: turn on link LED
2193475e505Smillert 						 * 0: turn off link LED
2203475e505Smillert 						 */
221*d2cfaccaSjsg #define ATW_C_FRCTL_CTX_DATA	(1<<22)		/* 0: set by CSR28
2223475e505Smillert 						 * 1: random
2233475e505Smillert 						 */
224*d2cfaccaSjsg #define ATW_C_FRCTL_RSVFRM	(1<<21)		/* 1: receive "reserved"
2253475e505Smillert 						 * frames, 0: ignore
2263475e505Smillert 						 * reserved frames
2273475e505Smillert 						 */
228*d2cfaccaSjsg #define ATW_C_FRCTL_CFEND	(1<<19)		/* write to send CF_END,
2293475e505Smillert 						 * ADM8211C/CR clears
2303475e505Smillert 						 */
231*d2cfaccaSjsg #define ATW_FRCTL_DOZEFRM	(1<<18)		/* select pre-sleep frame */
232*d2cfaccaSjsg #define ATW_FRCTL_PSAWAKE	(1<<17)		/* MAC is awake (?) */
233*d2cfaccaSjsg #define ATW_FRCTL_PSMODE	(1<<16)		/* MAC is power-saving (?) */
234c33247eeSjsg #define ATW_FRCTL_AID_MASK	0xffff	/* STA Association ID */
2353475e505Smillert 
236*d2cfaccaSjsg #define ATW_INTR_PCF		(1<<31)		/* started/ended CFP */
237*d2cfaccaSjsg #define ATW_INTR_BCNTC		(1<<30)		/* transmitted IBSS beacon */
238*d2cfaccaSjsg #define ATW_INTR_GPINT		(1<<29)		/* GPIO interrupt */
239*d2cfaccaSjsg #define ATW_INTR_LINKOFF	(1<<28)		/* lost ATW_WCSR_BLN beacons */
240*d2cfaccaSjsg #define ATW_INTR_ATIMTC		(1<<27)		/* transmitted ATIM */
241*d2cfaccaSjsg #define ATW_INTR_TSFTF		(1<<26)		/* TSFT out of range */
242*d2cfaccaSjsg #define ATW_INTR_TSCZ		(1<<25)		/* TSC countdown expired */
243*d2cfaccaSjsg #define ATW_INTR_LINKON		(1<<24)		/* matched SSID, BSSID */
244*d2cfaccaSjsg #define ATW_INTR_SQL		(1<<23)		/* Marvel signal quality */
245*d2cfaccaSjsg #define ATW_INTR_WEPTD		(1<<22)		/* switched WEP table */
246*d2cfaccaSjsg #define ATW_INTR_ATIME		(1<<21)		/* ended ATIM window */
247*d2cfaccaSjsg #define ATW_INTR_TBTT		(1<<20)		/* (TBTT) Target Beacon TX Time
2483475e505Smillert 						 * passed
2493475e505Smillert 						 */
250*d2cfaccaSjsg #define ATW_INTR_NISS		(1<<16)		/* normal interrupt status
2513475e505Smillert 						 * summary: any of 31, 30, 27,
2523475e505Smillert 						 * 24, 14, 12, 6, 2, 0.
2533475e505Smillert 						 */
254*d2cfaccaSjsg #define ATW_INTR_AISS		(1<<15)		/* abnormal interrupt status
2553475e505Smillert 						 * summary: any of 29, 28, 26,
2563475e505Smillert 						 * 25, 23, 22, 13, 11, 8, 7, 5,
2573475e505Smillert 						 * 4, 3, 1.
2583475e505Smillert 						 */
259*d2cfaccaSjsg #define ATW_INTR_TEIS		(1<<14)		/* transmit early interrupt
2603475e505Smillert 						 * status: moved TX packet to
2613475e505Smillert 						 * FIFO
2623475e505Smillert 						 */
263*d2cfaccaSjsg #define ATW_INTR_FBE		(1<<13)		/* fatal bus error */
264*d2cfaccaSjsg #define ATW_INTR_REIS		(1<<12)		/* receive early interrupt
2653475e505Smillert 						 * status: RX packet filled
2663475e505Smillert 						 * its first descriptor
2673475e505Smillert 						 */
268*d2cfaccaSjsg #define ATW_INTR_GPTT		(1<<11)		/* general purpose timer expired */
269*d2cfaccaSjsg #define ATW_INTR_RPS		(1<<8)		/* stopped receive process */
270*d2cfaccaSjsg #define ATW_INTR_RDU		(1<<7)		/* receive descriptor
2713475e505Smillert 						 * unavailable
2723475e505Smillert 						 */
273*d2cfaccaSjsg #define ATW_INTR_RCI		(1<<6)		/* completed packet reception */
274*d2cfaccaSjsg #define ATW_INTR_TUF		(1<<5)		/* transmit underflow */
275*d2cfaccaSjsg #define ATW_INTR_TRT		(1<<4)		/* transmit retry count
2763475e505Smillert 						 * expired
2773475e505Smillert 						 */
278*d2cfaccaSjsg #define ATW_INTR_TLT		(1<<3)		/* transmit lifetime exceeded */
279*d2cfaccaSjsg #define ATW_INTR_TDU		(1<<2)		/* transmit descriptor
2803475e505Smillert 						 * unavailable
2813475e505Smillert 						 */
282*d2cfaccaSjsg #define ATW_INTR_TPS		(1<<1)		/* stopped transmit process */
283*d2cfaccaSjsg #define ATW_INTR_TCI		(1<<0)		/* completed transmit */
284*d2cfaccaSjsg #define ATW_NAR_TXCF		(1<<31)		/* stop process on TX failure */
285*d2cfaccaSjsg #define ATW_NAR_HF		(1<<30)		/* flush TX FIFO to host (?) */
286*d2cfaccaSjsg #define ATW_NAR_UTR		(1<<29)		/* select retry count source */
287*d2cfaccaSjsg #define ATW_NAR_PCF		(1<<28)		/* use one/both transmit
2883475e505Smillert 						 * descriptor base addresses
2893475e505Smillert 						 */
290*d2cfaccaSjsg #define ATW_NAR_CFP		(1<<27)		/* indicate more TX data to
2913475e505Smillert 						 * point coordinator
2923475e505Smillert 						 */
293*d2cfaccaSjsg #define ATW_C_NAR_APSTA		(1<<26)		/* 0: STA mode
2943475e505Smillert 						 * 1: AP mode
2953475e505Smillert 						 */
296*d2cfaccaSjsg #define ATW_C_NAR_TDBBE		(1<<25)		/* 0: disable TDBB
2973475e505Smillert 						 * 1: enable TDBB
2983475e505Smillert 						 */
299*d2cfaccaSjsg #define ATW_C_NAR_TDBHE		(1<<24)		/* 0: disable TDBH
3003475e505Smillert 						 * 1: enable TDBH
3013475e505Smillert 						 */
302*d2cfaccaSjsg #define ATW_C_NAR_TDBHT		(1<<23)		/* write 1 to make ASIC
3033475e505Smillert 						 * poll TDBH once; ASIC clears
3043475e505Smillert 						 */
305*d2cfaccaSjsg #define ATW_NAR_SF		(1<<21)		/* store and forward: ignore
3063475e505Smillert 						 * TX threshold
3073475e505Smillert 						 */
308c33247eeSjsg #define ATW_NAR_TR_MASK		0xc000	/* TX threshold */
3093475e505Smillert #define		ATW_NAR_TR_L64		LSHIFT(0x0, ATW_NAR_TR_MASK)
3103475e505Smillert #define		ATW_NAR_TR_L160		LSHIFT(0x2, ATW_NAR_TR_MASK)
3113475e505Smillert #define		ATW_NAR_TR_L192		LSHIFT(0x3, ATW_NAR_TR_MASK)
3123475e505Smillert #define		ATW_NAR_TR_H96		LSHIFT(0x0, ATW_NAR_TR_MASK)
3133475e505Smillert #define		ATW_NAR_TR_H288		LSHIFT(0x2, ATW_NAR_TR_MASK)
3143475e505Smillert #define		ATW_NAR_TR_H544		LSHIFT(0x3, ATW_NAR_TR_MASK)
315*d2cfaccaSjsg #define ATW_NAR_ST		(1<<13)		/* start/stop transmit */
316c33247eeSjsg #define ATW_NAR_OM_MASK		0xc00	/* operating mode */
3173475e505Smillert #define		ATW_NAR_OM_NORMAL	0x0
3183475e505Smillert #define		ATW_NAR_OM_LOOPBACK	LSHIFT(0x1, ATW_NAR_OM_MASK)
319*d2cfaccaSjsg #define ATW_NAR_MM		(1<<7)		/* RX any multicast */
320*d2cfaccaSjsg #define ATW_NAR_PR		(1<<6)		/* promiscuous mode */
321*d2cfaccaSjsg #define ATW_NAR_EA		(1<<5)		/* match ad hoc packets (?) */
322*d2cfaccaSjsg #define ATW_NAR_DISPCF		(1<<4)		/* 1: PCF *not* supported
3233475e505Smillert 						 * 0: PCF supported
3243475e505Smillert 						 */
325*d2cfaccaSjsg #define ATW_NAR_PB		(1<<3)		/* pass bad packets */
326*d2cfaccaSjsg #define ATW_NAR_STPDMA		(1<<2)		/* stop DMA, abort packet */
327*d2cfaccaSjsg #define ATW_NAR_SR		(1<<1)		/* start/stop receive */
328*d2cfaccaSjsg #define ATW_NAR_CTX		(1<<0)		/* continuous TX mode */
3293475e505Smillert 
3303475e505Smillert /* IER bits are identical to STSR bits. Use ATW_INTR_*. */
3313475e505Smillert #if 0
332*d2cfaccaSjsg #define ATW_IER_NIE		(1<<16)		/* normal interrupt enable */
333*d2cfaccaSjsg #define ATW_IER_AIE		(1<<15)		/* abnormal interrupt enable */
3343475e505Smillert /* normal interrupts: combine with ATW_IER_NIE */
335*d2cfaccaSjsg #define ATW_IER_PCFIE		(1<<31)		/* STA entered CFP */
336*d2cfaccaSjsg #define ATW_IER_BCNTCIE		(1<<30)		/* STA TX'd beacon */
337*d2cfaccaSjsg #define ATW_IER_ATIMTCIE	(1<<27)		/* transmitted ATIM */
338*d2cfaccaSjsg #define ATW_IER_LINKONIE	(1<<24)		/* matched beacon */
339*d2cfaccaSjsg #define ATW_IER_ATIMIE		(1<<21)		/* ended ATIM window */
340*d2cfaccaSjsg #define ATW_IER_TBTTIE		(1<<20)		/* TBTT */
341*d2cfaccaSjsg #define ATW_IER_TEIE		(1<<14)		/* moved TX packet to FIFO */
342*d2cfaccaSjsg #define ATW_IER_REIE		(1<<12)		/* RX packet filled its first
3433475e505Smillert 						 * descriptor
3443475e505Smillert 						 */
345*d2cfaccaSjsg #define ATW_IER_RCIE		(1<<6)		/* completed RX */
346*d2cfaccaSjsg #define ATW_IER_TDUIE		(1<<2)		/* transmit descriptor
3473475e505Smillert 						 * unavailable
3483475e505Smillert 						 */
349*d2cfaccaSjsg #define ATW_IER_TCIE		(1<<0)		/* completed TX */
3503475e505Smillert /* abnormal interrupts: combine with ATW_IER_AIE */
351*d2cfaccaSjsg #define ATW_IER_GPIE		(1<<29)		/* GPIO interrupt */
352*d2cfaccaSjsg #define ATW_IER_LINKOFFIE	(1<<28)		/* lost beacon */
353*d2cfaccaSjsg #define ATW_IER_TSFTFIE		(1<<26)		/* TSFT out of range */
354*d2cfaccaSjsg #define ATW_IER_TSCIE		(1<<25)		/* TSC countdown expired */
355*d2cfaccaSjsg #define ATW_IER_SQLIE		(1<<23)		/* signal quality */
356*d2cfaccaSjsg #define ATW_IER_WEPIE		(1<<22)		/* finished WEP table switch */
357*d2cfaccaSjsg #define ATW_IER_FBEIE		(1<<13)		/* fatal bus error */
358*d2cfaccaSjsg #define ATW_IER_GPTIE		(1<<11)		/* general purpose timer expired */
359*d2cfaccaSjsg #define ATW_IER_RPSIE		(1<<8)		/* stopped receive process */
360*d2cfaccaSjsg #define ATW_IER_RUIE		(1<<7)		/* receive descriptor unavailable */
361*d2cfaccaSjsg #define ATW_IER_TUIE		(1<<5)		/* transmit underflow */
362*d2cfaccaSjsg #define ATW_IER_TRTIE		(1<<4)		/* exceeded transmit retry count */
363*d2cfaccaSjsg #define ATW_IER_TLTTIE		(1<<3)		/* transmit lifetime exceeded */
364*d2cfaccaSjsg #define ATW_IER_TPSIE		(1<<1)		/* stopped transmit process */
3653475e505Smillert #endif
3663475e505Smillert 
367*d2cfaccaSjsg #define ATW_LPC_LPCO		(1<<16)		/* lost packet counter overflow */
368c33247eeSjsg #define ATW_LPC_LPC_MASK	0xffff	/* lost packet counter */
3693475e505Smillert 
370*d2cfaccaSjsg #define	ATW_TEST1_CONTROL	(1<<31)		/* "0: read from dxfer_control,
3713475e505Smillert 						 * 1: read from dxfer_state"
3723475e505Smillert 						 */
373c33247eeSjsg #define	ATW_TEST1_DBGREAD_MASK	0x70000000	/* "control of read data,
3743475e505Smillert 						 * debug only"
3753475e505Smillert 						 */
376c33247eeSjsg #define	ATW_TEST1_TXWP_MASK	0xe000000	/* select ATW_WTDP content? */
3773475e505Smillert #define	ATW_TEST1_TXWP_TDBD	LSHIFT(0x0, ATW_TEST1_TXWP_MASK)
3783475e505Smillert #define	ATW_TEST1_TXWP_TDBH	LSHIFT(0x1, ATW_TEST1_TXWP_MASK)
3793475e505Smillert #define	ATW_TEST1_TXWP_TDBB	LSHIFT(0x2, ATW_TEST1_TXWP_MASK)
3803475e505Smillert #define	ATW_TEST1_TXWP_TDBP	LSHIFT(0x3, ATW_TEST1_TXWP_MASK)
381c33247eeSjsg #define	ATW_TEST1_RSVD0_MASK	0x1ffffc0	/* reserved */
382c33247eeSjsg #define	ATW_TEST1_TESTMODE_MASK	0x30
383a98accbeSmillert /* normal operation */
384a98accbeSmillert #define	ATW_TEST1_TESTMODE_NORMAL	LSHIFT(0x0, ATW_TEST1_TESTMODE_MASK)
385a98accbeSmillert /* MAC-only mode */
386a98accbeSmillert #define	ATW_TEST1_TESTMODE_MACONLY	LSHIFT(0x1, ATW_TEST1_TESTMODE_MASK)
387a98accbeSmillert /* normal operation */
388a98accbeSmillert #define	ATW_TEST1_TESTMODE_NORMAL2	LSHIFT(0x2, ATW_TEST1_TESTMODE_MASK)
389a98accbeSmillert /* monitor mode */
390a98accbeSmillert #define	ATW_TEST1_TESTMODE_MONITOR	LSHIFT(0x3, ATW_TEST1_TESTMODE_MASK)
3913475e505Smillert 
392c33247eeSjsg #define	ATW_TEST1_DUMP_MASK	0xf		/* select dump signal
3933475e505Smillert 							 * from dxfer (huh?)
3943475e505Smillert 							 */
3953475e505Smillert 
396*d2cfaccaSjsg #define ATW_SPR_SRS		(1<<11)		/* activate SEEPROM access */
397*d2cfaccaSjsg #define ATW_SPR_SDO		(1<<3)		/* data out of SEEPROM */
398*d2cfaccaSjsg #define ATW_SPR_SDI		(1<<2)		/* data into SEEPROM */
399*d2cfaccaSjsg #define ATW_SPR_SCLK		(1<<1)		/* SEEPROM clock */
400*d2cfaccaSjsg #define ATW_SPR_SCS		(1<<0)		/* SEEPROM chip select */
4013475e505Smillert 
402c33247eeSjsg #define ATW_TEST0_BE_MASK	0xe0000000	/* Bus error state */
403c33247eeSjsg #define ATW_TEST0_TS_MASK	0x1c000000	/* Transmit process state */
4043475e505Smillert 
4053475e505Smillert /* Stopped */
4063475e505Smillert #define ATW_TEST0_TS_STOPPED		LSHIFT(0, ATW_TEST0_TS_MASK)
4073475e505Smillert /* Running - fetch transmit descriptor */
4083475e505Smillert #define ATW_TEST0_TS_FETCH		LSHIFT(1, ATW_TEST0_TS_MASK)
4093475e505Smillert /* Running - wait for end of transmission */
4103475e505Smillert #define ATW_TEST0_TS_WAIT		LSHIFT(2, ATW_TEST0_TS_MASK)
4113475e505Smillert /* Running - read buffer from memory and queue into FIFO */
4123475e505Smillert #define ATW_TEST0_TS_READING		LSHIFT(3, ATW_TEST0_TS_MASK)
4133475e505Smillert #define ATW_TEST0_TS_RESERVED1		LSHIFT(4, ATW_TEST0_TS_MASK)
4143475e505Smillert #define ATW_TEST0_TS_RESERVED2		LSHIFT(5, ATW_TEST0_TS_MASK)
4153475e505Smillert /* Suspended */
4163475e505Smillert #define ATW_TEST0_TS_SUSPENDED		LSHIFT(6, ATW_TEST0_TS_MASK)
4173475e505Smillert /* Running - close transmit descriptor */
4183475e505Smillert #define ATW_TEST0_TS_CLOSE		LSHIFT(7, ATW_TEST0_TS_MASK)
4193475e505Smillert 
4203475e505Smillert /* ADM8211C/CR registers */
4213475e505Smillert /* Suspended */
4223475e505Smillert #define ATW_C_TEST0_TS_SUSPENDED	LSHIFT(4, ATW_TEST0_TS_MASK)
4233475e505Smillert /* Descriptor write */
4243475e505Smillert #define ATW_C_TEST0_TS_CLOSE		LSHIFT(5, ATW_TEST0_TS_MASK)
4253475e505Smillert /* Last descriptor write */
4263475e505Smillert #define ATW_C_TEST0_TS_CLOSELAST	LSHIFT(6, ATW_TEST0_TS_MASK)
4273475e505Smillert /* FIFO full */
4283475e505Smillert #define ATW_C_TEST0_TS_FIFOFULL		LSHIFT(7, ATW_TEST0_TS_MASK)
4293475e505Smillert 
430c33247eeSjsg #define ATW_TEST0_RS_MASK	0x3800000	/* Receive process state */
4313475e505Smillert 
4323475e505Smillert /* Stopped */
4333475e505Smillert #define	ATW_TEST0_RS_STOPPED		LSHIFT(0, ATW_TEST0_RS_MASK)
4343475e505Smillert /* Running - fetch receive descriptor */
4353475e505Smillert #define	ATW_TEST0_RS_FETCH		LSHIFT(1, ATW_TEST0_RS_MASK)
4363475e505Smillert /* Running - check for end of receive */
4373475e505Smillert #define	ATW_TEST0_RS_CHECK		LSHIFT(2, ATW_TEST0_RS_MASK)
4383475e505Smillert /* Running - wait for packet */
4393475e505Smillert #define	ATW_TEST0_RS_WAIT		LSHIFT(3, ATW_TEST0_RS_MASK)
4403475e505Smillert /* Suspended */
4413475e505Smillert #define	ATW_TEST0_RS_SUSPENDED		LSHIFT(4, ATW_TEST0_RS_MASK)
4423475e505Smillert /* Running - close receive descriptor */
4433475e505Smillert #define	ATW_TEST0_RS_CLOSE		LSHIFT(5, ATW_TEST0_RS_MASK)
4443475e505Smillert /* Running - flush current frame from FIFO */
4453475e505Smillert #define	ATW_TEST0_RS_FLUSH		LSHIFT(6, ATW_TEST0_RS_MASK)
4463475e505Smillert /* Running - queue current frame from FIFO into buffer */
4473475e505Smillert #define	ATW_TEST0_RS_QUEUE		LSHIFT(7, ATW_TEST0_RS_MASK)
4483475e505Smillert 
449*d2cfaccaSjsg #define ATW_TEST0_EPNE		(1<<18)		/* SEEPROM not detected */
450*d2cfaccaSjsg #define ATW_TEST0_EPSNM		(1<<17)		/* SEEPROM bad signature */
451*d2cfaccaSjsg #define ATW_TEST0_EPTYP_MASK	(1<<16)		/* SEEPROM type
4523475e505Smillert 						 * 1: 93c66,
4533475e505Smillert 						 * 0: 93c46
4543475e505Smillert 						 */
4553475e505Smillert #define	ATW_TEST0_EPTYP_93c66		ATW_TEST0_EPTYP_MASK
4563475e505Smillert #define	ATW_TEST0_EPTYP_93c46		0
457*d2cfaccaSjsg #define ATW_TEST0_EPRLD		(1<<15)		/* recall SEEPROM (write 1) */
4583475e505Smillert 
459*d2cfaccaSjsg #define ATW_WCSR_CRCT		(1<<30)		/* CRC-16 type */
460*d2cfaccaSjsg #define ATW_WCSR_WP1E		(1<<29)		/* match wake-up pattern 1 */
461*d2cfaccaSjsg #define ATW_WCSR_WP2E		(1<<28)		/* match wake-up pattern 2 */
462*d2cfaccaSjsg #define ATW_WCSR_WP3E		(1<<27)		/* match wake-up pattern 3 */
463*d2cfaccaSjsg #define ATW_WCSR_WP4E		(1<<26)		/* match wake-up pattern 4 */
464*d2cfaccaSjsg #define ATW_WCSR_WP5E		(1<<25)		/* match wake-up pattern 5 */
465c33247eeSjsg #define ATW_WCSR_BLN_MASK	0xe00000	/* lose link after BLN lost
4663475e505Smillert 						 * beacons
4673475e505Smillert 						 */
468*d2cfaccaSjsg #define ATW_WCSR_TSFTWE		(1<<20)		/* wake up on TSFT out of
4693475e505Smillert 						 * range
4703475e505Smillert 						 */
471*d2cfaccaSjsg #define ATW_WCSR_TIMWE		(1<<19)		/* wake up on TIM */
472*d2cfaccaSjsg #define ATW_WCSR_ATIMWE		(1<<18)		/* wake up on ATIM */
473*d2cfaccaSjsg #define ATW_WCSR_KEYWE		(1<<17)		/* wake up on key update */
474*d2cfaccaSjsg #define ATW_WCSR_WFRE		(1<<10)		/* wake up on wake-up frame */
475*d2cfaccaSjsg #define ATW_WCSR_MPRE		(1<<9)		/* wake up on magic packet */
476*d2cfaccaSjsg #define ATW_WCSR_LSOE		(1<<8)		/* wake up on link loss */
4773475e505Smillert /* wake-up reasons correspond to enable bits */
478*d2cfaccaSjsg #define ATW_WCSR_KEYUP		(1<<6)		/* */
479*d2cfaccaSjsg #define ATW_WCSR_TSFTW		(1<<5)		/* */
480*d2cfaccaSjsg #define ATW_WCSR_TIMW		(1<<4)		/* */
481*d2cfaccaSjsg #define ATW_WCSR_ATIMW		(1<<3)		/* */
482*d2cfaccaSjsg #define ATW_WCSR_WFR		(1<<2)		/* */
483*d2cfaccaSjsg #define ATW_WCSR_MPR		(1<<1)		/* */
484*d2cfaccaSjsg #define ATW_WCSR_LSO		(1<<0)		/* */
4853475e505Smillert 
486*d2cfaccaSjsg #define ATW_GPTMR_COM_MASK	(1<<16)		/* continuous operation mode */
487c33247eeSjsg #define ATW_GPTMR_GTV_MASK	0xffff	/* set countdown in 204us ticks */
4883475e505Smillert 
489c33247eeSjsg #define ATW_GPIO_EC1_MASK	0x3000000	/* GPIO1 event configuration */
490c33247eeSjsg #define ATW_GPIO_LAT_MASK	0x300000	/* input latch */
491c33247eeSjsg #define ATW_GPIO_INTEN_MASK	0xc0000	/* interrupt enable */
492c33247eeSjsg #define ATW_GPIO_EN_MASK	0x3f000	/* output enable */
493c33247eeSjsg #define ATW_GPIO_O_MASK		0xfc0	/* output value */
494c33247eeSjsg #define ATW_GPIO_I_MASK		0x3f	/* pin static input */
4953475e505Smillert 
496*d2cfaccaSjsg #define ATW_BBPCTL_TWI			(1<<31)	/* Intersil 3-wire interface */
497c33247eeSjsg #define ATW_BBPCTL_RF3KADDR_MASK	0x7f000000	/* Address for RF3000 */
4983475e505Smillert #define ATW_BBPCTL_RF3KADDR_ADDR LSHIFT(0x20, ATW_BBPCTL_RF3KADDR_MASK)
499*d2cfaccaSjsg #define ATW_BBPCTL_NEGEDGE_DO		(1<<23)	/* data-out on negative edge */
500*d2cfaccaSjsg #define ATW_BBPCTL_NEGEDGE_DI		(1<<22)	/* data-in on negative edge */
501*d2cfaccaSjsg #define ATW_BBPCTL_CCA_ACTLO		(1<<21)	/* CCA low when busy */
502c33247eeSjsg #define ATW_BBPCTL_TYPE_MASK		0x1c0000	/* BBP type */
503*d2cfaccaSjsg #define ATW_BBPCTL_WR			(1<<17)	/* start write; reset on
5043475e505Smillert 						 * completion
5053475e505Smillert 						 */
506*d2cfaccaSjsg #define ATW_BBPCTL_RD		(1<<16)		/* start read; reset on
5073475e505Smillert 						 * completion
5083475e505Smillert 						 */
509c33247eeSjsg #define ATW_BBPCTL_ADDR_MASK	0xff00	/* BBP address */
510c33247eeSjsg #define ATW_BBPCTL_DATA_MASK	0xff	/* BBP data */
5113475e505Smillert 
512*d2cfaccaSjsg #define ATW_SYNCTL_WR		(1<<31)		/* start write; reset on
5133475e505Smillert 						 * completion
5143475e505Smillert 						 */
515*d2cfaccaSjsg #define ATW_SYNCTL_RD		(1<<30)		/* start read; reset on
5163475e505Smillert 						 * completion
5173475e505Smillert 						 */
518*d2cfaccaSjsg #define ATW_SYNCTL_CS0		(1<<29)		/* chip select */
519*d2cfaccaSjsg #define ATW_SYNCTL_CS1		(1<<28)
520*d2cfaccaSjsg #define ATW_SYNCTL_CAL		(1<<27)		/* generate RF CAL pulse after
5213475e505Smillert 						 * Rx
5223475e505Smillert 						 */
523*d2cfaccaSjsg #define ATW_SYNCTL_SELCAL	(1<<26)		/* RF CAL source, 0: CAL bit,
5243475e505Smillert 						 * 1: MAC; needed by Intersil
5253475e505Smillert 						 * BBP
5263475e505Smillert 						 */
527*d2cfaccaSjsg #define	ATW_C_SYNCTL_MMICE	(1<<25)		/* ADM8211C/CR define this
5283475e505Smillert 						 * bit. 0: latch data on
5293475e505Smillert 						 * negative edge, 1: positive
5303475e505Smillert 						 * edge.
5313475e505Smillert 						 */
532c33247eeSjsg #define ATW_SYNCTL_RFTYPE_MASK	0x1c00000	/* RF type */
533c33247eeSjsg #define ATW_SYNCTL_DATA_MASK	0x3fffff	/* synthesizer setting */
5343475e505Smillert 
535c33247eeSjsg #define ATW_PLCPHD_SIGNAL_MASK	0xff000000	/* signal field in PLCP header,
5363475e505Smillert 						 * only for beacon, ATIM, and
5373475e505Smillert 						 * RTS.
5383475e505Smillert 						 */
539c33247eeSjsg #define ATW_PLCPHD_SERVICE_MASK	0xff0000	/* service field in PLCP
5403475e505Smillert 						 * header; with RFMD BBP,
5413475e505Smillert 						 * sets Tx power for beacon,
5423475e505Smillert 						 * RTS, ATIM.
5433475e505Smillert 						 */
544*d2cfaccaSjsg #define ATW_PLCPHD_PMBL		(1<<15)		/* 0: long preamble, 1: short */
5453475e505Smillert 
546c33247eeSjsg #define	ATW_MMIWADDR_LENLO_MASK		0xff000000	/* tx: written 4th */
547c33247eeSjsg #define	ATW_MMIWADDR_LENHI_MASK		0xff0000	/* tx: written 3rd */
548c33247eeSjsg #define	ATW_MMIWADDR_GAIN_MASK		0xff00	/* tx: written 2nd */
549c33247eeSjsg #define	ATW_MMIWADDR_RATE_MASK		0xff	/* tx: written 1st */
5503475e505Smillert 
551a98accbeSmillert /* was magic 0x100E0C0A */
552a98accbeSmillert #define ATW_MMIWADDR_INTERSIL			  \
553a98accbeSmillert 	(LSHIFT(0x0c, ATW_MMIWADDR_GAIN_MASK)	| \
554a98accbeSmillert 	 LSHIFT(0x0a, ATW_MMIWADDR_RATE_MASK)	| \
555a98accbeSmillert 	 LSHIFT(0x0e, ATW_MMIWADDR_LENHI_MASK)	| \
556a98accbeSmillert 	 LSHIFT(0x10, ATW_MMIWADDR_LENLO_MASK))
5573475e505Smillert 
558a98accbeSmillert /* was magic 0x00009101
559a98accbeSmillert  *
560a98accbeSmillert  * ADMtek sets the AI bit on the ATW_MMIWADDR_GAIN_MASK address to
561a98accbeSmillert  * put the RF3000 into auto-increment mode so that it can write Tx gain,
562a98accbeSmillert  * Tx length (high) and Tx length (low) registers back-to-back.
563a98accbeSmillert  */
564a98accbeSmillert #define ATW_MMIWADDR_RFMD						\
565a98accbeSmillert 	(LSHIFT(RF3000_TWI_AI|RF3000_GAINCTL, ATW_MMIWADDR_GAIN_MASK) | \
566a98accbeSmillert 	 LSHIFT(RF3000_CTL, ATW_MMIWADDR_RATE_MASK))
567a98accbeSmillert 
568c33247eeSjsg #define	ATW_MMIRADDR1_RSVD_MASK		0xff000000
569c33247eeSjsg #define	ATW_MMIRADDR1_PWRLVL_MASK	0xff0000
570c33247eeSjsg #define	ATW_MMIRADDR1_RSSI_MASK		0xff00
571c33247eeSjsg #define	ATW_MMIRADDR1_RXSTAT_MASK	0xff
572a98accbeSmillert 
573a98accbeSmillert /* was magic 0x00007c7e
574a98accbeSmillert  *
575a98accbeSmillert  * TBD document registers for Intersil 3861 baseband
576a98accbeSmillert  */
577a98accbeSmillert #define ATW_MMIRADDR1_INTERSIL	\
578a98accbeSmillert 	(LSHIFT(0x7c, ATW_MMIRADDR1_RSSI_MASK) | \
579a98accbeSmillert 	 LSHIFT(0x7e, ATW_MMIRADDR1_RXSTAT_MASK))
580a98accbeSmillert 
581a98accbeSmillert /* was magic 0x00000301 */
582a98accbeSmillert #define ATW_MMIRADDR1_RFMD	\
583a98accbeSmillert 	(LSHIFT(RF3000_RSSI, ATW_MMIRADDR1_RSSI_MASK) | \
584a98accbeSmillert 	 LSHIFT(RF3000_RXSTAT, ATW_MMIRADDR1_RXSTAT_MASK))
585a98accbeSmillert 
586a98accbeSmillert /* was magic 0x00100000 */
587a98accbeSmillert #define ATW_MMIRADDR2_INTERSIL	\
588a98accbeSmillert 	(LSHIFT(0x0, ATW_MMIRADDR2_ID_MASK) | \
589a98accbeSmillert 	 LSHIFT(0x10, ATW_MMIRADDR2_RXPECNT_MASK))
590a98accbeSmillert 
591a98accbeSmillert /* was magic 0x7e100000 */
592a98accbeSmillert #define ATW_MMIRADDR2_RFMD	\
593a98accbeSmillert 	(LSHIFT(0x7e, ATW_MMIRADDR2_ID_MASK) | \
594a98accbeSmillert 	 LSHIFT(0x10, ATW_MMIRADDR2_RXPECNT_MASK))
595a98accbeSmillert 
596c33247eeSjsg #define	ATW_MMIRADDR2_ID_MASK	0xff000000	/* 1st element ID in WEP table
597a98accbeSmillert 						 * for Probe Response (huh?)
598a98accbeSmillert 						 */
599a98accbeSmillert /* RXPE is re-asserted after RXPECNT * 22MHz. */
600c33247eeSjsg #define	ATW_MMIRADDR2_RXPECNT_MASK	0xff0000
601*d2cfaccaSjsg #define	ATW_MMIRADDR2_PROREXT		(1<<15)		/* Probe Response
602a98accbeSmillert 							 * 11Mb/s length
603a98accbeSmillert 							 * extension.
604a98accbeSmillert 							 */
605c33247eeSjsg #define	ATW_MMIRADDR2_PRORLEN_MASK	0x7fff	/* Probe Response
606a98accbeSmillert 							 * microsecond length
607a98accbeSmillert 							 */
6083475e505Smillert 
609*d2cfaccaSjsg #define ATW_TXBR_ALCUPDATE_MASK	(1<<31)		/* auto-update BBP with ALCSET */
610c33247eeSjsg #define ATW_TXBR_TBCNT_MASK	0x1f0000	/* transmit burst count */
611c33247eeSjsg #define ATW_TXBR_ALCSET_MASK	0xff00	/* TX power level set point */
612c33247eeSjsg #define ATW_TXBR_ALCREF_MASK	0xff	/* TX power level reference point */
6133475e505Smillert 
614*d2cfaccaSjsg #define ATW_ALCSTAT_MCOV_MASK	(1<<27)		/* MPDU count overflow */
615*d2cfaccaSjsg #define ATW_ALCSTAT_ESOV_MASK	(1<<26)		/* error sum overflow */
616c33247eeSjsg #define ATW_ALCSTAT_MCNT_MASK	0x3ff0000	/* MPDU count, unsigned integer */
617c33247eeSjsg #define ATW_ALCSTAT_ERSUM_MASK	0xffff	/* power error sum,
6183475e505Smillert 						 * 2's complement signed integer
6193475e505Smillert 						 */
6203475e505Smillert 
621c33247eeSjsg #define ATW_TOFS2_PWR1UP_MASK	0xf0000000	/* delay of Tx/Rx from PE1,
6223475e505Smillert 						 * Radio, PHYRST change after
6233475e505Smillert 						 * power-up, in 2ms units
6243475e505Smillert 						 */
625c33247eeSjsg #define ATW_TOFS2_PWR0PAPE_MASK	0xf000000	/* delay of PAPE going low
6263475e505Smillert 						 * after internal data
6273475e505Smillert 						 * transmit end, in us
6283475e505Smillert 						 */
629c33247eeSjsg #define ATW_TOFS2_PWR1PAPE_MASK	0xf00000	/* delay of PAPE going high
6303475e505Smillert 						 * after TXPE asserted, in us
6313475e505Smillert 						 */
632c33247eeSjsg #define ATW_TOFS2_PWR0TRSW_MASK	0xf0000	/* delay of TRSW going low
6333475e505Smillert 						 * after internal data transmit
6343475e505Smillert 						 * end, in us
6353475e505Smillert 						 */
636c33247eeSjsg #define ATW_TOFS2_PWR1TRSW_MASK	0xf000	/* delay of TRSW going high
6373475e505Smillert 						 * after TXPE asserted, in us
6383475e505Smillert 						 */
639c33247eeSjsg #define ATW_TOFS2_PWR0PE2_MASK	0xf00	/* delay of PE2 going low
6403475e505Smillert 						 * after internal data transmit
6413475e505Smillert 						 * end, in us
6423475e505Smillert 						 */
643c33247eeSjsg #define ATW_TOFS2_PWR1PE2_MASK	0xf0	/* delay of PE2 going high
6443475e505Smillert 						 * after TXPE asserted, in us
6453475e505Smillert 						 */
646c33247eeSjsg #define ATW_TOFS2_PWR0TXPE_MASK	0xf	/* delay of TXPE going low
6473475e505Smillert 						 * after internal data transmit
6483475e505Smillert 						 * end, in us
6493475e505Smillert 						 */
6503475e505Smillert 
651*d2cfaccaSjsg #define ATW_CMDR_PM		(1<<19)		/* enables power mgmt
6523475e505Smillert 						 * capabilities.
6533475e505Smillert 						 */
654*d2cfaccaSjsg #define ATW_CMDR_APM		(1<<18)		/* APM mode, effective when
6553475e505Smillert 						 * PM = 1.
6563475e505Smillert 						 */
657*d2cfaccaSjsg #define ATW_CMDR_RTE		(1<<4)		/* enable Rx FIFO threshold */
658c33247eeSjsg #define ATW_CMDR_DRT_MASK	0xc	/* drain Rx FIFO threshold */
659f744aeebSmillert /* 32 bytes */
660f744aeebSmillert #define ATW_CMDR_DRT_8DW	LSHIFT(0x0, ATW_CMDR_DRT_MASK)
661f744aeebSmillert /* 64 bytes */
662f744aeebSmillert #define ATW_CMDR_DRT_16DW	LSHIFT(0x1, ATW_CMDR_DRT_MASK)
663f744aeebSmillert /* Store & Forward */
664f744aeebSmillert #define ATW_CMDR_DRT_SF		LSHIFT(0x2, ATW_CMDR_DRT_MASK)
665f744aeebSmillert /* Reserved */
666f744aeebSmillert #define ATW_CMDR_DRT_RSVD	LSHIFT(0x3, ATW_CMDR_DRT_MASK)
667*d2cfaccaSjsg #define ATW_CMDR_SINT_MASK	(1<<1)		/* software interrupt---huh? */
6683475e505Smillert 
6693475e505Smillert /* TBD PCIC */
6703475e505Smillert 
6713475e505Smillert /* TBD PMCSR */
6723475e505Smillert 
6733475e505Smillert 
674c33247eeSjsg #define ATW_PAR0_PAB0_MASK	0xff	/* MAC address byte 0 */
675c33247eeSjsg #define ATW_PAR0_PAB1_MASK	0xff00	/* MAC address byte 1 */
676c33247eeSjsg #define ATW_PAR0_PAB2_MASK	0xff0000	/* MAC address byte 2 */
677c33247eeSjsg #define ATW_PAR0_PAB3_MASK	0xff000000	/* MAC address byte 3 */
6783475e505Smillert 
679c33247eeSjsg #define	ATW_C_PAR1_CTD		0xffff0000	/* Continuous Tx pattern */
680c33247eeSjsg #define ATW_PAR1_PAB5_MASK	0xff00	/* MAC address byte 5 */
681c33247eeSjsg #define ATW_PAR1_PAB4_MASK	0xff	/* MAC address byte 4 */
6823475e505Smillert 
683c33247eeSjsg #define ATW_MAR0_MAB3_MASK	0xff000000	/* multicast table bits 31:24 */
684c33247eeSjsg #define ATW_MAR0_MAB2_MASK	0xff0000	/* multicast table bits 23:16 */
685c33247eeSjsg #define ATW_MAR0_MAB1_MASK	0xff00	/* multicast table bits 15:8 */
686c33247eeSjsg #define ATW_MAR0_MAB0_MASK	0xff	/* multicast table bits 7:0 */
6873475e505Smillert 
688c33247eeSjsg #define ATW_MAR1_MAB7_MASK	0xff000000	/* multicast table bits 63:56 */
689c33247eeSjsg #define ATW_MAR1_MAB6_MASK	0xff0000	/* multicast table bits 55:48 */
690c33247eeSjsg #define ATW_MAR1_MAB5_MASK	0xff00	/* multicast table bits 47:40 */
691c33247eeSjsg #define ATW_MAR1_MAB4_MASK	0xff	/* multicast table bits 39:32 */
6923475e505Smillert 
6933475e505Smillert /* ATIM destination address */
694c33247eeSjsg #define ATW_ATIMDA0_ATIMB3_MASK	0xff000000
695c33247eeSjsg #define ATW_ATIMDA0_ATIMB2_MASK	0xff0000
696c33247eeSjsg #define ATW_ATIMDA0_ATIMB1_MASK	0xff00
697c33247eeSjsg #define ATW_ATIMDA0_ATIMB0_MASK	0xff
6983475e505Smillert 
6993475e505Smillert /* ATIM destination address, BSSID */
700c33247eeSjsg #define ATW_ABDA1_BSSIDB5_MASK	0xff000000
701c33247eeSjsg #define ATW_ABDA1_BSSIDB4_MASK	0xff0000
702c33247eeSjsg #define ATW_ABDA1_ATIMB5_MASK	0xff00
703c33247eeSjsg #define ATW_ABDA1_ATIMB4_MASK	0xff
7043475e505Smillert 
7053475e505Smillert /* BSSID */
706c33247eeSjsg #define ATW_BSSID0_BSSIDB3_MASK	0xff000000
707c33247eeSjsg #define ATW_BSSID0_BSSIDB2_MASK	0xff0000
708c33247eeSjsg #define ATW_BSSID0_BSSIDB1_MASK	0xff00
709c33247eeSjsg #define ATW_BSSID0_BSSIDB0_MASK	0xff
7103475e505Smillert 
711c33247eeSjsg #define ATW_TXLMT_MTMLT_MASK	0xffff0000	/* max TX MSDU lifetime in TU */
712c33247eeSjsg #define ATW_TXLMT_SRTYLIM_MASK	0xff	/* short retry limit */
7133475e505Smillert 
714c33247eeSjsg #define ATW_MIBCNT_FFCNT_MASK	0xff000000	/* FCS failure count */
715c33247eeSjsg #define ATW_MIBCNT_AFCNT_MASK	0xff0000	/* ACK failure count */
716c33247eeSjsg #define ATW_MIBCNT_RSCNT_MASK	0xff00	/* RTS success count */
717c33247eeSjsg #define ATW_MIBCNT_RFCNT_MASK	0xff	/* RTS failure count */
7183475e505Smillert 
719c33247eeSjsg #define ATW_BCNT_PLCPH_MASK	0xff0000	/* 11M PLCP length (us) */
720c33247eeSjsg #define ATW_BCNT_PLCPL_MASK	0xff00	/* 5.5M PLCP length (us) */
721c33247eeSjsg #define ATW_BCNT_BCNT_MASK	0xff	/* byte count of beacon frame */
7223475e505Smillert 
7233475e505Smillert /* For ADM8211C/CR */
7243475e505Smillert /* ATW_C_TSC_TIMTABSEL = 1 */
725*d2cfaccaSjsg #define ATW_C_BCNT_EXTEN1	(1<<31)		/* 11M beacon len. extension */
726c33247eeSjsg #define ATW_C_BCNT_BEANLEN1	0x7fff0000	/* beacon length in us */
7273475e505Smillert /* ATW_C_TSC_TIMTABSEL = 0 */
728*d2cfaccaSjsg #define ATW_C_BCNT_EXTEN0	(1<<15)		/* 11M beacon len. extension */
7293475e505Smillert #define ATW_C_BCNT_BEANLEN0	BIT(14,0)	/* beacon length in us */
7303475e505Smillert 
731c33247eeSjsg #define ATW_C_TSC_TIMOFS	0xff000000	/* I think this is the
7323475e505Smillert 						 * SRAM offset for the TIM
7333475e505Smillert 						 */
734c33247eeSjsg #define ATW_C_TSC_TIMLEN	0x3ff000	/* length of TIM */
735*d2cfaccaSjsg #define ATW_C_TSC_TIMTABSEL	(1<<4)		/* select TIM table 0 or 1 */
736c33247eeSjsg #define ATW_TSC_TSC_MASK	0xf	/* TSFT countdown value, 0
7373475e505Smillert 						 * disables
7383475e505Smillert 						 */
7393475e505Smillert 
740*d2cfaccaSjsg #define ATW_SYNRF_SELSYN	(1<<31)	/* 0: MAC controls SYN IF pins,
7413475e505Smillert 					 * 1: ATW_SYNRF controls SYN IF pins.
7423475e505Smillert 					 */
743*d2cfaccaSjsg #define ATW_SYNRF_SELRF		(1<<30)	/* 0: MAC controls RF IF pins,
7443475e505Smillert 					 * 1: ATW_SYNRF controls RF IF pins.
7453475e505Smillert 					 */
746*d2cfaccaSjsg #define ATW_SYNRF_LERF		(1<<29)	/* if SELSYN = 1, direct control of
7473475e505Smillert 					 * LERF# pin
7483475e505Smillert 					 */
749*d2cfaccaSjsg #define ATW_SYNRF_LEIF		(1<<28)	/* if SELSYN = 1, direct control of
7503475e505Smillert 					 * LEIF# pin
7513475e505Smillert 					 */
752*d2cfaccaSjsg #define ATW_SYNRF_SYNCLK	(1<<27)	/* if SELSYN = 1, direct control of
7533475e505Smillert 					 * SYNCLK pin
7543475e505Smillert 					 */
755*d2cfaccaSjsg #define ATW_SYNRF_SYNDATA	(1<<26)	/* if SELSYN = 1, direct control of
7563475e505Smillert 					 * SYNDATA pin
7573475e505Smillert 					 */
758*d2cfaccaSjsg #define ATW_SYNRF_PE1		(1<<25)	/* if SELRF = 1, direct control of
7593475e505Smillert 					 * PE1 pin
7603475e505Smillert 					 */
761*d2cfaccaSjsg #define ATW_SYNRF_PE2		(1<<24)	/* if SELRF = 1, direct control of
7623475e505Smillert 					 * PE2 pin
7633475e505Smillert 					 */
764*d2cfaccaSjsg #define ATW_SYNRF_PAPE		(1<<23)	/* if SELRF = 1, direct control of
7653475e505Smillert 					 * PAPE pin
7663475e505Smillert 					 */
767*d2cfaccaSjsg #define ATW_C_SYNRF_TRSW	(1<<22)	/* if SELRF = 1, direct control of
7683475e505Smillert 					 * TRSW pin
7693475e505Smillert 					 */
770*d2cfaccaSjsg #define ATW_C_SYNRF_TRSWN	(1<<21)	/* if SELRF = 1, direct control of
7713475e505Smillert 					 * TRSWn pin
7723475e505Smillert 					 */
773*d2cfaccaSjsg #define ATW_SYNRF_INTERSIL_EN	(1<<20)	/* if SELRF = 1, enables
7743475e505Smillert 					 * some signal used by the
7753475e505Smillert 					 * Intersil RF front-end?
7763475e505Smillert 					 * Undocumented.
7773475e505Smillert 					 */
778*d2cfaccaSjsg #define ATW_SYNRF_PHYRST	(1<<18)	/* if SELRF = 1, direct control of
7793475e505Smillert 					 * PHYRST# pin
7803475e505Smillert 					 */
7813475e505Smillert /* 1: force TXPE = RXPE = 1 if ATW_CMDR[27] = 0. */
7823475e505Smillert #define ATW_C_SYNRF_RF2958PD	ATW_SYNRF_PHYRST
7833475e505Smillert 
784c33247eeSjsg #define ATW_BPLI_BP_MASK	0xffff0000	/* beacon interval in TU */
785c33247eeSjsg #define ATW_BPLI_LI_MASK	0xffff	/* STA listen interval in
7863475e505Smillert 						 * beacon intervals
7873475e505Smillert 						 */
7883475e505Smillert 
789c33247eeSjsg #define ATW_C_CAP0_TIMLEN1	0xff000000	/* TIM table 1 len in bytes
7903475e505Smillert 						 * including TIM ID (XXX huh?)
7913475e505Smillert 						 */
792c33247eeSjsg #define ATW_C_CAP0_TIMLEN0	0xff0000	/* TIM table 0 len in bytes,
7933475e505Smillert 						 * including TIM ID (XXX huh?)
7943475e505Smillert 						 */
795c33247eeSjsg #define	ATW_C_CAP0_CWMAX	0xf00	/* 1 <= CWMAX <= 5 fixes CW?
7963475e505Smillert 						 * 5 < CWMAX <= 9 sets max?
7973475e505Smillert 						 * 10?
7983475e505Smillert 						 * default 0
7993475e505Smillert 						 */
800*d2cfaccaSjsg #define ATW_CAP0_RCVDTIM	(1<<4)		/* receive every DTIM */
801c33247eeSjsg #define ATW_CAP0_CHN_MASK	0xf	/* current DSSS channel */
8023475e505Smillert 
803c33247eeSjsg #define ATW_CAP1_CAPI_MASK	0xffff0000	/* capability information */
804c33247eeSjsg #define ATW_CAP1_ATIMW_MASK	0xffff	/* ATIM window in TU */
8053475e505Smillert 
806*d2cfaccaSjsg #define ATW_RMD_ATIMST		(1<<31)		/* ATIM frame TX status */
807*d2cfaccaSjsg #define ATW_RMD_CFP		(1<<30)		/* CFP indicator */
808c33247eeSjsg #define ATW_RMD_PCNT		0xfff0000	/* idle time between
809f744aeebSmillert 						 * awake/ps mode, in seconds
8103475e505Smillert 						 */
811c33247eeSjsg #define ATW_RMD_RMRD_MASK	0xffff	/* max RX reception duration
8123475e505Smillert 						 * in us
8133475e505Smillert 						 */
8143475e505Smillert 
815c33247eeSjsg #define ATW_CFPP_CFPP		0xff000000	/* CFP unit DTIM */
816c33247eeSjsg #define ATW_CFPP_CFPMD		0xffff00	/* CFP max duration in TU */
817c33247eeSjsg #define ATW_CFPP_DTIMP		0xff	/* DTIM period in beacon
8183475e505Smillert 						 * intervals
8193475e505Smillert 						 */
820c33247eeSjsg #define ATW_TOFS0_USCNT_MASK	0x3f000000	/* number of system clocks
8213475e505Smillert 						 * in 1 microsecond.
8223475e505Smillert 						 * Depends PCI bus speed?
8233475e505Smillert 						 */
824c33247eeSjsg #define ATW_C_TOFS0_TUCNT_MASK	0x7c00	/* PIFS (microseconds) */
825c33247eeSjsg #define ATW_TOFS0_TUCNT_MASK	0x3ff	/* TU counter in microseconds */
8263475e505Smillert 
8273475e505Smillert /* TBD TOFS1 */
828c33247eeSjsg #define ATW_TOFS1_TSFTOFSR_MASK	0xff000000	/* RX TSFT offset in
8293475e505Smillert 						 * microseconds: RF+BBP
8303475e505Smillert 						 * latency
8313475e505Smillert 						 */
832c33247eeSjsg #define ATW_TOFS1_TBTTPRE_MASK	0xffff00	/* prediction time, (next
8333475e505Smillert 						 * Nth TBTT - TBTTOFS) in
8343475e505Smillert 						 * microseconds (huh?). To
8353475e505Smillert 						 * match TSFT[25:10] (huh?).
8363475e505Smillert 						 */
837c33247eeSjsg #define	ATW_TBTTPRE_MASK	0x3fffc00
838c33247eeSjsg #define ATW_TOFS1_TBTTOFS_MASK	0xff	/* wake-up time offset before
8393475e505Smillert 						 * TBTT in TU
8403475e505Smillert 						 */
841c33247eeSjsg #define ATW_IFST_SLOT_MASK	0xf800000	/* SLOT time in us */
842c33247eeSjsg #define ATW_IFST_SIFS_MASK	0x7f8000	/* SIFS time in us */
843c33247eeSjsg #define ATW_IFST_DIFS_MASK	0x7e00	/* DIFS time in us */
844c33247eeSjsg #define ATW_IFST_EIFS_MASK	0x1ff	/* EIFS time in us */
8453475e505Smillert 
846c33247eeSjsg #define ATW_RSPT_MART_MASK	0xffff0000	/* max response time in us */
847c33247eeSjsg #define ATW_RSPT_MIRT_MASK	0xff00	/* min response time in us */
848c33247eeSjsg #define ATW_RSPT_TSFTOFST_MASK	0xff	/* TX TSFT offset in us */
8493475e505Smillert 
850*d2cfaccaSjsg #define ATW_WEPCTL_WEPENABLE	(1<<31)		/* enable WEP engine */
851*d2cfaccaSjsg #define ATW_WEPCTL_AUTOSWITCH	(1<<30)		/* auto-switch enable (huh?) */
852*d2cfaccaSjsg #define ATW_WEPCTL_CURTBL	(1<<29)		/* current table in use */
853*d2cfaccaSjsg #define ATW_WEPCTL_WR		(1<<28)		/* */
854*d2cfaccaSjsg #define ATW_WEPCTL_RD		(1<<27)		/* */
855*d2cfaccaSjsg #define ATW_WEPCTL_WEPRXBYP	(1<<25)		/* bypass WEP on RX */
856*d2cfaccaSjsg #define ATW_WEPCTL_SHKEY	(1<<24)		/* 1: pass to host if tbl
8573475e505Smillert 						 * lookup fails, 0: use
8583475e505Smillert 						 * shared-key
8593475e505Smillert 						 */
860*d2cfaccaSjsg #define ATW_WEPCTL_UNKNOWN0	(1<<23)		/* has something to do with
8613475e505Smillert 						 * revision 0x20. Possibly
8623475e505Smillert 						 * selects a different WEP
8633475e505Smillert 						 * table.
8643475e505Smillert 						 */
865c33247eeSjsg #define ATW_WEPCTL_TBLADD_MASK	0x1ff	/* add to table */
8663475e505Smillert 
8673475e505Smillert /* set these bits in the second byte of a SRAM shared key record to affect
8683475e505Smillert  * the use and interpretation of the key in the record.
8693475e505Smillert  */
870*d2cfaccaSjsg #define ATW_WEP_ENABLED	(1<<7)
871*d2cfaccaSjsg #define ATW_WEP_104BIT	(1<<6)
8723475e505Smillert 
873c33247eeSjsg #define ATW_WESK_DATA_MASK	0xffff	/* data */
874c33247eeSjsg #define ATW_WEPCNT_WIEC_MASK	0xffff	/* WEP ICV error count */
8753475e505Smillert 
876*d2cfaccaSjsg #define ATW_MACTEST_FORCE_IV		(1<<23)
877*d2cfaccaSjsg #define ATW_MACTEST_FORCE_KEYID		(1<<22)
878c33247eeSjsg #define ATW_MACTEST_KEYID_MASK		0x300000
879*d2cfaccaSjsg #define ATW_MACTEST_MMI_USETXCLK	(1<<11)
8803475e505Smillert 
8813475e505Smillert /* Function Event/Status registers */
8823475e505Smillert 
883*d2cfaccaSjsg #define ATW_FER_INTR		(1<<15)	/* interrupt: set regardless of mask */
884*d2cfaccaSjsg #define ATW_FER_GWAKE		(1<<4)	/* general wake-up: set regardless of mask */
8853475e505Smillert 
886*d2cfaccaSjsg #define ATW_FEMR_INTR_EN	(1<<15)	/* enable INTA# */
887*d2cfaccaSjsg #define ATW_FEMR_WAKEUP_EN	(1<<14)	/* enable wake-up */
888*d2cfaccaSjsg #define ATW_FEMR_GWAKE_EN	(1<<4)	/* enable general wake-up */
8893475e505Smillert 
890*d2cfaccaSjsg #define ATW_FPSR_INTR_STATUS	(1<<15)	/* interrupt status */
891*d2cfaccaSjsg #define ATW_FPSR_WAKEUP_STATUS	(1<<4)	/* CSTSCHG state */
892*d2cfaccaSjsg #define ATW_FFER_INTA_FORCE	(1<<15)	/* activate INTA (if not masked) */
893*d2cfaccaSjsg #define ATW_FFER_GWAKE_FORCE	(1<<4)	/* activate CSTSCHG (if not masked) */
8943475e505Smillert 
8953475e505Smillert /* Serial EEPROM offsets */
8963475e505Smillert #define ATW_SR_CLASS_CODE	(0x00/2)
8973475e505Smillert #define ATW_SR_FORMAT_VERSION	(0x02/2)
898c33247eeSjsg #define		ATW_SR_MAJOR_MASK	0xff
899c33247eeSjsg #define		ATW_SR_MINOR_MASK	0xff00
9003475e505Smillert #define ATW_SR_MAC00		(0x08/2)	/* CSR21 */
9013475e505Smillert #define ATW_SR_MAC01		(0x0A/2)	/* CSR21/22 */
9023475e505Smillert #define ATW_SR_MAC10		(0x0C/2)	/* CSR22 */
9033475e505Smillert #define ATW_SR_CSR20		(0x16/2)
904c33247eeSjsg #define		ATW_SR_ANT_MASK		0x1c00
905c33247eeSjsg #define		ATW_SR_PWRSCALE_MASK	0x300
906c33247eeSjsg #define		ATW_SR_CLKSAVE_MASK	0xc0
907c33247eeSjsg #define		ATW_SR_RFTYPE_MASK	0x38
908c33247eeSjsg #define		ATW_SR_BBPTYPE_MASK	0x7
9093475e505Smillert #define ATW_SR_CR28_CR03	(0x18/2)
910c33247eeSjsg #define		ATW_SR_CR28_MASK	0xff00
911c33247eeSjsg #define		ATW_SR_CR03_MASK	0xff
9123475e505Smillert #define ATW_SR_CTRY_CR29	(0x1A/2)
913c33247eeSjsg #define		ATW_SR_CTRY_MASK	0xff00	/* country code */
9143475e505Smillert #define			COUNTRY_FCC	0
9153475e505Smillert #define			COUNTRY_IC	1
9163475e505Smillert #define			COUNTRY_ETSI	2
9173475e505Smillert #define			COUNTRY_SPAIN	3
9183475e505Smillert #define			COUNTRY_FRANCE	4
9193475e505Smillert #define			COUNTRY_MMK	5
9203475e505Smillert #define			COUNTRY_MMK2	6
921c33247eeSjsg #define		ATW_SR_CR29_MASK	0xff
9223475e505Smillert #define ATW_SR_PCI_DEVICE	(0x20/2)	/* CR0 */
9233475e505Smillert #define ATW_SR_PCI_VENDOR	(0x22/2)	/* CR0 */
9243475e505Smillert #define ATW_SR_SUB_DEVICE	(0x24/2)	/* CR11 */
9253475e505Smillert #define ATW_SR_SUB_VENDOR	(0x26/2)	/* CR11 */
9263475e505Smillert #define ATW_SR_CR15		(0x28/2)
9273475e505Smillert #define ATW_SR_LOCISPTR		(0x2A/2)	/* CR10 */
9283475e505Smillert #define ATW_SR_HICISPTR		(0x2C/2)	/* CR10 */
9293475e505Smillert #define ATW_SR_CSR18		(0x2E/2)
9303475e505Smillert #define ATW_SR_D0_D1_PWR	(0x40/2)	/* CR49 */
9313475e505Smillert #define ATW_SR_D2_D3_PWR	(0x42/2)	/* CR49 */
9323475e505Smillert #define ATW_SR_CIS_WORDS	(0x52/2)
9333475e505Smillert /* CR17 of RFMD RF3000 BBP: returns TWO channels */
9343475e505Smillert #define ATW_SR_TXPOWER(chnl)		(0x54/2 + ((chnl) - 1)/2)
9353475e505Smillert /* CR20 of RFMD RF3000 BBP: returns TWO channels */
9363475e505Smillert #define ATW_SR_LPF_CUTOFF(chnl)		(0x62/2 + ((chnl) - 1)/2)
9373475e505Smillert /* CR21 of RFMD RF3000 BBP: returns TWO channels */
9383475e505Smillert #define ATW_SR_LNA_GS_THRESH(chnl)	(0x70/2 + ((chnl) - 1)/2)
9393475e505Smillert #define ATW_SR_CHECKSUM		(0x7e/2)	/* for data 0x00-0x7d */
9403475e505Smillert #define ATW_SR_CIS		(0x80/2)	/* Cardbus CIS */
9413475e505Smillert 
9423475e505Smillert /* Tx descriptor */
9433475e505Smillert struct atw_txdesc {
9443475e505Smillert 	u_int32_t	at_ctl;
9453475e505Smillert #define at_stat at_ctl
9463475e505Smillert 	u_int32_t	at_flags;
9473475e505Smillert 	u_int32_t	at_buf1;
9483475e505Smillert 	u_int32_t	at_buf2;
9493475e505Smillert };
9503475e505Smillert 
951*d2cfaccaSjsg #define ATW_TXCTL_OWN		(1<<31)		/* 1: ready to transmit */
952*d2cfaccaSjsg #define ATW_TXCTL_DONE		(1<<30)		/* 0: not processed */
953c33247eeSjsg #define ATW_TXCTL_TXDR_MASK	0xff00000	/* TX data rate (?) */
954c33247eeSjsg #define ATW_TXCTL_TL_MASK	0xfffff	/* retry limit, 0 - 255 */
9553475e505Smillert 
9563475e505Smillert #define ATW_TXSTAT_OWN		ATW_TXCTL_OWN	/* 0: not for transmission */
9573475e505Smillert #define ATW_TXSTAT_DONE		ATW_TXCTL_DONE	/* 1: been processed */
958*d2cfaccaSjsg #define ATW_TXSTAT_ES		(1<<29)		/* 0: TX successful */
959*d2cfaccaSjsg #define ATW_TXSTAT_TLT		(1<<28)		/* TX lifetime expired */
960*d2cfaccaSjsg #define ATW_TXSTAT_TRT		(1<<27)		/* TX retry limit expired */
961*d2cfaccaSjsg #define ATW_TXSTAT_TUF		(1<<26)		/* TX under-run error */
962*d2cfaccaSjsg #define ATW_TXSTAT_TRO		(1<<25)		/* TX over-run error */
963*d2cfaccaSjsg #define ATW_TXSTAT_SOFBR	(1<<24)		/* packet size != buffer size
9643475e505Smillert 						 * (?)
9653475e505Smillert 						 */
966c33247eeSjsg #define ATW_TXSTAT_ARC_MASK	0xfff	/* accumulated retry count */
9673475e505Smillert 
968*d2cfaccaSjsg #define ATW_TXFLAG_IC		(1<<31)		/* interrupt on completion */
969*d2cfaccaSjsg #define ATW_TXFLAG_LS		(1<<30)		/* packet's last descriptor */
970*d2cfaccaSjsg #define ATW_TXFLAG_FS		(1<<29)		/* packet's first descriptor */
971*d2cfaccaSjsg #define ATW_TXFLAG_TER		(1<<25)		/* end of ring */
972*d2cfaccaSjsg #define ATW_TXFLAG_TCH		(1<<24)		/* at_buf2 is 2nd chain */
973c33247eeSjsg #define ATW_TXFLAG_TBS2_MASK	0xfff000	/* at_buf2 byte count */
974c33247eeSjsg #define ATW_TXFLAG_TBS1_MASK	0xfff	/* at_buf1 byte count */
9753475e505Smillert 
9763475e505Smillert /* Rx descriptor */
9773475e505Smillert struct atw_rxdesc {
9783475e505Smillert     u_int32_t	ar_stat;
9793475e505Smillert     u_int32_t	ar_ctl;
9803475e505Smillert     u_int32_t	ar_buf1;
9813475e505Smillert     u_int32_t	ar_buf2;
9823475e505Smillert };
9833475e505Smillert 
9843475e505Smillert #define	ar_rssi	ar_ctl
9853475e505Smillert 
986*d2cfaccaSjsg #define ATW_RXCTL_RER		(1<<25)		/* end of ring */
987*d2cfaccaSjsg #define ATW_RXCTL_RCH		(1<<24)		/* ar_buf2 is 2nd chain */
988c33247eeSjsg #define ATW_RXCTL_RBS2_MASK	0xfff000	/* ar_buf2 byte count */
989c33247eeSjsg #define ATW_RXCTL_RBS1_MASK	0xfff	/* ar_buf1 byte count */
9903475e505Smillert 
991*d2cfaccaSjsg #define ATW_RXSTAT_OWN		(1<<31)		/* 1: NIC may fill descriptor */
992*d2cfaccaSjsg #define ATW_RXSTAT_ES		(1<<30)		/* error summary, 0 on
9933475e505Smillert 						 * success
9943475e505Smillert 						 */
995*d2cfaccaSjsg #define ATW_RXSTAT_SQL		(1<<29)		/* has signal quality (?) */
996*d2cfaccaSjsg #define ATW_RXSTAT_DE		(1<<28)		/* descriptor error---packet is
9973475e505Smillert 						 * truncated. last descriptor
9983475e505Smillert 						 * only
9993475e505Smillert 						 */
1000*d2cfaccaSjsg #define ATW_RXSTAT_FS		(1<<27)		/* packet's first descriptor */
1001*d2cfaccaSjsg #define ATW_RXSTAT_LS		(1<<26)		/* packet's last descriptor */
1002*d2cfaccaSjsg #define ATW_RXSTAT_PCF		(1<<25)		/* received during CFP */
1003*d2cfaccaSjsg #define ATW_RXSTAT_SFDE		(1<<24)		/* PLCP SFD error */
1004*d2cfaccaSjsg #define ATW_RXSTAT_SIGE		(1<<23)		/* PLCP signal error */
1005*d2cfaccaSjsg #define ATW_RXSTAT_CRC16E	(1<<22)		/* PLCP CRC16 error */
1006*d2cfaccaSjsg #define ATW_RXSTAT_RXTOE	(1<<21)		/* RX time-out, last descriptor
10073475e505Smillert 						 * only.
10083475e505Smillert 						 */
1009*d2cfaccaSjsg #define ATW_RXSTAT_CRC32E	(1<<20)		/* CRC32 error */
1010*d2cfaccaSjsg #define ATW_RXSTAT_ICVE		(1<<19)		/* WEP ICV error */
1011*d2cfaccaSjsg #define ATW_RXSTAT_DA1		(1<<17)		/* DA bit 1, admin'd address */
1012*d2cfaccaSjsg #define ATW_RXSTAT_DA0		(1<<16)		/* DA bit 0, group address */
1013c33247eeSjsg #define ATW_RXSTAT_RXDR_MASK	0xf000	/* RX data rate */
1014c33247eeSjsg #define ATW_RXSTAT_FL_MASK	0xfff	/* RX frame length, last
10153475e505Smillert 						 * descriptor only
10163475e505Smillert 						 */
10173475e505Smillert 
10183475e505Smillert /* Static RAM (contains WEP keys, beacon content). Addresses and size
10193475e505Smillert  * are in 16-bit words.
10203475e505Smillert  */
10213475e505Smillert #define ATW_SRAM_ADDR_INDIVL_KEY	0x0
10223475e505Smillert #define ATW_SRAM_ADDR_SHARED_KEY	(0x160 * 2)
10233475e505Smillert #define ATW_SRAM_ADDR_SSID	(0x180 * 2)
10243475e505Smillert #define ATW_SRAM_ADDR_SUPRATES	(0x191 * 2)
1025a98accbeSmillert #define ATW_SRAM_MAXSIZE	(0x200 * 2)
1026a98accbeSmillert #define ATW_SRAM_A_SIZE		ATW_SRAM_MAXSIZE
1027a98accbeSmillert #define ATW_SRAM_B_SIZE		(0x1c0 * 2)
10283475e505Smillert 
1029