X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Facpi%2Fnamespace%2Fnsutils.c;h=aa4e799d9a8c3123e297e9195c50749086b07906;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=75da76cc0b19bfb8ff8498d81d197a7977fb411d;hpb=6a77f38946aaee1cd85eeec6cf4229b204c15071;p=linux-2.6.git diff --git a/drivers/acpi/namespace/nsutils.c b/drivers/acpi/namespace/nsutils.c index 75da76cc0..aa4e799d9 100644 --- a/drivers/acpi/namespace/nsutils.c +++ b/drivers/acpi/namespace/nsutils.c @@ -6,7 +6,7 @@ *****************************************************************************/ /* - * Copyright (C) 2000 - 2005, R. Byron Moore + * Copyright (C) 2000 - 2006, R. Byron Moore * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -42,15 +42,20 @@ * POSSIBILITY OF SUCH DAMAGES. */ - #include #include #include #include #define _COMPONENT ACPI_NAMESPACE - ACPI_MODULE_NAME ("nsutils") +ACPI_MODULE_NAME("nsutils") + +/* Local prototypes */ +static u8 acpi_ns_valid_path_separator(char sep); +#ifdef ACPI_OBSOLETE_FUNCTIONS +acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node *node_to_search); +#endif /******************************************************************************* * @@ -58,8 +63,8 @@ * * PARAMETERS: module_name - Caller's module name (for error output) * line_number - Caller's line number (for error output) - * component_id - Caller's component ID (for error output) - * Message - Error message to use on failure + * internal_name - Name or path of the namespace node + * lookup_status - Exception code from NS lookup * * RETURN: None * @@ -68,59 +73,55 @@ ******************************************************************************/ void -acpi_ns_report_error ( - char *module_name, - u32 line_number, - u32 component_id, - char *internal_name, - acpi_status lookup_status) +acpi_ns_report_error(char *module_name, + u32 line_number, + char *internal_name, acpi_status lookup_status) { - acpi_status status; - char *name = NULL; - + acpi_status status; + u32 bad_name; + char *name = NULL; - acpi_os_printf ("%8s-%04d: *** Error: Looking up ", - module_name, line_number); + acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number); if (lookup_status == AE_BAD_CHARACTER) { + /* There is a non-ascii character in the name */ - acpi_os_printf ("[0x%4.4X] (NON-ASCII)\n", - *(ACPI_CAST_PTR (u32, internal_name))); - } - else { + ACPI_MOVE_32_TO_32(&bad_name, internal_name); + acpi_os_printf("[0x%4.4X] (NON-ASCII)", bad_name); + } else { /* Convert path to external format */ - status = acpi_ns_externalize_name (ACPI_UINT32_MAX, - internal_name, NULL, &name); + status = acpi_ns_externalize_name(ACPI_UINT32_MAX, + internal_name, NULL, &name); /* Print target name */ - if (ACPI_SUCCESS (status)) { - acpi_os_printf ("[%s]", name); - } - else { - acpi_os_printf ("[COULD NOT EXTERNALIZE NAME]"); + if (ACPI_SUCCESS(status)) { + acpi_os_printf("[%s]", name); + } else { + acpi_os_printf("[COULD NOT EXTERNALIZE NAME]"); } if (name) { - ACPI_MEM_FREE (name); + ACPI_FREE(name); } } - acpi_os_printf (" in namespace, %s\n", - acpi_format_exception (lookup_status)); + acpi_os_printf(" Namespace lookup failure, %s\n", + acpi_format_exception(lookup_status)); } - /******************************************************************************* * * FUNCTION: acpi_ns_report_method_error * * PARAMETERS: module_name - Caller's module name (for error output) * line_number - Caller's line number (for error output) - * component_id - Caller's component ID (for error output) * Message - Error message to use on failure + * prefix_node - Prefix relative to the path + * Path - Path to the node (optional) + * method_status - Execution status * * RETURN: None * @@ -129,40 +130,36 @@ acpi_ns_report_error ( ******************************************************************************/ void -acpi_ns_report_method_error ( - char *module_name, - u32 line_number, - u32 component_id, - char *message, - struct acpi_namespace_node *prefix_node, - char *path, - acpi_status method_status) +acpi_ns_report_method_error(char *module_name, + u32 line_number, + char *message, + struct acpi_namespace_node *prefix_node, + char *path, acpi_status method_status) { - acpi_status status; - struct acpi_namespace_node *node = prefix_node; + acpi_status status; + struct acpi_namespace_node *node = prefix_node; + acpi_os_printf("ACPI Error (%s-%04d): ", module_name, line_number); if (path) { - status = acpi_ns_get_node_by_path (path, prefix_node, - ACPI_NS_NO_UPSEARCH, &node); - if (ACPI_FAILURE (status)) { - acpi_os_printf ("report_method_error: Could not get node\n"); - return; + status = + acpi_ns_get_node(prefix_node, path, ACPI_NS_NO_UPSEARCH, + &node); + if (ACPI_FAILURE(status)) { + acpi_os_printf("[Could not get node by pathname]"); } } - acpi_os_printf ("%8s-%04d: *** Error: ", module_name, line_number); - acpi_ns_print_node_pathname (node, message); - acpi_os_printf (", %s\n", acpi_format_exception (method_status)); + acpi_ns_print_node_pathname(node, message); + acpi_os_printf(", %s\n", acpi_format_exception(method_status)); } - /******************************************************************************* * * FUNCTION: acpi_ns_print_node_pathname * - * PARAMETERS: Node - Object - * Msg - Prefix message + * PARAMETERS: Node - Object + * Message - Prefix message * * DESCRIPTION: Print an object's full namespace pathname * Manages allocation/freeing of a pathname buffer @@ -170,16 +167,13 @@ acpi_ns_report_method_error ( ******************************************************************************/ void -acpi_ns_print_node_pathname ( - struct acpi_namespace_node *node, - char *msg) +acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *message) { - struct acpi_buffer buffer; - acpi_status status; - + struct acpi_buffer buffer; + acpi_status status; if (!node) { - acpi_os_printf ("[NULL NAME]"); + acpi_os_printf("[NULL NAME]"); return; } @@ -187,18 +181,17 @@ acpi_ns_print_node_pathname ( buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; - status = acpi_ns_handle_to_pathname (node, &buffer); - if (ACPI_SUCCESS (status)) { - if (msg) { - acpi_os_printf ("%s ", msg); + status = acpi_ns_handle_to_pathname(node, &buffer); + if (ACPI_SUCCESS(status)) { + if (message) { + acpi_os_printf("%s ", message); } - acpi_os_printf ("[%s] (Node %p)", (char *) buffer.pointer, node); - ACPI_MEM_FREE (buffer.pointer); + acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node); + ACPI_FREE(buffer.pointer); } } - /******************************************************************************* * * FUNCTION: acpi_ns_valid_root_prefix @@ -211,20 +204,17 @@ acpi_ns_print_node_pathname ( * ******************************************************************************/ -u8 -acpi_ns_valid_root_prefix ( - char prefix) +u8 acpi_ns_valid_root_prefix(char prefix) { return ((u8) (prefix == '\\')); } - /******************************************************************************* * * FUNCTION: acpi_ns_valid_path_separator * - * PARAMETERS: Sep - Character to be checked + * PARAMETERS: Sep - Character to be checked * * RETURN: TRUE if a valid path separator * @@ -232,70 +222,64 @@ acpi_ns_valid_root_prefix ( * ******************************************************************************/ -u8 -acpi_ns_valid_path_separator ( - char sep) +static u8 acpi_ns_valid_path_separator(char sep) { return ((u8) (sep == '.')); } - /******************************************************************************* * * FUNCTION: acpi_ns_get_type * - * PARAMETERS: Handle - Parent Node to be examined + * PARAMETERS: Node - Parent Node to be examined * * RETURN: Type field from Node whose handle is passed * + * DESCRIPTION: Return the type of a Namespace node + * ******************************************************************************/ -acpi_object_type -acpi_ns_get_type ( - struct acpi_namespace_node *node) +acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node) { - ACPI_FUNCTION_TRACE ("ns_get_type"); - + ACPI_FUNCTION_TRACE(ns_get_type); if (!node) { - ACPI_REPORT_WARNING (("ns_get_type: Null Node input pointer\n")); - return_VALUE (ACPI_TYPE_ANY); + ACPI_WARNING((AE_INFO, "Null Node parameter")); + return_UINT32(ACPI_TYPE_ANY); } - return_VALUE ((acpi_object_type) node->type); + return_UINT32((acpi_object_type) node->type); } - /******************************************************************************* * * FUNCTION: acpi_ns_local * - * PARAMETERS: Type - A namespace object type + * PARAMETERS: Type - A namespace object type * * RETURN: LOCAL if names must be found locally in objects of the * passed type, 0 if enclosing scopes should be searched * + * DESCRIPTION: Returns scope rule for the given object type. + * ******************************************************************************/ -u32 -acpi_ns_local ( - acpi_object_type type) +u32 acpi_ns_local(acpi_object_type type) { - ACPI_FUNCTION_TRACE ("ns_local"); + ACPI_FUNCTION_TRACE(ns_local); + if (!acpi_ut_valid_object_type(type)) { - if (!acpi_ut_valid_object_type (type)) { /* Type code out of range */ - ACPI_REPORT_WARNING (("ns_local: Invalid Object Type\n")); - return_VALUE (ACPI_NS_NORMAL); + ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type)); + return_UINT32(ACPI_NS_NORMAL); } - return_VALUE ((u32) acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL); + return_UINT32((u32) acpi_gbl_ns_properties[type] & ACPI_NS_LOCAL); } - /******************************************************************************* * * FUNCTION: acpi_ns_get_internal_name_length @@ -303,23 +287,19 @@ acpi_ns_local ( * PARAMETERS: Info - Info struct initialized with the * external name pointer. * - * RETURN: Status + * RETURN: None * * DESCRIPTION: Calculate the length of the internal (AML) namestring * corresponding to the external (ASL) namestring. * ******************************************************************************/ -void -acpi_ns_get_internal_name_length ( - struct acpi_namestring_info *info) +void acpi_ns_get_internal_name_length(struct acpi_namestring_info *info) { - char *next_external_char; - u32 i; - - - ACPI_FUNCTION_ENTRY (); + char *next_external_char; + u32 i; + ACPI_FUNCTION_ENTRY(); next_external_char = info->external_name; info->num_carats = 0; @@ -333,11 +313,10 @@ acpi_ns_get_internal_name_length ( * * strlen() + 1 covers the first name_seg, which has no path separator */ - if (acpi_ns_valid_root_prefix (next_external_char[0])) { + if (acpi_ns_valid_root_prefix(next_external_char[0])) { info->fully_qualified = TRUE; next_external_char++; - } - else { + } else { /* * Handle Carat prefixes */ @@ -355,19 +334,18 @@ acpi_ns_get_internal_name_length ( if (*next_external_char) { info->num_segments = 1; for (i = 0; next_external_char[i]; i++) { - if (acpi_ns_valid_path_separator (next_external_char[i])) { + if (acpi_ns_valid_path_separator(next_external_char[i])) { info->num_segments++; } } } info->length = (ACPI_NAME_SIZE * info->num_segments) + - 4 + info->num_carats; + 4 + info->num_carats; info->next_external_char = next_external_char; } - /******************************************************************************* * * FUNCTION: acpi_ns_build_internal_name @@ -381,19 +359,15 @@ acpi_ns_get_internal_name_length ( * ******************************************************************************/ -acpi_status -acpi_ns_build_internal_name ( - struct acpi_namestring_info *info) +acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info) { - u32 num_segments = info->num_segments; - char *internal_name = info->internal_name; - char *external_name = info->next_external_char; - char *result = NULL; - acpi_native_uint i; - - - ACPI_FUNCTION_TRACE ("ns_build_internal_name"); + u32 num_segments = info->num_segments; + char *internal_name = info->internal_name; + char *external_name = info->next_external_char; + char *result = NULL; + acpi_native_uint i; + ACPI_FUNCTION_TRACE(ns_build_internal_name); /* Setup the correct prefixes, counts, and pointers */ @@ -402,18 +376,15 @@ acpi_ns_build_internal_name ( if (num_segments <= 1) { result = &internal_name[1]; - } - else if (num_segments == 2) { + } else if (num_segments == 2) { internal_name[1] = AML_DUAL_NAME_PREFIX; result = &internal_name[2]; - } - else { + } else { internal_name[1] = AML_MULTI_NAME_PREFIX_OP; - internal_name[2] = (char) num_segments; + internal_name[2] = (char)num_segments; result = &internal_name[3]; } - } - else { + } else { /* * Not fully qualified. * Handle Carats first, then append the name segments @@ -427,15 +398,14 @@ acpi_ns_build_internal_name ( if (num_segments <= 1) { result = &internal_name[i]; - } - else if (num_segments == 2) { + } else if (num_segments == 2) { internal_name[i] = AML_DUAL_NAME_PREFIX; - result = &internal_name[(acpi_native_uint) (i+1)]; - } - else { + result = &internal_name[(acpi_native_uint) (i + 1)]; + } else { internal_name[i] = AML_MULTI_NAME_PREFIX_OP; - internal_name[(acpi_native_uint) (i+1)] = (char) num_segments; - result = &internal_name[(acpi_native_uint) (i+2)]; + internal_name[(acpi_native_uint) (i + 1)] = + (char)num_segments; + result = &internal_name[(acpi_native_uint) (i + 2)]; } } @@ -443,25 +413,26 @@ acpi_ns_build_internal_name ( for (; num_segments; num_segments--) { for (i = 0; i < ACPI_NAME_SIZE; i++) { - if (acpi_ns_valid_path_separator (*external_name) || - (*external_name == 0)) { + if (acpi_ns_valid_path_separator(*external_name) || + (*external_name == 0)) { + /* Pad the segment with underscore(s) if segment is short */ result[i] = '_'; - } - else { + } else { /* Convert the character to uppercase and save it */ - result[i] = (char) ACPI_TOUPPER ((int) *external_name); + result[i] = + (char)ACPI_TOUPPER((int)*external_name); external_name++; } } /* Now we must have a path separator, or the pathname is bad */ - if (!acpi_ns_valid_path_separator (*external_name) && - (*external_name != 0)) { - return_ACPI_STATUS (AE_BAD_PARAMETER); + if (!acpi_ns_valid_path_separator(*external_name) && + (*external_name != 0)) { + return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Move on the next segment */ @@ -475,18 +446,17 @@ acpi_ns_build_internal_name ( *result = 0; if (info->fully_qualified) { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (abs) \"\\%s\"\n", - internal_name, internal_name)); - } - else { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n", - internal_name, internal_name)); + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, + "Returning [%p] (abs) \"\\%s\"\n", + internal_name, internal_name)); + } else { + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Returning [%p] (rel) \"%s\"\n", + internal_name, internal_name)); } - return_ACPI_STATUS (AE_OK); + return_ACPI_STATUS(AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_ns_internalize_name @@ -502,88 +472,76 @@ acpi_ns_build_internal_name ( * *******************************************************************************/ -acpi_status -acpi_ns_internalize_name ( - char *external_name, - char **converted_name) +acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name) { - char *internal_name; - struct acpi_namestring_info info; - acpi_status status; + char *internal_name; + struct acpi_namestring_info info; + acpi_status status; + ACPI_FUNCTION_TRACE(ns_internalize_name); - ACPI_FUNCTION_TRACE ("ns_internalize_name"); - - - if ((!external_name) || - (*external_name == 0) || - (!converted_name)) { - return_ACPI_STATUS (AE_BAD_PARAMETER); + if ((!external_name) || (*external_name == 0) || (!converted_name)) { + return_ACPI_STATUS(AE_BAD_PARAMETER); } /* Get the length of the new internal name */ info.external_name = external_name; - acpi_ns_get_internal_name_length (&info); + acpi_ns_get_internal_name_length(&info); /* We need a segment to store the internal name */ - internal_name = ACPI_MEM_CALLOCATE (info.length); + internal_name = ACPI_ALLOCATE_ZEROED(info.length); if (!internal_name) { - return_ACPI_STATUS (AE_NO_MEMORY); + return_ACPI_STATUS(AE_NO_MEMORY); } /* Build the name */ info.internal_name = internal_name; - status = acpi_ns_build_internal_name (&info); - if (ACPI_FAILURE (status)) { - ACPI_MEM_FREE (internal_name); - return_ACPI_STATUS (status); + status = acpi_ns_build_internal_name(&info); + if (ACPI_FAILURE(status)) { + ACPI_FREE(internal_name); + return_ACPI_STATUS(status); } *converted_name = internal_name; - return_ACPI_STATUS (AE_OK); + return_ACPI_STATUS(AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_ns_externalize_name * - * PARAMETERS: *internal_name - Internal representation of name - * **converted_name - Where to return the resulting - * external representation of name + * PARAMETERS: internal_name_length - Lenth of the internal name below + * internal_name - Internal representation of name + * converted_name_length - Where the length is returned + * converted_name - Where the resulting external name + * is returned * * RETURN: Status * * DESCRIPTION: Convert internal name (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30) - * to its external form (e.g. "\_PR_.CPU0") + * to its external (printable) form (e.g. "\_PR_.CPU0") * ******************************************************************************/ acpi_status -acpi_ns_externalize_name ( - u32 internal_name_length, - char *internal_name, - u32 *converted_name_length, - char **converted_name) +acpi_ns_externalize_name(u32 internal_name_length, + char *internal_name, + u32 * converted_name_length, char **converted_name) { - acpi_native_uint names_index = 0; - acpi_native_uint num_segments = 0; - acpi_native_uint required_length; - acpi_native_uint prefix_length = 0; - acpi_native_uint i = 0; - acpi_native_uint j = 0; - + acpi_native_uint names_index = 0; + acpi_native_uint num_segments = 0; + acpi_native_uint required_length; + acpi_native_uint prefix_length = 0; + acpi_native_uint i = 0; + acpi_native_uint j = 0; - ACPI_FUNCTION_TRACE ("ns_externalize_name"); + ACPI_FUNCTION_TRACE(ns_externalize_name); - - if (!internal_name_length || - !internal_name || - !converted_name) { - return_ACPI_STATUS (AE_BAD_PARAMETER); + if (!internal_name_length || !internal_name || !converted_name) { + return_ACPI_STATUS(AE_BAD_PARAMETER); } /* @@ -598,8 +556,7 @@ acpi_ns_externalize_name ( for (i = 0; i < internal_name_length; i++) { if (internal_name[i] == '^') { prefix_length = i + 1; - } - else { + } else { break; } } @@ -626,7 +583,8 @@ acpi_ns_externalize_name ( names_index = prefix_length + 2; num_segments = (acpi_native_uint) (u8) - internal_name[(acpi_native_uint) (prefix_length + 1)]; + internal_name[(acpi_native_uint) + (prefix_length + 1)]; break; case AML_DUAL_NAME_PREFIX: @@ -661,23 +619,23 @@ acpi_ns_externalize_name ( * punctuation ('.') between object names, plus the NULL terminator. */ required_length = prefix_length + (4 * num_segments) + - ((num_segments > 0) ? (num_segments - 1) : 0) + 1; + ((num_segments > 0) ? (num_segments - 1) : 0) + 1; /* * Check to see if we're still in bounds. If not, there's a problem * with internal_name (invalid format). */ if (required_length > internal_name_length) { - ACPI_REPORT_ERROR (("ns_externalize_name: Invalid internal name\n")); - return_ACPI_STATUS (AE_BAD_PATHNAME); + ACPI_ERROR((AE_INFO, "Invalid internal name")); + return_ACPI_STATUS(AE_BAD_PATHNAME); } /* * Build converted_name */ - *converted_name = ACPI_MEM_CALLOCATE (required_length); + *converted_name = ACPI_ALLOCATE_ZEROED(required_length); if (!(*converted_name)) { - return_ACPI_STATUS (AE_NO_MEMORY); + return_ACPI_STATUS(AE_NO_MEMORY); } j = 0; @@ -703,10 +661,9 @@ acpi_ns_externalize_name ( *converted_name_length = (u32) required_length; } - return_ACPI_STATUS (AE_OK); + return_ACPI_STATUS(AE_OK); } - /******************************************************************************* * * FUNCTION: acpi_ns_map_handle_to_node @@ -717,40 +674,33 @@ acpi_ns_externalize_name ( * * DESCRIPTION: Convert a namespace handle to a real Node * - * Note: Real integer handles allow for more verification - * and keep all pointers within this subsystem. + * Note: Real integer handles would allow for more verification + * and keep all pointers within this subsystem - however this introduces + * more (and perhaps unnecessary) overhead. * ******************************************************************************/ -struct acpi_namespace_node * -acpi_ns_map_handle_to_node ( - acpi_handle handle) +struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle) { - ACPI_FUNCTION_ENTRY (); - + ACPI_FUNCTION_ENTRY(); /* - * Simple implementation. + * Simple implementation */ - if (!handle) { - return (NULL); - } - - if (handle == ACPI_ROOT_OBJECT) { + if ((!handle) || (handle == ACPI_ROOT_OBJECT)) { return (acpi_gbl_root_node); } /* We can at least attempt to verify the handle */ - if (ACPI_GET_DESCRIPTOR_TYPE (handle) != ACPI_DESC_TYPE_NAMED) { + if (ACPI_GET_DESCRIPTOR_TYPE(handle) != ACPI_DESC_TYPE_NAMED) { return (NULL); } - return ((struct acpi_namespace_node *) handle); + return (ACPI_CAST_PTR(struct acpi_namespace_node, handle)); } - /******************************************************************************* * * FUNCTION: acpi_ns_convert_entry_to_handle @@ -763,19 +713,15 @@ acpi_ns_map_handle_to_node ( * ******************************************************************************/ -acpi_handle -acpi_ns_convert_entry_to_handle ( - struct acpi_namespace_node *node) +acpi_handle acpi_ns_convert_entry_to_handle(struct acpi_namespace_node *node) { - /* * Simple implementation for now; */ return ((acpi_handle) node); - -/* --------------------------------------------------- +/* Example future implementation --------------------- if (!Node) { @@ -787,12 +733,10 @@ acpi_ns_convert_entry_to_handle ( return (ACPI_ROOT_OBJECT); } - return ((acpi_handle) Node); ------------------------------------------------------*/ } - /******************************************************************************* * * FUNCTION: acpi_ns_terminate @@ -801,45 +745,41 @@ acpi_ns_convert_entry_to_handle ( * * RETURN: none * - * DESCRIPTION: free memory allocated for table storage. + * DESCRIPTION: free memory allocated for namespace and ACPI table storage. * ******************************************************************************/ -void -acpi_ns_terminate (void) +void acpi_ns_terminate(void) { - union acpi_operand_object *obj_desc; - - - ACPI_FUNCTION_TRACE ("ns_terminate"); + union acpi_operand_object *obj_desc; + ACPI_FUNCTION_TRACE(ns_terminate); /* * 1) Free the entire namespace -- all nodes and objects * * Delete all object descriptors attached to namepsace nodes */ - acpi_ns_delete_namespace_subtree (acpi_gbl_root_node); + acpi_ns_delete_namespace_subtree(acpi_gbl_root_node); /* Detach any objects attached to the root */ - obj_desc = acpi_ns_get_attached_object (acpi_gbl_root_node); + obj_desc = acpi_ns_get_attached_object(acpi_gbl_root_node); if (obj_desc) { - acpi_ns_detach_object (acpi_gbl_root_node); + acpi_ns_detach_object(acpi_gbl_root_node); } - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Namespace freed\n")); + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Namespace freed\n")); /* * 2) Now we can delete the ACPI tables */ - acpi_tb_delete_all_tables (); - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "ACPI Tables freed\n")); + acpi_tb_delete_all_tables(); + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "ACPI Tables freed\n")); return_VOID; } - /******************************************************************************* * * FUNCTION: acpi_ns_opens_scope @@ -851,32 +791,29 @@ acpi_ns_terminate (void) * ******************************************************************************/ -u32 -acpi_ns_opens_scope ( - acpi_object_type type) +u32 acpi_ns_opens_scope(acpi_object_type type) { - ACPI_FUNCTION_TRACE_STR ("ns_opens_scope", acpi_ut_get_type_name (type)); + ACPI_FUNCTION_TRACE_STR(ns_opens_scope, acpi_ut_get_type_name(type)); + if (!acpi_ut_valid_object_type(type)) { - if (!acpi_ut_valid_object_type (type)) { /* type code out of range */ - ACPI_REPORT_WARNING (("ns_opens_scope: Invalid Object Type %X\n", type)); - return_VALUE (ACPI_NS_NORMAL); + ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type)); + return_UINT32(ACPI_NS_NORMAL); } - return_VALUE (((u32) acpi_gbl_ns_properties[type]) & ACPI_NS_NEWSCOPE); + return_UINT32(((u32) acpi_gbl_ns_properties[type]) & ACPI_NS_NEWSCOPE); } - /******************************************************************************* * - * FUNCTION: acpi_ns_get_node_by_path + * FUNCTION: acpi_ns_get_node * * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The * \ (backslash) and ^ (carat) prefixes, and the * . (period) to separate segments are supported. - * start_node - Root of subtree to be searched, or NS_ALL for the + * prefix_node - Root of subtree to be searched, or NS_ALL for the * root of the name space. If Name is fully * qualified (first s8 is '\'), the passed value * of Scope will not be accessed. @@ -892,110 +829,59 @@ acpi_ns_opens_scope ( ******************************************************************************/ acpi_status -acpi_ns_get_node_by_path ( - char *pathname, - struct acpi_namespace_node *start_node, - u32 flags, - struct acpi_namespace_node **return_node) +acpi_ns_get_node(struct acpi_namespace_node *prefix_node, + char *pathname, + u32 flags, struct acpi_namespace_node **return_node) { - union acpi_generic_state scope_info; - acpi_status status; - char *internal_path = NULL; - + union acpi_generic_state scope_info; + acpi_status status; + char *internal_path; - ACPI_FUNCTION_TRACE_PTR ("ns_get_node_by_path", pathname); + ACPI_FUNCTION_TRACE_PTR(ns_get_node, pathname); + if (!pathname) { + *return_node = prefix_node; + if (!prefix_node) { + *return_node = acpi_gbl_root_node; + } + return_ACPI_STATUS(AE_OK); + } - if (pathname) { - /* Convert path to internal representation */ + /* Convert path to internal representation */ - status = acpi_ns_internalize_name (pathname, &internal_path); - if (ACPI_FAILURE (status)) { - return_ACPI_STATUS (status); - } + status = acpi_ns_internalize_name(pathname, &internal_path); + if (ACPI_FAILURE(status)) { + return_ACPI_STATUS(status); } /* Must lock namespace during lookup */ - status = acpi_ut_acquire_mutex (ACPI_MTX_NAMESPACE); - if (ACPI_FAILURE (status)) { + status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); + if (ACPI_FAILURE(status)) { goto cleanup; } /* Setup lookup scope (search starting point) */ - scope_info.scope.node = start_node; + scope_info.scope.node = prefix_node; /* Lookup the name in the namespace */ - status = acpi_ns_lookup (&scope_info, internal_path, - ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, - (flags | ACPI_NS_DONT_OPEN_SCOPE), - NULL, return_node); - if (ACPI_FAILURE (status)) { - ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "%s, %s\n", - internal_path, acpi_format_exception (status))); - } - - (void) acpi_ut_release_mutex (ACPI_MTX_NAMESPACE); - -cleanup: - /* Cleanup */ - if (internal_path) { - ACPI_MEM_FREE (internal_path); + status = acpi_ns_lookup(&scope_info, internal_path, ACPI_TYPE_ANY, + ACPI_IMODE_EXECUTE, + (flags | ACPI_NS_DONT_OPEN_SCOPE), NULL, + return_node); + if (ACPI_FAILURE(status)) { + ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s, %s\n", + pathname, acpi_format_exception(status))); } - return_ACPI_STATUS (status); -} - - -/******************************************************************************* - * - * FUNCTION: acpi_ns_find_parent_name - * - * PARAMETERS: *child_node - Named Obj whose name is to be found - * - * RETURN: The ACPI name - * - * DESCRIPTION: Search for the given obj in its parent scope and return the - * name segment, or "????" if the parent name can't be found - * (which "should not happen"). - * - ******************************************************************************/ -#ifdef ACPI_FUTURE_USAGE -acpi_name -acpi_ns_find_parent_name ( - struct acpi_namespace_node *child_node) -{ - struct acpi_namespace_node *parent_node; + (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); - ACPI_FUNCTION_TRACE ("ns_find_parent_name"); - - - if (child_node) { - /* Valid entry. Get the parent Node */ - - parent_node = acpi_ns_get_parent_node (child_node); - if (parent_node) { - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Parent of %p [%4.4s] is %p [%4.4s]\n", - child_node, acpi_ut_get_node_name (child_node), - parent_node, acpi_ut_get_node_name (parent_node))); - - if (parent_node->name.integer) { - return_VALUE ((acpi_name) parent_node->name.integer); - } - } - - ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, - "Unable to find parent of %p (%4.4s)\n", - child_node, acpi_ut_get_node_name (child_node))); - } - - return_VALUE (ACPI_UNKNOWN_NAME); + cleanup: + ACPI_FREE(internal_path); + return_ACPI_STATUS(status); } -#endif - /******************************************************************************* * @@ -1009,13 +895,10 @@ acpi_ns_find_parent_name ( * ******************************************************************************/ - -struct acpi_namespace_node * -acpi_ns_get_parent_node ( - struct acpi_namespace_node *node) +struct acpi_namespace_node *acpi_ns_get_parent_node(struct acpi_namespace_node + *node) { - ACPI_FUNCTION_ENTRY (); - + ACPI_FUNCTION_ENTRY(); if (!node) { return (NULL); @@ -1030,11 +913,9 @@ acpi_ns_get_parent_node ( node = node->peer; } - return (node->peer); } - /******************************************************************************* * * FUNCTION: acpi_ns_get_next_valid_node @@ -1049,10 +930,9 @@ acpi_ns_get_parent_node ( * ******************************************************************************/ - -struct acpi_namespace_node * -acpi_ns_get_next_valid_node ( - struct acpi_namespace_node *node) +struct acpi_namespace_node *acpi_ns_get_next_valid_node(struct + acpi_namespace_node + *node) { /* If we are at the end of this peer list, return NULL */ @@ -1066,4 +946,52 @@ acpi_ns_get_next_valid_node ( return (node->peer); } +#ifdef ACPI_OBSOLETE_FUNCTIONS +/******************************************************************************* + * + * FUNCTION: acpi_ns_find_parent_name + * + * PARAMETERS: *child_node - Named Obj whose name is to be found + * + * RETURN: The ACPI name + * + * DESCRIPTION: Search for the given obj in its parent scope and return the + * name segment, or "????" if the parent name can't be found + * (which "should not happen"). + * + ******************************************************************************/ +acpi_name acpi_ns_find_parent_name(struct acpi_namespace_node * child_node) +{ + struct acpi_namespace_node *parent_node; + + ACPI_FUNCTION_TRACE(ns_find_parent_name); + + if (child_node) { + + /* Valid entry. Get the parent Node */ + + parent_node = acpi_ns_get_parent_node(child_node); + if (parent_node) { + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, + "Parent of %p [%4.4s] is %p [%4.4s]\n", + child_node, + acpi_ut_get_node_name(child_node), + parent_node, + acpi_ut_get_node_name(parent_node))); + + if (parent_node->name.integer) { + return_VALUE((acpi_name) parent_node->name. + integer); + } + } + + ACPI_DEBUG_PRINT((ACPI_DB_EXEC, + "Unable to find parent of %p (%4.4s)\n", + child_node, + acpi_ut_get_node_name(child_node))); + } + + return_VALUE(ACPI_UNKNOWN_NAME); +} +#endif