Module Name: src Committed By: jruoho Date: Mon Jan 4 09:43:30 UTC 2010
Modified Files: src/sys/dev/acpi: wmi_acpi.c wmi_acpivar.h Log Message: Two bug fixes: - Use ACPI_ALL_NOTIFY instead of ACPI_DEVICE_NOTIFY. - Fix the data query method: this fails without input. ok pgoyette@ To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/sys/dev/acpi/wmi_acpi.c cvs rdiff -u -r1.4 -r1.5 src/sys/dev/acpi/wmi_acpivar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/wmi_acpi.c diff -u src/sys/dev/acpi/wmi_acpi.c:1.5 src/sys/dev/acpi/wmi_acpi.c:1.6 --- src/sys/dev/acpi/wmi_acpi.c:1.5 Mon Jan 4 09:34:47 2010 +++ src/sys/dev/acpi/wmi_acpi.c Mon Jan 4 09:43:30 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: wmi_acpi.c,v 1.5 2010/01/04 09:34:47 jruoho Exp $ */ +/* $NetBSD: wmi_acpi.c,v 1.6 2010/01/04 09:43:30 jruoho Exp $ */ /*- * Copyright (c) 2009 Jukka Ruohonen <jruoho...@iki.fi> @@ -27,7 +27,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.5 2010/01/04 09:34:47 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wmi_acpi.c,v 1.6 2010/01/04 09:43:30 jruoho Exp $"); #include <sys/param.h> #include <sys/device.h> @@ -391,7 +391,7 @@ ACPI_STATUS rv; rv = AcpiInstallNotifyHandler(sc->sc_node->ad_handle, - ACPI_DEVICE_NOTIFY, acpi_wmi_event_handler, sc); + ACPI_ALL_NOTIFY, acpi_wmi_event_handler, sc); if (ACPI_FAILURE(rv)) { aprint_error_dev(sc->sc_dev, "failed to install notify " @@ -429,7 +429,7 @@ ACPI_STATUS rv; rv = AcpiRemoveNotifyHandler(sc->sc_node->ad_handle, - ACPI_DEVICE_NOTIFY, acpi_wmi_event_handler); + ACPI_ALL_NOTIFY, acpi_wmi_event_handler); if (ACPI_FAILURE(rv)) { aprint_debug_dev(sc->sc_dev, "failed to remove notify " @@ -596,12 +596,15 @@ * method for data collection will be invoked if it is available. */ ACPI_STATUS -acpi_wmi_data_query(device_t self, const char *guid, ACPI_BUFFER *obuf) +acpi_wmi_data_query(device_t self, const char *guid, + uint8_t idx, ACPI_BUFFER *obuf) { struct acpi_wmi_softc *sc = device_private(self); struct wmi_t *wmi; char path[5] = "WQ"; + ACPI_OBJECT_LIST arg; ACPI_STATUS rv, rvxx; + ACPI_OBJECT obj; rvxx = AE_SUPPORT; @@ -613,14 +616,17 @@ if (ACPI_FAILURE(rv)) return rv; - if (!(wmi->guid.flags & ACPI_WMI_FLAG_DATA)) - return AE_BAD_PARAMETER; - - if (wmi->guid.count == 0x00 || wmi->guid.flags == 0x00) - return AE_BAD_VALUE; + if (acpi_wmi_input(wmi, ACPI_WMI_FLAG_DATA, idx) != true) + return AE_BAD_DATA; (void)strlcat(path, wmi->guid.oid, sizeof(path)); + obj.Type = ACPI_TYPE_INTEGER; + obj.Integer.Value = idx; + + arg.Count = 0x01; + arg.Pointer = &obj; + obuf->Pointer = NULL; obuf->Length = ACPI_ALLOCATE_LOCAL_BUFFER; @@ -634,7 +640,7 @@ wmi->guid.oid, true, true); } - rv = acpi_eval_struct(sc->sc_node->ad_handle, path, obuf); + rv = AcpiEvaluateObject(sc->sc_node->ad_handle, path, &arg, obuf); /* No longer needed. */ if (ACPI_SUCCESS(rvxx)) { Index: src/sys/dev/acpi/wmi_acpivar.h diff -u src/sys/dev/acpi/wmi_acpivar.h:1.4 src/sys/dev/acpi/wmi_acpivar.h:1.5 --- src/sys/dev/acpi/wmi_acpivar.h:1.4 Mon Jan 4 09:34:47 2010 +++ src/sys/dev/acpi/wmi_acpivar.h Mon Jan 4 09:43:30 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: wmi_acpivar.h,v 1.4 2010/01/04 09:34:47 jruoho Exp $ */ +/* $NetBSD: wmi_acpivar.h,v 1.5 2010/01/04 09:43:30 jruoho Exp $ */ /*- * Copyright (c) 2009 Jukka Ruohonen <jruoho...@iki.fi> @@ -30,12 +30,13 @@ #define WMI_ACPIVAR_H #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wmi_acpivar.h,v 1.4 2010/01/04 09:34:47 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wmi_acpivar.h,v 1.5 2010/01/04 09:43:30 jruoho Exp $"); ACPI_STATUS acpi_wmi_event_register(device_t, ACPI_NOTIFY_HANDLER); ACPI_STATUS acpi_wmi_event_get(device_t, uint32_t, ACPI_BUFFER *); int acpi_wmi_guid_match(device_t, const char *); -ACPI_STATUS acpi_wmi_data_query(device_t, const char *, ACPI_BUFFER *); +ACPI_STATUS acpi_wmi_data_query(device_t, const char *, + uint8_t, ACPI_BUFFER *); ACPI_STATUS acpi_wmi_data_write(device_t, const char *, uint8_t, ACPI_BUFFER *); ACPI_STATUS acpi_wmi_method(device_t, const char *, uint8_t,