if_macbvar.h revision 261455
1/*
2 * $FreeBSD: stable/10/sys/arm/at91/if_macbvar.h 261455 2014-02-04 03:36:42Z eadler $
3 */
4
5#ifndef	_IF_MACB_H
6#define	_IF_MACB_H
7
8#define	MACB_MAX_TX_BUFFERS	64
9#define	MACB_MAX_RX_BUFFERS	256
10
11#define MAX_FRAGMENT		20
12#define DATA_SIZE		128
13
14#define	MACB_DESC_INC(x, y)	((x) = ((x) + 1) % (y))
15
16#define MACB_TIMEOUT		1000
17
18struct eth_tx_desc {
19	uint32_t		addr;
20	uint32_t		flags;
21#define TD_OWN		(1U << 31)
22#define TD_LAST		(1 << 15)
23#define	TD_WRAP_MASK		(1 << 30)
24};
25
26struct eth_rx_desc {
27	uint32_t		addr;
28#define	RD_LEN_MASK		0x7ff
29#define	RD_WRAP_MASK		0x00000002
30#define	RD_OWN			0x00000001
31
32	uint32_t		flags;
33#define RD_BROADCAST		(1U << 31)
34#define RD_MULTICAST		(1 << 30)
35#define RD_UNICAST		(1 << 29)
36#define RD_EXTERNAL		(1 << 28)
37#define RD_TYPE_ID		(1 << 22)
38#define RD_PRIORITY		(1 << 20)
39#define RD_VLAN		(1 << 21)
40#define RD_CONCAT		(1 << 16)
41#define RD_EOF		(1 << 15)
42#define RD_SOF		(1 << 14)
43#define RD_OFFSET_MASK		(1 << 13)|(1 << 12)
44#define RD_LENGTH_MASK		(0x00000FFF)
45
46};
47
48
49struct rx_desc_info {
50	struct mbuf *buff;
51	bus_dmamap_t dmamap;
52};
53
54struct tx_desc_info {
55	struct mbuf *buff;
56	bus_dmamap_t dmamap;
57};
58
59
60struct macb_chain_data{
61	struct mbuf		*rxhead;
62	struct mbuf		*rxtail;
63};
64
65struct macb_softc
66{
67	struct ifnet *ifp;		/* ifnet pointer */
68	struct mtx sc_mtx;		/* global mutex */
69
70	bus_dma_tag_t	sc_parent_tag;	/* parent bus DMA tag */
71
72	device_t dev;			/* Myself */
73	device_t miibus;		/* My child miibus */
74	void *intrhand;			/* Interrupt handle */
75	void *intrhand_qf;		/* queue full */
76	void *intrhand_tx;		/* tx complete */
77	void *intrhand_status;		/* error status */
78
79	struct resource *irq_res;	/* transmit */
80	struct resource *irq_res_rec;	/* receive */
81	struct resource *irq_res_qf;	/* queue full */
82	struct resource *irq_res_status; /* status */
83
84	struct resource	*mem_res;	/* Memory resource */
85
86	struct callout tick_ch;		/* Tick callout */
87
88	struct taskqueue *sc_tq;
89	struct task	sc_intr_task;
90	struct task	sc_tx_task;
91	struct task	sc_link_task;
92
93	bus_dmamap_t	dmamap_ring_tx;
94	bus_dmamap_t	dmamap_ring_rx;
95
96	/*dma tag for ring*/
97	bus_dma_tag_t	dmatag_ring_tx;
98	bus_dma_tag_t	dmatag_ring_rx;
99
100	/*dma tag for data*/
101	bus_dma_tag_t	dmatag_data_tx;
102	bus_dma_tag_t	dmatag_data_rx;
103
104	/*the ring*/
105	struct eth_tx_desc	*desc_tx;
106	struct eth_rx_desc	*desc_rx;
107
108	/*ring physical address*/
109	bus_addr_t	ring_paddr_tx;
110	bus_addr_t	ring_paddr_rx;
111
112	/*index of last received descriptor*/
113	int		rx_cons;
114	struct rx_desc_info rx_desc[MACB_MAX_RX_BUFFERS];
115
116	/* tx producer index */
117	uint32_t tx_prod;
118	/* tx consumer index */
119	uint32_t tx_cons;
120	int	tx_cnt;
121
122	struct tx_desc_info tx_desc[MACB_MAX_TX_BUFFERS];
123
124	int macb_watchdog_timer;
125
126#define	MACB_FLAG_LINK		0x0001
127
128	int flags;
129	int if_flags;
130	struct at91_pmc_clock *clk;
131
132	struct macb_chain_data	macb_cdata;
133	int clock;
134};
135
136
137
138#endif
139