if_nfevar.h revision 170589
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: head/sys/dev/nfe/if_nfevar.h 170589 2007-06-12 02:16:02Z yongari $
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
39170589Syongaristruct nfe_jpool_entry {
40170589Syongari	int				slot;
41170589Syongari	SLIST_ENTRY(nfe_jpool_entry)	jpool_entries;
42159952Sobrien};
43159952Sobrien
44159952Sobrienstruct nfe_rx_data {
45159967Sobrien	bus_dmamap_t	rx_data_map;
46170589Syongari	bus_addr_t	paddr;
47159952Sobrien	struct mbuf	*m;
48159952Sobrien};
49159952Sobrien
50159952Sobrienstruct nfe_rx_ring {
51170589Syongari	bus_dma_tag_t		rx_desc_tag;
52159967Sobrien	bus_dmamap_t		rx_desc_map;
53159952Sobrien	bus_addr_t		physaddr;
54159952Sobrien	struct nfe_desc32	*desc32;
55159952Sobrien	struct nfe_desc64	*desc64;
56170589Syongari	bus_dma_tag_t		rx_data_tag;
57170589Syongari	bus_dmamap_t		rx_spare_map;
58159952Sobrien	struct nfe_rx_data	data[NFE_RX_RING_COUNT];
59159952Sobrien	int			cur;
60159952Sobrien	int			next;
61159952Sobrien};
62159952Sobrien
63170589Syongaristruct nfe_jrx_ring {
64170589Syongari	bus_dma_tag_t		jrx_desc_tag;
65170589Syongari	bus_dmamap_t		jrx_desc_map;
66170589Syongari	bus_dma_tag_t		jrx_jumbo_tag;
67170589Syongari	bus_dmamap_t		jrx_jumbo_map;
68170589Syongari	void			*jpool;
69170589Syongari	caddr_t			jslots[NFE_JSLOTS];
70170589Syongari	bus_addr_t		jphysaddr;
71170589Syongari	struct nfe_desc32	*jdesc32;
72170589Syongari	struct nfe_desc64	*jdesc64;
73170589Syongari	bus_dma_tag_t		jrx_data_tag;
74170589Syongari	bus_dmamap_t		jrx_spare_map;
75170589Syongari	struct nfe_rx_data	jdata[NFE_JUMBO_RX_RING_COUNT];
76170589Syongari	int			jcur;
77170589Syongari	int			jnext;
78170589Syongari};
79170589Syongari
80159952Sobrienstruct nfe_softc {
81159967Sobrien	struct ifnet		*nfe_ifp;
82159967Sobrien	device_t		nfe_dev;
83170589Syongari	uint16_t		nfe_devid;
84170589Syongari	uint16_t		nfe_revid;
85159967Sobrien	device_t		nfe_miibus;
86159967Sobrien	struct mtx		nfe_mtx;
87170589Syongari	struct resource		*nfe_res[1];
88170589Syongari	struct resource		*nfe_msix_res;
89170589Syongari	struct resource		*nfe_msix_pba_res;
90170589Syongari	struct resource		*nfe_irq[NFE_MSI_MESSAGES];
91170589Syongari	void			*nfe_intrhand[NFE_MSI_MESSAGES];
92159967Sobrien	struct callout		nfe_stat_ch;
93170589Syongari	int			nfe_watchdog_timer;
94159952Sobrien
95159967Sobrien	bus_dma_tag_t		nfe_parent_tag;
96159952Sobrien
97159967Sobrien	int			nfe_if_flags;
98170589Syongari	uint32_t		nfe_flags;
99170589Syongari#define	NFE_JUMBO_SUP		0x0001
100170589Syongari#define	NFE_40BIT_ADDR		0x0002
101170589Syongari#define	NFE_HW_CSUM		0x0004
102170589Syongari#define	NFE_HW_VLAN		0x0008
103170589Syongari#define	NFE_PWR_MGMT		0x0010
104170589Syongari#define	NFE_CORRECT_MACADDR	0x0020
105170589Syongari#define	NFE_TX_FLOW_CTRL	0x0040
106170589Syongari	uint32_t		rxtxctl;
107170589Syongari	uint8_t			mii_phyaddr;
108170589Syongari	uint8_t			eaddr[ETHER_ADDR_LEN];
109170589Syongari	struct taskqueue	*nfe_tq;
110170589Syongari	struct task		nfe_int_task;
111170589Syongari	struct task		nfe_tx_task;
112170589Syongari	struct task		nfe_link_task;
113159967Sobrien	int			nfe_link;
114170589Syongari	int			nfe_suspended;
115170589Syongari	int			nfe_framesize;
116170589Syongari	int			nfe_process_limit;
117170589Syongari	int			nfe_force_tx;
118170589Syongari	uint32_t		nfe_irq_status;
119170589Syongari	uint32_t		nfe_irq_mask;
120170589Syongari	uint32_t		nfe_intrs;
121170589Syongari	uint32_t		nfe_nointrs;
122170589Syongari	uint32_t		nfe_msi;
123170589Syongari	uint32_t		nfe_msix;
124159952Sobrien
125159952Sobrien	struct nfe_tx_ring	txq;
126159952Sobrien	struct nfe_rx_ring	rxq;
127170589Syongari	struct nfe_jrx_ring	jrxq;
128170589Syongari	SLIST_HEAD(__nfe_jfreehead, nfe_jpool_entry)	nfe_jfree_listhead;
129170589Syongari	SLIST_HEAD(__nfe_jinusehead, nfe_jpool_entry)	nfe_jinuse_listhead;
130170589Syongari	struct mtx		nfe_jlist_mtx;
131159952Sobrien};
132159967Sobrien
133159967Sobrienstruct nfe_type {
134170589Syongari	uint16_t	vid_id;
135170589Syongari	uint16_t	dev_id;
136159967Sobrien	char		*name;
137159967Sobrien};
138