Annotation of sys/dev/pci/if_vrreg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: if_vrreg.h,v 1.17 2006/02/05 18:23:37 brad Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 1997, 1998
! 5: * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: * 3. All advertising materials mentioning features or use of this software
! 16: * must display the following acknowledgement:
! 17: * This product includes software developed by Bill Paul.
! 18: * 4. Neither the name of the author nor the names of any co-contributors
! 19: * may be used to endorse or promote products derived from this software
! 20: * without specific prior written permission.
! 21: *
! 22: * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
! 23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 25: * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
! 26: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 27: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 28: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 29: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 30: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 31: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 32: * THE POSSIBILITY OF SUCH DAMAGE.
! 33: *
! 34: * $FreeBSD: src/sys/pci/if_vrreg.h,v 1.17 2003/02/01 01:27:05 silby Exp $
! 35: */
! 36:
! 37: /*
! 38: * Rhine register definitions.
! 39: */
! 40:
! 41: #define VR_PAR0 0x00 /* node address 0 to 4 */
! 42: #define VR_PAR1 0x04 /* node address 2 to 6 */
! 43: #define VR_RXCFG 0x06 /* receiver config register */
! 44: #define VR_TXCFG 0x07 /* transmit config register */
! 45: #define VR_COMMAND 0x08 /* command register */
! 46: #define VR_ISR 0x0C /* interrupt/status register */
! 47: #define VR_IMR 0x0E /* interrupt mask register */
! 48: #define VR_MAR0 0x10 /* multicast hash 0 */
! 49: #define VR_MAR1 0x14 /* multicast hash 1 */
! 50: #define VR_RXADDR 0x18 /* rx descriptor list start addr */
! 51: #define VR_TXADDR 0x1C /* tx descriptor list start addr */
! 52: #define VR_CURRXDESC0 0x20
! 53: #define VR_CURRXDESC1 0x24
! 54: #define VR_CURRXDESC2 0x28
! 55: #define VR_CURRXDESC3 0x2C
! 56: #define VR_NEXTRXDESC0 0x30
! 57: #define VR_NEXTRXDESC1 0x34
! 58: #define VR_NEXTRXDESC2 0x38
! 59: #define VR_NEXTRXDESC3 0x3C
! 60: #define VR_CURTXDESC0 0x40
! 61: #define VR_CURTXDESC1 0x44
! 62: #define VR_CURTXDESC2 0x48
! 63: #define VR_CURTXDESC3 0x4C
! 64: #define VR_NEXTTXDESC0 0x50
! 65: #define VR_NEXTTXDESC1 0x54
! 66: #define VR_NEXTTXDESC2 0x58
! 67: #define VR_NEXTTXDESC3 0x5C
! 68: #define VR_CURRXDMA 0x60 /* current RX DMA address */
! 69: #define VR_CURTXDMA 0x64 /* current TX DMA address */
! 70: #define VR_TALLYCNT 0x68 /* tally counter test register */
! 71: #define VR_PHYADDR 0x6C
! 72: #define VR_MIISTAT 0x6D
! 73: #define VR_BCR0 0x6E
! 74: #define VR_BCR1 0x6F
! 75: #define VR_MIICMD 0x70
! 76: #define VR_MIIADDR 0x71
! 77: #define VR_MIIDATA 0x72
! 78: #define VR_EECSR 0x74
! 79: #define VR_TEST 0x75
! 80: #define VR_GPIO 0x76
! 81: #define VR_CONFIG 0x78
! 82: #define VR_MPA_CNT 0x7C
! 83: #define VR_CRC_CNT 0x7E
! 84: #define VR_STICKHW 0x83
! 85:
! 86: /* Misc Registers */
! 87: #define VR_MISC_CR1 0x81
! 88: #define VR_MISCCR1_FORSRST 0x40
! 89:
! 90: /*
! 91: * RX config bits.
! 92: */
! 93: #define VR_RXCFG_RX_ERRPKTS 0x01
! 94: #define VR_RXCFG_RX_RUNT 0x02
! 95: #define VR_RXCFG_RX_MULTI 0x04
! 96: #define VR_RXCFG_RX_BROAD 0x08
! 97: #define VR_RXCFG_RX_PROMISC 0x10
! 98: #define VR_RXCFG_RX_THRESH 0xE0
! 99:
! 100: #define VR_RXTHRESH_32BYTES 0x00
! 101: #define VR_RXTHRESH_64BYTES 0x20
! 102: #define VR_RXTHRESH_128BYTES 0x40
! 103: #define VR_RXTHRESH_256BYTES 0x60
! 104: #define VR_RXTHRESH_512BYTES 0x80
! 105: #define VR_RXTHRESH_768BYTES 0xA0
! 106: #define VR_RXTHRESH_1024BYTES 0xC0
! 107: #define VR_RXTHRESH_STORENFWD 0xE0
! 108:
! 109: /*
! 110: * TX config bits.
! 111: */
! 112: #define VR_TXCFG_RSVD0 0x01
! 113: #define VR_TXCFG_LOOPBKMODE 0x06
! 114: #define VR_TXCFG_BACKOFF 0x08
! 115: #define VR_TXCFG_RSVD1 0x10
! 116: #define VR_TXCFG_TX_THRESH 0xE0
! 117:
! 118: #define VR_TXTHRESH_32BYTES 0x00
! 119: #define VR_TXTHRESH_64BYTES 0x20
! 120: #define VR_TXTHRESH_128BYTES 0x40
! 121: #define VR_TXTHRESH_256BYTES 0x60
! 122: #define VR_TXTHRESH_512BYTES 0x80
! 123: #define VR_TXTHRESH_768BYTES 0xA0
! 124: #define VR_TXTHRESH_1024BYTES 0xC0
! 125: #define VR_TXTHRESH_STORENFWD 0xE0
! 126:
! 127: /*
! 128: * Command register bits.
! 129: */
! 130: #define VR_CMD_INIT 0x0001
! 131: #define VR_CMD_START 0x0002
! 132: #define VR_CMD_STOP 0x0004
! 133: #define VR_CMD_RX_ON 0x0008
! 134: #define VR_CMD_TX_ON 0x0010
! 135: #define VR_CMD_TX_GO 0x0020
! 136: #define VR_CMD_RX_GO 0x0040
! 137: #define VR_CMD_RSVD 0x0080
! 138: #define VR_CMD_RX_EARLY 0x0100
! 139: #define VR_CMD_TX_EARLY 0x0200
! 140: #define VR_CMD_FULLDUPLEX 0x0400
! 141: #define VR_CMD_TX_NOPOLL 0x0800
! 142:
! 143: #define VR_CMD_RESET 0x8000
! 144:
! 145: /*
! 146: * Interrupt status bits.
! 147: */
! 148: #define VR_ISR_RX_OK 0x0001 /* packet rx ok */
! 149: #define VR_ISR_TX_OK 0x0002 /* packet tx ok */
! 150: #define VR_ISR_RX_ERR 0x0004 /* packet rx with err */
! 151: #define VR_ISR_TX_ABRT 0x0008 /* tx aborted due to excess colls */
! 152: #define VR_ISR_TX_UNDERRUN 0x0010 /* tx buffer underflow */
! 153: #define VR_ISR_RX_NOBUF 0x0020 /* no rx buffer available */
! 154: #define VR_ISR_BUSERR 0x0040 /* PCI bus error */
! 155: #define VR_ISR_STATSOFLOW 0x0080 /* stats counter oflow */
! 156: #define VR_ISR_RX_EARLY 0x0100 /* rx early */
! 157: #define VR_ISR_LINKSTAT 0x0200 /* MII status change */
! 158: #define VR_ISR_ETI 0x0200 /* Tx early (3043/3071) */
! 159: #define VR_ISR_UDFI 0x0200 /* Tx FIFO underflow (3065) */
! 160: #define VR_ISR_RX_OFLOW 0x0400 /* rx FIFO overflow */
! 161: #define VR_ISR_RX_DROPPED 0x0800
! 162: #define VR_ISR_RX_NOBUF2 0x1000
! 163: #define VR_ISR_TX_ABRT2 0x2000
! 164: #define VR_ISR_LINKSTAT2 0x4000
! 165: #define VR_ISR_MAGICPACKET 0x8000
! 166:
! 167: /*
! 168: * Interrupt mask bits.
! 169: */
! 170: #define VR_IMR_RX_OK 0x0001 /* packet rx ok */
! 171: #define VR_IMR_TX_OK 0x0002 /* packet tx ok */
! 172: #define VR_IMR_RX_ERR 0x0004 /* packet rx with err */
! 173: #define VR_IMR_TX_ABRT 0x0008 /* tx aborted due to excess colls */
! 174: #define VR_IMR_TX_UNDERRUN 0x0010 /* tx buffer underflow */
! 175: #define VR_IMR_RX_NOBUF 0x0020 /* no rx buffer available */
! 176: #define VR_IMR_BUSERR 0x0040 /* PCI bus error */
! 177: #define VR_IMR_STATSOFLOW 0x0080 /* stats counter oflow */
! 178: #define VR_IMR_RX_EARLY 0x0100 /* rx early */
! 179: #define VR_IMR_LINKSTAT 0x0200 /* MII status change */
! 180: #define VR_IMR_RX_OFLOW 0x0400 /* rx FIFO overflow */
! 181: #define VR_IMR_RX_DROPPED 0x0800
! 182: #define VR_IMR_RX_NOBUF2 0x1000
! 183: #define VR_IMR_TX_ABRT2 0x2000
! 184: #define VR_IMR_LINKSTAT2 0x4000
! 185: #define VR_IMR_MAGICPACKET 0x8000
! 186:
! 187: #define VR_INTRS \
! 188: (VR_IMR_RX_OK|VR_IMR_TX_OK|VR_IMR_RX_NOBUF| \
! 189: VR_IMR_TX_ABRT|VR_IMR_TX_UNDERRUN|VR_IMR_BUSERR| \
! 190: VR_IMR_RX_ERR|VR_ISR_RX_DROPPED)
! 191:
! 192: /*
! 193: * MII status register.
! 194: */
! 195:
! 196: #define VR_MIISTAT_SPEED 0x01
! 197: #define VR_MIISTAT_LINKFAULT 0x02
! 198: #define VR_MIISTAT_MGTREADERR 0x04
! 199: #define VR_MIISTAT_MIIERR 0x08
! 200: #define VR_MIISTAT_PHYOPT 0x10
! 201: #define VR_MIISTAT_MDC_SPEED 0x20
! 202: #define VR_MIISTAT_RSVD 0x40
! 203: #define VR_MIISTAT_GPIO1POLL 0x80
! 204:
! 205: /*
! 206: * MII command register bits.
! 207: */
! 208: #define VR_MIICMD_CLK 0x01
! 209: #define VR_MIICMD_DATAOUT 0x02
! 210: #define VR_MIICMD_DATAIN 0x04
! 211: #define VR_MIICMD_DIR 0x08
! 212: #define VR_MIICMD_DIRECTPGM 0x10
! 213: #define VR_MIICMD_WRITE_ENB 0x20
! 214: #define VR_MIICMD_READ_ENB 0x40
! 215: #define VR_MIICMD_AUTOPOLL 0x80
! 216:
! 217: /*
! 218: * EEPROM control bits.
! 219: */
! 220: #define VR_EECSR_DATAIN 0x01 /* data out */
! 221: #define VR_EECSR_DATAOUT 0x02 /* data in */
! 222: #define VR_EECSR_CLK 0x04 /* clock */
! 223: #define VR_EECSR_CS 0x08 /* chip select */
! 224: #define VR_EECSR_DPM 0x10
! 225: #define VR_EECSR_LOAD 0x20
! 226: #define VR_EECSR_EMBP 0x40
! 227: #define VR_EECSR_EEPR 0x80
! 228:
! 229: #define VR_EECMD_WRITE 0x140
! 230: #define VR_EECMD_READ 0x180
! 231: #define VR_EECMD_ERASE 0x1c0
! 232:
! 233: /*
! 234: * Test register bits.
! 235: */
! 236: #define VR_TEST_TEST0 0x01
! 237: #define VR_TEST_TEST1 0x02
! 238: #define VR_TEST_TEST2 0x04
! 239: #define VR_TEST_TSTUD 0x08
! 240: #define VR_TEST_TSTOV 0x10
! 241: #define VR_TEST_BKOFF 0x20
! 242: #define VR_TEST_FCOL 0x40
! 243: #define VR_TEST_HBDES 0x80
! 244:
! 245: /*
! 246: * Config register bits.
! 247: */
! 248: #define VR_CFG_GPIO2OUTENB 0x00000001
! 249: #define VR_CFG_GPIO2OUT 0x00000002 /* gen. purp. pin */
! 250: #define VR_CFG_GPIO2IN 0x00000004 /* gen. purp. pin */
! 251: #define VR_CFG_AUTOOPT 0x00000008 /* enable rx/tx autopoll */
! 252: #define VR_CFG_MIIOPT 0x00000010
! 253: #define VR_CFG_MMIENB 0x00000020 /* memory mapped mode enb */
! 254: #define VR_CFG_JUMPER 0x00000040 /* PHY and oper. mode select */
! 255: #define VR_CFG_EELOAD 0x00000080 /* enable EEPROM programming */
! 256: #define VR_CFG_LATMENB 0x00000100 /* larency timer effect enb. */
! 257: #define VR_CFG_MRREADWAIT 0x00000200
! 258: #define VR_CFG_MRWRITEWAIT 0x00000400
! 259: #define VR_CFG_RX_ARB 0x00000800
! 260: #define VR_CFG_TX_ARB 0x00001000
! 261: #define VR_CFG_READMULTI 0x00002000
! 262: #define VR_CFG_TX_PACE 0x00004000
! 263: #define VR_CFG_TX_QDIS 0x00008000
! 264: #define VR_CFG_ROMSEL0 0x00010000
! 265: #define VR_CFG_ROMSEL1 0x00020000
! 266: #define VR_CFG_ROMSEL2 0x00040000
! 267: #define VR_CFG_ROMTIMESEL 0x00080000
! 268: #define VR_CFG_RSVD0 0x00100000
! 269: #define VR_CFG_ROMDLY 0x00200000
! 270: #define VR_CFG_ROMOPT 0x00400000
! 271: #define VR_CFG_RSVD1 0x00800000
! 272: #define VR_CFG_BACKOFFOPT 0x01000000
! 273: #define VR_CFG_BACKOFFMOD 0x02000000
! 274: #define VR_CFG_CAPEFFECT 0x04000000
! 275: #define VR_CFG_BACKOFFRAND 0x08000000
! 276: #define VR_CFG_MAGICKPACKET 0x10000000
! 277: #define VR_CFG_PCIREADLINE 0x20000000
! 278: #define VR_CFG_DIAG 0x40000000
! 279: #define VR_CFG_GPIOEN 0x80000000
! 280:
! 281: /* Sticky HW bits */
! 282: #define VR_STICKHW_DS0 0x01
! 283: #define VR_STICKHW_DS1 0x02
! 284: #define VR_STICKHW_WOL_ENB 0x04
! 285: #define VR_STICKHW_WOL_STS 0x08
! 286: #define VR_STICKHW_LEGWOL_ENB 0x80
! 287:
! 288: /*
! 289: * BCR0 register bits. (At least for the VT6102 chip.)
! 290: */
! 291: #define VR_BCR0_DMA_LENGTH 0x07
! 292:
! 293: #define VR_BCR0_DMA_32BYTES 0x00
! 294: #define VR_BCR0_DMA_64BYTES 0x01
! 295: #define VR_BCR0_DMA_128BYTES 0x02
! 296: #define VR_BCR0_DMA_256BYTES 0x03
! 297: #define VR_BCR0_DMA_512BYTES 0x04
! 298: #define VR_BCR0_DMA_1024BYTES 0x05
! 299: #define VR_BCR0_DMA_STORENFWD 0x07
! 300:
! 301: #define VR_BCR0_RX_THRESH 0x38
! 302:
! 303: #define VR_BCR0_RXTHRESHCFG 0x00
! 304: #define VR_BCR0_RXTHRESH64BYTES 0x08
! 305: #define VR_BCR0_RXTHRESH128BYTES 0x10
! 306: #define VR_BCR0_RXTHRESH256BYTES 0x18
! 307: #define VR_BCR0_RXTHRESH512BYTES 0x20
! 308: #define VR_BCR0_RXTHRESH1024BYTES 0x28
! 309: #define VR_BCR0_RXTHRESHSTORENFWD 0x38
! 310: #define VR_BCR0_EXTLED 0x40
! 311: #define VR_BCR0_MED2 0x80
! 312:
! 313: /*
! 314: * BCR1 register bits. (At least for the VT6102 chip.)
! 315: */
! 316: #define VR_BCR1_POT0 0x01
! 317: #define VR_BCR1_POT1 0x02
! 318: #define VR_BCR1_POT2 0x04
! 319: #define VR_BCR1_TX_THRESH 0x38
! 320: #define VR_BCR1_TXTHRESHCFG 0x00
! 321: #define VR_BCR1_TXTHRESH64BYTES 0x08
! 322: #define VR_BCR1_TXTHRESH128BYTES 0x10
! 323: #define VR_BCR1_TXTHRESH256BYTES 0x18
! 324: #define VR_BCR1_TXTHRESH512BYTES 0x20
! 325: #define VR_BCR1_TXTHRESH1024BYTES 0x28
! 326: #define VR_BCR1_TXTHRESHSTORENFWD 0x38
! 327:
! 328: /*
! 329: * Rhine TX/RX list structure.
! 330: */
! 331:
! 332: struct vr_desc {
! 333: u_int32_t vr_status;
! 334: u_int32_t vr_ctl;
! 335: u_int32_t vr_ptr1;
! 336: u_int32_t vr_ptr2;
! 337: };
! 338:
! 339: #define vr_data vr_ptr1
! 340: #define vr_next vr_ptr2
! 341:
! 342:
! 343: #define VR_RXSTAT_RXERR 0x00000001
! 344: #define VR_RXSTAT_CRCERR 0x00000002
! 345: #define VR_RXSTAT_FRAMEALIGNERR 0x00000004
! 346: #define VR_RXSTAT_FIFOOFLOW 0x00000008
! 347: #define VR_RXSTAT_GIANT 0x00000010
! 348: #define VR_RXSTAT_RUNT 0x00000020
! 349: #define VR_RXSTAT_BUSERR 0x00000040
! 350: #define VR_RXSTAT_BUFFERR 0x00000080
! 351: #define VR_RXSTAT_LASTFRAG 0x00000100
! 352: #define VR_RXSTAT_FIRSTFRAG 0x00000200
! 353: #define VR_RXSTAT_RLINK 0x00000400
! 354: #define VR_RXSTAT_RX_PHYS 0x00000800
! 355: #define VR_RXSTAT_RX_BROAD 0x00001000
! 356: #define VR_RXSTAT_RX_MULTI 0x00002000
! 357: #define VR_RXSTAT_RX_OK 0x00004000
! 358: #define VR_RXSTAT_RXLEN 0x07FF0000
! 359: #define VR_RXSTAT_RXLEN_EXT 0x78000000
! 360: #define VR_RXSTAT_OWN 0x80000000
! 361:
! 362: #define VR_RXBYTES(x) ((x & VR_RXSTAT_RXLEN) >> 16)
! 363: #define VR_RXSTAT (VR_RXSTAT_FIRSTFRAG|VR_RXSTAT_LASTFRAG|VR_RXSTAT_OWN)
! 364:
! 365: #define VR_RXCTL_BUFLEN 0x000007FF
! 366: #define VR_RXCTL_BUFLEN_EXT 0x00007800
! 367: #define VR_RXCTL_CHAIN 0x00008000
! 368: #define VR_RXCTL_RX_INTR 0x00800000
! 369:
! 370: #define VR_RXCTL (VR_RXCTL_CHAIN|VR_RXCTL_RX_INTR)
! 371:
! 372: #define VR_TXSTAT_DEFER 0x00000001
! 373: #define VR_TXSTAT_UNDERRUN 0x00000002
! 374: #define VR_TXSTAT_COLLCNT 0x00000078
! 375: #define VR_TXSTAT_SQE 0x00000080
! 376: #define VR_TXSTAT_ABRT 0x00000100
! 377: #define VR_TXSTAT_LATECOLL 0x00000200
! 378: #define VR_TXSTAT_CARRLOST 0x00000400
! 379: #define VR_TXSTAT_UDF 0x00000800
! 380: #define VR_TXSTAT_BUSERR 0x00002000
! 381: #define VR_TXSTAT_JABTIMEO 0x00004000
! 382: #define VR_TXSTAT_ERRSUM 0x00008000
! 383: #define VR_TXSTAT_OWN 0x80000000
! 384:
! 385: #define VR_TXCTL_BUFLEN 0x000007FF
! 386: #define VR_TXCTL_BUFLEN_EXT 0x00007800
! 387: #define VR_TXCTL_TLINK 0x00008000
! 388: #define VR_TXCTL_FIRSTFRAG 0x00200000
! 389: #define VR_TXCTL_LASTFRAG 0x00400000
! 390: #define VR_TXCTL_FINT 0x00800000
! 391:
! 392: #define VR_MAXFRAGS 16
! 393: #define VR_RX_LIST_CNT 64
! 394: #define VR_TX_LIST_CNT 128
! 395: #define VR_MIN_FRAMELEN 60
! 396: #define VR_RXLEN 1520
! 397:
! 398: #define VR_TXOWN(x) x->vr_ptr->vr_status
! 399:
! 400: struct vr_list_data {
! 401: struct vr_desc vr_rx_list[VR_RX_LIST_CNT];
! 402: struct vr_desc vr_tx_list[VR_TX_LIST_CNT];
! 403: };
! 404:
! 405: struct vr_chain {
! 406: struct vr_desc *vr_ptr;
! 407: struct mbuf *vr_mbuf;
! 408: struct vr_chain *vr_nextdesc;
! 409: bus_addr_t vr_paddr;
! 410: bus_dmamap_t vr_map;
! 411: };
! 412:
! 413: struct vr_chain_onefrag {
! 414: struct vr_desc *vr_ptr;
! 415: struct vr_chain_onefrag *vr_nextdesc;
! 416: u_int8_t *vr_buf;
! 417: bus_addr_t vr_paddr;
! 418: bus_dmamap_t vr_map;
! 419: };
! 420:
! 421: struct vr_chain_data {
! 422: struct vr_chain_onefrag vr_rx_chain[VR_RX_LIST_CNT];
! 423: struct vr_chain vr_tx_chain[VR_TX_LIST_CNT];
! 424:
! 425: struct vr_chain_onefrag *vr_rx_head;
! 426:
! 427: struct vr_chain *vr_tx_cons;
! 428: struct vr_chain *vr_tx_prod;
! 429: };
! 430:
! 431: struct vr_type {
! 432: u_int16_t vr_vid;
! 433: u_int16_t vr_did;
! 434: char *vr_name;
! 435: };
! 436:
! 437: struct vr_mii_frame {
! 438: u_int8_t mii_stdelim;
! 439: u_int8_t mii_opcode;
! 440: u_int8_t mii_phyaddr;
! 441: u_int8_t mii_regaddr;
! 442: u_int8_t mii_turnaround;
! 443: u_int16_t mii_data;
! 444: };
! 445:
! 446: /*
! 447: * MII constants
! 448: */
! 449: #define VR_MII_STARTDELIM 0x01
! 450: #define VR_MII_READOP 0x02
! 451: #define VR_MII_WRITEOP 0x01
! 452: #define VR_MII_TURNAROUND 0x02
! 453:
! 454: #define VR_FLAG_FORCEDELAY 1
! 455: #define VR_FLAG_SCHEDDELAY 2
! 456: #define VR_FLAG_DELAYTIMEO 3
! 457:
! 458: struct vr_softc {
! 459: struct device sc_dev; /* generic device structure */
! 460: void * sc_ih; /* interrupt handler cookie */
! 461: struct arpcom arpcom; /* interface info */
! 462: bus_space_handle_t vr_bhandle; /* bus space handle */
! 463: bus_space_tag_t vr_btag; /* bus space tag */
! 464: bus_dma_tag_t sc_dmat;
! 465: struct vr_type *vr_info; /* Rhine adapter info */
! 466: u_int8_t vr_revid; /* Rhine chip revision */
! 467: u_int8_t vr_flags; /* See VR_F_* below */
! 468: struct vr_list_data *vr_ldata;
! 469: struct vr_chain_data vr_cdata;
! 470: struct mii_data sc_mii;
! 471: struct timeout sc_to;
! 472: bus_dmamap_t sc_listmap; /* descriptor list map */
! 473: bus_dma_segment_t sc_listseg;
! 474: int sc_if_flags;
! 475: };
! 476:
! 477: #define VR_F_RESTART 0x01 /* Restart unit on next tick */
! 478:
! 479: /*
! 480: * register space access macros
! 481: */
! 482: #define CSR_WRITE_4(sc, reg, val) \
! 483: bus_space_write_4(sc->vr_btag, sc->vr_bhandle, reg, val)
! 484: #define CSR_WRITE_2(sc, reg, val) \
! 485: bus_space_write_2(sc->vr_btag, sc->vr_bhandle, reg, val)
! 486: #define CSR_WRITE_1(sc, reg, val) \
! 487: bus_space_write_1(sc->vr_btag, sc->vr_bhandle, reg, val)
! 488:
! 489: #define CSR_READ_4(sc, reg) \
! 490: bus_space_read_4(sc->vr_btag, sc->vr_bhandle, reg)
! 491: #define CSR_READ_2(sc, reg) \
! 492: bus_space_read_2(sc->vr_btag, sc->vr_bhandle, reg)
! 493: #define CSR_READ_1(sc, reg) \
! 494: bus_space_read_1(sc->vr_btag, sc->vr_bhandle, reg)
! 495:
! 496: #define VR_TIMEOUT 1000
! 497:
! 498: /*
! 499: * General constants that are fun to know.
! 500: *
! 501: * VIA vendor ID
! 502: */
! 503: #define VIA_VENDORID 0x1106
! 504:
! 505: /*
! 506: * VIA Rhine device IDs.
! 507: */
! 508: #define VIA_DEVICEID_RHINE 0x3043
! 509: #define VIA_DEVICEID_RHINE_II 0x6100
! 510: #define VIA_DEVICEID_RHINE_II_2 0x3065
! 511: #define VIA_DEVICEID_RHINE_III 0x3106
! 512: #define VIA_DEVICEID_RHINE_III_M 0x3053
! 513:
! 514: /*
! 515: * Delta Electronics device ID.
! 516: */
! 517: #define DELTA_VENDORID 0x1500
! 518:
! 519: /*
! 520: * Delta device IDs.
! 521: */
! 522: #define DELTA_DEVICEID_RHINE_II 0x1320
! 523:
! 524: /*
! 525: * Addtron vendor ID.
! 526: */
! 527: #define ADDTRON_VENDORID 0x4033
! 528:
! 529: /*
! 530: * Addtron device IDs.
! 531: */
! 532: #define ADDTRON_DEVICEID_RHINE_II 0x1320
! 533:
! 534:
! 535: /*
! 536: * VIA Rhine revision IDs
! 537: */
! 538:
! 539: #define REV_ID_VT3043_E 0x04
! 540: #define REV_ID_VT3071_A 0x20
! 541: #define REV_ID_VT3071_B 0x21
! 542: #define REV_ID_VT3065_A 0x40
! 543: #define REV_ID_VT3065_B 0x41
! 544: #define REV_ID_VT3065_C 0x42
! 545: #define REV_ID_VT6102_APOLLO 0x74
! 546: #define REV_ID_VT6103 0x78
! 547: #define REV_ID_VT3106 0x80
! 548: #define REV_ID_VT3106_J 0x80 /* 0x80-0x8F */
! 549: #define REV_ID_VT3106_S 0x90 /* 0x90-0xA0 */
! 550:
! 551: /*
! 552: * PCI low memory base and low I/O base register, and
! 553: * other PCI registers.
! 554: */
! 555:
! 556: #define VR_PCI_VENDOR_ID 0x00
! 557: #define VR_PCI_DEVICE_ID 0x02
! 558: #define VR_PCI_COMMAND 0x04
! 559: #define VR_PCI_STATUS 0x06
! 560: #define VR_PCI_REVID 0x08
! 561: #define VR_PCI_CLASSCODE 0x09
! 562: #define VR_PCI_LATENCY_TIMER 0x0D
! 563: #define VR_PCI_HEADER_TYPE 0x0E
! 564: #define VR_PCI_LOIO 0x10
! 565: #define VR_PCI_LOMEM 0x14
! 566: #define VR_PCI_BIOSROM 0x30
! 567: #define VR_PCI_INTLINE 0x3C
! 568: #define VR_PCI_INTPIN 0x3D
! 569: #define VR_PCI_MINGNT 0x3E
! 570: #define VR_PCI_MINLAT 0x0F
! 571: #define VR_PCI_RESETOPT 0x48
! 572: #define VR_PCI_EEPROM_DATA 0x4C
! 573: #define VR_PCI_MODE 0x50
! 574:
! 575: #define VR_MODE3_MIION 0x04
! 576:
! 577: /* power management registers */
! 578: #define VR_PCI_CAPID 0xDC /* 8 bits */
! 579: #define VR_PCI_NEXTPTR 0xDD /* 8 bits */
! 580: #define VR_PCI_PWRMGMTCAP 0xDE /* 16 bits */
! 581: #define VR_PCI_PWRMGMTCTRL 0xE0 /* 16 bits */
! 582:
! 583: #define VR_PSTATE_MASK 0x0003
! 584: #define VR_PSTATE_D0 0x0000
! 585: #define VR_PSTATE_D1 0x0002
! 586: #define VR_PSTATE_D2 0x0002
! 587: #define VR_PSTATE_D3 0x0003
! 588: #define VR_PME_EN 0x0010
! 589: #define VR_PME_STATUS 0x8000
! 590:
! 591: #ifndef ETHER_CRC_LEN
! 592: #define ETHER_CRC_LEN 4
! 593: #endif
CVSweb