1 1.16 riastrad /* $NetBSD: lancevar.h,v 1.16 2015/04/13 16:33:24 riastradh Exp $ */ 2 1.1 drochner 3 1.1 drochner /*- 4 1.2 mycroft * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. 5 1.1 drochner * All rights reserved. 6 1.1 drochner * 7 1.1 drochner * This code is derived from software contributed to The NetBSD Foundation 8 1.2 mycroft * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace 9 1.2 mycroft * Simulation Facility, NASA Ames Research Center. 10 1.1 drochner * 11 1.1 drochner * Redistribution and use in source and binary forms, with or without 12 1.1 drochner * modification, are permitted provided that the following conditions 13 1.1 drochner * are met: 14 1.1 drochner * 1. Redistributions of source code must retain the above copyright 15 1.1 drochner * notice, this list of conditions and the following disclaimer. 16 1.1 drochner * 2. Redistributions in binary form must reproduce the above copyright 17 1.1 drochner * notice, this list of conditions and the following disclaimer in the 18 1.1 drochner * documentation and/or other materials provided with the distribution. 19 1.1 drochner * 20 1.1 drochner * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 1.1 drochner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 1.1 drochner * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 1.1 drochner * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 1.1 drochner * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 1.1 drochner * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 1.1 drochner * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 1.1 drochner * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 1.1 drochner * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 1.1 drochner * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 1.1 drochner * POSSIBILITY OF SUCH DAMAGE. 31 1.1 drochner */ 32 1.1 drochner 33 1.16 riastrad #include <sys/rndsource.h> 34 1.1 drochner 35 1.1 drochner struct lance_softc { 36 1.11 tsutsui device_t sc_dev; /* base device glue */ 37 1.1 drochner struct ethercom sc_ethercom; /* Ethernet common part */ 38 1.1 drochner struct ifmedia sc_media; /* our supported media */ 39 1.1 drochner 40 1.1 drochner /* 41 1.1 drochner * Memory functions: 42 1.1 drochner * 43 1.1 drochner * copy to/from descriptor 44 1.1 drochner * copy to/from buffer 45 1.1 drochner * zero bytes in buffer 46 1.1 drochner */ 47 1.1 drochner void (*sc_copytodesc) 48 1.8 perry (struct lance_softc *, void *, int, int); 49 1.1 drochner void (*sc_copyfromdesc) 50 1.8 perry (struct lance_softc *, void *, int, int); 51 1.1 drochner void (*sc_copytobuf) 52 1.8 perry (struct lance_softc *, void *, int, int); 53 1.1 drochner void (*sc_copyfrombuf) 54 1.8 perry (struct lance_softc *, void *, int, int); 55 1.1 drochner void (*sc_zerobuf) 56 1.8 perry (struct lance_softc *, int, int); 57 1.1 drochner 58 1.1 drochner /* 59 1.1 drochner * Machine-dependent functions: 60 1.1 drochner * 61 1.1 drochner * read/write CSR 62 1.1 drochner * hardware reset hook - may be NULL 63 1.1 drochner * hardware init hook - may be NULL 64 1.1 drochner * no carrier hook - may be NULL 65 1.1 drochner * media change hook - may be NULL 66 1.1 drochner */ 67 1.11 tsutsui uint16_t (*sc_rdcsr) 68 1.11 tsutsui (struct lance_softc *, uint16_t); 69 1.1 drochner void (*sc_wrcsr) 70 1.11 tsutsui (struct lance_softc *, uint16_t, uint16_t); 71 1.8 perry void (*sc_hwreset)(struct lance_softc *); 72 1.8 perry void (*sc_hwinit)(struct lance_softc *); 73 1.8 perry void (*sc_nocarrier)(struct lance_softc *); 74 1.8 perry int (*sc_mediachange)(struct lance_softc *); 75 1.8 perry void (*sc_mediastatus)(struct lance_softc *, struct ifmediareq *); 76 1.1 drochner 77 1.1 drochner /* 78 1.1 drochner * Media-supported by this interface. If this is NULL, 79 1.1 drochner * the only supported media is assumed to be "manual". 80 1.1 drochner */ 81 1.5 jdolecek const int *sc_supmedia; 82 1.1 drochner int sc_nsupmedia; 83 1.1 drochner int sc_defaultmedia; 84 1.1 drochner 85 1.1 drochner /* PCnet bit to use software selection of a port */ 86 1.1 drochner int sc_initmodemedia; 87 1.1 drochner 88 1.1 drochner int sc_havecarrier; /* carrier status */ 89 1.1 drochner 90 1.11 tsutsui uint16_t sc_conf3; /* CSR3 value */ 91 1.11 tsutsui uint16_t sc_saved_csr0;/* Value of csr0 at time of interrupt */ 92 1.1 drochner 93 1.1 drochner void *sc_mem; /* base address of RAM -- CPU's view */ 94 1.1 drochner u_long sc_addr; /* base address of RAM -- LANCE's view */ 95 1.1 drochner 96 1.1 drochner u_long sc_memsize; /* size of RAM */ 97 1.1 drochner 98 1.1 drochner int sc_nrbuf; /* number of receive buffers */ 99 1.1 drochner int sc_ntbuf; /* number of transmit buffers */ 100 1.1 drochner int sc_last_rd; 101 1.1 drochner int sc_first_td, sc_last_td, sc_no_td; 102 1.1 drochner 103 1.1 drochner int sc_initaddr; 104 1.1 drochner int sc_rmdaddr; 105 1.1 drochner int sc_tmdaddr; 106 1.1 drochner int *sc_rbufaddr; 107 1.1 drochner int *sc_tbufaddr; 108 1.1 drochner 109 1.1 drochner #ifdef LEDEBUG 110 1.1 drochner int sc_debug; 111 1.1 drochner #endif 112 1.11 tsutsui uint8_t sc_enaddr[ETHER_ADDR_LEN]; 113 1.11 tsutsui uint8_t sc_pad[2]; 114 1.14 tls krndsource_t rnd_source; 115 1.1 drochner 116 1.8 perry void (*sc_meminit)(struct lance_softc *); 117 1.8 perry void (*sc_start)(struct ifnet *); 118 1.1 drochner }; 119 1.1 drochner 120 1.8 perry void lance_config(struct lance_softc *); 121 1.8 perry void lance_reset(struct lance_softc *); 122 1.8 perry int lance_init(struct ifnet *); 123 1.8 perry int lance_put(struct lance_softc *, int, struct mbuf *); 124 1.9 perry void lance_read(struct lance_softc *, int, int); 125 1.11 tsutsui void lance_setladrf(struct ethercom *, uint16_t *); 126 1.1 drochner 127 1.1 drochner /* 128 1.7 wiz * The following functions are only useful on certain CPU/bus 129 1.1 drochner * combinations. They should be written in assembly language for 130 1.1 drochner * maximum efficiency, but machine-independent versions are provided 131 1.1 drochner * for drivers that have not yet been optimized. 132 1.1 drochner */ 133 1.8 perry void lance_copytobuf_contig(struct lance_softc *, void *, int, int); 134 1.8 perry void lance_copyfrombuf_contig(struct lance_softc *, void *, int, int); 135 1.8 perry void lance_zerobuf_contig(struct lance_softc *, int, int); 136 1.1 drochner 137 1.1 drochner #if 0 /* Example only - see lance.c */ 138 1.8 perry void lance_copytobuf_gap2(struct lance_softc *, void *, int, int); 139 1.8 perry void lance_copyfrombuf_gap2(struct lance_softc *, void *, int, int); 140 1.8 perry void lance_zerobuf_gap2(struct lance_softc *, int, int); 141 1.8 perry 142 1.8 perry void lance_copytobuf_gap16(struct lance_softc *, void *, int, int); 143 1.8 perry void lance_copyfrombuf_gap16(struct lance_softc *, void *, int, int); 144 1.8 perry void lance_zerobuf_gap16(struct lance_softc *, int, int); 145 1.1 drochner #endif /* Example only */ 146