1 /* $NetBSD: if_enetvar.h,v 1.2 2017/06/09 18:14:59 ryo Exp $ */ 2 3 /* 4 * Copyright (c) 2014 Ryo Shimizu <ryo@nerv.org> 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 25 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef _ARM_IMX_IF_ENETVAR_H_ 30 #define _ARM_IMX_IF_ENETVAR_H_ 31 32 #include <sys/rndsource.h> 33 #include <net/if.h> 34 #include <net/if_media.h> 35 #include <net/if_ether.h> 36 #include <dev/mii/miivar.h> 37 38 #define ENET_TX_RING_CNT 256 39 #define ENET_RX_RING_CNT 256 40 41 struct enet_txsoft { 42 struct mbuf *txs_mbuf; /* head of our mbuf chain */ 43 bus_dmamap_t txs_dmamap; /* our DMA map */ 44 }; 45 46 struct enet_rxsoft { 47 struct mbuf *rxs_mbuf; /* head of our mbuf chain */ 48 bus_dmamap_t rxs_dmamap; /* our DMA map */ 49 }; 50 51 struct enet_softc { 52 device_t sc_dev; 53 54 bus_addr_t sc_addr; 55 bus_space_tag_t sc_iot; 56 bus_space_handle_t sc_ioh; 57 bus_dma_tag_t sc_dmat; 58 59 int sc_unit; 60 int sc_imxtype; 61 int sc_rgmii; 62 unsigned int sc_pllclock; 63 64 /* interrupts */ 65 void *sc_ih; 66 void *sc_ih2; /* for i.MX7 */ 67 void *sc_ih3; /* for i.MX7 */ 68 callout_t sc_tick_ch; 69 bool sc_stopping; 70 71 /* TX */ 72 struct enet_txdesc *sc_txdesc_ring; /* [ENET_TX_RING_CNT] */ 73 bus_dmamap_t sc_txdesc_dmamap; 74 struct enet_rxdesc *sc_rxdesc_ring; /* [ENET_RX_RING_CNT] */ 75 bus_dmamap_t sc_rxdesc_dmamap; 76 struct enet_txsoft sc_txsoft[ENET_TX_RING_CNT]; 77 int sc_tx_considx; 78 int sc_tx_prodidx; 79 int sc_tx_free; 80 81 /* RX */ 82 struct enet_rxsoft sc_rxsoft[ENET_RX_RING_CNT]; 83 int sc_rx_readidx; 84 85 /* misc */ 86 int sc_if_flags; /* local copy of if_flags */ 87 int sc_flowflags; /* 802.3x flow control flags */ 88 struct ethercom sc_ethercom; /* interface info */ 89 struct mii_data sc_mii; 90 uint8_t sc_enaddr[ETHER_ADDR_LEN]; 91 krndsource_t sc_rnd_source; 92 93 #ifdef ENET_EVENT_COUNTER 94 struct evcnt sc_ev_t_drop; 95 struct evcnt sc_ev_t_packets; 96 struct evcnt sc_ev_t_bc_pkt; 97 struct evcnt sc_ev_t_mc_pkt; 98 struct evcnt sc_ev_t_crc_align; 99 struct evcnt sc_ev_t_undersize; 100 struct evcnt sc_ev_t_oversize; 101 struct evcnt sc_ev_t_frag; 102 struct evcnt sc_ev_t_jab; 103 struct evcnt sc_ev_t_col; 104 struct evcnt sc_ev_t_p64; 105 struct evcnt sc_ev_t_p65to127n; 106 struct evcnt sc_ev_t_p128to255n; 107 struct evcnt sc_ev_t_p256to511; 108 struct evcnt sc_ev_t_p512to1023; 109 struct evcnt sc_ev_t_p1024to2047; 110 struct evcnt sc_ev_t_p_gte2048; 111 struct evcnt sc_ev_t_octets; 112 struct evcnt sc_ev_r_packets; 113 struct evcnt sc_ev_r_bc_pkt; 114 struct evcnt sc_ev_r_mc_pkt; 115 struct evcnt sc_ev_r_crc_align; 116 struct evcnt sc_ev_r_undersize; 117 struct evcnt sc_ev_r_oversize; 118 struct evcnt sc_ev_r_frag; 119 struct evcnt sc_ev_r_jab; 120 struct evcnt sc_ev_r_p64; 121 struct evcnt sc_ev_r_p65to127; 122 struct evcnt sc_ev_r_p128to255; 123 struct evcnt sc_ev_r_p256to511; 124 struct evcnt sc_ev_r_p512to1023; 125 struct evcnt sc_ev_r_p1024to2047; 126 struct evcnt sc_ev_r_p_gte2048; 127 struct evcnt sc_ev_r_octets; 128 #endif /* ENET_EVENT_COUNTER */ 129 }; 130 131 void enet_attach_common(device_t, bus_space_tag_t, bus_dma_tag_t, 132 bus_addr_t, bus_size_t, int); 133 int enet_match(device_t, cfdata_t, void *); 134 void enet_attach(device_t, device_t, void *); 135 136 #endif /* _ARM_IMX_IF_ENETVAR_H_ */ 137