lancevar.h (155093) | lancevar.h (158663) |
---|---|
1/* $NetBSD: lancevar.h,v 1.10 2005/12/11 12:21:27 christos Exp $ */ 2 3/*- 4 * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace --- 23 unchanged lines hidden (view full) --- 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 | 1/* $NetBSD: lancevar.h,v 1.10 2005/12/11 12:21:27 christos Exp $ */ 2 3/*- 4 * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace --- 23 unchanged lines hidden (view full) --- 32 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 33 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 34 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 35 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 36 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 * POSSIBILITY OF SUCH DAMAGE. 38 */ 39 |
40/* $FreeBSD: head/sys/dev/le/lancevar.h 155093 2006-01-31 14:48:58Z marius $ */ | 40/* $FreeBSD: head/sys/dev/le/lancevar.h 158663 2006-05-16 21:04:01Z marius $ */ |
41 42#ifndef _DEV_LE_LANCEVAR_H_ 43#define _DEV_LE_LANCEVAR_H_ 44 | 41 42#ifndef _DEV_LE_LANCEVAR_H_ 43#define _DEV_LE_LANCEVAR_H_ 44 |
45#define LE_DRIVER_NAME "le" 46 | |
47extern devclass_t le_devclass; 48 49struct lance_softc { 50 struct ifnet *sc_ifp; 51 struct ifmedia sc_media; 52 struct mtx sc_mtx; 53 54 /* --- 32 unchanged lines hidden (view full) --- 87 * the only supported media is assumed to be "manual". 88 */ 89 const int *sc_supmedia; 90 int sc_nsupmedia; 91 int sc_defaultmedia; 92 93 uint16_t sc_conf3; /* CSR3 value */ 94 | 45extern devclass_t le_devclass; 46 47struct lance_softc { 48 struct ifnet *sc_ifp; 49 struct ifmedia sc_media; 50 struct mtx sc_mtx; 51 52 /* --- 32 unchanged lines hidden (view full) --- 85 * the only supported media is assumed to be "manual". 86 */ 87 const int *sc_supmedia; 88 int sc_nsupmedia; 89 int sc_defaultmedia; 90 91 uint16_t sc_conf3; /* CSR3 value */ 92 |
95 void *sc_mem; /* base address of RAM -- CPU's view */ 96 u_long sc_addr; /* base address of RAM -- LANCE's view */ | 93 void *sc_mem; /* base address of RAM - CPU's view */ 94 bus_addr_t sc_addr; /* base address of RAM - LANCE's view */ |
97 | 95 |
98 u_long sc_memsize; /* size of RAM */ | 96 bus_size_t sc_memsize; /* size of RAM */ |
99 100 int sc_nrbuf; /* number of receive buffers */ 101 int sc_ntbuf; /* number of transmit buffers */ 102 int sc_last_rd; 103 int sc_first_td; 104 int sc_last_td; 105 int sc_no_td; 106 --- 19 unchanged lines hidden (view full) --- 126#define LE_LOCK_INIT(_sc, _name) \ 127 mtx_init(&(_sc)->sc_mtx, _name, MTX_NETWORK_LOCK, MTX_DEF) 128#define LE_LOCK_INITIALIZED(_sc) mtx_initialized(&(_sc)->sc_mtx) 129#define LE_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) 130#define LE_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) 131#define LE_LOCK_ASSERT(_sc, _what) mtx_assert(&(_sc)->sc_mtx, (_what)) 132#define LE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_mtx) 133 | 97 98 int sc_nrbuf; /* number of receive buffers */ 99 int sc_ntbuf; /* number of transmit buffers */ 100 int sc_last_rd; 101 int sc_first_td; 102 int sc_last_td; 103 int sc_no_td; 104 --- 19 unchanged lines hidden (view full) --- 124#define LE_LOCK_INIT(_sc, _name) \ 125 mtx_init(&(_sc)->sc_mtx, _name, MTX_NETWORK_LOCK, MTX_DEF) 126#define LE_LOCK_INITIALIZED(_sc) mtx_initialized(&(_sc)->sc_mtx) 127#define LE_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) 128#define LE_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) 129#define LE_LOCK_ASSERT(_sc, _what) mtx_assert(&(_sc)->sc_mtx, (_what)) 130#define LE_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_mtx) 131 |
132/* 133 * Unfortunately, manual byte swapping is only necessary for the PCnet-PCI 134 * variants but not for the original LANCE or ILACC so we cannot do this 135 * with #ifdefs resolved at compile time. 136 */ |
|
134#define LE_HTOLE16(v) (((sc)->sc_flags & LE_BSWAP) ? htole16(v) : (v)) 135#define LE_HTOLE32(v) (((sc)->sc_flags & LE_BSWAP) ? htole32(v) : (v)) 136#define LE_LE16TOH(v) (((sc)->sc_flags & LE_BSWAP) ? le16toh(v) : (v)) 137#define LE_LE32TOH(v) (((sc)->sc_flags & LE_BSWAP) ? le32toh(v) : (v)) 138 139int lance_config(struct lance_softc *, const char*, int); 140void lance_attach(struct lance_softc *); 141void lance_detach(struct lance_softc *); 142void lance_suspend(struct lance_softc *); 143void lance_resume(struct lance_softc *); 144void lance_init_locked(struct lance_softc *); 145int lance_put(struct lance_softc *, int, struct mbuf *); | 137#define LE_HTOLE16(v) (((sc)->sc_flags & LE_BSWAP) ? htole16(v) : (v)) 138#define LE_HTOLE32(v) (((sc)->sc_flags & LE_BSWAP) ? htole32(v) : (v)) 139#define LE_LE16TOH(v) (((sc)->sc_flags & LE_BSWAP) ? le16toh(v) : (v)) 140#define LE_LE32TOH(v) (((sc)->sc_flags & LE_BSWAP) ? le32toh(v) : (v)) 141 142int lance_config(struct lance_softc *, const char*, int); 143void lance_attach(struct lance_softc *); 144void lance_detach(struct lance_softc *); 145void lance_suspend(struct lance_softc *); 146void lance_resume(struct lance_softc *); 147void lance_init_locked(struct lance_softc *); 148int lance_put(struct lance_softc *, int, struct mbuf *); |
146void lance_read(struct lance_softc *, int, int); | 149struct mbuf *lance_get(struct lance_softc *, int, int); |
147void lance_setladrf(struct lance_softc *, u_int16_t *); 148 149/* 150 * The following functions are only useful on certain CPU/bus 151 * combinations. They should be written in assembly language for 152 * maximum efficiency, but machine-independent versions are provided 153 * for drivers that have not yet been optimized. 154 */ --- 6 unchanged lines hidden (view full) --- 161void lance_copyfrombuf_gap2(struct lance_softc *, void *, int, int); 162void lance_zerobuf_gap2(struct lance_softc *, int, int); 163 164void lance_copytobuf_gap16(struct lance_softc *, void *, int, int); 165void lance_copyfrombuf_gap16(struct lance_softc *, void *, int, int); 166void lance_zerobuf_gap16(struct lance_softc *, int, int); 167#endif /* Example only */ 168 | 150void lance_setladrf(struct lance_softc *, u_int16_t *); 151 152/* 153 * The following functions are only useful on certain CPU/bus 154 * combinations. They should be written in assembly language for 155 * maximum efficiency, but machine-independent versions are provided 156 * for drivers that have not yet been optimized. 157 */ --- 6 unchanged lines hidden (view full) --- 164void lance_copyfrombuf_gap2(struct lance_softc *, void *, int, int); 165void lance_zerobuf_gap2(struct lance_softc *, int, int); 166 167void lance_copytobuf_gap16(struct lance_softc *, void *, int, int); 168void lance_copyfrombuf_gap16(struct lance_softc *, void *, int, int); 169void lance_zerobuf_gap16(struct lance_softc *, int, int); 170#endif /* Example only */ 171 |
172/* 173 * Compare two Ether/802 addresses for equality, inlined and 174 * unrolled for speed. Use this like memcmp(). 175 * 176 * XXX: Add <machine/inlines.h> for stuff like this? 177 * XXX: or maybe add it to libkern.h instead? 178 * 179 * "I'd love to have an inline assembler version of this." 180 * XXX: Who wanted that? mycroft? I wrote one, but this 181 * version in C is as good as hand-coded assembly. -gwr 182 * 183 * Please do NOT tweak this without looking at the actual 184 * assembly code generated before and after your tweaks! 185 */ 186static inline uint16_t 187ether_cmp(void *one, void *two) 188{ 189 uint16_t *a = (u_short *)one; 190 uint16_t *b = (u_short *)two; 191 uint16_t diff; 192 193#ifdef m68k 194 /* 195 * The post-increment-pointer form produces the best 196 * machine code for m68k. This was carefully tuned 197 * so it compiles to just 8 short (2-byte) op-codes! 198 */ 199 diff = *a++ - *b++; 200 diff |= *a++ - *b++; 201 diff |= *a++ - *b++; 202#else 203 /* 204 * Most modern CPUs do better with a single expresion. 205 * Note that short-cut evaluation is NOT helpful here, 206 * because it just makes the code longer, not faster! 207 */ 208 diff = (a[0] - b[0]) | (a[1] - b[1]) | (a[2] - b[2]); 209#endif 210 211 return (diff); 212} 213 |
|
169#endif /* _DEV_LE_LANCEVAR_H_ */ | 214#endif /* _DEV_LE_LANCEVAR_H_ */ |