diff options
author | John Baldwin <jhb@FreeBSD.org> | 2002-09-23 15:50:06 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2002-09-23 15:50:06 +0000 |
commit | e8e951ce31f0038ec2039d397189ee13ee5c1a4f (patch) | |
tree | d2c401dca9dccaa5da479d17de421c8622fef66c | |
parent | 8d9b45ee328ca81a65ce895adcc360adf918f5f4 (diff) |
Notes
-rw-r--r-- | sys/amd64/amd64/legacy.c | 555 | ||||
-rw-r--r-- | sys/amd64/include/legacyvar.h | 18 | ||||
-rw-r--r-- | sys/conf/files.i386 | 1 | ||||
-rw-r--r-- | sys/i386/i386/legacy.c | 555 | ||||
-rw-r--r-- | sys/i386/include/legacyvar.h | 18 |
5 files changed, 225 insertions, 922 deletions
diff --git a/sys/amd64/amd64/legacy.c b/sys/amd64/amd64/legacy.c index cd450803677ad..e25b7ae03347a 100644 --- a/sys/amd64/amd64/legacy.c +++ b/sys/amd64/amd64/legacy.c @@ -30,234 +30,122 @@ */ /* - * This code implements a `root nexus' for Intel Architecture - * machines. The function of the root nexus is to serve as an - * attachment point for both processors and buses, and to manage - * resources which are common to all of them. In particular, - * this code implements the core resource managers for interrupt - * requests, DMA requests (which rightfully should be a part of the - * ISA code but it's easier to do it here for now), I/O port addresses, - * and I/O memory address space. + * This code implements a system driver for legacy systems that do not + * support ACPI or when ACPI support is not present in the kernel. */ -#include "opt_isa.h" - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> #include <sys/kernel.h> #include <sys/malloc.h> -#include <sys/module.h> #include <machine/bus.h> #include <sys/rman.h> -#include <sys/interrupt.h> - -#include <machine/vmparam.h> -#include <vm/vm.h> -#include <vm/pmap.h> -#include <machine/pmap.h> -#include <machine/nexusvar.h> +#include <machine/legacyvar.h> #include <machine/resource.h> -#ifdef APIC_IO -#include <machine/smp.h> -#include <machine/mpapic.h> -#endif - -#ifdef DEV_ISA -#include <isa/isavar.h> -#ifdef PC98 -#include <pc98/pc98/pc98.h> -#else -#include <i386/isa/isa.h> -#endif -#endif -#include <i386/isa/icu.h> -#include <i386/isa/intr_machdep.h> -#include <sys/rtprio.h> - -static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device"); -struct nexus_device { - struct resource_list nx_resources; - int nx_pcibus; -}; -#define DEVTONX(dev) ((struct nexus_device *)device_get_ivars(dev)) +static MALLOC_DEFINE(M_LEGACYDEV, "legacydrv", "legacy system device"); +struct legacy_device { + struct resource_list lg_resources; + int lg_pcibus; +}; -static struct rman irq_rman, drq_rman, port_rman, mem_rman; +#define DEVTOAT(dev) ((struct legacy_device *)device_get_ivars(dev)) -static int nexus_probe(device_t); -static int nexus_attach(device_t); -static int nexus_print_all_resources(device_t dev); -static int nexus_print_child(device_t, device_t); -static device_t nexus_add_child(device_t bus, int order, const char *name, +static int legacy_probe(device_t); +static int legacy_attach(device_t); +static int legacy_print_child(device_t, device_t); +static device_t legacy_add_child(device_t bus, int order, const char *name, int unit); -static struct resource *nexus_alloc_resource(device_t, device_t, int, int *, +static struct resource *legacy_alloc_resource(device_t, device_t, int, int *, u_long, u_long, u_long, u_int); -static int nexus_read_ivar(device_t, device_t, int, uintptr_t *); -static int nexus_write_ivar(device_t, device_t, int, uintptr_t); -static int nexus_activate_resource(device_t, device_t, int, int, - struct resource *); -static int nexus_deactivate_resource(device_t, device_t, int, int, - struct resource *); -static int nexus_release_resource(device_t, device_t, int, int, +static int legacy_read_ivar(device_t, device_t, int, uintptr_t *); +static int legacy_write_ivar(device_t, device_t, int, uintptr_t); +static int legacy_release_resource(device_t, device_t, int, int, struct resource *); -static int nexus_setup_intr(device_t, device_t, struct resource *, int flags, - void (*)(void *), void *, void **); -static int nexus_teardown_intr(device_t, device_t, struct resource *, - void *); -static int nexus_set_resource(device_t, device_t, int, int, u_long, u_long); -static int nexus_get_resource(device_t, device_t, int, int, u_long *, u_long *); -static void nexus_delete_resource(device_t, device_t, int, int); - -static device_method_t nexus_methods[] = { +static int legacy_set_resource(device_t, device_t, int, int, u_long, u_long); +static int legacy_get_resource(device_t, device_t, int, int, u_long *, u_long *); +static void legacy_delete_resource(device_t, device_t, int, int); + +static device_method_t legacy_methods[] = { /* Device interface */ - DEVMETHOD(device_probe, nexus_probe), - DEVMETHOD(device_attach, nexus_attach), + DEVMETHOD(device_probe, legacy_probe), + DEVMETHOD(device_attach, legacy_attach), DEVMETHOD(device_detach, bus_generic_detach), DEVMETHOD(device_shutdown, bus_generic_shutdown), DEVMETHOD(device_suspend, bus_generic_suspend), DEVMETHOD(device_resume, bus_generic_resume), /* Bus interface */ - DEVMETHOD(bus_print_child, nexus_print_child), - DEVMETHOD(bus_add_child, nexus_add_child), - DEVMETHOD(bus_read_ivar, nexus_read_ivar), - DEVMETHOD(bus_write_ivar, nexus_write_ivar), - DEVMETHOD(bus_alloc_resource, nexus_alloc_resource), - DEVMETHOD(bus_release_resource, nexus_release_resource), - DEVMETHOD(bus_activate_resource, nexus_activate_resource), - DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource), - DEVMETHOD(bus_setup_intr, nexus_setup_intr), - DEVMETHOD(bus_teardown_intr, nexus_teardown_intr), - DEVMETHOD(bus_set_resource, nexus_set_resource), - DEVMETHOD(bus_get_resource, nexus_get_resource), - DEVMETHOD(bus_delete_resource, nexus_delete_resource), + DEVMETHOD(bus_print_child, legacy_print_child), + DEVMETHOD(bus_add_child, legacy_add_child), + DEVMETHOD(bus_read_ivar, legacy_read_ivar), + DEVMETHOD(bus_write_ivar, legacy_write_ivar), + DEVMETHOD(bus_set_resource, legacy_set_resource), + DEVMETHOD(bus_get_resource, legacy_get_resource), + DEVMETHOD(bus_alloc_resource, legacy_alloc_resource), + DEVMETHOD(bus_release_resource, legacy_release_resource), + DEVMETHOD(bus_delete_resource, legacy_delete_resource), + DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), { 0, 0 } }; -static driver_t nexus_driver = { - "nexus", - nexus_methods, +static driver_t legacy_driver = { + "legacy", + legacy_methods, 1, /* no softc */ }; -static devclass_t nexus_devclass; +static devclass_t legacy_devclass; -DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0); +DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0); static int -nexus_probe(device_t dev) +legacy_probe(device_t dev) { - device_quiet(dev); /* suppress attach message for neatness */ - - /* - * XXX working notes: - * - * - IRQ resource creation should be moved to the PIC/APIC driver. - * - DRQ resource creation should be moved to the DMAC driver. - * - The above should be sorted to probe earlier than any child busses. - * - * - Leave I/O and memory creation here, as child probes may need them. - * (especially eg. ACPI) - */ - - /* - * IRQ's are on the mainboard on old systems, but on the ISA part - * of PCI->ISA bridges. There would be multiple sets of IRQs on - * multi-ISA-bus systems. PCI interrupts are routed to the ISA - * component, so in a way, PCI can be a partial child of an ISA bus(!). - * APIC interrupts are global though. - * - * XXX We depend on the AT PIC driver correctly claiming IRQ 2 - * to prevent its reuse elsewhere in the !APIC_IO case. - */ - irq_rman.rm_start = 0; - irq_rman.rm_type = RMAN_ARRAY; - irq_rman.rm_descr = "Interrupt request lines"; -#ifdef APIC_IO - irq_rman.rm_end = APIC_INTMAPSIZE - 1; -#else - irq_rman.rm_end = 15; -#endif - if (rman_init(&irq_rman) - || rman_manage_region(&irq_rman, - irq_rman.rm_start, irq_rman.rm_end)) - panic("nexus_probe irq_rman"); - - /* - * ISA DMA on PCI systems is implemented in the ISA part of each - * PCI->ISA bridge and the channels can be duplicated if there are - * multiple bridges. (eg: laptops with docking stations) - */ - drq_rman.rm_start = 0; -#ifdef PC98 - drq_rman.rm_end = 3; -#else - drq_rman.rm_end = 7; -#endif - drq_rman.rm_type = RMAN_ARRAY; - drq_rman.rm_descr = "DMA request lines"; - /* XXX drq 0 not available on some machines */ - if (rman_init(&drq_rman) - || rman_manage_region(&drq_rman, - drq_rman.rm_start, drq_rman.rm_end)) - panic("nexus_probe drq_rman"); - - /* - * However, IO ports and Memory truely are global at this level, - * as are APIC interrupts (however many IO APICS there turn out - * to be on large systems..) - */ - port_rman.rm_start = 0; - port_rman.rm_end = 0xffff; - port_rman.rm_type = RMAN_ARRAY; - port_rman.rm_descr = "I/O ports"; - if (rman_init(&port_rman) - || rman_manage_region(&port_rman, 0, 0xffff)) - panic("nexus_probe port_rman"); - - mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; - mem_rman.rm_type = RMAN_ARRAY; - mem_rman.rm_descr = "I/O memory addresses"; - if (rman_init(&mem_rman) - || rman_manage_region(&mem_rman, 0, ~0)) - panic("nexus_probe mem_rman"); - - return bus_generic_probe(dev); + device_set_desc(dev, "legacy system"); + device_quiet(dev); + return (0); } static int -nexus_attach(device_t dev) +legacy_attach(device_t dev) { device_t child; /* - * First, deal with the children we know about already + * First, let our child driver's identify any child devices that + * they can find. Once that is done attach any devices that we + * found. */ + bus_generic_probe(dev); bus_generic_attach(dev); + /* - * And if we didn't see EISA or ISA on a pci bridge, create some + * If we didn't see EISA or ISA on a pci bridge, create some * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { child = BUS_ADD_CHILD(dev, 0, "eisa", 0); if (child == NULL) - panic("nexus_attach eisa"); + panic("legacy_attach eisa"); device_probe_and_attach(child); } if (!devclass_get_device(devclass_find("mca"), 0)) { child = BUS_ADD_CHILD(dev, 0, "mca", 0); if (child == 0) - panic("nexus_probe mca"); + panic("legacy_probe mca"); device_probe_and_attach(child); } if (!devclass_get_device(devclass_find("isa"), 0)) { child = BUS_ADD_CHILD(dev, 0, "isa", 0); if (child == NULL) - panic("nexus_attach isa"); + panic("legacy_attach isa"); device_probe_and_attach(child); } @@ -265,13 +153,13 @@ nexus_attach(device_t dev) } static int -nexus_print_all_resources(device_t dev) +legacy_print_all_resources(device_t dev) { - struct nexus_device *ndev = DEVTONX(dev); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(dev); + struct resource_list *rl = &atdev->lg_resources; int retval = 0; - if (SLIST_FIRST(rl) || ndev->nx_pcibus != -1) + if (SLIST_FIRST(rl) || atdev->lg_pcibus != -1) retval += printf(" at"); retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx"); @@ -282,48 +170,49 @@ nexus_print_all_resources(device_t dev) } static int -nexus_print_child(device_t bus, device_t child) +legacy_print_child(device_t bus, device_t child) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); int retval = 0; retval += bus_print_child_header(bus, child); - retval += nexus_print_all_resources(child); - if (ndev->nx_pcibus != -1) - retval += printf(" pcibus %d", ndev->nx_pcibus); + retval += legacy_print_all_resources(child); + if (atdev->lg_pcibus != -1) + retval += printf(" pcibus %d", atdev->lg_pcibus); retval += printf(" on motherboard\n"); /* XXX "motherboard", ick */ return (retval); } static device_t -nexus_add_child(device_t bus, int order, const char *name, int unit) +legacy_add_child(device_t bus, int order, const char *name, int unit) { - device_t child; - struct nexus_device *ndev; + device_t child; + struct legacy_device *atdev; - ndev = malloc(sizeof(struct nexus_device), M_NEXUSDEV, M_NOWAIT|M_ZERO); - if (!ndev) + atdev = malloc(sizeof(struct legacy_device), M_LEGACYDEV, + M_NOWAIT | M_ZERO); + if (!atdev) return(0); - resource_list_init(&ndev->nx_resources); - ndev->nx_pcibus = -1; + resource_list_init(&atdev->lg_resources); + atdev->lg_pcibus = -1; child = device_add_child_ordered(bus, order, name, unit); - /* should we free this in nexus_child_detached? */ - device_set_ivars(child, ndev); + /* should we free this in legacy_child_detached? */ + device_set_ivars(child, atdev); return(child); } static int -nexus_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) +legacy_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); switch (which) { - case NEXUS_IVAR_PCIBUS: - *result = ndev->nx_pcibus; + case LEGACY_IVAR_PCIBUS: + *result = atdev->lg_pcibus; break; default: return ENOENT; @@ -333,13 +222,13 @@ nexus_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) static int -nexus_write_ivar(device_t dev, device_t child, int which, uintptr_t value) +legacy_write_ivar(device_t dev, device_t child, int which, uintptr_t value) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); switch (which) { - case NEXUS_IVAR_PCIBUS: - ndev->nx_pcibus = value; + case LEGACY_IVAR_PCIBUS: + atdev->lg_pcibus = value; break; default: return ENOENT; @@ -348,235 +237,47 @@ nexus_write_ivar(device_t dev, device_t child, int which, uintptr_t value) } -/* - * Allocate a resource on behalf of child. NB: child is usually going to be a - * child of one of our descendants, not a direct child of nexus0. - * (Exceptions include npx.) - */ static struct resource * -nexus_alloc_resource(device_t bus, device_t child, int type, int *rid, +legacy_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { - struct nexus_device *ndev = DEVTONX(child); - struct resource *rv; - struct resource_list_entry *rle; - struct rman *rm; - int needactivate = flags & RF_ACTIVE; - - /* - * If this is an allocation of the "default" range for a given RID, and - * we know what the resources for this device are (ie. they aren't maintained - * by a child bus), then work out the start/end values. - */ - if ((start == 0UL) && (end == ~0UL) && (count == 1)) { - if (ndev == NULL) - return(NULL); - rle = resource_list_find(&ndev->nx_resources, type, *rid); - if (rle == NULL) - return(NULL); - start = rle->start; - end = rle->end; - count = rle->count; - } - - flags &= ~RF_ACTIVE; - - switch (type) { - case SYS_RES_IRQ: - rm = &irq_rman; - break; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - case SYS_RES_DRQ: - rm = &drq_rman; - break; - - case SYS_RES_IOPORT: - rm = &port_rman; - break; - - case SYS_RES_MEMORY: - rm = &mem_rman; - break; - - default: - return 0; - } - - rv = rman_reserve_resource(rm, start, end, count, flags, child); - if (rv == 0) - return 0; - - if (type == SYS_RES_MEMORY) { - rman_set_bustag(rv, I386_BUS_SPACE_MEM); - } else if (type == SYS_RES_IOPORT) { - rman_set_bustag(rv, I386_BUS_SPACE_IO); -#ifndef PC98 - rman_set_bushandle(rv, rv->r_start); -#endif - } - -#ifdef PC98 - if ((type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) && - i386_bus_space_handle_alloc(rv->r_bustag, rv->r_start, count, - &rv->r_bushandle) != 0) { - rman_release_resource(rv); - return 0; - } -#endif - - if (needactivate) { - if (bus_activate_resource(child, type, *rid, rv)) { -#ifdef PC98 - if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { - i386_bus_space_handle_free(rv->r_bustag, - rv->r_bushandle, rv->r_bushandle->bsh_sz); - } -#endif - rman_release_resource(rv); - return 0; - } - } - - return rv; -} - -static int -nexus_activate_resource(device_t bus, device_t child, int type, int rid, - struct resource *r) -{ - /* - * If this is a memory resource, map it into the kernel. - */ - if (rman_get_bustag(r) == I386_BUS_SPACE_MEM) { - caddr_t vaddr = 0; - - if (rman_get_end(r) < 1024 * 1024) { - /* - * The first 1Mb is mapped at KERNBASE. - */ - vaddr = (caddr_t)(uintptr_t)(KERNBASE + rman_get_start(r)); - } else { - u_int32_t paddr; - u_int32_t psize; - u_int32_t poffs; - - paddr = rman_get_start(r); - psize = rman_get_size(r); - - poffs = paddr - trunc_page(paddr); - vaddr = (caddr_t) pmap_mapdev(paddr-poffs, psize+poffs) + poffs; - } - rman_set_virtual(r, vaddr); -#ifdef PC98 - /* PC-98: the type of bus_space_handle_t is the structure. */ - r->r_bushandle->bsh_base = (bus_addr_t) vaddr; -#else - /* IBM-PC: the type of bus_space_handle_t is u_int */ - rman_set_bushandle(r, (bus_space_handle_t) vaddr); -#endif - } - return (rman_activate_resource(r)); + return (resource_list_alloc(rl, bus, child, type, rid, start, end, + count, flags)); } static int -nexus_deactivate_resource(device_t bus, device_t child, int type, int rid, - struct resource *r) -{ - /* - * If this is a memory resource, unmap it. - */ - if ((rman_get_bustag(r) == I386_BUS_SPACE_MEM) && - (rman_get_end(r) >= 1024 * 1024)) { - u_int32_t psize; - - psize = rman_get_size(r); - pmap_unmapdev((vm_offset_t)rman_get_virtual(r), psize); - } - - return (rman_deactivate_resource(r)); -} - -static int -nexus_release_resource(device_t bus, device_t child, int type, int rid, +legacy_release_resource(device_t bus, device_t child, int type, int rid, struct resource *r) { - if (rman_get_flags(r) & RF_ACTIVE) { - int error = bus_deactivate_resource(child, type, rid, r); - if (error) - return error; - } -#ifdef PC98 - if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { - i386_bus_space_handle_free(r->r_bustag, r->r_bushandle, - r->r_bushandle->bsh_sz); - } -#endif - return (rman_release_resource(r)); -} - -/* - * Currently this uses the really grody interface from kern/kern_intr.c - * (which really doesn't belong in kern/anything.c). Eventually, all of - * the code in kern_intr.c and machdep_intr.c should get moved here, since - * this is going to be the official interface. - */ -static int -nexus_setup_intr(device_t bus, device_t child, struct resource *irq, - int flags, void (*ihand)(void *), void *arg, void **cookiep) -{ - driver_t *driver; - int error; - - /* somebody tried to setup an irq that failed to allocate! */ - if (irq == NULL) - panic("nexus_setup_intr: NULL irq resource!"); + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - *cookiep = 0; - if ((irq->r_flags & RF_SHAREABLE) == 0) - flags |= INTR_EXCL; - - driver = device_get_driver(child); - - /* - * We depend here on rman_activate_resource() being idempotent. - */ - error = rman_activate_resource(irq); - if (error) - return (error); - - error = inthand_add(device_get_nameunit(child), irq->r_start, - ihand, arg, flags, cookiep); - - return (error); + return (resource_list_release(rl, bus, child, type, rid, r)); } static int -nexus_teardown_intr(device_t dev, device_t child, struct resource *r, void *ih) +legacy_set_resource(device_t dev, device_t child, int type, int rid, + u_long start, u_long count) { - return (inthand_remove(ih)); -} - -static int -nexus_set_resource(device_t dev, device_t child, int type, int rid, u_long start, u_long count) -{ - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - /* XXX this should return a success/failure indicator */ resource_list_add(rl, type, rid, start, start + count - 1, count); return(0); } static int -nexus_get_resource(device_t dev, device_t child, int type, int rid, u_long *startp, u_long *countp) +legacy_get_resource(device_t dev, device_t child, int type, int rid, + u_long *startp, u_long *countp) { - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; struct resource_list_entry *rle; rle = resource_list_find(rl, type, rid); - device_printf(child, "type %d rid %d startp %p countp %p - got %p\n", - type, rid, startp, countp, rle); if (!rle) return(ENOENT); if (startp) @@ -587,60 +288,10 @@ nexus_get_resource(device_t dev, device_t child, int type, int rid, u_long *star } static void -nexus_delete_resource(device_t dev, device_t child, int type, int rid) +legacy_delete_resource(device_t dev, device_t child, int type, int rid) { - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; resource_list_delete(rl, type, rid); } - -#ifdef DEV_ISA -/* - * Placeholder which claims PnP 'devices' which describe system - * resources. - */ -static struct isa_pnp_id sysresource_ids[] = { - { 0x010cd041 /* PNP0c01 */, "System Memory" }, - { 0x020cd041 /* PNP0c02 */, "System Resource" }, - { 0 } -}; - -static int -sysresource_probe(device_t dev) -{ - int result; - - if ((result = ISA_PNP_PROBE(device_get_parent(dev), dev, sysresource_ids)) <= 0) { - device_quiet(dev); - } - return(result); -} - -static int -sysresource_attach(device_t dev) -{ - return(0); -} - -static device_method_t sysresource_methods[] = { - /* Device interface */ - DEVMETHOD(device_probe, sysresource_probe), - DEVMETHOD(device_attach, sysresource_attach), - DEVMETHOD(device_detach, bus_generic_detach), - DEVMETHOD(device_shutdown, bus_generic_shutdown), - DEVMETHOD(device_suspend, bus_generic_suspend), - DEVMETHOD(device_resume, bus_generic_resume), - { 0, 0 } -}; - -static driver_t sysresource_driver = { - "sysresource", - sysresource_methods, - 1, /* no softc */ -}; - -static devclass_t sysresource_devclass; - -DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, 0, 0); -#endif /* DEV_ISA */ diff --git a/sys/amd64/include/legacyvar.h b/sys/amd64/include/legacyvar.h index be38f33a0753f..3d7728df6a2b1 100644 --- a/sys/amd64/include/legacyvar.h +++ b/sys/amd64/include/legacyvar.h @@ -26,18 +26,18 @@ * $FreeBSD$ */ -#ifndef _MACHINE_NEXUSVAR_H_ -#define _MACHINE_NEXUSVAR_H_ 1 +#ifndef _MACHINE_LEGACYVAR_H_ +#define _MACHINE_LEGACYVAR_H_ -enum nexus_device_ivars { - NEXUS_IVAR_PCIBUS +enum legacy_device_ivars { + LEGACY_IVAR_PCIBUS }; -#define NEXUS_ACCESSOR(var, ivar, type) \ - __BUS_ACCESSOR(nexus, var, NEXUS, ivar, type) +#define LEGACY_ACCESSOR(var, ivar, type) \ + __BUS_ACCESSOR(legacy, var, LEGACY, ivar, type) -NEXUS_ACCESSOR(pcibus, PCIBUS, u_int32_t) +LEGACY_ACCESSOR(pcibus, PCIBUS, u_int32_t) -#undef NEXUS_ACCESSOR +#undef LEGACY_ACCESSOR -#endif /* !_MACHINE_NEXUSVAR_H_ */ +#endif /* !_MACHINE_LEGACYVAR_H_ */ diff --git a/sys/conf/files.i386 b/sys/conf/files.i386 index 5f163c8506153..0e8f44a3d2fbf 100644 --- a/sys/conf/files.i386 +++ b/sys/conf/files.i386 @@ -201,6 +201,7 @@ i386/i386/identcpu.c standard i386/i386/in_cksum.c optional inet i386/i386/initcpu.c standard i386/i386/k6_mem.c standard +i386/i386/legacy.c standard # locore.s needs to be handled in Makefile to put it first. Otherwise it's # now normal. # i386/i386/locore.s standard diff --git a/sys/i386/i386/legacy.c b/sys/i386/i386/legacy.c index cd450803677ad..e25b7ae03347a 100644 --- a/sys/i386/i386/legacy.c +++ b/sys/i386/i386/legacy.c @@ -30,234 +30,122 @@ */ /* - * This code implements a `root nexus' for Intel Architecture - * machines. The function of the root nexus is to serve as an - * attachment point for both processors and buses, and to manage - * resources which are common to all of them. In particular, - * this code implements the core resource managers for interrupt - * requests, DMA requests (which rightfully should be a part of the - * ISA code but it's easier to do it here for now), I/O port addresses, - * and I/O memory address space. + * This code implements a system driver for legacy systems that do not + * support ACPI or when ACPI support is not present in the kernel. */ -#include "opt_isa.h" - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> #include <sys/kernel.h> #include <sys/malloc.h> -#include <sys/module.h> #include <machine/bus.h> #include <sys/rman.h> -#include <sys/interrupt.h> - -#include <machine/vmparam.h> -#include <vm/vm.h> -#include <vm/pmap.h> -#include <machine/pmap.h> -#include <machine/nexusvar.h> +#include <machine/legacyvar.h> #include <machine/resource.h> -#ifdef APIC_IO -#include <machine/smp.h> -#include <machine/mpapic.h> -#endif - -#ifdef DEV_ISA -#include <isa/isavar.h> -#ifdef PC98 -#include <pc98/pc98/pc98.h> -#else -#include <i386/isa/isa.h> -#endif -#endif -#include <i386/isa/icu.h> -#include <i386/isa/intr_machdep.h> -#include <sys/rtprio.h> - -static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device"); -struct nexus_device { - struct resource_list nx_resources; - int nx_pcibus; -}; -#define DEVTONX(dev) ((struct nexus_device *)device_get_ivars(dev)) +static MALLOC_DEFINE(M_LEGACYDEV, "legacydrv", "legacy system device"); +struct legacy_device { + struct resource_list lg_resources; + int lg_pcibus; +}; -static struct rman irq_rman, drq_rman, port_rman, mem_rman; +#define DEVTOAT(dev) ((struct legacy_device *)device_get_ivars(dev)) -static int nexus_probe(device_t); -static int nexus_attach(device_t); -static int nexus_print_all_resources(device_t dev); -static int nexus_print_child(device_t, device_t); -static device_t nexus_add_child(device_t bus, int order, const char *name, +static int legacy_probe(device_t); +static int legacy_attach(device_t); +static int legacy_print_child(device_t, device_t); +static device_t legacy_add_child(device_t bus, int order, const char *name, int unit); -static struct resource *nexus_alloc_resource(device_t, device_t, int, int *, +static struct resource *legacy_alloc_resource(device_t, device_t, int, int *, u_long, u_long, u_long, u_int); -static int nexus_read_ivar(device_t, device_t, int, uintptr_t *); -static int nexus_write_ivar(device_t, device_t, int, uintptr_t); -static int nexus_activate_resource(device_t, device_t, int, int, - struct resource *); -static int nexus_deactivate_resource(device_t, device_t, int, int, - struct resource *); -static int nexus_release_resource(device_t, device_t, int, int, +static int legacy_read_ivar(device_t, device_t, int, uintptr_t *); +static int legacy_write_ivar(device_t, device_t, int, uintptr_t); +static int legacy_release_resource(device_t, device_t, int, int, struct resource *); -static int nexus_setup_intr(device_t, device_t, struct resource *, int flags, - void (*)(void *), void *, void **); -static int nexus_teardown_intr(device_t, device_t, struct resource *, - void *); -static int nexus_set_resource(device_t, device_t, int, int, u_long, u_long); -static int nexus_get_resource(device_t, device_t, int, int, u_long *, u_long *); -static void nexus_delete_resource(device_t, device_t, int, int); - -static device_method_t nexus_methods[] = { +static int legacy_set_resource(device_t, device_t, int, int, u_long, u_long); +static int legacy_get_resource(device_t, device_t, int, int, u_long *, u_long *); +static void legacy_delete_resource(device_t, device_t, int, int); + +static device_method_t legacy_methods[] = { /* Device interface */ - DEVMETHOD(device_probe, nexus_probe), - DEVMETHOD(device_attach, nexus_attach), + DEVMETHOD(device_probe, legacy_probe), + DEVMETHOD(device_attach, legacy_attach), DEVMETHOD(device_detach, bus_generic_detach), DEVMETHOD(device_shutdown, bus_generic_shutdown), DEVMETHOD(device_suspend, bus_generic_suspend), DEVMETHOD(device_resume, bus_generic_resume), /* Bus interface */ - DEVMETHOD(bus_print_child, nexus_print_child), - DEVMETHOD(bus_add_child, nexus_add_child), - DEVMETHOD(bus_read_ivar, nexus_read_ivar), - DEVMETHOD(bus_write_ivar, nexus_write_ivar), - DEVMETHOD(bus_alloc_resource, nexus_alloc_resource), - DEVMETHOD(bus_release_resource, nexus_release_resource), - DEVMETHOD(bus_activate_resource, nexus_activate_resource), - DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource), - DEVMETHOD(bus_setup_intr, nexus_setup_intr), - DEVMETHOD(bus_teardown_intr, nexus_teardown_intr), - DEVMETHOD(bus_set_resource, nexus_set_resource), - DEVMETHOD(bus_get_resource, nexus_get_resource), - DEVMETHOD(bus_delete_resource, nexus_delete_resource), + DEVMETHOD(bus_print_child, legacy_print_child), + DEVMETHOD(bus_add_child, legacy_add_child), + DEVMETHOD(bus_read_ivar, legacy_read_ivar), + DEVMETHOD(bus_write_ivar, legacy_write_ivar), + DEVMETHOD(bus_set_resource, legacy_set_resource), + DEVMETHOD(bus_get_resource, legacy_get_resource), + DEVMETHOD(bus_alloc_resource, legacy_alloc_resource), + DEVMETHOD(bus_release_resource, legacy_release_resource), + DEVMETHOD(bus_delete_resource, legacy_delete_resource), + DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), { 0, 0 } }; -static driver_t nexus_driver = { - "nexus", - nexus_methods, +static driver_t legacy_driver = { + "legacy", + legacy_methods, 1, /* no softc */ }; -static devclass_t nexus_devclass; +static devclass_t legacy_devclass; -DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0); +DRIVER_MODULE(legacy, nexus, legacy_driver, legacy_devclass, 0, 0); static int -nexus_probe(device_t dev) +legacy_probe(device_t dev) { - device_quiet(dev); /* suppress attach message for neatness */ - - /* - * XXX working notes: - * - * - IRQ resource creation should be moved to the PIC/APIC driver. - * - DRQ resource creation should be moved to the DMAC driver. - * - The above should be sorted to probe earlier than any child busses. - * - * - Leave I/O and memory creation here, as child probes may need them. - * (especially eg. ACPI) - */ - - /* - * IRQ's are on the mainboard on old systems, but on the ISA part - * of PCI->ISA bridges. There would be multiple sets of IRQs on - * multi-ISA-bus systems. PCI interrupts are routed to the ISA - * component, so in a way, PCI can be a partial child of an ISA bus(!). - * APIC interrupts are global though. - * - * XXX We depend on the AT PIC driver correctly claiming IRQ 2 - * to prevent its reuse elsewhere in the !APIC_IO case. - */ - irq_rman.rm_start = 0; - irq_rman.rm_type = RMAN_ARRAY; - irq_rman.rm_descr = "Interrupt request lines"; -#ifdef APIC_IO - irq_rman.rm_end = APIC_INTMAPSIZE - 1; -#else - irq_rman.rm_end = 15; -#endif - if (rman_init(&irq_rman) - || rman_manage_region(&irq_rman, - irq_rman.rm_start, irq_rman.rm_end)) - panic("nexus_probe irq_rman"); - - /* - * ISA DMA on PCI systems is implemented in the ISA part of each - * PCI->ISA bridge and the channels can be duplicated if there are - * multiple bridges. (eg: laptops with docking stations) - */ - drq_rman.rm_start = 0; -#ifdef PC98 - drq_rman.rm_end = 3; -#else - drq_rman.rm_end = 7; -#endif - drq_rman.rm_type = RMAN_ARRAY; - drq_rman.rm_descr = "DMA request lines"; - /* XXX drq 0 not available on some machines */ - if (rman_init(&drq_rman) - || rman_manage_region(&drq_rman, - drq_rman.rm_start, drq_rman.rm_end)) - panic("nexus_probe drq_rman"); - - /* - * However, IO ports and Memory truely are global at this level, - * as are APIC interrupts (however many IO APICS there turn out - * to be on large systems..) - */ - port_rman.rm_start = 0; - port_rman.rm_end = 0xffff; - port_rman.rm_type = RMAN_ARRAY; - port_rman.rm_descr = "I/O ports"; - if (rman_init(&port_rman) - || rman_manage_region(&port_rman, 0, 0xffff)) - panic("nexus_probe port_rman"); - - mem_rman.rm_start = 0; - mem_rman.rm_end = ~0u; - mem_rman.rm_type = RMAN_ARRAY; - mem_rman.rm_descr = "I/O memory addresses"; - if (rman_init(&mem_rman) - || rman_manage_region(&mem_rman, 0, ~0)) - panic("nexus_probe mem_rman"); - - return bus_generic_probe(dev); + device_set_desc(dev, "legacy system"); + device_quiet(dev); + return (0); } static int -nexus_attach(device_t dev) +legacy_attach(device_t dev) { device_t child; /* - * First, deal with the children we know about already + * First, let our child driver's identify any child devices that + * they can find. Once that is done attach any devices that we + * found. */ + bus_generic_probe(dev); bus_generic_attach(dev); + /* - * And if we didn't see EISA or ISA on a pci bridge, create some + * If we didn't see EISA or ISA on a pci bridge, create some * connection points now so they show up "on motherboard". */ if (!devclass_get_device(devclass_find("eisa"), 0)) { child = BUS_ADD_CHILD(dev, 0, "eisa", 0); if (child == NULL) - panic("nexus_attach eisa"); + panic("legacy_attach eisa"); device_probe_and_attach(child); } if (!devclass_get_device(devclass_find("mca"), 0)) { child = BUS_ADD_CHILD(dev, 0, "mca", 0); if (child == 0) - panic("nexus_probe mca"); + panic("legacy_probe mca"); device_probe_and_attach(child); } if (!devclass_get_device(devclass_find("isa"), 0)) { child = BUS_ADD_CHILD(dev, 0, "isa", 0); if (child == NULL) - panic("nexus_attach isa"); + panic("legacy_attach isa"); device_probe_and_attach(child); } @@ -265,13 +153,13 @@ nexus_attach(device_t dev) } static int -nexus_print_all_resources(device_t dev) +legacy_print_all_resources(device_t dev) { - struct nexus_device *ndev = DEVTONX(dev); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(dev); + struct resource_list *rl = &atdev->lg_resources; int retval = 0; - if (SLIST_FIRST(rl) || ndev->nx_pcibus != -1) + if (SLIST_FIRST(rl) || atdev->lg_pcibus != -1) retval += printf(" at"); retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx"); @@ -282,48 +170,49 @@ nexus_print_all_resources(device_t dev) } static int -nexus_print_child(device_t bus, device_t child) +legacy_print_child(device_t bus, device_t child) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); int retval = 0; retval += bus_print_child_header(bus, child); - retval += nexus_print_all_resources(child); - if (ndev->nx_pcibus != -1) - retval += printf(" pcibus %d", ndev->nx_pcibus); + retval += legacy_print_all_resources(child); + if (atdev->lg_pcibus != -1) + retval += printf(" pcibus %d", atdev->lg_pcibus); retval += printf(" on motherboard\n"); /* XXX "motherboard", ick */ return (retval); } static device_t -nexus_add_child(device_t bus, int order, const char *name, int unit) +legacy_add_child(device_t bus, int order, const char *name, int unit) { - device_t child; - struct nexus_device *ndev; + device_t child; + struct legacy_device *atdev; - ndev = malloc(sizeof(struct nexus_device), M_NEXUSDEV, M_NOWAIT|M_ZERO); - if (!ndev) + atdev = malloc(sizeof(struct legacy_device), M_LEGACYDEV, + M_NOWAIT | M_ZERO); + if (!atdev) return(0); - resource_list_init(&ndev->nx_resources); - ndev->nx_pcibus = -1; + resource_list_init(&atdev->lg_resources); + atdev->lg_pcibus = -1; child = device_add_child_ordered(bus, order, name, unit); - /* should we free this in nexus_child_detached? */ - device_set_ivars(child, ndev); + /* should we free this in legacy_child_detached? */ + device_set_ivars(child, atdev); return(child); } static int -nexus_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) +legacy_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); switch (which) { - case NEXUS_IVAR_PCIBUS: - *result = ndev->nx_pcibus; + case LEGACY_IVAR_PCIBUS: + *result = atdev->lg_pcibus; break; default: return ENOENT; @@ -333,13 +222,13 @@ nexus_read_ivar(device_t dev, device_t child, int which, uintptr_t *result) static int -nexus_write_ivar(device_t dev, device_t child, int which, uintptr_t value) +legacy_write_ivar(device_t dev, device_t child, int which, uintptr_t value) { - struct nexus_device *ndev = DEVTONX(child); + struct legacy_device *atdev = DEVTOAT(child); switch (which) { - case NEXUS_IVAR_PCIBUS: - ndev->nx_pcibus = value; + case LEGACY_IVAR_PCIBUS: + atdev->lg_pcibus = value; break; default: return ENOENT; @@ -348,235 +237,47 @@ nexus_write_ivar(device_t dev, device_t child, int which, uintptr_t value) } -/* - * Allocate a resource on behalf of child. NB: child is usually going to be a - * child of one of our descendants, not a direct child of nexus0. - * (Exceptions include npx.) - */ static struct resource * -nexus_alloc_resource(device_t bus, device_t child, int type, int *rid, +legacy_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { - struct nexus_device *ndev = DEVTONX(child); - struct resource *rv; - struct resource_list_entry *rle; - struct rman *rm; - int needactivate = flags & RF_ACTIVE; - - /* - * If this is an allocation of the "default" range for a given RID, and - * we know what the resources for this device are (ie. they aren't maintained - * by a child bus), then work out the start/end values. - */ - if ((start == 0UL) && (end == ~0UL) && (count == 1)) { - if (ndev == NULL) - return(NULL); - rle = resource_list_find(&ndev->nx_resources, type, *rid); - if (rle == NULL) - return(NULL); - start = rle->start; - end = rle->end; - count = rle->count; - } - - flags &= ~RF_ACTIVE; - - switch (type) { - case SYS_RES_IRQ: - rm = &irq_rman; - break; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - case SYS_RES_DRQ: - rm = &drq_rman; - break; - - case SYS_RES_IOPORT: - rm = &port_rman; - break; - - case SYS_RES_MEMORY: - rm = &mem_rman; - break; - - default: - return 0; - } - - rv = rman_reserve_resource(rm, start, end, count, flags, child); - if (rv == 0) - return 0; - - if (type == SYS_RES_MEMORY) { - rman_set_bustag(rv, I386_BUS_SPACE_MEM); - } else if (type == SYS_RES_IOPORT) { - rman_set_bustag(rv, I386_BUS_SPACE_IO); -#ifndef PC98 - rman_set_bushandle(rv, rv->r_start); -#endif - } - -#ifdef PC98 - if ((type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) && - i386_bus_space_handle_alloc(rv->r_bustag, rv->r_start, count, - &rv->r_bushandle) != 0) { - rman_release_resource(rv); - return 0; - } -#endif - - if (needactivate) { - if (bus_activate_resource(child, type, *rid, rv)) { -#ifdef PC98 - if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { - i386_bus_space_handle_free(rv->r_bustag, - rv->r_bushandle, rv->r_bushandle->bsh_sz); - } -#endif - rman_release_resource(rv); - return 0; - } - } - - return rv; -} - -static int -nexus_activate_resource(device_t bus, device_t child, int type, int rid, - struct resource *r) -{ - /* - * If this is a memory resource, map it into the kernel. - */ - if (rman_get_bustag(r) == I386_BUS_SPACE_MEM) { - caddr_t vaddr = 0; - - if (rman_get_end(r) < 1024 * 1024) { - /* - * The first 1Mb is mapped at KERNBASE. - */ - vaddr = (caddr_t)(uintptr_t)(KERNBASE + rman_get_start(r)); - } else { - u_int32_t paddr; - u_int32_t psize; - u_int32_t poffs; - - paddr = rman_get_start(r); - psize = rman_get_size(r); - - poffs = paddr - trunc_page(paddr); - vaddr = (caddr_t) pmap_mapdev(paddr-poffs, psize+poffs) + poffs; - } - rman_set_virtual(r, vaddr); -#ifdef PC98 - /* PC-98: the type of bus_space_handle_t is the structure. */ - r->r_bushandle->bsh_base = (bus_addr_t) vaddr; -#else - /* IBM-PC: the type of bus_space_handle_t is u_int */ - rman_set_bushandle(r, (bus_space_handle_t) vaddr); -#endif - } - return (rman_activate_resource(r)); + return (resource_list_alloc(rl, bus, child, type, rid, start, end, + count, flags)); } static int -nexus_deactivate_resource(device_t bus, device_t child, int type, int rid, - struct resource *r) -{ - /* - * If this is a memory resource, unmap it. - */ - if ((rman_get_bustag(r) == I386_BUS_SPACE_MEM) && - (rman_get_end(r) >= 1024 * 1024)) { - u_int32_t psize; - - psize = rman_get_size(r); - pmap_unmapdev((vm_offset_t)rman_get_virtual(r), psize); - } - - return (rman_deactivate_resource(r)); -} - -static int -nexus_release_resource(device_t bus, device_t child, int type, int rid, +legacy_release_resource(device_t bus, device_t child, int type, int rid, struct resource *r) { - if (rman_get_flags(r) & RF_ACTIVE) { - int error = bus_deactivate_resource(child, type, rid, r); - if (error) - return error; - } -#ifdef PC98 - if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) { - i386_bus_space_handle_free(r->r_bustag, r->r_bushandle, - r->r_bushandle->bsh_sz); - } -#endif - return (rman_release_resource(r)); -} - -/* - * Currently this uses the really grody interface from kern/kern_intr.c - * (which really doesn't belong in kern/anything.c). Eventually, all of - * the code in kern_intr.c and machdep_intr.c should get moved here, since - * this is going to be the official interface. - */ -static int -nexus_setup_intr(device_t bus, device_t child, struct resource *irq, - int flags, void (*ihand)(void *), void *arg, void **cookiep) -{ - driver_t *driver; - int error; - - /* somebody tried to setup an irq that failed to allocate! */ - if (irq == NULL) - panic("nexus_setup_intr: NULL irq resource!"); + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - *cookiep = 0; - if ((irq->r_flags & RF_SHAREABLE) == 0) - flags |= INTR_EXCL; - - driver = device_get_driver(child); - - /* - * We depend here on rman_activate_resource() being idempotent. - */ - error = rman_activate_resource(irq); - if (error) - return (error); - - error = inthand_add(device_get_nameunit(child), irq->r_start, - ihand, arg, flags, cookiep); - - return (error); + return (resource_list_release(rl, bus, child, type, rid, r)); } static int -nexus_teardown_intr(device_t dev, device_t child, struct resource *r, void *ih) +legacy_set_resource(device_t dev, device_t child, int type, int rid, + u_long start, u_long count) { - return (inthand_remove(ih)); -} - -static int -nexus_set_resource(device_t dev, device_t child, int type, int rid, u_long start, u_long count) -{ - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; - /* XXX this should return a success/failure indicator */ resource_list_add(rl, type, rid, start, start + count - 1, count); return(0); } static int -nexus_get_resource(device_t dev, device_t child, int type, int rid, u_long *startp, u_long *countp) +legacy_get_resource(device_t dev, device_t child, int type, int rid, + u_long *startp, u_long *countp) { - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; struct resource_list_entry *rle; rle = resource_list_find(rl, type, rid); - device_printf(child, "type %d rid %d startp %p countp %p - got %p\n", - type, rid, startp, countp, rle); if (!rle) return(ENOENT); if (startp) @@ -587,60 +288,10 @@ nexus_get_resource(device_t dev, device_t child, int type, int rid, u_long *star } static void -nexus_delete_resource(device_t dev, device_t child, int type, int rid) +legacy_delete_resource(device_t dev, device_t child, int type, int rid) { - struct nexus_device *ndev = DEVTONX(child); - struct resource_list *rl = &ndev->nx_resources; + struct legacy_device *atdev = DEVTOAT(child); + struct resource_list *rl = &atdev->lg_resources; resource_list_delete(rl, type, rid); } - -#ifdef DEV_ISA -/* - * Placeholder which claims PnP 'devices' which describe system - * resources. - */ -static struct isa_pnp_id sysresource_ids[] = { - { 0x010cd041 /* PNP0c01 */, "System Memory" }, - { 0x020cd041 /* PNP0c02 */, "System Resource" }, - { 0 } -}; - -static int -sysresource_probe(device_t dev) -{ - int result; - - if ((result = ISA_PNP_PROBE(device_get_parent(dev), dev, sysresource_ids)) <= 0) { - device_quiet(dev); - } - return(result); -} - -static int -sysresource_attach(device_t dev) -{ - return(0); -} - -static device_method_t sysresource_methods[] = { - /* Device interface */ - DEVMETHOD(device_probe, sysresource_probe), - DEVMETHOD(device_attach, sysresource_attach), - DEVMETHOD(device_detach, bus_generic_detach), - DEVMETHOD(device_shutdown, bus_generic_shutdown), - DEVMETHOD(device_suspend, bus_generic_suspend), - DEVMETHOD(device_resume, bus_generic_resume), - { 0, 0 } -}; - -static driver_t sysresource_driver = { - "sysresource", - sysresource_methods, - 1, /* no softc */ -}; - -static devclass_t sysresource_devclass; - -DRIVER_MODULE(sysresource, isa, sysresource_driver, sysresource_devclass, 0, 0); -#endif /* DEV_ISA */ diff --git a/sys/i386/include/legacyvar.h b/sys/i386/include/legacyvar.h index be38f33a0753f..3d7728df6a2b1 100644 --- a/sys/i386/include/legacyvar.h +++ b/sys/i386/include/legacyvar.h @@ -26,18 +26,18 @@ * $FreeBSD$ */ -#ifndef _MACHINE_NEXUSVAR_H_ -#define _MACHINE_NEXUSVAR_H_ 1 +#ifndef _MACHINE_LEGACYVAR_H_ +#define _MACHINE_LEGACYVAR_H_ -enum nexus_device_ivars { - NEXUS_IVAR_PCIBUS +enum legacy_device_ivars { + LEGACY_IVAR_PCIBUS }; -#define NEXUS_ACCESSOR(var, ivar, type) \ - __BUS_ACCESSOR(nexus, var, NEXUS, ivar, type) +#define LEGACY_ACCESSOR(var, ivar, type) \ + __BUS_ACCESSOR(legacy, var, LEGACY, ivar, type) -NEXUS_ACCESSOR(pcibus, PCIBUS, u_int32_t) +LEGACY_ACCESSOR(pcibus, PCIBUS, u_int32_t) -#undef NEXUS_ACCESSOR +#undef LEGACY_ACCESSOR -#endif /* !_MACHINE_NEXUSVAR_H_ */ +#endif /* !_MACHINE_LEGACYVAR_H_ */ |