diff options
Diffstat (limited to 'sys/contrib/dev/acpica/nsutils.c')
-rw-r--r-- | sys/contrib/dev/acpica/nsutils.c | 157 |
1 files changed, 119 insertions, 38 deletions
diff --git a/sys/contrib/dev/acpica/nsutils.c b/sys/contrib/dev/acpica/nsutils.c index 69ed423..321cb30 100644 --- a/sys/contrib/dev/acpica/nsutils.c +++ b/sys/contrib/dev/acpica/nsutils.c @@ -2,7 +2,7 @@ * * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing * parents and siblings and Scope manipulation - * $Revision: 116 $ + * $Revision: 122 $ * *****************************************************************************/ @@ -10,7 +10,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2002, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2003, Intel Corp. * All rights reserved. * * 2. License @@ -143,7 +143,7 @@ void AcpiNsReportError ( - NATIVE_CHAR *ModuleName, + char *ModuleName, UINT32 LineNumber, UINT32 ComponentId, char *InternalName, @@ -152,12 +152,12 @@ AcpiNsReportError ( ACPI_STATUS Status; char *Name; - + /* Convert path to external format */ Status = AcpiNsExternalizeName (ACPI_UINT32_MAX, InternalName, NULL, &Name); - AcpiOsPrintf ("%8s-%04d: *** Error: Looking up ", + AcpiOsPrintf ("%8s-%04d: *** Error: Looking up ", ModuleName, LineNumber); /* Print target name */ @@ -171,7 +171,7 @@ AcpiNsReportError ( AcpiOsPrintf ("[COULD NOT EXTERNALIZE NAME]"); } - AcpiOsPrintf (" in namespace, %s\n", + AcpiOsPrintf (" in namespace, %s\n", AcpiFormatException (LookupStatus)); if (Name) @@ -183,6 +183,85 @@ AcpiNsReportError ( /******************************************************************************* * + * FUNCTION: AcpiNsReportMethodError + * + * PARAMETERS: ModuleName - Caller's module name (for error output) + * LineNumber - Caller's line number (for error output) + * ComponentId - Caller's component ID (for error output) + * Message - Error message to use on failure + * + * RETURN: None + * + * DESCRIPTION: Print warning message with full pathname + * + ******************************************************************************/ + +void +AcpiNsReportMethodError ( + char *ModuleName, + UINT32 LineNumber, + UINT32 ComponentId, + char *Message, + ACPI_NAMESPACE_NODE *PrefixNode, + char *Path, + ACPI_STATUS MethodStatus) +{ + ACPI_STATUS Status; + ACPI_NAMESPACE_NODE *Node = PrefixNode; + + + if (Path) + { + Status = AcpiNsGetNodeByPath (Path, PrefixNode, ACPI_NS_NO_UPSEARCH, &Node); + if (ACPI_FAILURE (Status)) + { + AcpiOsPrintf ("ReportMethodError: Could not get node\n"); + return; + } + } + + AcpiOsPrintf ("%8s-%04d: *** Error: ", ModuleName, LineNumber); + AcpiNsPrintNodePathname (Node, Message); + AcpiOsPrintf (", %s\n", AcpiFormatException (MethodStatus)); +} + + +/******************************************************************************* + * + * FUNCTION: AcpiNsPrintNodePathname + * + * PARAMETERS: Node - Object + * Msg - Prefix message + * + * DESCRIPTION: Print an object's full namespace pathname + * Manages allocation/freeing of a pathname buffer + * + ******************************************************************************/ + +void +AcpiNsPrintNodePathname ( + ACPI_NAMESPACE_NODE *Node, + char *Msg) +{ + ACPI_BUFFER Buffer; + ACPI_STATUS Status; + + + /* Convert handle to a full pathname and print it (with supplied message) */ + + Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER; + + Status = AcpiNsHandleToPathname (Node, &Buffer); + if (ACPI_SUCCESS (Status)) + { + AcpiOsPrintf ("%s [%s] (Node %p)", Msg, (char *) Buffer.Pointer, Node); + ACPI_MEM_FREE (Buffer.Pointer); + } +} + + +/******************************************************************************* + * * FUNCTION: AcpiNsValidRootPrefix * * PARAMETERS: Prefix - Character to be checked @@ -195,7 +274,7 @@ AcpiNsReportError ( BOOLEAN AcpiNsValidRootPrefix ( - NATIVE_CHAR Prefix) + char Prefix) { return ((BOOLEAN) (Prefix == '\\')); @@ -216,7 +295,7 @@ AcpiNsValidRootPrefix ( BOOLEAN AcpiNsValidPathSeparator ( - NATIVE_CHAR Sep) + char Sep) { return ((BOOLEAN) (Sep == '.')); @@ -298,7 +377,7 @@ void AcpiNsGetInternalNameLength ( ACPI_NAMESTRING_INFO *Info) { - NATIVE_CHAR *NextExternalChar; + char *NextExternalChar; UINT32 i; @@ -379,10 +458,10 @@ AcpiNsBuildInternalName ( ACPI_NAMESTRING_INFO *Info) { UINT32 NumSegments = Info->NumSegments; - NATIVE_CHAR *InternalName = Info->InternalName; - NATIVE_CHAR *ExternalName = Info->NextExternalChar; - NATIVE_CHAR *Result = NULL; - NATIVE_UINT i; + char *InternalName = Info->InternalName; + char *ExternalName = Info->NextExternalChar; + char *Result = NULL; + ACPI_NATIVE_UINT i; ACPI_FUNCTION_TRACE ("NsBuildInternalName"); @@ -432,13 +511,13 @@ AcpiNsBuildInternalName ( else if (NumSegments == 2) { InternalName[i] = AML_DUAL_NAME_PREFIX; - Result = &InternalName[i+1]; + Result = &InternalName[(ACPI_NATIVE_UINT) (i+1)]; } else { InternalName[i] = AML_MULTI_NAME_PREFIX_OP; - InternalName[i+1] = (char) NumSegments; - Result = &InternalName[i+2]; + InternalName[(ACPI_NATIVE_UINT) (i+1)] = (char) NumSegments; + Result = &InternalName[(ACPI_NATIVE_UINT) (i+2)]; } } @@ -514,10 +593,10 @@ AcpiNsBuildInternalName ( ACPI_STATUS AcpiNsInternalizeName ( - NATIVE_CHAR *ExternalName, - NATIVE_CHAR **ConvertedName) + char *ExternalName, + char **ConvertedName) { - NATIVE_CHAR *InternalName; + char *InternalName; ACPI_NAMESTRING_INFO Info; ACPI_STATUS Status; @@ -582,12 +661,12 @@ AcpiNsExternalizeName ( UINT32 *ConvertedNameLength, char **ConvertedName) { - NATIVE_UINT_MIN32 PrefixLength = 0; - NATIVE_UINT_MIN32 NamesIndex = 0; - NATIVE_UINT_MIN32 NumSegments = 0; - NATIVE_UINT_MIN32 i = 0; - NATIVE_UINT_MIN32 j = 0; - NATIVE_UINT_MIN32 RequiredLength; + ACPI_NATIVE_UINT NamesIndex = 0; + ACPI_NATIVE_UINT NumSegments = 0; + ACPI_NATIVE_UINT RequiredLength; + ACPI_NATIVE_UINT PrefixLength = 0; + ACPI_NATIVE_UINT i = 0; + ACPI_NATIVE_UINT j = 0; ACPI_FUNCTION_TRACE ("NsExternalizeName"); @@ -646,7 +725,7 @@ AcpiNsExternalizeName ( /* <count> 4-byte names */ NamesIndex = PrefixLength + 2; - NumSegments = (UINT32) (UINT8) InternalName[PrefixLength + 1]; + NumSegments = (UINT32) (UINT8) InternalName[(ACPI_NATIVE_UINT) (PrefixLength + 1)]; break; case AML_DUAL_NAME_PREFIX: @@ -932,30 +1011,28 @@ AcpiNsOpensScope ( ACPI_STATUS AcpiNsGetNodeByPath ( - NATIVE_CHAR *Pathname, + char *Pathname, ACPI_NAMESPACE_NODE *StartNode, UINT32 Flags, ACPI_NAMESPACE_NODE **ReturnNode) { ACPI_GENERIC_STATE ScopeInfo; ACPI_STATUS Status; - NATIVE_CHAR *InternalPath = NULL; + char *InternalPath = NULL; ACPI_FUNCTION_TRACE_PTR ("NsGetNodeByPath", Pathname); - if (!Pathname) + if (Pathname) { - return_ACPI_STATUS (AE_BAD_PARAMETER); - } + /* Convert path to internal representation */ - /* Convert path to internal representation */ - - Status = AcpiNsInternalizeName (Pathname, &InternalPath); - if (ACPI_FAILURE (Status)) - { - return_ACPI_STATUS (Status); + Status = AcpiNsInternalizeName (Pathname, &InternalPath); + if (ACPI_FAILURE (Status)) + { + return_ACPI_STATUS (Status); + } } /* Must lock namespace during lookup */ @@ -985,7 +1062,11 @@ AcpiNsGetNodeByPath ( /* Cleanup */ (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); - ACPI_MEM_FREE (InternalPath); + + if (InternalPath) + { + ACPI_MEM_FREE (InternalPath); + } return_ACPI_STATUS (Status); } |