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

Annotation of sys/dev/pci/if_sisreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_sisreg.h,v 1.27 2007/05/28 17:51:26 ckuethe Exp $ */
                      2: /*
                      3:  * Copyright (c) 1997, 1998, 1999
                      4:  *     Bill Paul <wpaul@ee.columbia.edu>.  All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  * 1. Redistributions of source code must retain the above copyright
                     10:  *    notice, this list of conditions and the following disclaimer.
                     11:  * 2. Redistributions in binary form must reproduce the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer in the
                     13:  *    documentation and/or other materials provided with the distribution.
                     14:  * 3. All advertising materials mentioning features or use of this software
                     15:  *    must display the following acknowledgement:
                     16:  *     This product includes software developed by Bill Paul.
                     17:  * 4. Neither the name of the author nor the names of any co-contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
                     25:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     26:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     27:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     28:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     29:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     30:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
                     31:  * THE POSSIBILITY OF SUCH DAMAGE.
                     32:  *
                     33:  * $FreeBSD: src/sys/pci/if_sisreg.h,v 1.3 2000/08/22 23:26:51 wpaul Exp $
                     34:  */
                     35:
                     36: /*
                     37:  * Register definitions for the SiS 900 and SiS 7016 chipsets. The
                     38:  * 7016 is actually an older chip and some of its registers differ
                     39:  * from the 900, however the core operational registers are the same:
                     40:  * the differences lie in the OnNow/Wake on LAN stuff which we don't
                     41:  * use anyway. The 7016 needs an external MII compliant PHY while the
                     42:  * SiS 900 has one built in. All registers are 32-bits wide.
                     43:  */
                     44:
                     45: /* Registers common to SiS 900 and SiS 7016 */
                     46: #define SIS_CSR                        0x00
                     47: #define SIS_CFG                        0x04
                     48: #define SIS_EECTL              0x08
                     49: #define SIS_PCICTL             0x0C
                     50: #define SIS_ISR                        0x10
                     51: #define SIS_IMR                        0x14
                     52: #define SIS_IER                        0x18
                     53: #define SIS_PHYCTL             0x1C
                     54: #define SIS_TX_LISTPTR         0x20
                     55: #define SIS_TX_CFG             0x24
                     56: #define SIS_RX_LISTPTR         0x30
                     57: #define SIS_RX_CFG             0x34
                     58: #define SIS_FLOWCTL            0x38
                     59: #define SIS_RXFILT_CTL         0x48
                     60: #define SIS_RXFILT_DATA                0x4C
                     61: #define SIS_PWRMAN_CTL         0xB0
                     62: #define SIS_PWERMAN_WKUP_EVENT 0xB4
                     63: #define SIS_WKUP_FRAME_CRC     0xBC
                     64: #define SIS_WKUP_FRAME_MASK0   0xC0
                     65: #define SIS_WKUP_FRAME_MASKXX  0xEC
                     66:
                     67: /* SiS 7016 specific registers */
                     68: #define SIS_SILICON_REV                0x5C
                     69: #define SIS_MIB_CTL0           0x60
                     70: #define SIS_MIB_CTL1           0x64
                     71: #define SIS_MIB_CTL2           0x68
                     72: #define SIS_MIB_CTL3           0x6C
                     73: #define SIS_MIB                        0x80
                     74: #define SIS_LINKSTS            0xA0
                     75: #define SIS_TIMEUNIT           0xA4
                     76: #define SIS_GPIO               0xB8
                     77:
                     78: /* NS DP83815/6 registers */
                     79: #define NS_IHR                 0x1C
                     80: #define NS_CLKRUN              0x3C
                     81: #define NS_SRR                 0x58
                     82: #define NS_BMCR                        0x80
                     83: #define NS_BMSR                        0x84
                     84: #define NS_PHYIDR1             0x88
                     85: #define NS_PHYIDR2             0x8C
                     86: #define NS_ANAR                        0x90
                     87: #define NS_ANLPAR              0x94
                     88: #define NS_ANER                        0x98
                     89: #define NS_ANNPTR              0x9C
                     90:
                     91: #define NS_PHY_CR              0xE4
                     92: #define NS_PHY_10BTSCR         0xE8
                     93: #define NS_PHY_PAGE            0xCC
                     94: #define NS_PHY_EXTCFG          0xF0
                     95: #define NS_PHY_DSPCFG          0xF4
                     96: #define NS_PHY_SDCFG           0xF8
                     97: #define NS_PHY_TDATA           0xFC
                     98:
                     99: #define NS_CLKRUN_PMESTS       0x00008000
                    100: #define NS_CLKRUN_PMEENB       0x00000100
                    101: #define NS_CLNRUN_CLKRUN_ENB   0x00000001
                    102:
                    103: /* NS silicon revisions */
                    104: #define NS_SRR_15C             0x302
                    105: #define NS_SRR_15D             0x403
                    106: #define NS_SRR_16A             0x505
                    107:
                    108: #define SIS_CSR_TX_ENABLE      0x00000001
                    109: #define SIS_CSR_TX_DISABLE     0x00000002
                    110: #define SIS_CSR_RX_ENABLE      0x00000004
                    111: #define SIS_CSR_RX_DISABLE     0x00000008
                    112: #define SIS_CSR_TX_RESET       0x00000010
                    113: #define SIS_CSR_RX_RESET       0x00000020
                    114: #define SIS_CSR_SOFTINTR       0x00000080
                    115: #define SIS_CSR_RESET          0x00000100
                    116: #define SIS_CSR_RELOAD         0x00000400
                    117:
                    118: #define SIS_CFG_BIGENDIAN      0x00000001
                    119: #define SIS_CFG_PERR_DETECT    0x00000008
                    120: #define SIS_CFG_DEFER_DISABLE  0x00000010
                    121: #define SIS_CFG_OUTOFWIN_TIMER 0x00000020
                    122: #define SIS_CFG_SINGLE_BACKOFF 0x00000040
                    123: #define SIS_CFG_PCIREQ_ALG     0x00000080
                    124: #define SIS_CFG_FAIR_BACKOFF   0x00000200 /* 635 & 900B Specific */
                    125: #define SIS_CFG_RND_CNT                0x00000400 /* 635 & 900B Specific */
                    126: #define SIS_CFG_EDB_MASTER_EN  0x00002000
                    127:
                    128: #define SIS_EECTL_DIN          0x00000001
                    129: #define SIS_EECTL_DOUT         0x00000002
                    130: #define SIS_EECTL_CLK          0x00000004
                    131: #define SIS_EECTL_CSEL         0x00000008
                    132:
                    133: #define SIS96x_EECTL_GNT       0x00000100
                    134: #define SIS96x_EECTL_DONE      0x00000200
                    135: #define SIS96x_EECTL_REQ       0x00000400
                    136:
                    137: #define        SIS_MII_CLK             0x00000040
                    138: #define        SIS_MII_DIR             0x00000020
                    139: #define        SIS_MII_DATA            0x00000010
                    140:
                    141: #define SIS_EECMD_WRITE                0x140
                    142: #define SIS_EECMD_READ         0x180
                    143: #define SIS_EECMD_ERASE                0x1c0
                    144:
                    145: #define SIS_EE_NODEADDR                0x8
                    146: #define NS_EE_NODEADDR         0x6
                    147:
                    148: #define SIS_PCICTL_SRAMADDR    0x0000001F
                    149: #define SIS_PCICTL_RAMTSTENB   0x00000020
                    150: #define SIS_PCICTL_TXTSTENB    0x00000040
                    151: #define SIS_PCICTL_RXTSTENB    0x00000080
                    152: #define SIS_PCICTL_BMTSTENB    0x00000200
                    153: #define SIS_PCICTL_RAMADDR     0x001F0000
                    154: #define SIS_PCICTL_ROMTIME     0x0F000000
                    155: #define SIS_PCICTL_DISCTEST    0x40000000
                    156:
                    157: #define SIS_ISR_RX_OK          0x00000001
                    158: #define SIS_ISR_RX_DESC_OK     0x00000002
                    159: #define SIS_ISR_RX_ERR         0x00000004
                    160: #define SIS_ISR_RX_EARLY       0x00000008
                    161: #define SIS_ISR_RX_IDLE                0x00000010
                    162: #define SIS_ISR_RX_OFLOW       0x00000020
                    163: #define SIS_ISR_TX_OK          0x00000040
                    164: #define SIS_ISR_TX_DESC_OK     0x00000080
                    165: #define SIS_ISR_TX_ERR         0x00000100
                    166: #define SIS_ISR_TX_IDLE                0x00000200
                    167: #define SIS_ISR_TX_UFLOW       0x00000400
                    168: #define SIS_ISR_SOFTINTR       0x00000800
                    169: #define SIS_ISR_HIBITS         0x00008000
                    170: #define SIS_ISR_RX_FIFO_OFLOW  0x00010000
                    171: #define SIS_ISR_TGT_ABRT       0x00100000
                    172: #define SIS_ISR_BM_ABRT                0x00200000
                    173: #define SIS_ISR_SYSERR         0x00400000
                    174: #define SIS_ISR_PARITY_ERR     0x00800000
                    175: #define SIS_ISR_RX_RESET_DONE  0x01000000
                    176: #define SIS_ISR_TX_RESET_DONE  0x02000000
                    177: #define SIS_ISR_TX_PAUSE_START 0x04000000
                    178: #define SIS_ISR_TX_PAUSE_DONE  0x08000000
                    179: #define SIS_ISR_WAKE_EVENT     0x10000000
                    180:
                    181: #define SIS_IMR_RX_OK          0x00000001
                    182: #define SIS_IMR_RX_DESC_OK     0x00000002
                    183: #define SIS_IMR_RX_ERR         0x00000004
                    184: #define SIS_IMR_RX_EARLY       0x00000008
                    185: #define SIS_IMR_RX_IDLE                0x00000010
                    186: #define SIS_IMR_RX_OFLOW       0x00000020
                    187: #define SIS_IMR_TX_OK          0x00000040
                    188: #define SIS_IMR_TX_DESC_OK     0x00000080
                    189: #define SIS_IMR_TX_ERR         0x00000100
                    190: #define SIS_IMR_TX_IDLE                0x00000200
                    191: #define SIS_IMR_TX_UFLOW       0x00000400
                    192: #define SIS_IMR_SOFTINTR       0x00000800
                    193: #define SIS_IMR_HIBITS         0x00008000
                    194: #define SIS_IMR_RX_FIFO_OFLOW  0x00010000
                    195: #define SIS_IMR_TGT_ABRT       0x00100000
                    196: #define SIS_IMR_BM_ABRT                0x00200000
                    197: #define SIS_IMR_SYSERR         0x00400000
                    198: #define SIS_IMR_PARITY_ERR     0x00800000
                    199: #define SIS_IMR_RX_RESET_DONE  0x01000000
                    200: #define SIS_IMR_TX_RESET_DONE  0x02000000
                    201: #define SIS_IMR_TX_PAUSE_START 0x04000000
                    202: #define SIS_IMR_TX_PAUSE_DONE  0x08000000
                    203: #define SIS_IMR_WAKE_EVENT     0x10000000
                    204:
                    205: #define SIS_INTRS      \
                    206:        (SIS_IMR_RX_OFLOW|SIS_IMR_TX_UFLOW|SIS_IMR_TX_OK|\
                    207:         SIS_IMR_TX_IDLE|SIS_IMR_RX_OK|SIS_IMR_RX_ERR|\
                    208:         SIS_IMR_RX_IDLE|\
                    209:         SIS_IMR_SYSERR)
                    210:
                    211: /* Interrupt Holdoff Register */
                    212: #define NS_IHR_HOLDCTL 0x00000100
                    213:
                    214: /*
                    215:  * Interrupt holdoff value for NS DP8316. We can have the chip
                    216:  * delay interrupt delivery for a certain period. Units are in
                    217:  * 100us - this sets the delay to 1ms holdoff.
                    218:  */
                    219: #define NS_IHR_DELAY 10
                    220:
                    221: #define NS_IHR_VALUE (NS_IHR_HOLDCTL|NS_IHR_DELAY)
                    222:
                    223: #define SIS_IER_INTRENB                0x00000001
                    224:
                    225: #define SIS_PHYCTL_ACCESS      0x00000010
                    226: #define SIS_PHYCTL_OP          0x00000020
                    227: #define SIS_PHYCTL_REGADDR     0x000007C0
                    228: #define SIS_PHYCTL_PHYADDR     0x0000F800
                    229: #define SIS_PHYCTL_PHYDATA     0xFFFF0000
                    230:
                    231: #define SIS_PHYOP_READ         0x00000020
                    232: #define SIS_PHYOP_WRITE                0x00000000
                    233:
                    234: #define SIS_TXCFG_DRAIN_THRESH 0x0000003F /* 32-byte units */
                    235: #define SIS_TXCFG_FILL_THRESH  0x00003F00 /* 32-byte units */
                    236: #define SIS_TXCFG_MPII03D      0x00040000 /* "Must be 1" */
                    237: #define SIS_TXCFG_DMABURST     0x00700000
                    238: #define SIS_TXCFG_AUTOPAD      0x10000000
                    239: #define SIS_TXCFG_LOOPBK       0x20000000
                    240: #define SIS_TXCFG_IGN_HBEAT    0x40000000
                    241: #define SIS_TXCFG_IGN_CARR     0x80000000
                    242:
                    243: #define SIS_TXCFG_DRAIN(x)     (((x) >> 5) & SIS_TXCFG_DRAIN_THRESH)
                    244: #define SIS_TXCFG_FILL(x)      ((((x) >> 5) << 8) & SIS_TXCFG_FILL_THRESH)
                    245:
                    246: #define SIS_TXDMA_512BYTES     0x00000000
                    247: #define SIS_TXDMA_4BYTES       0x00100000
                    248: #define SIS_TXDMA_8BYTES       0x00200000
                    249: #define SIS_TXDMA_16BYTES      0x00300000
                    250: #define SIS_TXDMA_32BYTES      0x00400000
                    251: #define SIS_TXDMA_64BYTES      0x00500000
                    252: #define SIS_TXDMA_128BYTES     0x00600000
                    253: #define SIS_TXDMA_256BYTES     0x00700000
                    254:
                    255: #define SIS_TXCFG_100  \
                    256:        (SIS_TXDMA_64BYTES|SIS_TXCFG_AUTOPAD|\
                    257:         SIS_TXCFG_FILL(ETHER_MIN_LEN)|SIS_TXCFG_DRAIN(ETHER_MAX_DIX_LEN))
                    258:
                    259: #define SIS_TXCFG_10   \
                    260:        (SIS_TXDMA_32BYTES|SIS_TXCFG_AUTOPAD|\
                    261:         SIS_TXCFG_FILL(ETHER_MIN_LEN)|SIS_TXCFG_DRAIN(ETHER_MAX_DIX_LEN))
                    262:
                    263: #define SIS_RXCFG_DRAIN_THRESH 0x0000003E /* 8-byte units */
                    264: #define SIS_RXCFG_DMABURST     0x00700000
                    265: #define SIS_RXCFG_RX_JABBER    0x08000000
                    266: #define SIS_RXCFG_RX_TXPKTS    0x10000000
                    267: #define SIS_RXCFG_RX_RUNTS     0x40000000
                    268: #define SIS_RXCFG_RX_GIANTS    0x80000000
                    269:
                    270: #define SIS_RXCFG_DRAIN(x)     ((((x) >> 3) << 1) & SIS_RXCFG_DRAIN_THRESH)
                    271:
                    272: #define SIS_RXDMA_512BYTES     0x00000000
                    273: #define SIS_RXDMA_4BYTES       0x00100000
                    274: #define SIS_RXDMA_8BYTES       0x00200000
                    275: #define SIS_RXDMA_16BYTES      0x00300000
                    276: #define SIS_RXDMA_32BYTES      0x00400000
                    277: #define SIS_RXDMA_64BYTES      0x00500000
                    278: #define SIS_RXDMA_128BYTES     0x00600000
                    279: #define SIS_RXDMA_256BYTES     0x00700000
                    280:
                    281: #define SIS_RXCFG256 \
                    282:        (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_256BYTES)
                    283: #define SIS_RXCFG64 \
                    284:        (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_64BYTES)
                    285:
                    286: #define SIS_RXFILTCTL_ADDR     0x000F0000
                    287: #define NS_RXFILTCTL_MCHASH    0x00200000
                    288: #define NS_RXFILTCTL_ARP       0x00400000
                    289: #define NS_RXFILTCTL_PERFECT   0x08000000
                    290: #define SIS_RXFILTCTL_ALLPHYS  0x10000000
                    291: #define SIS_RXFILTCTL_ALLMULTI 0x20000000
                    292: #define SIS_RXFILTCTL_BROAD    0x40000000
                    293: #define SIS_RXFILTCTL_ENABLE   0x80000000
                    294:
                    295: #define SIS_FILTADDR_PAR0      0x00000000
                    296: #define SIS_FILTADDR_PAR1      0x00010000
                    297: #define SIS_FILTADDR_PAR2      0x00020000
                    298: #define SIS_FILTADDR_MAR0      0x00040000
                    299: #define SIS_FILTADDR_MAR1      0x00050000
                    300: #define SIS_FILTADDR_MAR2      0x00060000
                    301: #define SIS_FILTADDR_MAR3      0x00070000
                    302: #define SIS_FILTADDR_MAR4      0x00080000
                    303: #define SIS_FILTADDR_MAR5      0x00090000
                    304: #define SIS_FILTADDR_MAR6      0x000A0000
                    305: #define SIS_FILTADDR_MAR7      0x000B0000
                    306:
                    307: #define NS_FILTADDR_PAR0       0x00000000
                    308: #define NS_FILTADDR_PAR1       0x00000002
                    309: #define NS_FILTADDR_PAR2       0x00000004
                    310:
                    311: #define NS_FILTADDR_FMEM_LO    0x00000200
                    312: #define NS_FILTADDR_FMEM_HI    0x000003FE
                    313:
                    314: /*
                    315:  * DMA descriptor structures. The first part of the descriptor
                    316:  * is the hardware descriptor format, which is just three longwords.
                    317:  * After this, we include some additional structure members for
                    318:  * use by the driver. Note that for this structure will be a different
                    319:  * size on the alpha, but that's okay as long as it's a multiple of 4
                    320:  * bytes in size.
                    321:  */
                    322: struct sis_desc {
                    323:        /* SiS hardware descriptor section */
                    324:        u_int32_t               sis_next;
                    325:        u_int32_t               sis_cmdsts;
                    326: #define sis_rxstat             sis_cmdsts
                    327: #define sis_txstat             sis_cmdsts
                    328: #define sis_ctl                        sis_cmdsts
                    329:        u_int32_t               sis_ptr;
                    330:        /* Driver software section */
                    331:        struct mbuf             *sis_mbuf;
                    332:        struct sis_desc         *sis_nextdesc;
                    333:        bus_dmamap_t            map;
                    334: };
                    335:
                    336: #define SIS_CMDSTS_BUFLEN      0x00000FFF
                    337: #define SIS_CMDSTS_PKT_OK      0x08000000
                    338: #define SIS_CMDSTS_CRC         0x10000000
                    339: #define SIS_CMDSTS_INTR                0x20000000
                    340: #define SIS_CMDSTS_MORE                0x40000000
                    341: #define SIS_CMDSTS_OWN         0x80000000
                    342:
                    343: #define SIS_LASTDESC(x)                (!((x)->sis_ctl & SIS_CMDSTS_MORE)))
                    344: #define SIS_OWNDESC(x)         ((x)->sis_ctl & SIS_CMDSTS_OWN)
                    345: #define SIS_INC(x, y)          (x) = ((x) == ((y)-1)) ? 0 : (x)+1
                    346: #define SIS_RXBYTES(x)         (((x)->sis_ctl & SIS_CMDSTS_BUFLEN) - ETHER_CRC_LEN)
                    347:
                    348: #define SIS_RXSTAT_COLL                0x00010000
                    349: #define SIS_RXSTAT_LOOPBK      0x00020000
                    350: #define SIS_RXSTAT_ALIGNERR    0x00040000
                    351: #define SIS_RXSTAT_CRCERR      0x00080000
                    352: #define SIS_RXSTAT_SYMBOLERR   0x00100000
                    353: #define SIS_RXSTAT_RUNT                0x00200000
                    354: #define SIS_RXSTAT_GIANT       0x00400000
                    355: #define SIS_RXSTAT_DSTCLASS    0x01800000
                    356: #define SIS_RXSTAT_OVERRUN     0x02000000
                    357: #define SIS_RXSTAT_RX_ABORT    0x04000000
                    358:
                    359: #define SIS_DSTCLASS_REJECT    0x00000000
                    360: #define SIS_DSTCLASS_UNICAST   0x00800000
                    361: #define SIS_DSTCLASS_MULTICAST 0x01000000
                    362: #define SIS_DSTCLASS_BROADCAST 0x02000000
                    363:
                    364: #define SIS_TXSTAT_COLLCNT     0x000F0000
                    365: #define SIS_TXSTAT_EXCESSCOLLS 0x00100000
                    366: #define SIS_TXSTAT_OUTOFWINCOLL        0x00200000
                    367: #define SIS_TXSTAT_EXCESS_DEFER        0x00400000
                    368: #define SIS_TXSTAT_DEFERED     0x00800000
                    369: #define SIS_TXSTAT_CARR_LOST   0x01000000
                    370: #define SIS_TXSTAT_UNDERRUN    0x02000000
                    371: #define SIS_TXSTAT_TX_ABORT    0x04000000
                    372:
                    373: #define SIS_RX_LIST_CNT_MIN    4
                    374: #define SIS_RX_LIST_CNT_MAX    64
                    375: #define SIS_TX_LIST_CNT                128
                    376:
                    377: struct sis_list_data {
                    378:        struct sis_desc         sis_rx_list[SIS_RX_LIST_CNT_MAX];
                    379:        struct sis_desc         sis_tx_list[SIS_TX_LIST_CNT];
                    380: };
                    381:
                    382: struct sis_ring_data {
                    383:        struct sis_desc         *sis_rx_pdsc;
                    384:        int                     sis_tx_prod;
                    385:        int                     sis_tx_cons;
                    386:        int                     sis_tx_cnt;
                    387: };
                    388:
                    389:
                    390: /*
                    391:  * SiS PCI vendor ID.
                    392:  */
                    393: #define SIS_VENDORID           0x1039
                    394:
                    395: /*
                    396:  * SiS PCI device IDs
                    397:  */
                    398: #define SIS_DEVICEID_900       0x0900
                    399: #define SIS_DEVICEID_7016      0x7016
                    400:
                    401:
                    402: /*
                    403:  * SiS 900 PCI revision codes.
                    404:  */
                    405: #define SIS_REV_900B           0x0003
                    406: #define SIS_REV_630A           0x0080
                    407: #define SIS_REV_630E           0x0081
                    408: #define SIS_REV_630S           0x0082
                    409: #define SIS_REV_630EA1         0x0083
                    410: #define SIS_REV_630ET          0x0084
                    411: #define SIS_REV_635            0x0090
                    412: #define SIS_REV_96x            0x0091
                    413:
                    414: struct sis_type {
                    415:        u_int16_t               sis_vid;
                    416:        u_int16_t               sis_did;
                    417:        char                    *sis_name;
                    418: };
                    419:
                    420: struct sis_mii_frame {
                    421:        u_int8_t                mii_stdelim;
                    422:        u_int8_t                mii_opcode;
                    423:        u_int8_t                mii_phyaddr;
                    424:        u_int8_t                mii_regaddr;
                    425:        u_int8_t                mii_turnaround;
                    426:        u_int16_t               mii_data;
                    427: };
                    428:
                    429: /*
                    430:  * MII constants
                    431:  */
                    432: #define        SIS_MII_STARTDELIM      0x01
                    433: #define        SIS_MII_READOP          0x02
                    434: #define        SIS_MII_WRITEOP         0x01
                    435: #define        SIS_MII_TURNAROUND      0x02
                    436:
                    437: #define SIS_TYPE_900   1
                    438: #define SIS_TYPE_7016  2
                    439: #define SIS_TYPE_83815 3
                    440:
                    441: struct sis_softc {
                    442:        struct device           sc_dev;         /* generic device structure */
                    443:        void                    *sc_ih;         /* interrupt handler cookie */
                    444:        struct arpcom           arpcom;         /* interface info */
                    445:        mii_data_t              sc_mii;
                    446:        bus_space_handle_t      sis_bhandle;
                    447:        bus_space_tag_t         sis_btag;
                    448:        u_int8_t                sis_type;
                    449:        u_int8_t                sis_rev;
                    450:        u_int8_t                sis_link;
                    451:        u_int                   sis_srr;
                    452:        struct sis_list_data    *sis_ldata;
                    453:        struct sis_ring_data    sis_cdata;
                    454:        struct timeout          sis_timeout;
                    455:        bus_dma_tag_t           sc_dmat;
                    456:        bus_dmamap_t            sc_listmap;
                    457:        bus_dma_segment_t       sc_listseg[1];
                    458:        int                     sc_listnseg;
                    459:        caddr_t                 sc_listkva;
                    460:        bus_dmamap_t            sc_rx_sparemap;
                    461:        bus_dmamap_t            sc_tx_sparemap;
                    462:        int                     sis_stopped;
                    463:        int                     sc_rxbufs;
                    464:        int                     sc_if_flags;
                    465: };
                    466:
                    467: /*
                    468:  * register space access macros
                    469:  */
                    470: #define CSR_WRITE_4(sc, reg, val)      \
                    471:        bus_space_write_4(sc->sis_btag, sc->sis_bhandle, reg, val)
                    472:
                    473: #define CSR_READ_4(sc, reg)            \
                    474:        bus_space_read_4(sc->sis_btag, sc->sis_bhandle, reg)
                    475:
                    476: #define SIS_TIMEOUT            1000
                    477: #define SIS_MIN_FRAMELEN       60
                    478:
                    479: /*
                    480:  * PCI low memory base and low I/O base register, and
                    481:  * other PCI registers.
                    482:  */
                    483:
                    484: #define SIS_PCI_VENDOR_ID      0x00
                    485: #define SIS_PCI_DEVICE_ID      0x02
                    486: #define SIS_PCI_COMMAND                0x04
                    487: #define SIS_PCI_STATUS         0x06
                    488: #define SIS_PCI_REVID          0x08
                    489: #define SIS_PCI_CLASSCODE      0x09
                    490: #define SIS_PCI_CACHELEN       0x0C
                    491: #define SIS_PCI_LATENCY_TIMER  0x0D
                    492: #define SIS_PCI_HEADER_TYPE    0x0E
                    493: #define SIS_PCI_LOIO           0x10
                    494: #define SIS_PCI_LOMEM          0x14
                    495: #define SIS_PCI_BIOSROM                0x30
                    496: #define SIS_PCI_INTLINE                0x3C
                    497: #define SIS_PCI_INTPIN         0x3D
                    498: #define SIS_PCI_MINGNT         0x3E
                    499: #define SIS_PCI_MINLAT         0x0F
                    500: #define SIS_PCI_RESETOPT       0x48
                    501: #define SIS_PCI_EEPROM_DATA    0x4C
                    502:
                    503: /* power management registers */
                    504: #define SIS_PCI_CAPID          0x50 /* 8 bits */
                    505: #define SIS_PCI_NEXTPTR                0x51 /* 8 bits */
                    506: #define SIS_PCI_PWRMGMTCAP     0x52 /* 16 bits */
                    507: #define SIS_PCI_PWRMGMTCTRL    0x54 /* 16 bits */
                    508:
                    509: #define SIS_PSTATE_MASK                0x0003
                    510: #define SIS_PSTATE_D0          0x0000
                    511: #define SIS_PSTATE_D1          0x0001
                    512: #define SIS_PSTATE_D2          0x0002
                    513: #define SIS_PSTATE_D3          0x0003
                    514: #define SIS_PME_EN             0x0010
                    515: #define SIS_PME_STATUS         0x8000

CVSweb