xref: /dflybsd-src/sys/dev/netif/re/re.h (revision bf80ef972c3e267b7100867e40580197a2f7e43b)
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