Home | History | Annotate | Line # | Download | only in ic
rt2661reg.h revision 1.1.66.2
      1  1.1.66.2     mjf /*	$Id: rt2661reg.h,v 1.1.66.2 2008/06/02 13:23:26 mjf Exp $	*/
      2       1.1  rpaulo /*	$OpenBSD: rt2661reg.h,v 1.5 2006/01/14 12:43:27 damien Exp $	*/
      3       1.1  rpaulo 
      4       1.1  rpaulo /*-
      5       1.1  rpaulo  * Copyright (c) 2006
      6       1.1  rpaulo  *	Damien Bergamini <damien.bergamini (at) free.fr>
      7       1.1  rpaulo  *
      8       1.1  rpaulo  * Permission to use, copy, modify, and distribute this software for any
      9       1.1  rpaulo  * purpose with or without fee is hereby granted, provided that the above
     10       1.1  rpaulo  * copyright notice and this permission notice appear in all copies.
     11       1.1  rpaulo  *
     12       1.1  rpaulo  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     13       1.1  rpaulo  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     14       1.1  rpaulo  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     15       1.1  rpaulo  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     16       1.1  rpaulo  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     17       1.1  rpaulo  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     18       1.1  rpaulo  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     19       1.1  rpaulo  */
     20       1.1  rpaulo 
     21       1.1  rpaulo #define RT2661_TX_RING_COUNT	32
     22       1.1  rpaulo #define RT2661_MGT_RING_COUNT	32
     23       1.1  rpaulo #define RT2661_RX_RING_COUNT	64
     24       1.1  rpaulo 
     25       1.1  rpaulo #define RT2661_TX_DESC_SIZE	(sizeof (struct rt2661_tx_desc))
     26       1.1  rpaulo #define RT2661_TX_DESC_WSIZE	(RT2661_TX_DESC_SIZE / 4)
     27       1.1  rpaulo #define RT2661_RX_DESC_SIZE	(sizeof (struct rt2661_rx_desc))
     28       1.1  rpaulo #define RT2661_RX_DESC_WSIZE	(RT2661_RX_DESC_SIZE / 4)
     29       1.1  rpaulo 
     30       1.1  rpaulo #define RT2661_MAX_SCATTER	5
     31       1.1  rpaulo 
     32       1.1  rpaulo /*
     33       1.1  rpaulo  * Control and status registers.
     34       1.1  rpaulo  */
     35       1.1  rpaulo #define RT2661_HOST_CMD_CSR		0x0008
     36       1.1  rpaulo #define RT2661_MCU_CNTL_CSR		0x000c
     37       1.1  rpaulo #define RT2661_SOFT_RESET_CSR		0x0010
     38       1.1  rpaulo #define RT2661_MCU_INT_SOURCE_CSR	0x0014
     39       1.1  rpaulo #define RT2661_MCU_INT_MASK_CSR		0x0018
     40       1.1  rpaulo #define RT2661_PCI_USEC_CSR		0x001c
     41       1.1  rpaulo #define RT2661_H2M_MAILBOX_CSR		0x2100
     42       1.1  rpaulo #define RT2661_M2H_CMD_DONE_CSR		0x2104
     43       1.1  rpaulo #define RT2661_HW_BEACON_BASE0		0x2c00
     44       1.1  rpaulo #define RT2661_MAC_CSR0			0x3000
     45       1.1  rpaulo #define RT2661_MAC_CSR1			0x3004
     46       1.1  rpaulo #define RT2661_MAC_CSR2			0x3008
     47       1.1  rpaulo #define RT2661_MAC_CSR3			0x300c
     48       1.1  rpaulo #define RT2661_MAC_CSR4			0x3010
     49       1.1  rpaulo #define RT2661_MAC_CSR5			0x3014
     50       1.1  rpaulo #define RT2661_MAC_CSR6			0x3018
     51       1.1  rpaulo #define RT2661_MAC_CSR7			0x301c
     52       1.1  rpaulo #define RT2661_MAC_CSR8			0x3020
     53       1.1  rpaulo #define RT2661_MAC_CSR9			0x3024
     54       1.1  rpaulo #define RT2661_MAC_CSR10		0x3028
     55       1.1  rpaulo #define RT2661_MAC_CSR11		0x302c
     56       1.1  rpaulo #define RT2661_MAC_CSR12		0x3030
     57       1.1  rpaulo #define RT2661_MAC_CSR13		0x3034
     58       1.1  rpaulo #define RT2661_MAC_CSR14		0x3038
     59       1.1  rpaulo #define RT2661_MAC_CSR15		0x303c
     60       1.1  rpaulo #define RT2661_TXRX_CSR0		0x3040
     61       1.1  rpaulo #define RT2661_TXRX_CSR1		0x3044
     62       1.1  rpaulo #define RT2661_TXRX_CSR2		0x3048
     63       1.1  rpaulo #define RT2661_TXRX_CSR3		0x304c
     64       1.1  rpaulo #define RT2661_TXRX_CSR4		0x3050
     65       1.1  rpaulo #define RT2661_TXRX_CSR5		0x3054
     66       1.1  rpaulo #define RT2661_TXRX_CSR6		0x3058
     67       1.1  rpaulo #define RT2661_TXRX_CSR7		0x305c
     68       1.1  rpaulo #define RT2661_TXRX_CSR8		0x3060
     69       1.1  rpaulo #define RT2661_TXRX_CSR9		0x3064
     70       1.1  rpaulo #define RT2661_TXRX_CSR10		0x3068
     71       1.1  rpaulo #define RT2661_TXRX_CSR11		0x306c
     72       1.1  rpaulo #define RT2661_TXRX_CSR12		0x3070
     73       1.1  rpaulo #define RT2661_TXRX_CSR13		0x3074
     74       1.1  rpaulo #define RT2661_TXRX_CSR14		0x3078
     75       1.1  rpaulo #define RT2661_TXRX_CSR15		0x307c
     76       1.1  rpaulo #define RT2661_PHY_CSR0			0x3080
     77       1.1  rpaulo #define RT2661_PHY_CSR1			0x3084
     78       1.1  rpaulo #define RT2661_PHY_CSR2			0x3088
     79       1.1  rpaulo #define RT2661_PHY_CSR3			0x308c
     80       1.1  rpaulo #define RT2661_PHY_CSR4			0x3090
     81       1.1  rpaulo #define RT2661_PHY_CSR5			0x3094
     82       1.1  rpaulo #define RT2661_PHY_CSR6			0x3098
     83       1.1  rpaulo #define RT2661_PHY_CSR7			0x309c
     84       1.1  rpaulo #define RT2661_SEC_CSR0			0x30a0
     85       1.1  rpaulo #define RT2661_SEC_CSR1			0x30a4
     86       1.1  rpaulo #define RT2661_SEC_CSR2			0x30a8
     87       1.1  rpaulo #define RT2661_SEC_CSR3			0x30ac
     88       1.1  rpaulo #define RT2661_SEC_CSR4			0x30b0
     89       1.1  rpaulo #define RT2661_SEC_CSR5			0x30b4
     90       1.1  rpaulo #define RT2661_STA_CSR0			0x30c0
     91       1.1  rpaulo #define RT2661_STA_CSR1			0x30c4
     92       1.1  rpaulo #define RT2661_STA_CSR2			0x30c8
     93       1.1  rpaulo #define RT2661_STA_CSR3			0x30cc
     94       1.1  rpaulo #define RT2661_STA_CSR4			0x30d0
     95       1.1  rpaulo #define RT2661_AC0_BASE_CSR		0x3400
     96       1.1  rpaulo #define RT2661_AC1_BASE_CSR		0x3404
     97       1.1  rpaulo #define RT2661_AC2_BASE_CSR		0x3408
     98       1.1  rpaulo #define RT2661_AC3_BASE_CSR		0x340c
     99       1.1  rpaulo #define RT2661_MGT_BASE_CSR		0x3410
    100       1.1  rpaulo #define RT2661_TX_RING_CSR0		0x3418
    101       1.1  rpaulo #define RT2661_TX_RING_CSR1		0x341c
    102       1.1  rpaulo #define RT2661_AIFSN_CSR		0x3420
    103       1.1  rpaulo #define RT2661_CWMIN_CSR		0x3424
    104       1.1  rpaulo #define RT2661_CWMAX_CSR		0x3428
    105       1.1  rpaulo #define RT2661_TX_DMA_DST_CSR		0x342c
    106       1.1  rpaulo #define RT2661_TX_CNTL_CSR		0x3430
    107       1.1  rpaulo #define RT2661_LOAD_TX_RING_CSR		0x3434
    108       1.1  rpaulo #define RT2661_RX_BASE_CSR		0x3450
    109       1.1  rpaulo #define RT2661_RX_RING_CSR		0x3454
    110       1.1  rpaulo #define RT2661_RX_CNTL_CSR		0x3458
    111       1.1  rpaulo #define RT2661_PCI_CFG_CSR		0x3460
    112       1.1  rpaulo #define RT2661_INT_SOURCE_CSR		0x3468
    113       1.1  rpaulo #define RT2661_INT_MASK_CSR		0x346c
    114       1.1  rpaulo #define RT2661_E2PROM_CSR		0x3470
    115       1.1  rpaulo #define RT2661_AC_TXOP_CSR0		0x3474
    116       1.1  rpaulo #define RT2661_AC_TXOP_CSR1		0x3478
    117       1.1  rpaulo #define RT2661_TEST_MODE_CSR		0x3484
    118       1.1  rpaulo #define RT2661_IO_CNTL_CSR		0x3498
    119       1.1  rpaulo #define RT2661_MCU_CODE_BASE		0x4000
    120       1.1  rpaulo 
    121       1.1  rpaulo 
    122       1.1  rpaulo /* possible flags for register HOST_CMD_CSR */
    123       1.1  rpaulo #define RT2661_KICK_CMD		(1 << 7)
    124       1.1  rpaulo /* Host to MCU (8051) command identifiers */
    125       1.1  rpaulo #define RT2661_MCU_CMD_SLEEP	0x30
    126       1.1  rpaulo #define RT2661_MCU_CMD_WAKEUP	0x31
    127       1.1  rpaulo #define RT2661_MCU_SET_LED	0x50
    128       1.1  rpaulo #define RT2661_MCU_SET_RSSI_LED	0x52
    129       1.1  rpaulo 
    130       1.1  rpaulo /* possible flags for register MCU_CNTL_CSR */
    131       1.1  rpaulo #define RT2661_MCU_SEL		(1 << 0)
    132       1.1  rpaulo #define RT2661_MCU_RESET	(1 << 1)
    133       1.1  rpaulo #define RT2661_MCU_READY	(1 << 2)
    134       1.1  rpaulo 
    135       1.1  rpaulo /* possible flags for register MCU_INT_SOURCE_CSR */
    136       1.1  rpaulo #define RT2661_MCU_CMD_DONE		0xff
    137       1.1  rpaulo #define RT2661_MCU_WAKEUP		(1 << 8)
    138       1.1  rpaulo #define RT2661_MCU_BEACON_EXPIRE	(1 << 9)
    139  1.1.66.2     mjf #define	RT2661_MCU_INT_ALL		(RT2661_MCU_CMD_DONE | \
    140  1.1.66.2     mjf 					 RT2661_MCU_WAKEUP | \
    141  1.1.66.2     mjf 					 RT2661_MCU_BEACON_EXPIRE)
    142       1.1  rpaulo 
    143       1.1  rpaulo /* possible flags for register H2M_MAILBOX_CSR */
    144       1.1  rpaulo #define RT2661_H2M_BUSY		(1 << 24)
    145       1.1  rpaulo #define RT2661_TOKEN_NO_INTR	0xff
    146       1.1  rpaulo 
    147       1.1  rpaulo /* possible flags for register MAC_CSR5 */
    148       1.1  rpaulo #define RT2661_ONE_BSSID	3
    149       1.1  rpaulo 
    150       1.1  rpaulo /* possible flags for register TXRX_CSR0 */
    151       1.1  rpaulo /* Tx filter flags are in the low 16 bits */
    152       1.1  rpaulo #define RT2661_AUTO_TX_SEQ	(1 << 15)
    153       1.1  rpaulo /* Rx filter flags are in the high 16 bits */
    154       1.1  rpaulo #define RT2661_DISABLE_RX	(1 << 16)
    155       1.1  rpaulo #define RT2661_DROP_CRC_ERROR	(1 << 17)
    156       1.1  rpaulo #define RT2661_DROP_PHY_ERROR	(1 << 18)
    157       1.1  rpaulo #define RT2661_DROP_CTL		(1 << 19)
    158       1.1  rpaulo #define RT2661_DROP_NOT_TO_ME	(1 << 20)
    159       1.1  rpaulo #define RT2661_DROP_TODS	(1 << 21)
    160       1.1  rpaulo #define RT2661_DROP_VER_ERROR	(1 << 22)
    161       1.1  rpaulo #define RT2661_DROP_MULTICAST	(1 << 23)
    162       1.1  rpaulo #define RT2661_DROP_BROADCAST	(1 << 24)
    163       1.1  rpaulo #define RT2661_DROP_ACKCTS	(1 << 25)
    164       1.1  rpaulo 
    165       1.1  rpaulo /* possible flags for register TXRX_CSR4 */
    166  1.1.66.1     mjf #define RT2661_SHORT_PREAMBLE	(1 << 18)
    167  1.1.66.1     mjf #define RT2661_MRR_ENABLED	(1 << 19)
    168  1.1.66.1     mjf #define RT2661_MRR_CCK_FALLBACK	(1 << 22)
    169       1.1  rpaulo 
    170       1.1  rpaulo /* possible flags for register TXRX_CSR9 */
    171       1.1  rpaulo #define RT2661_TSF_TICKING	(1 << 16)
    172       1.1  rpaulo #define RT2661_TSF_MODE(x)	(((x) & 0x3) << 17)
    173       1.1  rpaulo /* TBTT stands for Target Beacon Transmission Time */
    174       1.1  rpaulo #define RT2661_ENABLE_TBTT	(1 << 19)
    175       1.1  rpaulo #define RT2661_GENERATE_BEACON	(1 << 20)
    176       1.1  rpaulo 
    177       1.1  rpaulo /* possible flags for register PHY_CSR0 */
    178       1.1  rpaulo #define RT2661_PA_PE_2GHZ	(1 << 16)
    179       1.1  rpaulo #define RT2661_PA_PE_5GHZ	(1 << 17)
    180       1.1  rpaulo 
    181       1.1  rpaulo /* possible flags for register PHY_CSR3 */
    182       1.1  rpaulo #define RT2661_BBP_READ	(1 << 15)
    183       1.1  rpaulo #define RT2661_BBP_BUSY	(1 << 16)
    184       1.1  rpaulo 
    185       1.1  rpaulo /* possible flags for register PHY_CSR4 */
    186       1.1  rpaulo #define RT2661_RF_21BIT	(21 << 24)
    187       1.1  rpaulo #define RT2661_RF_BUSY	(1 << 31)
    188       1.1  rpaulo 
    189       1.1  rpaulo /* possible values for register STA_CSR4 */
    190       1.1  rpaulo #define RT2661_TX_STAT_VALID	(1 << 0)
    191       1.1  rpaulo #define RT2661_TX_RESULT(v)	(((v) >> 1) & 0x7)
    192       1.1  rpaulo #define RT2661_TX_RETRYCNT(v)	(((v) >> 4) & 0xf)
    193       1.1  rpaulo #define RT2661_TX_QID(v)	(((v) >> 8) & 0xf)
    194       1.1  rpaulo #define RT2661_TX_SUCCESS	0
    195       1.1  rpaulo #define RT2661_TX_RETRY_FAIL	6
    196       1.1  rpaulo 
    197       1.1  rpaulo /* possible flags for register TX_CNTL_CSR */
    198       1.1  rpaulo #define RT2661_KICK_MGT	(1 << 4)
    199       1.1  rpaulo 
    200       1.1  rpaulo /* possible flags for register INT_SOURCE_CSR */
    201       1.1  rpaulo #define RT2661_TX_DONE		(1 << 0)
    202       1.1  rpaulo #define RT2661_RX_DONE		(1 << 1)
    203       1.1  rpaulo #define RT2661_TX0_DMA_DONE	(1 << 16)
    204       1.1  rpaulo #define RT2661_TX1_DMA_DONE	(1 << 17)
    205       1.1  rpaulo #define RT2661_TX2_DMA_DONE	(1 << 18)
    206       1.1  rpaulo #define RT2661_TX3_DMA_DONE	(1 << 19)
    207       1.1  rpaulo #define RT2661_MGT_DONE		(1 << 20)
    208  1.1.66.2     mjf #define	RT2661_INT_CSR_ALL	(RT2661_TX_DONE | RT2661_RX_DONE | \
    209  1.1.66.2     mjf 				 RT2661_TX0_DMA_DONE | RT2661_TX1_DMA_DONE | \
    210  1.1.66.2     mjf 				 RT2661_TX2_DMA_DONE | RT2661_TX3_DMA_DONE | \
    211  1.1.66.2     mjf 				 RT2661_MGT_DONE | RT2661_MGT_DONE)
    212       1.1  rpaulo 
    213       1.1  rpaulo /* possible flags for register E2PROM_CSR */
    214       1.1  rpaulo #define RT2661_C	(1 << 1)
    215       1.1  rpaulo #define RT2661_S	(1 << 2)
    216       1.1  rpaulo #define RT2661_D	(1 << 3)
    217       1.1  rpaulo #define RT2661_Q	(1 << 4)
    218       1.1  rpaulo #define RT2661_93C46	(1 << 5)
    219       1.1  rpaulo 
    220       1.1  rpaulo /* Tx descriptor */
    221       1.1  rpaulo struct rt2661_tx_desc {
    222       1.1  rpaulo 	uint32_t	flags;
    223       1.1  rpaulo #define RT2661_TX_BUSY		(1 << 0)
    224       1.1  rpaulo #define RT2661_TX_VALID		(1 << 1)
    225       1.1  rpaulo #define RT2661_TX_MORE_FRAG	(1 << 2)
    226       1.1  rpaulo #define RT2661_TX_NEED_ACK	(1 << 3)
    227       1.1  rpaulo #define RT2661_TX_TIMESTAMP	(1 << 4)
    228       1.1  rpaulo #define RT2661_TX_OFDM		(1 << 5)
    229  1.1.66.2     mjf #define RT2661_TX_IFS_SIFS	(1 << 6)
    230       1.1  rpaulo #define RT2661_TX_LONG_RETRY	(1 << 7)
    231       1.1  rpaulo #define RT2661_TX_BURST		(1 << 28)
    232       1.1  rpaulo 
    233       1.1  rpaulo 	uint16_t	wme;
    234       1.1  rpaulo #define RT2661_QID(v)		(v)
    235       1.1  rpaulo #define RT2661_AIFSN(v)		((v) << 4)
    236       1.1  rpaulo #define RT2661_LOGCWMIN(v)	((v) << 8)
    237       1.1  rpaulo #define RT2661_LOGCWMAX(v)	((v) << 12)
    238       1.1  rpaulo 
    239       1.1  rpaulo 	uint16_t	xflags;
    240       1.1  rpaulo #define RT2661_TX_HWSEQ		(1 << 12)
    241       1.1  rpaulo 
    242       1.1  rpaulo 	uint8_t		plcp_signal;
    243       1.1  rpaulo 	uint8_t		plcp_service;
    244       1.1  rpaulo #define RT2661_PLCP_LENGEXT	0x80
    245       1.1  rpaulo 
    246       1.1  rpaulo 	uint8_t		plcp_length_lo;
    247       1.1  rpaulo 	uint8_t		plcp_length_hi;
    248       1.1  rpaulo 
    249       1.1  rpaulo 	uint32_t	iv;
    250       1.1  rpaulo 	uint32_t	eiv;
    251       1.1  rpaulo 
    252       1.1  rpaulo 	uint8_t		offset;
    253       1.1  rpaulo 	uint8_t		qid;
    254       1.1  rpaulo #define RT2661_QID_MGT	13
    255       1.1  rpaulo 
    256       1.1  rpaulo 	uint8_t		txpower;
    257       1.1  rpaulo #define RT2661_DEFAULT_TXPOWER	0
    258       1.1  rpaulo 
    259       1.1  rpaulo 	uint8_t		reserved1;
    260       1.1  rpaulo 
    261       1.1  rpaulo 	uint32_t	addr[RT2661_MAX_SCATTER];
    262       1.1  rpaulo 	uint16_t	len[RT2661_MAX_SCATTER];
    263       1.1  rpaulo 
    264       1.1  rpaulo 	uint16_t	reserved2;
    265       1.1  rpaulo } __packed;
    266       1.1  rpaulo 
    267       1.1  rpaulo /* Rx descriptor */
    268       1.1  rpaulo struct rt2661_rx_desc {
    269       1.1  rpaulo 	uint32_t	flags;
    270       1.1  rpaulo #define RT2661_RX_BUSY		(1 << 0)
    271       1.1  rpaulo #define RT2661_RX_DROP		(1 << 1)
    272       1.1  rpaulo #define RT2661_RX_CRC_ERROR	(1 << 6)
    273       1.1  rpaulo #define RT2661_RX_OFDM		(1 << 7)
    274       1.1  rpaulo #define RT2661_RX_PHY_ERROR	(1 << 8)
    275       1.1  rpaulo #define RT2661_RX_CIPHER_MASK	0x00000600
    276       1.1  rpaulo 
    277       1.1  rpaulo 	uint8_t		rate;
    278       1.1  rpaulo 	uint8_t		rssi;
    279       1.1  rpaulo 	uint8_t		reserved1;
    280       1.1  rpaulo 	uint8_t		offset;
    281       1.1  rpaulo 	uint32_t	iv;
    282       1.1  rpaulo 	uint32_t	eiv;
    283       1.1  rpaulo 	uint32_t	reserved2;
    284       1.1  rpaulo 	uint32_t	physaddr;
    285       1.1  rpaulo 	uint32_t	reserved3[10];
    286       1.1  rpaulo } __packed;
    287       1.1  rpaulo 
    288       1.1  rpaulo #define RAL_RF1	0
    289       1.1  rpaulo #define RAL_RF2	2
    290       1.1  rpaulo #define RAL_RF3	1
    291       1.1  rpaulo #define RAL_RF4	3
    292       1.1  rpaulo 
    293       1.1  rpaulo /* dual-band RF */
    294       1.1  rpaulo #define RT2661_RF_5225	1
    295       1.1  rpaulo #define RT2661_RF_5325	2
    296       1.1  rpaulo /* single-band RF */
    297       1.1  rpaulo #define RT2661_RF_2527	3
    298       1.1  rpaulo #define RT2661_RF_2529	4
    299       1.1  rpaulo 
    300       1.1  rpaulo #define RT2661_RX_DESC_BACK	4
    301       1.1  rpaulo 
    302       1.1  rpaulo #define RT2661_SMART_MODE	(1 << 0)
    303       1.1  rpaulo 
    304       1.1  rpaulo #define RT2661_BBPR94_DEFAULT	6
    305       1.1  rpaulo 
    306       1.1  rpaulo #define RT2661_SHIFT_D	3
    307       1.1  rpaulo #define RT2661_SHIFT_Q	4
    308       1.1  rpaulo 
    309       1.1  rpaulo #define RT2661_EEPROM_MAC01		0x02
    310       1.1  rpaulo #define RT2661_EEPROM_MAC23		0x03
    311       1.1  rpaulo #define RT2661_EEPROM_MAC45		0x04
    312       1.1  rpaulo #define RT2661_EEPROM_ANTENNA		0x10
    313       1.1  rpaulo #define RT2661_EEPROM_CONFIG2		0x11
    314       1.1  rpaulo #define RT2661_EEPROM_BBP_BASE		0x13
    315       1.1  rpaulo #define RT2661_EEPROM_TXPOWER		0x23
    316       1.1  rpaulo #define RT2661_EEPROM_FREQ_OFFSET	0x2f
    317       1.1  rpaulo #define RT2661_EEPROM_RSSI_2GHZ_OFFSET	0x4d
    318       1.1  rpaulo #define RT2661_EEPROM_RSSI_5GHZ_OFFSET	0x4e
    319       1.1  rpaulo 
    320       1.1  rpaulo #define RT2661_EEPROM_DELAY	1	/* minimum hold time (microsecond) */
    321       1.1  rpaulo 
    322       1.1  rpaulo /*
    323       1.1  rpaulo  * control and status registers access macros
    324       1.1  rpaulo  */
    325       1.1  rpaulo #define RAL_READ(sc, reg)						\
    326       1.1  rpaulo 	bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg))
    327       1.1  rpaulo 
    328       1.1  rpaulo #define RAL_READ_REGION_4(sc, offset, datap, count)			\
    329       1.1  rpaulo 	bus_space_read_region_4((sc)->sc_st, (sc)->sc_sh, (offset),	\
    330       1.1  rpaulo 	    (datap), (count))
    331       1.1  rpaulo 
    332       1.1  rpaulo #define RAL_WRITE(sc, reg, val)						\
    333       1.1  rpaulo 	bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
    334       1.1  rpaulo 
    335  1.1.66.2     mjf #define RAL_WRITE_1(sc, reg, val)					\
    336  1.1.66.2     mjf 	bus_space_write_1((sc)->sc_st, (sc)->sc_sh, (reg), (val))
    337  1.1.66.2     mjf 
    338  1.1.66.2     mjf #define RAL_RW_BARRIER_1(sc, reg)					\
    339  1.1.66.2     mjf 	bus_space_barrier((sc)->sc_st, (sc)->sc_sh, (reg), 1,		\
    340  1.1.66.2     mjf 	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE)
    341  1.1.66.2     mjf 
    342       1.1  rpaulo #define RAL_WRITE_REGION_1(sc, offset, datap, count)			\
    343       1.1  rpaulo 	bus_space_write_region_1((sc)->sc_st, (sc)->sc_sh, (offset),	\
    344       1.1  rpaulo 	    (datap), (count))
    345       1.1  rpaulo 
    346       1.1  rpaulo /*
    347       1.1  rpaulo  * EEPROM access macro
    348       1.1  rpaulo  */
    349       1.1  rpaulo #define RT2661_EEPROM_CTL(sc, val) do {					\
    350       1.1  rpaulo 	RAL_WRITE((sc), RT2661_E2PROM_CSR, (val));			\
    351       1.1  rpaulo 	DELAY(RT2661_EEPROM_DELAY);					\
    352       1.1  rpaulo } while (/* CONSTCOND */0)
    353  1.1.66.2     mjf 
    354  1.1.66.2     mjf /*
    355  1.1.66.2     mjf  * Default values for MAC registers; values taken from the reference driver.
    356  1.1.66.2     mjf  */
    357  1.1.66.2     mjf #define RT2661_DEF_MAC					\
    358  1.1.66.2     mjf 	{ RT2661_TXRX_CSR0,        0x0000b032 },	\
    359  1.1.66.2     mjf 	{ RT2661_TXRX_CSR1,        0x9eb39eb3 },	\
    360  1.1.66.2     mjf 	{ RT2661_TXRX_CSR2,        0x8a8b8c8d },	\
    361  1.1.66.2     mjf 	{ RT2661_TXRX_CSR3,        0x00858687 },	\
    362  1.1.66.2     mjf 	{ RT2661_TXRX_CSR7,        0x2e31353b },	\
    363  1.1.66.2     mjf 	{ RT2661_TXRX_CSR8,        0x2a2a2a2c },	\
    364  1.1.66.2     mjf 	{ RT2661_TXRX_CSR15,       0x0000000f },	\
    365  1.1.66.2     mjf 	{ RT2661_MAC_CSR6,         0x00000fff },	\
    366  1.1.66.2     mjf 	{ RT2661_MAC_CSR8,         0x016c030a },	\
    367  1.1.66.2     mjf 	{ RT2661_MAC_CSR10,        0x00000718 },	\
    368  1.1.66.2     mjf 	{ RT2661_MAC_CSR12,        0x00000004 },	\
    369  1.1.66.2     mjf 	{ RT2661_MAC_CSR13,        0x0000e000 },	\
    370  1.1.66.2     mjf 	{ RT2661_SEC_CSR0,         0x00000000 },	\
    371  1.1.66.2     mjf 	{ RT2661_SEC_CSR1,         0x00000000 },	\
    372  1.1.66.2     mjf 	{ RT2661_SEC_CSR5,         0x00000000 },	\
    373  1.1.66.2     mjf 	{ RT2661_PHY_CSR1,         0x000023b0 },	\
    374  1.1.66.2     mjf 	{ RT2661_PHY_CSR5,         0x060a100c },	\
    375  1.1.66.2     mjf 	{ RT2661_PHY_CSR6,         0x00080606 },	\
    376  1.1.66.2     mjf 	{ RT2661_PHY_CSR7,         0x00000a08 },	\
    377  1.1.66.2     mjf 	{ RT2661_PCI_CFG_CSR,      0x3cca4808 },	\
    378  1.1.66.2     mjf 	{ RT2661_AIFSN_CSR,        0x00002273 },	\
    379  1.1.66.2     mjf 	{ RT2661_CWMIN_CSR,        0x00002344 },	\
    380  1.1.66.2     mjf 	{ RT2661_CWMAX_CSR,        0x000034aa },	\
    381  1.1.66.2     mjf 	{ RT2661_TEST_MODE_CSR,    0x00000200 },	\
    382  1.1.66.2     mjf 	{ RT2661_M2H_CMD_DONE_CSR, 0xffffffff }
    383  1.1.66.2     mjf 
    384  1.1.66.2     mjf /*
    385  1.1.66.2     mjf  * Default values for BBP registers; values taken from the reference driver.
    386  1.1.66.2     mjf  */
    387  1.1.66.2     mjf #define RT2661_DEF_BBP	\
    388  1.1.66.2     mjf 	{   3, 0x00 },	\
    389  1.1.66.2     mjf 	{  15, 0x30 },	\
    390  1.1.66.2     mjf 	{  17, 0x20 },	\
    391  1.1.66.2     mjf 	{  21, 0xc8 },	\
    392  1.1.66.2     mjf 	{  22, 0x38 },	\
    393  1.1.66.2     mjf 	{  23, 0x06 },	\
    394  1.1.66.2     mjf 	{  24, 0xfe },	\
    395  1.1.66.2     mjf 	{  25, 0x0a },	\
    396  1.1.66.2     mjf 	{  26, 0x0d },	\
    397  1.1.66.2     mjf 	{  34, 0x12 },	\
    398  1.1.66.2     mjf 	{  37, 0x07 },	\
    399  1.1.66.2     mjf 	{  39, 0xf8 },	\
    400  1.1.66.2     mjf 	{  41, 0x60 },	\
    401  1.1.66.2     mjf 	{  53, 0x10 },	\
    402  1.1.66.2     mjf 	{  54, 0x18 },	\
    403  1.1.66.2     mjf 	{  60, 0x10 },	\
    404  1.1.66.2     mjf 	{  61, 0x04 },	\
    405  1.1.66.2     mjf 	{  62, 0x04 },	\
    406  1.1.66.2     mjf 	{  75, 0xfe },	\
    407  1.1.66.2     mjf 	{  86, 0xfe },	\
    408  1.1.66.2     mjf 	{  88, 0xfe },	\
    409  1.1.66.2     mjf 	{  90, 0x0f },	\
    410  1.1.66.2     mjf 	{  99, 0x00 },	\
    411  1.1.66.2     mjf 	{ 102, 0x16 },	\
    412  1.1.66.2     mjf 	{ 107, 0x04 }
    413  1.1.66.2     mjf 
    414  1.1.66.2     mjf /*
    415  1.1.66.2     mjf  * Default settings for RF registers; values taken from the reference driver.
    416  1.1.66.2     mjf  */
    417  1.1.66.2     mjf #define RT2661_RF5225_1					\
    418  1.1.66.2     mjf 	{   1, 0x00b33, 0x011e1, 0x1a014, 0x30282 },	\
    419  1.1.66.2     mjf 	{   2, 0x00b33, 0x011e1, 0x1a014, 0x30287 },	\
    420  1.1.66.2     mjf 	{   3, 0x00b33, 0x011e2, 0x1a014, 0x30282 },	\
    421  1.1.66.2     mjf 	{   4, 0x00b33, 0x011e2, 0x1a014, 0x30287 },	\
    422  1.1.66.2     mjf 	{   5, 0x00b33, 0x011e3, 0x1a014, 0x30282 },	\
    423  1.1.66.2     mjf 	{   6, 0x00b33, 0x011e3, 0x1a014, 0x30287 },	\
    424  1.1.66.2     mjf 	{   7, 0x00b33, 0x011e4, 0x1a014, 0x30282 },	\
    425  1.1.66.2     mjf 	{   8, 0x00b33, 0x011e4, 0x1a014, 0x30287 },	\
    426  1.1.66.2     mjf 	{   9, 0x00b33, 0x011e5, 0x1a014, 0x30282 },	\
    427  1.1.66.2     mjf 	{  10, 0x00b33, 0x011e5, 0x1a014, 0x30287 },	\
    428  1.1.66.2     mjf 	{  11, 0x00b33, 0x011e6, 0x1a014, 0x30282 },	\
    429  1.1.66.2     mjf 	{  12, 0x00b33, 0x011e6, 0x1a014, 0x30287 },	\
    430  1.1.66.2     mjf 	{  13, 0x00b33, 0x011e7, 0x1a014, 0x30282 },	\
    431  1.1.66.2     mjf 	{  14, 0x00b33, 0x011e8, 0x1a014, 0x30284 },	\
    432  1.1.66.2     mjf 							\
    433  1.1.66.2     mjf 	{  36, 0x00b33, 0x01266, 0x26014, 0x30288 },	\
    434  1.1.66.2     mjf 	{  40, 0x00b33, 0x01268, 0x26014, 0x30280 },	\
    435  1.1.66.2     mjf 	{  44, 0x00b33, 0x01269, 0x26014, 0x30282 },	\
    436  1.1.66.2     mjf 	{  48, 0x00b33, 0x0126a, 0x26014, 0x30284 },	\
    437  1.1.66.2     mjf 	{  52, 0x00b33, 0x0126b, 0x26014, 0x30286 },	\
    438  1.1.66.2     mjf 	{  56, 0x00b33, 0x0126c, 0x26014, 0x30288 },	\
    439  1.1.66.2     mjf 	{  60, 0x00b33, 0x0126e, 0x26014, 0x30280 },	\
    440  1.1.66.2     mjf 	{  64, 0x00b33, 0x0126f, 0x26014, 0x30282 },	\
    441  1.1.66.2     mjf 							\
    442  1.1.66.2     mjf 	{ 100, 0x00b33, 0x0128a, 0x2e014, 0x30280 },	\
    443  1.1.66.2     mjf 	{ 104, 0x00b33, 0x0128b, 0x2e014, 0x30282 },	\
    444  1.1.66.2     mjf 	{ 108, 0x00b33, 0x0128c, 0x2e014, 0x30284 },	\
    445  1.1.66.2     mjf 	{ 112, 0x00b33, 0x0128d, 0x2e014, 0x30286 },	\
    446  1.1.66.2     mjf 	{ 116, 0x00b33, 0x0128e, 0x2e014, 0x30288 },	\
    447  1.1.66.2     mjf 	{ 120, 0x00b33, 0x012a0, 0x2e014, 0x30280 },	\
    448  1.1.66.2     mjf 	{ 124, 0x00b33, 0x012a1, 0x2e014, 0x30282 },	\
    449  1.1.66.2     mjf 	{ 128, 0x00b33, 0x012a2, 0x2e014, 0x30284 },	\
    450  1.1.66.2     mjf 	{ 132, 0x00b33, 0x012a3, 0x2e014, 0x30286 },	\
    451  1.1.66.2     mjf 	{ 136, 0x00b33, 0x012a4, 0x2e014, 0x30288 },	\
    452  1.1.66.2     mjf 	{ 140, 0x00b33, 0x012a6, 0x2e014, 0x30280 },	\
    453  1.1.66.2     mjf 							\
    454  1.1.66.2     mjf 	{ 149, 0x00b33, 0x012a8, 0x2e014, 0x30287 },	\
    455  1.1.66.2     mjf 	{ 153, 0x00b33, 0x012a9, 0x2e014, 0x30289 },	\
    456  1.1.66.2     mjf 	{ 157, 0x00b33, 0x012ab, 0x2e014, 0x30281 },	\
    457  1.1.66.2     mjf 	{ 161, 0x00b33, 0x012ac, 0x2e014, 0x30283 },	\
    458  1.1.66.2     mjf 	{ 165, 0x00b33, 0x012ad, 0x2e014, 0x30285 }
    459  1.1.66.2     mjf 
    460  1.1.66.2     mjf #define RT2661_RF5225_2					\
    461  1.1.66.2     mjf 	{   1, 0x00b33, 0x011e1, 0x1a014, 0x30282 },	\
    462  1.1.66.2     mjf 	{   2, 0x00b33, 0x011e1, 0x1a014, 0x30287 },	\
    463  1.1.66.2     mjf 	{   3, 0x00b33, 0x011e2, 0x1a014, 0x30282 },	\
    464  1.1.66.2     mjf 	{   4, 0x00b33, 0x011e2, 0x1a014, 0x30287 },	\
    465  1.1.66.2     mjf 	{   5, 0x00b33, 0x011e3, 0x1a014, 0x30282 },	\
    466  1.1.66.2     mjf 	{   6, 0x00b33, 0x011e3, 0x1a014, 0x30287 },	\
    467  1.1.66.2     mjf 	{   7, 0x00b33, 0x011e4, 0x1a014, 0x30282 },	\
    468  1.1.66.2     mjf 	{   8, 0x00b33, 0x011e4, 0x1a014, 0x30287 },	\
    469  1.1.66.2     mjf 	{   9, 0x00b33, 0x011e5, 0x1a014, 0x30282 },	\
    470  1.1.66.2     mjf 	{  10, 0x00b33, 0x011e5, 0x1a014, 0x30287 },	\
    471  1.1.66.2     mjf 	{  11, 0x00b33, 0x011e6, 0x1a014, 0x30282 },	\
    472  1.1.66.2     mjf 	{  12, 0x00b33, 0x011e6, 0x1a014, 0x30287 },	\
    473  1.1.66.2     mjf 	{  13, 0x00b33, 0x011e7, 0x1a014, 0x30282 },	\
    474  1.1.66.2     mjf 	{  14, 0x00b33, 0x011e8, 0x1a014, 0x30284 },	\
    475  1.1.66.2     mjf 							\
    476  1.1.66.2     mjf 	{  36, 0x00b35, 0x11206, 0x26014, 0x30280 },	\
    477  1.1.66.2     mjf 	{  40, 0x00b34, 0x111a0, 0x26014, 0x30280 },	\
    478  1.1.66.2     mjf 	{  44, 0x00b34, 0x111a1, 0x26014, 0x30286 },	\
    479  1.1.66.2     mjf 	{  48, 0x00b34, 0x111a3, 0x26014, 0x30282 },	\
    480  1.1.66.2     mjf 	{  52, 0x00b34, 0x111a4, 0x26014, 0x30288 },	\
    481  1.1.66.2     mjf 	{  56, 0x00b34, 0x111a6, 0x26014, 0x30284 },	\
    482  1.1.66.2     mjf 	{  60, 0x00b34, 0x111a8, 0x26014, 0x30280 },	\
    483  1.1.66.2     mjf 	{  64, 0x00b34, 0x111a9, 0x26014, 0x30286 },	\
    484  1.1.66.2     mjf 							\
    485  1.1.66.2     mjf 	{ 100, 0x00b35, 0x11226, 0x2e014, 0x30280 },	\
    486  1.1.66.2     mjf 	{ 104, 0x00b35, 0x11228, 0x2e014, 0x30280 },	\
    487  1.1.66.2     mjf 	{ 108, 0x00b35, 0x1122a, 0x2e014, 0x30280 },	\
    488  1.1.66.2     mjf 	{ 112, 0x00b35, 0x1122c, 0x2e014, 0x30280 },	\
    489  1.1.66.2     mjf 	{ 116, 0x00b35, 0x1122e, 0x2e014, 0x30280 },	\
    490  1.1.66.2     mjf 	{ 120, 0x00b34, 0x111c0, 0x2e014, 0x30280 },	\
    491  1.1.66.2     mjf 	{ 124, 0x00b34, 0x111c1, 0x2e014, 0x30286 },	\
    492  1.1.66.2     mjf 	{ 128, 0x00b34, 0x111c3, 0x2e014, 0x30282 },	\
    493  1.1.66.2     mjf 	{ 132, 0x00b34, 0x111c4, 0x2e014, 0x30288 },	\
    494  1.1.66.2     mjf 	{ 136, 0x00b34, 0x111c6, 0x2e014, 0x30284 },	\
    495  1.1.66.2     mjf 	{ 140, 0x00b34, 0x111c8, 0x2e014, 0x30280 },	\
    496  1.1.66.2     mjf 							\
    497  1.1.66.2     mjf 	{ 149, 0x00b34, 0x111cb, 0x2e014, 0x30286 },	\
    498  1.1.66.2     mjf 	{ 153, 0x00b34, 0x111cd, 0x2e014, 0x30282 },	\
    499  1.1.66.2     mjf 	{ 157, 0x00b35, 0x11242, 0x2e014, 0x30285 },	\
    500  1.1.66.2     mjf 	{ 161, 0x00b35, 0x11244, 0x2e014, 0x30285 },	\
    501  1.1.66.2     mjf 	{ 165, 0x00b35, 0x11246, 0x2e014, 0x30285 }
    502