xref: /freebsd/sys/dev/nfe/if_nfereg.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1bfc788c2SDavid E. O'Brien /*	$OpenBSD: if_nfereg.h,v 1.16 2006/02/22 19:23:44 damien Exp $	*/
2257c5577SDavid E. O'Brien 
3257c5577SDavid E. O'Brien /*-
4257c5577SDavid E. O'Brien  * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org>
5257c5577SDavid E. O'Brien  *
6257c5577SDavid E. O'Brien  * Permission to use, copy, modify, and distribute this software for any
7257c5577SDavid E. O'Brien  * purpose with or without fee is hereby granted, provided that the above
8257c5577SDavid E. O'Brien  * copyright notice and this permission notice appear in all copies.
9257c5577SDavid E. O'Brien  *
10257c5577SDavid E. O'Brien  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11257c5577SDavid E. O'Brien  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12257c5577SDavid E. O'Brien  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13257c5577SDavid E. O'Brien  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14257c5577SDavid E. O'Brien  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15257c5577SDavid E. O'Brien  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16257c5577SDavid E. O'Brien  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17257c5577SDavid E. O'Brien  */
18257c5577SDavid E. O'Brien 
19aab5582fSPyun YongHyeon #define	NFE_RX_RING_COUNT	256
20aab5582fSPyun YongHyeon #define	NFE_JUMBO_RX_RING_COUNT	NFE_RX_RING_COUNT
21257c5577SDavid E. O'Brien #define	NFE_TX_RING_COUNT	256
22257c5577SDavid E. O'Brien 
23aab5582fSPyun YongHyeon #define	NFE_PROC_DEFAULT	((NFE_RX_RING_COUNT * 3) / 4)
24aab5582fSPyun YongHyeon #define	NFE_PROC_MIN		50
25aab5582fSPyun YongHyeon #define	NFE_PROC_MAX		(NFE_RX_RING_COUNT - 1)
26aab5582fSPyun YongHyeon 
27aab5582fSPyun YongHyeon #define	NFE_INC(x, y)	(x) = ((x) + 1) % y
28aab5582fSPyun YongHyeon 
296124fe21SDavid E. O'Brien /* RX/TX MAC addr + type + VLAN + align + slack */
306124fe21SDavid E. O'Brien #define	NFE_RX_HEADERS		64
316124fe21SDavid E. O'Brien 
326124fe21SDavid E. O'Brien /* Maximum MTU size. */
336124fe21SDavid E. O'Brien #define	NV_PKTLIMIT_1		ETH_DATA_LEN	/* Hard limit not known. */
346124fe21SDavid E. O'Brien #define	NV_PKTLIMIT_2		9100 /* Actual limit according to NVidia:9202 */
35257c5577SDavid E. O'Brien 
36aab5582fSPyun YongHyeon #define	NFE_JUMBO_FRAMELEN	NV_PKTLIMIT_2
37aab5582fSPyun YongHyeon #define	NFE_JUMBO_MTU		\
38aab5582fSPyun YongHyeon 	(NFE_JUMBO_FRAMELEN - NFE_RX_HEADERS)
39aab5582fSPyun YongHyeon #define	NFE_MIN_FRAMELEN	(ETHER_MIN_LEN - ETHER_CRC_LEN)
40aab5582fSPyun YongHyeon 
4152ee8ac0SPyun YongHyeon #define	NFE_MAX_SCATTER		35
421c889016SPyun YongHyeon #define	NFE_TSO_MAXSGSIZE	4096
43a272ea16SPyun YongHyeon #define	NFE_TSO_MAXSIZE		(65535 + sizeof(struct ether_vlan_header))
44257c5577SDavid E. O'Brien 
45257c5577SDavid E. O'Brien #define	NFE_IRQ_STATUS		0x000
46257c5577SDavid E. O'Brien #define	NFE_IRQ_MASK		0x004
47257c5577SDavid E. O'Brien #define	NFE_SETUP_R6		0x008
48257c5577SDavid E. O'Brien #define	NFE_IMTIMER		0x00c
49aab5582fSPyun YongHyeon #define	NFE_MSI_MAP0		0x020
50aab5582fSPyun YongHyeon #define	NFE_MSI_MAP1		0x024
51aab5582fSPyun YongHyeon #define	NFE_MSI_IRQ_MASK	0x030
52aab5582fSPyun YongHyeon #define	NFE_MAC_RESET		0x03c
53257c5577SDavid E. O'Brien #define	NFE_MISC1		0x080
54257c5577SDavid E. O'Brien #define	NFE_TX_CTL		0x084
55257c5577SDavid E. O'Brien #define	NFE_TX_STATUS		0x088
56257c5577SDavid E. O'Brien #define	NFE_RXFILTER		0x08c
57257c5577SDavid E. O'Brien #define	NFE_RXBUFSZ		0x090
58257c5577SDavid E. O'Brien #define	NFE_RX_CTL		0x094
59257c5577SDavid E. O'Brien #define	NFE_RX_STATUS		0x098
60257c5577SDavid E. O'Brien #define	NFE_RNDSEED		0x09c
61257c5577SDavid E. O'Brien #define	NFE_SETUP_R1		0x0a0
62257c5577SDavid E. O'Brien #define	NFE_SETUP_R2		0x0a4
63257c5577SDavid E. O'Brien #define	NFE_MACADDR_HI		0x0a8
64257c5577SDavid E. O'Brien #define	NFE_MACADDR_LO		0x0ac
65257c5577SDavid E. O'Brien #define	NFE_MULTIADDR_HI	0x0b0
66257c5577SDavid E. O'Brien #define	NFE_MULTIADDR_LO	0x0b4
67257c5577SDavid E. O'Brien #define	NFE_MULTIMASK_HI	0x0b8
68257c5577SDavid E. O'Brien #define	NFE_MULTIMASK_LO	0x0bc
69257c5577SDavid E. O'Brien #define	NFE_PHY_IFACE		0x0c0
70257c5577SDavid E. O'Brien #define	NFE_TX_RING_ADDR_LO	0x100
71257c5577SDavid E. O'Brien #define	NFE_RX_RING_ADDR_LO	0x104
72257c5577SDavid E. O'Brien #define	NFE_RING_SIZE		0x108
73257c5577SDavid E. O'Brien #define	NFE_TX_UNK		0x10c
74257c5577SDavid E. O'Brien #define	NFE_LINKSPEED		0x110
75257c5577SDavid E. O'Brien #define	NFE_SETUP_R5		0x130
76257c5577SDavid E. O'Brien #define	NFE_SETUP_R3		0x13C
77257c5577SDavid E. O'Brien #define	NFE_SETUP_R7		0x140
78257c5577SDavid E. O'Brien #define	NFE_RXTX_CTL		0x144
79257c5577SDavid E. O'Brien #define	NFE_TX_RING_ADDR_HI	0x148
80257c5577SDavid E. O'Brien #define	NFE_RX_RING_ADDR_HI	0x14c
81aab5582fSPyun YongHyeon #define	NFE_TX_PAUSE_FRAME	0x170
82257c5577SDavid E. O'Brien #define	NFE_PHY_STATUS		0x180
83257c5577SDavid E. O'Brien #define	NFE_SETUP_R4		0x184
84257c5577SDavid E. O'Brien #define	NFE_STATUS		0x188
85257c5577SDavid E. O'Brien #define	NFE_PHY_SPEED		0x18c
86257c5577SDavid E. O'Brien #define	NFE_PHY_CTL		0x190
87257c5577SDavid E. O'Brien #define	NFE_PHY_DATA		0x194
8817d022beSPyun YongHyeon #define	NFE_TX_UNICAST		0x1a0
8917d022beSPyun YongHyeon #define	NFE_TX_MULTICAST	0x1a4
9017d022beSPyun YongHyeon #define	NFE_TX_BROADCAST	0x1a8
91257c5577SDavid E. O'Brien #define	NFE_WOL_CTL		0x200
92257c5577SDavid E. O'Brien #define	NFE_PATTERN_CRC		0x204
93257c5577SDavid E. O'Brien #define	NFE_PATTERN_MASK	0x208
94257c5577SDavid E. O'Brien #define	NFE_PWR_CAP		0x268
95257c5577SDavid E. O'Brien #define	NFE_PWR_STATE		0x26c
9617d022beSPyun YongHyeon #define	NFE_TX_OCTET		0x280
9717d022beSPyun YongHyeon #define	NFE_TX_ZERO_REXMIT	0x284
9817d022beSPyun YongHyeon #define	NFE_TX_ONE_REXMIT	0x288
9917d022beSPyun YongHyeon #define	NFE_TX_MULTI_REXMIT	0x28c
10017d022beSPyun YongHyeon #define	NFE_TX_LATE_COL		0x290
10117d022beSPyun YongHyeon #define	NFE_TX_FIFO_UNDERUN	0x294
10217d022beSPyun YongHyeon #define	NFE_TX_CARRIER_LOST	0x298
10317d022beSPyun YongHyeon #define	NFE_TX_EXCESS_DEFERRAL	0x29c
10417d022beSPyun YongHyeon #define	NFE_TX_RETRY_ERROR	0x2a0
10517d022beSPyun YongHyeon #define	NFE_RX_FRAME_ERROR	0x2a4
10617d022beSPyun YongHyeon #define	NFE_RX_EXTRA_BYTES	0x2a8
10717d022beSPyun YongHyeon #define	NFE_RX_LATE_COL		0x2ac
10817d022beSPyun YongHyeon #define	NFE_RX_RUNT		0x2b0
10917d022beSPyun YongHyeon #define	NFE_RX_JUMBO		0x2b4
11017d022beSPyun YongHyeon #define	NFE_RX_FIFO_OVERUN	0x2b8
11117d022beSPyun YongHyeon #define	NFE_RX_CRC_ERROR	0x2bc
11217d022beSPyun YongHyeon #define	NFE_RX_FAE		0x2c0
11317d022beSPyun YongHyeon #define	NFE_RX_LEN_ERROR	0x2c4
11417d022beSPyun YongHyeon #define	NFE_RX_UNICAST		0x2c8
11517d022beSPyun YongHyeon #define	NFE_RX_MULTICAST	0x2cc
11617d022beSPyun YongHyeon #define	NFE_RX_BROADCAST	0x2d0
11717d022beSPyun YongHyeon #define	NFE_TX_DEFERAL		0x2d4
11817d022beSPyun YongHyeon #define	NFE_TX_FRAME		0x2d8
11917d022beSPyun YongHyeon #define	NFE_RX_OCTET		0x2dc
12017d022beSPyun YongHyeon #define	NFE_TX_PAUSE		0x2e0
12117d022beSPyun YongHyeon #define	NFE_RX_PAUSE		0x2e4
12217d022beSPyun YongHyeon #define	NFE_RX_DROP		0x2e8
123257c5577SDavid E. O'Brien #define	NFE_VTAG_CTL		0x300
124aab5582fSPyun YongHyeon #define	NFE_MSIX_MAP0		0x3e0
125aab5582fSPyun YongHyeon #define	NFE_MSIX_MAP1		0x3e4
126aab5582fSPyun YongHyeon #define	NFE_MSIX_IRQ_STATUS	0x3f0
127aab5582fSPyun YongHyeon #define	NFE_PWR2_CTL		0x600
128aab5582fSPyun YongHyeon 
129aab5582fSPyun YongHyeon #define	NFE_MAC_RESET_MAGIC	0x00f3
130aab5582fSPyun YongHyeon 
131aab5582fSPyun YongHyeon #define	NFE_MAC_ADDR_INORDER	0x8000
132257c5577SDavid E. O'Brien 
133257c5577SDavid E. O'Brien #define	NFE_PHY_ERROR		0x00001
134257c5577SDavid E. O'Brien #define	NFE_PHY_WRITE		0x00400
135257c5577SDavid E. O'Brien #define	NFE_PHY_BUSY		0x08000
136257c5577SDavid E. O'Brien #define	NFE_PHYADD_SHIFT	5
137257c5577SDavid E. O'Brien 
138257c5577SDavid E. O'Brien #define	NFE_STATUS_MAGIC	0x140000
139257c5577SDavid E. O'Brien 
140aab5582fSPyun YongHyeon #define	NFE_R1_MAGIC_1000	0x14050f
141aab5582fSPyun YongHyeon #define	NFE_R1_MAGIC_10_100	0x16070f
142aab5582fSPyun YongHyeon #define	NFE_R1_MAGIC_DEFAULT	0x15050f
143257c5577SDavid E. O'Brien #define	NFE_R2_MAGIC		0x16
144257c5577SDavid E. O'Brien #define	NFE_R4_MAGIC		0x08
145257c5577SDavid E. O'Brien #define	NFE_R6_MAGIC		0x03
1463cb32d8aSDavid E. O'Brien #define	NFE_WOL_MAGIC		0x1111
147257c5577SDavid E. O'Brien #define	NFE_RX_START		0x01
148257c5577SDavid E. O'Brien #define	NFE_TX_START		0x01
149257c5577SDavid E. O'Brien 
150257c5577SDavid E. O'Brien #define	NFE_IRQ_RXERR		0x0001
151257c5577SDavid E. O'Brien #define	NFE_IRQ_RX		0x0002
152257c5577SDavid E. O'Brien #define	NFE_IRQ_RX_NOBUF	0x0004
153257c5577SDavid E. O'Brien #define	NFE_IRQ_TXERR		0x0008
154257c5577SDavid E. O'Brien #define	NFE_IRQ_TX_DONE		0x0010
155257c5577SDavid E. O'Brien #define	NFE_IRQ_TIMER		0x0020
156257c5577SDavid E. O'Brien #define	NFE_IRQ_LINK		0x0040
157257c5577SDavid E. O'Brien #define	NFE_IRQ_TXERR2		0x0080
158257c5577SDavid E. O'Brien #define	NFE_IRQ_TX1		0x0100
159257c5577SDavid E. O'Brien 
160257c5577SDavid E. O'Brien #define	NFE_IRQ_WANTED							\
161257c5577SDavid E. O'Brien 	(NFE_IRQ_RXERR | NFE_IRQ_RX_NOBUF | NFE_IRQ_RX |		\
162257c5577SDavid E. O'Brien 	 NFE_IRQ_TXERR | NFE_IRQ_TXERR2 | NFE_IRQ_TX_DONE |		\
163257c5577SDavid E. O'Brien 	 NFE_IRQ_LINK)
164257c5577SDavid E. O'Brien 
165257c5577SDavid E. O'Brien #define	NFE_RXTX_KICKTX		0x0001
166257c5577SDavid E. O'Brien #define	NFE_RXTX_BIT1		0x0002
167257c5577SDavid E. O'Brien #define	NFE_RXTX_BIT2		0x0004
168257c5577SDavid E. O'Brien #define	NFE_RXTX_RESET		0x0010
169257c5577SDavid E. O'Brien #define	NFE_RXTX_VTAG_STRIP	0x0040
170257c5577SDavid E. O'Brien #define	NFE_RXTX_VTAG_INSERT	0x0080
171257c5577SDavid E. O'Brien #define	NFE_RXTX_RXCSUM		0x0400
172257c5577SDavid E. O'Brien #define	NFE_RXTX_V2MAGIC	0x2100
173257c5577SDavid E. O'Brien #define	NFE_RXTX_V3MAGIC	0x2200
174aab5582fSPyun YongHyeon #define	NFE_RXFILTER_MAGIC	0x007f0000
175aab5582fSPyun YongHyeon #define	NFE_PFF_RX_PAUSE	(1 << 3)
176aab5582fSPyun YongHyeon #define	NFE_PFF_LOOPBACK	(1 << 4)
177aab5582fSPyun YongHyeon #define	NFE_PFF_U2M		(1 << 5)
178aab5582fSPyun YongHyeon #define	NFE_PFF_PROMISC		(1 << 7)
1797597761aSDavid E. O'Brien #define	NFE_CSUM_FEATURES	(CSUM_IP | CSUM_TCP | CSUM_UDP)
180257c5577SDavid E. O'Brien 
181257c5577SDavid E. O'Brien /* default interrupt moderation timer of 128us */
182257c5577SDavid E. O'Brien #define	NFE_IM_DEFAULT	((128 * 100) / 1024)
183257c5577SDavid E. O'Brien 
184257c5577SDavid E. O'Brien #define	NFE_VTAG_ENABLE		(1 << 13)
185257c5577SDavid E. O'Brien 
186257c5577SDavid E. O'Brien #define	NFE_PWR_VALID		(1 << 8)
187257c5577SDavid E. O'Brien #define	NFE_PWR_WAKEUP		(1 << 15)
188257c5577SDavid E. O'Brien 
189aab5582fSPyun YongHyeon #define	NFE_PWR2_WAKEUP_MASK	0x0f11
190aab5582fSPyun YongHyeon #define	NFE_PWR2_REVA3		(1 << 0)
19152a1393eSPyun YongHyeon #define	NFE_PWR2_GATE_CLOCKS	0x0f00
192aab5582fSPyun YongHyeon 
193257c5577SDavid E. O'Brien #define	NFE_MEDIA_SET		0x10000
194257c5577SDavid E. O'Brien #define	NFE_MEDIA_1000T		0x00032
195257c5577SDavid E. O'Brien #define	NFE_MEDIA_100TX		0x00064
196257c5577SDavid E. O'Brien #define	NFE_MEDIA_10T		0x003e8
197257c5577SDavid E. O'Brien 
198257c5577SDavid E. O'Brien #define	NFE_PHY_100TX		(1 << 0)
199257c5577SDavid E. O'Brien #define	NFE_PHY_1000T		(1 << 1)
200257c5577SDavid E. O'Brien #define	NFE_PHY_HDX		(1 << 8)
201257c5577SDavid E. O'Brien 
202257c5577SDavid E. O'Brien #define	NFE_MISC1_MAGIC		0x003b0f3c
203aab5582fSPyun YongHyeon #define	NFE_MISC1_TX_PAUSE	(1 << 0)
204257c5577SDavid E. O'Brien #define	NFE_MISC1_HDX		(1 << 1)
205257c5577SDavid E. O'Brien 
206aab5582fSPyun YongHyeon #define	NFE_TX_PAUSE_FRAME_DISABLE	0x1ff0080
207aab5582fSPyun YongHyeon #define	NFE_TX_PAUSE_FRAME_ENABLE	0x0c00030
208aab5582fSPyun YongHyeon 
209257c5577SDavid E. O'Brien #define	NFE_SEED_MASK		0x0003ff00
210257c5577SDavid E. O'Brien #define	NFE_SEED_10T		0x00007f00
211257c5577SDavid E. O'Brien #define	NFE_SEED_100TX		0x00002d00
212257c5577SDavid E. O'Brien #define	NFE_SEED_1000T		0x00007400
213257c5577SDavid E. O'Brien 
21417d022beSPyun YongHyeon #define	NFE_NUM_MIB_STATV1	21
21517d022beSPyun YongHyeon #define	NFE_NUM_MIB_STATV2	27
21617d022beSPyun YongHyeon #define	NFE_NUM_MIB_STATV3	30
21717d022beSPyun YongHyeon 
218aab5582fSPyun YongHyeon #define	NFE_MSI_MESSAGES	8
219aab5582fSPyun YongHyeon #define	NFE_MSI_VECTOR_0_ENABLED	0x01
220aab5582fSPyun YongHyeon 
221aab5582fSPyun YongHyeon /*
222aab5582fSPyun YongHyeon  * It seems that nForce supports only the lower 40 bits of a DMA address.
223aab5582fSPyun YongHyeon  */
224aab5582fSPyun YongHyeon #if (BUS_SPACE_MAXADDR < 0xFFFFFFFFFF)
225aab5582fSPyun YongHyeon #define	NFE_DMA_MAXADDR		BUS_SPACE_MAXADDR
226aab5582fSPyun YongHyeon #else
227aab5582fSPyun YongHyeon #define	NFE_DMA_MAXADDR		0xFFFFFFFFFF
228aab5582fSPyun YongHyeon #endif
229aab5582fSPyun YongHyeon 
230aab5582fSPyun YongHyeon #define	NFE_ADDR_LO(x)		((u_int64_t) (x) & 0xffffffff)
231aab5582fSPyun YongHyeon #define	NFE_ADDR_HI(x)		((u_int64_t) (x) >> 32)
232aab5582fSPyun YongHyeon 
233257c5577SDavid E. O'Brien /* Rx/Tx descriptor */
234257c5577SDavid E. O'Brien struct nfe_desc32 {
235257c5577SDavid E. O'Brien 	uint32_t	physaddr;
236257c5577SDavid E. O'Brien 	uint16_t	length;
237257c5577SDavid E. O'Brien 	uint16_t	flags;
238257c5577SDavid E. O'Brien #define	NFE_RX_FIXME_V1		0x6004
239257c5577SDavid E. O'Brien #define	NFE_RX_VALID_V1		(1 << 0)
240257c5577SDavid E. O'Brien #define	NFE_TX_ERROR_V1		0x7808
241257c5577SDavid E. O'Brien #define	NFE_TX_LASTFRAG_V1	(1 << 0)
242bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR1_V1	(1<<7)
243bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR2_V1	(1<<8)
244bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR3_V1	(1<<9)
245bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR4_V1	(1<<10)
246257c5577SDavid E. O'Brien } __packed;
247257c5577SDavid E. O'Brien 
248257c5577SDavid E. O'Brien #define	NFE_V1_TXERR	"\020"	\
249257c5577SDavid E. O'Brien 	"\14TXERROR\13UNDERFLOW\12LATECOLLISION\11LOSTCARRIER\10DEFERRED" \
250257c5577SDavid E. O'Brien 	"\08FORCEDINT\03RETRY\00LASTPACKET"
251257c5577SDavid E. O'Brien 
252257c5577SDavid E. O'Brien /* V2 Rx/Tx descriptor */
253257c5577SDavid E. O'Brien struct nfe_desc64 {
254257c5577SDavid E. O'Brien 	uint32_t	physaddr[2];
255257c5577SDavid E. O'Brien 	uint32_t	vtag;
256257c5577SDavid E. O'Brien #define	NFE_RX_VTAG		(1 << 16)
257257c5577SDavid E. O'Brien #define	NFE_TX_VTAG		(1 << 18)
258257c5577SDavid E. O'Brien 	uint16_t	length;
259257c5577SDavid E. O'Brien 	uint16_t	flags;
260257c5577SDavid E. O'Brien #define	NFE_RX_FIXME_V2		0x4300
261257c5577SDavid E. O'Brien #define	NFE_RX_VALID_V2		(1 << 13)
262257c5577SDavid E. O'Brien #define	NFE_TX_ERROR_V2		0x5c04
263257c5577SDavid E. O'Brien #define	NFE_TX_LASTFRAG_V2	(1 << 13)
264bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR1_V2	(1<<2)
265bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR2_V2	(1<<3)
266bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR3_V2	(1<<4)
267bfc788c2SDavid E. O'Brien #define	NFE_RX_ERROR4_V2	(1<<5)
268257c5577SDavid E. O'Brien } __packed;
269257c5577SDavid E. O'Brien 
270257c5577SDavid E. O'Brien #define	NFE_V2_TXERR	"\020"	\
271257c5577SDavid E. O'Brien 	"\14FORCEDINT\13LASTPACKET\12UNDERFLOW\10LOSTCARRIER\09DEFERRED\02RETRY"
272257c5577SDavid E. O'Brien 
273aab5582fSPyun YongHyeon #define	NFE_RING_ALIGN	(sizeof(struct nfe_desc64))
274aab5582fSPyun YongHyeon 
275257c5577SDavid E. O'Brien /* flags common to V1/V2 descriptors */
276aab5582fSPyun YongHyeon #define	NFE_RX_UDP_CSUMOK	(1 << 10)
277aab5582fSPyun YongHyeon #define	NFE_RX_TCP_CSUMOK	(1 << 11)
278aab5582fSPyun YongHyeon #define	NFE_RX_IP_CSUMOK	(1 << 12)
279257c5577SDavid E. O'Brien #define	NFE_RX_ERROR		(1 << 14)
280257c5577SDavid E. O'Brien #define	NFE_RX_READY		(1 << 15)
281aab5582fSPyun YongHyeon #define	NFE_RX_LEN_MASK		0x3fff
282aab5582fSPyun YongHyeon #define	NFE_TX_TCP_UDP_CSUM	(1 << 10)
283257c5577SDavid E. O'Brien #define	NFE_TX_IP_CSUM		(1 << 11)
284aab5582fSPyun YongHyeon #define	NFE_TX_TSO		(1 << 12)
285aab5582fSPyun YongHyeon #define	NFE_TX_TSO_SHIFT	14
286257c5577SDavid E. O'Brien #define	NFE_TX_VALID		(1 << 15)
287257c5577SDavid E. O'Brien 
288257c5577SDavid E. O'Brien #define	NFE_READ(sc, reg) \
289aab5582fSPyun YongHyeon 	bus_read_4((sc)->nfe_res[0], (reg))
290257c5577SDavid E. O'Brien 
291257c5577SDavid E. O'Brien #define	NFE_WRITE(sc, reg, val) \
292aab5582fSPyun YongHyeon 	bus_write_4((sc)->nfe_res[0], (reg), (val))
293aab5582fSPyun YongHyeon 
294aab5582fSPyun YongHyeon #define	NFE_TIMEOUT	1000
295bfc788c2SDavid E. O'Brien 
296bfc788c2SDavid E. O'Brien #ifndef PCI_VENDOR_NVIDIA
297bfc788c2SDavid E. O'Brien #define	PCI_VENDOR_NVIDIA	0x10DE
298bfc788c2SDavid E. O'Brien #endif
299bfc788c2SDavid E. O'Brien 
300bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE_LAN		0x01C3
301bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE2_LAN		0x0066
302bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN1		0x00D6
303bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN1	0x0086
304bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN2	0x008C
305bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_250_LAN	0x00E6
306bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN4		0x00DF
307bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE4_LAN1		0x0056
308bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE4_LAN2		0x0057
309bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP04_LAN1		0x0037
310bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP04_LAN2		0x0038
311bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE430_LAN1	0x0268
312bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE430_LAN2	0x0269
313bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP55_LAN1		0x0372
314bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP55_LAN2		0x0373
3153e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP61_LAN1		0x03e5
3163e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP61_LAN2		0x03e6
3173e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP61_LAN3		0x03ee
3183e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP61_LAN4		0x03ef
3193e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP65_LAN1		0x0450
3203e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP65_LAN2		0x0451
3213e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP65_LAN3		0x0452
3223e232000SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP65_LAN4		0x0453
323aab5582fSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP67_LAN1		0x054c
324aab5582fSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP67_LAN2		0x054d
325aab5582fSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP67_LAN3		0x054e
326aab5582fSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP67_LAN4		0x054f
327b7e548dcSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP73_LAN1		0x07dc
328b7e548dcSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP73_LAN2		0x07dd
329b7e548dcSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP73_LAN3		0x07de
330b7e548dcSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP73_LAN4		0x07df
331be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP77_LAN1		0x0760
332be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP77_LAN2		0x0761
333be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP77_LAN3		0x0762
334be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP77_LAN4		0x0763
335be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP79_LAN1		0x0ab0
336be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP79_LAN2		0x0ab1
337be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP79_LAN3		0x0ab2
338be38e61aSPyun YongHyeon #define	PCI_PRODUCT_NVIDIA_MCP79_LAN4		0x0ab3
339*8b2de3f0SMark Johnston #define	PCI_PRODUCT_NVIDIA_MCP89_LAN		0x0d7d
340bfc788c2SDavid E. O'Brien 
341bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN2	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN1
342bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN3	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN2
343bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN5	PCI_PRODUCT_NVIDIA_NFORCE3_250_LAN
344bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_CK804_LAN1	PCI_PRODUCT_NVIDIA_NFORCE4_LAN1
345bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_CK804_LAN2	PCI_PRODUCT_NVIDIA_NFORCE4_LAN2
346bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP51_LAN1	PCI_PRODUCT_NVIDIA_NFORCE430_LAN1
347bfc788c2SDavid E. O'Brien #define	PCI_PRODUCT_NVIDIA_MCP51_LAN2	PCI_PRODUCT_NVIDIA_NFORCE430_LAN2
348bfc788c2SDavid E. O'Brien 
349bfc788c2SDavid E. O'Brien #define	NFE_DEBUG		0x0000
350bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_INIT		0x0001
351bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_RUNNING	0x0002
352bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_DEINIT 	0x0004
353bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_IOCTL		0x0008
354bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_INTERRUPT	0x0010
355bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_API		0x0020
356bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_LOCK		0x0040
357bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_BROKEN	0x0080
358bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_MII		0x0100
359bfc788c2SDavid E. O'Brien #define	NFE_DEBUG_ALL		0xFFFF
360