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