1 1.6 skrll /* $NetBSD: if_cemacvar.h,v 1.7 2024/10/15 00:58:15 lloyd Exp $ */ 2 1.1 hkenken /*- 3 1.1 hkenken * Copyright (c) 2015 Genetec Corporation. All rights reserved. 4 1.1 hkenken * Written by Hashimoto Kenichi for Genetec Corporation. 5 1.1 hkenken * 6 1.1 hkenken * Redistribution and use in source and binary forms, with or without 7 1.1 hkenken * modification, are permitted provided that the following conditions 8 1.1 hkenken * are met: 9 1.1 hkenken * 1. Redistributions of source code must retain the above copyright 10 1.1 hkenken * notice, this list of conditions and the following disclaimer. 11 1.1 hkenken * 2. Redistributions in binary form must reproduce the above copyright 12 1.1 hkenken * notice, this list of conditions and the following disclaimer in the 13 1.1 hkenken * documentation and/or other materials provided with the distribution. 14 1.1 hkenken * 15 1.1 hkenken * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 hkenken * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 hkenken * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 hkenken * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 hkenken * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 hkenken * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 hkenken * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 hkenken * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 hkenken * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 hkenken * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 hkenken * POSSIBILITY OF SUCH DAMAGE. 26 1.1 hkenken */ 27 1.1 hkenken 28 1.1 hkenken #ifndef _IF_CEMACVAR_H_ 29 1.1 hkenken #define _IF_CEMACVAR_H_ 30 1.1 hkenken 31 1.4 skrll #include <net/if.h> 32 1.4 skrll #include <net/if_media.h> 33 1.4 skrll #include <net/if_ether.h> 34 1.4 skrll #include <net/if_media.h> 35 1.4 skrll 36 1.4 skrll #include <dev/mii/miivar.h> 37 1.4 skrll 38 1.4 skrll #define RX_QLEN 64 39 1.4 skrll #define TX_QLEN 2 /* I'm very sorry but that's where we can get */ 40 1.4 skrll 41 1.4 skrll struct cemac_qmeta { 42 1.4 skrll struct mbuf *m; 43 1.4 skrll bus_dmamap_t m_dmamap; 44 1.4 skrll }; 45 1.4 skrll 46 1.4 skrll struct cemac_softc { 47 1.4 skrll device_t sc_dev; 48 1.4 skrll bus_space_tag_t sc_iot; 49 1.4 skrll bus_space_handle_t sc_ioh; 50 1.4 skrll bus_dma_tag_t sc_dmat; 51 1.4 skrll uint8_t sc_enaddr[ETHER_ADDR_LEN]; 52 1.4 skrll struct ethercom sc_ethercom; 53 1.4 skrll mii_data_t sc_mii; 54 1.7 lloyd int sc_phyno; 55 1.4 skrll 56 1.4 skrll void *rbqpage; 57 1.4 skrll unsigned rbqlen; 58 1.4 skrll bus_addr_t rbqpage_dsaddr; 59 1.4 skrll bus_dmamap_t rbqpage_dmamap; 60 1.4 skrll void *tbqpage; 61 1.4 skrll unsigned tbqlen; 62 1.4 skrll bus_addr_t tbqpage_dsaddr; 63 1.4 skrll bus_dmamap_t tbqpage_dmamap; 64 1.4 skrll 65 1.4 skrll volatile struct eth_dsc *RDSC; 66 1.4 skrll int rxqi; 67 1.4 skrll struct cemac_qmeta rxq[RX_QLEN]; 68 1.4 skrll volatile struct eth_dsc *TDSC; 69 1.4 skrll int txqi, txqc; 70 1.4 skrll struct cemac_qmeta txq[TX_QLEN]; 71 1.4 skrll callout_t cemac_tick_ch; 72 1.4 skrll 73 1.4 skrll unsigned cemac_flags; 74 1.4 skrll #define CEMAC_FLAG_GEM __BIT(0) 75 1.5 skrll 76 1.6 skrll kmutex_t *sc_mcast_lock; /* m: lock for SIOCADD/DELMULTI */ 77 1.6 skrll kmutex_t *sc_intr_lock; /* i: lock for interrupt operations */ 78 1.6 skrll 79 1.6 skrll u_short sc_if_flags; /* m: if_flags cache */ 80 1.6 skrll time_t sc_tx_lastsent; /* i: time of last tx */ 81 1.6 skrll bool sc_txbusy; /* i: no Tx because down or busy */ 82 1.6 skrll bool sc_stopping; /* i: ignore intr because down */ 83 1.6 skrll bool sc_tx_sending; /* i: expecting tx complete irq */ 84 1.6 skrll bool sc_trigger_reset; /* i */ 85 1.6 skrll 86 1.6 skrll struct workqueue *sc_reset_wq; 87 1.6 skrll struct work sc_reset_work; /* i */ 88 1.6 skrll volatile unsigned sc_reset_pending; 89 1.4 skrll }; 90 1.4 skrll 91 1.2 skrll int cemac_intr(void *); 92 1.1 hkenken 93 1.4 skrll void cemac_attach_common(struct cemac_softc *); 94 1.1 hkenken 95 1.1 hkenken 96 1.1 hkenken #endif /* _IF_CEMACVAR_H_ */ 97