Merge master.kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[pandora-kernel.git] / drivers / acpi / namespace / nsutils.c
index 3e7cad5..aa4e799 100644 (file)
@@ -78,15 +78,17 @@ acpi_ns_report_error(char *module_name,
                     char *internal_name, acpi_status lookup_status)
 {
        acpi_status status;
+       u32 bad_name;
        char *name = NULL;
 
-       acpi_ut_report_error(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)",
-                              *(ACPI_CAST_PTR(u32, internal_name)));
+               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 */
 
@@ -102,7 +104,7 @@ acpi_ns_report_error(char *module_name,
                }
 
                if (name) {
-                       ACPI_MEM_FREE(name);
+                       ACPI_FREE(name);
                }
        }
 
@@ -137,11 +139,12 @@ acpi_ns_report_method_error(char *module_name,
        acpi_status status;
        struct acpi_namespace_node *node = prefix_node;
 
-       acpi_ut_report_error(module_name, line_number);
+       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);
+               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]");
                }
@@ -185,7 +188,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node, char *message)
                }
 
                acpi_os_printf("[%s] (Node %p)", (char *)buffer.pointer, node);
-               ACPI_MEM_FREE(buffer.pointer);
+               ACPI_FREE(buffer.pointer);
        }
 }
 
@@ -239,7 +242,7 @@ static u8 acpi_ns_valid_path_separator(char sep)
 
 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_WARNING((AE_INFO, "Null Node parameter"));
@@ -264,9 +267,10 @@ acpi_object_type acpi_ns_get_type(struct acpi_namespace_node * node)
 
 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)) {
+
                /* Type code out of range  */
 
                ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type));
@@ -363,7 +367,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
        char *result = NULL;
        acpi_native_uint i;
 
-       ACPI_FUNCTION_TRACE("ns_build_internal_name");
+       ACPI_FUNCTION_TRACE(ns_build_internal_name);
 
        /* Setup the correct prefixes, counts, and pointers */
 
@@ -411,6 +415,7 @@ acpi_status acpi_ns_build_internal_name(struct acpi_namestring_info *info)
                for (i = 0; i < ACPI_NAME_SIZE; i++) {
                        if (acpi_ns_valid_path_separator(*external_name) ||
                            (*external_name == 0)) {
+
                                /* Pad the segment with underscore(s) if segment is short */
 
                                result[i] = '_';
@@ -473,7 +478,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_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);
@@ -486,7 +491,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
 
        /* 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);
        }
@@ -496,7 +501,7 @@ acpi_status acpi_ns_internalize_name(char *external_name, char **converted_name)
        info.internal_name = internal_name;
        status = acpi_ns_build_internal_name(&info);
        if (ACPI_FAILURE(status)) {
-               ACPI_MEM_FREE(internal_name);
+               ACPI_FREE(internal_name);
                return_ACPI_STATUS(status);
        }
 
@@ -533,7 +538,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
        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);
@@ -628,7 +633,7 @@ acpi_ns_externalize_name(u32 internal_name_length,
        /*
         * 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);
        }
@@ -681,13 +686,9 @@ struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle)
        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);
        }
 
@@ -697,7 +698,7 @@ struct acpi_namespace_node *acpi_ns_map_handle_to_node(acpi_handle handle)
                return (NULL);
        }
 
-       return ((struct acpi_namespace_node *)handle);
+       return (ACPI_CAST_PTR(struct acpi_namespace_node, handle));
 }
 
 /*******************************************************************************
@@ -752,7 +753,7 @@ void acpi_ns_terminate(void)
 {
        union acpi_operand_object *obj_desc;
 
-       ACPI_FUNCTION_TRACE("ns_terminate");
+       ACPI_FUNCTION_TRACE(ns_terminate);
 
        /*
         * 1) Free the entire namespace -- all nodes and objects
@@ -792,9 +793,10 @@ void acpi_ns_terminate(void)
 
 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)) {
+
                /* type code out of range  */
 
                ACPI_WARNING((AE_INFO, "Invalid Object Type %X", type));
@@ -806,12 +808,12 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
 
 /*******************************************************************************
  *
- * 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.
@@ -827,23 +829,29 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
  ******************************************************************************/
 
 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;
-
-       ACPI_FUNCTION_TRACE_PTR("ns_get_node_by_path", pathname);
+       char *internal_path;
 
-       if (pathname) {
-               /* Convert path to internal representation */
+       ACPI_FUNCTION_TRACE_PTR(ns_get_node, pathname);
 
-               status = acpi_ns_internalize_name(pathname, &internal_path);
-               if (ACPI_FAILURE(status)) {
-                       return_ACPI_STATUS(status);
+       if (!pathname) {
+               *return_node = prefix_node;
+               if (!prefix_node) {
+                       *return_node = acpi_gbl_root_node;
                }
+               return_ACPI_STATUS(AE_OK);
+       }
+
+       /* Convert path to internal representation */
+
+       status = acpi_ns_internalize_name(pathname, &internal_path);
+       if (ACPI_FAILURE(status)) {
+               return_ACPI_STATUS(status);
        }
 
        /* Must lock namespace during lookup */
@@ -855,26 +863,23 @@ acpi_ns_get_node_by_path(char *pathname,
 
        /* 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);
+       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)));
+                                 pathname, acpi_format_exception(status)));
        }
 
        (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
 
       cleanup:
-       if (internal_path) {
-               ACPI_MEM_FREE(internal_path);
-       }
+       ACPI_FREE(internal_path);
        return_ACPI_STATUS(status);
 }
 
@@ -960,9 +965,10 @@ 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");
+       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);