diff options
author | imp <imp@FreeBSD.org> | 1999-12-09 02:42:42 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1999-12-09 02:42:42 +0000 |
commit | 652a419b8549d42ba776a7c10c644762d86b04ef (patch) | |
tree | 69c1c8a0036bb1fa81ad2a3b543dc62c09c24dd6 /sys/dev/pcic | |
parent | 2e3bb2c90459f38de87f0f06cabde9ce0bdad488 (diff) | |
download | FreeBSD-src-652a419b8549d42ba776a7c10c644762d86b04ef.zip FreeBSD-src-652a419b8549d42ba776a7c10c644762d86b04ef.tar.gz |
Merge _isa and _isasubr since only one function remained in _isasubr
Saticize _isa.c
Kill compile warnings for _isa.c
Remove obsolete comment from i82365.c
Diffstat (limited to 'sys/dev/pcic')
-rw-r--r-- | sys/dev/pcic/i82365.c | 3 | ||||
-rw-r--r-- | sys/dev/pcic/i82365_isa.c | 163 | ||||
-rw-r--r-- | sys/dev/pcic/i82365_isasubr.c | 215 | ||||
-rw-r--r-- | sys/dev/pcic/i82365_isavar.h | 40 |
4 files changed, 158 insertions, 263 deletions
diff --git a/sys/dev/pcic/i82365.c b/sys/dev/pcic/i82365.c index a6929a2..77de927 100644 --- a/sys/dev/pcic/i82365.c +++ b/sys/dev/pcic/i82365.c @@ -357,9 +357,6 @@ pcic_attach_socket(device_t dev, struct pcic_handle *h) * * XXX This should add all devices that can attach to pcic, which * is what we want in the general case. - * - * XXX Notice we don't use h AT ALL. This should be considered to - * XXX be BAD. */ device_add_child(dev, NULL, -1); device_set_ivars(dev, h); diff --git a/sys/dev/pcic/i82365_isa.c b/sys/dev/pcic/i82365_isa.c index a85424c..bc05f4d 100644 --- a/sys/dev/pcic/i82365_isa.c +++ b/sys/dev/pcic/i82365_isa.c @@ -1,7 +1,9 @@ +/* $NetBSD: i82365_isasubr.c,v 1.3 1999/10/15 06:07:27 haya Exp $ */ /* $NetBSD: i82365_isa.c,v 1.11 1998/06/09 07:25:00 thorpej Exp $ */ /* $FreeBSD$ */ /* + * Copyright (c) 1998 Bill Sommerfeld. All rights reserved. * Copyright (c) 1997 Marc Horowitz. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -51,13 +53,63 @@ #include <dev/pcic/i82365reg.h> #include <dev/pcic/i82365var.h> -#include <dev/pcic/i82365_isavar.h> + +/***************************************************************************** + * Configurable parameters. + *****************************************************************************/ + +#if 0 +#include "opt_pcic_isa_alloc_iobase.h" +#include "opt_pcic_isa_alloc_iosize.h" +#include "opt_pcic_isa_intr_alloc_mask.h" +#endif + +/* + * Default I/O allocation range. If both are set to non-zero, these + * values will be used instead. Otherwise, the code attempts to probe + * the bus width. Systems with 10 address bits should use 0x300 and 0xff. + * Systems with 12 address bits (most) should use 0x400 and 0xbff. + */ + +#ifndef PCIC_ISA_ALLOC_IOBASE +#define PCIC_ISA_ALLOC_IOBASE 0 +#endif + +#ifndef PCIC_ISA_ALLOC_IOSIZE +#define PCIC_ISA_ALLOC_IOSIZE 0 +#endif + +int pcic_isa_alloc_iobase = PCIC_ISA_ALLOC_IOBASE; +int pcic_isa_alloc_iosize = PCIC_ISA_ALLOC_IOSIZE; + + +/* + * Default IRQ allocation bitmask. This defines the range of allowable + * IRQs for PCCARD slots. Useful if order of probing would screw up other + * devices, or if PCIC hardware/cards have trouble with certain interrupt + * lines. + * + * We disable IRQ 10 by default, since some common laptops (namely, the + * NEC Versa series) reserve IRQ 10 for the docking station SCSI interface. + */ + +#ifndef PCIC_ISA_INTR_ALLOC_MASK +#define PCIC_ISA_INTR_ALLOC_MASK 0xfbff +#endif + +int pcic_isa_intr_alloc_mask = PCIC_ISA_INTR_ALLOC_MASK; + +/***************************************************************************** + * End of configurable parameters. + *****************************************************************************/ #ifdef PCICISADEBUG int pcicisa_debug = 0 /* XXX */ ; #define DPRINTF(arg) if (pcicisa_debug) printf arg; +#define DEVPRINTF(arg) if (pcicisa_debug) device_printf arg; #else #define DPRINTF(arg) +#define DEVPRINTF(arg) #endif static struct isa_pnp_id pcic_ids[] = { @@ -68,10 +120,111 @@ static struct isa_pnp_id pcic_ids[] = { {0} }; -int pcic_isa_probe(device_t dev); -int pcic_isa_attach(device_t dev); +static void +pcic_isa_bus_width_probe (device_t dev) +{ + struct pcic_softc *sc = (struct pcic_softc *) + device_get_softc(dev); + bus_space_handle_t ioh_high; + int i, iobuswidth, tmp1, tmp2; + int rid; + u_long base; + u_int32_t length; + bus_space_tag_t iot; + bus_space_handle_t ioh; + struct resource *r; + + base = rman_get_start(sc->port_res); + length = rman_get_end(sc->port_res) - rman_get_end(sc->port_res) + 1; + iot = sc->iot; + ioh = sc->ioh; -int + /* + * figure out how wide the isa bus is. Do this by checking if the + * pcic controller is mirrored 0x400 above where we expect it to be. + */ + + iobuswidth = 12; + rid = 1; + r = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, base + 0x400, + base + 0x400 + length, length, RF_ACTIVE); + if (!r) { + printf("Can't allocated mirror area for pcic bus width probe\n"); + return; + } + ioh_high = rman_get_bushandle(r); + for (i = 0; i < PCIC_NSLOTS; i++) { + if (sc->handle[i].flags & PCIC_FLAG_SOCKETP) { + /* + * read the ident flags from the normal space and + * from the mirror, and compare them + */ + + bus_space_write_1(iot, ioh, PCIC_REG_INDEX, + sc->handle[i].sock + PCIC_IDENT); + tmp1 = bus_space_read_1(iot, ioh, PCIC_REG_DATA); + + bus_space_write_1(iot, ioh_high, PCIC_REG_INDEX, + sc->handle[i].sock + PCIC_IDENT); + tmp2 = bus_space_read_1(iot, ioh_high, PCIC_REG_DATA); + + if (tmp1 == tmp2) + iobuswidth = 10; + } + } + bus_release_resource(dev, SYS_RES_IOPORT, rid, r); + + /* + * XXX mycroft recommends I/O space range 0x400-0xfff . I should put + * this in a header somewhere + */ + + /* + * XXX some hardware doesn't seem to grok addresses in 0x400 range-- + * apparently missing a bit or more of address lines. (e.g. + * CIRRUS_PD672X with Linksys EthernetCard ne2000 clone in TI + * TravelMate 5000--not clear which is at fault) + * + * Add a kludge to detect 10 bit wide buses and deal with them, + * and also a config file option to override the probe. + */ + + if (iobuswidth == 10) { + sc->iobase = 0x300; + sc->iosize = 0x0ff; + } else { +#if 0 + /* + * This is what we'd like to use, but... + */ + sc->iobase = 0x400; + sc->iosize = 0xbff; +#else + /* + * ...the above bus width probe doesn't always work. + * So, experimentation has shown the following range + * to not lose on systems that 0x300-0x3ff loses on + * (e.g. the NEC Versa 6030X). + */ + sc->iobase = 0x330; + sc->iosize = 0x0cf; +#endif + } + + DEVPRINTF((dev, "bus_space_alloc range 0x%04lx-0x%04lx (probed)\n", + (long) sc->iobase, (long) sc->iobase + sc->iosize)); + + if (pcic_isa_alloc_iobase && pcic_isa_alloc_iosize) { + sc->iobase = pcic_isa_alloc_iobase; + sc->iosize = pcic_isa_alloc_iosize; + + DEVPRINTF((dev, "bus_space_alloc range 0x%04lx-0x%04lx " + "(config override)\n", (long) sc->iobase, + (long) sc->iobase + sc->iosize)); + } +} + +static int pcic_isa_probe(device_t dev) { bus_space_tag_t iot; @@ -127,7 +280,7 @@ pcic_isa_probe(device_t dev) return (0); } -int +static int pcic_isa_attach(device_t dev) { struct pcic_softc *sc = (struct pcic_softc *) device_get_softc(dev); diff --git a/sys/dev/pcic/i82365_isasubr.c b/sys/dev/pcic/i82365_isasubr.c deleted file mode 100644 index 0192eb6..0000000 --- a/sys/dev/pcic/i82365_isasubr.c +++ /dev/null @@ -1,215 +0,0 @@ -/* $NetBSD: i82365_isasubr.c,v 1.3 1999/10/15 06:07:27 haya Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 Bill Sommerfeld. All rights reserved. - * Copyright (c) 1997 Marc Horowitz. All rights reserved. - * - * 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 Marc Horowitz. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/malloc.h> -#include <sys/module.h> -#include <sys/kernel.h> -#include <sys/queue.h> -#include <sys/types.h> - -#include <sys/bus.h> -#include <machine/bus.h> -#include <sys/rman.h> -#include <machine/resource.h> - -#include <dev/pccard/pccardreg.h> -#include <dev/pccard/pccardvar.h> -#include <dev/pccard/pccardchip.h> - -#include <dev/pcic/i82365reg.h> -#include <dev/pcic/i82365var.h> -#include <dev/pcic/i82365_isavar.h> - -/***************************************************************************** - * Configurable parameters. - *****************************************************************************/ - -#if 0 -#include "opt_pcic_isa_alloc_iobase.h" -#include "opt_pcic_isa_alloc_iosize.h" -#include "opt_pcic_isa_intr_alloc_mask.h" -#endif - -/* - * Default I/O allocation range. If both are set to non-zero, these - * values will be used instead. Otherwise, the code attempts to probe - * the bus width. Systems with 10 address bits should use 0x300 and 0xff. - * Systems with 12 address bits (most) should use 0x400 and 0xbff. - */ - -#ifndef PCIC_ISA_ALLOC_IOBASE -#define PCIC_ISA_ALLOC_IOBASE 0 -#endif - -#ifndef PCIC_ISA_ALLOC_IOSIZE -#define PCIC_ISA_ALLOC_IOSIZE 0 -#endif - -int pcic_isa_alloc_iobase = PCIC_ISA_ALLOC_IOBASE; -int pcic_isa_alloc_iosize = PCIC_ISA_ALLOC_IOSIZE; - - -/* - * Default IRQ allocation bitmask. This defines the range of allowable - * IRQs for PCCARD slots. Useful if order of probing would screw up other - * devices, or if PCIC hardware/cards have trouble with certain interrupt - * lines. - * - * We disable IRQ 10 by default, since some common laptops (namely, the - * NEC Versa series) reserve IRQ 10 for the docking station SCSI interface. - */ - -#ifndef PCIC_ISA_INTR_ALLOC_MASK -#define PCIC_ISA_INTR_ALLOC_MASK 0xfbff -#endif - -int pcic_isa_intr_alloc_mask = PCIC_ISA_INTR_ALLOC_MASK; - -/***************************************************************************** - * End of configurable parameters. - *****************************************************************************/ - -#ifdef PCICISADEBUG -int pcicsubr_debug = 0 /* XXX */ ; -#define DPRINTF(arg) if (pcicsubr_debug) printf arg; -#define DEVPRINTF(arg) if (pcicsubr_debug) device_printf arg; -#else -#define DPRINTF(arg) -#define DEVPRINTF(arg) -#endif - -void pcic_isa_bus_width_probe (device_t dev) -{ - struct pcic_softc *sc = (struct pcic_softc *) - device_get_softc(dev); - bus_space_handle_t ioh_high; - int i, iobuswidth, tmp1, tmp2; - int rid; - u_long base; - u_int32_t length; - bus_space_tag_t iot; - bus_space_handle_t ioh; - struct resource *r; - - base = rman_get_start(sc->port_res); - length = rman_get_end(sc->port_res) - rman_get_end(sc->port_res) + 1; - iot = sc->iot; - ioh = sc->ioh; - - /* - * figure out how wide the isa bus is. Do this by checking if the - * pcic controller is mirrored 0x400 above where we expect it to be. - */ - - iobuswidth = 12; - rid = 1; - r = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, base + 0x400, - base + 0x400 + length, length, RF_ACTIVE); - if (!r) { - printf("Can't allocated mirror area for pcic bus width probe\n"); - return; - } - ioh_high = rman_get_bushandle(r); - for (i = 0; i < PCIC_NSLOTS; i++) { - if (sc->handle[i].flags & PCIC_FLAG_SOCKETP) { - /* - * read the ident flags from the normal space and - * from the mirror, and compare them - */ - - bus_space_write_1(iot, ioh, PCIC_REG_INDEX, - sc->handle[i].sock + PCIC_IDENT); - tmp1 = bus_space_read_1(iot, ioh, PCIC_REG_DATA); - - bus_space_write_1(iot, ioh_high, PCIC_REG_INDEX, - sc->handle[i].sock + PCIC_IDENT); - tmp2 = bus_space_read_1(iot, ioh_high, PCIC_REG_DATA); - - if (tmp1 == tmp2) - iobuswidth = 10; - } - } - bus_release_resource(dev, SYS_RES_IOPORT, rid, r); - - /* - * XXX mycroft recommends I/O space range 0x400-0xfff . I should put - * this in a header somewhere - */ - - /* - * XXX some hardware doesn't seem to grok addresses in 0x400 range-- - * apparently missing a bit or more of address lines. (e.g. - * CIRRUS_PD672X with Linksys EthernetCard ne2000 clone in TI - * TravelMate 5000--not clear which is at fault) - * - * Add a kludge to detect 10 bit wide buses and deal with them, - * and also a config file option to override the probe. - */ - - if (iobuswidth == 10) { - sc->iobase = 0x300; - sc->iosize = 0x0ff; - } else { -#if 0 - /* - * This is what we'd like to use, but... - */ - sc->iobase = 0x400; - sc->iosize = 0xbff; -#else - /* - * ...the above bus width probe doesn't always work. - * So, experimentation has shown the following range - * to not lose on systems that 0x300-0x3ff loses on - * (e.g. the NEC Versa 6030X). - */ - sc->iobase = 0x330; - sc->iosize = 0x0cf; -#endif - } - - DEVPRINTF((dev, "bus_space_alloc range 0x%04lx-0x%04lx (probed)\n", - (long) sc->iobase, (long) sc->iobase + sc->iosize)); - - if (pcic_isa_alloc_iobase && pcic_isa_alloc_iosize) { - sc->iobase = pcic_isa_alloc_iobase; - sc->iosize = pcic_isa_alloc_iosize; - - DEVPRINTF((dev, "bus_space_alloc range 0x%04lx-0x%04lx " - "(config override)\n", (long) sc->iobase, - (long) sc->iobase + sc->iosize)); - } -} diff --git a/sys/dev/pcic/i82365_isavar.h b/sys/dev/pcic/i82365_isavar.h deleted file mode 100644 index 2a58898..0000000 --- a/sys/dev/pcic/i82365_isavar.h +++ /dev/null @@ -1,40 +0,0 @@ -/* $NetBSD: i82365_isavar.h,v 1.1 1998/06/07 18:28:31 sommerfe Exp $ */ -/* $FreeBSD$ */ - -/* - * Copyright (c) 1998 Bill Sommerfeld. All rights reserved. - * Copyright (c) 1997 Marc Horowitz. All rights reserved. - * - * 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 Marc Horowitz. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -extern int pcic_isa_intr_alloc_mask; - -/* - * Figure out how wide the ISA bus is... - */ - -void pcic_isa_bus_width_probe(device_t); |