Annotation of sys/dev/ic/rtwreg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: rtwreg.h,v 1.13 2006/01/05 05:40:35 jsg Exp $ */
! 2: /* $NetBSD: rtwreg.h,v 1.12 2005/01/16 11:50:43 dyoung Exp $ */
! 3: /*-
! 4: * Copyright (c) 2004, 2005 David Young. All rights reserved.
! 5: *
! 6: * Programmed for NetBSD by David Young.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: * 3. The name of David Young may not be used to endorse or promote
! 17: * products derived from this software without specific prior
! 18: * written permission.
! 19: *
! 20: * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
! 21: * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
! 22: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
! 23: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David
! 24: * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
! 25: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
! 26: * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
! 27: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
! 28: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
! 29: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 30: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
! 31: * OF SUCH DAMAGE.
! 32: */
! 33: /* Macros for bit twiddling. */
! 34: /* TBD factor w/ dev/ic/atwreg.h. */
! 35:
! 36: #ifndef _BIT_TWIDDLE
! 37: #define _BIT_TWIDDLE
! 38: /* nth bit, BIT(0) == 0x1. */
! 39: #define BIT(n) (((n) == 32) ? 0 : ((u_int32_t)1 << (n)))
! 40:
! 41: /* bits m through n, m < n. */
! 42: #define BITS(m, n) ((BIT(MAX((m), (n)) + 1) - 1) ^ (BIT(MIN((m), (n))) - 1))
! 43:
! 44: /* find least significant bit that is set */
! 45: #define LOWEST_SET_BIT(x) ((((x) - 1) & (x)) ^ (x))
! 46:
! 47: /* for x a power of two and p a non-negative integer, is x a greater
! 48: * power than 2**p?
! 49: */
! 50: #define GTEQ_POWER(x, p) (((u_long)(x) >> (p)) != 0)
! 51:
! 52: #define MASK_TO_SHIFT2(m) (GTEQ_POWER(LOWEST_SET_BIT((m)), 1) ? 1 : 0)
! 53:
! 54: #define MASK_TO_SHIFT4(m) \
! 55: (GTEQ_POWER(LOWEST_SET_BIT((m)), 2) \
! 56: ? 2 + MASK_TO_SHIFT2((m) >> 2) \
! 57: : MASK_TO_SHIFT2((m)))
! 58:
! 59: #define MASK_TO_SHIFT8(m) \
! 60: (GTEQ_POWER(LOWEST_SET_BIT((m)), 4) \
! 61: ? 4 + MASK_TO_SHIFT4((m) >> 4) \
! 62: : MASK_TO_SHIFT4((m)))
! 63:
! 64: #define MASK_TO_SHIFT16(m) \
! 65: (GTEQ_POWER(LOWEST_SET_BIT((m)), 8) \
! 66: ? 8 + MASK_TO_SHIFT8((m) >> 8) \
! 67: : MASK_TO_SHIFT8((m)))
! 68:
! 69: #define MASK_TO_SHIFT(m) \
! 70: (GTEQ_POWER(LOWEST_SET_BIT((m)), 16) \
! 71: ? 16 + MASK_TO_SHIFT16((m) >> 16) \
! 72: : MASK_TO_SHIFT16((m)))
! 73:
! 74: #define MASK_AND_RSHIFT(x, mask) (((x) & (mask)) >> MASK_TO_SHIFT(mask))
! 75: #define LSHIFT(x, mask) ((x) << MASK_TO_SHIFT(mask))
! 76: #define MASK_AND_REPLACE(reg, val, mask) ((reg & ~mask) | LSHIFT(val, mask))
! 77: #define PRESHIFT(m) MASK_AND_RSHIFT((m), (m))
! 78:
! 79: #endif /* _BIT_TWIDDLE */
! 80:
! 81: /* RTL8180/RTL8185 Host Control and Status Registers */
! 82:
! 83: #define RTW_IDR0 0x00 /* ID Register: MAC addr, 6 bytes.
! 84: * Auto-loaded from EEPROM. Read by byte,
! 85: * by word, or by double word, but write
! 86: * only by double word.
! 87: */
! 88: #define RTW_IDR1 0x04
! 89:
! 90: #define RTW_MAR0 0x08 /* Multicast filter, 64b. */
! 91: #define RTW_MAR1 0x0c
! 92:
! 93: #define RTW_TSFTRL 0x18 /* Timing Synchronization Function Timer
! 94: * Register, low word, 32b, read-only.
! 95: */
! 96: #define RTW_TSFTRH 0x1c /* High word, 32b, read-only. */
! 97: #define RTW_TLPDA 0x20 /* Transmit Low Priority Descriptors Start
! 98: * Address, 32b, 256-byte alignment.
! 99: */
! 100: #define RTW_TNPDA 0x24 /* Transmit Normal Priority Descriptors Start
! 101: * Address, 32b, 256-byte alignment.
! 102: */
! 103: #define RTW_THPDA 0x28 /* Transmit High Priority Descriptors Start
! 104: * Address, 32b, 256-byte alignment.
! 105: */
! 106:
! 107: #define RTW_BRSR 0x2c /* Basic Rate Set Register, 16b */
! 108: #define RTW8180_BRSR_BPLCP BIT(8) /* 1: Short PLCP CTS/ACK header */
! 109: #define RTW8180_BRSR_MBR_MASK BITS(1,0) /* Basic Service Rate */
! 110: #define RTW8180_BRSR_MBR_1MBPS LSHIFT(0, RTW8180_BRSR_MBR_MASK)
! 111: #define RTW8180_BRSR_MBR_2MBPS LSHIFT(1, RTW8180_BRSR_MBR_MASK)
! 112: #define RTW8180_BRSR_MBR_5MBPS LSHIFT(2, RTW8180_BRSR_MBR_MASK)
! 113: #define RTW8180_BRSR_MBR_11MBPS LSHIFT(3, RTW8180_BRSR_MBR_MASK)
! 114: #define RTW8185_BRSR_MBR_MASK BITS(11, 0) /* Basic Service Rate */
! 115: #define RTW8185_BRSR_MBR_1MBPS BIT(0)
! 116: #define RTW8185_BRSR_MBR_2MBPS BIT(1)
! 117: #define RTW8185_BRSR_MBR_5MBPS BIT(2)
! 118: #define RTW8185_BRSR_MBR_11MBPS BIT(3)
! 119: #define RTW8185_BRSR_MBR_6MBPS BIT(4)
! 120: #define RTW8185_BRSR_MBR_9MBPS BIT(5)
! 121: #define RTW8185_BRSR_MBR_12MBPS BIT(6)
! 122: #define RTW8185_BRSR_MBR_18MBPS BIT(7)
! 123: #define RTW8185_BRSR_MBR_24MBPS BIT(8)
! 124: #define RTW8185_BRSR_MBR_36MBPS BIT(9)
! 125: #define RTW8185_BRSR_MBR_48MBPS BIT(10)
! 126: #define RTW8185_BRSR_MBR_54MBPS BIT(11)
! 127:
! 128: #define RTW_BSSID 0x2e
! 129: /* BSSID, 6 bytes */
! 130: #define RTW_BSSID16 0x2e /* first two bytes */
! 131: #define RTW_BSSID32 (0x2e + 4) /* remaining four bytes */
! 132: #define RTW_BSSID0 RTW_BSSID16 /* BSSID[0], 8b */
! 133: #define RTW_BSSID1 (RTW_BSSID0 + 1) /* BSSID[1], 8b */
! 134: #define RTW_BSSID2 (RTW_BSSID1 + 1) /* BSSID[2], 8b */
! 135: #define RTW_BSSID3 (RTW_BSSID2 + 1) /* BSSID[3], 8b */
! 136: #define RTW_BSSID4 (RTW_BSSID3 + 1) /* BSSID[4], 8b */
! 137: #define RTW_BSSID5 (RTW_BSSID4 + 1) /* BSSID[5], 8b */
! 138:
! 139: #define RTW8185_RR 0x34 /* Response Rate Register, 8b */
! 140: #define RTW8185_RR_MAX BIT(7, 4)
! 141: #define RTW8185_RR_MAX_1MPBS LSHIFT(0, RTW8185_RR_MAX_MASK)
! 142: #define RTW8185_RR_MAX_2MPBS LSHIFT(1, RTW8185_RR_MAX_MASK)
! 143: #define RTW8185_RR_MAX_5MPBS LSHIFT(2, RTW8185_RR_MAX_MASK)
! 144: #define RTW8185_RR_MAX_11MPBS LSHIFT(3, RTW8185_RR_MAX_MASK)
! 145: #define RTW8185_RR_MAX_6MPBS LSHIFT(4, RTW8185_RR_MAX_MASK)
! 146: #define RTW8185_RR_MAX_9MPBS LSHIFT(5, RTW8185_RR_MAX_MASK)
! 147: #define RTW8185_RR_MAX_12MPBS LSHIFT(6, RTW8185_RR_MAX_MASK)
! 148: #define RTW8185_RR_MAX_18MPBS LSHIFT(7, RTW8185_RR_MAX_MASK)
! 149: #define RTW8185_RR_MAX_24MPBS LSHIFT(8, RTW8185_RR_MAX_MASK)
! 150: #define RTW8185_RR_MAX_36MPBS LSHIFT(9, RTW8185_RR_MAX_MASK)
! 151: #define RTW8185_RR_MAX_48MPBS LSHIFT(10, RTW8185_RR_MAX_MASK)
! 152: #define RTW8185_RR_MAX_54MPBS LSHIFT(11, RTW8185_RR_MAX_MASK)
! 153: #define RTW8185_RR_MIN_MASK BIT(3, 0)
! 154: #define RTW8185_RR_MIN_1MPBS LSHIFT(0, RTW8185_RR_MIN_MASK)
! 155: #define RTW8185_RR_MIN_2MPBS LSHIFT(1, RTW8185_RR_MIN_MASK)
! 156: #define RTW8185_RR_MIN_5MPBS LSHIFT(2, RTW8185_RR_MIN_MASK)
! 157: #define RTW8185_RR_MIN_11MPBS LSHIFT(3, RTW8185_RR_MIN_MASK)
! 158: #define RTW8185_RR_MIN_6MPBS LSHIFT(4, RTW8185_RR_MIN_MASK)
! 159: #define RTW8185_RR_MIN_9MPBS LSHIFT(5, RTW8185_RR_MIN_MASK)
! 160: #define RTW8185_RR_MIN_12MPBS LSHIFT(6, RTW8185_RR_MIN_MASK)
! 161: #define RTW8185_RR_MIN_18MPBS LSHIFT(7, RTW8185_RR_MIN_MASK)
! 162: #define RTW8185_RR_MIN_24MPBS LSHIFT(8, RTW8185_RR_MIN_MASK)
! 163: #define RTW8185_RR_MIN_36MPBS LSHIFT(9, RTW8185_RR_MIN_MASK)
! 164: #define RTW8185_RR_MIN_48MPBS LSHIFT(10, RTW8185_RR_MIN_MASK)
! 165: #define RTW8185_RR_MIN_54MPBS LSHIFT(11, RTW8185_RR_MIN_MASK)
! 166:
! 167: #define RTW8185_EIFS_TIMER 0x35 /* Extended IFS Register, 16b ??? */
! 168:
! 169: #define RTW_CR 0x37 /* Command Register, 8b */
! 170: #define RTW_CR_RST BIT(4) /* Reset: host sets to 1 to disable
! 171: * transmitter & receiver, reinitialize FIFO.
! 172: * RTL8180L sets to 0 to signal completion.
! 173: */
! 174: #define RTW_CR_RE BIT(3) /* Receiver Enable: host enables receiver
! 175: * by writing 1. RTL8180L indicates receiver
! 176: * is active with 1. After power-up, host
! 177: * must wait for reset before writing.
! 178: */
! 179: #define RTW_CR_TE BIT(2) /* Transmitter Enable: host enables transmitter
! 180: * by writing 1. RTL8180L indicates transmitter
! 181: * is active with 1. After power-up, host
! 182: * must wait for reset before writing.
! 183: */
! 184: #define RTW_CR_MULRW BIT(0) /* PCI Multiple Read/Write enable: 1 enables,
! 185: * 0 disables. XXX RTL8180, only?
! 186: */
! 187:
! 188: #define RTW_IMR 0x3c /* Interrupt Mask Register, 16b */
! 189: #define RTW_ISR 0x3e /* Interrupt status register, 16b */
! 190:
! 191: #define RTW_INTR_TXFOVW BIT(15) /* Tx FIFO underrflow */
! 192: #define RTW_INTR_TIMEOUT BIT(14) /* Time Out: 1 indicates
! 193: * RTW_TSFTR[0:31] = RTW_TINT
! 194: */
! 195: #define RTW_INTR_BCNINT BIT(13) /* Beacon Time Out: time for host to
! 196: * prepare beacon:
! 197: * RTW_TSFTR % (RTW_BCNITV_BCNITV * TU) =
! 198: * (RTW_BCNITV_BCNITV * TU - RTW_BINTRITV)
! 199: */
! 200: #define RTW_INTR_ATIMINT BIT(12)
! 201: /* ATIM Time Out: ATIM interval will pass,
! 202: * RTW_TSFTR % (RTW_BCNITV_BCNITV * TU) =
! 203: * (RTW_ATIMWND_ATIMWND * TU - RTW_ATIMTRITV)
! 204: */
! 205: #define RTW_INTR_TBDER BIT(11) /* Tx Beacon Descriptor Error:
! 206: * beacon transmission aborted because
! 207: * frame Rx'd
! 208: */
! 209: #define RTW_INTR_TBDOK BIT(10) /* Tx Beacon Descriptor OK */
! 210: #define RTW_INTR_THPDER BIT(9) /* Tx High Priority Descriptor Error:
! 211: * reached short/long retry limit
! 212: */
! 213: #define RTW_INTR_THPDOK BIT(8) /* Tx High Priority Descriptor OK */
! 214: #define RTW_INTR_TNPDER BIT(7) /* Tx Normal Priority Descriptor Error:
! 215: * reached short/long retry limit
! 216: */
! 217: #define RTW_INTR_TNPDOK BIT(6) /* Tx Normal Priority Descriptor OK */
! 218: #define RTW_INTR_RXFOVW BIT(5) /* Rx FIFO Overflow: either RDU (see below)
! 219: * or PCI bus too slow/busy
! 220: */
! 221: #define RTW_INTR_RDU BIT(4) /* Rx Descriptor Unavailable */
! 222: #define RTW_INTR_TLPDER BIT(3) /* Tx Normal Priority Descriptor Error
! 223: * reached short/long retry limit
! 224: */
! 225: #define RTW_INTR_TLPDOK BIT(2) /* Tx Normal Priority Descriptor OK */
! 226: #define RTW_INTR_RER BIT(1) /* Rx Error: CRC32 or ICV error */
! 227: #define RTW_INTR_ROK BIT(0) /* Rx OK */
! 228:
! 229: /* Convenient interrupt conjunctions. */
! 230: #define RTW_INTR_RX (RTW_INTR_RER|RTW_INTR_ROK)
! 231: #define RTW_INTR_TX (RTW_INTR_TLPDER|RTW_INTR_TLPDOK|RTW_INTR_THPDER|\
! 232: RTW_INTR_THPDOK|RTW_INTR_TNPDER|RTW_INTR_TNPDOK|\
! 233: RTW_INTR_TBDER|RTW_INTR_TBDOK)
! 234: #define RTW_INTR_BEACON (RTW_INTR_BCNINT|RTW_INTR_TBDER|RTW_INTR_TBDOK)
! 235: #define RTW_INTR_IOERROR (RTW_INTR_TXFOVW|RTW_INTR_RXFOVW|RTW_INTR_RDU)
! 236:
! 237: #define RTW_TCR 0x40 /* Transmit Configuration Register, 32b */
! 238: #define RTW_TCR_CWMIN BIT(31) /* 1: CWmin = 8, 0: CWmin = 32. */
! 239: #define RTW_TCR_SWSEQ BIT(30) /* 1: host assigns 802.11 sequence number,
! 240: * 0: hardware assigns sequence number
! 241: */
! 242: #define RTW8185_TCR_NOPROBERSPTO BIT(29) /* No Probe Rsp timeout */
! 243: /* Hardware version ID, read-only */
! 244: #define RTW_TCR_HWVERID_MASK BITS(27, 25)
! 245: #define RTW_TCR_HWVERID_RTL8180D BIT(26)
! 246: #define RTW_TCR_HWVERID_RTL8180F BITS(26, 25)
! 247: #define RTW_TCR_HWVERID_RTL8185 (BIT(27) | BIT(25))
! 248: /* Set ACK/CTS Timeout (EIFS).
! 249: * 1: ACK rate = max(RTW_BRSR_MBR, Rx rate) (XXX not min? typo in datasheet?)
! 250: * 0: ACK rate = 1Mbps
! 251: */
! 252: #define RTW8180_TCR_SAT BIT(24)
! 253: /* 1: Software PLCP length,
! 254: * 0: Hardware PLCP length
! 255: */
! 256: #define RTW8185_TCR_PLCPLENGTH BIT(24)
! 257: /* Max DMA Burst Size per Tx DMA Burst */
! 258: #define RTW_TCR_MXDMA_MASK BITS(23,21)
! 259: #define RTW_TCR_MXDMA_16 LSHIFT(0, RTW_TCR_MXDMA_MASK)
! 260: #define RTW_TCR_MXDMA_32 LSHIFT(1, RTW_TCR_MXDMA_MASK)
! 261: #define RTW_TCR_MXDMA_64 LSHIFT(2, RTW_TCR_MXDMA_MASK)
! 262: #define RTW_TCR_MXDMA_128 LSHIFT(3, RTW_TCR_MXDMA_MASK)
! 263: #define RTW_TCR_MXDMA_256 LSHIFT(4, RTW_TCR_MXDMA_MASK)
! 264: #define RTW_TCR_MXDMA_512 LSHIFT(5, RTW_TCR_MXDMA_MASK)
! 265: #define RTW_TCR_MXDMA_1024 LSHIFT(6, RTW_TCR_MXDMA_MASK)
! 266: #define RTW_TCR_MXDMA_2048 LSHIFT(7, RTW_TCR_MXDMA_MASK)
! 267:
! 268: #define RTW_TCR_DISCW BIT(20) /* disable 802.11 random backoff */
! 269:
! 270: #define RTW_TCR_ICV BIT(19) /* host lets RTL8180 append ICV to
! 271: * WEP packets
! 272: */
! 273:
! 274: /* Loopback Test: disables TXI/TXQ outputs. */
! 275: #define RTW_TCR_LBK_MASK BITS(18,17)
! 276: #define RTW_TCR_LBK_NORMAL LSHIFT(0, RTW_TCR_LBK_MASK) /* normal ops */
! 277: #define RTW_TCR_LBK_MAC LSHIFT(1, RTW_TCR_LBK_MASK) /* MAC loopback */
! 278: #define RTW_TCR_LBK_BBP LSHIFT(2, RTW_TCR_LBK_MASK) /* baseband loop. */
! 279: #define RTW_TCR_LBK_CONT LSHIFT(3, RTW_TCR_LBK_MASK) /* continuous Tx */
! 280:
! 281: #define RTW_TCR_CRC BIT(16) /* 0: RTL8180 appends CRC32
! 282: * 1: host appends CRC32
! 283: *
! 284: * (I *think* this is right.
! 285: * The docs have a mysterious
! 286: * description in the
! 287: * passive voice.)
! 288: */
! 289: #define RTW_TCR_SRL_MASK BITS(15,8) /* Short Retry Limit */
! 290: #define RTW_TCR_LRL_MASK BITS(7,0) /* Long Retry Limit */
! 291:
! 292: #define RTW_RCR 0x44 /* Receive Configuration Register, 32b */
! 293: #define RTW_RCR_ONLYERLPKT BIT(31) /* only do Early Rx on packets
! 294: * longer than 1536 bytes
! 295: */
! 296: #define RTW_RCR_ENCS2 BIT(30) /* enable carrier sense method 2 */
! 297: #define RTW_RCR_ENCS1 BIT(29) /* enable carrier sense method 1 */
! 298: #define RTW_RCR_ENMARP BIT(28) /* enable MAC auto-reset PHY */
! 299: #define RTW_RCR_CBSSID BIT(23) /* Check BSSID/ToDS/FromDS: set
! 300: * "Link On" when received BSSID
! 301: * matches RTW_BSSID and received
! 302: * ToDS/FromDS are appropriate
! 303: * according to RTW_MSR_NETYPE.
! 304: */
! 305: #define RTW_RCR_APWRMGT BIT(22) /* accept packets w/ PWRMGMT bit set */
! 306: #define RTW_RCR_ADD3 BIT(21) /* when RTW_MSR_NETYPE ==
! 307: * RTW_MSR_NETYPE_INFRA_OK, accept
! 308: * broadcast/multicast packets whose
! 309: * 3rd address matches RTL8180's MAC.
! 310: */
! 311: #define RTW_RCR_AMF BIT(20) /* accept management frames */
! 312: #define RTW_RCR_ACF BIT(19) /* accept control frames */
! 313: #define RTW_RCR_ADF BIT(18) /* accept data frames */
! 314: /* Rx FIFO Threshold: RTL8180 begins PCI transfer when this many data
! 315: * bytes are received
! 316: */
! 317: #define RTW8180_RCR_RXFTH_MASK BITS(15,13)
! 318: #define RTW8180_RCR_RXFTH_64 LSHIFT(2, RTW8180_RCR_RXFTH_MASK)
! 319: #define RTW8180_RCR_RXFTH_128 LSHIFT(3, RTW8180_RCR_RXFTH_MASK)
! 320: #define RTW8180_RCR_RXFTH_256 LSHIFT(4, RTW8180_RCR_RXFTH_MASK)
! 321: #define RTW8180_RCR_RXFTH_512 LSHIFT(5, RTW8180_RCR_RXFTH_MASK)
! 322: #define RTW8180_RCR_RXFTH_1024 LSHIFT(6, RTW8180_RCR_RXFTH_MASK)
! 323: #define RTW8180_RCR_RXFTH_WHOLE LSHIFT(7, RTW8180_RCR_RXFTH_MASK)
! 324:
! 325: #define RTW_RCR_AICV BIT(12) /* accept frames w/ ICV errors */
! 326:
! 327: /* Max DMA Burst Size per Rx DMA Burst */
! 328: #define RTW_RCR_MXDMA_MASK BITS(10,8)
! 329: #define RTW_RCR_MXDMA_16 LSHIFT(0, RTW_RCR_MXDMA_MASK)
! 330: #define RTW_RCR_MXDMA_32 LSHIFT(1, RTW_RCR_MXDMA_MASK)
! 331: #define RTW_RCR_MXDMA_64 LSHIFT(2, RTW_RCR_MXDMA_MASK)
! 332: #define RTW_RCR_MXDMA_128 LSHIFT(3, RTW_RCR_MXDMA_MASK)
! 333: #define RTW_RCR_MXDMA_256 LSHIFT(4, RTW_RCR_MXDMA_MASK)
! 334: #define RTW_RCR_MXDMA_512 LSHIFT(5, RTW_RCR_MXDMA_MASK)
! 335: #define RTW_RCR_MXDMA_1024 LSHIFT(6, RTW_RCR_MXDMA_MASK)
! 336: #define RTW_RCR_MXDMA_UNLIMITED LSHIFT(7, RTW_RCR_MXDMA_MASK)
! 337:
! 338: /* EEPROM type, read-only. 1: EEPROM is 93c56, 0: 93c46 */
! 339: #define RTW_RCR_9356SEL BIT(6)
! 340:
! 341: #define RTW_RCR_ACRC32 BIT(5) /* accept frames w/ CRC32 errors */
! 342: #define RTW_RCR_AB BIT(3) /* accept broadcast frames */
! 343: #define RTW_RCR_AM BIT(2) /* accept multicast frames */
! 344: /* accept physical match frames. XXX means PLCP header ok? */
! 345: #define RTW_RCR_APM BIT(1)
! 346: #define RTW_RCR_AAP BIT(0) /* accept frames w/ destination */
! 347:
! 348: /* Additional bits to set in monitor mode. */
! 349: #define RTW_RCR_MONITOR ( \
! 350: RTW_RCR_AAP | \
! 351: RTW_RCR_ACF | \
! 352: RTW_RCR_ACRC32 | \
! 353: RTW_RCR_AICV | \
! 354: 0)
! 355:
! 356: /* The packet filter bits. */
! 357: #define RTW_RCR_PKTFILTER_MASK (\
! 358: RTW_RCR_AAP | \
! 359: RTW_RCR_AB | \
! 360: RTW_RCR_ACF | \
! 361: RTW_RCR_ACRC32 | \
! 362: RTW_RCR_ADD3 | \
! 363: RTW_RCR_ADF | \
! 364: RTW_RCR_AICV | \
! 365: RTW_RCR_AM | \
! 366: RTW_RCR_AMF | \
! 367: RTW_RCR_APM | \
! 368: RTW_RCR_APWRMGT | \
! 369: 0)
! 370:
! 371: /* Receive power-management frames and mgmt/ctrl/data frames. */
! 372: #define RTW_RCR_PKTFILTER_DEFAULT ( \
! 373: RTW_RCR_ADF | \
! 374: RTW_RCR_AMF | \
! 375: RTW_RCR_APM | \
! 376: RTW_RCR_APWRMGT | \
! 377: 0)
! 378:
! 379: #define RTW_TINT 0x48 /* Timer Interrupt Register, 32b */
! 380: #define RTW_TBDA 0x4c /* Transmit Beacon Descriptor Start Address,
! 381: * 32b, 256-byte alignment
! 382: */
! 383: #define RTW_9346CR 0x50 /* 93c46/93c56 Command Register, 8b */
! 384: #define RTW_9346CR_EEM_MASK BITS(7,6) /* Operating Mode */
! 385: #define RTW_9346CR_EEM_NORMAL LSHIFT(0, RTW_9346CR_EEM_MASK)
! 386: /* Load the EEPROM. Reset registers to defaults.
! 387: * Takes ~2ms. RTL8180 indicates completion with RTW_9346CR_EEM_NORMAL.
! 388: * XXX RTL8180 only?
! 389: */
! 390: #define RTW_9346CR_EEM_AUTOLOAD LSHIFT(1, RTW_9346CR_EEM_MASK)
! 391: /* Disable network & bus-master operations and enable
! 392: * _EECS, _EESK, _EEDI, _EEDO.
! 393: * XXX RTL8180 only?
! 394: */
! 395: #define RTW_9346CR_EEM_PROGRAM LSHIFT(2, RTW_9346CR_EEM_MASK)
! 396: /* Enable RTW_CONFIG[0123] registers. */
! 397: #define RTW_9346CR_EEM_CONFIG LSHIFT(3, RTW_9346CR_EEM_MASK)
! 398: /* EEPROM pin status/control in _EEM_CONFIG, _EEM_AUTOLOAD modes.
! 399: * XXX RTL8180 only?
! 400: */
! 401: #define RTW_9346CR_EECS BIT(3)
! 402: #define RTW_9346CR_EESK BIT(2)
! 403: #define RTW_9346CR_EEDI BIT(1)
! 404: #define RTW_9346CR_EEDO BIT(0) /* read-only */
! 405:
! 406: #define RTW_CONFIG0 0x51 /* Configuration Register 0, 8b */
! 407: #define RTW8180_CONFIG0_WEP40 BIT(7) /* implements 40-bit WEP,
! 408: */
! 409: #define RTW8180_CONFIG0_WEP104 BIT(6) /* implements 104-bit WEP,
! 410: * from EEPROM, read-only
! 411: */
! 412: #define RTW8180_CONFIG0_LEDGPOEN BIT(4) /* 1: RTW_PSR_LEDGPO[01] control
! 413: * LED[01] pins.
! 414: * 0: LED behavior defined by
! 415: * RTW_CONFIG1_LEDS10_MASK
! 416: */
! 417: /* auxiliary power is present, read-only */
! 418: #define RTW_CONFIG0_AUXPWR BIT(3)
! 419: /* Geographic Location, read-only */
! 420: #define RTW8180_CONFIG0_GL_MASK BITS(1,0)
! 421: #define RTW8180_CONFIG0_GL_USA LSHIFT(3, RTW8180_CONFIG0_GL_MASK)
! 422: #define RTW8180_CONFIG0_GL_EUROPE LSHIFT(2, RTW8180_CONFIG0_GL_MASK)
! 423: #define RTW8180_CONFIG0_GL_JAPAN LSHIFT(1, RTW8180_CONFIG0_GL_MASK)
! 424: #define RTW8180_CONFIG0_GL_JAPAN2 LSHIFT(0, RTW8180_CONFIG0_GL_MASK)
! 425: /* RTL8181 datasheet says RTW_CONFIG0_GL_JAPAN = 0. */
! 426:
! 427: #define RTW_CONFIG1 0x52 /* Configuration Register 1, 8b */
! 428:
! 429: /* LED configuration. From EEPROM. Read/write.
! 430: *
! 431: * Setting LED0 LED1
! 432: * ------- ---- ----
! 433: * RTW_CONFIG1_LEDS_ACT_INFRA Activity Infrastructure
! 434: * RTW_CONFIG1_LEDS_ACT_LINK Activity Link
! 435: * RTW_CONFIG1_LEDS_TX_RX Tx Rx
! 436: * RTW_CONFIG1_LEDS_LINKACT_INFRA Link/Activity Infrastructure
! 437: */
! 438: #define RTW_CONFIG1_LEDS_MASK BITS(7,6)
! 439: #define RTW_CONFIG1_LEDS_ACT_INFRA LSHIFT(0, RTW_CONFIG1_LEDS_MASK)
! 440: #define RTW_CONFIG1_LEDS_ACT_LINK LSHIFT(1, RTW_CONFIG1_LEDS_MASK)
! 441: #define RTW_CONFIG1_LEDS_TX_RX LSHIFT(2, RTW_CONFIG1_LEDS_MASK)
! 442: #define RTW_CONFIG1_LEDS_LINKACT_INFRA LSHIFT(3, RTW_CONFIG1_LEDS_MASK)
! 443:
! 444: /* LWAKE Output Signal. Only applicable to Cardbus. Pulse width is 150ms.
! 445: *
! 446: * RTW_CONFIG1_LWACT
! 447: * 0 1
! 448: * RTW_CONFIG4_LWPTN 0 active high active low
! 449: * 1 positive pulse negative pulse
! 450: */
! 451: #define RTW_CONFIG1_LWACT BIT(4)
! 452:
! 453: #define RTW_CONFIG1_MEMMAP BIT(3) /* using PCI memory space, read-only */
! 454: #define RTW_CONFIG1_IOMAP BIT(2) /* using PCI I/O space, read-only */
! 455: #define RTW_CONFIG1_VPD BIT(1) /* if set, VPD from offsets
! 456: * 0x40-0x7f in EEPROM are at
! 457: * registers 0x60-0x67 of PCI
! 458: * Configuration Space (XXX huh?)
! 459: */
! 460: #define RTW_CONFIG1_PMEN BIT(0) /* Power Management Enable: TBD */
! 461:
! 462: #define RTW_CONFIG2 0x53 /* Configuration Register 2, 8b */
! 463: #define RTW_CONFIG2_LCK BIT(7) /* clocks are locked, read-only:
! 464: * Tx frequency & symbol clocks
! 465: * are derived from the same OSC
! 466: */
! 467: #define RTW8180_CONFIG2_ANT BIT(6) /* diversity enabled, read-only */
! 468: #define RTW_CONFIG2_DPS BIT(3) /* Descriptor Polling State: enable
! 469: * test mode.
! 470: */
! 471: #define RTW_CONFIG2_PAPESIGN BIT(2) /* TBD, from EEPROM */
! 472: #define RTW_CONFIG2_PAPETIME_MASK BITS(1,0) /* TBD, from EEPROM */
! 473:
! 474: #define RTW_ANAPARM_0 0x54 /* Analog parameter, 32b */
! 475: #define RTW8185_ANAPARM_1 0x60
! 476:
! 477: #define RTW_ANAPARM_RFPOW0_MASK BITS(30,28) /* undocumented bits
! 478: * which appear to
! 479: * control the power
! 480: * state of the RF
! 481: * components
! 482: */
! 483: #define RTW_ANAPARM_RFPOW_MASK \
! 484: (RTW_ANAPARM_RFPOW0_MASK|RTW_ANAPARM_RFPOW1_MASK)
! 485:
! 486: #define RTW_ANAPARM_TXDACOFF BIT(27) /* 1: disable Tx DAC,
! 487: * 0: enable
! 488: */
! 489: #define RTW_ANAPARM_RFPOW1_MASK BITS(26,20) /* undocumented bits
! 490: * which appear to
! 491: * control the power
! 492: * state of the RF
! 493: * components
! 494: */
! 495:
! 496: /*
! 497: * Maxim On/Sleep/Off control
! 498: */
! 499: #define RTW_ANAPARM_RFPOW_MAXIM_ON LSHIFT(0x8, RTW_ANAPARM_RFPOW1_MASK)
! 500:
! 501: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 502: #define RTW_ANAPARM_RFPOW_MAXIM_SLEEP LSHIFT(0x378, RTW_ANAPARM_RFPOW1_MASK)
! 503:
! 504: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 505: #define RTW_ANAPARM_RFPOW_MAXIM_OFF LSHIFT(0x379, RTW_ANAPARM_RFPOW1_MASK)
! 506:
! 507: /*
! 508: * RFMD On/Sleep/Off control
! 509: */
! 510: #define RTW_ANAPARM_RFPOW_RFMD_ON LSHIFT(0x408, RTW_ANAPARM_RFPOW1_MASK)
! 511:
! 512: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 513: #define RTW_ANAPARM_RFPOW_RFMD_SLEEP LSHIFT(0x378, RTW_ANAPARM_RFPOW1_MASK)
! 514:
! 515: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 516: #define RTW_ANAPARM_RFPOW_RFMD_OFF LSHIFT(0x379, RTW_ANAPARM_RFPOW1_MASK)
! 517:
! 518: /*
! 519: * Philips On/Sleep/Off control
! 520: */
! 521: #define RTW_ANAPARM_RFPOW_ANA_PHILIPS_ON \
! 522: LSHIFT(0x328, RTW_ANAPARM_RFPOW1_MASK)
! 523: #define RTW_ANAPARM_RFPOW_DIG_PHILIPS_ON \
! 524: LSHIFT(0x008, RTW_ANAPARM_RFPOW1_MASK)
! 525:
! 526: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 527: #define RTW_ANAPARM_RFPOW_PHILIPS_SLEEP\
! 528: LSHIFT(0x378, RTW_ANAPARM_RFPOW1_MASK)
! 529:
! 530: /* reg[RTW_ANAPARM] |= RTW_ANAPARM_TXDACOFF; */
! 531: #define RTW_ANAPARM_RFPOW_PHILIPS_OFF\
! 532: LSHIFT(0x379, RTW_ANAPARM_RFPOW1_MASK)
! 533:
! 534: #define RTW_ANAPARM_RFPOW_PHILIPS_ON LSHIFT(0x328, RTW_ANAPARM_RFPOW1_MASK)
! 535:
! 536: #define RTW_ANAPARM_CARDSP_MASK BITS(19,0) /* undocumented
! 537: * card-specific
! 538: * bits from the
! 539: * EEPROM.
! 540: */
! 541:
! 542: #define RTW_MSR 0x58 /* Media Status Register, 8b */
! 543: /* Network Type and Link Status */
! 544: #define RTW_MSR_NETYPE_MASK BITS(3,2)
! 545: /* AP, XXX RTL8181 only? */
! 546: #define RTW_MSR_NETYPE_AP_OK LSHIFT(3, RTW_MSR_NETYPE_MASK)
! 547: /* infrastructure link ok */
! 548: #define RTW_MSR_NETYPE_INFRA_OK LSHIFT(2, RTW_MSR_NETYPE_MASK)
! 549: /* ad-hoc link ok */
! 550: #define RTW_MSR_NETYPE_ADHOC_OK LSHIFT(1, RTW_MSR_NETYPE_MASK)
! 551: /* no link */
! 552: #define RTW_MSR_NETYPE_NOLINK LSHIFT(0, RTW_MSR_NETYPE_MASK)
! 553:
! 554: #define RTW_CONFIG3 0x59 /* Configuration Register 3, 8b */
! 555: #define RTW_CONFIG3_GNTSEL BIT(7) /* Grant Select, read-only */
! 556: #define RTW_CONFIG3_PARMEN BIT(6) /* Set RTW_CONFIG3_PARMEN and
! 557: * RTW_9346CR_EEM_CONFIG to
! 558: * allow RTW_ANAPARM writes.
! 559: */
! 560: #define RTW_CONFIG3_MAGIC BIT(5) /* Valid when RTW_CONFIG1_PMEN is
! 561: * set. If set, RTL8180 wakes up
! 562: * OS when Magic Packet is Rx'd.
! 563: */
! 564: #define RTW_CONFIG3_CARDBEN BIT(3) /* Cardbus-related registers
! 565: * and functions are enabled,
! 566: * read-only. XXX RTL8180 only.
! 567: */
! 568: #define RTW_CONFIG3_CLKRUNEN BIT(2) /* CLKRUN enabled, read-only.
! 569: * XXX RTL8180 only.
! 570: */
! 571: #define RTW_CONFIG3_FUNCREGEN BIT(1) /* Function Registers Enabled,
! 572: * read-only. XXX RTL8180 only.
! 573: */
! 574: #define RTW_CONFIG3_FBTBEN BIT(0) /* Fast back-to-back enabled,
! 575: * read-only.
! 576: */
! 577: #define RTW_CONFIG4 0x5A /* Configuration Register 4, 8b */
! 578: #define RTW_CONFIG4_VCOPDN BIT(7) /* VCO Power Down
! 579: * 0: normal operation
! 580: * (power-on default)
! 581: * 1: power-down VCO, RF front-end,
! 582: * and most RTL8180 components.
! 583: */
! 584: #define RTW_CONFIG4_PWROFF BIT(6) /* Power Off
! 585: * 0: normal operation
! 586: * (power-on default)
! 587: * 1: power-down RF front-end,
! 588: * and most RTL8180 components,
! 589: * but leave VCO on.
! 590: *
! 591: * XXX RFMD front-end only?
! 592: */
! 593: #define RTW_CONFIG4_PWRMGT BIT(5) /* Power Management
! 594: * 0: normal operation
! 595: * (power-on default)
! 596: * 1: set Tx packet's PWRMGMT bit.
! 597: */
! 598: #define RTW_CONFIG4_LWPME BIT(4) /* LANWAKE vs. PMEB: Cardbus-only
! 599: * 0: LWAKE & PMEB asserted
! 600: * simultaneously
! 601: * 1: LWAKE asserted only if
! 602: * both PMEB is asserted and
! 603: * ISOLATEB is low.
! 604: * XXX RTL8180 only.
! 605: */
! 606: #define RTW_CONFIG4_LWPTN BIT(2) /* see RTW_CONFIG1_LWACT
! 607: * XXX RTL8180 only.
! 608: */
! 609: /* Radio Front-End Programming Method */
! 610: #define RTW_CONFIG4_RFTYPE_MASK BITS(1,0)
! 611: #define RTW_CONFIG4_RFTYPE_INTERSIL LSHIFT(1, RTW_CONFIG4_RFTYPE_MASK)
! 612: #define RTW_CONFIG4_RFTYPE_RFMD LSHIFT(2, RTW_CONFIG4_RFTYPE_MASK)
! 613: #define RTW_CONFIG4_RFTYPE_PHILIPS LSHIFT(3, RTW_CONFIG4_RFTYPE_MASK)
! 614:
! 615: #define RTW_TESTR 0x5B /* TEST mode register, 8b */
! 616:
! 617: #define RTW_PSR 0x5e /* Page Select Register, 8b */
! 618: #define RTW_PSR_GPO BIT(7) /* Control/status of pin 52. */
! 619: #define RTW_PSR_GPI BIT(6) /* Status of pin 64. */
! 620: #define RTW_PSR_LEDGPO1 BIT(5) /* Status/control of LED1 pin if
! 621: * RTW_CONFIG0_LEDGPOEN is set.
! 622: */
! 623: #define RTW_PSR_LEDGPO0 BIT(4) /* Status/control of LED0 pin if
! 624: * RTW_CONFIG0_LEDGPOEN is set.
! 625: */
! 626: #define RTW_PSR_UWF BIT(1) /* Enable Unicast Wakeup Frame */
! 627: #define RTW_PSR_PSEN BIT(0) /* 1: page 1, 0: page 0 */
! 628:
! 629: #define RTW8180_SCR 0x5f /* Security Configuration Register, 8b */
! 630: #define RTW8180_SCR_KM_MASK BITS(5,4) /* Key Mode */
! 631: #define RTW8180_SCR_KM_WEP104 LSHIFT(1, RTW8180_SCR_KM_MASK)
! 632: #define RTW8180_SCR_KM_WEP40 LSHIFT(0, RTW8180_SCR_KM_MASK)
! 633: #define RTW8180_SCR_TXSECON BIT(1) /* Enable Tx WEP. Invalid if
! 634: * neither RTW_CONFIG0_WEP40 nor
! 635: * RTW_CONFIG0_WEP104 is set.
! 636: */
! 637: #define RTW8180_SCR_RXSECON BIT(0) /* Enable Rx WEP. Invalid if
! 638: * neither RTW_CONFIG0_WEP40 nor
! 639: * RTW_CONFIG0_WEP104 is set.
! 640: */
! 641:
! 642: #define RTW8185_RFPARM 0x60 /* RF Parameter Register, 32b */
! 643:
! 644: #define RTW_BCNITV 0x70 /* Beacon Interval Register, 16b */
! 645: #define RTW_BCNITV_BCNITV_MASK BITS(9,0) /* TU between TBTT, written
! 646: * by host.
! 647: */
! 648: #define RTW_ATIMWND 0x72 /* ATIM Window Register, 16b */
! 649: #define RTW_ATIMWND_ATIMWND BITS(9,0) /* ATIM Window length in TU,
! 650: * written by host.
! 651: */
! 652:
! 653: #define RTW_BINTRITV 0x74 /* Beacon Interrupt Interval Register, 16b */
! 654: #define RTW_BINTRITV_BINTRITV BITS(9,0) /* RTL8180 wakes host with
! 655: * RTW_INTR_BCNINT at BINTRITV
! 656: * microseconds before TBTT
! 657: */
! 658: #define RTW_ATIMTRITV 0x76 /* ATIM Interrupt Interval Register, 16b */
! 659: #define RTW_ATIMTRITV_ATIMTRITV BITS(9,0) /* RTL8180 wakes host with
! 660: * RTW_INTR_ATIMINT at ATIMTRITV
! 661: * microseconds before end of
! 662: * ATIM Window
! 663: */
! 664:
! 665: #define RTW_PHYDELAY 0x78 /* PHY Delay Register, 8b */
! 666: #define RTW_PHYDELAY_REVC_MAGIC BIT(3) /* Rev. C magic from reference
! 667: * driver
! 668: */
! 669: #define RTW_PHYDELAY_PHYDELAY BITS(2,0) /* microsecond Tx delay between
! 670: * MAC and RF front-end
! 671: */
! 672: #define RTW_CRCOUNT 0x79 /* Carrier Sense Counter, 8b */
! 673: #define RTW_CRCOUNT_MAGIC 0x4c
! 674:
! 675: #define RTW_CRC16ERR 0x7a /* CRC16 error count, 16b, XXX RTL8181 only? */
! 676:
! 677: #define RTW_BB 0x7c /* Baseband interface, 32b */
! 678: /* used for writing RTL8180's integrated baseband processor */
! 679: #define RTW_BB_RD_MASK BITS(23,16) /* data to read */
! 680: #define RTW_BB_WR_MASK BITS(15,8) /* data to write */
! 681: #define RTW_BB_WREN BIT(7) /* write enable */
! 682: #define RTW_BB_ADDR_MASK BITS(6,0) /* address */
! 683:
! 684: #define RTW_PHYADDR 0x7c /* Address register for PHY interface, 8b */
! 685: #define RTW_PHYDATAW 0x7d /* Write data to PHY, 8b, write-only */
! 686: #define RTW_PHYDATAR 0x7e /* Read data from PHY, 8b (?), read-only */
! 687:
! 688: #define RTW8180_PHYCFG 0x80 /* PHY Configuration Register, 32b */
! 689: #define RTW8180_PHYCFG_MAC_POLL BIT(31) /* if !RTW8180_PHYCFG_HST,
! 690: * host sets. MAC clears
! 691: * after banging bits.
! 692: */
! 693: #define RTW8180_PHYCFG_HST BIT(30) /* 1: host bangs bits
! 694: * 0: MAC bangs bits
! 695: */
! 696: #define RTW8180_PHYCFG_MAC_RFTYPE_MASK BITS(29,28)
! 697: #define RTW8180_PHYCFG_MAC_RFTYPE_INTERSIL \
! 698: LSHIFT(0, RTW8180_PHYCFG_MAC_RFTYPE_MASK)
! 699: #define RTW8180_PHYCFG_MAC_RFTYPE_RFMD \
! 700: LSHIFT(1, RTW8180_PHYCFG_MAC_RFTYPE_MASK)
! 701: #define RTW8180_PHYCFG_MAC_RFTYPE_GCT \
! 702: RTW8180_PHYCFG_MAC_RFTYPE_RFMD
! 703: #define RTW8180_PHYCFG_MAC_RFTYPE_PHILIPS \
! 704: LSHIFT(3, RTW8180_PHYCFG_MAC_RFTYPE_MASK)
! 705: #define RTW8180_PHYCFG_MAC_PHILIPS_ADDR_MASK BITS(27,24)
! 706: #define RTW8180_PHYCFG_MAC_PHILIPS_DATA_MASK BITS(23,0)
! 707: #define RTW8180_PHYCFG_MAC_MAXIM_LODATA_MASK BITS(27,24)
! 708: #define RTW8180_PHYCFG_MAC_MAXIM_ADDR_MASK BITS(11,8)
! 709: #define RTW8180_PHYCFG_MAC_MAXIM_HIDATA_MASK BITS(7,0)
! 710: #define RTW8180_PHYCFG_HST_EN BIT(2)
! 711: #define RTW8180_PHYCFG_HST_CLK BIT(1)
! 712: #define RTW8180_PHYCFG_HST_DATA BIT(0)
! 713:
! 714: #define RTW8185_RFPINSOUTPUT 0x80
! 715: #define RTW8185_RFPINSOUTPUT_MASK 0xfff3
! 716:
! 717: #define RTW8185_RFPINSENABLE 0x82
! 718: #define RTW8185_RFPINSENABLE_ENABLE 0x0007
! 719:
! 720: #define RTW8185_INSSELECT 0x84
! 721: #define RTW8185_SW_GPIO 0x400
! 722:
! 723: #define RTW_MAXIM_HIDATA_MASK BITS(11,4)
! 724: #define RTW_MAXIM_LODATA_MASK BITS(3,0)
! 725:
! 726: /**
! 727: ** 0x84 - 0xD3, page 1, selected when RTW_PSR[PSEN] == 1.
! 728: **/
! 729:
! 730: #define RTW_WAKEUP0L 0x84 /* Power Management Wakeup Frame */
! 731: #define RTW_WAKEUP0H 0x88 /* 32b */
! 732:
! 733: #define RTW_WAKEUP1L 0x8c
! 734: #define RTW_WAKEUP1H 0x90
! 735:
! 736: #define RTW_WAKEUP2LL 0x94
! 737: #define RTW_WAKEUP2LH 0x98
! 738:
! 739: #define RTW_WAKEUP2HL 0x9c
! 740: #define RTW_WAKEUP2HH 0xa0
! 741:
! 742: #define RTW_WAKEUP3LL 0xa4
! 743: #define RTW_WAKEUP3LH 0xa8
! 744:
! 745: #define RTW_WAKEUP3HL 0xac
! 746: #define RTW_WAKEUP3HH 0xb0
! 747:
! 748: #define RTW_WAKEUP4LL 0xb4
! 749: #define RTW_WAKEUP4LH 0xb8
! 750:
! 751: #define RTW_WAKEUP4HL 0xbc
! 752: #define RTW_WAKEUP4HH 0xc0
! 753:
! 754: #define RTW_CRC0 0xc4 /* CRC of wakeup frame 0, 16b */
! 755: #define RTW_CRC1 0xc6 /* CRC of wakeup frame 1, 16b */
! 756: #define RTW_CRC2 0xc8 /* CRC of wakeup frame 2, 16b */
! 757: #define RTW_CRC3 0xca /* CRC of wakeup frame 3, 16b */
! 758: #define RTW_CRC4 0xcc /* CRC of wakeup frame 4, 16b */
! 759:
! 760: /**
! 761: ** 0x84 - 0xD3, page 0, selected when RTW_PSR[PSEN] == 0.
! 762: **/
! 763:
! 764: /* Default Key Registers, each 128b
! 765: *
! 766: * If RTW8180_SCR_KM_WEP104, 104 lsb are the key.
! 767: * If RTW8180_SCR_KM_WEP40, 40 lsb are the key.
! 768: */
! 769: #define RTW8180_DK0 0x90 /* Default Key 0 Register, 128b */
! 770: #define RTW8180_DK1 0xa0 /* Default Key 1 Register, 128b */
! 771: #define RTW8180_DK2 0xb0 /* Default Key 2 Register, 128b */
! 772: #define RTW8180_DK3 0xc0 /* Default Key 3 Register, 128b */
! 773:
! 774: #define RTW8185_RFPINSSELECT 0x84
! 775: #define RTW8185_RFPINSSELECT_ENABLE 0x0007
! 776:
! 777: #define RTW8185_RFPINSINPUT 0x86
! 778: #define RTW8185_RFPARA 0x88
! 779: #define RTW8185_RFTIMING 0x8c
! 780: #define RTW8185_GPO 0x90
! 781: #define RTW8185_GPE 0x91
! 782: #define RTW8185_GPI 0x92
! 783: #define RTW8185_TXAGCCTL 0x9c
! 784: #define RTW8185_CCKTXAGC 0x9d
! 785: #define RTW8185_OFDMTXAGC 0x9e
! 786: #define RTW8185_ANTSEL 0x9f
! 787:
! 788: #define RTW8185_CAMRW 0xa0 /* CAM R/W Register, 32b */
! 789: #define RTW8185_CAMRW_POOLING BIT(31) /* Pooling bit */
! 790: #define RTW8185_CAMRW_WRITE BIT(16) /* Write enable */
! 791: #define RTW8185_CAMRW_ADDRESS BITS(6, 0) /* CAM address */
! 792:
! 793: #define RTW8185_CAMOUTPUT 0xa4
! 794: #define RTW8185_CAMINPUT 0xa8
! 795:
! 796: #define RTW8185_CAMDEBUG 0xac /* CAM Debug Interface, 32b */
! 797: #define RTW8185_CAMDEBUG_SELTXRXINFO BIT(31)
! 798: #define RTW8185_CAMDEBUG_KEYFOUND BIT(30)
! 799: #define RTW8185_CAMDEBUG_WPACONFIG BITS(29, 24)
! 800: #define RTW8185_CAMDEBUG_CAMKEY BITS(23, 0)
! 801:
! 802: #define RTW8185_WPACONFIG 0xb0 /* WPA Config Register, 16b */
! 803: #define RTW8185_WPACONFIG_RXWPADUMMY BIT(8)
! 804: #define RTW8185_WPACONFIG_DISRX_AESMIC BIT(3)
! 805: #define RTW8185_WPACONFIG_RXDECRYPT BIT(2)
! 806: #define RTW8185_WPACONFIG_TXENCRYPT BIT(1)
! 807: #define RTW8185_WPACONFIG_USEDEFAULTKEY BIT(0)
! 808:
! 809: #define RTW8185_AESMASK 0xb2
! 810: #define RTW8185_SIFS 0xb4
! 811: #define RTW8185_DIFS 0xb5
! 812: #define RTW8185_SLOTTIME 0xb6
! 813: #define RTW8185_UTUNE 0xb7
! 814:
! 815: #define RTW8185_CWCONFIG 0xbc /* CW Config Register, 8b */
! 816: #define RTW8185_CWCONFIG_PPRETRYLIMIT BIT(1) /* Per-Packet Retry Limit */
! 817: #define RTW8185_CWCONFIG_PPCW BIT(1) /* Per-Packet Cont. Window */
! 818:
! 819: #define RTW8185_CWVALUES 0xbd /* CW Values, 8b */
! 820: #define RTW8185_CWVALUES_CWMAX BITS(7, 4) /* Max Contention Window */
! 821: #define RTW8185_CWVALUES_CWMIN BITS(3, 0) /* Min Contention Window */
! 822:
! 823: #define RTW8185_RATEFALLBACKCTL 0xbe /* Auto Rate Fallback, 8b */
! 824: #define RTW8185_RATEFALLBACKCTL_ENABLE BIT(7)
! 825: #define RTW8185_RATEFALLBACKCTL_STEP BITS(1, 0)
! 826:
! 827: #define RTW_CONFIG5 0xd8 /* Configuration Register 5, 8b */
! 828: #define RTW_CONFIG5_TXFIFOOK BIT(7) /* Tx FIFO self-test pass, read-only */
! 829: #define RTW_CONFIG5_RXFIFOOK BIT(6) /* Rx FIFO self-test pass, read-only */
! 830: #define RTW_CONFIG5_CALON BIT(5) /* 1: start calibration cycle
! 831: * and raise AGCRESET pin.
! 832: * 0: lower AGCRESET pin
! 833: */
! 834: #define RTW_CONFIG5_EACPI BIT(2) /* Enable ACPI Wake up, default 0 */
! 835: #define RTW_CONFIG5_LANWAKE BIT(1) /* Enable LAN Wake signal,
! 836: * from EEPROM
! 837: */
! 838: #define RTW_CONFIG5_PMESTS BIT(0) /* 1: both software & PCI Reset
! 839: * reset PME_Status
! 840: * 0: only software resets PME_Status
! 841: *
! 842: * From EEPROM.
! 843: */
! 844:
! 845: #define RTW_TPPOLL 0xd9 /* Transmit Priority Polling Register, 8b,
! 846: * write-only.
! 847: */
! 848: #define RTW_TPPOLL_BQ BIT(7) /* RTL8180 clears to notify host of a beacon
! 849: * Tx. Host writes have no effect.
! 850: */
! 851: #define RTW_TPPOLL_HPQ BIT(6) /* Host writes 1 to notify RTL8180 of
! 852: * high-priority Tx packets, RTL8180 clears
! 853: * to after high-priority Tx is complete.
! 854: */
! 855: #define RTW_TPPOLL_NPQ BIT(5) /* If RTW_CONFIG2_DPS is set,
! 856: * host writes 1 to notify RTL8180 of
! 857: * normal-priority Tx packets, RTL8180 clears
! 858: * after normal-priority Tx is complete.
! 859: *
! 860: * If RTW_CONFIG2_DPS is clear, host writes
! 861: * have no effect. RTL8180 clears after
! 862: * normal-priority Tx is complete.
! 863: */
! 864: #define RTW_TPPOLL_LPQ BIT(4) /* Host writes 1 to notify RTL8180 of
! 865: * low-priority Tx packets, RTL8180 clears
! 866: * after low-priority Tx is complete.
! 867: */
! 868: #define RTW_TPPOLL_SBQ BIT(3) /* Host writes 1 to tell RTL8180 to
! 869: * stop beacon DMA. This bit is invalid
! 870: * when RTW_CONFIG2_DPS is set.
! 871: */
! 872: #define RTW_TPPOLL_SHPQ BIT(2) /* Host writes 1 to tell RTL8180 to
! 873: * stop high-priority DMA.
! 874: */
! 875: #define RTW_TPPOLL_SNPQ BIT(1) /* Host writes 1 to tell RTL8180 to
! 876: * stop normal-priority DMA. This bit is invalid
! 877: * when RTW_CONFIG2_DPS is set.
! 878: */
! 879: #define RTW_TPPOLL_SLPQ BIT(0) /* Host writes 1 to tell RTL8180 to
! 880: * stop low-priority DMA.
! 881: */
! 882:
! 883: /* Start all queues. */
! 884: #define RTW_TPPOLL_ALL (RTW_TPPOLL_BQ | RTW_TPPOLL_HPQ | \
! 885: RTW_TPPOLL_NPQ | RTW_TPPOLL_LPQ)
! 886: /* Check all queues' activity. */
! 887: #define RTW_TPPOLL_ACTIVE RTW_TPPOLL_ALL
! 888: /* Stop all queues. */
! 889: #define RTW_TPPOLL_SALL (RTW_TPPOLL_SBQ | RTW_TPPOLL_SHPQ | \
! 890: RTW_TPPOLL_SNPQ | RTW_TPPOLL_SLPQ)
! 891:
! 892: #define RTW_CWR 0xdc /* Contention Window Register, 16b, read-only */
! 893: /* Contention Window: indicates number of contention windows before Tx
! 894: */
! 895: #define RTW_CWR_CW BITS(9,0)
! 896:
! 897: /* Retry Count Register, 16b, read-only */
! 898: #define RTW_RETRYCTR 0xde
! 899: /* Retry Count: indicates number of retries after Tx */
! 900: #define RTW_RETRYCTR_RETRYCT BITS(7,0)
! 901:
! 902: #define RTW_RDSAR 0xe4 /* Receive descriptor Start Address Register,
! 903: * 32b, 256-byte alignment.
! 904: */
! 905: /* Function Event Register, 32b, Cardbus only. Only valid when
! 906: * both RTW_CONFIG3_CARDBEN and RTW_CONFIG3_FUNCREGEN are set.
! 907: */
! 908: #define RTW_FER 0xf0
! 909: #define RTW_FER_INTR BIT(15) /* set when RTW_FFER_INTR is set */
! 910: #define RTW_FER_GWAKE BIT(4) /* General Wakeup */
! 911: /* Function Event Mask Register, 32b, Cardbus only. Only valid when
! 912: * both RTW_CONFIG3_CARDBEN and RTW_CONFIG3_FUNCREGEN are set.
! 913: */
! 914: #define RTW_FEMR 0xf4
! 915: #define RTW_FEMR_INTR BIT(15) /* set when RTW_FFER_INTR is set */
! 916: #define RTW_FEMR_WKUP BIT(14) /* Wakeup Mask */
! 917: #define RTW_FEMR_GWAKE BIT(4) /* General Wakeup */
! 918: /* Function Present State Register, 32b, read-only, Cardbus only.
! 919: * Only valid when both RTW_CONFIG3_CARDBEN and RTW_CONFIG3_FUNCREGEN
! 920: * are set.
! 921: */
! 922: #define RTW_FPSR 0xf8
! 923: #define RTW_FPSR_INTR BIT(15) /* TBD */
! 924: #define RTW_FPSR_GWAKE BIT(4) /* General Wakeup: TBD */
! 925: /* Function Force Event Register, 32b, write-only, Cardbus only.
! 926: * Only valid when both RTW_CONFIG3_CARDBEN and RTW_CONFIG3_FUNCREGEN
! 927: * are set.
! 928: */
! 929: #define RTW_FFER 0xfc
! 930: #define RTW_FFER_INTR BIT(15) /* TBD */
! 931: #define RTW_FFER_GWAKE BIT(4) /* General Wakeup: TBD */
! 932:
! 933: /* Serial EEPROM offsets */
! 934: #define RTW_SR_ID 0x00 /* 16b */
! 935: #define RTW_SR_VID 0x02 /* 16b */
! 936: #define RTW_SR_DID 0x04 /* 16b */
! 937: #define RTW_SR_SVID 0x06 /* 16b */
! 938: #define RTW_SR_SMID 0x08 /* 16b */
! 939: #define RTW_SR_MNGNT 0x0a
! 940: #define RTW_SR_MXLAT 0x0b
! 941: #define RTW_SR_RFCHIPID 0x0c
! 942: #define RTW_SR_CONFIG3 0x0d
! 943: #define RTW_SR_MAC 0x0e /* 6 bytes */
! 944: #define RTW_SR_CONFIG0 0x14
! 945: #define RTW_SR_CONFIG1 0x15
! 946: #define RTW_SR_PMC 0x16 /* Power Management Capabilities, 16b */
! 947: #define RTW_SR_CONFIG2 0x18
! 948: #define RTW_SR_CONFIG4 0x19
! 949: #define RTW_SR_ANAPARM 0x1a /* Analog Parameters, 32b */
! 950: #define RTW_SR_TESTR 0x1e
! 951: #define RTW_SR_CONFIG5 0x1f
! 952: #define RTW_SR_TXPOWER1 0x20
! 953: #define RTW_SR_TXPOWER2 0x21
! 954: #define RTW_SR_TXPOWER3 0x22
! 955: #define RTW_SR_TXPOWER4 0x23
! 956: #define RTW_SR_TXPOWER5 0x24
! 957: #define RTW_SR_TXPOWER6 0x25
! 958: #define RTW_SR_TXPOWER7 0x26
! 959: #define RTW_SR_TXPOWER8 0x27
! 960: #define RTW_SR_TXPOWER9 0x28
! 961: #define RTW_SR_TXPOWER10 0x29
! 962: #define RTW_SR_TXPOWER11 0x2a
! 963: #define RTW_SR_TXPOWER12 0x2b
! 964: #define RTW_SR_TXPOWER13 0x2c
! 965: #define RTW_SR_TXPOWER14 0x2d
! 966: #define RTW_SR_CHANNELPLAN 0x2e /* bitmap of channels to scan */
! 967: #define RTW_SR_ENERGYDETTHR 0x2f /* energy-detect threshold */
! 968: #define RTW_SR_ENERGYDETTHR_DEFAULT 0x0c /* use this if old SROM */
! 969: #define RTW_SR_CISPOINTER 0x30 /* 16b */
! 970: #define RTW_SR_RFPARM 0x32 /* RF-specific parameter */
! 971: #define RTW_SR_RFPARM_DIGPHY BIT(0) /* 1: digital PHY */
! 972: #define RTW_SR_RFPARM_DFLANTB BIT(1) /* 1: antenna B is default */
! 973: #define RTW_SR_RFPARM_CS_MASK BITS(2,3) /* carrier-sense type */
! 974: #define RTW_SR_VERSION 0x3c /* EEPROM content version, 16b */
! 975: #define RTW_SR_CRC 0x3e /* EEPROM content CRC, 16b */
! 976: #define RTW_SR_VPD 0x40 /* Vital Product Data, 64 bytes */
! 977: #define RTW_SR_CIS 0x80 /* CIS Data, 93c56 only, 128 bytes*/
! 978:
! 979: /*
! 980: * RTL8180 Transmit/Receive Descriptors
! 981: */
! 982:
! 983: /* the first descriptor in each ring must be on a 256-byte boundary */
! 984: #define RTW_DESC_ALIGNMENT 256
! 985:
! 986: /* Tx descriptor */
! 987: struct rtw_txdesc {
! 988: u_int32_t td_ctl0;
! 989: u_int32_t td_ctl1;
! 990: u_int32_t td_buf;
! 991: u_int32_t td_len;
! 992: u_int32_t td_next;
! 993: u_int32_t td_rsvd[3];
! 994: };
! 995:
! 996: #define td_stat td_ctl0
! 997:
! 998: #define RTW_TXCTL0_OWN BIT(31) /* 1: ready to Tx */
! 999: #define RTW_TXCTL0_RSVD0 BIT(30) /* reserved */
! 1000: #define RTW_TXCTL0_FS BIT(29) /* first segment */
! 1001: #define RTW_TXCTL0_LS BIT(28) /* last segment */
! 1002:
! 1003: #define RTW_TXCTL0_RATE_MASK BITS(27,24) /* Tx rate */
! 1004: #define RTW_TXCTL0_RATE_1MBPS LSHIFT(0, RTW_TXCTL0_RATE_MASK)
! 1005: #define RTW_TXCTL0_RATE_2MBPS LSHIFT(1, RTW_TXCTL0_RATE_MASK)
! 1006: #define RTW_TXCTL0_RATE_5MBPS LSHIFT(2, RTW_TXCTL0_RATE_MASK)
! 1007: #define RTW_TXCTL0_RATE_11MBPS LSHIFT(3, RTW_TXCTL0_RATE_MASK)
! 1008:
! 1009: #define RTW_TXCTL0_RTSEN BIT(23) /* RTS Enable */
! 1010:
! 1011: #define RTW_TXCTL0_RTSRATE_MASK BITS(22,19) /* Tx rate */
! 1012: #define RTW_TXCTL0_RTSRATE_1MBPS LSHIFT(0, RTW_TXCTL0_RTSRATE_MASK)
! 1013: #define RTW_TXCTL0_RTSRATE_2MBPS LSHIFT(1, RTW_TXCTL0_RTSRATE_MASK)
! 1014: #define RTW_TXCTL0_RTSRATE_5MBPS LSHIFT(2, RTW_TXCTL0_RTSRATE_MASK)
! 1015: #define RTW_TXCTL0_RTSRATE_11MBPS LSHIFT(3, RTW_TXCTL0_RTSRATE_MASK)
! 1016:
! 1017: #define RTW_TXCTL0_BEACON BIT(18) /* packet is a beacon */
! 1018: #define RTW_TXCTL0_MOREFRAG BIT(17) /* another fragment follows */
! 1019: #define RTW_TXCTL0_SPLCP BIT(16) /* add short PLCP preamble
! 1020: * and header
! 1021: */
! 1022: #define RTW_TXCTL0_KEYID_MASK BITS(15,14) /* default key id */
! 1023: #define RTW_TXCTL0_RSVD1_MASK BITS(13,12) /* reserved */
! 1024: #define RTW_TXCTL0_TPKTSIZE_MASK BITS(11,0) /* Tx packet size
! 1025: * in bytes
! 1026: */
! 1027:
! 1028: #define RTW_TXSTAT_OWN RTW_TXCTL0_OWN
! 1029: #define RTW_TXSTAT_RSVD0 RTW_TXCTL0_RSVD0
! 1030: #define RTW_TXSTAT_FS RTW_TXCTL0_FS
! 1031: #define RTW_TXSTAT_LS RTW_TXCTL0_LS
! 1032: #define RTW_TXSTAT_RSVD1_MASK BITS(27,16)
! 1033: #define RTW_TXSTAT_TOK BIT(15)
! 1034: #define RTW_TXSTAT_RTSRETRY_MASK BITS(14,8) /* RTS retry count */
! 1035: #define RTW_TXSTAT_DRC_MASK BITS(7,0) /* Data retry count */
! 1036:
! 1037: #define RTW_TXCTL1_LENGEXT BIT(31) /* supplements _LENGTH
! 1038: * in packets sent 5.5Mb/s or
! 1039: * faster
! 1040: */
! 1041: #define RTW_TXCTL1_LENGTH_MASK BITS(30,16) /* PLCP length (microseconds) */
! 1042: #define RTW_TXCTL1_RTSDUR_MASK BITS(15,0) /* RTS Duration
! 1043: * (microseconds)
! 1044: */
! 1045:
! 1046: #define RTW_TXLEN_LENGTH_MASK BITS(11,0) /* Tx buffer length in bytes */
! 1047:
! 1048: /* Rx descriptor */
! 1049: struct rtw_rxdesc {
! 1050: u_int32_t rd_ctl;
! 1051: u_int32_t rd_rsvd0;
! 1052: u_int32_t rd_buf;
! 1053: u_int32_t rd_rsvd1;
! 1054: };
! 1055:
! 1056: #define rd_stat rd_ctl
! 1057: #define rd_rssi rd_rsvd0
! 1058: #define rd_tsftl rd_buf /* valid only when RTW_RXSTAT_LS is set */
! 1059: #define rd_tsfth rd_rsvd1 /* valid only when RTW_RXSTAT_LS is set */
! 1060:
! 1061: #define RTW_RXCTL_OWN BIT(31) /* 1: owned by NIC */
! 1062: #define RTW_RXCTL_EOR BIT(30) /* end of ring */
! 1063: #define RTW_RXCTL_FS BIT(29) /* first segment */
! 1064: #define RTW_RXCTL_LS BIT(28) /* last segment */
! 1065: #define RTW_RXCTL_RSVD0_MASK BITS(29,12) /* reserved */
! 1066: #define RTW_RXCTL_LENGTH_MASK BITS(11,0) /* Rx buffer length */
! 1067:
! 1068: #define RTW_RXSTAT_OWN RTW_RXCTL_OWN
! 1069: #define RTW_RXSTAT_EOR RTW_RXCTL_EOR
! 1070: #define RTW_RXSTAT_FS RTW_RXCTL_FS /* first segment */
! 1071: #define RTW_RXSTAT_LS RTW_RXCTL_LS /* last segment */
! 1072: #define RTW_RXSTAT_DMAFAIL BIT(27) /* DMA failure on this pkt */
! 1073: #define RTW_RXSTAT_BOVF BIT(26) /* buffer overflow XXX means
! 1074: * FIFO exhausted?
! 1075: */
! 1076: #define RTW_RXSTAT_SPLCP BIT(25) /* Rx'd with short preamble
! 1077: * and PLCP header
! 1078: */
! 1079: #define RTW_RXSTAT_RSVD1 BIT(24) /* reserved */
! 1080: #define RTW_RXSTAT_RATE_MASK BITS(23,20) /* Rx rate */
! 1081: #define RTW_RXSTAT_RATE_1MBPS LSHIFT(0, RTW_RXSTAT_RATE_MASK)
! 1082: #define RTW_RXSTAT_RATE_2MBPS LSHIFT(1, RTW_RXSTAT_RATE_MASK)
! 1083: #define RTW_RXSTAT_RATE_5MBPS LSHIFT(2, RTW_RXSTAT_RATE_MASK)
! 1084: #define RTW_RXSTAT_RATE_11MBPS LSHIFT(3, RTW_RXSTAT_RATE_MASK)
! 1085: #define RTW_RXSTAT_MIC BIT(19) /* XXX from reference driver */
! 1086: #define RTW_RXSTAT_MAR BIT(18) /* is multicast */
! 1087: #define RTW_RXSTAT_PAR BIT(17) /* matches RTL8180's MAC */
! 1088: #define RTW_RXSTAT_BAR BIT(16) /* is broadcast */
! 1089: #define RTW_RXSTAT_RES BIT(15) /* error summary. valid when
! 1090: * RTW_RXSTAT_LS set. indicates
! 1091: * that either RTW_RXSTAT_CRC32
! 1092: * or RTW_RXSTAT_ICV is set.
! 1093: */
! 1094: #define RTW_RXSTAT_PWRMGT BIT(14) /* 802.11 PWRMGMT bit is set */
! 1095: #define RTW_RXSTAT_CRC16 BIT(14) /* XXX CRC16 error, from
! 1096: * reference driver
! 1097: */
! 1098: #define RTW_RXSTAT_CRC32 BIT(13) /* CRC32 error */
! 1099: #define RTW_RXSTAT_ICV BIT(12) /* ICV error */
! 1100: #define RTW_RXSTAT_LENGTH_MASK BITS(11,0) /* frame length, including
! 1101: * CRC32
! 1102: */
! 1103:
! 1104: /* Convenient status conjunction. */
! 1105: #define RTW_RXSTAT_ONESEG (RTW_RXSTAT_FS|RTW_RXSTAT_LS)
! 1106: /* Convenient status disjunctions. */
! 1107: #define RTW_RXSTAT_IOERROR (RTW_RXSTAT_DMAFAIL|RTW_RXSTAT_BOVF)
! 1108: #define RTW_RXSTAT_DEBUG (RTW_RXSTAT_SPLCP|RTW_RXSTAT_MAR|\
! 1109: RTW_RXSTAT_PAR|RTW_RXSTAT_BAR|\
! 1110: RTW_RXSTAT_PWRMGT|RTW_RXSTAT_CRC32|\
! 1111: RTW_RXSTAT_ICV)
! 1112:
! 1113:
! 1114: #define RTW_RXRSSI_VLAN BITS(32,16) /* XXX from reference driver */
! 1115: /* for Philips RF front-ends */
! 1116: #define RTW_RXRSSI_RSSI BITS(15,8) /* RF energy at the PHY */
! 1117: /* for RF front-ends by Intersil, Maxim, RFMD */
! 1118: #define RTW_RXRSSI_IMR_RSSI BITS(15,9) /* RF energy at the PHY */
! 1119: #define RTW_RXRSSI_IMR_LNA BIT(8) /* 1: LNA activated */
! 1120: #define RTW_RXRSSI_SQ BITS(7,0) /* Barker code-lock quality */
! 1121:
! 1122: #define RTW_READ8(regs, ofs) \
! 1123: ((*(regs)->r_read8)(regs, ofs))
! 1124:
! 1125: #define RTW_READ16(regs, ofs) \
! 1126: ((*(regs)->r_read16)(regs, ofs))
! 1127:
! 1128: #define RTW_READ(regs, ofs) \
! 1129: ((*(regs)->r_read32)(regs, ofs))
! 1130:
! 1131: #define RTW_WRITE8(regs, ofs, val) \
! 1132: ((*(regs)->r_write8)(regs, ofs, val))
! 1133:
! 1134: #define RTW_WRITE16(regs, ofs, val) \
! 1135: ((*(regs)->r_write16)(regs, ofs, val))
! 1136:
! 1137: #define RTW_WRITE(regs, ofs, val) \
! 1138: ((*(regs)->r_write32)(regs, ofs, val))
! 1139:
! 1140: #define RTW_ISSET(regs, reg, mask) \
! 1141: (RTW_READ((regs), (reg)) & (mask))
! 1142:
! 1143: #define RTW_CLR(regs, reg, mask) \
! 1144: RTW_WRITE((regs), (reg), RTW_READ((regs), (reg)) & ~(mask))
! 1145:
! 1146: /* bus_space(9) lied? */
! 1147: #ifndef BUS_SPACE_BARRIER_SYNC
! 1148: #define BUS_SPACE_BARRIER_SYNC (BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE)
! 1149: #endif
! 1150:
! 1151: #ifndef BUS_SPACE_BARRIER_READ_BEFORE_READ
! 1152: #define BUS_SPACE_BARRIER_READ_BEFORE_READ BUS_SPACE_BARRIER_READ
! 1153: #endif
! 1154:
! 1155: #ifndef BUS_SPACE_BARRIER_READ_BEFORE_WRITE
! 1156: #define BUS_SPACE_BARRIER_READ_BEFORE_WRITE BUS_SPACE_BARRIER_READ
! 1157: #endif
! 1158:
! 1159: #ifndef BUS_SPACE_BARRIER_WRITE_BEFORE_READ
! 1160: #define BUS_SPACE_BARRIER_WRITE_BEFORE_READ BUS_SPACE_BARRIER_WRITE
! 1161: #endif
! 1162:
! 1163: #ifndef BUS_SPACE_BARRIER_WRITE_BEFORE_WRITE
! 1164: #define BUS_SPACE_BARRIER_WRITE_BEFORE_WRITE BUS_SPACE_BARRIER_WRITE
! 1165: #endif
! 1166:
! 1167: /*
! 1168: * Bus barrier
! 1169: *
! 1170: * Complete outstanding read and/or write ops on [reg0, reg1]
! 1171: * ([reg1, reg0]) before starting new ops on the same region. See
! 1172: * acceptable bus_space_barrier(9) for the flag definitions.
! 1173: */
! 1174: #define RTW_BARRIER(regs, reg0, reg1, flags) \
! 1175: ((*(regs)->r_barrier)(regs, reg0, reg1, flags))
! 1176:
! 1177: /*
! 1178: * Barrier convenience macros.
! 1179: */
! 1180: /* sync */
! 1181: #define RTW_SYNC(regs, reg0, reg1) \
! 1182: RTW_BARRIER(regs, reg0, reg1, BUS_SPACE_BARRIER_SYNC)
! 1183:
! 1184: /* write-before-write */
! 1185: #define RTW_WBW(regs, reg0, reg1) \
! 1186: RTW_BARRIER(regs, reg0, reg1, BUS_SPACE_BARRIER_WRITE_BEFORE_WRITE)
! 1187:
! 1188: /* write-before-read */
! 1189: #define RTW_WBR(regs, reg0, reg1) \
! 1190: RTW_BARRIER(regs, reg0, reg1, BUS_SPACE_BARRIER_WRITE_BEFORE_READ)
! 1191:
! 1192: /* read-before-read */
! 1193: #define RTW_RBR(regs, reg0, reg1) \
! 1194: RTW_BARRIER(regs, reg0, reg1, BUS_SPACE_BARRIER_READ_BEFORE_READ)
! 1195:
! 1196: /* read-before-read */
! 1197: #define RTW_RBW(regs, reg0, reg1) \
! 1198: RTW_BARRIER(regs, reg0, reg1, BUS_SPACE_BARRIER_READ_BEFORE_WRITE)
! 1199:
! 1200: #define RTW_WBRW(regs, reg0, reg1) \
! 1201: RTW_BARRIER(regs, reg0, reg1, \
! 1202: BUS_SPACE_BARRIER_WRITE_BEFORE_READ | \
! 1203: BUS_SPACE_BARRIER_WRITE_BEFORE_WRITE)
! 1204:
! 1205: /*
! 1206: * Registers for RTL8180L's built-in baseband modem.
! 1207: */
! 1208: #define RTW_BBP_SYS1 0x00
! 1209: #define RTW_BBP_TXAGC 0x03 /* guess: transmit auto gain control */
! 1210: #define RTW_BBP_LNADET 0x04 /* guess: low-noise amplifier activation
! 1211: * threshold
! 1212: */
! 1213: #define RTW_BBP_IFAGCINI 0x05 /* guess: intermediate frequency (IF)
! 1214: * auto-gain control (AGC) initial value
! 1215: */
! 1216: #define RTW_BBP_IFAGCLIMIT 0x06 /* guess: IF AGC maximum value */
! 1217: #define RTW_BBP_IFAGCDET 0x07 /* guess: activation threshold for
! 1218: * IF AGC loop
! 1219: */
! 1220:
! 1221: #define RTW_BBP_ANTATTEN 0x10 /* guess: antenna & attenuation */
! 1222: #define RTW_BBP_ANTATTEN_PHILIPS_MAGIC 0x91
! 1223: #define RTW_BBP_ANTATTEN_INTERSIL_MAGIC 0x92
! 1224: #define RTW_BBP_ANTATTEN_RFMD_MAGIC 0x93
! 1225: #define RTW_BBP_ANTATTEN_GCT_MAGIC 0xa3
! 1226: #define RTW_BBP_ANTATTEN_MAXIM_MAGIC 0xb3
! 1227: #define RTW_BBP_ANTATTEN_DFLANTB 0x40
! 1228: #define RTW_BBP_ANTATTEN_CHAN14 0x0c
! 1229:
! 1230: #define RTW_BBP_TRL 0x11 /* guess: transmit/receive
! 1231: * switch latency
! 1232: */
! 1233: #define RTW_BBP_SYS2 0x12
! 1234: #define RTW_BBP_SYS2_ANTDIV 0x80 /* enable antenna diversity */
! 1235: #define RTW_BBP_SYS2_RATE_MASK BITS(5,4) /* loopback rate?
! 1236: * 0: 1Mbps
! 1237: * 1: 2Mbps
! 1238: * 2: 5.5Mbps
! 1239: * 3: 11Mbps
! 1240: */
! 1241: #define RTW_BBP_SYS3 0x13
! 1242: /* carrier-sense threshold */
! 1243: #define RTW_BBP_SYS3_CSTHRESH_MASK BITS(0,3)
! 1244: #define RTW_BBP_CHESTLIM 0x19 /* guess: channel energy-detect
! 1245: * threshold
! 1246: */
! 1247: #define RTW_BBP_CHSQLIM 0x1a /* guess: channel signal-quality
! 1248: * threshold
! 1249: */
CVSweb