1 /* $OpenBSD: if_nfevar.h,v 1.11 2006/02/19 13:57:02 damien Exp $ */ 2 /* $DragonFly: src/sys/dev/netif/nfe/if_nfevar.h,v 1.3 2007/09/10 14:08:28 sephe Exp $ */ 3 4 /* 5 * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #define NFE_IFQ_MAXLEN 64 21 22 struct nfe_tx_data { 23 bus_dmamap_t map; 24 struct mbuf *m; 25 }; 26 27 struct nfe_tx_ring { 28 bus_dma_tag_t tag; 29 bus_dmamap_t map; 30 bus_addr_t physaddr; 31 struct nfe_desc32 *desc32; 32 struct nfe_desc64 *desc64; 33 34 bus_dma_tag_t data_tag; 35 struct nfe_tx_data data[NFE_TX_RING_COUNT]; 36 int queued; 37 int cur; 38 int next; 39 }; 40 41 struct nfe_softc; 42 43 struct nfe_jbuf { 44 struct nfe_softc *sc; 45 struct nfe_rx_ring *ring; 46 int inuse; 47 int slot; 48 caddr_t buf; 49 bus_addr_t physaddr; 50 SLIST_ENTRY(nfe_jbuf) jnext; 51 }; 52 53 struct nfe_rx_data { 54 bus_dmamap_t map; 55 struct mbuf *m; 56 }; 57 58 struct nfe_rx_ring { 59 bus_dma_tag_t tag; 60 bus_dmamap_t map; 61 bus_addr_t physaddr; 62 struct nfe_desc32 *desc32; 63 struct nfe_desc64 *desc64; 64 65 bus_dma_tag_t jtag; 66 bus_dmamap_t jmap; 67 caddr_t jpool; 68 struct nfe_jbuf *jbuf; 69 SLIST_HEAD(, nfe_jbuf) jfreelist; 70 71 bus_dma_tag_t data_tag; 72 bus_dmamap_t data_tmpmap; 73 struct nfe_rx_data *data; 74 int bufsz; 75 int cur; 76 int next; 77 }; 78 79 struct nfe_softc { 80 struct arpcom arpcom; 81 82 int sc_mem_rid; 83 struct resource *sc_mem_res; 84 bus_space_handle_t sc_memh; 85 bus_space_tag_t sc_memt; 86 87 int sc_irq_rid; 88 struct resource *sc_irq_res; 89 void *sc_ih; 90 91 device_t sc_miibus; 92 struct callout sc_tick_ch; 93 void *sc_powerhook; 94 95 int sc_if_flags; 96 u_int sc_flags; 97 #define NFE_JUMBO_SUP 0x01 98 #define NFE_40BIT_ADDR 0x02 99 #define NFE_HW_CSUM 0x04 100 #define NFE_HW_VLAN 0x08 101 #define NFE_USE_JUMBO 0x10 102 103 uint32_t rxtxctl; 104 uint8_t mii_phyaddr; 105 106 struct nfe_tx_ring txq; 107 struct nfe_rx_ring rxq; 108 109 uint32_t sc_irq_enable; 110 int sc_imtime; 111 int sc_rx_ring_count; 112 int sc_debug; 113 struct sysctl_ctx_list sc_sysctl_ctx; 114 struct sysctl_oid *sc_sysctl_tree; 115 116 struct lwkt_serialize sc_jbuf_serializer; 117 }; 118 119 #define NFE_IRQ_ENABLE(sc) \ 120 ((sc)->sc_imtime < 0 ? NFE_IRQ_NOIMTIMER : NFE_IRQ_IMTIMER) 121