[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     ! 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