1*8000SQuaker.Fang@Sun.COM /* 2*8000SQuaker.Fang@Sun.COM * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3*8000SQuaker.Fang@Sun.COM * Use is subject to license terms. 4*8000SQuaker.Fang@Sun.COM */ 5*8000SQuaker.Fang@Sun.COM 6*8000SQuaker.Fang@Sun.COM /* 7*8000SQuaker.Fang@Sun.COM * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr> 8*8000SQuaker.Fang@Sun.COM * Copyright (c) 2006 Niall O'Higgins <niallo@openbsd.org> 9*8000SQuaker.Fang@Sun.COM * 10*8000SQuaker.Fang@Sun.COM * Permission to use, copy, modify, and distribute this software for any 11*8000SQuaker.Fang@Sun.COM * purpose with or without fee is hereby granted, provided that the above 12*8000SQuaker.Fang@Sun.COM * copyright notice and this permission notice appear in all copies. 13*8000SQuaker.Fang@Sun.COM * 14*8000SQuaker.Fang@Sun.COM * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 15*8000SQuaker.Fang@Sun.COM * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 16*8000SQuaker.Fang@Sun.COM * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 17*8000SQuaker.Fang@Sun.COM * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 18*8000SQuaker.Fang@Sun.COM * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 19*8000SQuaker.Fang@Sun.COM * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 20*8000SQuaker.Fang@Sun.COM * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 21*8000SQuaker.Fang@Sun.COM */ 22*8000SQuaker.Fang@Sun.COM #ifndef _RUM_REG_H 23*8000SQuaker.Fang@Sun.COM #define _RUM_REG_H 24*8000SQuaker.Fang@Sun.COM 25*8000SQuaker.Fang@Sun.COM #ifdef __cplusplus 26*8000SQuaker.Fang@Sun.COM extern "C" { 27*8000SQuaker.Fang@Sun.COM #endif 28*8000SQuaker.Fang@Sun.COM 29*8000SQuaker.Fang@Sun.COM #define RT2573_NOISE_FLOOR -95 30*8000SQuaker.Fang@Sun.COM 31*8000SQuaker.Fang@Sun.COM #define RT2573_TX_DESC_SIZE (sizeof (struct rum_tx_desc)) 32*8000SQuaker.Fang@Sun.COM #define RT2573_RX_DESC_SIZE (sizeof (struct rum_rx_desc)) 33*8000SQuaker.Fang@Sun.COM 34*8000SQuaker.Fang@Sun.COM #define RT2573_CONFIG_NO 1 35*8000SQuaker.Fang@Sun.COM #define RT2573_IFACE_INDEX 0 36*8000SQuaker.Fang@Sun.COM 37*8000SQuaker.Fang@Sun.COM #define RT2573_MCU_CNTL 0x01 38*8000SQuaker.Fang@Sun.COM #define RT2573_WRITE_MAC 0x02 39*8000SQuaker.Fang@Sun.COM #define RT2573_READ_MAC 0x03 40*8000SQuaker.Fang@Sun.COM #define RT2573_WRITE_MULTI_MAC 0x06 41*8000SQuaker.Fang@Sun.COM #define RT2573_READ_MULTI_MAC 0x07 42*8000SQuaker.Fang@Sun.COM #define RT2573_READ_EEPROM 0x09 43*8000SQuaker.Fang@Sun.COM #define RT2573_WRITE_LED 0x0a 44*8000SQuaker.Fang@Sun.COM 45*8000SQuaker.Fang@Sun.COM /* 46*8000SQuaker.Fang@Sun.COM * Control and status registers. 47*8000SQuaker.Fang@Sun.COM */ 48*8000SQuaker.Fang@Sun.COM #define RT2573_AIFSN_CSR 0x0400 49*8000SQuaker.Fang@Sun.COM #define RT2573_CWMIN_CSR 0x0404 50*8000SQuaker.Fang@Sun.COM #define RT2573_CWMAX_CSR 0x0408 51*8000SQuaker.Fang@Sun.COM #define RT2573_MCU_CODE_BASE 0x0800 52*8000SQuaker.Fang@Sun.COM #define RT2573_HW_BEACON_BASE0 0x2400 53*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR0 0x3000 54*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR1 0x3004 55*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR2 0x3008 56*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR3 0x300c 57*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR4 0x3010 58*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR5 0x3014 59*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR6 0x3018 60*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR7 0x301c 61*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR8 0x3020 62*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR9 0x3024 63*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR10 0x3028 64*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR11 0x302c 65*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR12 0x3030 66*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR13 0x3034 67*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR14 0x3038 68*8000SQuaker.Fang@Sun.COM #define RT2573_MAC_CSR15 0x303c 69*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR0 0x3040 70*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR1 0x3044 71*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR2 0x3048 72*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR3 0x304c 73*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR4 0x3050 74*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR5 0x3054 75*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR6 0x3058 76*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR7 0x305c 77*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR8 0x3060 78*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR9 0x3064 79*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR10 0x3068 80*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR11 0x306c 81*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR12 0x3070 82*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR13 0x3074 83*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR14 0x3078 84*8000SQuaker.Fang@Sun.COM #define RT2573_TXRX_CSR15 0x307c 85*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR0 0x3080 86*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR1 0x3084 87*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR2 0x3088 88*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR3 0x308c 89*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR4 0x3090 90*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR5 0x3094 91*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR6 0x3098 92*8000SQuaker.Fang@Sun.COM #define RT2573_PHY_CSR7 0x309c 93*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR0 0x30a0 94*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR1 0x30a4 95*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR2 0x30a8 96*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR3 0x30ac 97*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR4 0x30b0 98*8000SQuaker.Fang@Sun.COM #define RT2573_SEC_CSR5 0x30b4 99*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR0 0x30c0 100*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR1 0x30c4 101*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR2 0x30c8 102*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR3 0x30cc 103*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR4 0x30d0 104*8000SQuaker.Fang@Sun.COM #define RT2573_STA_CSR5 0x30d4 105*8000SQuaker.Fang@Sun.COM 106*8000SQuaker.Fang@Sun.COM 107*8000SQuaker.Fang@Sun.COM /* possible flags for register RT2573_MAC_CSR1 */ 108*8000SQuaker.Fang@Sun.COM #define RT2573_RESET_ASIC (1 << 0) 109*8000SQuaker.Fang@Sun.COM #define RT2573_RESET_BBP (1 << 1) 110*8000SQuaker.Fang@Sun.COM #define RT2573_HOST_READY (1 << 2) 111*8000SQuaker.Fang@Sun.COM 112*8000SQuaker.Fang@Sun.COM /* possible flags for register MAC_CSR5 */ 113*8000SQuaker.Fang@Sun.COM #define RT2573_ONE_BSSID 3 114*8000SQuaker.Fang@Sun.COM 115*8000SQuaker.Fang@Sun.COM /* possible flags for register TXRX_CSR0 */ 116*8000SQuaker.Fang@Sun.COM /* Tx filter flags are in the low 16 bits */ 117*8000SQuaker.Fang@Sun.COM #define RT2573_AUTO_TX_SEQ (1 << 15) 118*8000SQuaker.Fang@Sun.COM /* Rx filter flags are in the high 16 bits */ 119*8000SQuaker.Fang@Sun.COM #define RT2573_DISABLE_RX (1 << 16) 120*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_CRC_ERROR (1 << 17) 121*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_PHY_ERROR (1 << 18) 122*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_CTL (1 << 19) 123*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_NOT_TO_ME (1 << 20) 124*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_TODS (1 << 21) 125*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_VER_ERROR (1 << 22) 126*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_MULTICAST (1 << 23) 127*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_BROADCAST (1 << 24) 128*8000SQuaker.Fang@Sun.COM #define RT2573_DROP_ACKCTS (1 << 25) 129*8000SQuaker.Fang@Sun.COM 130*8000SQuaker.Fang@Sun.COM /* possible flags for register TXRX_CSR4 */ 131*8000SQuaker.Fang@Sun.COM #define RT2573_SHORT_PREAMBLE (1 << 18) 132*8000SQuaker.Fang@Sun.COM #define RT2573_MRR_ENABLED (1 << 19) 133*8000SQuaker.Fang@Sun.COM #define RT2573_MRR_CCK_FALLBACK (1 << 22) 134*8000SQuaker.Fang@Sun.COM 135*8000SQuaker.Fang@Sun.COM /* possible flags for register TXRX_CSR9 */ 136*8000SQuaker.Fang@Sun.COM #define RT2573_TSF_TICKING (1 << 16) 137*8000SQuaker.Fang@Sun.COM #define RT2573_TSF_MODE(x) (((x) & 0x3) << 17) 138*8000SQuaker.Fang@Sun.COM /* TBTT stands for Target Beacon Transmission Time */ 139*8000SQuaker.Fang@Sun.COM #define RT2573_ENABLE_TBTT (1 << 19) 140*8000SQuaker.Fang@Sun.COM #define RT2573_GENERATE_BEACON (1 << 20) 141*8000SQuaker.Fang@Sun.COM 142*8000SQuaker.Fang@Sun.COM /* possible flags for register PHY_CSR0 */ 143*8000SQuaker.Fang@Sun.COM #define RT2573_PA_PE_2GHZ (1 << 16) 144*8000SQuaker.Fang@Sun.COM #define RT2573_PA_PE_5GHZ (1 << 17) 145*8000SQuaker.Fang@Sun.COM 146*8000SQuaker.Fang@Sun.COM /* possible flags for register PHY_CSR3 */ 147*8000SQuaker.Fang@Sun.COM #define RT2573_BBP_READ (1 << 15) 148*8000SQuaker.Fang@Sun.COM #define RT2573_BBP_BUSY (1 << 16) 149*8000SQuaker.Fang@Sun.COM /* possible flags for register PHY_CSR4 */ 150*8000SQuaker.Fang@Sun.COM #define RT2573_RF_20BIT (20 << 24) 151*8000SQuaker.Fang@Sun.COM #define RT2573_RF_BUSY ((uint32_t)1 << 31) 152*8000SQuaker.Fang@Sun.COM 153*8000SQuaker.Fang@Sun.COM /* LED values */ 154*8000SQuaker.Fang@Sun.COM #define RT2573_LED_RADIO (1 << 8) 155*8000SQuaker.Fang@Sun.COM #define RT2573_LED_G (1 << 9) 156*8000SQuaker.Fang@Sun.COM #define RT2573_LED_A (1 << 10) 157*8000SQuaker.Fang@Sun.COM #define RT2573_LED_ON 0x1e1e 158*8000SQuaker.Fang@Sun.COM #define RT2573_LED_OFF 0x0 159*8000SQuaker.Fang@Sun.COM 160*8000SQuaker.Fang@Sun.COM #define RT2573_MCU_RUN (1 << 3) 161*8000SQuaker.Fang@Sun.COM 162*8000SQuaker.Fang@Sun.COM #define RT2573_SMART_MODE (1 << 0) 163*8000SQuaker.Fang@Sun.COM 164*8000SQuaker.Fang@Sun.COM #define RT2573_BBPR94_DEFAULT 6 165*8000SQuaker.Fang@Sun.COM 166*8000SQuaker.Fang@Sun.COM #define RT2573_BBP_WRITE (1 << 15) 167*8000SQuaker.Fang@Sun.COM 168*8000SQuaker.Fang@Sun.COM /* dual-band RF */ 169*8000SQuaker.Fang@Sun.COM #define RT2573_RF_5226 1 170*8000SQuaker.Fang@Sun.COM #define RT2573_RF_5225 3 171*8000SQuaker.Fang@Sun.COM /* single-band RF */ 172*8000SQuaker.Fang@Sun.COM #define RT2573_RF_2528 2 173*8000SQuaker.Fang@Sun.COM #define RT2573_RF_2527 4 174*8000SQuaker.Fang@Sun.COM 175*8000SQuaker.Fang@Sun.COM #define RT2573_BBP_VERSION 0 176*8000SQuaker.Fang@Sun.COM 177*8000SQuaker.Fang@Sun.COM #pragma pack(1) 178*8000SQuaker.Fang@Sun.COM struct rum_tx_desc { 179*8000SQuaker.Fang@Sun.COM uint32_t flags; 180*8000SQuaker.Fang@Sun.COM #define RT2573_TX_BURST (1 << 0) 181*8000SQuaker.Fang@Sun.COM #define RT2573_TX_VALID (1 << 1) 182*8000SQuaker.Fang@Sun.COM #define RT2573_TX_MORE_FRAG (1 << 2) 183*8000SQuaker.Fang@Sun.COM #define RT2573_TX_NEED_ACK (1 << 3) 184*8000SQuaker.Fang@Sun.COM #define RT2573_TX_TIMESTAMP (1 << 4) 185*8000SQuaker.Fang@Sun.COM #define RT2573_TX_OFDM (1 << 5) 186*8000SQuaker.Fang@Sun.COM #define RT2573_TX_IFS_SIFS (1 << 6) 187*8000SQuaker.Fang@Sun.COM #define RT2573_TX_LONG_RETRY (1 << 7) 188*8000SQuaker.Fang@Sun.COM 189*8000SQuaker.Fang@Sun.COM uint16_t wme; 190*8000SQuaker.Fang@Sun.COM #define RT2573_QID(v) (v) 191*8000SQuaker.Fang@Sun.COM #define RT2573_AIFSN(v) ((v) << 4) 192*8000SQuaker.Fang@Sun.COM #define RT2573_LOGCWMIN(v) ((v) << 8) 193*8000SQuaker.Fang@Sun.COM #define RT2573_LOGCWMAX(v) ((v) << 12) 194*8000SQuaker.Fang@Sun.COM 195*8000SQuaker.Fang@Sun.COM uint16_t xflags; 196*8000SQuaker.Fang@Sun.COM #define RT2573_TX_HWSEQ (1 << 12) 197*8000SQuaker.Fang@Sun.COM 198*8000SQuaker.Fang@Sun.COM uint8_t plcp_signal; 199*8000SQuaker.Fang@Sun.COM uint8_t plcp_service; 200*8000SQuaker.Fang@Sun.COM #define RT2573_PLCP_LENGEXT 0x80 201*8000SQuaker.Fang@Sun.COM 202*8000SQuaker.Fang@Sun.COM uint8_t plcp_length_lo; 203*8000SQuaker.Fang@Sun.COM uint8_t plcp_length_hi; 204*8000SQuaker.Fang@Sun.COM 205*8000SQuaker.Fang@Sun.COM uint32_t iv; 206*8000SQuaker.Fang@Sun.COM uint32_t eiv; 207*8000SQuaker.Fang@Sun.COM 208*8000SQuaker.Fang@Sun.COM uint8_t offset; 209*8000SQuaker.Fang@Sun.COM uint8_t qid; 210*8000SQuaker.Fang@Sun.COM uint8_t txpower; 211*8000SQuaker.Fang@Sun.COM #define RT2573_DEFAULT_TXPOWER 0 212*8000SQuaker.Fang@Sun.COM 213*8000SQuaker.Fang@Sun.COM uint8_t reserved; 214*8000SQuaker.Fang@Sun.COM }; 215*8000SQuaker.Fang@Sun.COM #pragma pack() 216*8000SQuaker.Fang@Sun.COM 217*8000SQuaker.Fang@Sun.COM #pragma pack(1) 218*8000SQuaker.Fang@Sun.COM struct rum_rx_desc { 219*8000SQuaker.Fang@Sun.COM uint32_t flags; 220*8000SQuaker.Fang@Sun.COM #define RT2573_RX_BUSY (1 << 0) 221*8000SQuaker.Fang@Sun.COM #define RT2573_RX_DROP (1 << 1) 222*8000SQuaker.Fang@Sun.COM #define RT2573_RX_CRC_ERROR (1 << 6) 223*8000SQuaker.Fang@Sun.COM #define RT2573_RX_OFDM (1 << 7) 224*8000SQuaker.Fang@Sun.COM 225*8000SQuaker.Fang@Sun.COM uint8_t rate; 226*8000SQuaker.Fang@Sun.COM uint8_t rssi; 227*8000SQuaker.Fang@Sun.COM uint8_t reserved1; 228*8000SQuaker.Fang@Sun.COM uint8_t offset; 229*8000SQuaker.Fang@Sun.COM uint32_t iv; 230*8000SQuaker.Fang@Sun.COM uint32_t eiv; 231*8000SQuaker.Fang@Sun.COM uint32_t reserved2[2]; 232*8000SQuaker.Fang@Sun.COM }; 233*8000SQuaker.Fang@Sun.COM #pragma pack() 234*8000SQuaker.Fang@Sun.COM 235*8000SQuaker.Fang@Sun.COM #define RT2573_RF1 0 236*8000SQuaker.Fang@Sun.COM #define RT2573_RF2 2 237*8000SQuaker.Fang@Sun.COM #define RT2573_RF3 1 238*8000SQuaker.Fang@Sun.COM #define RT2573_RF4 3 239*8000SQuaker.Fang@Sun.COM 240*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_MACBBP 0x0000 241*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_ADDRESS 0x0004 242*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_ANTENNA 0x0020 243*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_CONFIG2 0x0022 244*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_BBP_BASE 0x0026 245*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_TXPOWER 0x0046 246*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_FREQ_OFFSET 0x005e 247*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_RSSI_2GHZ_OFFSET 0x009a 248*8000SQuaker.Fang@Sun.COM #define RT2573_EEPROM_RSSI_5GHZ_OFFSET 0x009c 249*8000SQuaker.Fang@Sun.COM 250*8000SQuaker.Fang@Sun.COM #ifdef __cplusplus 251*8000SQuaker.Fang@Sun.COM } 252*8000SQuaker.Fang@Sun.COM #endif 253*8000SQuaker.Fang@Sun.COM 254*8000SQuaker.Fang@Sun.COM #endif /* _RUM_REG_H */ 255