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

Annotation of sys/dev/pci/if_lgereg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: if_lgereg.h,v 1.6 2006/05/28 00:20:21 brad Exp $      */
        !             2: /*
        !             3:  * Copyright (c) 2001 Wind River Systems
        !             4:  * Copyright (c) 1997, 1998, 1999, 2000, 2001
        !             5:  *     Bill Paul <wpaul@bsdi.com>.  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/dev/lge/if_lgereg.h,v 1.1 2001/05/31 21:44:25 wpaul Exp $
        !            35:  */
        !            36:
        !            37:
        !            38: #define LGE_MODE1              0x00    /* CSR00 */
        !            39: #define LGE_MODE2              0x04    /* CSR01 */
        !            40: #define LGE_PPTXBUF_IDX                0x08    /* CSR02 */
        !            41: #define LGE_PRODID             0x0C    /* CSR03 */
        !            42: #define LGE_PPTXBUF_ADDR_LO    0x10    /* CSR04 */
        !            43: #define LGE_PPTXBUF_ADDR_HI    0x14    /* CSR05 */
        !            44: #define LGE_RSVD0              0x18    /* CSR06 */
        !            45: #define LGE_PPRXBUF_IDX                0x1C    /* CSR07 */
        !            46: #define LGE_PPRXBUF_ADDR_LO    0x20    /* CSR08 */
        !            47: #define LGE_PPRXBUF_ADDR_HI    0x24    /* CSR09 */
        !            48: #define LGE_EECTL              0x28    /* CSR10 */
        !            49: #define LGE_CHIPSTS            0x2C    /* CSR11 */
        !            50: #define LGE_TXDESC_ADDR_LO     0x30    /* CSR12 */
        !            51: #define LGE_TXDESC_ADDR_HI     0x34    /* CSR13 */
        !            52: #define LGE_RXDESC_ADDR_LO     0x38    /* CSR14 */
        !            53: #define LGE_RXDESC_ADDR_HI     0x3C    /* CSR15 */
        !            54: #define LGE_PPTXCTL            0x40    /* CSR16 */
        !            55: #define LGE_PPRXCTL            0x44    /* CSR17 */
        !            56: #define LGE_INTR_PERIOD                0x48    /* CSR18 */
        !            57: #define LGE_TXFIFO_PKTCNT      0x4C    /* CSR19 */
        !            58: #define LGE_TXFIFO_LOWAT       0x50    /* CSR20 */
        !            59: #define LGE_TXFIFO_FREEDWORDS  0x54    /* CSR21 */
        !            60: #define LGE_TXFIFO_WRITE       0x58    /* CSR22 */
        !            61: #define LGE_RSVD1              0x5C    /* CSR23 */
        !            62: #define LGE_RXFIFO_READ                0x60    /* CSR24 */
        !            63: #define LGE_RSVD2              0x64    /* CSR25 */
        !            64: #define LGE_RXFIFO_DWORDCNT    0x68    /* CSR26 */
        !            65: #define LGE_RXFIFO_HIWAT       0x6C    /* CSR27 */
        !            66: #define LGE_RXFIFO_PKTCNT      0x70    /* CSR28 */
        !            67: #define LGE_CMD                        0x74    /* CSR29 */
        !            68: #define LGE_IMR                        0x78    /* CSR30 */
        !            69: #define LGE_RSVD3              0x7C    /* CSR31 */
        !            70: #define LGE_ISR                        0x80    /* CSR32 */
        !            71: #define LGE_RSVD4              0x84    /* CSR33 */
        !            72: #define LGE_MAR0               0x88    /* CSR34 */
        !            73: #define LGE_MAR1               0x8C    /* CSR35 */
        !            74: #define LGE_LEDCFG0            0x90    /* CSR36 */
        !            75: #define LGE_LEDCFG1            0x84    /* CSR37 */
        !            76: #define LGE_LEDCFG2            0x98    /* CSR38 */
        !            77: #define LGE_LEDCFG3            0x9C    /* CSR39 */
        !            78: #define LGE_RSVD5              0xA0    /* CSR40 */
        !            79: #define LGE_EEDATA             0xA4    /* CSR41 */
        !            80: #define LGE_PAR0               0xA8    /* CSR42 */
        !            81: #define LGE_PAR1               0xAC    /* CSR43 */
        !            82: #define LGE_GMIICTL            0xB0    /* CSR44 */
        !            83: #define LGE_GMIIMODE           0xB4    /* CSR45 */
        !            84: #define LGE_STATSIDX           0xB8    /* CSR46 */
        !            85: #define LGE_STATSVAL           0xBC    /* CSR47 */
        !            86: #define LGE_VLANCTL            0xC0    /* CSR48 */
        !            87: #define LGE_RSVD6              0xC4    /* CSR49 */
        !            88: #define LGE_RSVD7              0xC8    /* CSR50 */
        !            89: #define LGE_CMDSTS             0xCC    /* CSR51 */
        !            90: #define LGE_FLOWCTL_WAT                0xD0    /* CSR52 */
        !            91: #define LGE_RSVD8              0xD4    /* CSR53 */
        !            92: #define LGE_RSVD9              0xD8    /* CSR54 */
        !            93: #define LGE_RSVD10             0xDC    /* CSR55 */
        !            94: #define LGE_RSVD11             0xE0    /* CSR56 */
        !            95: #define LGE_RSVD12             0xE4    /* CSR57 */
        !            96: #define LGE_TIMER0_CNT         0xE8    /* CSR58 */
        !            97: #define LGE_TIMER0_INT         0xEC    /* CSR59 */
        !            98: #define LGE_TIMER1_CNT         0xF0    /* CSR60 */
        !            99: #define LGE_TIMER1_INT         0xF4    /* CSR61 */
        !           100: #define LGE_DBG_CMD            0xF8    /* CSR62 */
        !           101: #define LGE_DBG_DATA           0xFC    /* CSR63 */
        !           102:
        !           103:
        !           104: /* Mode register 1 */
        !           105: #define LGE_MODE1_SETRST_CTL0  0x00000001
        !           106: #define LGE_MODE1_SOFTRST      0x00000002
        !           107: #define LGE_MODE1_DEBTOD       0x00000004      /* Not documented? */
        !           108: #define LGE_MODE1_TX_FLOWCTL   0x00000008      /* Not documented? */
        !           109: #define LGE_MODE1_RXTXRIO      0x00000010
        !           110: #define LGE_MODE1_GMIIPOLL     0x00000020
        !           111: #define LGE_MODE1_TXPAD                0x00000040
        !           112: #define LGE_MODE1_RMVPAD       0x00000080      /* Not documented? */
        !           113: #define LGE_MODE1_SETRST_CTL1  0x00000100
        !           114: #define LGE_MODE1_TX_ENB       0x00000200
        !           115: #define LGE_MODE1_RX_ENB       0x00000400
        !           116: #define LGE_MODE1_RX_MCAST     0x00000800
        !           117: #define LGE_MODE1_RX_BCAST     0x00001000
        !           118: #define LGE_MODE1_RX_PROMISC   0x00002000
        !           119: #define LGE_MODE1_RX_UCAST     0x00004000
        !           120: #define LGE_MODE1_RX_GIANTS    0x00008000
        !           121: #define LGE_MODE1_SETRST_CTL2  0x00010000
        !           122: #define LGE_MODE1_RX_CRC       0x00020000
        !           123: #define LGE_MODE1_RX_ERRPKTS   0x00040000
        !           124: #define LGE_MODE1_TX_CRC       0x00080000
        !           125: #define LGE_MODE1_DEMDEN       0x00100000      /* Not documented? */
        !           126: #define LGE_MODE1_MPACK_ENB    0x00200000
        !           127: #define LGE_MODE1_MPACK_BCAST  0x00400000
        !           128: #define LGE_MODE1_RX_FLOWCTL   0x00800000
        !           129: #define LGE_MODE1_SETRST_CTL3  0x01000000
        !           130: #define LGE_MODE1_VLAN_RX      0x02000000
        !           131: #define LGE_MODE1_VLAN_TX      0x04000000
        !           132: #define LGE_MODE1_VLAN_STRIP   0x08000000
        !           133: #define LGE_MODE1_VLAN_INSERT  0x10000000
        !           134: #define LGE_MODE1_GPIO_CTL0    0x20000000
        !           135: #define LGE_MODE1_GPIO_CTL1    0x40000000
        !           136: #define LGE_MODE1_RX_LENCHK    0x80000000
        !           137:
        !           138:
        !           139: /* Mode register 2 */
        !           140: #define LGE_MODE2_LOOPBACK     0x000000E0
        !           141: #define LGE_MODE2_RX_IPCSUM    0x00001000
        !           142: #define LGE_MODE2_RX_TCPCSUM   0x00002000
        !           143: #define LGE_MODE2_RX_UDPCSUM   0x00004000
        !           144: #define LGE_MODE2_RX_ERRCSUM   0x00008000
        !           145:
        !           146:
        !           147: /* EEPROM register */
        !           148: #define LGE_EECTL_HAVE_EEPROM  0x00000001
        !           149: #define LGE_EECTL_CMD_READ     0x00000002
        !           150: #define LGE_EECTL_CMD_WRITE    0x00000004
        !           151: #define LGE_EECTL_CSUMERR      0x00000010
        !           152: #define LGE_EECTL_MULTIACCESS  0x00000020
        !           153: #define LGE_EECTL_SINGLEACCESS 0x00000040
        !           154: #define LGE_EECTL_ADDR         0x00001F00
        !           155: #define LGE_EECTL_ROM_TIMING   0x000F0000
        !           156: #define LGE_EECTL_HAVE_FLASH   0x00100000
        !           157: #define LGE_EECTL_WRITEFLASH   0x00200000
        !           158:
        !           159: #define LGE_EE_NODEADDR_0      0x12
        !           160: #define LGE_EE_NODEADDR_1      0x13
        !           161: #define LGE_EE_NODEADDR_2      0x10
        !           162:
        !           163:
        !           164: /* Chip status register */
        !           165: #define LGE_CHIPSTS_HAVETXSPC  0x00000001 /* have room in TX FIFO for pkt */
        !           166: #define LGE_CHIPSTS_HAVERXPKT  0x00000002 /* RX FIFO holds complete pkt */
        !           167: #define LGE_CHIPSTS_FLOWCTL_STS        0x00000004
        !           168: #define LGE_CHIPSTS_GPIO_STS0  0x00000008
        !           169: #define LGE_CHIPSTS_GPIO_STS1  0x00000010
        !           170: #define LGE_CHIPSTS_TXIDLE     0x00000020
        !           171: #define LGE_CHIPSTS_RXIDLE     0x00000040
        !           172:
        !           173:
        !           174: /* TX PacketPropulsion control register */
        !           175: #define LGE_PPTXCTL_BUFLEN     0x0000FFFF
        !           176: #define LGE_PPTXCTL_BUFID      0x003F0000
        !           177: #define LGE_PPTXCTL_WANTINTR   0x01000000
        !           178:
        !           179:
        !           180: /* RX PacketPropulsion control register */
        !           181: #define LGE_PPRXCTL_BUFLEN     0x0000FFFF
        !           182: #define LGE_PPRXCTL_BUFID      0x003F0000
        !           183: #define LGE_PPRXCTL_WANTINTR   0x10000000
        !           184:
        !           185:
        !           186: /* Command register */
        !           187: #define LGE_CMD_SETRST_CTL0    0x00000001
        !           188: #define LGE_CMD_STARTTX                0x00000002
        !           189: #define LGE_CMD_SKIP_RXPKT     0x00000004
        !           190: #define LGE_CMD_DEL_INTREQ     0x00000008
        !           191: #define LGE_CMD_PER_INTREQ     0x00000010
        !           192: #define LGE_CMD_TIMER0         0x00000020
        !           193: #define LGE_CMD_TIMER1         0x00000040
        !           194:
        !           195:
        !           196: /* Interrupt mask register */
        !           197: #define LGE_IMR_SETRST_CTL0    0x00000001
        !           198: #define LGE_IMR_TXCMDFIFO_EMPTY        0x00000002
        !           199: #define LGE_IMR_TXFIFO_WAT     0x00000004
        !           200: #define LGE_IMR_TXDMA_DONE     0x00000008
        !           201: #define LGE_IMR_DELAYEDINTR    0x00000040
        !           202: #define LGE_IMR_INTR_ENB       0x00000080
        !           203: #define LGE_IMR_SETRST_CTL1    0x00000100
        !           204: #define LGE_IMR_RXCMDFIFO_EMPTY        0x00000200
        !           205: #define LGE_IMR_RXFIFO_WAT     0x00000400
        !           206: #define LGE_IMR_RX_DONE                0x00000800
        !           207: #define LGE_IMR_RXDMA_DONE     0x00001000
        !           208: #define LGE_IMR_PHY_INTR       0x00002000
        !           209: #define LGE_IMR_MAGICPKT       0x00004000
        !           210: #define LGE_IMR_SETRST_CTL2    0x00010000
        !           211: #define LGE_IMR_GPIO0          0x00020000
        !           212: #define LGE_IMR_GPIO1          0x00040000
        !           213: #define LGE_IMR_TIMER0         0x00080000
        !           214: #define LGE_IMR_TIMER1         0x00100000
        !           215:
        !           216:
        !           217: #define LGE_INTRS      \
        !           218:        (LGE_IMR_TXCMDFIFO_EMPTY|LGE_IMR_TXDMA_DONE|LGE_IMR_RX_DONE| \
        !           219:         LGE_IMR_RXCMDFIFO_EMPTY|LGE_IMR_RXDMA_DONE|LGE_IMR_PHY_INTR)
        !           220:
        !           221:
        !           222: /* Interrupt status register */
        !           223: #define LGE_ISR_TXCMDFIFO_EMPTY        0x00000002
        !           224: #define LGE_ISR_TXFIFO_WAT     0x00000004
        !           225: #define LGE_ISR_TXDMA_DONE     0x00000008
        !           226: #define LGE_ISR_DELAYEDINTR    0x00000040
        !           227: #define LGE_ISR_INTR_ENB       0x00000080
        !           228: #define LGE_ISR_RXCMDFIFO_EMPTY        0x00000200
        !           229: #define LGE_ISR_RXFIFO_WAT     0x00000400
        !           230: #define LGE_ISR_RX_DONE                0x00000800
        !           231: #define LGE_ISR_RXDMA_DONE     0x00001000
        !           232: #define LGE_ISR_PHY_INTR       0x00002000
        !           233: #define LGE_ISR_MAGICPKT       0x00004000
        !           234: #define LGE_ISR_GPIO0          0x00020000
        !           235: #define LGE_ISR_GPIO1          0x00040000
        !           236: #define LGE_ISR_TIMER0         0x00080000
        !           237: #define LGE_ISR_TIMER1         0x00100000
        !           238: #define LGE_ISR_RXDMADONE_CNT  0xFF000000
        !           239: #define LGE_RX_DMACNT(x)       ((x & LGE_ISR_RXDMADONE_CNT) >> 24)
        !           240:
        !           241: /* LED0 config register */
        !           242: #define LGE_LED0CFG_ENABLE     0x00000002
        !           243: #define LGE_LED0CFG_INPUT_POL  0x00000004
        !           244: #define LGE_LED0CFG_PULSE_EXP  0x00000008
        !           245: #define LGE_LED0CFG_10MBPS     0x00000010
        !           246: #define LGE_LED0CFG_100MBPS    0x00000100
        !           247: #define LGE_LED0CFG_1000MBPS   0x00000200
        !           248: #define LGE_LED0CFG_FDX                0x00000400
        !           249: #define LGE_LED0CFG_ANEG       0x00000800
        !           250: #define LGE_LED0CFG_LINKSTS    0x00001000
        !           251: #define LGE_LED0CFG_RXMATCH    0x00002000
        !           252: #define LGE_LED0CFG_TX         0x00004000
        !           253: #define LGE_LED0CFG_RX         0x00008000
        !           254: #define LGE_LED0CFG_JABBER     0x00010000
        !           255: #define LGE_LED0CFG_COLLISION  0x00020000
        !           256: #define LGE_LED0CFG_CARRIER    0x00040000
        !           257: #define LGE_LED0CFG_LEDOUT     0x10000000
        !           258:
        !           259:
        !           260: /* LED1 config register */
        !           261: #define LGE_LED1CFG_ENABLE     0x00000002
        !           262: #define LGE_LED1CFG_INPUT_POL  0x00000004
        !           263: #define LGE_LED1CFG_PULSE_EXP  0x00000008
        !           264: #define LGE_LED1CFG_10MBPS     0x00000010
        !           265: #define LGE_LED1CFG_100MBPS    0x00000100
        !           266: #define LGE_LED1CFG_1000MBPS   0x00000200
        !           267: #define LGE_LED1CFG_FDX                0x00000400
        !           268: #define LGE_LED1CFG_ANEG       0x00000800
        !           269: #define LGE_LED1CFG_LINKSTS    0x00001000
        !           270: #define LGE_LED1CFG_RXMATCH    0x00002000
        !           271: #define LGE_LED1CFG_TX         0x00004000
        !           272: #define LGE_LED1CFG_RX         0x00008000
        !           273: #define LGE_LED1CFG_JABBER     0x00010000
        !           274: #define LGE_LED1CFG_COLLISION  0x00020000
        !           275: #define LGE_LED1CFG_CARRIER    0x00040000
        !           276: #define LGE_LED1CFG_LEDOUT     0x10000000
        !           277:
        !           278:
        !           279: /* LED2 config register */
        !           280: #define LGE_LED2CFG_ENABLE     0x00000002
        !           281: #define LGE_LED2CFG_INPUT_POL  0x00000004
        !           282: #define LGE_LED2CFG_PULSE_EXP  0x00000008
        !           283: #define LGE_LED2CFG_10MBPS     0x00000010
        !           284: #define LGE_LED2CFG_100MBPS    0x00000100
        !           285: #define LGE_LED2CFG_1000MBPS   0x00000200
        !           286: #define LGE_LED2CFG_FDX                0x00000400
        !           287: #define LGE_LED2CFG_ANEG       0x00000800
        !           288: #define LGE_LED2CFG_LINKSTS    0x00001000
        !           289: #define LGE_LED2CFG_RXMATCH    0x00002000
        !           290: #define LGE_LED2CFG_TX         0x00004000
        !           291: #define LGE_LED2CFG_RX         0x00008000
        !           292: #define LGE_LED2CFG_JABBER     0x00010000
        !           293: #define LGE_LED2CFG_COLLISION  0x00020000
        !           294: #define LGE_LED2CFG_CARRIER    0x00040000
        !           295: #define LGE_LED2CFG_LEDOUT     0x10000000
        !           296:
        !           297:
        !           298: /* GMII PHY access register */
        !           299: #define LGE_GMIICTL_PHYREG     0x0000001F
        !           300: #define LGE_GMIICTL_CMD                0x00000080
        !           301: #define LGE_GMIICTL_PHYADDR    0x00001F00
        !           302: #define LGE_GMIICTL_CMDBUSY    0x00008000
        !           303: #define LGE_GMIICTL_DATA       0xFFFF0000
        !           304:
        !           305: #define LGE_GMIICMD_READ       0x00000000
        !           306: #define LGE_GMIICMD_WRITE      0x00000080
        !           307:
        !           308: /* GMII PHY mode register */
        !           309: #define LGE_GMIIMODE_SPEED     0x00000003
        !           310: #define LGE_GMIIMODE_FDX       0x00000004
        !           311: #define LGE_GMIIMODE_PROTSEL   0x00000100 /* 0 == GMII, 1 == TBI */
        !           312: #define LGE_GMIIMODE_PCSENH    0x00000200
        !           313:
        !           314: #define LGE_SPEED_10           0x00000000
        !           315: #define LGE_SPEED_100          0x00000001
        !           316: #define LGE_SPEED_1000         0x00000002
        !           317:
        !           318:
        !           319: /* VLAN tag control register */
        !           320: #define LGE_VLANCTL_VLID       0x00000FFF
        !           321: #define LGE_VLANCTL_USERPRIO   0x0000E000
        !           322: #define LGE_VLANCTL_TCI_IDX    0x000D0000
        !           323: #define LGE_VLANCTL_TBLCMD     0x00200000
        !           324:
        !           325:
        !           326: /* Command status register */
        !           327: #define LGE_CMDSTS_TXDMADONE   0x000000FF
        !           328: #define LGE_CMDSTS_RXDMADONE   0x0000FF00
        !           329: #define LGE_CMDSTS_TXCMDFREE   0x003F0000
        !           330: #define LGE_CMDSTS_RXCMDFREE   0x3F000000
        !           331:
        !           332: #define LGE_TXDMADONE_8BIT     LGE_CMDSTS
        !           333: #define LGE_RXDMADONE_8BIT     (LGE_CMDSTS + 1)
        !           334: #define LGE_TXCMDFREE_8BIT     (LGE_CMDSTS + 2)
        !           335: #define LGE_RXCMDFREE_8BIT     (LGE_CMDSTS + 3)
        !           336:
        !           337: #define LGE_MAXCMDS            31
        !           338:
        !           339: /* Index for statistics counters. */
        !           340: #define LGE_STATS_TX_PKTS_OK           0x00
        !           341: #define LGE_STATS_SINGLE_COLL_PKTS     0x01
        !           342: #define LGE_STATS_MULTI_COLL_PKTS      0x02
        !           343: #define LGE_STATS_RX_PKTS_OK           0x03
        !           344: #define LGE_STATS_FCS_ERRS             0x04
        !           345: #define LGE_STATS_ALIGN_ERRS           0x05
        !           346: #define LGE_STATS_DROPPED_PKTS         0x06
        !           347: #define LGE_STATS_RX_ERR_PKTS          0x07
        !           348: #define LGE_STATS_TX_ERR_PKTS          0x08
        !           349: #define LGE_STATS_LATE_COLLS           0x09
        !           350: #define LGE_STATS_RX_RUNTS             0x0A
        !           351: #define LGE_STATS_RX_GIANTS            0x0B
        !           352: #define LGE_STATS_VLAN_PKTS_ACCEPT     0x0C
        !           353: #define LGE_STATS_VLAN_PKTS_REJECT     0x0D
        !           354: #define LGE_STATS_IP_CSUM_ERR          0x0E
        !           355: #define LGE_STATS_UDP_CSUM_ERR         0x0F
        !           356: #define LGE_STATS_RANGELEN_ERRS                0x10
        !           357: #define LGE_STATS_TCP_CSUM_ERR         0x11
        !           358: #define LGE_STATS_RSVD0                        0x12
        !           359: #define LGE_STATS_TX_EXCESS_COLLS      0x13
        !           360: #define LGE_STATS_RX_UCASTS            0x14
        !           361: #define LGE_STATS_RX_MCASTS            0x15
        !           362: #define LGE_STATS_RX_BCASTS            0x16
        !           363: #define LGE_STATS_RX_PAUSE_PKTS                0x17
        !           364: #define LGE_STATS_TX_PAUSE_PKTS                0x18
        !           365: #define LGE_STATS_TX_PKTS_DEFERRED     0x19
        !           366: #define LGE_STATS_TX_EXCESS_DEFER      0x1A
        !           367: #define LGE_STATS_CARRIER_SENSE_ERR    0x1B
        !           368:
        !           369:
        !           370: /*
        !           371:  * RX and TX DMA descriptor structures for scatter/gather.
        !           372:  * Each descriptor can have up to 31 fragments in it, however for
        !           373:  * RX we only need one fragment, and for transmit we only allocate
        !           374:  * 10 in order to reduce the amount of space we need for the
        !           375:  * descriptor lists.
        !           376:  * Note: descriptor structures must be 64-bit aligned.
        !           377:  */
        !           378:
        !           379: struct lge_rx_desc {
        !           380:        /* Hardware descriptor section */
        !           381:        u_int32_t               lge_ctl;
        !           382:        u_int32_t               lge_sts;
        !           383:        u_int32_t               lge_fragptr_lo;
        !           384:        u_int32_t               lge_fragptr_hi;
        !           385:        u_int16_t               lge_fraglen;
        !           386:        u_int16_t               lge_rsvd0;
        !           387:        u_int32_t               lge_rsvd1;
        !           388:        /* Driver software section */
        !           389:        union {
        !           390:                struct mbuf             *lge_mbuf;
        !           391:                u_int64_t               lge_dummy;
        !           392:        } lge_u;
        !           393: };
        !           394:
        !           395: struct lge_frag {
        !           396:        u_int32_t               lge_rsvd0;
        !           397:        u_int32_t               lge_fragptr_lo;
        !           398:        u_int32_t               lge_fragptr_hi;
        !           399:        u_int16_t               lge_fraglen;
        !           400:        u_int16_t               lge_rsvd1;
        !           401: };
        !           402:
        !           403: struct lge_tx_desc {
        !           404:        /* Hardware descriptor section */
        !           405:        u_int32_t               lge_ctl;
        !           406:        struct lge_frag         lge_frags[10];
        !           407:        u_int32_t               lge_rsvd0;
        !           408:        union {
        !           409:                struct mbuf             *lge_mbuf;
        !           410:                u_int64_t               lge_dummy;
        !           411:        } lge_u;
        !           412: };
        !           413:
        !           414: #define lge_mbuf       lge_u.lge_mbuf
        !           415:
        !           416: #define LGE_RXCTL_BUFLEN       0x0000FFFF
        !           417: #define LGE_RXCTL_FRAGCNT      0x001F0000
        !           418: #define LGE_RXCTL_LENERR       0x00400000
        !           419: #define LGE_RXCTL_UCAST                0x00800000
        !           420: #define LGR_RXCTL_BCAST                0x01000000
        !           421: #define LGE_RXCTL_MCAST                0x02000000
        !           422: #define LGE_RXCTL_GIANT                0x04000000
        !           423: #define LGE_RXCTL_OFLOW                0x08000000
        !           424: #define LGE_RXCTL_CRCERR       0x10000000
        !           425: #define LGE_RXCTL_RUNT         0x20000000
        !           426: #define LGE_RXCTL_ALGNERR      0x40000000
        !           427: #define LGE_RXCTL_WANTINTR     0x80000000
        !           428:
        !           429: #define LGE_RXCTL_ERRMASK      \
        !           430:        (LGE_RXCTL_LENERR|LGE_RXCTL_OFLOW|      \
        !           431:         LGE_RXCTL_CRCERR|LGE_RXCTL_RUNT|       \
        !           432:         LGE_RXCTL_ALGNERR)
        !           433:
        !           434: #define LGE_RXSTS_VLTBIDX      0x0000000F
        !           435: #define LGE_RXSTS_VLTBLHIT     0x00000010
        !           436: #define LGE_RXSTS_IPCSUMERR    0x00000100
        !           437: #define LGE_RXSTS_TCPCSUMERR   0x00000200
        !           438: #define LGE_RXSTS_UDPCSUMERR   0x00000400
        !           439: #define LGE_RXSTS_ISIP         0x00000800
        !           440: #define LGE_RXSTS_ISTCP                0x00001000
        !           441: #define LGE_RXSTS_ISUDP                0x00002000
        !           442:
        !           443: #define LGE_TXCTL_BUFLEN       0x0000FFFF
        !           444: #define LGE_TXCTL_FRAGCNT      0x001F0000
        !           445: #define LGE_TXCTL_VLTBIDX      0x0F000000
        !           446: #define LGE_TXCTL_VLIS         0x10000000
        !           447: #define LGE_TXCTL_WANTINTR     0x80000000
        !           448:
        !           449: #define LGE_INC(x, y)          (x) = (x + 1) % y
        !           450: #define LGE_FRAGCNT_1          (1<<16)
        !           451: #define LGE_FRAGCNT_10         (10<<16)
        !           452: #define LGE_FRAGCNT(x)         (x<<16)
        !           453: #define LGE_RXBYTES(x)         (x->lge_ctl & 0xFFFF)
        !           454: #define LGE_RXTAIL(x)          \
        !           455:        (x->lge_ldata->lge_rx_list[x->lge_cdata.lge_rx_prod])
        !           456:
        !           457: #define LGE_RX_LIST_CNT                64
        !           458: #define LGE_TX_LIST_CNT                128
        !           459:
        !           460: struct lge_list_data {
        !           461:        struct lge_rx_desc      lge_rx_list[LGE_RX_LIST_CNT];
        !           462:        struct lge_tx_desc      lge_tx_list[LGE_TX_LIST_CNT];
        !           463: };
        !           464:
        !           465:
        !           466: struct lge_type {
        !           467:        u_int16_t               lge_vid;
        !           468:        u_int16_t               lge_did;
        !           469:        char                    *lge_name;
        !           470: };
        !           471:
        !           472: struct lge_mii_frame {
        !           473:        u_int8_t                mii_stdelim;
        !           474:        u_int8_t                mii_opcode;
        !           475:        u_int8_t                mii_phyaddr;
        !           476:        u_int8_t                mii_regaddr;
        !           477:        u_int8_t                mii_turnaround;
        !           478:        u_int16_t               mii_data;
        !           479: };
        !           480:
        !           481: /*
        !           482:  * MII constants
        !           483:  */
        !           484: #define LGE_MII_STARTDELIM     0x01
        !           485: #define LGE_MII_READOP         0x02
        !           486: #define LGE_MII_WRITEOP                0x01
        !           487: #define LGE_MII_TURNAROUND     0x02
        !           488:
        !           489: #define LGE_JUMBO_FRAMELEN     9018
        !           490: #define LGE_JUMBO_MTU          (LGE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN)
        !           491: #define LGE_JSLOTS             384
        !           492:
        !           493: #define LGE_JRAWLEN (LGE_JUMBO_FRAMELEN + ETHER_ALIGN)
        !           494: #define LGE_JLEN (LGE_JRAWLEN + (sizeof(u_int64_t) - \
        !           495:        (LGE_JRAWLEN % sizeof(u_int64_t))))
        !           496: #define LGE_JPAGESZ PAGE_SIZE
        !           497: #define LGE_RESID (LGE_JPAGESZ - (LGE_JLEN * LGE_JSLOTS) % LGE_JPAGESZ)
        !           498: #define LGE_JMEM ((LGE_JLEN * LGE_JSLOTS) + LGE_RESID)
        !           499:
        !           500: struct lge_jpool_entry {
        !           501:        int                             slot;
        !           502:        LIST_ENTRY(lge_jpool_entry)     jpool_entries;
        !           503: };
        !           504:
        !           505: struct lge_ring_data {
        !           506:        int                     lge_rx_prod;
        !           507:        int                     lge_rx_cons;
        !           508:        int                     lge_tx_prod;
        !           509:        int                     lge_tx_cons;
        !           510:        /* Stick the jumbo mem management stuff here too. */
        !           511:        caddr_t                 lge_jslots[LGE_JSLOTS];
        !           512:        void                    *lge_jumbo_buf;
        !           513: };
        !           514:
        !           515: struct lge_softc {
        !           516:        struct device           sc_dv;
        !           517:        struct arpcom           arpcom;         /* interface info */
        !           518:        bus_space_handle_t      lge_bhandle;
        !           519:        bus_space_tag_t         lge_btag;
        !           520:        void                    *lge_intrhand;
        !           521:        struct mii_data         lge_mii;
        !           522:        int                     lge_if_flags;
        !           523:        u_int8_t                lge_type;
        !           524:        u_int8_t                lge_link;
        !           525:        u_int8_t                lge_pcs;
        !           526:        bus_dma_tag_t           sc_dmatag;
        !           527:        struct lge_list_data    *lge_ldata;
        !           528:        struct lge_ring_data    lge_cdata;
        !           529:        struct timeout          lge_timeout;
        !           530:        LIST_HEAD(__lge_jfreehead, lge_jpool_entry)     lge_jfree_listhead;
        !           531:        LIST_HEAD(__lge_jinusehead, lge_jpool_entry)    lge_jinuse_listhead;
        !           532: };
        !           533:
        !           534: /*
        !           535:  * register space access macros
        !           536:  */
        !           537: #define CSR_WRITE_4(sc, reg, val)      \
        !           538:        bus_space_write_4(sc->lge_btag, sc->lge_bhandle, reg, val)
        !           539:
        !           540: #define CSR_READ_2(sc, reg)            \
        !           541:        bus_space_read_2(sc->lge_btag, sc->lge_bhandle, reg)
        !           542:
        !           543: #define CSR_WRITE_2(sc, reg, val)      \
        !           544:        bus_space_write_2(sc->lge_btag, sc->lge_bhandle, reg, val)
        !           545:
        !           546: #define CSR_READ_4(sc, reg)            \
        !           547:        bus_space_read_4(sc->lge_btag, sc->lge_bhandle, reg)
        !           548:
        !           549: #define CSR_WRITE_1(sc, reg, val)      \
        !           550:        bus_space_write_1(sc->lge_btag, sc->lge_bhandle, reg, val)
        !           551:
        !           552: #define CSR_READ_1(sc, reg)            \
        !           553:        bus_space_read_1(sc->lge_btag, sc->lge_bhandle, reg)
        !           554:
        !           555: #define LGE_TIMEOUT            1000
        !           556: #define LGE_MIN_FRAMELEN       60
        !           557:
        !           558: /*
        !           559:  * PCI low memory base and low I/O base register, and
        !           560:  * other PCI registers.
        !           561:  */
        !           562:
        !           563: #define LGE_PCI_VENDOR_ID      0x00
        !           564: #define LGE_PCI_DEVICE_ID      0x02
        !           565: #define LGE_PCI_COMMAND                0x04
        !           566: #define LGE_PCI_STATUS         0x06
        !           567: #define LGE_PCI_REVID          0x08
        !           568: #define LGE_PCI_CLASSCODE      0x09
        !           569: #define LGE_PCI_CACHELEN       0x0C
        !           570: #define LGE_PCI_LATENCY_TIMER  0x0D
        !           571: #define LGE_PCI_HEADER_TYPE    0x0E
        !           572: #define LGE_PCI_LOIO           0x10
        !           573: #define LGE_PCI_LOMEM          0x14
        !           574: #define LGE_PCI_BIOSROM                0x30
        !           575: #define LGE_PCI_INTLINE                0x3C
        !           576: #define LGE_PCI_INTPIN         0x3D
        !           577: #define LGE_PCI_MINGNT         0x3E
        !           578: #define LGE_PCI_MINLAT         0x0F
        !           579: #define LGE_PCI_RESETOPT       0x48
        !           580: #define LGE_PCI_EEPROM_DATA    0x4C
        !           581:
        !           582: /* power management registers */
        !           583: #define LGE_PCI_CAPID          0x50 /* 8 bits */
        !           584: #define LGE_PCI_NEXTPTR                0x51 /* 8 bits */
        !           585: #define LGE_PCI_PWRMGMTCAP     0x52 /* 16 bits */
        !           586: #define LGE_PCI_PWRMGMTCTRL    0x54 /* 16 bits */
        !           587:
        !           588: #define LGE_PSTATE_MASK                0x0003
        !           589: #define LGE_PSTATE_D0          0x0000
        !           590: #define LGE_PSTATE_D1          0x0001
        !           591: #define LGE_PSTATE_D2          0x0002
        !           592: #define LGE_PSTATE_D3          0x0003
        !           593: #define LGE_PME_EN             0x0010
        !           594: #define LGE_PME_STATUS         0x8000
        !           595:
        !           596: #ifdef __alpha__
        !           597: #undef vtophys
        !           598: #define vtophys(va)            alpha_XXX_dmamap((vaddr_t)va)
        !           599: #endif

CVSweb