summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2003-01-05 22:33:21 +0000
committerchristos <christos@NetBSD.org>2003-01-05 22:33:21 +0000
commitc601b2355ef4b16fecd3492d0c86dc5d3d27042c (patch)
tree1e62d738e826bb381638ba7f20c9bd474c08296c /sys/dev
parenta731ae7dc4d4843d7d736a1d98782f249cea7d29 (diff)
add ACPIVERBOSE; while I am there, fix the eval_string function so it does
not leak.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/acpi/acpi.c71
-rw-r--r--sys/dev/acpi/files.acpi4
2 files changed, 50 insertions, 25 deletions
diff --git a/sys/dev/acpi/acpi.c b/sys/dev/acpi/acpi.c
index fd28ecb4450..7351bebfac5 100644
--- a/sys/dev/acpi/acpi.c
+++ b/sys/dev/acpi/acpi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi.c,v 1.26 2003/01/05 06:19:05 jmcneill Exp $ */
+/* $NetBSD: acpi.c,v 1.27 2003/01/05 22:33:21 christos Exp $ */
/*
* Copyright 2001 Wasabi Systems, Inc.
@@ -41,7 +41,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.26 2003/01/05 06:19:05 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.27 2003/01/05 22:33:21 christos Exp $");
+
+#include "opt_acpi.h"
#include <sys/param.h>
#include <sys/systm.h>
@@ -52,6 +54,9 @@ __KERNEL_RCSID(0, "$NetBSD: acpi.c,v 1.26 2003/01/05 06:19:05 jmcneill Exp $");
#include <dev/acpi/acpireg.h>
#include <dev/acpi/acpivar.h>
#include <dev/acpi/acpi_osd.h>
+#ifdef ACPIVERBOSE
+#include <dev/acpi/acpidevs_data.h>
+#endif
#ifndef ACPI_PCI_FIXUP
#define ACPI_PCI_FIXUP 1
@@ -558,29 +563,44 @@ int
acpi_print(void *aux, const char *pnp)
{
struct acpi_attach_args *aa = aux;
- char *uid;
-#if 0
- char *str;
-#endif
if (pnp) {
- if (aa->aa_node->ad_devinfo.Valid & ACPI_VALID_HID)
- aprint_normal("%s ",
- aa->aa_node->ad_devinfo.HardwareId);
- else /* XXX print something more meaningful.. */
+ if (aa->aa_node->ad_devinfo.Valid & ACPI_VALID_HID) {
+ char *pnpstr = aa->aa_node->ad_devinfo.HardwareId;
+ char *str;
+
+ aprint_normal("%s ", pnpstr);
+ if (acpi_eval_string(aa->aa_node->ad_handle,
+ "_STR", &str) == AE_OK) {
+ aprint_normal("[%s] ", str);
+ AcpiOsFree(str);
+ }
+#ifdef ACPIVERBOSE
+ else {
+ int i;
+
+ for (i = 0; i < sizeof(acpi_knowndevs) /
+ sizeof(acpi_knowndevs[0]); i++) {
+ if (strcmp(acpi_knowndevs[i].pnp,
+ pnpstr) == 0) {
+ printf("[%s] ",
+ acpi_knowndevs[i].str);
+ }
+ }
+ }
+
+#endif
+ } else {
+ /* XXX print something more meaningful.. */
aprint_normal("ACPI Object Type 0x%02x ",
aa->aa_node->ad_devinfo.Type);
-#if 0 /* Not until we fix acpi_eval_string */
- if (acpi_eval_string(aa->aa_node->ad_handle,
- "_STR", &str) == AE_OK) {
- aprint_normal("[%s] ", str);
- AcpiOsFree(str);
}
-#endif
aprint_normal("at %s", pnp);
} else {
aprint_normal(" (%s", aa->aa_node->ad_devinfo.HardwareId);
if (aa->aa_node->ad_devinfo.Valid & ACPI_VALID_UID) {
+ char *uid;
+
if (aa->aa_node->ad_devinfo.UniqueId[0] == '\0')
uid = "<null>";
else
@@ -707,12 +727,10 @@ acpi_eval_integer(ACPI_HANDLE handle, char *path, int *valp)
return (rv);
}
-#if 0
/*
* acpi_eval_string:
*
* Evaluate a (Unicode) string object.
- * XXX current API may leak memory, so don't use this.
*/
ACPI_STATUS
acpi_eval_string(ACPI_HANDLE handle, char *path, char **stringp)
@@ -739,17 +757,24 @@ acpi_eval_string(ACPI_HANDLE handle, char *path, char **stringp)
param = (ACPI_OBJECT *)buf.Pointer;
if (rv == AE_OK) {
if (param->Type == ACPI_TYPE_STRING) {
- /* XXX may leak buf.Pointer!! */
- *stringp = param->String.Pointer;
- return (AE_OK);
+ char *ptr = param->String.Pointer;
+ size_t len;
+ while (*ptr++)
+ continue;
+ len = ptr - param->String.Pointer;
+ if ((*stringp = AcpiOsAllocate(len)) == NULL) {
+ rv = AE_NO_MEMORY;
+ goto done;
+ }
+ (void)memcpy(*stringp, param->String.Pointer, len);
+ goto done;
}
rv = AE_TYPE;
}
-
+done:
AcpiOsFree(buf.Pointer);
return (rv);
}
-#endif
/*
diff --git a/sys/dev/acpi/files.acpi b/sys/dev/acpi/files.acpi
index 241abc5bb34..34e690544cb 100644
--- a/sys/dev/acpi/files.acpi
+++ b/sys/dev/acpi/files.acpi
@@ -1,8 +1,8 @@
-# $NetBSD: files.acpi,v 1.14 2003/01/05 01:03:45 fvdl Exp $
+# $NetBSD: files.acpi,v 1.15 2003/01/05 22:33:23 christos Exp $
include "dev/acpi/acpica/files.acpica"
-defflag opt_acpi.h ACPI_DEBUG
+defflag opt_acpi.h ACPIVERBOSE ACPI_DEBUG
device acpi { }
attach acpi at acpibus