1e5a5a436SSepherosa Ziehau /* 2e5a5a436SSepherosa Ziehau * Copyright (c) 1997, 1998 3e5a5a436SSepherosa Ziehau * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 4e5a5a436SSepherosa Ziehau * 5e5a5a436SSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 6e5a5a436SSepherosa Ziehau * modification, are permitted provided that the following conditions 7e5a5a436SSepherosa Ziehau * are met: 8e5a5a436SSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright 9e5a5a436SSepherosa Ziehau * notice, this list of conditions and the following disclaimer. 10e5a5a436SSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 11e5a5a436SSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 12e5a5a436SSepherosa Ziehau * documentation and/or other materials provided with the distribution. 13e5a5a436SSepherosa Ziehau * 3. All advertising materials mentioning features or use of this software 14e5a5a436SSepherosa Ziehau * must display the following acknowledgement: 15e5a5a436SSepherosa Ziehau * This product includes software developed by Bill Paul. 16e5a5a436SSepherosa Ziehau * 4. Neither the name of the author nor the names of any co-contributors 17e5a5a436SSepherosa Ziehau * may be used to endorse or promote products derived from this software 18e5a5a436SSepherosa Ziehau * without specific prior written permission. 19e5a5a436SSepherosa Ziehau * 20e5a5a436SSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 21e5a5a436SSepherosa Ziehau * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22e5a5a436SSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23e5a5a436SSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 24e5a5a436SSepherosa Ziehau * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25e5a5a436SSepherosa Ziehau * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26e5a5a436SSepherosa Ziehau * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27e5a5a436SSepherosa Ziehau * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28e5a5a436SSepherosa Ziehau * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29e5a5a436SSepherosa Ziehau * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 30e5a5a436SSepherosa Ziehau * THE POSSIBILITY OF SUCH DAMAGE. 31e5a5a436SSepherosa Ziehau * 32e5a5a436SSepherosa Ziehau * $FreeBSD: src/sys/dev/re/if_rereg.h,v 1.14.2.1 2001/07/19 18:33:07 wpaul Exp $ 33e5a5a436SSepherosa Ziehau */ 34e5a5a436SSepherosa Ziehau 35e5a5a436SSepherosa Ziehau #ifndef __DragonFly__ 36e5a5a436SSepherosa Ziehau /*#define VERSION(_MainVer,_MinorVer) ((_MainVer)*10+(_MinorVer))*/ 37e5a5a436SSepherosa Ziehau /*#define OS_VER VERSION(5,1)*/ 38e5a5a436SSepherosa Ziehau #if __FreeBSD_version < 500000 39e5a5a436SSepherosa Ziehau #define VERSION(_MainVer,_MinorVer) ((_MainVer)*100000+(_MinorVer)*10000) 40e5a5a436SSepherosa Ziehau #else 41e5a5a436SSepherosa Ziehau #define VERSION(_MainVer,_MinorVer) ((_MainVer)*100000+(_MinorVer)*1000) 42e5a5a436SSepherosa Ziehau #endif 43e5a5a436SSepherosa Ziehau #define OS_VER __FreeBSD_version 44e5a5a436SSepherosa Ziehau 45719bf70aSSepherosa Ziehau #ifndef M_DONTWAIT 46719bf70aSSepherosa Ziehau #define M_DONTWAIT M_NOWAIT 47719bf70aSSepherosa Ziehau #endif 48719bf70aSSepherosa Ziehau 49e5a5a436SSepherosa Ziehau #if OS_VER>=VERSION(4,0) 50e5a5a436SSepherosa Ziehau #define RE_USE_NEW_CALLOUT_FUN 1 51e5a5a436SSepherosa Ziehau #endif 52e5a5a436SSepherosa Ziehau #endif /* !__DragonFly__ */ 53e5a5a436SSepherosa Ziehau 54e5a5a436SSepherosa Ziehau 55e5a5a436SSepherosa Ziehau /* 56e5a5a436SSepherosa Ziehau * RealTek RTL8110S/SB/SC register offsets 57e5a5a436SSepherosa Ziehau */ 58e5a5a436SSepherosa Ziehau 59e5a5a436SSepherosa Ziehau #define RE_TPPOLL 0x0038 /* transmit priority polling */ 60e5a5a436SSepherosa Ziehau 61e5a5a436SSepherosa Ziehau /* 62e5a5a436SSepherosa Ziehau * RealTek RTL8110S/SB/SC register contents 63e5a5a436SSepherosa Ziehau */ 64e5a5a436SSepherosa Ziehau 65e5a5a436SSepherosa Ziehau /* Transmit Priority Polling --- 0x40 */ 66e5a5a436SSepherosa Ziehau #define RE_HPQ 0x80 /* high priority queue polling */ 67e5a5a436SSepherosa Ziehau #define RE_NPQ 0x40 /* normal priority queue polling */ 68e5a5a436SSepherosa Ziehau #define RE_FSWInt 0x01 /* Forced Software Interrupt */ 6980492964SSepherosa Ziehau #define RE_NPQ_8125 0x01 70e5a5a436SSepherosa Ziehau 71e5a5a436SSepherosa Ziehau 72e5a5a436SSepherosa Ziehau /* 73e5a5a436SSepherosa Ziehau * RealTek 8129/8139 register offsets 74e5a5a436SSepherosa Ziehau */ 75e5a5a436SSepherosa Ziehau 76e5a5a436SSepherosa Ziehau #define RE_IDR0 0x0000 /* ID register 0 (station addr) */ 77e5a5a436SSepherosa Ziehau #define RE_IDR1 0x0001 /* Must use 32-bit accesses (?) */ 78e5a5a436SSepherosa Ziehau #define RE_IDR2 0x0002 79e5a5a436SSepherosa Ziehau #define RE_IDR3 0x0003 80e5a5a436SSepherosa Ziehau #define RE_IDR4 0x0004 81e5a5a436SSepherosa Ziehau #define RE_IDR5 0x0005 82e5a5a436SSepherosa Ziehau /* 0006-0007 reserved */ 83e5a5a436SSepherosa Ziehau #define RE_MAR0 0x0008 /* Multicast hash table */ 84e5a5a436SSepherosa Ziehau #define RE_MAR1 0x0009 85e5a5a436SSepherosa Ziehau #define RE_MAR2 0x000A 86e5a5a436SSepherosa Ziehau #define RE_MAR3 0x000B 87e5a5a436SSepherosa Ziehau #define RE_MAR4 0x000C 88e5a5a436SSepherosa Ziehau #define RE_MAR5 0x000D 89e5a5a436SSepherosa Ziehau #define RE_MAR6 0x000E 90e5a5a436SSepherosa Ziehau #define RE_MAR7 0x000F 91e5a5a436SSepherosa Ziehau 92e5a5a436SSepherosa Ziehau #define RE_TXSTAT0 0x0010 /* status of TX descriptor 0 */ 93e5a5a436SSepherosa Ziehau #define RE_TXSTAT1 0x0014 /* status of TX descriptor 1 */ 94e5a5a436SSepherosa Ziehau #define RE_TXSTAT2 0x0018 /* status of TX descriptor 2 */ 95e5a5a436SSepherosa Ziehau #define RE_CUSTOM_LED 0x0018 96e5a5a436SSepherosa Ziehau #define RE_TXSTAT3 0x001C /* status of TX descriptor 3 */ 97e5a5a436SSepherosa Ziehau 98e5a5a436SSepherosa Ziehau #define RE_TXADDR0 0x0020 /* address of TX descriptor 0 */ 99e5a5a436SSepherosa Ziehau #define RE_TXADDR1 0x0024 /* address of TX descriptor 1 */ 100e5a5a436SSepherosa Ziehau #define RE_TXADDR2 0x0028 /* address of TX descriptor 2 */ 101e5a5a436SSepherosa Ziehau #define RE_TXADDR3 0x002C /* address of TX descriptor 3 */ 102e5a5a436SSepherosa Ziehau 103e5a5a436SSepherosa Ziehau #define RE_RXADDR 0x0030 /* RX ring start address */ 104e5a5a436SSepherosa Ziehau #define RE_COMMAND 0x0037 /* command register */ 105e5a5a436SSepherosa Ziehau #define RE_CURRXADDR 0x0038 /* current address of packet read */ 106e5a5a436SSepherosa Ziehau #define RE_CURRXBUF 0x003A /* current RX buffer address */ 107e5a5a436SSepherosa Ziehau #define RE_IMR 0x003C /* interrupt mask register */ 108e5a5a436SSepherosa Ziehau #define RE_ISR 0x003E /* interrupt status register */ 109e5a5a436SSepherosa Ziehau #define RE_TXCFG 0x0040 /* transmit config */ 110e5a5a436SSepherosa Ziehau #define RE_RXCFG 0x0044 /* receive config */ 111e5a5a436SSepherosa Ziehau #define RE_TIMERCNT 0x0048 /* timer count register */ 112e5a5a436SSepherosa Ziehau #define RE_MISSEDPKT 0x004C /* missed packet counter */ 113e5a5a436SSepherosa Ziehau #define RE_EECMD 0x0050 /* EEPROM command register */ 114e5a5a436SSepherosa Ziehau #define RE_CFG0 0x0051 /* config register #0 */ 115e5a5a436SSepherosa Ziehau #define RE_CFG1 0x0052 /* config register #1 */ 116e5a5a436SSepherosa Ziehau #define RE_CFG2 0x0053 /* config register #2 */ 117e5a5a436SSepherosa Ziehau #define RE_CFG3 0x0054 /* config register #3 */ 118e5a5a436SSepherosa Ziehau #define RE_CFG4 0x0055 /* config register #4 */ 119e5a5a436SSepherosa Ziehau #define RE_CFG5 0x0056 /* config register #5 */ 120e5a5a436SSepherosa Ziehau /* 0053-0057 reserved */ 121e6e07291SSepherosa Ziehau #define RE_TDFNR 0x0057 /* Tx descriptor fetch number */ 122e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT 0x0058 /* media status register (8139) */ 12380492964SSepherosa Ziehau #define RE_TIMERINT 0x0058 /* timer interrupt register */ 124e5a5a436SSepherosa Ziehau /* 0059-005A reserved */ 125e5a5a436SSepherosa Ziehau #define RE_MII 0x005A /* 8129 chip only */ 126e5a5a436SSepherosa Ziehau #define RE_HALTCLK 0x005B 127e5a5a436SSepherosa Ziehau #define RE_MULTIINTR 0x005C /* multiple interrupt */ 128e5a5a436SSepherosa Ziehau #define RE_PCIREV 0x005E /* PCI revision value */ 129e5a5a436SSepherosa Ziehau /* 005F reserved */ 130e5a5a436SSepherosa Ziehau #define RE_PHYAR 0x0060 /* PHY register access */ 131e5a5a436SSepherosa Ziehau #define RE_CSIDR 0x0064 132e5a5a436SSepherosa Ziehau #define RE_CSIAR 0x0068 133e5a5a436SSepherosa Ziehau #define RE_PHY_STATUS 0x006C /* PHY status */ 134e5a5a436SSepherosa Ziehau #define RE_MACDBG 0x006D 135e5a5a436SSepherosa Ziehau #define RE_PMCH 0x006F /* 8 bits */ 136e5a5a436SSepherosa Ziehau #define RE_ERIDR 0x0070 137e5a5a436SSepherosa Ziehau #define RE_ERIAR 0x0074 138e5a5a436SSepherosa Ziehau #define RE_EPHY_RXER_NUM 0x007C 139e5a5a436SSepherosa Ziehau #define RE_EPHYAR 0x0080 140e5a5a436SSepherosa Ziehau #define RE_MCUACCESS 0x00B0 141e5a5a436SSepherosa Ziehau #define RE_OCPDR 0x00B0 142e5a5a436SSepherosa Ziehau #define RE_OCPAR 0x00B4 143e5a5a436SSepherosa Ziehau #define RE_SecMAC0 0x00B4 144e5a5a436SSepherosa Ziehau #define RE_SecMAC4 0x00B8 145e5a5a436SSepherosa Ziehau #define RE_PHYOCPACCESS 0x00B8 146e5a5a436SSepherosa Ziehau #define RE_DBG_reg 0x00D1 147e5a5a436SSepherosa Ziehau #define RE_TwiCmdReg 0x00D2 148e5a5a436SSepherosa Ziehau #define RE_MCU_CMD 0x00D3 149e5a5a436SSepherosa Ziehau #define RE_RxMaxSize 0x00DA 150e6e07291SSepherosa Ziehau #define RE_EFUSEAR 0x00DC 151e5a5a436SSepherosa Ziehau #define RE_CPlusCmd 0x00E0 15280492964SSepherosa Ziehau #define RE_IntrMitigate 0x00E2 153e5a5a436SSepherosa Ziehau #define RE_MTPS 0x00EC 154e6e07291SSepherosa Ziehau #define RE_CMAC_IBCR0 0x00F8 155e6e07291SSepherosa Ziehau #define RE_CMAC_IBCR2 0x00F9 156e6e07291SSepherosa Ziehau #define RE_CMAC_IBIMR0 0x00FA 157e6e07291SSepherosa Ziehau #define RE_CMAC_IBISR0 0x00FB 15880492964SSepherosa Ziehau /* 8125 */ 15980492964SSepherosa Ziehau #define RE_IMR0_8125 0x38 16080492964SSepherosa Ziehau #define RE_ISR0_8125 0x3C 16180492964SSepherosa Ziehau #define RE_TPPOLL_8125 0x90 16280492964SSepherosa Ziehau #define RE_BACKUP_ADDR0_8125 0x19E0 16380492964SSepherosa Ziehau #define RE_BACKUP_ADDR4_8125 0X19E4 16480492964SSepherosa Ziehau #define RE_EEE_TXIDLE_TIMER_8125 0x6048 165e5a5a436SSepherosa Ziehau 166e5a5a436SSepherosa Ziehau /* ERI access */ 167e5a5a436SSepherosa Ziehau #define ERIAR_Flag 0x80000000 168e5a5a436SSepherosa Ziehau #define ERIAR_Write 0x80000000 169e5a5a436SSepherosa Ziehau #define ERIAR_Read 0x00000000 170e5a5a436SSepherosa Ziehau #define ERIAR_Addr_Align 4 /* ERI access register address must be 4 byte alignment */ 171e5a5a436SSepherosa Ziehau #define ERIAR_ExGMAC 0 172e5a5a436SSepherosa Ziehau #define ERIAR_MSIX 1 173e5a5a436SSepherosa Ziehau #define ERIAR_ASF 2 174e5a5a436SSepherosa Ziehau #define ERIAR_Type_shift 16 175e5a5a436SSepherosa Ziehau #define ERIAR_ByteEn 0x0f 176e5a5a436SSepherosa Ziehau #define ERIAR_ByteEn_shift 12 177e5a5a436SSepherosa Ziehau #define ERIAR_OOB 2 178e5a5a436SSepherosa Ziehau 179e5a5a436SSepherosa Ziehau 180e5a5a436SSepherosa Ziehau 181e5a5a436SSepherosa Ziehau 182e5a5a436SSepherosa Ziehau 183e5a5a436SSepherosa Ziehau /* Direct PHY access registers only available on 8139 */ 184e5a5a436SSepherosa Ziehau #define RE_BMCR 0x0062 /* PHY basic mode control */ 185e5a5a436SSepherosa Ziehau #define RE_BMSR 0x0064 /* PHY basic mode status */ 186e5a5a436SSepherosa Ziehau #define RE_ANAR 0x0066 /* PHY autoneg advert */ 187e5a5a436SSepherosa Ziehau #define RE_LPAR 0x0068 /* PHY link partner ability */ 188e5a5a436SSepherosa Ziehau #define RE_ANER 0x006A /* PHY autoneg expansion */ 189e5a5a436SSepherosa Ziehau 190e5a5a436SSepherosa Ziehau #define RE_DISCCNT 0x006C /* disconnect counter */ 191e5a5a436SSepherosa Ziehau #define RE_FALSECAR 0x006E /* false carrier counter */ 192e5a5a436SSepherosa Ziehau #define RE_NWAYTST 0x0070 /* NWAY test register */ 193e5a5a436SSepherosa Ziehau #define RE_RX_ER 0x0072 /* RX_ER counter */ 194e5a5a436SSepherosa Ziehau #define RE_CSCFG 0x0074 /* CS configuration register */ 195e5a5a436SSepherosa Ziehau #define RE_LDPS 0x0082 /* Link Down Power Saving */ 196e5a5a436SSepherosa Ziehau #define RE_CPCR 0x00E0 197e5a5a436SSepherosa Ziehau #define RE_IM 0x00E2 198e5a5a436SSepherosa Ziehau 199e5a5a436SSepherosa Ziehau 200e5a5a436SSepherosa Ziehau /* 201e5a5a436SSepherosa Ziehau * TX config register bits 202e5a5a436SSepherosa Ziehau */ 203e5a5a436SSepherosa Ziehau #define RE_TXCFG_CLRABRT 0x00000001 /* retransmit aborted pkt */ 204e5a5a436SSepherosa Ziehau #define RE_TXCFG_MAXDMA 0x00000700 /* max DMA burst size */ 205e5a5a436SSepherosa Ziehau #define RE_TXCFG_CRCAPPEND 0x00010000 /* CRC append (0 = yes) */ 206e5a5a436SSepherosa Ziehau #define RE_TXCFG_LOOPBKTST 0x00060000 /* loopback test */ 207e5a5a436SSepherosa Ziehau #define RE_TXCFG_IFG 0x03000000 /* interframe gap */ 208e5a5a436SSepherosa Ziehau 209e5a5a436SSepherosa Ziehau #define RE_TXDMA_16BYTES 0x00000000 210e5a5a436SSepherosa Ziehau #define RE_TXDMA_32BYTES 0x00000100 211e5a5a436SSepherosa Ziehau #define RE_TXDMA_64BYTES 0x00000200 212e5a5a436SSepherosa Ziehau #define RE_TXDMA_128BYTES 0x00000300 213e5a5a436SSepherosa Ziehau #define RE_TXDMA_256BYTES 0x00000400 214e5a5a436SSepherosa Ziehau #define RE_TXDMA_512BYTES 0x00000500 215e5a5a436SSepherosa Ziehau #define RE_TXDMA_1024BYTES 0x00000600 216e5a5a436SSepherosa Ziehau #define RE_TXDMA_2048BYTES 0x00000700 217e5a5a436SSepherosa Ziehau 218e5a5a436SSepherosa Ziehau /* 219e5a5a436SSepherosa Ziehau * Transmit descriptor status register bits. 220e5a5a436SSepherosa Ziehau */ 221e5a5a436SSepherosa Ziehau #define RE_TXSTAT_LENMASK 0x00001FFF 222e5a5a436SSepherosa Ziehau #define RE_TXSTAT_OWN 0x00002000 223e5a5a436SSepherosa Ziehau #define RE_TXSTAT_TX_UNDERRUN 0x00004000 224e5a5a436SSepherosa Ziehau #define RE_TXSTAT_TX_OK 0x00008000 225e5a5a436SSepherosa Ziehau #define RE_TXSTAT_COLLCNT 0x0F000000 226e5a5a436SSepherosa Ziehau #define RE_TXSTAT_CARR_HBEAT 0x10000000 227e5a5a436SSepherosa Ziehau #define RE_TXSTAT_OUTOFWIN 0x20000000 228e5a5a436SSepherosa Ziehau #define RE_TXSTAT_TXABRT 0x40000000 229e5a5a436SSepherosa Ziehau #define RE_TXSTAT_CARRLOSS 0x80000000 230e5a5a436SSepherosa Ziehau 231e5a5a436SSepherosa Ziehau /* 232e5a5a436SSepherosa Ziehau * Interrupt status register bits. 233e5a5a436SSepherosa Ziehau */ 234e5a5a436SSepherosa Ziehau #define RE_ISR_RX_OK 0x0001 235e5a5a436SSepherosa Ziehau #define RE_ISR_RX_ERR 0x0002 236e5a5a436SSepherosa Ziehau #define RE_ISR_TX_OK 0x0004 237e5a5a436SSepherosa Ziehau #define RE_ISR_TX_ERR 0x0008 238e5a5a436SSepherosa Ziehau #define RE_ISR_RX_OVERRUN 0x0010 239e5a5a436SSepherosa Ziehau #define RE_ISR_PKT_UNDERRUN 0x0020 240e5a5a436SSepherosa Ziehau #define RE_ISR_LINKCHG 0x0020 24180492964SSepherosa Ziehau #define RE_ISR_FIFO_OFLOW 0x0040 242e5a5a436SSepherosa Ziehau #define RE_ISR_TDU 0x0080 243e5a5a436SSepherosa Ziehau #define RE_ISR_PCS_TIMEOUT 0x4000 /* 8129 only */ 244e5a5a436SSepherosa Ziehau #define RE_ISR_SYSTEM_ERR 0x8000 245e5a5a436SSepherosa Ziehau 246e5a5a436SSepherosa Ziehau /* 247e5a5a436SSepherosa Ziehau #define RE_INTRS \ 248e5a5a436SSepherosa Ziehau (RE_ISR_TX_OK|RE_ISR_RX_OK|RE_ISR_RX_ERR|RE_ISR_TX_ERR| \ 249e5a5a436SSepherosa Ziehau RE_ISR_RX_OVERRUN|RE_ISR_PKT_UNDERRUN|RE_ISR_FIFO_OFLOW| \ 250e5a5a436SSepherosa Ziehau RE_ISR_PCS_TIMEOUT|RE_ISR_SYSTEM_ERR) 251e5a5a436SSepherosa Ziehau */ 252e5a5a436SSepherosa Ziehau 253e5a5a436SSepherosa Ziehau #define RE_INTRS \ 254e5a5a436SSepherosa Ziehau (RE_ISR_TX_OK|RE_ISR_RX_OK|RE_ISR_RX_ERR|RE_ISR_TX_ERR| \ 255e5a5a436SSepherosa Ziehau RE_ISR_RX_OVERRUN|RE_ISR_PKT_UNDERRUN|RE_ISR_TDU| \ 256e5a5a436SSepherosa Ziehau RE_ISR_PCS_TIMEOUT|RE_ISR_SYSTEM_ERR) 257e5a5a436SSepherosa Ziehau 258e5a5a436SSepherosa Ziehau /* 259e5a5a436SSepherosa Ziehau * Media status register. (8139 only) 260e5a5a436SSepherosa Ziehau */ 261e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_RXPAUSE 0x01 262e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_TXPAUSE 0x02 263e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_LINK 0x04 264e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_SPEED10 0x08 265e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_RXFLOWCTL 0x40 /* duplex mode */ 266e5a5a436SSepherosa Ziehau #define RE_MEDIASTAT_TXFLOWCTL 0x80 /* duplex mode */ 267e5a5a436SSepherosa Ziehau 268e5a5a436SSepherosa Ziehau /* 269e5a5a436SSepherosa Ziehau * Receive config register. 270e5a5a436SSepherosa Ziehau */ 271e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_ALLPHYS 0x00000001 /* accept all nodes */ 272e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_INDIV 0x00000002 /* match filter */ 273e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_MULTI 0x00000004 /* accept all multicast */ 274e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_BROAD 0x00000008 /* accept all broadcast */ 275e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_RUNT 0x00000010 276e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_ERRPKT 0x00000020 277e5a5a436SSepherosa Ziehau #define RE_RXCFG_RX_9356SEL 0x00000040 278e5a5a436SSepherosa Ziehau #define RE_RXCFG_WRAP 0x00000080 279e5a5a436SSepherosa Ziehau #define RE_RXCFG_MAXDMA 0x00000700 280e5a5a436SSepherosa Ziehau #define RE_RXCFG_BUFSZ 0x00001800 281e5a5a436SSepherosa Ziehau 282e5a5a436SSepherosa Ziehau #define RE_RXDMA_16BYTES 0x00000000 283e5a5a436SSepherosa Ziehau #define RE_RXDMA_32BYTES 0x00000100 284e5a5a436SSepherosa Ziehau #define RE_RXDMA_64BYTES 0x00000200 285e5a5a436SSepherosa Ziehau #define RE_RXDMA_128BYTES 0x00000300 286e5a5a436SSepherosa Ziehau #define RE_RXDMA_256BYTES 0x00000400 287e5a5a436SSepherosa Ziehau #define RE_RXDMA_512BYTES 0x00000500 288e5a5a436SSepherosa Ziehau #define RE_RXDMA_1024BYTES 0x00000600 289e5a5a436SSepherosa Ziehau #define RE_RXDMA_UNLIMITED 0x00000700 290e5a5a436SSepherosa Ziehau 291e5a5a436SSepherosa Ziehau #define RE_RXBUF_8 0x00000000 292e5a5a436SSepherosa Ziehau #define RE_RXBUF_16 0x00000800 293e5a5a436SSepherosa Ziehau #define RE_RXBUF_32 0x00001000 294e5a5a436SSepherosa Ziehau #define RE_RXBUF_64 0x00001800 295e5a5a436SSepherosa Ziehau 296e5a5a436SSepherosa Ziehau #define RE_RXRESVERED 0x0000E000 297e5a5a436SSepherosa Ziehau 298e5a5a436SSepherosa Ziehau /* 299e5a5a436SSepherosa Ziehau * Bits in RX status header (included with RX'ed packet 300e5a5a436SSepherosa Ziehau * in ring buffer). 301e5a5a436SSepherosa Ziehau */ 302e5a5a436SSepherosa Ziehau #define RE_RXSTAT_RXOK 0x00000001 303e5a5a436SSepherosa Ziehau #define RE_RXSTAT_ALIGNERR 0x00000002 304e5a5a436SSepherosa Ziehau #define RE_RXSTAT_CRCERR 0x00000004 305e5a5a436SSepherosa Ziehau #define RE_RXSTAT_GIANT 0x00000008 306e5a5a436SSepherosa Ziehau #define RE_RXSTAT_RUNT 0x00000010 307e5a5a436SSepherosa Ziehau #define RE_RXSTAT_BADSYM 0x00000020 308e5a5a436SSepherosa Ziehau #define RE_RXSTAT_BROAD 0x00002000 309e5a5a436SSepherosa Ziehau #define RE_RXSTAT_INDIV 0x00004000 310e5a5a436SSepherosa Ziehau #define RE_RXSTAT_MULTI 0x00008000 311e5a5a436SSepherosa Ziehau #define RE_RXSTAT_LENMASK 0xFFFF0000 312e5a5a436SSepherosa Ziehau 313e5a5a436SSepherosa Ziehau #define RE_RXSTAT_UNFINISHED 0xFFF0 /* DMA still in progress */ 314e5a5a436SSepherosa Ziehau /* 315e5a5a436SSepherosa Ziehau * Command register. 316e5a5a436SSepherosa Ziehau */ 317e5a5a436SSepherosa Ziehau #define RE_CMD_EMPTY_RXBUF 0x0001 318e5a5a436SSepherosa Ziehau #define RE_CMD_TX_ENB 0x0004 319e5a5a436SSepherosa Ziehau #define RE_CMD_RX_ENB 0x0008 320e5a5a436SSepherosa Ziehau #define RE_CMD_RESET 0x0010 321e5a5a436SSepherosa Ziehau 322e5a5a436SSepherosa Ziehau /* 323e5a5a436SSepherosa Ziehau * EEPROM control register 324e5a5a436SSepherosa Ziehau */ 325e5a5a436SSepherosa Ziehau #define RE_EE_DATAOUT 0x01 /* Data out */ 326e5a5a436SSepherosa Ziehau #define RE_EE_DATAIN 0x02 /* Data in */ 327e5a5a436SSepherosa Ziehau #define RE_EE_CLK 0x04 /* clock */ 328e5a5a436SSepherosa Ziehau #define RE_EE_SEL 0x08 /* chip select */ 329e5a5a436SSepherosa Ziehau #define RE_EE_MODE (0x40|0x80) 330e5a5a436SSepherosa Ziehau 331e5a5a436SSepherosa Ziehau #define RE_EEMODE_OFF 0x00 332e5a5a436SSepherosa Ziehau #define RE_EEMODE_AUTOLOAD 0x40 333e5a5a436SSepherosa Ziehau #define RE_EEMODE_PROGRAM 0x80 334e5a5a436SSepherosa Ziehau #define RE_EEMODE_WRITECFG (0x80|0x40) 335e5a5a436SSepherosa Ziehau 336e5a5a436SSepherosa Ziehau /* 9346 EEPROM commands */ 337e5a5a436SSepherosa Ziehau #define RE_EECMD_WRITE 0x140 338e5a5a436SSepherosa Ziehau #define RE_EECMD_READ 0x180 339e5a5a436SSepherosa Ziehau #define RE_EECMD_ERASE 0x1c0 340e5a5a436SSepherosa Ziehau 341e5a5a436SSepherosa Ziehau #define RE_EE_ID 0x00 342e5a5a436SSepherosa Ziehau #define RE_EE_PCI_VID 0x01 343e5a5a436SSepherosa Ziehau #define RE_EE_PCI_DID 0x02 344e5a5a436SSepherosa Ziehau /* Location of station address inside EEPROM */ 345e5a5a436SSepherosa Ziehau #define RE_EE_EADDR 0x07 346e5a5a436SSepherosa Ziehau 347e5a5a436SSepherosa Ziehau /* 348e5a5a436SSepherosa Ziehau * MII register (8129 only) 349e5a5a436SSepherosa Ziehau */ 350e5a5a436SSepherosa Ziehau #define RE_MII_CLK 0x01 351e5a5a436SSepherosa Ziehau #define RE_MII_DATAIN 0x02 352e5a5a436SSepherosa Ziehau #define RE_MII_DATAOUT 0x04 353e5a5a436SSepherosa Ziehau #define RE_MII_DIR 0x80 /* 0 == input, 1 == output */ 354e5a5a436SSepherosa Ziehau 355e5a5a436SSepherosa Ziehau /* 356e5a5a436SSepherosa Ziehau * Config 0 register 357e5a5a436SSepherosa Ziehau */ 358e5a5a436SSepherosa Ziehau #define RE_CFG0_ROM0 0x01 359e5a5a436SSepherosa Ziehau #define RE_CFG0_ROM1 0x02 360e5a5a436SSepherosa Ziehau #define RE_CFG0_ROM2 0x04 361e5a5a436SSepherosa Ziehau #define RE_CFG0_PL0 0x08 362e5a5a436SSepherosa Ziehau #define RE_CFG0_PL1 0x10 363e5a5a436SSepherosa Ziehau #define RE_CFG0_10MBPS 0x20 /* 10 Mbps internal mode */ 364e5a5a436SSepherosa Ziehau #define RE_CFG0_PCS 0x40 365e5a5a436SSepherosa Ziehau #define RE_CFG0_SCR 0x80 366e5a5a436SSepherosa Ziehau 367e5a5a436SSepherosa Ziehau /* 368e5a5a436SSepherosa Ziehau * Config 1 register 369e5a5a436SSepherosa Ziehau */ 370e5a5a436SSepherosa Ziehau #define RE_CFG1_PME 0x01 371e5a5a436SSepherosa Ziehau #define RE_CFG1_IOMAP 0x04 372e5a5a436SSepherosa Ziehau #define RE_CFG1_MEMMAP 0x08 373e5a5a436SSepherosa Ziehau #define RE_CFG1_RSVD 0x10 374e5a5a436SSepherosa Ziehau #define RE_CFG1_LED0 0x40 375e5a5a436SSepherosa Ziehau #define RE_CFG1_LED1 0x80 376e5a5a436SSepherosa Ziehau 377e5a5a436SSepherosa Ziehau /* 378e5a5a436SSepherosa Ziehau * Config 3 register 379e5a5a436SSepherosa Ziehau */ 380e5a5a436SSepherosa Ziehau #define RL_CFG3_GRANTSEL 0x80 381e5a5a436SSepherosa Ziehau #define RL_CFG3_WOL_MAGIC 0x20 382e5a5a436SSepherosa Ziehau #define RL_CFG3_WOL_LINK 0x10 383e5a5a436SSepherosa Ziehau #define RL_CFG3_JUMBO_EN0 0x04 /* RTL8168C or later. */ 384e5a5a436SSepherosa Ziehau #define RL_CFG3_FAST_B2B 0x01 385e5a5a436SSepherosa Ziehau 386e5a5a436SSepherosa Ziehau /* 387e5a5a436SSepherosa Ziehau * Config 4 register 388e5a5a436SSepherosa Ziehau */ 389e5a5a436SSepherosa Ziehau #define RL_CFG4_LWPTN 0x04 390e5a5a436SSepherosa Ziehau #define RL_CFG4_LWPME 0x10 391e5a5a436SSepherosa Ziehau #define RL_CFG4_JUMBO_EN1 0x02 /* RTL8168C or later. */ 392e5a5a436SSepherosa Ziehau #define RL_CFG4_CUSTOMIZED_LED 0x40 393e5a5a436SSepherosa Ziehau 394e5a5a436SSepherosa Ziehau /* 395e5a5a436SSepherosa Ziehau * Config 5 register 396e5a5a436SSepherosa Ziehau */ 397e5a5a436SSepherosa Ziehau #define RL_CFG5_WOL_BCAST 0x40 398e5a5a436SSepherosa Ziehau #define RL_CFG5_WOL_MCAST 0x20 399e5a5a436SSepherosa Ziehau #define RL_CFG5_WOL_UCAST 0x10 400e5a5a436SSepherosa Ziehau #define RL_CFG5_WOL_LANWAKE 0x02 401e5a5a436SSepherosa Ziehau #define RL_CFG5_PME_STS 0x01 402e5a5a436SSepherosa Ziehau 403e5a5a436SSepherosa Ziehau /* 404e5a5a436SSepherosa Ziehau * PHY Status register 405e5a5a436SSepherosa Ziehau */ 40680492964SSepherosa Ziehau #define RL_PHY_STATUS_500MF 0x80000 40780492964SSepherosa Ziehau #define RL_PHY_STATUS_2500MF 0x400 40880492964SSepherosa Ziehau #define RL_PHY_STATUS_1250MF 0x200 40980492964SSepherosa Ziehau #define RL_PHY_STATUS_CABLE_PLUG 0x80 41080492964SSepherosa Ziehau #define RL_PHY_STATUS_TX_FLOW_CTRL 0x40 41180492964SSepherosa Ziehau #define RL_PHY_STATUS_RX_FLOW_CTRL 0x20 412e5a5a436SSepherosa Ziehau #define RL_PHY_STATUS_1000MF 0x10 413e5a5a436SSepherosa Ziehau #define RL_PHY_STATUS_100M 0x08 414e5a5a436SSepherosa Ziehau #define RL_PHY_STATUS_10M 0x04 415e5a5a436SSepherosa Ziehau #define RL_PHY_STATUS_LINK_STS 0x02 416e5a5a436SSepherosa Ziehau #define RL_PHY_STATUS_FULL_DUP 0x01 417e5a5a436SSepherosa Ziehau 418e5a5a436SSepherosa Ziehau /* OCP GPHY access */ 419e5a5a436SSepherosa Ziehau #define OCPDR_Write 0x80000000 420e5a5a436SSepherosa Ziehau #define OCPDR_Read 0x00000000 421e5a5a436SSepherosa Ziehau #define OCPDR_Reg_Mask 0xFF 422e5a5a436SSepherosa Ziehau #define OCPDR_Data_Mask 0xFFFF 423e5a5a436SSepherosa Ziehau #define OCPDR_GPHY_Reg_shift 16 424e5a5a436SSepherosa Ziehau #define OCPAR_Flag 0x80000000 425e5a5a436SSepherosa Ziehau #define OCPAR_GPHY_Write 0x8000F060 426e5a5a436SSepherosa Ziehau #define OCPAR_GPHY_Read 0x0000F060 427e5a5a436SSepherosa Ziehau #define OCPR_Write 0x80000000 428e5a5a436SSepherosa Ziehau #define OCPR_Read 0x00000000 429e5a5a436SSepherosa Ziehau #define OCPR_Addr_Reg_shift 16 430e5a5a436SSepherosa Ziehau #define OCPR_Flag 0x80000000 431e5a5a436SSepherosa Ziehau #define OCP_STD_PHY_BASE_PAGE 0x0A40 432e5a5a436SSepherosa Ziehau 433e5a5a436SSepherosa Ziehau /* MCU Command */ 434e5a5a436SSepherosa Ziehau #define RE_NOW_IS_OOB (1 << 7) 435e5a5a436SSepherosa Ziehau #define RE_TXFIFO_EMPTY (1 << 5) 436e5a5a436SSepherosa Ziehau #define RE_RXFIFO_EMPTY (1 << 4) 437e5a5a436SSepherosa Ziehau 438e5a5a436SSepherosa Ziehau /* OOB Command */ 439e5a5a436SSepherosa Ziehau #define OOB_CMD_RESET 0x00 440e5a5a436SSepherosa Ziehau #define OOB_CMD_DRIVER_START 0x05 441e5a5a436SSepherosa Ziehau #define OOB_CMD_DRIVER_STOP 0x06 442e5a5a436SSepherosa Ziehau #define OOB_CMD_SET_IPMAC 0x41 443e5a5a436SSepherosa Ziehau 444e5a5a436SSepherosa Ziehau /* Ethernet PHY MDI Mode */ 445e5a5a436SSepherosa Ziehau #define RE_ETH_PHY_FORCE_MDI 0 446e5a5a436SSepherosa Ziehau #define RE_ETH_PHY_FORCE_MDIX 1 447e5a5a436SSepherosa Ziehau #define RE_ETH_PHY_AUTO_MDI_MDIX 2 448e5a5a436SSepherosa Ziehau 449e5a5a436SSepherosa Ziehau /* 450e5a5a436SSepherosa Ziehau * The RealTek doesn't use a fragment-based descriptor mechanism. 451e5a5a436SSepherosa Ziehau * Instead, there are only four register sets, each or which represents 452e5a5a436SSepherosa Ziehau * one 'descriptor.' Basically, each TX descriptor is just a contiguous 453e5a5a436SSepherosa Ziehau * packet buffer (32-bit aligned!) and we place the buffer addresses in 454e5a5a436SSepherosa Ziehau * the registers so the chip knows where they are. 455e5a5a436SSepherosa Ziehau * 456e5a5a436SSepherosa Ziehau * We can sort of kludge together the same kind of buffer management 457e5a5a436SSepherosa Ziehau * used in previous drivers, but we have to do buffer copies almost all 458e5a5a436SSepherosa Ziehau * the time, so it doesn't really buy us much. 459e5a5a436SSepherosa Ziehau * 460e5a5a436SSepherosa Ziehau * For reception, there's just one large buffer where the chip stores 461e5a5a436SSepherosa Ziehau * all received packets. 462e5a5a436SSepherosa Ziehau */ 463e5a5a436SSepherosa Ziehau #ifndef __NO_STRICT_ALIGNMENT 464e5a5a436SSepherosa Ziehau #define RE_FIXUP_RX 1 465e5a5a436SSepherosa Ziehau #endif 466e5a5a436SSepherosa Ziehau 467e5a5a436SSepherosa Ziehau 468e5a5a436SSepherosa Ziehau #define RE_RX_BUF_SZ RE_RXBUF_64 469e5a5a436SSepherosa Ziehau #define RE_RXBUFLEN (1 << ((RE_RX_BUF_SZ >> 11) + 13)) 470e5a5a436SSepherosa Ziehau #define RE_TX_LIST_CNT 4 /* C mode Tx buffer number */ 471e5a5a436SSepherosa Ziehau #define RE_TX_BUF_NUM 256 /* Tx buffer number */ 472e5a5a436SSepherosa Ziehau #define RE_RX_BUF_NUM 256 /* Rx buffer number */ 473e5a5a436SSepherosa Ziehau #define RE_BUF_SIZE 9216 /* Buffer size of descriptor buffer */ 474e5a5a436SSepherosa Ziehau #define RE_MIN_FRAMELEN 60 475e5a5a436SSepherosa Ziehau #define RE_TXREV(x) ((x) << 11) 476e5a5a436SSepherosa Ziehau #define RE_RX_RESVERED RE_RXRESVERED 477e5a5a436SSepherosa Ziehau #define RE_RX_MAXDMA RE_RXDMA_UNLIMITED 478e5a5a436SSepherosa Ziehau #define RE_TX_MAXDMA RE_TXDMA_2048BYTES 479e5a5a436SSepherosa Ziehau #define RE_NTXSEGS 32 480e5a5a436SSepherosa Ziehau 481e5a5a436SSepherosa Ziehau #define RE_TXCFG_CONFIG 0x03000780 //(RE_TXCFG_IFG|RE_TX_MAXDMA) 482e5a5a436SSepherosa Ziehau 483e5a5a436SSepherosa Ziehau #define RE_DESC_ALIGN 256 /* descriptor alignment */ 484e5a5a436SSepherosa Ziehau #define RE_RX_BUFFER_ALIGN 8 /* descriptor alignment */ 485e5a5a436SSepherosa Ziehau 486e5a5a436SSepherosa Ziehau #ifdef RE_FIXUP_RX 487e5a5a436SSepherosa Ziehau #define RE_ETHER_ALIGN RE_RX_BUFFER_ALIGN 488e5a5a436SSepherosa Ziehau #else 489e5a5a436SSepherosa Ziehau #define RE_ETHER_ALIGN 0 490e5a5a436SSepherosa Ziehau #endif 491e5a5a436SSepherosa Ziehau 492e5a5a436SSepherosa Ziehau #ifdef __DragonFly__ 493e5a5a436SSepherosa Ziehau #ifndef ETHER_VLAN_ENCAP_LEN 494e5a5a436SSepherosa Ziehau #define ETHER_VLAN_ENCAP_LEN EVL_ENCAPLEN 495e5a5a436SSepherosa Ziehau #endif 496e5a5a436SSepherosa Ziehau #endif 497e5a5a436SSepherosa Ziehau #define Jumbo_Frame_2k ((2 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 498e5a5a436SSepherosa Ziehau #define Jumbo_Frame_3k ((3 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 499e5a5a436SSepherosa Ziehau #define Jumbo_Frame_4k ((4 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 500e5a5a436SSepherosa Ziehau #define Jumbo_Frame_5k ((5 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 501e5a5a436SSepherosa Ziehau #define Jumbo_Frame_6k ((6 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 502e5a5a436SSepherosa Ziehau #define Jumbo_Frame_7k ((7 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 503e5a5a436SSepherosa Ziehau #define Jumbo_Frame_8k ((8 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 504e5a5a436SSepherosa Ziehau #define Jumbo_Frame_9k ((9 * 1024) - ETHER_VLAN_ENCAP_LEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 505e5a5a436SSepherosa Ziehau 506e5a5a436SSepherosa Ziehau #ifndef __DragonFly__ 507e5a5a436SSepherosa Ziehau struct re_chain_data { 508e5a5a436SSepherosa Ziehau u_int16_t cur_rx; 509e5a5a436SSepherosa Ziehau caddr_t re_rx_buf; 510e5a5a436SSepherosa Ziehau caddr_t re_rx_buf_ptr; 511e5a5a436SSepherosa Ziehau 512e5a5a436SSepherosa Ziehau struct mbuf *re_tx_chain[RE_TX_LIST_CNT]; 513e5a5a436SSepherosa Ziehau u_int8_t last_tx; /* Previous Tx OK */ 514e5a5a436SSepherosa Ziehau u_int8_t cur_tx; /* Next to TX */ 515e5a5a436SSepherosa Ziehau }; 516e5a5a436SSepherosa Ziehau 517e5a5a436SSepherosa Ziehau //+++ From FreeBSD 9.0 +++ 518e5a5a436SSepherosa Ziehau 519e5a5a436SSepherosa Ziehau #define RL_MSI_MESSAGES 1 520e5a5a436SSepherosa Ziehau 521e5a5a436SSepherosa Ziehau #define RL_ADDR_LO(y) ((uint64_t) (y) & 0xFFFFFFFF) 522e5a5a436SSepherosa Ziehau #define RL_ADDR_HI(y) ((uint64_t) (y) >> 32) 523e5a5a436SSepherosa Ziehau /* 524e5a5a436SSepherosa Ziehau * RX/TX descriptor definition. When large send mode is enabled, the 525e5a5a436SSepherosa Ziehau * lower 11 bits of the TX rl_cmd word are used to hold the MSS, and 526e5a5a436SSepherosa Ziehau * the checksum offload bits are disabled. The structure layout is 527e5a5a436SSepherosa Ziehau * the same for RX and TX descriptors 528e5a5a436SSepherosa Ziehau */ 529e5a5a436SSepherosa Ziehau 530e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_FRAGLEN 0x0000FFFF 531e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_TCPCSUM 0x00010000 /* TCP checksum enable */ 532e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_UDPCSUM 0x00020000 /* UDP checksum enable */ 533e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_IPCSUM 0x00040000 /* IP header checksum enable */ 534e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_MSSVAL 0x07FF0000 /* Large send MSS value */ 535e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_MSSVAL_SHIFT 16 /* Large send MSS value shift */ 536e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_LGSEND 0x08000000 /* TCP large send enb */ 537e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_EOF 0x10000000 /* end of frame marker */ 538e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_SOF 0x20000000 /* start of frame marker */ 539e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_EOR 0x40000000 /* end of ring marker */ 540e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_OWN 0x80000000 /* chip owns descriptor */ 541e5a5a436SSepherosa Ziehau 542e5a5a436SSepherosa Ziehau #define RL_TDESC_VLANCTL_TAG 0x00020000 /* Insert VLAN tag */ 543e5a5a436SSepherosa Ziehau #define RL_TDESC_VLANCTL_DATA 0x0000FFFF /* TAG data */ 544e5a5a436SSepherosa Ziehau /* RTL8168C/RTL8168CP/RTL8111C/RTL8111CP */ 545e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_UDPCSUMV2 0x80000000 546e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_TCPCSUMV2 0x40000000 547e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_IPCSUMV2 0x20000000 548e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_MSSVALV2 0x1FFC0000 549e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_MSSVALV2_SHIFT 18 550e5a5a436SSepherosa Ziehau 551e5a5a436SSepherosa Ziehau #define RL_TDESC_CMD_BUFLEN 0x0000FFFF 552e5a5a436SSepherosa Ziehau 553e5a5a436SSepherosa Ziehau /* 554e5a5a436SSepherosa Ziehau * Error bits are valid only on the last descriptor of a frame 555e5a5a436SSepherosa Ziehau * (i.e. RL_TDESC_CMD_EOF == 1) 556e5a5a436SSepherosa Ziehau */ 557e5a5a436SSepherosa Ziehau 558e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_COLCNT 0x000F0000 /* collision count */ 559e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_EXCESSCOL 0x00100000 /* excessive collisions */ 560e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_LINKFAIL 0x00200000 /* link faulure */ 561e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_OWINCOL 0x00400000 /* out-of-window collision */ 562e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_TXERRSUM 0x00800000 /* transmit error summary */ 563e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_UNDERRUN 0x02000000 /* TX underrun occured */ 564e5a5a436SSepherosa Ziehau #define RL_TDESC_STAT_OWN 0x80000000 565e5a5a436SSepherosa Ziehau 566e5a5a436SSepherosa Ziehau /* 567e5a5a436SSepherosa Ziehau * RX descriptor cmd/vlan definitions 568e5a5a436SSepherosa Ziehau */ 569e5a5a436SSepherosa Ziehau 570e5a5a436SSepherosa Ziehau #define RL_RDESC_CMD_EOR 0x40000000 571e5a5a436SSepherosa Ziehau #define RL_RDESC_CMD_OWN 0x80000000 572e5a5a436SSepherosa Ziehau #define RL_RDESC_CMD_BUFLEN 0x00003FFF 573e5a5a436SSepherosa Ziehau 574e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_OWN 0x80000000 575e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_EOR 0x40000000 576e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_SOF 0x20000000 577e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_EOF 0x10000000 578e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_FRALIGN 0x08000000 /* frame alignment error */ 579e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_MCAST 0x04000000 /* multicast pkt received */ 580e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_UCAST 0x02000000 /* unicast pkt received */ 581e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_BCAST 0x01000000 /* broadcast pkt received */ 582e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_BUFOFLOW 0x00800000 /* out of buffer space */ 583e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_FIFOOFLOW 0x00400000 /* FIFO overrun */ 584e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_GIANT 0x00200000 /* pkt > 4096 bytes */ 585e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_RXERRSUM 0x00100000 /* RX error summary */ 586e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_RUNT 0x00080000 /* runt packet received */ 587e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_CRCERR 0x00040000 /* CRC error */ 588e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_PROTOID 0x00030000 /* Protocol type */ 589e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_UDP 0x00020000 /* UDP, 8168C/CP, 8111C/CP */ 590e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_TCP 0x00010000 /* TCP, 8168C/CP, 8111C/CP */ 591e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_IPSUMBAD 0x00008000 /* IP header checksum bad */ 592e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_UDPSUMBAD 0x00004000 /* UDP checksum bad */ 593e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_TCPSUMBAD 0x00002000 /* TCP checksum bad */ 594e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_GFRAGLEN RL_RDESC_CMD_BUFLEN /* RX'ed frame/frag len */ 595e5a5a436SSepherosa Ziehau #define RL_RDESC_STAT_ERRS (RL_RDESC_STAT_GIANT|RL_RDESC_STAT_RUNT| \ 596e5a5a436SSepherosa Ziehau RL_RDESC_STAT_CRCERR) 597e5a5a436SSepherosa Ziehau 598e5a5a436SSepherosa Ziehau #define RL_RDESC_VLANCTL_TAG 0x00010000 /* VLAN tag available 599e5a5a436SSepherosa Ziehau (rl_vlandata valid)*/ 600e5a5a436SSepherosa Ziehau #define RL_RDESC_VLANCTL_DATA 0x0000FFFF /* TAG data */ 601e5a5a436SSepherosa Ziehau /* RTL8168C/RTL8168CP/RTL8111C/RTL8111CP */ 602e5a5a436SSepherosa Ziehau #define RL_RDESC_IPV6 0x80000000 603e5a5a436SSepherosa Ziehau #define RL_RDESC_IPV4 0x40000000 604e5a5a436SSepherosa Ziehau 605e5a5a436SSepherosa Ziehau #define RL_PROTOID_NONIP 0x00000000 606e5a5a436SSepherosa Ziehau #define RL_PROTOID_TCPIP 0x00010000 607e5a5a436SSepherosa Ziehau #define RL_PROTOID_UDPIP 0x00020000 608e5a5a436SSepherosa Ziehau #define RL_PROTOID_IP 0x00030000 609e5a5a436SSepherosa Ziehau #define RL_TCPPKT(x) (((x) & RL_RDESC_STAT_PROTOID) == \ 610e5a5a436SSepherosa Ziehau RL_PROTOID_TCPIP) 611e5a5a436SSepherosa Ziehau #define RL_UDPPKT(x) (((x) & RL_RDESC_STAT_PROTOID) == \ 612e5a5a436SSepherosa Ziehau RL_PROTOID_UDPIP) 613e5a5a436SSepherosa Ziehau 614e5a5a436SSepherosa Ziehau //--- From FreeBSD 9.0--- 615e5a5a436SSepherosa Ziehau 616e5a5a436SSepherosa Ziehau 617e5a5a436SSepherosa Ziehau union RxDesc { 618e5a5a436SSepherosa Ziehau u_int32_t ul[4]; 619e5a5a436SSepherosa Ziehau struct { 620e5a5a436SSepherosa Ziehau #if defined(_LITTLE_ENDIAN) 621e5a5a436SSepherosa Ziehau u_int32_t Frame_Length:14; 622e5a5a436SSepherosa Ziehau u_int32_t TCPF:1; 623e5a5a436SSepherosa Ziehau u_int32_t UDPF:1; 624e5a5a436SSepherosa Ziehau u_int32_t IPF:1; 625e5a5a436SSepherosa Ziehau u_int32_t TCPT:1; 626e5a5a436SSepherosa Ziehau u_int32_t UDPT:1; 627e5a5a436SSepherosa Ziehau u_int32_t CRC:1; 628e5a5a436SSepherosa Ziehau u_int32_t RUNT:1; 629e5a5a436SSepherosa Ziehau u_int32_t RES:1; 630e5a5a436SSepherosa Ziehau u_int32_t RWT:1; 631e5a5a436SSepherosa Ziehau u_int32_t RESV:2; 632e5a5a436SSepherosa Ziehau u_int32_t BAR:1; 633e5a5a436SSepherosa Ziehau u_int32_t PAM:1; 634e5a5a436SSepherosa Ziehau u_int32_t MAR:1; 635e5a5a436SSepherosa Ziehau u_int32_t LS:1; 636e5a5a436SSepherosa Ziehau u_int32_t FS:1; 637e5a5a436SSepherosa Ziehau u_int32_t EOR:1; 638e5a5a436SSepherosa Ziehau u_int32_t OWN:1; 639e5a5a436SSepherosa Ziehau 640e5a5a436SSepherosa Ziehau u_int32_t VLAN_TAG:16; 641e5a5a436SSepherosa Ziehau u_int32_t TAVA:1; 642e5a5a436SSepherosa Ziehau u_int32_t RESV1:15; 643e5a5a436SSepherosa Ziehau #elif defined(_BIG_ENDIAN) 644e5a5a436SSepherosa Ziehau u_int32_t OWN:1; 645e5a5a436SSepherosa Ziehau u_int32_t EOR:1; 646e5a5a436SSepherosa Ziehau u_int32_t FS:1; 647e5a5a436SSepherosa Ziehau u_int32_t LS:1; 648e5a5a436SSepherosa Ziehau u_int32_t MAR:1; 649e5a5a436SSepherosa Ziehau u_int32_t PAM:1; 650e5a5a436SSepherosa Ziehau u_int32_t BAR:1; 651e5a5a436SSepherosa Ziehau u_int32_t RESV:2; 652e5a5a436SSepherosa Ziehau u_int32_t RWT:1; 653e5a5a436SSepherosa Ziehau u_int32_t RES:1; 654e5a5a436SSepherosa Ziehau u_int32_t RUNT:1; 655e5a5a436SSepherosa Ziehau u_int32_t CRC:1; 656e5a5a436SSepherosa Ziehau u_int32_t UDPT:1; 657e5a5a436SSepherosa Ziehau u_int32_t TCPT:1; 658e5a5a436SSepherosa Ziehau u_int32_t IPF:1; 659e5a5a436SSepherosa Ziehau u_int32_t UDPF:1; 660e5a5a436SSepherosa Ziehau u_int32_t TCPF:1; 661e5a5a436SSepherosa Ziehau u_int32_t Frame_Length:14; 662e5a5a436SSepherosa Ziehau 663e5a5a436SSepherosa Ziehau u_int32_t RESV1:15; 664e5a5a436SSepherosa Ziehau u_int32_t TAVA:1; 665e5a5a436SSepherosa Ziehau u_int32_t VLAN_TAG:16; 666e5a5a436SSepherosa Ziehau #else 667e5a5a436SSepherosa Ziehau #error "what endian is this machine?" 668e5a5a436SSepherosa Ziehau #endif 669e5a5a436SSepherosa Ziehau u_int32_t RxBuffL; 670e5a5a436SSepherosa Ziehau u_int32_t RxBuffH; 671e5a5a436SSepherosa Ziehau } so0; /* symbol owner=0 */ 672e5a5a436SSepherosa Ziehau }; 673e5a5a436SSepherosa Ziehau 674e5a5a436SSepherosa Ziehau union TxDesc { 675e5a5a436SSepherosa Ziehau u_int32_t ul[4]; 676e5a5a436SSepherosa Ziehau struct { 677e5a5a436SSepherosa Ziehau #if defined(_LITTLE_ENDIAN) 678e5a5a436SSepherosa Ziehau u_int32_t Frame_Length:16; 679e5a5a436SSepherosa Ziehau u_int32_t TCPCS:1; 680e5a5a436SSepherosa Ziehau u_int32_t UDPCS:1; 681e5a5a436SSepherosa Ziehau u_int32_t IPCS:1; 682e5a5a436SSepherosa Ziehau u_int32_t SCRC:1; 683e5a5a436SSepherosa Ziehau u_int32_t RESV:6; 684e5a5a436SSepherosa Ziehau u_int32_t TDMA:1; 685e5a5a436SSepherosa Ziehau u_int32_t LGSEN:1; 686e5a5a436SSepherosa Ziehau u_int32_t LS:1; 687e5a5a436SSepherosa Ziehau u_int32_t FS:1; 688e5a5a436SSepherosa Ziehau u_int32_t EOR:1; 689e5a5a436SSepherosa Ziehau u_int32_t OWN:1; 690e5a5a436SSepherosa Ziehau 691e5a5a436SSepherosa Ziehau u_int32_t VLAN_TAG:16; 692e5a5a436SSepherosa Ziehau u_int32_t TAGC0:1; 693e5a5a436SSepherosa Ziehau u_int32_t TAGC1:1; 694e5a5a436SSepherosa Ziehau u_int32_t RESV1:14; 695e5a5a436SSepherosa Ziehau #elif defined(_BIG_ENDIAN) 696e5a5a436SSepherosa Ziehau u_int32_t OWN:1; 697e5a5a436SSepherosa Ziehau u_int32_t EOR:1; 698e5a5a436SSepherosa Ziehau u_int32_t FS:1; 699e5a5a436SSepherosa Ziehau u_int32_t LS:1; 700e5a5a436SSepherosa Ziehau u_int32_t LGSEN:1; 701e5a5a436SSepherosa Ziehau u_int32_t TDMA:1; 702e5a5a436SSepherosa Ziehau u_int32_t RESV:6; 703e5a5a436SSepherosa Ziehau u_int32_t SCRC:1; 704e5a5a436SSepherosa Ziehau u_int32_t IPCS:1; 705e5a5a436SSepherosa Ziehau u_int32_t UDPCS:1; 706e5a5a436SSepherosa Ziehau u_int32_t TCPCS:1; 707e5a5a436SSepherosa Ziehau u_int32_t Frame_Length:16; 708e5a5a436SSepherosa Ziehau 709e5a5a436SSepherosa Ziehau u_int32_t RESV1:14; 710e5a5a436SSepherosa Ziehau u_int32_t TAGC1:1; 711e5a5a436SSepherosa Ziehau u_int32_t TAGC0:1; 712e5a5a436SSepherosa Ziehau u_int32_t VLAN_TAG:16; 713e5a5a436SSepherosa Ziehau #else 714e5a5a436SSepherosa Ziehau #error "what endian is this machine?" 715e5a5a436SSepherosa Ziehau #endif 716e5a5a436SSepherosa Ziehau u_int32_t TxBuffL; 717e5a5a436SSepherosa Ziehau u_int32_t TxBuffH; 718e5a5a436SSepherosa Ziehau } so1; /* symbol owner=1 */ 719e5a5a436SSepherosa Ziehau }; 720e5a5a436SSepherosa Ziehau 721e5a5a436SSepherosa Ziehau struct re_descriptor { 722e5a5a436SSepherosa Ziehau u_int8_t rx_cur_index; 723e5a5a436SSepherosa Ziehau u_int8_t rx_last_index; 724e5a5a436SSepherosa Ziehau union RxDesc *rx_desc; /* 8 bits alignment */ 725e5a5a436SSepherosa Ziehau struct mbuf *rx_buf[RE_RX_BUF_NUM]; 726e5a5a436SSepherosa Ziehau 727e5a5a436SSepherosa Ziehau u_int8_t tx_cur_index; 728e5a5a436SSepherosa Ziehau u_int8_t tx_last_index; 729e5a5a436SSepherosa Ziehau union TxDesc *tx_desc; /* 8 bits alignment */ 730e5a5a436SSepherosa Ziehau struct mbuf *tx_buf[RE_TX_BUF_NUM]; 731e5a5a436SSepherosa Ziehau bus_dma_tag_t rx_desc_tag; 732e5a5a436SSepherosa Ziehau bus_dmamap_t rx_desc_dmamap; 733e5a5a436SSepherosa Ziehau bus_dma_tag_t re_rx_mtag; /* mbuf RX mapping tag */ 734e5a5a436SSepherosa Ziehau bus_dmamap_t re_rx_dmamap[RE_RX_BUF_NUM]; 735e5a5a436SSepherosa Ziehau 736e5a5a436SSepherosa Ziehau bus_dma_tag_t tx_desc_tag; 737e5a5a436SSepherosa Ziehau bus_dmamap_t tx_desc_dmamap; 738e5a5a436SSepherosa Ziehau bus_dma_tag_t re_tx_mtag; /* mbuf TX mapping tag */ 739e5a5a436SSepherosa Ziehau bus_dmamap_t re_tx_dmamap[RE_TX_BUF_NUM]; 740e5a5a436SSepherosa Ziehau }; 741e5a5a436SSepherosa Ziehau 742e5a5a436SSepherosa Ziehau #define RE_INC(x) (x = (x + 1) % RE_TX_LIST_CNT) 743e5a5a436SSepherosa Ziehau #define RE_CUR_TXADDR(x) ((x->re_cdata.cur_tx * 4) + RE_TXADDR0) 744e5a5a436SSepherosa Ziehau #define RE_CUR_TXSTAT(x) ((x->re_cdata.cur_tx * 4) + RE_TXSTAT0) 745e5a5a436SSepherosa Ziehau #define RE_CUR_TXMBUF(x) (x->re_cdata.re_tx_chain[x->re_cdata.cur_tx]) 746e5a5a436SSepherosa Ziehau #define RE_LAST_TXADDR(x) ((x->re_cdata.last_tx * 4) + RE_TXADDR0) 747e5a5a436SSepherosa Ziehau #define RE_LAST_TXSTAT(x) ((x->re_cdata.last_tx * 4) + RE_TXSTAT0) 748e5a5a436SSepherosa Ziehau #define RE_LAST_TXMBUF(x) (x->re_cdata.re_tx_chain[x->re_cdata.last_tx]) 749e5a5a436SSepherosa Ziehau 750e5a5a436SSepherosa Ziehau struct re_type { 751e5a5a436SSepherosa Ziehau u_int16_t re_vid; 752e5a5a436SSepherosa Ziehau u_int16_t re_did; 753e5a5a436SSepherosa Ziehau char *re_name; 754e5a5a436SSepherosa Ziehau }; 755e5a5a436SSepherosa Ziehau 756e5a5a436SSepherosa Ziehau struct re_mii_frame { 757e5a5a436SSepherosa Ziehau u_int8_t mii_stdelim; 758e5a5a436SSepherosa Ziehau u_int8_t mii_opcode; 759e5a5a436SSepherosa Ziehau u_int8_t mii_phyaddr; 760e5a5a436SSepherosa Ziehau u_int8_t mii_regaddr; 761e5a5a436SSepherosa Ziehau u_int8_t mii_turnaround; 762e5a5a436SSepherosa Ziehau u_int16_t mii_data; 763e5a5a436SSepherosa Ziehau }; 764e5a5a436SSepherosa Ziehau #endif /* !__DragonFly__ */ 765e5a5a436SSepherosa Ziehau 766e5a5a436SSepherosa Ziehau /* 767e5a5a436SSepherosa Ziehau * MII constants 768e5a5a436SSepherosa Ziehau */ 769e5a5a436SSepherosa Ziehau #define RE_MII_STARTDELIM 0x01 770e5a5a436SSepherosa Ziehau #define RE_MII_READOP 0x02 771e5a5a436SSepherosa Ziehau #define RE_MII_WRITEOP 0x01 772e5a5a436SSepherosa Ziehau #define RE_MII_TURNAROUND 0x02 773e5a5a436SSepherosa Ziehau #define RL_TDESC_VLANCTL_TAG 0x00020000 774e5a5a436SSepherosa Ziehau #define RL_RDESC_VLANCTL_TAG 0x00010000 775e5a5a436SSepherosa Ziehau #define RL_RDESC_VLANCTL_DATA 0x0000FFFF 776e5a5a436SSepherosa Ziehau #define RL_CPLUSCMD_VLANSTRIP 0x0040 777e5a5a436SSepherosa Ziehau #define RL_FLAG_MSI 0x00000001 778e5a5a436SSepherosa Ziehau #define RL_FLAG_PHYWAKE_PM 0x00000004 779e5a5a436SSepherosa Ziehau #define RL_FLAG_DESCV2 0x00000040 780e5a5a436SSepherosa Ziehau #define RL_FLAG_MSIX 0x00000800 781e5a5a436SSepherosa Ziehau #define RL_FLAG_MAGIC_PACKET_V2 0x20000000 782e5a5a436SSepherosa Ziehau #define RL_FLAG_PCIE 0x40000000 78380492964SSepherosa Ziehau #define RL_FLAG_MAGIC_PACKET_V3 0x80000000 784e5a5a436SSepherosa Ziehau 785e5a5a436SSepherosa Ziehau #define RL_ProtoIP ((1<<17)|(1<<18)) 786e5a5a436SSepherosa Ziehau //#define RL_ProtoIP ((1<<16)|(1<<17)) 787e5a5a436SSepherosa Ziehau #define RL_TCPT (1<<17) 788e5a5a436SSepherosa Ziehau #define RL_UDPT (1<<18) 789e5a5a436SSepherosa Ziehau #define RL_IPF (1<<16) 790e5a5a436SSepherosa Ziehau #define RL_UDPF (1<<15) 791e5a5a436SSepherosa Ziehau #define RL_TCPF (1<<14) 792e5a5a436SSepherosa Ziehau #define RL_V4F (1<<30) 793e5a5a436SSepherosa Ziehau 794e5a5a436SSepherosa Ziehau #define RL_IPV4CS (1<<29) 795e5a5a436SSepherosa Ziehau #define RL_TCPCS (1<<30) 796e5a5a436SSepherosa Ziehau #define RL_UDPCS (1<<31) 797e5a5a436SSepherosa Ziehau #define RL_IPV4CS1 (1<<18) 798e5a5a436SSepherosa Ziehau #define RL_TCPCS1 (1<<16) 799e5a5a436SSepherosa Ziehau #define RL_UDPCS1 (1<<17) 800e5a5a436SSepherosa Ziehau 801e5a5a436SSepherosa Ziehau #define RL_RxChkSum (1<<5) 802e5a5a436SSepherosa Ziehau 803e5a5a436SSepherosa Ziehau enum { 804e6e07291SSepherosa Ziehau EFUSE_NOT_SUPPORT = 0, 805e6e07291SSepherosa Ziehau EFUSE_SUPPORT_V1, 806e6e07291SSepherosa Ziehau EFUSE_SUPPORT_V2, 807e6e07291SSepherosa Ziehau EFUSE_SUPPORT_V3, 80880492964SSepherosa Ziehau EFUSE_SUPPORT_V4, 809e6e07291SSepherosa Ziehau }; 810e6e07291SSepherosa Ziehau 811e6e07291SSepherosa Ziehau enum { 812e5a5a436SSepherosa Ziehau MACFG_3 = 3, 813e5a5a436SSepherosa Ziehau MACFG_4, 814e5a5a436SSepherosa Ziehau MACFG_5, 815e5a5a436SSepherosa Ziehau MACFG_6, 816e5a5a436SSepherosa Ziehau 817e5a5a436SSepherosa Ziehau MACFG_11 = 11, 818e5a5a436SSepherosa Ziehau MACFG_12, 819e5a5a436SSepherosa Ziehau MACFG_13, 820e5a5a436SSepherosa Ziehau MACFG_14, 821e5a5a436SSepherosa Ziehau MACFG_15, 822e5a5a436SSepherosa Ziehau MACFG_16, 823e5a5a436SSepherosa Ziehau MACFG_17, 824e5a5a436SSepherosa Ziehau MACFG_18, 825e5a5a436SSepherosa Ziehau MACFG_19, 826e5a5a436SSepherosa Ziehau 827e5a5a436SSepherosa Ziehau MACFG_21 = 21, 828e5a5a436SSepherosa Ziehau MACFG_22, 829e5a5a436SSepherosa Ziehau MACFG_23, 830e5a5a436SSepherosa Ziehau MACFG_24, 831e5a5a436SSepherosa Ziehau MACFG_25, 832e5a5a436SSepherosa Ziehau MACFG_26, 833e5a5a436SSepherosa Ziehau MACFG_27, 834e5a5a436SSepherosa Ziehau MACFG_28, 835e5a5a436SSepherosa Ziehau 836e5a5a436SSepherosa Ziehau MACFG_31 = 31, 837e5a5a436SSepherosa Ziehau MACFG_32, 838e5a5a436SSepherosa Ziehau MACFG_33, 839e5a5a436SSepherosa Ziehau 840e5a5a436SSepherosa Ziehau MACFG_36 = 36, 841e5a5a436SSepherosa Ziehau MACFG_37, 842e5a5a436SSepherosa Ziehau MACFG_38, 843e5a5a436SSepherosa Ziehau MACFG_39, 844e5a5a436SSepherosa Ziehau 845e5a5a436SSepherosa Ziehau MACFG_41 = 41, 846e5a5a436SSepherosa Ziehau MACFG_42, 847e5a5a436SSepherosa Ziehau MACFG_43, 848e5a5a436SSepherosa Ziehau 849e5a5a436SSepherosa Ziehau MACFG_50 = 50, 850e5a5a436SSepherosa Ziehau MACFG_51, 851e5a5a436SSepherosa Ziehau MACFG_52, 852e5a5a436SSepherosa Ziehau MACFG_53, 853e5a5a436SSepherosa Ziehau MACFG_54, 854e5a5a436SSepherosa Ziehau MACFG_55, 855e5a5a436SSepherosa Ziehau MACFG_56, 856e5a5a436SSepherosa Ziehau MACFG_57, 857e5a5a436SSepherosa Ziehau MACFG_58, 858e5a5a436SSepherosa Ziehau MACFG_59, 859e5a5a436SSepherosa Ziehau MACFG_60, 860e5a5a436SSepherosa Ziehau MACFG_61, 861e5a5a436SSepherosa Ziehau MACFG_62, 862e5a5a436SSepherosa Ziehau MACFG_63, 863e5a5a436SSepherosa Ziehau MACFG_64, 864e5a5a436SSepherosa Ziehau MACFG_65, 865e5a5a436SSepherosa Ziehau MACFG_66, 866e5a5a436SSepherosa Ziehau MACFG_67, 867e5a5a436SSepherosa Ziehau MACFG_68, 868e5a5a436SSepherosa Ziehau MACFG_69, 869e6e07291SSepherosa Ziehau MACFG_70, 870e6e07291SSepherosa Ziehau MACFG_71, 87180492964SSepherosa Ziehau MACFG_72, 87280492964SSepherosa Ziehau 87380492964SSepherosa Ziehau MACFG_80 = 80, 87480492964SSepherosa Ziehau MACFG_81, 87580492964SSepherosa Ziehau MACFG_82, 87680492964SSepherosa Ziehau MACFG_83, 877e5a5a436SSepherosa Ziehau 878e5a5a436SSepherosa Ziehau MACFG_FF = 0xFF 879e5a5a436SSepherosa Ziehau }; 880e5a5a436SSepherosa Ziehau 881e5a5a436SSepherosa Ziehau //#define MAC_STYLE_1 1 /* RTL8110S/SB/SC, RTL8111B and RTL8101E */ 882e5a5a436SSepherosa Ziehau //#define MAC_STYLE_2 2 /* RTL8111C/CP/D and RTL8102E */ 883e5a5a436SSepherosa Ziehau 884e5a5a436SSepherosa Ziehau #ifndef __DragonFly__ 885e5a5a436SSepherosa Ziehau struct re_softc { 886e5a5a436SSepherosa Ziehau #if OS_VER<VERSION(6,0) 887e5a5a436SSepherosa Ziehau struct arpcom arpcom; /* interface info */ 888e5a5a436SSepherosa Ziehau #else 889e5a5a436SSepherosa Ziehau struct ifnet *re_ifp; 890e5a5a436SSepherosa Ziehau #endif 891e5a5a436SSepherosa Ziehau 892e5a5a436SSepherosa Ziehau bus_space_handle_t re_bhandle; /* bus space handle */ 893e5a5a436SSepherosa Ziehau bus_space_tag_t re_btag; /* bus space tag */ 894e5a5a436SSepherosa Ziehau struct resource *re_res; 895e5a5a436SSepherosa Ziehau int re_res_id; 896e5a5a436SSepherosa Ziehau int re_res_type; 897e5a5a436SSepherosa Ziehau struct resource *re_res_pba; 898e5a5a436SSepherosa Ziehau struct resource *re_irq; 899e5a5a436SSepherosa Ziehau void *re_intrhand; 900e5a5a436SSepherosa Ziehau struct ifmedia media; /* used to instead of MII */ 901e5a5a436SSepherosa Ziehau 902e5a5a436SSepherosa Ziehau /* Variable for 8169 family */ 903e5a5a436SSepherosa Ziehau u_int8_t re_8169_MacVersion; 904e5a5a436SSepherosa Ziehau u_int8_t re_8169_PhyVersion; 905e5a5a436SSepherosa Ziehau 906e5a5a436SSepherosa Ziehau u_int8_t rx_fifo_overflow; 907e5a5a436SSepherosa Ziehau u_int8_t driver_detach; 908e5a5a436SSepherosa Ziehau 909e5a5a436SSepherosa Ziehau u_int8_t re_unit; /* interface number */ 910e5a5a436SSepherosa Ziehau u_int8_t re_type; 911e5a5a436SSepherosa Ziehau u_int8_t re_stats_no_timeout; 912e5a5a436SSepherosa Ziehau u_int8_t re_revid; 91380492964SSepherosa Ziehau u_int16_t re_vendor_id; 914e5a5a436SSepherosa Ziehau u_int16_t re_device_id; 91580492964SSepherosa Ziehau u_int16_t re_subvendor_id; 91680492964SSepherosa Ziehau u_int16_t re_subdevice_id; 917e5a5a436SSepherosa Ziehau 918e5a5a436SSepherosa Ziehau struct re_chain_data re_cdata; /* Tx buffer chain, Used only in ~C+ mode */ 919e5a5a436SSepherosa Ziehau struct re_descriptor re_desc; /* Descriptor, Used only in C+ mode */ 920e5a5a436SSepherosa Ziehau #ifdef RE_USE_NEW_CALLOUT_FUN 921e5a5a436SSepherosa Ziehau struct callout re_stat_ch; 922e5a5a436SSepherosa Ziehau #else 923e5a5a436SSepherosa Ziehau struct callout_handle re_stat_ch; 924e5a5a436SSepherosa Ziehau #endif 925e5a5a436SSepherosa Ziehau u_int8_t re_link_chg_det; 926e5a5a436SSepherosa Ziehau struct mtx mtx; 927e5a5a436SSepherosa Ziehau bus_dma_tag_t re_parent_tag; 928e5a5a436SSepherosa Ziehau device_t dev; 929e5a5a436SSepherosa Ziehau int re_expcap; 930e5a5a436SSepherosa Ziehau int max_jumbo_frame_size; 931e5a5a436SSepherosa Ziehau int re_rx_mbuf_sz; 932e5a5a436SSepherosa Ziehau int re_rx_desc_buf_sz; 933e5a5a436SSepherosa Ziehau int re_if_flags; 934e5a5a436SSepherosa Ziehau int re_tx_cstag; 935e5a5a436SSepherosa Ziehau int re_rx_cstag; 936e5a5a436SSepherosa Ziehau int suspended; /* 0 = normal 1 = suspended */ 937e5a5a436SSepherosa Ziehau 938e5a5a436SSepherosa Ziehau u_int8_t RequireAdcBiasPatch; 939e5a5a436SSepherosa Ziehau u_int16_t AdcBiasPatchIoffset; 940e5a5a436SSepherosa Ziehau 941e5a5a436SSepherosa Ziehau u_int8_t RequireAdjustUpsTxLinkPulseTiming; 942e5a5a436SSepherosa Ziehau u_int16_t SwrCnt1msIni; 943e6e07291SSepherosa Ziehau 944e6e07291SSepherosa Ziehau u_int8_t RequiredSecLanDonglePatch; 945e6e07291SSepherosa Ziehau 94680492964SSepherosa Ziehau u_int8_t RequirePhyMdiSwapPatch; 94780492964SSepherosa Ziehau 948e6e07291SSepherosa Ziehau u_int8_t re_efuse_ver; 949e6e07291SSepherosa Ziehau 950e6e07291SSepherosa Ziehau u_int16_t re_sw_ram_code_ver; 951e6e07291SSepherosa Ziehau u_int16_t re_hw_ram_code_ver; 952e5a5a436SSepherosa Ziehau #if OS_VER>=VERSION(7,0) 953e5a5a436SSepherosa Ziehau struct task re_inttask; 954e5a5a436SSepherosa Ziehau #endif 955e5a5a436SSepherosa Ziehau u_int16_t cur_page; 956e5a5a436SSepherosa Ziehau 95780492964SSepherosa Ziehau u_int16_t phy_reg_anlpar; 95880492964SSepherosa Ziehau 959e5a5a436SSepherosa Ziehau u_int8_t re_hw_enable_msi_msix; 960e5a5a436SSepherosa Ziehau 961e5a5a436SSepherosa Ziehau u_int8_t re_coalesce_tx_pkt; 962e5a5a436SSepherosa Ziehau 963e5a5a436SSepherosa Ziehau u_int8_t link_state; 964e5a5a436SSepherosa Ziehau 965e5a5a436SSepherosa Ziehau u_int8_t prohibit_access_reg; 966e5a5a436SSepherosa Ziehau 967e5a5a436SSepherosa Ziehau u_int8_t re_hw_supp_now_is_oob_ver; 968e6e07291SSepherosa Ziehau 96980492964SSepherosa Ziehau u_int8_t hw_hw_supp_serdes_phy_ver; 97080492964SSepherosa Ziehau 971e6e07291SSepherosa Ziehau u_int8_t HwSuppDashVer; 972e6e07291SSepherosa Ziehau u_int8_t re_dash; 973e6e07291SSepherosa Ziehau bus_space_handle_t re_mapped_cmac_handle; /* bus space tag */ 974e6e07291SSepherosa Ziehau bus_space_tag_t re_mapped_cmac_tag; /* bus space tag */ 975e6e07291SSepherosa Ziehau bus_space_handle_t re_cmac_handle; /* bus space handle */ 976e6e07291SSepherosa Ziehau bus_space_tag_t re_cmac_tag; /* bus space tag */ 977e6e07291SSepherosa Ziehau u_int8_t HwPkgDet; 97880492964SSepherosa Ziehau 97980492964SSepherosa Ziehau u_int32_t HwFiberModeVer; 98080492964SSepherosa Ziehau u_int32_t HwFiberStat; 98180492964SSepherosa Ziehau 98280492964SSepherosa Ziehau int (*ifmedia_upd)(struct ifnet *); 98380492964SSepherosa Ziehau void (*ifmedia_sts)(struct ifnet *, struct ifmediareq *); 98480492964SSepherosa Ziehau #if OS_VER < VERSION(7,0) 98580492964SSepherosa Ziehau void (*intr)(void *); 98680492964SSepherosa Ziehau #else 98780492964SSepherosa Ziehau int (*intr)(void *); 98880492964SSepherosa Ziehau #endif //OS_VER < VERSION(7,0) 98980492964SSepherosa Ziehau void (*int_task)(void *, int); 99080492964SSepherosa Ziehau void (*hw_start_unlock)(struct re_softc *); 991e5a5a436SSepherosa Ziehau }; 992e5a5a436SSepherosa Ziehau #endif /* !__DragonFly__ */ 993e5a5a436SSepherosa Ziehau 994e5a5a436SSepherosa Ziehau enum bits { 995e5a5a436SSepherosa Ziehau BIT_0 = (1 << 0), 996e5a5a436SSepherosa Ziehau BIT_1 = (1 << 1), 997e5a5a436SSepherosa Ziehau BIT_2 = (1 << 2), 998e5a5a436SSepherosa Ziehau BIT_3 = (1 << 3), 999e5a5a436SSepherosa Ziehau BIT_4 = (1 << 4), 1000e5a5a436SSepherosa Ziehau BIT_5 = (1 << 5), 1001e5a5a436SSepherosa Ziehau BIT_6 = (1 << 6), 1002e5a5a436SSepherosa Ziehau BIT_7 = (1 << 7), 1003e5a5a436SSepherosa Ziehau BIT_8 = (1 << 8), 1004e5a5a436SSepherosa Ziehau BIT_9 = (1 << 9), 1005e5a5a436SSepherosa Ziehau BIT_10 = (1 << 10), 1006e5a5a436SSepherosa Ziehau BIT_11 = (1 << 11), 1007e5a5a436SSepherosa Ziehau BIT_12 = (1 << 12), 1008e5a5a436SSepherosa Ziehau BIT_13 = (1 << 13), 1009e5a5a436SSepherosa Ziehau BIT_14 = (1 << 14), 1010e5a5a436SSepherosa Ziehau BIT_15 = (1 << 15), 1011e5a5a436SSepherosa Ziehau BIT_16 = (1 << 16), 1012e5a5a436SSepherosa Ziehau BIT_17 = (1 << 17), 1013e5a5a436SSepherosa Ziehau BIT_18 = (1 << 18), 1014e5a5a436SSepherosa Ziehau BIT_19 = (1 << 19), 1015e5a5a436SSepherosa Ziehau BIT_20 = (1 << 20), 1016e5a5a436SSepherosa Ziehau BIT_21 = (1 << 21), 1017e5a5a436SSepherosa Ziehau BIT_22 = (1 << 22), 1018e5a5a436SSepherosa Ziehau BIT_23 = (1 << 23), 1019e5a5a436SSepherosa Ziehau BIT_24 = (1 << 24), 1020e5a5a436SSepherosa Ziehau BIT_25 = (1 << 25), 1021e5a5a436SSepherosa Ziehau BIT_26 = (1 << 26), 1022e5a5a436SSepherosa Ziehau BIT_27 = (1 << 27), 1023e5a5a436SSepherosa Ziehau BIT_28 = (1 << 28), 1024e5a5a436SSepherosa Ziehau BIT_29 = (1 << 29), 1025e5a5a436SSepherosa Ziehau BIT_30 = (1 << 30), 1026e5a5a436SSepherosa Ziehau BIT_31 = (1 << 31) 1027e5a5a436SSepherosa Ziehau }; 1028e5a5a436SSepherosa Ziehau 1029e5a5a436SSepherosa Ziehau #ifndef __DragonFly__ 1030e5a5a436SSepherosa Ziehau #define RE_LOCK(_sc) mtx_lock(&(_sc)->mtx) 1031e5a5a436SSepherosa Ziehau #define RE_UNLOCK(_sc) mtx_unlock(&(_sc)->mtx) 1032e5a5a436SSepherosa Ziehau #define RE_LOCK_INIT(_sc,_name) mtx_init(&(_sc)->mtx,_name,MTX_NETWORK_LOCK,MTX_DEF) 1033e5a5a436SSepherosa Ziehau #define RE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->mtx) 1034e5a5a436SSepherosa Ziehau #define RE_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->mtx,MA_OWNED) 1035e5a5a436SSepherosa Ziehau 1036e5a5a436SSepherosa Ziehau /* 1037e5a5a436SSepherosa Ziehau * register space access macros 1038e5a5a436SSepherosa Ziehau */ 1039e5a5a436SSepherosa Ziehau #if OS_VER>VERSION(5,9) 1040e5a5a436SSepherosa Ziehau #define CSR_WRITE_STREAM_4(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_stream_4(sc->re_btag, sc->re_bhandle, reg, val)) 1041e5a5a436SSepherosa Ziehau #define CSR_WRITE_STREAM_2(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_stream_2(sc->re_btag, sc->re_bhandle, reg, val)) 1042e5a5a436SSepherosa Ziehau #endif 1043e5a5a436SSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_4(sc->re_btag, sc->re_bhandle, reg, val)) 1044e5a5a436SSepherosa Ziehau #define CSR_WRITE_2(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_2(sc->re_btag, sc->re_bhandle, reg, val)) 1045e5a5a436SSepherosa Ziehau #define CSR_WRITE_1(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_1(sc->re_btag, sc->re_bhandle, reg, val)) 1046e5a5a436SSepherosa Ziehau 1047e5a5a436SSepherosa Ziehau #define CSR_READ_4(sc, reg) ((sc->prohibit_access_reg)?0xFFFFFFFF:bus_space_read_4(sc->re_btag, sc->re_bhandle, reg)) 1048e5a5a436SSepherosa Ziehau #define CSR_READ_2(sc, reg) ((sc->prohibit_access_reg)?0xFFFF:bus_space_read_2(sc->re_btag, sc->re_bhandle, reg)) 1049e5a5a436SSepherosa Ziehau #define CSR_READ_1(sc, reg) ((sc->prohibit_access_reg)?0xFF:bus_space_read_1(sc->re_btag, sc->re_bhandle, reg)) 1050e6e07291SSepherosa Ziehau 1051e6e07291SSepherosa Ziehau /* cmac write/read MMIO register */ 1052e6e07291SSepherosa Ziehau #define RE_CMAC_WRITE_1(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_1(sc->re_cmac_tag, sc->re_cmac_handle, reg, val)) 1053e6e07291SSepherosa Ziehau #define RE_CMAC_WRITE_2(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_2(sc->re_cmac_tag, sc->re_cmac_handle, reg, val)) 1054e6e07291SSepherosa Ziehau #define RE_CMAC_WRITE_4(sc, reg, val) ((sc->prohibit_access_reg)?:bus_space_write_4(sc->re_cmac_tag, sc->re_cmac_handle, reg, val)) 1055e6e07291SSepherosa Ziehau #define RE_CMAC_READ_1(sc, reg) ((sc->prohibit_access_reg)?0xFF:bus_space_read_1(sc->re_cmac_tag, sc->re_cmac_handle, reg)) 1056e6e07291SSepherosa Ziehau #define RE_CMAC_READ_2(sc, reg) ((sc->prohibit_access_reg)?0xFFFF:bus_space_read_2(sc->re_cmac_tag, sc->re_cmac_handle, reg)) 1057e6e07291SSepherosa Ziehau #define RE_CMAC_READ_4(sc, reg) (sc->prohibit_access_reg)?0xFFFFFFFF:bus_space_read_4(sc->re_cmac_tag, sc->re_cmac_handle, reg)) 1058e5a5a436SSepherosa Ziehau #endif /* !__DragonFly__ */ 1059e5a5a436SSepherosa Ziehau 1060e5a5a436SSepherosa Ziehau #define RE_TIMEOUT 1000 1061e5a5a436SSepherosa Ziehau 1062e5a5a436SSepherosa Ziehau /* 1063e5a5a436SSepherosa Ziehau * General constants that are fun to know. 1064e5a5a436SSepherosa Ziehau * 1065e5a5a436SSepherosa Ziehau * RealTek PCI vendor ID 1066e5a5a436SSepherosa Ziehau */ 1067e5a5a436SSepherosa Ziehau #define RT_VENDORID 0x10EC 1068e5a5a436SSepherosa Ziehau 1069e5a5a436SSepherosa Ziehau /* 1070e5a5a436SSepherosa Ziehau * RealTek chip device IDs. 1071e5a5a436SSepherosa Ziehau */ 1072e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8129 0x8129 1073e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8139 0x8139 1074e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8169 0x8169 /* For RTL8169 */ 1075e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8169SC 0x8167 /* For RTL8169SC */ 1076e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8168 0x8168 /* For RTL8168B */ 1077e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8161 0x8161 /* For RTL8168 Series add-on card */ 1078e5a5a436SSepherosa Ziehau #define RT_DEVICEID_8136 0x8136 /* For RTL8101E */ 107980492964SSepherosa Ziehau #define RT_DEVICEID_8125 0x8125 /* For RTL8125 */ 1080*bf80ef97SShingy Shabooya #define RT_DEVICEID_2600 0x2600 /* For E2600 Killer Ethernet */ 1081e5a5a436SSepherosa Ziehau 1082e5a5a436SSepherosa Ziehau /* 1083e5a5a436SSepherosa Ziehau * Accton PCI vendor ID 1084e5a5a436SSepherosa Ziehau */ 1085e5a5a436SSepherosa Ziehau #define ACCTON_VENDORID 0x1113 1086e5a5a436SSepherosa Ziehau 1087e5a5a436SSepherosa Ziehau /* 1088e5a5a436SSepherosa Ziehau * Accton MPX 5030/5038 device ID. 1089e5a5a436SSepherosa Ziehau */ 1090e5a5a436SSepherosa Ziehau #define ACCTON_DEVICEID_5030 0x1211 1091e5a5a436SSepherosa Ziehau 1092e5a5a436SSepherosa Ziehau /* 1093e5a5a436SSepherosa Ziehau * Delta Electronics Vendor ID. 1094e5a5a436SSepherosa Ziehau */ 1095e5a5a436SSepherosa Ziehau #define DELTA_VENDORID 0x1500 1096e5a5a436SSepherosa Ziehau 1097e5a5a436SSepherosa Ziehau /* 1098e5a5a436SSepherosa Ziehau * Delta device IDs. 1099e5a5a436SSepherosa Ziehau */ 1100e5a5a436SSepherosa Ziehau #define DELTA_DEVICEID_8139 0x1360 1101e5a5a436SSepherosa Ziehau 1102e5a5a436SSepherosa Ziehau /* 1103e5a5a436SSepherosa Ziehau * Addtron vendor ID. 1104e5a5a436SSepherosa Ziehau */ 1105e5a5a436SSepherosa Ziehau #define ADDTRON_VENDORID 0x4033 1106e5a5a436SSepherosa Ziehau 1107e5a5a436SSepherosa Ziehau /* 1108e5a5a436SSepherosa Ziehau * Addtron device IDs. 1109e5a5a436SSepherosa Ziehau */ 1110e5a5a436SSepherosa Ziehau #define ADDTRON_DEVICEID_8139 0x1360 1111e5a5a436SSepherosa Ziehau 1112e5a5a436SSepherosa Ziehau /* 1113e5a5a436SSepherosa Ziehau * D-Link vendor ID. 1114e5a5a436SSepherosa Ziehau */ 1115e5a5a436SSepherosa Ziehau #define DLINK_VENDORID 0x1186 1116e5a5a436SSepherosa Ziehau 1117e5a5a436SSepherosa Ziehau /* 1118e5a5a436SSepherosa Ziehau * D-Link DFE-530TX+ device ID 1119e5a5a436SSepherosa Ziehau */ 1120e5a5a436SSepherosa Ziehau #define DLINK_DEVICEID_530TXPLUS 0x1300 1121e5a5a436SSepherosa Ziehau 1122e5a5a436SSepherosa Ziehau /* 1123e5a5a436SSepherosa Ziehau * PCI low memory base and low I/O base register, and 1124e5a5a436SSepherosa Ziehau * other PCI registers. 1125e5a5a436SSepherosa Ziehau */ 1126e5a5a436SSepherosa Ziehau 1127e5a5a436SSepherosa Ziehau #define RE_PCI_VENDOR_ID 0x00 1128e5a5a436SSepherosa Ziehau #define RE_PCI_DEVICE_ID 0x02 1129e5a5a436SSepherosa Ziehau #define RE_PCI_COMMAND 0x04 1130e5a5a436SSepherosa Ziehau #define RE_PCI_STATUS 0x06 1131e5a5a436SSepherosa Ziehau #define RE_PCI_REVISION_ID 0x08 /* 8 bits */ 1132e5a5a436SSepherosa Ziehau #define RE_PCI_CLASSCODE 0x09 1133e5a5a436SSepherosa Ziehau #define RE_PCI_LATENCY_TIMER 0x0D 1134e5a5a436SSepherosa Ziehau #define RE_PCI_HEADER_TYPE 0x0E 1135e5a5a436SSepherosa Ziehau #define RE_PCI_BIOSROM 0x30 1136e5a5a436SSepherosa Ziehau #define RE_PCI_INTLINE 0x3C 1137e5a5a436SSepherosa Ziehau #define RE_PCI_INTPIN 0x3D 1138e5a5a436SSepherosa Ziehau #define RE_PCI_MINGNT 0x3E 1139e5a5a436SSepherosa Ziehau #define RE_PCI_MINLAT 0x0F 1140e5a5a436SSepherosa Ziehau #define RE_PCI_RESETOPT 0x48 1141e5a5a436SSepherosa Ziehau #define RE_PCI_EEPROM_DATA 0x4C 1142e5a5a436SSepherosa Ziehau 1143e5a5a436SSepherosa Ziehau #define RE_PCI_CAPID 0x50 /* 8 bits */ 1144e5a5a436SSepherosa Ziehau #define RE_PCI_NEXTPTR 0x51 /* 8 bits */ 1145e5a5a436SSepherosa Ziehau #define RE_PCI_PWRMGMTCAP 0x52 /* 16 bits */ 1146e5a5a436SSepherosa Ziehau #define RE_PCI_PWRMGMTCTRL 0x54 /* 16 bits */ 1147e5a5a436SSepherosa Ziehau 1148e5a5a436SSepherosa Ziehau #define RE_PSTATE_MASK 0x0003 1149e5a5a436SSepherosa Ziehau #define RE_PSTATE_D0 0x0000 1150e5a5a436SSepherosa Ziehau #define RE_PSTATE_D1 0x0002 1151e5a5a436SSepherosa Ziehau #define RE_PSTATE_D2 0x0002 1152e5a5a436SSepherosa Ziehau #define RE_PSTATE_D3 0x0003 1153e5a5a436SSepherosa Ziehau #define RE_PME_EN 0x0010 1154e5a5a436SSepherosa Ziehau #define RE_PME_STATUS 0x8000 1155e5a5a436SSepherosa Ziehau 1156e5a5a436SSepherosa Ziehau #define RE_WOL_LINK_SPEED_10M_FIRST ( 0 ) 1157e5a5a436SSepherosa Ziehau #define RE_WOL_LINK_SPEED_100M_FIRST ( 1 ) 1158e5a5a436SSepherosa Ziehau 115980492964SSepherosa Ziehau #define RTK_ADVERTISE_2500FULL 0x80 116080492964SSepherosa Ziehau 1161e6e07291SSepherosa Ziehau //Ram Code Version 1162e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168E (0x0057) 1163e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168EVL (0x0055) 1164e0c32883SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168F (0x0052) 1165e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8411 (0x0044) 1166e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168G (0x0042) 1167e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168GU (0x0001) 1168e0c32883SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168EP (0x0019) 1169e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8411B (0x0012) 1170e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168H (0x0018) 1171e6e07291SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8168FP (0x0003) 117280492964SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8125A_REV_A (0x0B11) 117380492964SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8125A_REV_B (0x0B33) 117480492964SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8125B_REV_A (0x0B17) 117580492964SSepherosa Ziehau #define NIC_RAMCODE_VERSION_8125B_REV_B (0x0B36) 1176e6e07291SSepherosa Ziehau 1177e5a5a436SSepherosa Ziehau #ifdef __alpha__ 1178e5a5a436SSepherosa Ziehau #undef vtophys 1179e5a5a436SSepherosa Ziehau #define vtophys(va) alpha_XXX_dmamap((vm_offset_t)va) 1180e5a5a436SSepherosa Ziehau #endif 1181e5a5a436SSepherosa Ziehau 1182e5a5a436SSepherosa Ziehau #ifndef TRUE 1183e5a5a436SSepherosa Ziehau #define TRUE 1 1184e5a5a436SSepherosa Ziehau #endif 1185e5a5a436SSepherosa Ziehau #ifndef FALSE 1186e5a5a436SSepherosa Ziehau #define FALSE 0 1187e5a5a436SSepherosa Ziehau #endif 1188e5a5a436SSepherosa Ziehau 1189e5a5a436SSepherosa Ziehau #define PHYAR_Flag 0x80000000 1190e5a5a436SSepherosa Ziehau #define RE_CPlusMode 0x20 /* In Revision ID */ 1191e5a5a436SSepherosa Ziehau 1192e5a5a436SSepherosa Ziehau /* interrupt service routine loop time*/ 1193e5a5a436SSepherosa Ziehau /* the minimum value is 1 */ 1194e5a5a436SSepherosa Ziehau #define INTR_MAX_LOOP 1 1195e5a5a436SSepherosa Ziehau 1196e6e07291SSepherosa Ziehau #define RE_REGS_SIZE (256) 1197e6e07291SSepherosa Ziehau 1198e6e07291SSepherosa Ziehau #define RTL8168FP_OOBMAC_BASE 0xBAF70000 1199e6e07291SSepherosa Ziehau #define HW_DASH_SUPPORT_DASH(_M) ((_M)->HwSuppDashVer > 0 ) 1200e6e07291SSepherosa Ziehau #define HW_DASH_SUPPORT_TYPE_1(_M) ((_M)->HwSuppDashVer == 1 ) 1201e6e07291SSepherosa Ziehau #define HW_DASH_SUPPORT_TYPE_2(_M) ((_M)->HwSuppDashVer == 2 ) 1202e6e07291SSepherosa Ziehau #define HW_DASH_SUPPORT_TYPE_3(_M) ((_M)->HwSuppDashVer == 3 ) 1203e6e07291SSepherosa Ziehau 120480492964SSepherosa Ziehau #define HW_SUPP_SERDES_PHY(_M) ((_M)->hw_hw_supp_serdes_phy_ver > 0) 120580492964SSepherosa Ziehau 1206e5a5a436SSepherosa Ziehau /*#define RE_DBG*/ 1207e5a5a436SSepherosa Ziehau 1208e5a5a436SSepherosa Ziehau #ifdef RE_DBG 1209e5a5a436SSepherosa Ziehau #define DBGPRINT(_unit, _msg) printf ("re%d: %s\n", _unit,_msg) 1210e5a5a436SSepherosa Ziehau #define DBGPRINT1(_unit, _msg, _para1) \ 1211e5a5a436SSepherosa Ziehau { \ 1212e5a5a436SSepherosa Ziehau char buf[100]; \ 1213e5a5a436SSepherosa Ziehau sprintf(buf,_msg,_para1); \ 1214e5a5a436SSepherosa Ziehau printf ("re%d: %s\n", _unit,buf); \ 1215e5a5a436SSepherosa Ziehau } 1216e5a5a436SSepherosa Ziehau #else 1217e5a5a436SSepherosa Ziehau #define DBGPRINT(_unit, _msg) 1218e5a5a436SSepherosa Ziehau #define DBGPRINT1(_unit, _msg, _para1) 1219e5a5a436SSepherosa Ziehau #endif 1220e5a5a436SSepherosa Ziehau 1221e5a5a436SSepherosa Ziehau #ifndef __DragonFly__ 1222e5a5a436SSepherosa Ziehau #if OS_VER<VERSION(4,9) 1223e5a5a436SSepherosa Ziehau #define IFM_1000_T IFM_1000_TX 1224e5a5a436SSepherosa Ziehau #elif OS_VER<VERSION(6,0) 1225e5a5a436SSepherosa Ziehau #define RE_GET_IFNET(SC) &SC->arpcom.ac_if 1226e5a5a436SSepherosa Ziehau #define if_drv_flags if_flags 1227e5a5a436SSepherosa Ziehau #define IFF_DRV_RUNNING IFF_RUNNING 1228e5a5a436SSepherosa Ziehau #define IFF_DRV_OACTIVE IFF_OACTIVE 1229e5a5a436SSepherosa Ziehau #else 1230e5a5a436SSepherosa Ziehau #define RE_GET_IFNET(SC) SC->re_ifp 1231e5a5a436SSepherosa Ziehau #endif 1232e5a5a436SSepherosa Ziehau 1233e5a5a436SSepherosa Ziehau #if OS_VER>=VERSION(10,0) 1234e5a5a436SSepherosa Ziehau #define IF_ADDR_LOCK IF_ADDR_WLOCK 1235e5a5a436SSepherosa Ziehau #define IF_ADDR_UNLOCK IF_ADDR_WUNLOCK 1236e5a5a436SSepherosa Ziehau #endif 1237e5a5a436SSepherosa Ziehau 1238e5a5a436SSepherosa Ziehau #if OS_VER>=VERSION(7,4) 1239e5a5a436SSepherosa Ziehau #if OS_VER>=VERSION(9,2) 1240e5a5a436SSepherosa Ziehau #define RE_PCIEM_LINK_CAP_ASPM PCIEM_LINK_CAP_ASPM 1241e5a5a436SSepherosa Ziehau #define RE_PCIER_LINK_CTL PCIER_LINK_CTL 1242e5a5a436SSepherosa Ziehau #define RE_PCIER_LINK_CAP PCIER_LINK_CAP 1243e5a5a436SSepherosa Ziehau #else //OS_VER>=VERSION(9,2) 1244e5a5a436SSepherosa Ziehau #define RE_PCIEM_LINK_CAP_ASPM PCIM_LINK_CAP_ASPM 1245e5a5a436SSepherosa Ziehau #define RE_PCIER_LINK_CTL PCIR_EXPRESS_LINK_CTL 1246e5a5a436SSepherosa Ziehau #define RE_PCIER_LINK_CAP PCIR_EXPRESS_LINK_CAP 1247e5a5a436SSepherosa Ziehau #endif 1248e5a5a436SSepherosa Ziehau #endif //OS_VER>=VERSION(7,4) 124980492964SSepherosa Ziehau 125080492964SSepherosa Ziehau #ifndef IFM_2500_X 125180492964SSepherosa Ziehau #define IFM_2500_X IFM_X(63) 125280492964SSepherosa Ziehau #endif 125380492964SSepherosa Ziehau 1254e5a5a436SSepherosa Ziehau #endif /* !__DragonFly__ */ 125580492964SSepherosa Ziehau 125680492964SSepherosa Ziehau #ifndef ARRAY_SIZE 125780492964SSepherosa Ziehau #define ARRAY_SIZE(_a) (sizeof((_a)) / sizeof((_a)[0])) 125880492964SSepherosa Ziehau #endif 1259