8 #define MACB_MAX_TX_BUFFERS 64
9 #define MACB_MAX_RX_BUFFERS 256
11 #define MAX_FRAGMENT 20
14 #define MACB_DESC_INC(x, y) ((x) = ((x) + 1) % (y))
16 #define MACB_TIMEOUT 1000
21 #define TD_OWN (1U << 31)
22 #define TD_LAST (1 << 15)
23 #define TD_WRAP_MASK (1 << 30)
28 #define RD_LEN_MASK 0x7ff
29 #define RD_WRAP_MASK 0x00000002
30 #define RD_OWN 0x00000001
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)
60 struct macb_chain_data{
67 struct ifnet *ifp; /* ifnet pointer */
68 struct mtx sc_mtx; /* global mutex */
70 bus_dma_tag_t sc_parent_tag; /* parent bus DMA tag */
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 */
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 */
84 struct resource *mem_res; /* Memory resource */
86 struct callout tick_ch; /* Tick callout */
88 struct taskqueue *sc_tq;
89 struct task sc_intr_task;
90 struct task sc_tx_task;
91 struct task sc_link_task;
93 bus_dmamap_t dmamap_ring_tx;
94 bus_dmamap_t dmamap_ring_rx;
97 bus_dma_tag_t dmatag_ring_tx;
98 bus_dma_tag_t dmatag_ring_rx;
101 bus_dma_tag_t dmatag_data_tx;
102 bus_dma_tag_t dmatag_data_rx;
105 struct eth_tx_desc *desc_tx;
106 struct eth_rx_desc *desc_rx;
108 /*ring physical address*/
109 bus_addr_t ring_paddr_tx;
110 bus_addr_t ring_paddr_rx;
112 /*index of last received descriptor*/
114 struct rx_desc_info rx_desc[MACB_MAX_RX_BUFFERS];
116 /* tx producer index */
118 /* tx consumer index */
122 struct tx_desc_info tx_desc[MACB_MAX_TX_BUFFERS];
124 int macb_watchdog_timer;
126 #define MACB_FLAG_LINK 0x0001
130 struct at91_pmc_clock *clk;
132 struct macb_chain_data macb_cdata;
135 uint32_t use_rmii; /* 0 or USRIO_RMII */