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 *);

Reply via email to