diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-12-26 08:07:34 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-12-26 08:07:34 +0000 |
commit | 88c1b1eb6181af5c7fa239ce828c50f4b6d40acc (patch) | |
tree | 2f97b9ae0e69133e5eddc148c16bacb33e5bf1fd /sys | |
parent | b16d3a783d52284949766e35485749cd6ee468cc (diff) |
busify; support isapnp lance cards
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/isa/files.isa | 3 | ||||
-rw-r--r-- | sys/dev/isa/files.isapnp | 5 | ||||
-rw-r--r-- | sys/dev/isa/if_le.c | 118 | ||||
-rw-r--r-- | sys/dev/isa/if_le_isa.c | 144 | ||||
-rw-r--r-- | sys/dev/isa/if_le_isapnp.c | 146 | ||||
-rw-r--r-- | sys/dev/isa/if_levar.h | 10 |
6 files changed, 350 insertions, 76 deletions
diff --git a/sys/dev/isa/files.isa b/sys/dev/isa/files.isa index e809563c446..3e719524425 100644 --- a/sys/dev/isa/files.isa +++ b/sys/dev/isa/files.isa @@ -1,4 +1,4 @@ -# $OpenBSD: files.isa,v 1.37 1997/12/25 14:14:54 downsj Exp $ +# $OpenBSD: files.isa,v 1.38 1997/12/26 08:07:31 deraadt Exp $ # $NetBSD: files.isa,v 1.21 1996/05/16 03:45:55 mycroft Exp $ # # Config.new file and device description for machine-independent ISA code. @@ -205,6 +205,7 @@ file dev/isa/if_ex.c ex needs-flag # (BICC Isolan, NE2100, DEPCA) # device declaration in sys/conf/files attach le at isa with le_isa +file dev/isa/if_le.c le file dev/isa/if_le_isa.c le_isa # diff --git a/sys/dev/isa/files.isapnp b/sys/dev/isa/files.isapnp index a9f49f2455c..7f8a4281ace 100644 --- a/sys/dev/isa/files.isapnp +++ b/sys/dev/isa/files.isapnp @@ -1,4 +1,4 @@ -# $OpenBSD: files.isapnp,v 1.3 1997/12/25 14:14:55 downsj Exp $ +# $OpenBSD: files.isapnp,v 1.4 1997/12/26 08:07:31 deraadt Exp $ # $NetBSD: files.isapnp,v 1.7 1997/10/16 17:16:36 matt Exp $ # # Config file and device description for machine-independent ISAPnP code. @@ -21,3 +21,6 @@ file dev/isa/isapnpres.c isapnp attach sb at isapnp with sb_isapnp file dev/isa/sb_isapnp.c sb & (sb_isa | sb_isapnp) needs-flag + +attach le at isapnp with le_isapnp +file dev/isa/if_le_isapnp.c le_isapnp diff --git a/sys/dev/isa/if_le.c b/sys/dev/isa/if_le.c new file mode 100644 index 00000000000..91141972583 --- /dev/null +++ b/sys/dev/isa/if_le.c @@ -0,0 +1,118 @@ +/* $OpenBSD: if_le.c,v 1.12 1997/12/26 08:07:32 deraadt Exp $ */ +/* $NetBSD: if_le_isa.c,v 1.2 1996/05/12 23:52:56 mycroft Exp $ */ + +/*- + * Copyright (c) 1995 Charles M. Hannum. All rights reserved. + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Ralph Campbell and Rick Macklem. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)if_le.c 8.2 (Berkeley) 11/16/93 + */ + +#include "bpfilter.h" +#include "isadma.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/mbuf.h> +#include <sys/syslog.h> +#include <sys/socket.h> +#include <sys/device.h> + +#include <net/if.h> + +#ifdef INET +#include <netinet/in.h> +#include <netinet/if_ether.h> +#endif + +#include <vm/vm.h> + +#include <machine/cpu.h> +#include <machine/intr.h> +#include <machine/pio.h> + +#include <dev/isa/isareg.h> +#include <dev/isa/isavar.h> +#include <dev/isa/isadmavar.h> +#include <i386/isa/isa_machdep.h> + +#include <dev/ic/am7990reg.h> +#include <dev/ic/am7990var.h> + +#include <dev/isa/if_levar.h> + +hide void +le_isa_wrcsr(sc, port, val) + struct am7990_softc *sc; + u_int16_t port, val; +{ + struct le_softc *lesc = (struct le_softc *)sc; + bus_space_tag_t iot = lesc->sc_iot; + bus_space_handle_t ioh = lesc->sc_ioh; + + bus_space_write_2(iot, ioh, lesc->sc_rap, port); + bus_space_write_2(iot, ioh, lesc->sc_rdp, val); +} + +hide u_int16_t +le_isa_rdcsr(sc, port) + struct am7990_softc *sc; + u_int16_t port; +{ + struct le_softc *lesc = (struct le_softc *)sc; + bus_space_tag_t iot = lesc->sc_iot; + bus_space_handle_t ioh = lesc->sc_ioh; + u_int16_t val; + + bus_space_write_2(iot, ioh, lesc->sc_rap, port); + val = bus_space_read_2(iot, ioh, lesc->sc_rdp); + return (val); +} + + +/* + * Controller interrupt. + */ +int +le_isa_intredge(arg) + void *arg; +{ + + if (am7990_intr(arg) == 0) + return (0); + for (;;) + if (am7990_intr(arg) == 0) + return (1); +} diff --git a/sys/dev/isa/if_le_isa.c b/sys/dev/isa/if_le_isa.c index 83661685210..ac87abdf5bf 100644 --- a/sys/dev/isa/if_le_isa.c +++ b/sys/dev/isa/if_le_isa.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_le_isa.c,v 1.8 1997/08/08 08:23:32 downsj Exp $ */ +/* $OpenBSD: if_le_isa.c,v 1.9 1997/12/26 08:07:32 deraadt Exp $ */ /* $NetBSD: if_le_isa.c,v 1.2 1996/05/12 23:52:56 mycroft Exp $ */ /*- @@ -88,33 +88,6 @@ int ne2100_isa_probe __P((struct le_softc *, struct isa_attach_args *)); int bicc_isa_probe __P((struct le_softc *, struct isa_attach_args *)); int lance_isa_probe __P((struct am7990_softc *)); -int le_isa_intredge __P((void *)); - -hide void le_isa_wrcsr __P((struct am7990_softc *, u_int16_t, u_int16_t)); -hide u_int16_t le_isa_rdcsr __P((struct am7990_softc *, u_int16_t)); - -hide void -le_isa_wrcsr(sc, port, val) - struct am7990_softc *sc; - u_int16_t port, val; -{ - - outw(((struct le_softc *)sc)->sc_rap, port); - outw(((struct le_softc *)sc)->sc_rdp, val); -} - -hide u_int16_t -le_isa_rdcsr(sc, port) - struct am7990_softc *sc; - u_int16_t port; -{ - u_int16_t val; - - outw(((struct le_softc *)sc)->sc_rap, port); - val = inw(((struct le_softc *)sc)->sc_rdp); - return (val); -} - int le_isa_probe(parent, match, aux) struct device *parent; @@ -146,21 +119,30 @@ depca_isa_probe(lesc, ia) struct isa_attach_args *ia; { struct am7990_softc *sc = &lesc->sc_am7990; - int iobase = ia->ia_iobase, port; + bus_space_tag_t iot = lesc->sc_iot; + bus_space_handle_t ioh = lesc->sc_ioh; + int port; + #if 0 u_long sum, rom_sum; u_char x; #endif int i; - lesc->sc_rap = iobase + DEPCA_RAP; - lesc->sc_rdp = iobase + DEPCA_RDP; + if (bus_space_map(iot, ia->ia_iobase, ia->ia_iosize, 0, &ioh)) + return (0); + lesc->sc_iot = iot; + lesc->sc_ioh = ioh; + lesc->sc_rap = DEPCA_RAP; + lesc->sc_rdp = DEPCA_RDP; lesc->sc_card = DEPCA; - if (lance_isa_probe(sc) == 0) + if (lance_isa_probe(sc) == 0) { + bus_space_unmap(iot, ioh, ia->ia_iosize); return 0; + } - outb(iobase + DEPCA_CSR, DEPCA_CSR_DUM); + bus_space_write_1(iot, ioh, DEPCA_CSR, DEPCA_CSR_DUM); /* * Extract the physical MAC address from the ROM. @@ -175,26 +157,34 @@ depca_isa_probe(lesc, ia) * It appears that the PROM can be at one of two locations, so * we just try both. */ - port = iobase + DEPCA_ADP; + port = DEPCA_ADP; for (i = 0; i < 32; i++) - if (inb(port) == 0xff && inb(port) == 0x00 && - inb(port) == 0x55 && inb(port) == 0xaa && - inb(port) == 0xff && inb(port) == 0x00 && - inb(port) == 0x55 && inb(port) == 0xaa) + if (bus_space_read_1(iot, ioh, port) == 0xff && + bus_space_read_1(iot, ioh, port) == 0x00 && + bus_space_read_1(iot, ioh, port) == 0x55 && + bus_space_read_1(iot, ioh, port) == 0xaa && + bus_space_read_1(iot, ioh, port) == 0xff && + bus_space_read_1(iot, ioh, port) == 0x00 && + bus_space_read_1(iot, ioh, port) == 0x55 && + bus_space_read_1(iot, ioh, port) == 0xaa) goto found; - port = iobase + DEPCA_ADP + 1; + port = DEPCA_ADP + 1; for (i = 0; i < 32; i++) - if (inb(port) == 0xff && inb(port) == 0x00 && - inb(port) == 0x55 && inb(port) == 0xaa && - inb(port) == 0xff && inb(port) == 0x00 && - inb(port) == 0x55 && inb(port) == 0xaa) + if (bus_space_read_1(iot, ioh, port) == 0xff && + bus_space_read_1(iot, ioh, port) == 0x00 && + bus_space_read_1(iot, ioh, port) == 0x55 && + bus_space_read_1(iot, ioh, port) == 0xaa && + bus_space_read_1(iot, ioh, port) == 0xff && + bus_space_read_1(iot, ioh, port) == 0x00 && + bus_space_read_1(iot, ioh, port) == 0x55 && + bus_space_read_1(iot, ioh, port) == 0xaa) goto found; printf("%s: address not found\n", sc->sc_dev.dv_xname); return 0; found: for (i = 0; i < sizeof(sc->sc_arpcom.ac_enaddr); i++) - sc->sc_arpcom.ac_enaddr[i] = inb(port); + sc->sc_arpcom.ac_enaddr[i] = bus_space_read_1(iot, ioh, port); #if 0 sum = @@ -207,20 +197,22 @@ found: sum = (sum & 0xffff) + (sum >> 16); sum = (sum & 0xffff) + (sum >> 16); - rom_sum = inb(port); - rom_sum |= inb(port) << 8; + rom_sum = bus_space_read_1(iot, ioh, port); + rom_sum |= bus_space_read_1(iot, ioh, port << 8); if (sum != rom_sum) { printf("%s: checksum mismatch; calculated %04x != read %04x", sc->sc_dev.dv_xname, sum, rom_sum); + bus_space_unmap(iot, ioh, ia->ia_iosize); return 0; } #endif - outb(iobase + DEPCA_CSR, DEPCA_CSR_NORMAL); + bus_space_write_1(iot, ioh, DEPCA_CSR, DEPCA_CSR_NORMAL); ia->ia_iosize = 16; ia->ia_drq = DRQUNK; + bus_space_unmap(iot, ioh, ia->ia_iosize); return 1; } @@ -230,23 +222,31 @@ ne2100_isa_probe(lesc, ia) struct isa_attach_args *ia; { struct am7990_softc *sc = &lesc->sc_am7990; - int iobase = ia->ia_iobase; + bus_space_tag_t iot = lesc->sc_iot; + bus_space_handle_t ioh = lesc->sc_ioh; int i; - lesc->sc_rap = iobase + NE2100_RAP; - lesc->sc_rdp = iobase + NE2100_RDP; + if (bus_space_map(iot, ia->ia_iobase, ia->ia_iosize, 0, &ioh)) + return (0); + lesc->sc_iot = iot; + lesc->sc_ioh = ioh; + lesc->sc_rap = NE2100_RAP; + lesc->sc_rdp = NE2100_RDP; lesc->sc_card = NE2100; - if (lance_isa_probe(sc) == 0) + if (lance_isa_probe(sc) == 0) { + bus_space_unmap(iot, ioh, ia->ia_iosize); return 0; + } /* * Extract the physical MAC address from the ROM. */ for (i = 0; i < sizeof(sc->sc_arpcom.ac_enaddr); i++) - sc->sc_arpcom.ac_enaddr[i] = inb(iobase + i); + sc->sc_arpcom.ac_enaddr[i] = bus_space_read_1(iot, ioh, i); ia->ia_iosize = 24; + bus_space_unmap(iot, ioh, ia->ia_iosize); return 1; } @@ -256,23 +256,31 @@ bicc_isa_probe(lesc, ia) struct isa_attach_args *ia; { struct am7990_softc *sc = &lesc->sc_am7990; - int iobase = ia->ia_iobase; + bus_space_handle_t ioh; + bus_space_tag_t iot = ia->ia_iot; int i; - lesc->sc_rap = iobase + BICC_RAP; - lesc->sc_rdp = iobase + BICC_RDP; + if (bus_space_map(iot, ia->ia_iobase, ia->ia_iosize, 0, &ioh)) + return (0); + lesc->sc_iot = iot; + lesc->sc_ioh = ioh; + lesc->sc_rap = BICC_RAP; + lesc->sc_rdp = BICC_RDP; lesc->sc_card = BICC; - if (lance_isa_probe(sc) == 0) + if (lance_isa_probe(sc) == 0) { + bus_space_unmap(iot, ioh, ia->ia_iosize); return 0; + } /* * Extract the physical MAC address from the ROM. */ for (i = 0; i < sizeof(sc->sc_arpcom.ac_enaddr); i++) - sc->sc_arpcom.ac_enaddr[i] = inb(iobase + i * 2); + sc->sc_arpcom.ac_enaddr[i] = bus_space_read_1(iot, ioh, i * 2); ia->ia_iosize = 16; + bus_space_unmap(iot, ioh, ia->ia_iosize); return 1; } @@ -303,6 +311,13 @@ le_isa_attach(parent, self, aux) struct le_softc *lesc = (void *)self; struct am7990_softc *sc = &lesc->sc_am7990; struct isa_attach_args *ia = aux; + bus_space_tag_t iot = ia->ia_iot; + bus_space_handle_t ioh; + + if (bus_space_map(iot, ia->ia_iobase, ia->ia_iosize, 0, &ioh)) + panic("%s: could not map I/O-ports", sc->sc_dev.dv_xname); + lesc->sc_iot = iot; + lesc->sc_ioh = ioh; printf(": %s Ethernet\n", card_type[lesc->sc_card]); @@ -365,18 +380,3 @@ le_isa_attach(parent, self, aux) lesc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE, IPL_NET, le_isa_intredge, sc, sc->sc_dev.dv_xname); } - -/* - * Controller interrupt. - */ -int -le_isa_intredge(arg) - void *arg; -{ - - if (am7990_intr(arg) == 0) - return (0); - for (;;) - if (am7990_intr(arg) == 0) - return (1); -} diff --git a/sys/dev/isa/if_le_isapnp.c b/sys/dev/isa/if_le_isapnp.c new file mode 100644 index 00000000000..09e40d2bfce --- /dev/null +++ b/sys/dev/isa/if_le_isapnp.c @@ -0,0 +1,146 @@ +/* $OpenBSD: if_le_isapnp.c,v 1.1 1997/12/26 08:07:33 deraadt Exp $ */ +/* $NetBSD: if_le_isa.c,v 1.2 1996/05/12 23:52:56 mycroft Exp $ */ + +/*- + * Copyright (c) 1995 Charles M. Hannum. All rights reserved. + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Ralph Campbell and Rick Macklem. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)if_le.c 8.2 (Berkeley) 11/16/93 + */ + +#include "bpfilter.h" +#include "isadma.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/mbuf.h> +#include <sys/syslog.h> +#include <sys/socket.h> +#include <sys/device.h> + +#include <net/if.h> + +#ifdef INET +#include <netinet/in.h> +#include <netinet/if_ether.h> +#endif + +#include <vm/vm.h> + +#include <machine/cpu.h> +#include <machine/intr.h> +#include <machine/pio.h> + +#include <dev/isa/isareg.h> +#include <dev/isa/isavar.h> +#include <dev/isa/isadmavar.h> +#include <i386/isa/isa_machdep.h> + +#include <dev/ic/am7990reg.h> +#include <dev/ic/am7990var.h> + +#include <dev/isa/if_levar.h> + +int le_isapnp_match __P((struct device *, void *, void *)); +void le_isapnp_attach __P((struct device *, struct device *, void *)); + +struct cfattach le_isapnp_ca = { + sizeof(struct le_softc), le_isapnp_match, le_isapnp_attach +}; + +int +le_isapnp_match(parent, match, aux) + struct device *parent; + void *match, *aux; +{ + return 1; +} + +void +le_isapnp_attach(parent, self, aux) + struct device *parent, *self; + void *aux; +{ + struct le_softc *lesc = (void *)self; + struct isa_attach_args *ia = aux; + struct am7990_softc *sc = &lesc->sc_am7990; + bus_space_tag_t iot = lesc->sc_iot; + bus_space_handle_t ioh = lesc->sc_ioh; + int i; + + lesc->sc_iot = iot = ia->ia_iot; + lesc->sc_ioh = ioh = ia->ipa_io[0].h; + lesc->sc_rap = NE2100_RAP; + lesc->sc_rdp = NE2100_RDP; + lesc->sc_card = NE2100; + + /* + * Extract the physical MAC address from the ROM. + */ + for (i = 0; i < sizeof(sc->sc_arpcom.ac_enaddr); i++) + sc->sc_arpcom.ac_enaddr[i] = bus_space_read_1(iot, ioh, i); + + sc->sc_mem = malloc(16384, M_DEVBUF, M_NOWAIT); + if (sc->sc_mem == 0) { + printf("%s: couldn't allocate memory for card\n", + sc->sc_dev.dv_xname); + return; + } + + sc->sc_conf3 = 0; + sc->sc_addr = kvtop(sc->sc_mem); + sc->sc_memsize = 16384; + + sc->sc_copytodesc = am7990_copytobuf_contig; + sc->sc_copyfromdesc = am7990_copyfrombuf_contig; + sc->sc_copytobuf = am7990_copytobuf_contig; + sc->sc_copyfrombuf = am7990_copyfrombuf_contig; + sc->sc_zerobuf = am7990_zerobuf_contig; + + sc->sc_rdcsr = le_isa_rdcsr; + sc->sc_wrcsr = le_isa_wrcsr; + sc->sc_hwreset = NULL; + sc->sc_hwinit = NULL; + + am7990_config(sc); + +#if NISADMA > 0 + if (ia->ia_drq != DRQUNK) + isa_dmacascade(ia->ia_drq); +#endif + + lesc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE, + IPL_NET, le_isa_intredge, sc, sc->sc_dev.dv_xname); +} diff --git a/sys/dev/isa/if_levar.h b/sys/dev/isa/if_levar.h index ac135898e89..d0a0bd86846 100644 --- a/sys/dev/isa/if_levar.h +++ b/sys/dev/isa/if_levar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: if_levar.h,v 1.5 1997/11/07 08:07:01 niklas Exp $ */ +/* $OpenBSD: if_levar.h,v 1.6 1997/12/26 08:07:33 deraadt Exp $ */ /* $NetBSD: if_levar.h,v 1.5 1996/05/07 01:50:07 thorpej Exp $ */ /* @@ -48,7 +48,13 @@ struct le_softc { struct am7990_softc sc_am7990; /* glue to MI code */ void *sc_ih; - bus_space_handle_t sc_ioh; int sc_card; int sc_rap, sc_rdp; /* offsets to LANCE registers */ + + bus_space_tag_t sc_iot; + bus_space_handle_t sc_ioh; }; + +hide void le_isa_wrcsr __P((struct am7990_softc *, u_int16_t, u_int16_t)); +hide u_int16_t le_isa_rdcsr __P((struct am7990_softc *, u_int16_t)); +int le_isa_intredge __P((void *)); |