diff options
| author | christos <christos@NetBSD.org> | 2003-01-05 22:33:21 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2003-01-05 22:33:21 +0000 |
| commit | c601b2355ef4b16fecd3492d0c86dc5d3d27042c (patch) | |
| tree | 1e62d738e826bb381638ba7f20c9bd474c08296c /sys/dev | |
| parent | a731ae7dc4d4843d7d736a1d98782f249cea7d29 (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.c | 71 | ||||
| -rw-r--r-- | sys/dev/acpi/files.acpi | 4 |
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 |
