1210040Scognet/* 2210040Scognet * $FreeBSD: releng/11.0/sys/arm/at91/if_macbvar.h 290509 2015-11-07 20:02:07Z imp $ 3210040Scognet */ 4210040Scognet 5210040Scognet#ifndef _IF_MACB_H 6210040Scognet#define _IF_MACB_H 7210040Scognet 8210040Scognet#define MACB_MAX_TX_BUFFERS 64 9210040Scognet#define MACB_MAX_RX_BUFFERS 256 10210040Scognet 11210040Scognet#define MAX_FRAGMENT 20 12210040Scognet#define DATA_SIZE 128 13210040Scognet 14210040Scognet#define MACB_DESC_INC(x, y) ((x) = ((x) + 1) % (y)) 15210040Scognet 16210040Scognet#define MACB_TIMEOUT 1000 17210040Scognet 18210040Scognetstruct eth_tx_desc { 19210040Scognet uint32_t addr; 20210040Scognet uint32_t flags; 21258780Seadler#define TD_OWN (1U << 31) 22210040Scognet#define TD_LAST (1 << 15) 23210040Scognet#define TD_WRAP_MASK (1 << 30) 24210040Scognet}; 25210040Scognet 26210040Scognetstruct eth_rx_desc { 27210040Scognet uint32_t addr; 28210040Scognet#define RD_LEN_MASK 0x7ff 29210040Scognet#define RD_WRAP_MASK 0x00000002 30210040Scognet#define RD_OWN 0x00000001 31210040Scognet 32210040Scognet uint32_t flags; 33258780Seadler#define RD_BROADCAST (1U << 31) 34210040Scognet#define RD_MULTICAST (1 << 30) 35210040Scognet#define RD_UNICAST (1 << 29) 36210040Scognet#define RD_EXTERNAL (1 << 28) 37210040Scognet#define RD_TYPE_ID (1 << 22) 38210040Scognet#define RD_PRIORITY (1 << 20) 39210040Scognet#define RD_VLAN (1 << 21) 40210040Scognet#define RD_CONCAT (1 << 16) 41210040Scognet#define RD_EOF (1 << 15) 42210040Scognet#define RD_SOF (1 << 14) 43210040Scognet#define RD_OFFSET_MASK (1 << 13)|(1 << 12) 44210040Scognet#define RD_LENGTH_MASK (0x00000FFF) 45210040Scognet 46210040Scognet}; 47210040Scognet 48210040Scognet 49210040Scognetstruct rx_desc_info { 50210040Scognet struct mbuf *buff; 51210040Scognet bus_dmamap_t dmamap; 52210040Scognet}; 53210040Scognet 54210040Scognetstruct tx_desc_info { 55210040Scognet struct mbuf *buff; 56210040Scognet bus_dmamap_t dmamap; 57210040Scognet}; 58210040Scognet 59210040Scognet 60210040Scognetstruct macb_chain_data{ 61210040Scognet struct mbuf *rxhead; 62210040Scognet struct mbuf *rxtail; 63210040Scognet}; 64210040Scognet 65210040Scognetstruct macb_softc 66210040Scognet{ 67210040Scognet struct ifnet *ifp; /* ifnet pointer */ 68210040Scognet struct mtx sc_mtx; /* global mutex */ 69210040Scognet 70210040Scognet bus_dma_tag_t sc_parent_tag; /* parent bus DMA tag */ 71210040Scognet 72210040Scognet device_t dev; /* Myself */ 73210040Scognet device_t miibus; /* My child miibus */ 74210040Scognet void *intrhand; /* Interrupt handle */ 75210040Scognet void *intrhand_qf; /* queue full */ 76210040Scognet void *intrhand_tx; /* tx complete */ 77210040Scognet void *intrhand_status; /* error status */ 78210040Scognet 79210040Scognet struct resource *irq_res; /* transmit */ 80210040Scognet struct resource *irq_res_rec; /* receive */ 81210040Scognet struct resource *irq_res_qf; /* queue full */ 82210040Scognet struct resource *irq_res_status; /* status */ 83210040Scognet 84210040Scognet struct resource *mem_res; /* Memory resource */ 85210040Scognet 86210040Scognet struct callout tick_ch; /* Tick callout */ 87210040Scognet 88210040Scognet struct taskqueue *sc_tq; 89210040Scognet struct task sc_intr_task; 90210040Scognet struct task sc_tx_task; 91210040Scognet struct task sc_link_task; 92210040Scognet 93210040Scognet bus_dmamap_t dmamap_ring_tx; 94210040Scognet bus_dmamap_t dmamap_ring_rx; 95210040Scognet 96210040Scognet /*dma tag for ring*/ 97210040Scognet bus_dma_tag_t dmatag_ring_tx; 98210040Scognet bus_dma_tag_t dmatag_ring_rx; 99210040Scognet 100210040Scognet /*dma tag for data*/ 101210040Scognet bus_dma_tag_t dmatag_data_tx; 102210040Scognet bus_dma_tag_t dmatag_data_rx; 103210040Scognet 104210040Scognet /*the ring*/ 105210040Scognet struct eth_tx_desc *desc_tx; 106210040Scognet struct eth_rx_desc *desc_rx; 107210040Scognet 108210040Scognet /*ring physical address*/ 109210040Scognet bus_addr_t ring_paddr_tx; 110210040Scognet bus_addr_t ring_paddr_rx; 111210040Scognet 112210040Scognet /*index of last received descriptor*/ 113210040Scognet int rx_cons; 114210040Scognet struct rx_desc_info rx_desc[MACB_MAX_RX_BUFFERS]; 115210040Scognet 116210040Scognet /* tx producer index */ 117210040Scognet uint32_t tx_prod; 118210040Scognet /* tx consumer index */ 119210040Scognet uint32_t tx_cons; 120210040Scognet int tx_cnt; 121210040Scognet 122210040Scognet struct tx_desc_info tx_desc[MACB_MAX_TX_BUFFERS]; 123210040Scognet 124210040Scognet int macb_watchdog_timer; 125210040Scognet 126210040Scognet#define MACB_FLAG_LINK 0x0001 127210040Scognet 128210040Scognet int flags; 129210040Scognet int if_flags; 130210040Scognet struct at91_pmc_clock *clk; 131210040Scognet 132210040Scognet struct macb_chain_data macb_cdata; 133210040Scognet int clock; 134290509Simp 135290509Simp uint32_t use_rmii; /* 0 or USRIO_RMII */ 136210040Scognet}; 137210040Scognet 138210040Scognet#endif 139