1159952Sobrien/*	$OpenBSD: if_nfevar.h,v 1.11 2006/02/19 13:57:02 damien Exp $	*/
2159952Sobrien
3159952Sobrien/*-
4159952Sobrien * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org>
5159952Sobrien *
6159952Sobrien * Permission to use, copy, modify, and distribute this software for any
7159952Sobrien * purpose with or without fee is hereby granted, provided that the above
8159952Sobrien * copyright notice and this permission notice appear in all copies.
9159952Sobrien *
10159952Sobrien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11159952Sobrien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12159952Sobrien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13159952Sobrien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14159952Sobrien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15159952Sobrien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16159952Sobrien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17159967Sobrien *
18159967Sobrien * $FreeBSD$
19159952Sobrien */
20159952Sobrien
21159952Sobrienstruct nfe_tx_data {
22159967Sobrien	bus_dmamap_t	tx_data_map;
23159952Sobrien	struct mbuf	*m;
24159952Sobrien};
25159952Sobrien
26159952Sobrienstruct nfe_tx_ring {
27170589Syongari	bus_dma_tag_t		tx_desc_tag;
28159967Sobrien	bus_dmamap_t		tx_desc_map;
29159952Sobrien	bus_addr_t		physaddr;
30159952Sobrien	struct nfe_desc32	*desc32;
31159952Sobrien	struct nfe_desc64	*desc64;
32170589Syongari	bus_dma_tag_t		tx_data_tag;
33159952Sobrien	struct nfe_tx_data	data[NFE_TX_RING_COUNT];
34159952Sobrien	int			queued;
35159952Sobrien	int			cur;
36159952Sobrien	int			next;
37159952Sobrien};
38159952Sobrien
39159952Sobrienstruct nfe_rx_data {
40159967Sobrien	bus_dmamap_t	rx_data_map;
41170589Syongari	bus_addr_t	paddr;
42159952Sobrien	struct mbuf	*m;
43159952Sobrien};
44159952Sobrien
45159952Sobrienstruct nfe_rx_ring {
46170589Syongari	bus_dma_tag_t		rx_desc_tag;
47159967Sobrien	bus_dmamap_t		rx_desc_map;
48159952Sobrien	bus_addr_t		physaddr;
49159952Sobrien	struct nfe_desc32	*desc32;
50159952Sobrien	struct nfe_desc64	*desc64;
51170589Syongari	bus_dma_tag_t		rx_data_tag;
52170589Syongari	bus_dmamap_t		rx_spare_map;
53159952Sobrien	struct nfe_rx_data	data[NFE_RX_RING_COUNT];
54159952Sobrien	int			cur;
55159952Sobrien	int			next;
56159952Sobrien};
57159952Sobrien
58170589Syongaristruct nfe_jrx_ring {
59170589Syongari	bus_dma_tag_t		jrx_desc_tag;
60170589Syongari	bus_dmamap_t		jrx_desc_map;
61170589Syongari	bus_dma_tag_t		jrx_jumbo_tag;
62170589Syongari	bus_dmamap_t		jrx_jumbo_map;
63170589Syongari	bus_addr_t		jphysaddr;
64170589Syongari	struct nfe_desc32	*jdesc32;
65170589Syongari	struct nfe_desc64	*jdesc64;
66170589Syongari	bus_dma_tag_t		jrx_data_tag;
67170589Syongari	bus_dmamap_t		jrx_spare_map;
68170589Syongari	struct nfe_rx_data	jdata[NFE_JUMBO_RX_RING_COUNT];
69170589Syongari	int			jcur;
70170589Syongari	int			jnext;
71170589Syongari};
72170589Syongari
73183561Syongaristruct nfe_hw_stats {
74183561Syongari	uint64_t		rx_octets;
75183561Syongari	uint32_t		rx_frame_errors;
76183561Syongari	uint32_t		rx_extra_bytes;
77183561Syongari	uint32_t		rx_late_cols;
78183561Syongari	uint32_t		rx_runts;
79183561Syongari	uint32_t		rx_jumbos;
80183561Syongari	uint32_t		rx_fifo_overuns;
81183561Syongari	uint32_t		rx_crc_errors;
82183561Syongari	uint32_t		rx_fae;
83183561Syongari	uint32_t		rx_len_errors;
84183561Syongari	uint32_t		rx_unicast;
85183561Syongari	uint32_t		rx_multicast;
86183561Syongari	uint32_t		rx_broadcast;
87183561Syongari	uint32_t		rx_pause;
88183561Syongari	uint32_t		rx_drops;
89183561Syongari	uint64_t		tx_octets;
90183561Syongari	uint32_t		tx_zero_rexmits;
91183561Syongari	uint32_t		tx_one_rexmits;
92183561Syongari	uint32_t		tx_multi_rexmits;
93183561Syongari	uint32_t		tx_late_cols;
94183561Syongari	uint32_t		tx_fifo_underuns;
95183561Syongari	uint32_t		tx_carrier_losts;
96183561Syongari	uint32_t		tx_excess_deferals;
97183561Syongari	uint32_t		tx_retry_errors;
98183561Syongari	uint32_t		tx_deferals;
99183561Syongari	uint32_t		tx_frames;
100183561Syongari	uint32_t		tx_pause;
101183561Syongari	uint32_t		tx_unicast;
102183561Syongari	uint32_t		tx_multicast;
103183561Syongari	uint32_t		tx_broadcast;
104183561Syongari};
105183561Syongari
106159952Sobrienstruct nfe_softc {
107159967Sobrien	struct ifnet		*nfe_ifp;
108159967Sobrien	device_t		nfe_dev;
109170589Syongari	uint16_t		nfe_devid;
110170589Syongari	uint16_t		nfe_revid;
111159967Sobrien	device_t		nfe_miibus;
112159967Sobrien	struct mtx		nfe_mtx;
113170589Syongari	struct resource		*nfe_res[1];
114170589Syongari	struct resource		*nfe_msix_res;
115170589Syongari	struct resource		*nfe_msix_pba_res;
116170589Syongari	struct resource		*nfe_irq[NFE_MSI_MESSAGES];
117170589Syongari	void			*nfe_intrhand[NFE_MSI_MESSAGES];
118159967Sobrien	struct callout		nfe_stat_ch;
119170589Syongari	int			nfe_watchdog_timer;
120159952Sobrien
121159967Sobrien	bus_dma_tag_t		nfe_parent_tag;
122159952Sobrien
123159967Sobrien	int			nfe_if_flags;
124170589Syongari	uint32_t		nfe_flags;
125170589Syongari#define	NFE_JUMBO_SUP		0x0001
126170589Syongari#define	NFE_40BIT_ADDR		0x0002
127170589Syongari#define	NFE_HW_CSUM		0x0004
128170589Syongari#define	NFE_HW_VLAN		0x0008
129170589Syongari#define	NFE_PWR_MGMT		0x0010
130170589Syongari#define	NFE_CORRECT_MACADDR	0x0020
131170589Syongari#define	NFE_TX_FLOW_CTRL	0x0040
132183561Syongari#define	NFE_MIB_V1		0x0080
133183561Syongari#define	NFE_MIB_V2		0x0100
134183561Syongari#define	NFE_MIB_V3		0x0200
135171559Syongari	int			nfe_jumbo_disable;
136170589Syongari	uint32_t		rxtxctl;
137170589Syongari	uint8_t			mii_phyaddr;
138170589Syongari	uint8_t			eaddr[ETHER_ADDR_LEN];
139183561Syongari	struct nfe_hw_stats	nfe_stats;
140170589Syongari	struct taskqueue	*nfe_tq;
141170589Syongari	struct task		nfe_int_task;
142159967Sobrien	int			nfe_link;
143170589Syongari	int			nfe_suspended;
144170589Syongari	int			nfe_framesize;
145170589Syongari	int			nfe_process_limit;
146170589Syongari	int			nfe_force_tx;
147170589Syongari	uint32_t		nfe_irq_status;
148170589Syongari	uint32_t		nfe_irq_mask;
149170589Syongari	uint32_t		nfe_intrs;
150170589Syongari	uint32_t		nfe_nointrs;
151170589Syongari	uint32_t		nfe_msi;
152170589Syongari	uint32_t		nfe_msix;
153159952Sobrien
154159952Sobrien	struct nfe_tx_ring	txq;
155159952Sobrien	struct nfe_rx_ring	rxq;
156170589Syongari	struct nfe_jrx_ring	jrxq;
157159952Sobrien};
158159967Sobrien
159159967Sobrienstruct nfe_type {
160170589Syongari	uint16_t	vid_id;
161170589Syongari	uint16_t	dev_id;
162159967Sobrien	char		*name;
163159967Sobrien};
164