if_nfevar.h revision 159967
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 159967 2006-06-26 23:41:07Z obrien $
19159952Sobrien */
20159952Sobrien
21159967Sobrien#define	NFE_IFQ_MAXLEN	64
22159952Sobrien
23159952Sobrienstruct nfe_tx_data {
24159967Sobrien	bus_dmamap_t	tx_data_map;
25159952Sobrien	bus_dmamap_t	active;
26159967Sobrien	int		nsegs;
27159952Sobrien	struct mbuf	*m;
28159952Sobrien};
29159952Sobrien
30159952Sobrienstruct nfe_tx_ring {
31159967Sobrien	bus_dmamap_t		tx_desc_map;
32159967Sobrien	bus_dma_segment_t	tx_desc_segs;
33159952Sobrien	bus_addr_t		physaddr;
34159952Sobrien	struct nfe_desc32	*desc32;
35159952Sobrien	struct nfe_desc64	*desc64;
36159952Sobrien	struct nfe_tx_data	data[NFE_TX_RING_COUNT];
37159952Sobrien	int			queued;
38159952Sobrien	int			cur;
39159952Sobrien	int			next;
40159967Sobrien	bus_addr_t		tx_desc_addr;
41159967Sobrien	bus_addr_t		tx_data_addr;
42159967Sobrien	bus_dma_tag_t		tx_desc_tag;
43159967Sobrien	bus_dma_tag_t		tx_data_tag;
44159952Sobrien};
45159952Sobrien
46159952Sobrienstruct nfe_jbuf {
47159952Sobrien	caddr_t			buf;
48159952Sobrien	bus_addr_t		physaddr;
49159952Sobrien	SLIST_ENTRY(nfe_jbuf)	jnext;
50159952Sobrien};
51159952Sobrien
52159952Sobrienstruct nfe_rx_data {
53159967Sobrien	bus_dmamap_t	rx_data_map;
54159967Sobrien	bus_dma_tag_t	rx_data_tag;
55159967Sobrien	bus_addr_t	rx_data_addr;
56159967Sobrien	bus_dma_segment_t rx_data_segs;
57159952Sobrien	struct mbuf	*m;
58159952Sobrien};
59159952Sobrien
60159952Sobrienstruct nfe_rx_ring {
61159967Sobrien	bus_dmamap_t		rx_desc_map;
62159967Sobrien	bus_dma_segment_t	rx_desc_segs;
63159967Sobrien        bus_dma_tag_t		rx_desc_tag;
64159967Sobrien	bus_addr_t		rx_desc_addr;
65159967Sobrien#ifndef JMBUF
66159967Sobrien	bus_dmamap_t		rx_jumbo_map;
67159967Sobrien	bus_dma_segment_t	rx_jumbo_segs;
68159967Sobrien        bus_dma_tag_t		rx_jumbo_tag;
69159967Sobrien	bus_addr_t		rx_jumbo_addr;
70159967Sobrien	caddr_t			jpool;
71159967Sobrien	struct nfe_jbuf		jbuf[NFE_JPOOL_COUNT];
72159967Sobrien	SLIST_HEAD(, nfe_jbuf)	jfreelist;
73159967Sobrien#endif
74159952Sobrien	bus_addr_t		physaddr;
75159952Sobrien	struct nfe_desc32	*desc32;
76159952Sobrien	struct nfe_desc64	*desc64;
77159952Sobrien	struct nfe_rx_data	data[NFE_RX_RING_COUNT];
78159952Sobrien	int			bufsz;
79159952Sobrien	int			cur;
80159952Sobrien	int			next;
81159952Sobrien};
82159952Sobrien
83159952Sobrienstruct nfe_softc {
84159967Sobrien	struct ifnet		*nfe_ifp;
85159967Sobrien	device_t		nfe_dev;
86159967Sobrien	device_t		nfe_miibus;
87159967Sobrien	struct mtx		nfe_mtx;
88159967Sobrien	bus_space_handle_t	nfe_memh;
89159967Sobrien	bus_space_tag_t		nfe_memt;
90159967Sobrien	struct resource		*nfe_res;
91159967Sobrien	struct resource		*nfe_irq;
92159967Sobrien	void			*nfe_intrhand;
93159967Sobrien	struct mii_data		nfe_mii;
94159967Sobrien	u_int8_t		nfe_unit;
95159967Sobrien	struct callout		nfe_stat_ch;
96159952Sobrien
97159967Sobrien	struct arpcom		nfe_arpcom;
98159967Sobrien	bus_dma_tag_t		nfe_parent_tag;
99159967Sobrien  /*	struct timeout		nfe_tick_ch; */
100159967Sobrien	void			*nfe_powerhook;
101159952Sobrien
102159967Sobrien	int			nfe_if_flags;
103159967Sobrien	u_int			nfe_flags;
104159967Sobrien#define	NFE_JUMBO_SUP	0x01
105159967Sobrien#define	NFE_40BIT_ADDR	0x02
106159967Sobrien#define	NFE_HW_CSUM	0x04
107159967Sobrien#define	NFE_HW_VLAN	0x08
108159967Sobrien#define	NFE_USE_JUMBO	0x10
109159967Sobrien	u_int32_t		rxtxctl;
110159967Sobrien	u_int8_t		mii_phyaddr;
111159967Sobrien	u_char			eaddr[ETHER_ADDR_LEN];
112159967Sobrien	struct task		nfe_txtask;
113159967Sobrien	int			nfe_link;
114159952Sobrien
115159952Sobrien	struct nfe_tx_ring	txq;
116159952Sobrien	struct nfe_rx_ring	rxq;
117159967Sobrien
118159967Sobrien#ifdef DEVICE_POLLING
119159967Sobrien	int			rxcycles;
120159967Sobrien#endif
121159952Sobrien};
122159967Sobrien
123159967Sobrienstruct nfe_type {
124159967Sobrien	u_int16_t	vid_id;
125159967Sobrien	u_int16_t	dev_id;
126159967Sobrien	char		*name;
127159967Sobrien};
128