xref: /netbsd-src/sys/dev/ic/rt2661reg.h (revision 1de1c389bf145f97d6c3cd1cbf4a9950d901f95f)
1*1de1c389Sscw /*	$Id: rt2661reg.h,v 1.3 2008/04/29 22:21:45 scw Exp $	*/
276c61618Srpaulo /*	$OpenBSD: rt2661reg.h,v 1.5 2006/01/14 12:43:27 damien Exp $	*/
376c61618Srpaulo 
476c61618Srpaulo /*-
576c61618Srpaulo  * Copyright (c) 2006
676c61618Srpaulo  *	Damien Bergamini <damien.bergamini@free.fr>
776c61618Srpaulo  *
876c61618Srpaulo  * Permission to use, copy, modify, and distribute this software for any
976c61618Srpaulo  * purpose with or without fee is hereby granted, provided that the above
1076c61618Srpaulo  * copyright notice and this permission notice appear in all copies.
1176c61618Srpaulo  *
1276c61618Srpaulo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1376c61618Srpaulo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1476c61618Srpaulo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1576c61618Srpaulo  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1676c61618Srpaulo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1776c61618Srpaulo  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1876c61618Srpaulo  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1976c61618Srpaulo  */
2076c61618Srpaulo 
2176c61618Srpaulo #define RT2661_TX_RING_COUNT	32
2276c61618Srpaulo #define RT2661_MGT_RING_COUNT	32
2376c61618Srpaulo #define RT2661_RX_RING_COUNT	64
2476c61618Srpaulo 
2576c61618Srpaulo #define RT2661_TX_DESC_SIZE	(sizeof (struct rt2661_tx_desc))
2676c61618Srpaulo #define RT2661_TX_DESC_WSIZE	(RT2661_TX_DESC_SIZE / 4)
2776c61618Srpaulo #define RT2661_RX_DESC_SIZE	(sizeof (struct rt2661_rx_desc))
2876c61618Srpaulo #define RT2661_RX_DESC_WSIZE	(RT2661_RX_DESC_SIZE / 4)
2976c61618Srpaulo 
3076c61618Srpaulo #define RT2661_MAX_SCATTER	5
3176c61618Srpaulo 
3276c61618Srpaulo /*
3376c61618Srpaulo  * Control and status registers.
3476c61618Srpaulo  */
3576c61618Srpaulo #define RT2661_HOST_CMD_CSR		0x0008
3676c61618Srpaulo #define RT2661_MCU_CNTL_CSR		0x000c
3776c61618Srpaulo #define RT2661_SOFT_RESET_CSR		0x0010
3876c61618Srpaulo #define RT2661_MCU_INT_SOURCE_CSR	0x0014
3976c61618Srpaulo #define RT2661_MCU_INT_MASK_CSR		0x0018
4076c61618Srpaulo #define RT2661_PCI_USEC_CSR		0x001c
4176c61618Srpaulo #define RT2661_H2M_MAILBOX_CSR		0x2100
4276c61618Srpaulo #define RT2661_M2H_CMD_DONE_CSR		0x2104
4376c61618Srpaulo #define RT2661_HW_BEACON_BASE0		0x2c00
4476c61618Srpaulo #define RT2661_MAC_CSR0			0x3000
4576c61618Srpaulo #define RT2661_MAC_CSR1			0x3004
4676c61618Srpaulo #define RT2661_MAC_CSR2			0x3008
4776c61618Srpaulo #define RT2661_MAC_CSR3			0x300c
4876c61618Srpaulo #define RT2661_MAC_CSR4			0x3010
4976c61618Srpaulo #define RT2661_MAC_CSR5			0x3014
5076c61618Srpaulo #define RT2661_MAC_CSR6			0x3018
5176c61618Srpaulo #define RT2661_MAC_CSR7			0x301c
5276c61618Srpaulo #define RT2661_MAC_CSR8			0x3020
5376c61618Srpaulo #define RT2661_MAC_CSR9			0x3024
5476c61618Srpaulo #define RT2661_MAC_CSR10		0x3028
5576c61618Srpaulo #define RT2661_MAC_CSR11		0x302c
5676c61618Srpaulo #define RT2661_MAC_CSR12		0x3030
5776c61618Srpaulo #define RT2661_MAC_CSR13		0x3034
5876c61618Srpaulo #define RT2661_MAC_CSR14		0x3038
5976c61618Srpaulo #define RT2661_MAC_CSR15		0x303c
6076c61618Srpaulo #define RT2661_TXRX_CSR0		0x3040
6176c61618Srpaulo #define RT2661_TXRX_CSR1		0x3044
6276c61618Srpaulo #define RT2661_TXRX_CSR2		0x3048
6376c61618Srpaulo #define RT2661_TXRX_CSR3		0x304c
6476c61618Srpaulo #define RT2661_TXRX_CSR4		0x3050
6576c61618Srpaulo #define RT2661_TXRX_CSR5		0x3054
6676c61618Srpaulo #define RT2661_TXRX_CSR6		0x3058
6776c61618Srpaulo #define RT2661_TXRX_CSR7		0x305c
6876c61618Srpaulo #define RT2661_TXRX_CSR8		0x3060
6976c61618Srpaulo #define RT2661_TXRX_CSR9		0x3064
7076c61618Srpaulo #define RT2661_TXRX_CSR10		0x3068
7176c61618Srpaulo #define RT2661_TXRX_CSR11		0x306c
7276c61618Srpaulo #define RT2661_TXRX_CSR12		0x3070
7376c61618Srpaulo #define RT2661_TXRX_CSR13		0x3074
7476c61618Srpaulo #define RT2661_TXRX_CSR14		0x3078
7576c61618Srpaulo #define RT2661_TXRX_CSR15		0x307c
7676c61618Srpaulo #define RT2661_PHY_CSR0			0x3080
7776c61618Srpaulo #define RT2661_PHY_CSR1			0x3084
7876c61618Srpaulo #define RT2661_PHY_CSR2			0x3088
7976c61618Srpaulo #define RT2661_PHY_CSR3			0x308c
8076c61618Srpaulo #define RT2661_PHY_CSR4			0x3090
8176c61618Srpaulo #define RT2661_PHY_CSR5			0x3094
8276c61618Srpaulo #define RT2661_PHY_CSR6			0x3098
8376c61618Srpaulo #define RT2661_PHY_CSR7			0x309c
8476c61618Srpaulo #define RT2661_SEC_CSR0			0x30a0
8576c61618Srpaulo #define RT2661_SEC_CSR1			0x30a4
8676c61618Srpaulo #define RT2661_SEC_CSR2			0x30a8
8776c61618Srpaulo #define RT2661_SEC_CSR3			0x30ac
8876c61618Srpaulo #define RT2661_SEC_CSR4			0x30b0
8976c61618Srpaulo #define RT2661_SEC_CSR5			0x30b4
9076c61618Srpaulo #define RT2661_STA_CSR0			0x30c0
9176c61618Srpaulo #define RT2661_STA_CSR1			0x30c4
9276c61618Srpaulo #define RT2661_STA_CSR2			0x30c8
9376c61618Srpaulo #define RT2661_STA_CSR3			0x30cc
9476c61618Srpaulo #define RT2661_STA_CSR4			0x30d0
9576c61618Srpaulo #define RT2661_AC0_BASE_CSR		0x3400
9676c61618Srpaulo #define RT2661_AC1_BASE_CSR		0x3404
9776c61618Srpaulo #define RT2661_AC2_BASE_CSR		0x3408
9876c61618Srpaulo #define RT2661_AC3_BASE_CSR		0x340c
9976c61618Srpaulo #define RT2661_MGT_BASE_CSR		0x3410
10076c61618Srpaulo #define RT2661_TX_RING_CSR0		0x3418
10176c61618Srpaulo #define RT2661_TX_RING_CSR1		0x341c
10276c61618Srpaulo #define RT2661_AIFSN_CSR		0x3420
10376c61618Srpaulo #define RT2661_CWMIN_CSR		0x3424
10476c61618Srpaulo #define RT2661_CWMAX_CSR		0x3428
10576c61618Srpaulo #define RT2661_TX_DMA_DST_CSR		0x342c
10676c61618Srpaulo #define RT2661_TX_CNTL_CSR		0x3430
10776c61618Srpaulo #define RT2661_LOAD_TX_RING_CSR		0x3434
10876c61618Srpaulo #define RT2661_RX_BASE_CSR		0x3450
10976c61618Srpaulo #define RT2661_RX_RING_CSR		0x3454
11076c61618Srpaulo #define RT2661_RX_CNTL_CSR		0x3458
11176c61618Srpaulo #define RT2661_PCI_CFG_CSR		0x3460
11276c61618Srpaulo #define RT2661_INT_SOURCE_CSR		0x3468
11376c61618Srpaulo #define RT2661_INT_MASK_CSR		0x346c
11476c61618Srpaulo #define RT2661_E2PROM_CSR		0x3470
11576c61618Srpaulo #define RT2661_AC_TXOP_CSR0		0x3474
11676c61618Srpaulo #define RT2661_AC_TXOP_CSR1		0x3478
11776c61618Srpaulo #define RT2661_TEST_MODE_CSR		0x3484
11876c61618Srpaulo #define RT2661_IO_CNTL_CSR		0x3498
11976c61618Srpaulo #define RT2661_MCU_CODE_BASE		0x4000
12076c61618Srpaulo 
12176c61618Srpaulo 
12276c61618Srpaulo /* possible flags for register HOST_CMD_CSR */
12376c61618Srpaulo #define RT2661_KICK_CMD		(1 << 7)
12476c61618Srpaulo /* Host to MCU (8051) command identifiers */
12576c61618Srpaulo #define RT2661_MCU_CMD_SLEEP	0x30
12676c61618Srpaulo #define RT2661_MCU_CMD_WAKEUP	0x31
12776c61618Srpaulo #define RT2661_MCU_SET_LED	0x50
12876c61618Srpaulo #define RT2661_MCU_SET_RSSI_LED	0x52
12976c61618Srpaulo 
13076c61618Srpaulo /* possible flags for register MCU_CNTL_CSR */
13176c61618Srpaulo #define RT2661_MCU_SEL		(1 << 0)
13276c61618Srpaulo #define RT2661_MCU_RESET	(1 << 1)
13376c61618Srpaulo #define RT2661_MCU_READY	(1 << 2)
13476c61618Srpaulo 
13576c61618Srpaulo /* possible flags for register MCU_INT_SOURCE_CSR */
13676c61618Srpaulo #define RT2661_MCU_CMD_DONE		0xff
13776c61618Srpaulo #define RT2661_MCU_WAKEUP		(1 << 8)
13876c61618Srpaulo #define RT2661_MCU_BEACON_EXPIRE	(1 << 9)
139*1de1c389Sscw #define	RT2661_MCU_INT_ALL		(RT2661_MCU_CMD_DONE | \
140*1de1c389Sscw 					 RT2661_MCU_WAKEUP | \
141*1de1c389Sscw 					 RT2661_MCU_BEACON_EXPIRE)
14276c61618Srpaulo 
14376c61618Srpaulo /* possible flags for register H2M_MAILBOX_CSR */
14476c61618Srpaulo #define RT2661_H2M_BUSY		(1 << 24)
14576c61618Srpaulo #define RT2661_TOKEN_NO_INTR	0xff
14676c61618Srpaulo 
14776c61618Srpaulo /* possible flags for register MAC_CSR5 */
14876c61618Srpaulo #define RT2661_ONE_BSSID	3
14976c61618Srpaulo 
15076c61618Srpaulo /* possible flags for register TXRX_CSR0 */
15176c61618Srpaulo /* Tx filter flags are in the low 16 bits */
15276c61618Srpaulo #define RT2661_AUTO_TX_SEQ	(1 << 15)
15376c61618Srpaulo /* Rx filter flags are in the high 16 bits */
15476c61618Srpaulo #define RT2661_DISABLE_RX	(1 << 16)
15576c61618Srpaulo #define RT2661_DROP_CRC_ERROR	(1 << 17)
15676c61618Srpaulo #define RT2661_DROP_PHY_ERROR	(1 << 18)
15776c61618Srpaulo #define RT2661_DROP_CTL		(1 << 19)
15876c61618Srpaulo #define RT2661_DROP_NOT_TO_ME	(1 << 20)
15976c61618Srpaulo #define RT2661_DROP_TODS	(1 << 21)
16076c61618Srpaulo #define RT2661_DROP_VER_ERROR	(1 << 22)
16176c61618Srpaulo #define RT2661_DROP_MULTICAST	(1 << 23)
16276c61618Srpaulo #define RT2661_DROP_BROADCAST	(1 << 24)
16376c61618Srpaulo #define RT2661_DROP_ACKCTS	(1 << 25)
16476c61618Srpaulo 
16576c61618Srpaulo /* possible flags for register TXRX_CSR4 */
166b2af3e5bSxtraeme #define RT2661_SHORT_PREAMBLE	(1 << 18)
167b2af3e5bSxtraeme #define RT2661_MRR_ENABLED	(1 << 19)
168b2af3e5bSxtraeme #define RT2661_MRR_CCK_FALLBACK	(1 << 22)
16976c61618Srpaulo 
17076c61618Srpaulo /* possible flags for register TXRX_CSR9 */
17176c61618Srpaulo #define RT2661_TSF_TICKING	(1 << 16)
17276c61618Srpaulo #define RT2661_TSF_MODE(x)	(((x) & 0x3) << 17)
17376c61618Srpaulo /* TBTT stands for Target Beacon Transmission Time */
17476c61618Srpaulo #define RT2661_ENABLE_TBTT	(1 << 19)
17576c61618Srpaulo #define RT2661_GENERATE_BEACON	(1 << 20)
17676c61618Srpaulo 
17776c61618Srpaulo /* possible flags for register PHY_CSR0 */
17876c61618Srpaulo #define RT2661_PA_PE_2GHZ	(1 << 16)
17976c61618Srpaulo #define RT2661_PA_PE_5GHZ	(1 << 17)
18076c61618Srpaulo 
18176c61618Srpaulo /* possible flags for register PHY_CSR3 */
18276c61618Srpaulo #define RT2661_BBP_READ	(1 << 15)
18376c61618Srpaulo #define RT2661_BBP_BUSY	(1 << 16)
18476c61618Srpaulo 
18576c61618Srpaulo /* possible flags for register PHY_CSR4 */
18676c61618Srpaulo #define RT2661_RF_21BIT	(21 << 24)
18776c61618Srpaulo #define RT2661_RF_BUSY	(1 << 31)
18876c61618Srpaulo 
18976c61618Srpaulo /* possible values for register STA_CSR4 */
19076c61618Srpaulo #define RT2661_TX_STAT_VALID	(1 << 0)
19176c61618Srpaulo #define RT2661_TX_RESULT(v)	(((v) >> 1) & 0x7)
19276c61618Srpaulo #define RT2661_TX_RETRYCNT(v)	(((v) >> 4) & 0xf)
19376c61618Srpaulo #define RT2661_TX_QID(v)	(((v) >> 8) & 0xf)
19476c61618Srpaulo #define RT2661_TX_SUCCESS	0
19576c61618Srpaulo #define RT2661_TX_RETRY_FAIL	6
19676c61618Srpaulo 
19776c61618Srpaulo /* possible flags for register TX_CNTL_CSR */
19876c61618Srpaulo #define RT2661_KICK_MGT	(1 << 4)
19976c61618Srpaulo 
20076c61618Srpaulo /* possible flags for register INT_SOURCE_CSR */
20176c61618Srpaulo #define RT2661_TX_DONE		(1 << 0)
20276c61618Srpaulo #define RT2661_RX_DONE		(1 << 1)
20376c61618Srpaulo #define RT2661_TX0_DMA_DONE	(1 << 16)
20476c61618Srpaulo #define RT2661_TX1_DMA_DONE	(1 << 17)
20576c61618Srpaulo #define RT2661_TX2_DMA_DONE	(1 << 18)
20676c61618Srpaulo #define RT2661_TX3_DMA_DONE	(1 << 19)
20776c61618Srpaulo #define RT2661_MGT_DONE		(1 << 20)
208*1de1c389Sscw #define	RT2661_INT_CSR_ALL	(RT2661_TX_DONE | RT2661_RX_DONE | \
209*1de1c389Sscw 				 RT2661_TX0_DMA_DONE | RT2661_TX1_DMA_DONE | \
210*1de1c389Sscw 				 RT2661_TX2_DMA_DONE | RT2661_TX3_DMA_DONE | \
211*1de1c389Sscw 				 RT2661_MGT_DONE | RT2661_MGT_DONE)
21276c61618Srpaulo 
21376c61618Srpaulo /* possible flags for register E2PROM_CSR */
21476c61618Srpaulo #define RT2661_C	(1 << 1)
21576c61618Srpaulo #define RT2661_S	(1 << 2)
21676c61618Srpaulo #define RT2661_D	(1 << 3)
21776c61618Srpaulo #define RT2661_Q	(1 << 4)
21876c61618Srpaulo #define RT2661_93C46	(1 << 5)
21976c61618Srpaulo 
22076c61618Srpaulo /* Tx descriptor */
22176c61618Srpaulo struct rt2661_tx_desc {
22276c61618Srpaulo 	uint32_t	flags;
22376c61618Srpaulo #define RT2661_TX_BUSY		(1 << 0)
22476c61618Srpaulo #define RT2661_TX_VALID		(1 << 1)
22576c61618Srpaulo #define RT2661_TX_MORE_FRAG	(1 << 2)
22676c61618Srpaulo #define RT2661_TX_NEED_ACK	(1 << 3)
22776c61618Srpaulo #define RT2661_TX_TIMESTAMP	(1 << 4)
22876c61618Srpaulo #define RT2661_TX_OFDM		(1 << 5)
229*1de1c389Sscw #define RT2661_TX_IFS_SIFS	(1 << 6)
23076c61618Srpaulo #define RT2661_TX_LONG_RETRY	(1 << 7)
23176c61618Srpaulo #define RT2661_TX_BURST		(1 << 28)
23276c61618Srpaulo 
23376c61618Srpaulo 	uint16_t	wme;
23476c61618Srpaulo #define RT2661_QID(v)		(v)
23576c61618Srpaulo #define RT2661_AIFSN(v)		((v) << 4)
23676c61618Srpaulo #define RT2661_LOGCWMIN(v)	((v) << 8)
23776c61618Srpaulo #define RT2661_LOGCWMAX(v)	((v) << 12)
23876c61618Srpaulo 
23976c61618Srpaulo 	uint16_t	xflags;
24076c61618Srpaulo #define RT2661_TX_HWSEQ		(1 << 12)
24176c61618Srpaulo 
24276c61618Srpaulo 	uint8_t		plcp_signal;
24376c61618Srpaulo 	uint8_t		plcp_service;
24476c61618Srpaulo #define RT2661_PLCP_LENGEXT	0x80
24576c61618Srpaulo 
24676c61618Srpaulo 	uint8_t		plcp_length_lo;
24776c61618Srpaulo 	uint8_t		plcp_length_hi;
24876c61618Srpaulo 
24976c61618Srpaulo 	uint32_t	iv;
25076c61618Srpaulo 	uint32_t	eiv;
25176c61618Srpaulo 
25276c61618Srpaulo 	uint8_t		offset;
25376c61618Srpaulo 	uint8_t		qid;
25476c61618Srpaulo #define RT2661_QID_MGT	13
25576c61618Srpaulo 
25676c61618Srpaulo 	uint8_t		txpower;
25776c61618Srpaulo #define RT2661_DEFAULT_TXPOWER	0
25876c61618Srpaulo 
25976c61618Srpaulo 	uint8_t		reserved1;
26076c61618Srpaulo 
26176c61618Srpaulo 	uint32_t	addr[RT2661_MAX_SCATTER];
26276c61618Srpaulo 	uint16_t	len[RT2661_MAX_SCATTER];
26376c61618Srpaulo 
26476c61618Srpaulo 	uint16_t	reserved2;
26576c61618Srpaulo } __packed;
26676c61618Srpaulo 
26776c61618Srpaulo /* Rx descriptor */
26876c61618Srpaulo struct rt2661_rx_desc {
26976c61618Srpaulo 	uint32_t	flags;
27076c61618Srpaulo #define RT2661_RX_BUSY		(1 << 0)
27176c61618Srpaulo #define RT2661_RX_DROP		(1 << 1)
27276c61618Srpaulo #define RT2661_RX_CRC_ERROR	(1 << 6)
27376c61618Srpaulo #define RT2661_RX_OFDM		(1 << 7)
27476c61618Srpaulo #define RT2661_RX_PHY_ERROR	(1 << 8)
27576c61618Srpaulo #define RT2661_RX_CIPHER_MASK	0x00000600
27676c61618Srpaulo 
27776c61618Srpaulo 	uint8_t		rate;
27876c61618Srpaulo 	uint8_t		rssi;
27976c61618Srpaulo 	uint8_t		reserved1;
28076c61618Srpaulo 	uint8_t		offset;
28176c61618Srpaulo 	uint32_t	iv;
28276c61618Srpaulo 	uint32_t	eiv;
28376c61618Srpaulo 	uint32_t	reserved2;
28476c61618Srpaulo 	uint32_t	physaddr;
28576c61618Srpaulo 	uint32_t	reserved3[10];
28676c61618Srpaulo } __packed;
28776c61618Srpaulo 
28876c61618Srpaulo #define RAL_RF1	0
28976c61618Srpaulo #define RAL_RF2	2
29076c61618Srpaulo #define RAL_RF3	1
29176c61618Srpaulo #define RAL_RF4	3
29276c61618Srpaulo 
29376c61618Srpaulo /* dual-band RF */
29476c61618Srpaulo #define RT2661_RF_5225	1
29576c61618Srpaulo #define RT2661_RF_5325	2
29676c61618Srpaulo /* single-band RF */
29776c61618Srpaulo #define RT2661_RF_2527	3
29876c61618Srpaulo #define RT2661_RF_2529	4
29976c61618Srpaulo 
30076c61618Srpaulo #define RT2661_RX_DESC_BACK	4
30176c61618Srpaulo 
30276c61618Srpaulo #define RT2661_SMART_MODE	(1 << 0)
30376c61618Srpaulo 
30476c61618Srpaulo #define RT2661_BBPR94_DEFAULT	6
30576c61618Srpaulo 
30676c61618Srpaulo #define RT2661_SHIFT_D	3
30776c61618Srpaulo #define RT2661_SHIFT_Q	4
30876c61618Srpaulo 
30976c61618Srpaulo #define RT2661_EEPROM_MAC01		0x02
31076c61618Srpaulo #define RT2661_EEPROM_MAC23		0x03
31176c61618Srpaulo #define RT2661_EEPROM_MAC45		0x04
31276c61618Srpaulo #define RT2661_EEPROM_ANTENNA		0x10
31376c61618Srpaulo #define RT2661_EEPROM_CONFIG2		0x11
31476c61618Srpaulo #define RT2661_EEPROM_BBP_BASE		0x13
31576c61618Srpaulo #define RT2661_EEPROM_TXPOWER		0x23
31676c61618Srpaulo #define RT2661_EEPROM_FREQ_OFFSET	0x2f
31776c61618Srpaulo #define RT2661_EEPROM_RSSI_2GHZ_OFFSET	0x4d
31876c61618Srpaulo #define RT2661_EEPROM_RSSI_5GHZ_OFFSET	0x4e
31976c61618Srpaulo 
32076c61618Srpaulo #define RT2661_EEPROM_DELAY	1	/* minimum hold time (microsecond) */
32176c61618Srpaulo 
32276c61618Srpaulo /*
32376c61618Srpaulo  * control and status registers access macros
32476c61618Srpaulo  */
32576c61618Srpaulo #define RAL_READ(sc, reg)						\
32676c61618Srpaulo 	bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
32776c61618Srpaulo 
32876c61618Srpaulo #define RAL_READ_REGION_4(sc, offset, datap, count)			\
32976c61618Srpaulo 	bus_space_read_region_4((sc)->sc_st, (sc)->sc_sh, (offset),	\
33076c61618Srpaulo 	    (datap), (count))
33176c61618Srpaulo 
33276c61618Srpaulo #define RAL_WRITE(sc, reg, val)						\
33376c61618Srpaulo 	bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
33476c61618Srpaulo 
335*1de1c389Sscw #define RAL_WRITE_1(sc, reg, val)					\
336*1de1c389Sscw 	bus_space_write_1((sc)->sc_st, (sc)->sc_sh, (reg), (val))
337*1de1c389Sscw 
338*1de1c389Sscw #define RAL_RW_BARRIER_1(sc, reg)					\
339*1de1c389Sscw 	bus_space_barrier((sc)->sc_st, (sc)->sc_sh, (reg), 1,		\
340*1de1c389Sscw 	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE)
341*1de1c389Sscw 
34276c61618Srpaulo #define RAL_WRITE_REGION_1(sc, offset, datap, count)			\
34376c61618Srpaulo 	bus_space_write_region_1((sc)->sc_st, (sc)->sc_sh, (offset),	\
34476c61618Srpaulo 	    (datap), (count))
34576c61618Srpaulo 
34676c61618Srpaulo /*
34776c61618Srpaulo  * EEPROM access macro
34876c61618Srpaulo  */
34976c61618Srpaulo #define RT2661_EEPROM_CTL(sc, val) do {					\
35076c61618Srpaulo 	RAL_WRITE((sc), RT2661_E2PROM_CSR, (val));			\
35176c61618Srpaulo 	DELAY(RT2661_EEPROM_DELAY);					\
35276c61618Srpaulo } while (/* CONSTCOND */0)
353*1de1c389Sscw 
354*1de1c389Sscw /*
355*1de1c389Sscw  * Default values for MAC registers; values taken from the reference driver.
356*1de1c389Sscw  */
357*1de1c389Sscw #define RT2661_DEF_MAC					\
358*1de1c389Sscw 	{ RT2661_TXRX_CSR0,        0x0000b032 },	\
359*1de1c389Sscw 	{ RT2661_TXRX_CSR1,        0x9eb39eb3 },	\
360*1de1c389Sscw 	{ RT2661_TXRX_CSR2,        0x8a8b8c8d },	\
361*1de1c389Sscw 	{ RT2661_TXRX_CSR3,        0x00858687 },	\
362*1de1c389Sscw 	{ RT2661_TXRX_CSR7,        0x2e31353b },	\
363*1de1c389Sscw 	{ RT2661_TXRX_CSR8,        0x2a2a2a2c },	\
364*1de1c389Sscw 	{ RT2661_TXRX_CSR15,       0x0000000f },	\
365*1de1c389Sscw 	{ RT2661_MAC_CSR6,         0x00000fff },	\
366*1de1c389Sscw 	{ RT2661_MAC_CSR8,         0x016c030a },	\
367*1de1c389Sscw 	{ RT2661_MAC_CSR10,        0x00000718 },	\
368*1de1c389Sscw 	{ RT2661_MAC_CSR12,        0x00000004 },	\
369*1de1c389Sscw 	{ RT2661_MAC_CSR13,        0x0000e000 },	\
370*1de1c389Sscw 	{ RT2661_SEC_CSR0,         0x00000000 },	\
371*1de1c389Sscw 	{ RT2661_SEC_CSR1,         0x00000000 },	\
372*1de1c389Sscw 	{ RT2661_SEC_CSR5,         0x00000000 },	\
373*1de1c389Sscw 	{ RT2661_PHY_CSR1,         0x000023b0 },	\
374*1de1c389Sscw 	{ RT2661_PHY_CSR5,         0x060a100c },	\
375*1de1c389Sscw 	{ RT2661_PHY_CSR6,         0x00080606 },	\
376*1de1c389Sscw 	{ RT2661_PHY_CSR7,         0x00000a08 },	\
377*1de1c389Sscw 	{ RT2661_PCI_CFG_CSR,      0x3cca4808 },	\
378*1de1c389Sscw 	{ RT2661_AIFSN_CSR,        0x00002273 },	\
379*1de1c389Sscw 	{ RT2661_CWMIN_CSR,        0x00002344 },	\
380*1de1c389Sscw 	{ RT2661_CWMAX_CSR,        0x000034aa },	\
381*1de1c389Sscw 	{ RT2661_TEST_MODE_CSR,    0x00000200 },	\
382*1de1c389Sscw 	{ RT2661_M2H_CMD_DONE_CSR, 0xffffffff }
383*1de1c389Sscw 
384*1de1c389Sscw /*
385*1de1c389Sscw  * Default values for BBP registers; values taken from the reference driver.
386*1de1c389Sscw  */
387*1de1c389Sscw #define RT2661_DEF_BBP	\
388*1de1c389Sscw 	{   3, 0x00 },	\
389*1de1c389Sscw 	{  15, 0x30 },	\
390*1de1c389Sscw 	{  17, 0x20 },	\
391*1de1c389Sscw 	{  21, 0xc8 },	\
392*1de1c389Sscw 	{  22, 0x38 },	\
393*1de1c389Sscw 	{  23, 0x06 },	\
394*1de1c389Sscw 	{  24, 0xfe },	\
395*1de1c389Sscw 	{  25, 0x0a },	\
396*1de1c389Sscw 	{  26, 0x0d },	\
397*1de1c389Sscw 	{  34, 0x12 },	\
398*1de1c389Sscw 	{  37, 0x07 },	\
399*1de1c389Sscw 	{  39, 0xf8 },	\
400*1de1c389Sscw 	{  41, 0x60 },	\
401*1de1c389Sscw 	{  53, 0x10 },	\
402*1de1c389Sscw 	{  54, 0x18 },	\
403*1de1c389Sscw 	{  60, 0x10 },	\
404*1de1c389Sscw 	{  61, 0x04 },	\
405*1de1c389Sscw 	{  62, 0x04 },	\
406*1de1c389Sscw 	{  75, 0xfe },	\
407*1de1c389Sscw 	{  86, 0xfe },	\
408*1de1c389Sscw 	{  88, 0xfe },	\
409*1de1c389Sscw 	{  90, 0x0f },	\
410*1de1c389Sscw 	{  99, 0x00 },	\
411*1de1c389Sscw 	{ 102, 0x16 },	\
412*1de1c389Sscw 	{ 107, 0x04 }
413*1de1c389Sscw 
414*1de1c389Sscw /*
415*1de1c389Sscw  * Default settings for RF registers; values taken from the reference driver.
416*1de1c389Sscw  */
417*1de1c389Sscw #define RT2661_RF5225_1					\
418*1de1c389Sscw 	{   1, 0x00b33, 0x011e1, 0x1a014, 0x30282 },	\
419*1de1c389Sscw 	{   2, 0x00b33, 0x011e1, 0x1a014, 0x30287 },	\
420*1de1c389Sscw 	{   3, 0x00b33, 0x011e2, 0x1a014, 0x30282 },	\
421*1de1c389Sscw 	{   4, 0x00b33, 0x011e2, 0x1a014, 0x30287 },	\
422*1de1c389Sscw 	{   5, 0x00b33, 0x011e3, 0x1a014, 0x30282 },	\
423*1de1c389Sscw 	{   6, 0x00b33, 0x011e3, 0x1a014, 0x30287 },	\
424*1de1c389Sscw 	{   7, 0x00b33, 0x011e4, 0x1a014, 0x30282 },	\
425*1de1c389Sscw 	{   8, 0x00b33, 0x011e4, 0x1a014, 0x30287 },	\
426*1de1c389Sscw 	{   9, 0x00b33, 0x011e5, 0x1a014, 0x30282 },	\
427*1de1c389Sscw 	{  10, 0x00b33, 0x011e5, 0x1a014, 0x30287 },	\
428*1de1c389Sscw 	{  11, 0x00b33, 0x011e6, 0x1a014, 0x30282 },	\
429*1de1c389Sscw 	{  12, 0x00b33, 0x011e6, 0x1a014, 0x30287 },	\
430*1de1c389Sscw 	{  13, 0x00b33, 0x011e7, 0x1a014, 0x30282 },	\
431*1de1c389Sscw 	{  14, 0x00b33, 0x011e8, 0x1a014, 0x30284 },	\
432*1de1c389Sscw 							\
433*1de1c389Sscw 	{  36, 0x00b33, 0x01266, 0x26014, 0x30288 },	\
434*1de1c389Sscw 	{  40, 0x00b33, 0x01268, 0x26014, 0x30280 },	\
435*1de1c389Sscw 	{  44, 0x00b33, 0x01269, 0x26014, 0x30282 },	\
436*1de1c389Sscw 	{  48, 0x00b33, 0x0126a, 0x26014, 0x30284 },	\
437*1de1c389Sscw 	{  52, 0x00b33, 0x0126b, 0x26014, 0x30286 },	\
438*1de1c389Sscw 	{  56, 0x00b33, 0x0126c, 0x26014, 0x30288 },	\
439*1de1c389Sscw 	{  60, 0x00b33, 0x0126e, 0x26014, 0x30280 },	\
440*1de1c389Sscw 	{  64, 0x00b33, 0x0126f, 0x26014, 0x30282 },	\
441*1de1c389Sscw 							\
442*1de1c389Sscw 	{ 100, 0x00b33, 0x0128a, 0x2e014, 0x30280 },	\
443*1de1c389Sscw 	{ 104, 0x00b33, 0x0128b, 0x2e014, 0x30282 },	\
444*1de1c389Sscw 	{ 108, 0x00b33, 0x0128c, 0x2e014, 0x30284 },	\
445*1de1c389Sscw 	{ 112, 0x00b33, 0x0128d, 0x2e014, 0x30286 },	\
446*1de1c389Sscw 	{ 116, 0x00b33, 0x0128e, 0x2e014, 0x30288 },	\
447*1de1c389Sscw 	{ 120, 0x00b33, 0x012a0, 0x2e014, 0x30280 },	\
448*1de1c389Sscw 	{ 124, 0x00b33, 0x012a1, 0x2e014, 0x30282 },	\
449*1de1c389Sscw 	{ 128, 0x00b33, 0x012a2, 0x2e014, 0x30284 },	\
450*1de1c389Sscw 	{ 132, 0x00b33, 0x012a3, 0x2e014, 0x30286 },	\
451*1de1c389Sscw 	{ 136, 0x00b33, 0x012a4, 0x2e014, 0x30288 },	\
452*1de1c389Sscw 	{ 140, 0x00b33, 0x012a6, 0x2e014, 0x30280 },	\
453*1de1c389Sscw 							\
454*1de1c389Sscw 	{ 149, 0x00b33, 0x012a8, 0x2e014, 0x30287 },	\
455*1de1c389Sscw 	{ 153, 0x00b33, 0x012a9, 0x2e014, 0x30289 },	\
456*1de1c389Sscw 	{ 157, 0x00b33, 0x012ab, 0x2e014, 0x30281 },	\
457*1de1c389Sscw 	{ 161, 0x00b33, 0x012ac, 0x2e014, 0x30283 },	\
458*1de1c389Sscw 	{ 165, 0x00b33, 0x012ad, 0x2e014, 0x30285 }
459*1de1c389Sscw 
460*1de1c389Sscw #define RT2661_RF5225_2					\
461*1de1c389Sscw 	{   1, 0x00b33, 0x011e1, 0x1a014, 0x30282 },	\
462*1de1c389Sscw 	{   2, 0x00b33, 0x011e1, 0x1a014, 0x30287 },	\
463*1de1c389Sscw 	{   3, 0x00b33, 0x011e2, 0x1a014, 0x30282 },	\
464*1de1c389Sscw 	{   4, 0x00b33, 0x011e2, 0x1a014, 0x30287 },	\
465*1de1c389Sscw 	{   5, 0x00b33, 0x011e3, 0x1a014, 0x30282 },	\
466*1de1c389Sscw 	{   6, 0x00b33, 0x011e3, 0x1a014, 0x30287 },	\
467*1de1c389Sscw 	{   7, 0x00b33, 0x011e4, 0x1a014, 0x30282 },	\
468*1de1c389Sscw 	{   8, 0x00b33, 0x011e4, 0x1a014, 0x30287 },	\
469*1de1c389Sscw 	{   9, 0x00b33, 0x011e5, 0x1a014, 0x30282 },	\
470*1de1c389Sscw 	{  10, 0x00b33, 0x011e5, 0x1a014, 0x30287 },	\
471*1de1c389Sscw 	{  11, 0x00b33, 0x011e6, 0x1a014, 0x30282 },	\
472*1de1c389Sscw 	{  12, 0x00b33, 0x011e6, 0x1a014, 0x30287 },	\
473*1de1c389Sscw 	{  13, 0x00b33, 0x011e7, 0x1a014, 0x30282 },	\
474*1de1c389Sscw 	{  14, 0x00b33, 0x011e8, 0x1a014, 0x30284 },	\
475*1de1c389Sscw 							\
476*1de1c389Sscw 	{  36, 0x00b35, 0x11206, 0x26014, 0x30280 },	\
477*1de1c389Sscw 	{  40, 0x00b34, 0x111a0, 0x26014, 0x30280 },	\
478*1de1c389Sscw 	{  44, 0x00b34, 0x111a1, 0x26014, 0x30286 },	\
479*1de1c389Sscw 	{  48, 0x00b34, 0x111a3, 0x26014, 0x30282 },	\
480*1de1c389Sscw 	{  52, 0x00b34, 0x111a4, 0x26014, 0x30288 },	\
481*1de1c389Sscw 	{  56, 0x00b34, 0x111a6, 0x26014, 0x30284 },	\
482*1de1c389Sscw 	{  60, 0x00b34, 0x111a8, 0x26014, 0x30280 },	\
483*1de1c389Sscw 	{  64, 0x00b34, 0x111a9, 0x26014, 0x30286 },	\
484*1de1c389Sscw 							\
485*1de1c389Sscw 	{ 100, 0x00b35, 0x11226, 0x2e014, 0x30280 },	\
486*1de1c389Sscw 	{ 104, 0x00b35, 0x11228, 0x2e014, 0x30280 },	\
487*1de1c389Sscw 	{ 108, 0x00b35, 0x1122a, 0x2e014, 0x30280 },	\
488*1de1c389Sscw 	{ 112, 0x00b35, 0x1122c, 0x2e014, 0x30280 },	\
489*1de1c389Sscw 	{ 116, 0x00b35, 0x1122e, 0x2e014, 0x30280 },	\
490*1de1c389Sscw 	{ 120, 0x00b34, 0x111c0, 0x2e014, 0x30280 },	\
491*1de1c389Sscw 	{ 124, 0x00b34, 0x111c1, 0x2e014, 0x30286 },	\
492*1de1c389Sscw 	{ 128, 0x00b34, 0x111c3, 0x2e014, 0x30282 },	\
493*1de1c389Sscw 	{ 132, 0x00b34, 0x111c4, 0x2e014, 0x30288 },	\
494*1de1c389Sscw 	{ 136, 0x00b34, 0x111c6, 0x2e014, 0x30284 },	\
495*1de1c389Sscw 	{ 140, 0x00b34, 0x111c8, 0x2e014, 0x30280 },	\
496*1de1c389Sscw 							\
497*1de1c389Sscw 	{ 149, 0x00b34, 0x111cb, 0x2e014, 0x30286 },	\
498*1de1c389Sscw 	{ 153, 0x00b34, 0x111cd, 0x2e014, 0x30282 },	\
499*1de1c389Sscw 	{ 157, 0x00b35, 0x11242, 0x2e014, 0x30285 },	\
500*1de1c389Sscw 	{ 161, 0x00b35, 0x11244, 0x2e014, 0x30285 },	\
501*1de1c389Sscw 	{ 165, 0x00b35, 0x11246, 0x2e014, 0x30285 }
502