Module Name: src
Committed By: jruoho
Date: Mon Jan 18 18:06:31 UTC 2010
Modified Files:
src/sys/dev/acpi: acpi.c acpivar.h
Log Message:
Introduce acpi_eval_reference_handle() --
an utility function to evaluate reference handles from package elements.
ok jmcneill@, pgoyette@
To generate a diff of this commit:
cvs rdiff -u -r1.145 -r1.146 src/sys/dev/acpi/acpi.c
cvs rdiff -u -r1.38 -r1.39 src/sys/dev/acpi/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/acpi.c
diff -u src/sys/dev/acpi/acpi.c:1.145 src/sys/dev/acpi/acpi.c:1.146
--- src/sys/dev/acpi/acpi.c:1.145 Mon Jan 18 17:34:37 2010
+++ src/sys/dev/acpi/acpi.c Mon Jan 18 18:06:31 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi.c,v 1.145 2010/01/18 17:34:37 jruoho Exp $ */
+/* $NetBSD: acpi.c,v 1.146 2010/01/18 18:06:31 jruoho Exp $ */
/*-
* Copyright (c) 2003, 2007 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.145 2010/01/18 17:34:37 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.146 2010/01/18 18:06:31 jruoho Exp $");
#include "opt_acpi.h"
#include "opt_pcifixup.h"
@@ -1251,6 +1251,38 @@
}
/*
+ * acpi_eval_reference_handle:
+ *
+ * Evaluate a reference handle from an element in a package.
+ */
+ACPI_STATUS
+acpi_eval_reference_handle(ACPI_OBJECT *elm, ACPI_HANDLE *handle)
+{
+
+ if (elm == NULL || handle == NULL)
+ return AE_BAD_PARAMETER;
+
+ switch (elm->Type) {
+
+ case ACPI_TYPE_ANY:
+ case ACPI_TYPE_LOCAL_REFERENCE:
+
+ if (elm->Reference.Handle == NULL)
+ return AE_NULL_ENTRY;
+
+ *handle = elm->Reference.Handle;
+
+ return AE_OK;
+
+ case ACPI_TYPE_STRING:
+ return AcpiGetHandle(NULL, elm->String.Pointer, handle);
+
+ default:
+ return AE_TYPE;
+ }
+}
+
+/*
* acpi_foreach_package_object:
*
* Iterate over all objects in a in a packages and pass then all
Index: src/sys/dev/acpi/acpivar.h
diff -u src/sys/dev/acpi/acpivar.h:1.38 src/sys/dev/acpi/acpivar.h:1.39
--- src/sys/dev/acpi/acpivar.h:1.38 Sun Nov 29 21:32:50 2009
+++ src/sys/dev/acpi/acpivar.h Mon Jan 18 18:06:31 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpivar.h,v 1.38 2009/11/29 21:32:50 cegger Exp $ */
+/* $NetBSD: acpivar.h,v 1.39 2010/01/18 18:06:31 jruoho Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -271,6 +271,7 @@
ACPI_INTEGER arg);
ACPI_STATUS acpi_eval_string(ACPI_HANDLE, const char *, char **);
ACPI_STATUS acpi_eval_struct(ACPI_HANDLE, const char *, ACPI_BUFFER *);
+ACPI_STATUS acpi_eval_reference_handle(ACPI_OBJECT *, ACPI_HANDLE *);
ACPI_STATUS acpi_foreach_package_object(ACPI_OBJECT *,
ACPI_STATUS (*)(ACPI_OBJECT *, void *), void *);