diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/acpica/acpi.c | 189 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_acad.c | 2 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_button.c | 10 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_cmbat.c | 4 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_ec.c | 2 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_isab.c | 4 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_lid.c | 2 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_pcib_acpi.c | 2 | ||||
-rw-r--r-- | sys/dev/acpica/acpi_resource.c | 128 | ||||
-rw-r--r-- | sys/dev/acpica/acpivar.h | 4 |
10 files changed, 246 insertions, 101 deletions
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c index 4f88cd5..ec7a24f 100644 --- a/sys/dev/acpica/acpi.c +++ b/sys/dev/acpica/acpi.c @@ -81,6 +81,9 @@ static struct cdevsw acpi_cdevsw = { struct mtx acpi_mutex; #endif +/* Local pools for managing system resources for ACPI child devices. */ +struct rman acpi_rman_io, acpi_rman_mem; + struct acpi_quirks { char *OemId; uint32_t OemRevision; @@ -111,10 +114,7 @@ static int acpi_read_ivar(device_t dev, device_t child, int index, uintptr_t *result); static int acpi_write_ivar(device_t dev, device_t child, int index, uintptr_t value); -static int acpi_set_resource(device_t dev, device_t child, int type, - int rid, u_long start, u_long count); -static int acpi_get_resource(device_t dev, device_t child, int type, - int rid, u_long *startp, u_long *countp); +static struct resource_list *acpi_get_rlist(device_t dev, device_t child); static struct resource *acpi_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags); @@ -162,8 +162,9 @@ static device_method_t acpi_methods[] = { DEVMETHOD(bus_print_child, acpi_print_child), DEVMETHOD(bus_read_ivar, acpi_read_ivar), DEVMETHOD(bus_write_ivar, acpi_write_ivar), - DEVMETHOD(bus_set_resource, acpi_set_resource), - DEVMETHOD(bus_get_resource, acpi_get_resource), + DEVMETHOD(bus_get_resource_list, acpi_get_rlist), + DEVMETHOD(bus_set_resource, bus_generic_rl_set_resource), + DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource), DEVMETHOD(bus_alloc_resource, acpi_alloc_resource), DEVMETHOD(bus_release_resource, acpi_release_resource), DEVMETHOD(bus_child_pnpinfo_str, acpi_child_pnpinfo_str_method), @@ -395,6 +396,20 @@ acpi_attach(device_t dev) bzero(sc, sizeof(*sc)); sc->acpi_dev = dev; + /* Initialize resource manager. */ + acpi_rman_io.rm_type = RMAN_ARRAY; + acpi_rman_io.rm_start = 0; + acpi_rman_io.rm_end = 0xffff; + acpi_rman_io.rm_descr = "I/O ports"; + if (rman_init(&acpi_rman_io) != 0) + panic("acpi rman_init IO ports failed"); + acpi_rman_mem.rm_type = RMAN_ARRAY; + acpi_rman_mem.rm_start = 0; + acpi_rman_mem.rm_end = ~0ul; + acpi_rman_mem.rm_descr = "I/O memory addresses"; + if (rman_init(&acpi_rman_mem) != 0) + panic("acpi rman_init memory failed"); + #ifdef ACPI_DEBUGGER debugpoint = getenv("debug.acpi.debugger"); if (debugpoint) { @@ -824,56 +839,102 @@ acpi_write_ivar(device_t dev, device_t child, int index, uintptr_t value) /* * Handle child resource allocation/removal */ -static int -acpi_set_resource(device_t dev, device_t child, int type, int rid, - u_long start, u_long count) +static struct resource_list * +acpi_get_rlist(device_t dev, device_t child) { - struct acpi_device *ad = device_get_ivars(child); - struct resource_list *rl = &ad->ad_rl; - - resource_list_add(rl, type, rid, start, start + count -1, count); + struct acpi_device *ad; - return(0); -} - -static int -acpi_get_resource(device_t dev, device_t child, int type, int rid, - u_long *startp, u_long *countp) -{ - struct acpi_device *ad = device_get_ivars(child); - struct resource_list *rl = &ad->ad_rl; - struct resource_list_entry *rle; - - rle = resource_list_find(rl, type, rid); - if (!rle) - return(ENOENT); - - if (startp) - *startp = rle->start; - if (countp) - *countp = rle->count; - - return (0); + ad = device_get_ivars(child); + return (&ad->ad_rl); } static struct resource * acpi_alloc_resource(device_t bus, device_t child, int type, int *rid, - u_long start, u_long end, u_long count, u_int flags) + u_long start, u_long end, u_long count, u_int flags) { struct acpi_device *ad = device_get_ivars(child); struct resource_list *rl = &ad->ad_rl; + struct resource_list_entry *rle; + struct resource *res; + struct rman *rm; + int needactivate; + + /* + * If this is an allocation of the "default" range for a given RID, and + * we know what the resources for this device are (i.e., they're on the + * child's resource list), use those start/end values. + */ + if (start == 0UL && end == ~0UL) { + rle = resource_list_find(rl, type, *rid); + if (rle == NULL) + return (NULL); + start = rle->start; + end = rle->end; + count = rle->count; + } + + /* If we don't manage this address, pass the request up to the parent. */ + rle = acpi_sysres_find(type, start); + if (rle == NULL) { + return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child, type, rid, + start, end, count, flags)); + } + + /* We only handle memory and IO resources through rman. */ + switch (type) { + case SYS_RES_IOPORT: + rm = &acpi_rman_io; + break; + case SYS_RES_MEMORY: + rm = &acpi_rman_mem; + break; + default: + panic("acpi_alloc_resource: invalid res type %d", type); + } + + /* If we do know it, allocate it from the local pool. */ + needactivate = flags & RF_ACTIVE; + flags &= ~RF_ACTIVE; + res = rman_reserve_resource(rm, start, end, count, flags, child); + if (res == NULL) + return (NULL); + + /* Copy the bus tag from the pre-allocated resource. */ + rman_set_bustag(res, rman_get_bustag(rle->res)); + if (type == SYS_RES_IOPORT) + rman_set_bushandle(res, res->r_start); + + /* If requested, activate the resource using the parent's method. */ + if (needactivate) + if (bus_activate_resource(child, type, *rid, res) != 0) { + rman_release_resource(res); + return (NULL); + } - return (resource_list_alloc(rl, bus, child, type, rid, start, end, count, - flags)); + return (res); } static int -acpi_release_resource(device_t bus, device_t child, int type, int rid, struct resource *r) +acpi_release_resource(device_t bus, device_t child, int type, int rid, + struct resource *r) { - struct acpi_device *ad = device_get_ivars(child); - struct resource_list *rl = &ad->ad_rl; + int ret; + + /* + * If we know about this address, deactivate it and release it to the + * local pool. If we don't, pass this request up to the parent. + */ + if (acpi_sysres_find(type, rman_get_start(r)) == NULL) { + if (rman_get_flags(r) & RF_ACTIVE) { + ret = bus_deactivate_resource(child, type, rid, r); + if (ret != 0) + return (ret); + } + ret = rman_release_resource(r); + } else + ret = BUS_RELEASE_RESOURCE(device_get_parent(bus), child, type, rid, r); - return (resource_list_release(rl, bus, child, type, rid, r)); + return (ret); } /* Allocate an IO port or memory resource, given its GAS. */ @@ -1043,8 +1104,8 @@ acpi_probe_children(device_t bus) { ACPI_HANDLE parent; ACPI_STATUS status; - static char *scopes[] = {"\\_PR_", "\\_TZ_", "\\_SI", "\\_SB_", NULL}; int i; + static char *scopes[] = {"\\_PR_", "\\_TZ_", "\\_SI", "\\_SB_", NULL}; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); ACPI_ASSERTLOCK; @@ -1091,6 +1152,28 @@ acpi_probe_children(device_t bus) return_VOID; } +static int +acpi_probe_order(ACPI_HANDLE handle, int level, int *order) +{ + int ret; + + ret = 0; + /* IO port and memory system resource holders are first. */ + if (acpi_MatchHid(handle, "PNP0C01") || acpi_MatchHid(handle, "PNP0C02")) { + *order = 1; + ret = 1; + } + + /* The embedded controller is needed to handle accesses early. */ + if (acpi_MatchHid(handle, "PNP0C09")) { + *order = 2; + ret = 1; + } + + *order = (level + 1) * 10; + return (ret); +} + /* * Evaluate a child device and determine whether we might attach a device to * it. @@ -1099,7 +1182,8 @@ static ACPI_STATUS acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status) { ACPI_OBJECT_TYPE type; - device_t child, bus = (device_t)context; + device_t child, bus; + int order, probe_now; ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__); @@ -1107,6 +1191,7 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status) if (acpi_avoid(handle)) return_ACPI_STATUS (AE_OK); + bus = (device_t)context; if (ACPI_SUCCESS(AcpiGetType(handle, &type))) { switch(type) { case ACPI_TYPE_DEVICE: @@ -1122,7 +1207,8 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status) */ ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "scanning '%s'\n", acpi_name(handle))); - child = BUS_ADD_CHILD(bus, level * 10, NULL, -1); + probe_now = acpi_probe_order(handle, level, &order); + child = BUS_ADD_CHILD(bus, order, NULL, -1); if (child == NULL) break; @@ -1154,6 +1240,8 @@ acpi_probe_child(ACPI_HANDLE handle, UINT32 level, void *context, void **status) acpi_parse_resources(child, handle, &acpi_res_parse_set, NULL); /* If we're debugging, probe/attach now rather than later */ + if (probe_now) + device_probe_and_attach(child); ACPI_DEBUG_EXEC(device_probe_and_attach(child)); break; } @@ -1342,13 +1430,12 @@ acpi_BatteryIsPresent(device_t dev) } /* - * Match a HID string against a device + * Match a HID string against a handle */ BOOLEAN -acpi_MatchHid(device_t dev, char *hid) +acpi_MatchHid(ACPI_HANDLE h, char *hid) { ACPI_DEVICE_INFO *devinfo; - ACPI_HANDLE h; ACPI_BUFFER buf; ACPI_STATUS error; int ret, i; @@ -1356,15 +1443,13 @@ acpi_MatchHid(device_t dev, char *hid) ACPI_ASSERTLOCK; ret = FALSE; - if (hid == NULL) - return (FALSE); - if ((h = acpi_get_handle(dev)) == NULL) - return (FALSE); + if (hid == NULL || h == NULL) + return (ret); buf.Pointer = NULL; buf.Length = ACPI_ALLOCATE_BUFFER; error = AcpiGetObjectInfo(h, &buf); if (ACPI_FAILURE(error)) - return (FALSE); + return (ret); devinfo = (ACPI_DEVICE_INFO *)buf.Pointer; if ((devinfo->Valid & ACPI_VALID_HID) != 0 && diff --git a/sys/dev/acpica/acpi_acad.c b/sys/dev/acpica/acpi_acad.c index d5c7439..6063a71 100644 --- a/sys/dev/acpica/acpi_acad.c +++ b/sys/dev/acpica/acpi_acad.c @@ -137,7 +137,7 @@ static int acpi_acad_probe(device_t dev) { if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("acad") && - acpi_MatchHid(dev, "ACPI0003")) { + acpi_MatchHid(acpi_get_handle(dev), "ACPI0003")) { device_set_desc(dev, "AC Adapter"); return (0); } diff --git a/sys/dev/acpica/acpi_button.c b/sys/dev/acpica/acpi_button.c index 8314486..4ea77db 100644 --- a/sys/dev/acpica/acpi_button.c +++ b/sys/dev/acpica/acpi_button.c @@ -90,24 +90,26 @@ static int acpi_button_probe(device_t dev) { struct acpi_button_softc *sc; + ACPI_HANDLE h; int ret = ENXIO; + h = acpi_get_handle(dev); sc = device_get_softc(dev); if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("button")) { - if (acpi_MatchHid(dev, "PNP0C0C")) { + if (acpi_MatchHid(h, "PNP0C0C")) { device_set_desc(dev, "Power Button"); sc->button_type = ACPI_POWER_BUTTON; ret = 0; - } else if (acpi_MatchHid(dev, "ACPI_FPB")) { + } else if (acpi_MatchHid(h, "ACPI_FPB")) { device_set_desc(dev, "Power Button (fixed)"); sc->button_type = ACPI_POWER_BUTTON; sc->fixed = 1; ret = 0; - } else if (acpi_MatchHid(dev, "PNP0C0E")) { + } else if (acpi_MatchHid(h, "PNP0C0E")) { device_set_desc(dev, "Sleep Button"); sc->button_type = ACPI_SLEEP_BUTTON; ret = 0; - } else if (acpi_MatchHid(dev, "ACPI_FSB")) { + } else if (acpi_MatchHid(h, "ACPI_FSB")) { device_set_desc(dev, "Sleep Button (fixed)"); sc->button_type = ACPI_SLEEP_BUTTON; sc->fixed = 1; diff --git a/sys/dev/acpica/acpi_cmbat.c b/sys/dev/acpica/acpi_cmbat.c index 2636f0b..6f81c44 100644 --- a/sys/dev/acpica/acpi_cmbat.c +++ b/sys/dev/acpica/acpi_cmbat.c @@ -291,8 +291,8 @@ acpi_cmbat_notify_handler(ACPI_HANDLE h, UINT32 notify, void *context) static int acpi_cmbat_probe(device_t dev) { - if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && - !acpi_disabled("cmbat") && acpi_MatchHid(dev, "PNP0C0A")) { + if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("cmbat") + && acpi_MatchHid(acpi_get_handle(dev), "PNP0C0A")) { device_set_desc(dev, "Control Method Battery"); return (0); diff --git a/sys/dev/acpica/acpi_ec.c b/sys/dev/acpica/acpi_ec.c index 03f719a..d2605bc 100644 --- a/sys/dev/acpica/acpi_ec.c +++ b/sys/dev/acpica/acpi_ec.c @@ -454,7 +454,7 @@ acpi_ec_probe(device_t dev) if (DEV_ECDT(dev)) { params = acpi_get_private(dev); ret = 0; - } else if (acpi_MatchHid(dev, "PNP0C09")) { + } else if (acpi_MatchHid(acpi_get_handle(dev), "PNP0C09")) { params = malloc(sizeof(struct acpi_ec_params), M_TEMP, M_WAITOK | M_ZERO); h = acpi_get_handle(dev); diff --git a/sys/dev/acpica/acpi_isab.c b/sys/dev/acpica/acpi_isab.c index 61e9a1f..a7c70c7 100644 --- a/sys/dev/acpica/acpi_isab.c +++ b/sys/dev/acpica/acpi_isab.c @@ -90,11 +90,13 @@ MODULE_DEPEND(acpi_isab, acpi, 1, 1, 1); static int acpi_isab_probe(device_t dev) { + ACPI_HANDLE h; + h = acpi_get_handle(dev); if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("isa") && devclass_get_device(isab_devclass, 0) == dev && - (acpi_MatchHid(dev, "PNP0A05") || acpi_MatchHid(dev, "PNP0A06"))) { + (acpi_MatchHid(h, "PNP0A05") || acpi_MatchHid(h, "PNP0A06"))) { device_set_desc(dev, "ACPI Generic ISA bridge"); return (0); } diff --git a/sys/dev/acpica/acpi_lid.c b/sys/dev/acpica/acpi_lid.c index 82beb46..e169237 100644 --- a/sys/dev/acpica/acpi_lid.c +++ b/sys/dev/acpica/acpi_lid.c @@ -82,7 +82,7 @@ static int acpi_lid_probe(device_t dev) { if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("lid") && - acpi_MatchHid(dev, "PNP0C0D")) { + acpi_MatchHid(acpi_get_handle(dev), "PNP0C0D")) { device_set_desc(dev, "Control Method Lid Switch"); return (0); diff --git a/sys/dev/acpica/acpi_pcib_acpi.c b/sys/dev/acpica/acpi_pcib_acpi.c index 47c8949..cbb9bee 100644 --- a/sys/dev/acpica/acpi_pcib_acpi.c +++ b/sys/dev/acpica/acpi_pcib_acpi.c @@ -117,7 +117,7 @@ acpi_pcib_acpi_probe(device_t dev) { if (acpi_get_type(dev) == ACPI_TYPE_DEVICE && !acpi_disabled("pci") && - acpi_MatchHid(dev, "PNP0A03")) { + acpi_MatchHid(acpi_get_handle(dev), "PNP0A03")) { if (pci_cfgregopen() == 0) return (ENXIO); diff --git a/sys/dev/acpica/acpi_resource.c b/sys/dev/acpica/acpi_resource.c index ffc2c98..06bf29b 100644 --- a/sys/dev/acpica/acpi_resource.c +++ b/sys/dev/acpica/acpi_resource.c @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/kernel.h> #include <sys/bus.h> +#include <sys/malloc.h> #include <sys/module.h> #include <machine/bus.h> @@ -537,72 +538,125 @@ acpi_res_set_end_dependant(device_t dev, void *context) } /* - * Resource-owning placeholders. + * Resource-owning placeholders for IO and memory pseudo-devices. * - * This code "owns" system resource objects that aren't - * otherwise useful to devices, and which shouldn't be - * considered "free". - * - * Note that some systems claim *all* of the physical address space - * with a PNP0C01 device, so we cannot correctly "own" system memory - * here (must be done in the SMAP handler on x86 systems, for - * example). + * This code allocates system resource objects that will be owned by ACPI + * child devices. Really, the acpi parent device should have the resources + * but this would significantly affect the device probe code. */ -static int acpi_sysresource_probe(device_t dev); -static int acpi_sysresource_attach(device_t dev); +static int acpi_sysres_probe(device_t dev); +static int acpi_sysres_attach(device_t dev); -static device_method_t acpi_sysresource_methods[] = { +static device_method_t acpi_sysres_methods[] = { /* Device interface */ - DEVMETHOD(device_probe, acpi_sysresource_probe), - DEVMETHOD(device_attach, acpi_sysresource_attach), + DEVMETHOD(device_probe, acpi_sysres_probe), + DEVMETHOD(device_attach, acpi_sysres_attach), {0, 0} }; -static driver_t acpi_sysresource_driver = { +static driver_t acpi_sysres_driver = { "acpi_sysresource", - acpi_sysresource_methods, + acpi_sysres_methods, 0, }; -static devclass_t acpi_sysresource_devclass; -DRIVER_MODULE(acpi_sysresource, acpi, acpi_sysresource_driver, - acpi_sysresource_devclass, 0, 0); +static devclass_t acpi_sysres_devclass; +DRIVER_MODULE(acpi_sysresource, acpi, acpi_sysres_driver, acpi_sysres_devclass, + 0, 0); MODULE_DEPEND(acpi_sysresource, acpi, 1, 1, 1); static int -acpi_sysresource_probe(device_t dev) +acpi_sysres_probe(device_t dev) { - if (!acpi_disabled("sysresource") && acpi_MatchHid(dev, "PNP0C02")) - device_set_desc(dev, "System Resource"); - else + ACPI_HANDLE h; + + h = acpi_get_handle(dev); + if (acpi_disabled("sysresource") || + (!acpi_MatchHid(h, "PNP0C01") && !acpi_MatchHid(h, "PNP0C02"))) return (ENXIO); + device_set_desc(dev, "System Resource"); device_quiet(dev); return (-100); } static int -acpi_sysresource_attach(device_t dev) +acpi_sysres_attach(device_t dev) { - struct resource *res; - int i, rid; + device_t gparent; + struct resource *res; + struct rman *rm; + struct resource_list_entry *rle; + struct resource_list *rl; /* - * Suck up all the resources that might have been assigned to us. - * Note that it's impossible to tell the difference between a - * resource that someone else has claimed, and one that doesn't - * exist. + * Pre-allocate/manage all memory and IO resources. We detect duplicates + * by setting rle->res to the resource we got from the parent. We can't + * ignore them since rman can't handle duplicates. */ - for (i = 0; i < 100; i++) { - rid = i; - res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, 0); - rid = i; - res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, 0); - rid = i; - res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_SHAREABLE); + rl = BUS_GET_RESOURCE_LIST(device_get_parent(dev), dev); + SLIST_FOREACH(rle, rl, link) { + if (rle->res != NULL) { + device_printf(dev, "duplicate resource for %lx\n", rle->start); + continue; + } + + /* Only memory and IO resources are valid here. */ + switch (rle->type) { + case SYS_RES_IOPORT: + rm = &acpi_rman_io; + break; + case SYS_RES_MEMORY: + rm = &acpi_rman_mem; + break; + default: + continue; + } + + /* Pre-allocate resource and add to our rman pool. */ + gparent = device_get_parent(device_get_parent(dev)); + res = BUS_ALLOC_RESOURCE(gparent, dev, rle->type, &rle->rid, + rle->start, rle->start + rle->count - 1, rle->count, 0); + if (res != NULL) { + rman_manage_region(rm, rman_get_start(res), rman_get_end(res)); + rle->res = res; + } } return (0); } + +struct resource_list_entry * +acpi_sysres_find(int type, u_long addr) +{ + device_t *devs; + int i, numdevs; + struct resource_list *rl; + struct resource_list_entry *rle; + + /* We only consider IO and memory resources for our pool. */ + rle = NULL; + if (type != SYS_RES_IOPORT && type != SYS_RES_MEMORY) + return (rle); + + /* Find all the sysresource devices. */ + if (devclass_get_devices(acpi_sysres_devclass, &devs, &numdevs) != 0) + return (rle); + + /* Check each device for a resource that contains "addr". */ + for (i = 0; i < numdevs && rle == NULL; i++) { + rl = BUS_GET_RESOURCE_LIST(device_get_parent(devs[i]), devs[i]); + if (rl == NULL) + continue; + SLIST_FOREACH(rle, rl, link) { + if (type == rle->type && addr >= rle->start && + addr < rle->start + rle->count) + break; + } + } + + free(devs, M_TEMP); + return (rle); +} diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index 69b84af..959681d 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -215,7 +215,7 @@ void acpi_EnterDebugger(void); #define ACPI_DEVINFO_PRESENT(x) (((x) & 0x9) == 9) BOOLEAN acpi_DeviceIsPresent(device_t dev); BOOLEAN acpi_BatteryIsPresent(device_t dev); -BOOLEAN acpi_MatchHid(device_t dev, char *hid); +BOOLEAN acpi_MatchHid(ACPI_HANDLE h, char *hid); ACPI_STATUS acpi_GetHandleInScope(ACPI_HANDLE parent, char *path, ACPI_HANDLE *result); uint32_t acpi_TimerDelta(uint32_t end, uint32_t start); @@ -270,6 +270,8 @@ struct acpi_parse_resource_set { extern struct acpi_parse_resource_set acpi_res_parse_set; ACPI_STATUS acpi_parse_resources(device_t dev, ACPI_HANDLE handle, struct acpi_parse_resource_set *set, void *arg); +extern struct rman acpi_rman_io, acpi_rman_mem; +struct resource_list_entry *acpi_sysres_find(int type, u_long addr); /* ACPI event handling */ UINT32 acpi_event_power_button_sleep(void *context); |