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 18 struct 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 26 struct 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 49 struct rx_desc_info { 50 struct mbuf *buff; 51 bus_dmamap_t dmamap; 52 }; 53 54 struct tx_desc_info { 55 struct mbuf *buff; 56 bus_dmamap_t dmamap; 57 }; 58 59 60 struct macb_chain_data{ 61 struct mbuf *rxhead; 62 struct mbuf *rxtail; 63 }; 64 65 struct 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