[BACK]Return to rtwreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/rtwreg.h, Revision 1.1.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