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

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

1.1       nbrk        1: /*     $OpenBSD: if_stereg.h,v 1.10 2005/12/17 07:31:27 miod Exp $ */
                      2: /*
                      3:  * Copyright (c) 1997, 1998, 1999
                      4:  *     Bill Paul <wpaul@ctr.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_stereg.h,v 1.5 1999/12/07 20:14:42 wpaul Exp $
                     34:  */
                     35:
                     36: /*
                     37:  * Sundance PCI device/vendor ID for the
                     38:  * ST201 chip.
                     39:  */
                     40: #define ST_VENDORID            0x13F0
                     41: #define ST_DEVICEID_ST201      0x0201
                     42:
                     43: /*
                     44:  * D-Link PCI device/vendor ID for the DFE-550TX.
                     45:  */
                     46: #define DL_VENDORID            0x1186
                     47: #define DL_DEVICEID_550TX      0x1002
                     48:
                     49: /*
                     50:  * Register definitions for the Sundance Technologies ST201 PCI
                     51:  * fast ethernet controller. The register space is 128 bytes long and
                     52:  * can be accessed using either PCI I/O space or PCI memory mapping.
                     53:  * There are 32-bit, 16-bit and 8-bit registers.
                     54:  */
                     55:
                     56: #define STE_DMACTL             0x00
                     57: #define STE_TX_DMALIST_PTR     0x04
                     58: #define STE_TX_DMABURST_THRESH 0x08
                     59: #define STE_TX_DMAURG_THRESH   0x09
                     60: #define STE_TX_DMAPOLL_PERIOD  0x0A
                     61: #define STE_RX_DMASTATUS       0x0C
                     62: #define STE_RX_DMALIST_PTR     0x10
                     63: #define STE_RX_DMABURST_THRESH 0x14
                     64: #define STE_RX_DMAURG_THRESH   0x15
                     65: #define STE_RX_DMAPOLL_PERIOD  0x16
                     66: #define STE_DEBUGCTL           0x1A
                     67: #define STE_ASICCTL            0x30
                     68: #define STE_EEPROM_DATA                0x34
                     69: #define STE_EEPROM_CTL         0x36
                     70: #define STE_FIFOCTL            0x3A
                     71: #define STE_TX_STARTTHRESH     0x3C
                     72: #define STE_RX_EARLYTHRESH     0x3E
                     73: #define STE_EXT_ROMADDR                0x40
                     74: #define STE_EXT_ROMDATA                0x44
                     75: #define STE_WAKE_EVENT         0x45
                     76: #define STE_TX_STATUS          0x46
                     77: #define STE_TX_FRAMEID         0x47
                     78: #define STE_COUNTDOWN          0x48
                     79: #define STE_ISR_ACK            0x4A
                     80: #define STE_IMR                        0x4C
                     81: #define STE_ISR                        0x4E
                     82: #define STE_MACCTL0            0x50
                     83: #define STE_MACCTL1            0x52
                     84: #define STE_PAR0               0x54
                     85: #define STE_PAR1               0x56
                     86: #define STE_PAR2               0x58
                     87: #define STE_MAX_FRAMELEN       0x5A
                     88: #define STE_RX_MODE            0x5C
                     89: #define STE_TX_RECLAIM_THRESH  0x5D
                     90: #define STE_PHYCTL             0x5E
                     91: #define STE_MAR0               0x60
                     92: #define STE_MAR1               0x62
                     93: #define STE_MAR2               0x64
                     94: #define STE_MAR3               0x66
                     95: #define STE_STATS              0x68
                     96:
                     97: #define STE_LATE_COLLS  0x75
                     98: #define STE_MULTI_COLLS        0x76
                     99: #define STE_SINGLE_COLLS 0x77
                    100:
                    101: #define STE_DMACTL_RXDMA_STOPPED       0x00000001
                    102: #define STE_DMACTL_TXDMA_CMPREQ                0x00000002
                    103: #define STE_DMACTL_TXDMA_STOPPED       0x00000004
                    104: #define STE_DMACTL_RXDMA_COMPLETE      0x00000008
                    105: #define STE_DMACTL_TXDMA_COMPLETE      0x00000010
                    106: #define STE_DMACTL_RXDMA_STALL         0x00000100
                    107: #define STE_DMACTL_RXDMA_UNSTALL       0x00000200
                    108: #define STE_DMACTL_TXDMA_STALL         0x00000400
                    109: #define STE_DMACTL_TXDMA_UNSTALL       0x00000800
                    110: #define STE_DMACTL_TXDMA_INPROG                0x00004000
                    111: #define STE_DMACTL_DMA_HALTINPROG      0x00008000
                    112: #define STE_DMACTL_RXEARLY_ENABLE      0x00020000
                    113: #define STE_DMACTL_COUNTDOWN_SPEED     0x00040000
                    114: #define STE_DMACTL_COUNTDOWN_MODE      0x00080000
                    115: #define STE_DMACTL_MWI_DISABLE         0x00100000
                    116: #define STE_DMACTL_RX_DISCARD_OFLOWS   0x00400000
                    117: #define STE_DMACTL_COUNTDOWN_ENABLE    0x00800000
                    118: #define STE_DMACTL_TARGET_ABORT                0x40000000
                    119: #define STE_DMACTL_MASTER_ABORT                0x80000000
                    120:
                    121: /*
                    122:  * TX DMA burst thresh is the number of 32-byte blocks that
                    123:  * must be loaded into the TX Fifo before a TXDMA burst request
                    124:  * will be issued.
                    125:  */
                    126: #define STE_TXDMABURST_THRESH          0x1F
                    127:
                    128: /*
                    129:  * The number of 32-byte blocks in the TX FIFO falls below the
                    130:  * TX DMA urgent threshold, a TX DMA urgent request will be
                    131:  * generated.
                    132:  */
                    133: #define STE_TXDMAURG_THRESH            0x3F
                    134:
                    135: /*
                    136:  * Number of 320ns intervals between polls of the TXDMA next
                    137:  * descriptor pointer (if we're using polling mode).
                    138:  */
                    139: #define STE_TXDMA_POLL_PERIOD          0x7F
                    140:
                    141: #define STE_RX_DMASTATUS_FRAMELEN      0x00001FFF
                    142: #define STE_RX_DMASTATUS_RXERR         0x00004000
                    143: #define STE_RX_DMASTATUS_DMADONE       0x00008000
                    144: #define STE_RX_DMASTATUS_FIFO_OFLOW    0x00010000
                    145: #define STE_RX_DMASTATUS_RUNT          0x00020000
                    146: #define STE_RX_DMASTATUS_ALIGNERR      0x00040000
                    147: #define STE_RX_DMASTATUS_CRCERR                0x00080000
                    148: #define STE_RX_DMASTATUS_GIANT         0x00100000
                    149: #define STE_RX_DMASTATUS_DRIBBLE       0x00800000
                    150: #define STE_RX_DMASTATUS_DMA_OFLOW     0x01000000
                    151:
                    152: /*
                    153:  * RX DMA burst thresh is the number of 32-byte blocks that
                    154:  * must be present in the RX FIFO before a RXDMA bus master
                    155:  * request will be issued.
                    156:  */
                    157: #define STE_RXDMABURST_THRESH          0xFF
                    158:
                    159: /*
                    160:  * The number of 32-byte blocks in the RX FIFO falls below the
                    161:  * RX DMA urgent threshold, a RX DMA urgent request will be
                    162:  * generated.
                    163:  */
                    164: #define STE_RXDMAURG_THRESH            0x1F
                    165:
                    166: /*
                    167:  * Number of 320ns intervals between polls of the RXDMA complete
                    168:  * bit in the status field on the current RX descriptor (if we're
                    169:  * using polling mode).
                    170:  */
                    171: #define STE_RXDMA_POLL_PERIOD          0x7F
                    172:
                    173: #define STE_DEBUGCTL_GPIO0_CTL         0x0001
                    174: #define STE_DEBUGCTL_GPIO1_CTL         0x0002
                    175: #define STE_DEBUGCTL_GPIO0_DATA                0x0004
                    176: #define STE_DEBUGCTL_GPIO1_DATA                0x0008
                    177:
                    178: #define STE_ASICCTL_ROMSIZE            0x00000002
                    179: #define STE_ASICCTL_TX_LARGEPKTS       0x00000004
                    180: #define STE_ASICCTL_RX_LARGEPKTS       0x00000008
                    181: #define STE_ASICCTL_EXTROM_DISABLE     0x00000010
                    182: #define STE_ASICCTL_PHYSPEED_10                0x00000020
                    183: #define STE_ASICCTL_PHYSPEED_100       0x00000040
                    184: #define STE_ASICCTL_PHYMEDIA           0x00000080
                    185: #define STE_ASICCTL_FORCEDCONFIG       0x00000700
                    186: #define STE_ASICCTL_D3RESET_DISABLE    0x00000800
                    187: #define STE_ASICCTL_SPEEDUPMODE                0x00002000
                    188: #define STE_ASICCTL_LEDMODE            0x00004000
                    189: #define STE_ASICCTL_RSTOUT_POLARITY    0x00008000
                    190: #define STE_ASICCTL_GLOBAL_RESET       0x00010000
                    191: #define STE_ASICCTL_RX_RESET           0x00020000
                    192: #define STE_ASICCTL_TX_RESET           0x00040000
                    193: #define STE_ASICCTL_DMA_RESET          0x00080000
                    194: #define STE_ASICCTL_FIFO_RESET         0x00100000
                    195: #define STE_ASICCTL_NETWORK_RESET      0x00200000
                    196: #define STE_ASICCTL_HOST_RESET         0x00400000
                    197: #define STE_ASICCTL_AUTOINIT_RESET     0x00800000
                    198: #define STE_ASICCTL_EXTRESET_RESET     0x01000000
                    199: #define STE_ASICCTL_SOFTINTR           0x02000000
                    200: #define STE_ASICCTL_RESET_BUSY         0x04000000
                    201:
                    202: #define STE_ASICCTL1_GLOBAL_RESET      0x0001
                    203: #define STE_ASICCTL1_RX_RESET          0x0002
                    204: #define STE_ASICCTL1_TX_RESET          0x0004
                    205: #define STE_ASICCTL1_DMA_RESET         0x0008
                    206: #define STE_ASICCTL1_FIFO_RESET                0x0010
                    207: #define STE_ASICCTL1_NETWORK_RESET     0x0020
                    208: #define STE_ASICCTL1_HOST_RESET                0x0040
                    209: #define STE_ASICCTL1_AUTOINIT_RESET    0x0080
                    210: #define STE_ASICCTL1_EXTRESET_RESET    0x0100
                    211: #define STE_ASICCTL1_SOFTINTR          0x0200
                    212: #define STE_ASICCTL1_RESET_BUSY                0x0400
                    213:
                    214: #define STE_EECTL_ADDR                 0x00FF
                    215: #define STE_EECTL_OPCODE               0x0300
                    216: #define STE_EECTL_BUSY                 0x1000
                    217:
                    218: #define STE_EEOPCODE_WRITE             0x0100
                    219: #define STE_EEOPCODE_READ              0x0200
                    220: #define STE_EEOPCODE_ERASE             0x0300
                    221:
                    222: #define STE_FIFOCTL_RAMTESTMODE                0x0001
                    223: #define STE_FIFOCTL_OVERRUNMODE                0x0200
                    224: #define STE_FIFOCTL_RXFIFOFULL         0x0800
                    225: #define STE_FIFOCTL_TX_BUSY            0x4000
                    226: #define STE_FIFOCTL_RX_BUSY            0x8000
                    227:
                    228: /*
                    229:  * The number of bytes that must in present in the TX FIFO before
                    230:  * transmission begins. Value should be in increments of 4 bytes.
                    231:  */
                    232: #define STE_TXSTART_THRESH             0x1FFC
                    233:
                    234: /*
                    235:  * Number of bytes that must be present in the RX FIFO before
                    236:  * an RX EARLY interrupt is generated.
                    237:  */
                    238: #define STE_RXEARLY_THRESH             0x1FFC
                    239:
                    240: #define STE_WAKEEVENT_WAKEPKT_ENB      0x01
                    241: #define STE_WAKEEVENT_MAGICPKT_ENB     0x02
                    242: #define STE_WAKEEVENT_LINKEVT_ENB      0x04
                    243: #define STE_WAKEEVENT_WAKEPOLARITY     0x08
                    244: #define STE_WAKEEVENT_WAKEPKTEVENT     0x10
                    245: #define STE_WAKEEVENT_MAGICPKTEVENT    0x20
                    246: #define STE_WAKEEVENT_LINKEVENT                0x40
                    247: #define STE_WAKEEVENT_WAKEONLAN_ENB    0x80
                    248:
                    249: #define STE_TXSTATUS_RECLAIMERR                0x02
                    250: #define STE_TXSTATUS_STATSOFLOW                0x04
                    251: #define STE_TXSTATUS_EXCESSCOLLS       0x08
                    252: #define STE_TXSTATUS_UNDERRUN          0x10
                    253: #define STE_TXSTATUS_TXINTR_REQ                0x40
                    254: #define STE_TXSTATUS_TXDONE            0x80
                    255:
                    256: #define STE_ISRACK_INTLATCH            0x0001
                    257: #define STE_ISRACK_HOSTERR             0x0002
                    258: #define STE_ISRACK_TX_DONE             0x0004
                    259: #define STE_ISRACK_MACCTL_FRAME                0x0008
                    260: #define STE_ISRACK_RX_DONE             0x0010
                    261: #define STE_ISRACK_RX_EARLY            0x0020
                    262: #define STE_ISRACK_SOFTINTR            0x0040
                    263: #define STE_ISRACK_STATS_OFLOW         0x0080
                    264: #define STE_ISRACK_LINKEVENT           0x0100
                    265: #define STE_ISRACK_TX_DMADONE          0x0200
                    266: #define STE_ISRACK_RX_DMADONE          0x0400
                    267:
                    268: #define STE_IMR_HOSTERR                        0x0002
                    269: #define STE_IMR_TX_DONE                        0x0004
                    270: #define STE_IMR_MACCTL_FRAME           0x0008
                    271: #define STE_IMR_RX_DONE                        0x0010
                    272: #define STE_IMR_RX_EARLY               0x0020
                    273: #define STE_IMR_SOFTINTR               0x0040
                    274: #define STE_IMR_STATS_OFLOW            0x0080
                    275: #define STE_IMR_LINKEVENT              0x0100
                    276: #define STE_IMR_TX_DMADONE             0x0200
                    277: #define STE_IMR_RX_DMADONE             0x0400
                    278:
                    279: #define STE_INTRS                                      \
                    280:        (STE_IMR_RX_DMADONE|STE_IMR_TX_DMADONE| \
                    281:        STE_IMR_TX_DONE|STE_IMR_HOSTERR| \
                    282:         STE_IMR_LINKEVENT)
                    283:
                    284: #define STE_ISR_INTLATCH               0x0001
                    285: #define STE_ISR_HOSTERR                        0x0002
                    286: #define STE_ISR_TX_DONE                        0x0004
                    287: #define STE_ISR_MACCTL_FRAME           0x0008
                    288: #define STE_ISR_RX_DONE                        0x0010
                    289: #define STE_ISR_RX_EARLY               0x0020
                    290: #define STE_ISR_SOFTINTR               0x0040
                    291: #define STE_ISR_STATS_OFLOW            0x0080
                    292: #define STE_ISR_LINKEVENT              0x0100
                    293: #define STE_ISR_TX_DMADONE             0x0200
                    294: #define STE_ISR_RX_DMADONE             0x0400
                    295:
                    296: /*
                    297:  * Note: the Sundance manual gives the impression that the's
                    298:  * only one 32-bit MACCTL register. In fact, there are two
                    299:  * 16-bit registers side by side, and you have to access them
                    300:  * separately.
                    301:  */
                    302: #define STE_MACCTL0_IPG                        0x0003
                    303: #define STE_MACCTL0_FULLDUPLEX         0x0020
                    304: #define STE_MACCTL0_RX_GIANTS          0x0040
                    305: #define STE_MACCTL0_FLOWCTL_ENABLE     0x0100
                    306: #define STE_MACCTL0_RX_FCS             0x0200
                    307: #define STE_MACCTL0_FIFOLOOPBK         0x0400
                    308: #define STE_MACCTL0_MACLOOPBK          0x0800
                    309:
                    310: #define STE_MACCTL1_COLLDETECT         0x0001
                    311: #define STE_MACCTL1_CARRSENSE          0x0002
                    312: #define STE_MACCTL1_TX_BUSY            0x0004
                    313: #define STE_MACCTL1_TX_ERROR           0x0008
                    314: #define STE_MACCTL1_STATS_ENABLE       0x0020
                    315: #define STE_MACCTL1_STATS_DISABLE      0x0040
                    316: #define STE_MACCTL1_STATS_ENABLED      0x0080
                    317: #define STE_MACCTL1_TX_ENABLE          0x0100
                    318: #define STE_MACCTL1_TX_DISABLE         0x0200
                    319: #define STE_MACCTL1_TX_ENABLED         0x0400
                    320: #define STE_MACCTL1_RX_ENABLE          0x0800
                    321: #define STE_MACCTL1_RX_DISABLE         0x1000
                    322: #define STE_MACCTL1_RX_ENABLED         0x2000
                    323: #define STE_MACCTL1_PAUSED             0x4000
                    324:
                    325: #define STE_IPG_96BT                   0x00000000
                    326: #define STE_IPG_128BT                  0x00000001
                    327: #define STE_IPG_224BT                  0x00000002
                    328: #define STE_IPG_544BT                  0x00000003
                    329:
                    330: #define STE_RXMODE_UNICAST             0x01
                    331: #define STE_RXMODE_ALLMULTI            0x02
                    332: #define STE_RXMODE_BROADCAST           0x04
                    333: #define STE_RXMODE_PROMISC             0x08
                    334: #define STE_RXMODE_MULTIHASH           0x10
                    335: #define STE_RXMODE_ALLIPMULTI          0x20
                    336:
                    337: #define STE_PHYCTL_MCLK                        0x01
                    338: #define STE_PHYCTL_MDATA               0x02
                    339: #define STE_PHYCTL_MDIR                        0x04
                    340: #define STE_PHYCTL_CLK25_DISABLE       0x08
                    341: #define STE_PHYCTL_DUPLEXPOLARITY      0x10
                    342: #define STE_PHYCTL_DUPLEXSTAT          0x20
                    343: #define STE_PHYCTL_SPEEDSTAT           0x40
                    344: #define STE_PHYCTL_LINKSTAT            0x80
                    345:
                    346: /*
                    347:  * EEPROM offsets.
                    348:  */
                    349: #define STE_EEADDR_CONFIGPARM          0x00
                    350: #define STE_EEADDR_ASICCTL             0x02
                    351: #define STE_EEADDR_SUBSYS_ID           0x04
                    352: #define STE_EEADDR_SUBVEN_ID           0x08
                    353:
                    354: #define STE_EEADDR_NODE0               0x10
                    355: #define STE_EEADDR_NODE1               0x12
                    356: #define STE_EEADDR_NODE2               0x14
                    357:
                    358: /* PCI registers */
                    359: #define STE_PCI_VENDOR_ID              0x00
                    360: #define STE_PCI_DEVICE_ID              0x02
                    361: #define STE_PCI_COMMAND                        0x04
                    362: #define STE_PCI_STATUS                 0x06
                    363: #define STE_PCI_CLASSCODE              0x09
                    364: #define STE_PCI_LATENCY_TIMER          0x0D
                    365: #define STE_PCI_HEADER_TYPE            0x0E
                    366: #define STE_PCI_LOIO                   0x10
                    367: #define STE_PCI_LOMEM                  0x14
                    368: #define STE_PCI_BIOSROM                        0x30
                    369: #define STE_PCI_INTLINE                        0x3C
                    370: #define STE_PCI_INTPIN                 0x3D
                    371: #define STE_PCI_MINGNT                 0x3E
                    372: #define STE_PCI_MINLAT                 0x0F
                    373:
                    374: #define STE_PCI_CAPID                  0x50 /* 8 bits */
                    375: #define STE_PCI_NEXTPTR                        0x51 /* 8 bits */
                    376: #define STE_PCI_PWRMGMTCAP             0x52 /* 16 bits */
                    377: #define STE_PCI_PWRMGMTCTRL            0x54 /* 16 bits */
                    378:
                    379: #define STE_PSTATE_MASK                        0x0003
                    380: #define STE_PSTATE_D0                  0x0000
                    381: #define STE_PSTATE_D1                  0x0002
                    382: #define STE_PSTATE_D2                  0x0002
                    383: #define STE_PSTATE_D3                  0x0003
                    384: #define STE_PME_EN                     0x0010
                    385: #define STE_PME_STATUS                 0x8000
                    386:
                    387:
                    388: struct ste_stats {
                    389:        u_int32_t               ste_rx_bytes;
                    390:        u_int32_t               ste_tx_bytes;
                    391:        u_int16_t               ste_tx_frames;
                    392:        u_int16_t               ste_rx_frames;
                    393:        u_int8_t                ste_carrsense_errs;
                    394:        u_int8_t                ste_late_colls;
                    395:        u_int8_t                ste_multi_colls;
                    396:        u_int8_t                ste_single_colls;
                    397:        u_int8_t                ste_tx_frames_defered;
                    398:        u_int8_t                ste_rx_lost_frames;
                    399:        u_int8_t                ste_tx_excess_defers;
                    400:        u_int8_t                ste_tx_abort_excess_colls;
                    401:        u_int8_t                ste_tx_bcast_frames;
                    402:        u_int8_t                ste_rx_bcast_frames;
                    403:        u_int8_t                ste_tx_mcast_frames;
                    404:        u_int8_t                ste_rx_mcast_frames;
                    405: };
                    406:
                    407: struct ste_frag {
                    408:        u_int32_t               ste_addr;
                    409:        u_int32_t               ste_len;
                    410: };
                    411:
                    412: #define STE_FRAG_LAST          0x80000000
                    413: #define STE_FRAG_LEN           0x00001FFF
                    414:
                    415: #define STE_MAXFRAGS   8
                    416:
                    417: struct ste_desc {
                    418:        u_int32_t               ste_next;
                    419:        u_int32_t               ste_ctl;
                    420:        struct ste_frag         ste_frags[STE_MAXFRAGS];
                    421: };
                    422:
                    423: struct ste_desc_onefrag {
                    424:        u_int32_t               ste_next;
                    425:        u_int32_t               ste_status;
                    426:        struct ste_frag         ste_frag;
                    427: };
                    428:
                    429: #define STE_TXCTL_WORDALIGN    0x00000003
                    430: #define STE_TXCTL_FRAMEID      0x000003FC
                    431: #define STE_TXCTL_NOCRC                0x00002000
                    432: #define STE_TXCTL_TXINTR       0x00008000
                    433: #define STE_TXCTL_DMADONE      0x00010000
                    434: #define STE_TXCTL_DMAINTR      0x80000000
                    435:
                    436: #define STE_RXSTAT_FRAMELEN    0x00001FFF
                    437: #define STE_RXSTAT_FRAME_ERR   0x00004000
                    438: #define STE_RXSTAT_DMADONE     0x00008000
                    439: #define STE_RXSTAT_FIFO_OFLOW  0x00010000
                    440: #define STE_RXSTAT_RUNT                0x00020000
                    441: #define STE_RXSTAT_ALIGNERR    0x00040000
                    442: #define STE_RXSTAT_CRCERR      0x00080000
                    443: #define STE_RXSTAT_GIANT       0x00100000
                    444: #define STE_RXSTAT_DRIBBLEBITS 0x00800000
                    445: #define STE_RXSTAT_DMA_OFLOW   0x01000000
                    446: #define STE_RXATAT_ONEBUF      0x10000000
                    447:
                    448: /*
                    449:  * register space access macros
                    450:  */
                    451: #define CSR_WRITE_4(sc, reg, val)      \
                    452:        bus_space_write_4(sc->ste_btag, sc->ste_bhandle, reg, val)
                    453: #define CSR_WRITE_2(sc, reg, val)      \
                    454:        bus_space_write_2(sc->ste_btag, sc->ste_bhandle, reg, val)
                    455: #define CSR_WRITE_1(sc, reg, val)      \
                    456:        bus_space_write_1(sc->ste_btag, sc->ste_bhandle, reg, val)
                    457:
                    458: #define CSR_READ_4(sc, reg)            \
                    459:        bus_space_read_4(sc->ste_btag, sc->ste_bhandle, reg)
                    460: #define CSR_READ_2(sc, reg)            \
                    461:        bus_space_read_2(sc->ste_btag, sc->ste_bhandle, reg)
                    462: #define CSR_READ_1(sc, reg)            \
                    463:        bus_space_read_1(sc->ste_btag, sc->ste_bhandle, reg)
                    464:
                    465: #define STE_TIMEOUT            1000
                    466: #define STE_MIN_FRAMELEN       60
                    467: #define STE_RX_LIST_CNT                64
                    468: #define STE_TX_LIST_CNT                128
                    469: #define STE_INC(x, y)          (x) = (x + 1) % y
                    470: #define STE_NEXT(x, y)         (x + 1) % y
                    471:
                    472: struct ste_type {
                    473:        u_int16_t               ste_vid;
                    474:        u_int16_t               ste_did;
                    475:        char                    *ste_name;
                    476: };
                    477:
                    478: struct ste_list_data {
                    479:        struct ste_desc_onefrag ste_rx_list[STE_RX_LIST_CNT];
                    480:        struct ste_desc         ste_tx_list[STE_TX_LIST_CNT];
                    481: };
                    482:
                    483: struct ste_chain {
                    484:        struct ste_desc         *ste_ptr;
                    485:        struct mbuf             *ste_mbuf;
                    486:        struct ste_chain        *ste_next;
                    487:        u_int32_t               ste_phys;
                    488: };
                    489:
                    490: struct ste_chain_onefrag {
                    491:        struct ste_desc_onefrag *ste_ptr;
                    492:        struct mbuf             *ste_mbuf;
                    493:        struct ste_chain_onefrag        *ste_next;
                    494: };
                    495:
                    496: struct ste_chain_data {
                    497:        struct ste_chain_onefrag ste_rx_chain[STE_RX_LIST_CNT];
                    498:        struct ste_chain         ste_tx_chain[STE_TX_LIST_CNT];
                    499:        struct ste_chain_onefrag *ste_rx_head;
                    500:
                    501:        int                     ste_tx_prod;
                    502:        int                     ste_tx_cons;
                    503: };
                    504:
                    505: struct ste_softc {
                    506:        struct device           sc_dev;
                    507:        void                    *sc_ih;
                    508:        struct arpcom           arpcom;
                    509:        struct timeout          sc_stats_tmo;
                    510:        mii_data_t              sc_mii;
                    511:        bus_space_tag_t         ste_btag;
                    512:        bus_space_handle_t      ste_bhandle;
                    513:        int                     ste_tx_thresh;
                    514:        u_int8_t                ste_link;
                    515:        int                     ste_if_flags;
                    516:        struct ste_chain        *ste_tx_prev;
                    517:        struct ste_list_data    *ste_ldata;
                    518:        caddr_t                 ste_ldata_ptr;
                    519:        struct ste_chain_data   ste_cdata;
                    520:        u_int8_t                ste_one_phy;
                    521: };
                    522:
                    523: struct ste_mii_frame {
                    524:        u_int8_t                mii_stdelim;
                    525:        u_int8_t                mii_opcode;
                    526:        u_int8_t                mii_phyaddr;
                    527:        u_int8_t                mii_regaddr;
                    528:        u_int8_t                mii_turnaround;
                    529:        u_int16_t               mii_data;
                    530: };
                    531:
                    532: /*
                    533:  * MII constants
                    534:  */
                    535: #define STE_MII_STARTDELIM     0x01
                    536: #define STE_MII_READOP         0x02
                    537: #define STE_MII_WRITEOP                0x01
                    538: #define STE_MII_TURNAROUND     0x02
                    539:
                    540: #ifdef __alpha__
                    541: #undef vtophys
                    542: #define vtophys(va)            alpha_XXX_dmamap((vaddr_t)va)
                    543: #endif

CVSweb