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,

Reply via email to