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