Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[pandora-kernel.git] / drivers / acpi / executer / exconfig.c
index a29782f..c8341fa 100644 (file)
@@ -82,7 +82,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
        struct acpi_table_desc table_info;
        union acpi_operand_object *obj_desc;
 
-       ACPI_FUNCTION_TRACE("ex_add_table");
+       ACPI_FUNCTION_TRACE(ex_add_table);
 
        /* Create an object to be the table handle */
 
@@ -100,7 +100,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
 
        ACPI_MEMSET(&table_info, 0, sizeof(struct acpi_table_desc));
 
-       table_info.type = ACPI_TABLE_SSDT;
+       table_info.type = ACPI_TABLE_ID_SSDT;
        table_info.pointer = table;
        table_info.length = (acpi_size) table->length;
        table_info.allocation = ACPI_MEM_ALLOCATED;
@@ -110,6 +110,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
 
        if (ACPI_FAILURE(status)) {
                if (status == AE_ALREADY_EXISTS) {
+
                        /* Table already exists, just return the handle */
 
                        return_ACPI_STATUS(AE_OK);
@@ -121,6 +122,7 @@ acpi_ex_add_table(struct acpi_table_header *table,
 
        status = acpi_ns_load_table(table_info.installed_desc, parent_node);
        if (ACPI_FAILURE(status)) {
+
                /* Uninstall table on error */
 
                (void)acpi_tb_uninstall_table(table_info.installed_desc);
@@ -160,7 +162,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
        struct acpi_namespace_node *parameter_node = NULL;
        union acpi_operand_object *ddb_handle;
 
-       ACPI_FUNCTION_TRACE("ex_load_table_op");
+       ACPI_FUNCTION_TRACE(ex_load_table_op);
 
 #if 0
        /*
@@ -169,6 +171,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
         */
        status = acpi_tb_match_signature(operand[0]->string.pointer, NULL);
        if (status == AE_OK) {
+
                /* Signature matched -- don't allow override */
 
                return_ACPI_STATUS(AE_ALREADY_EXISTS);
@@ -211,9 +214,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
                 * location within the namespace where the table will be loaded.
                 */
                status =
-                   acpi_ns_get_node_by_path(operand[3]->string.pointer,
-                                            start_node, ACPI_NS_SEARCH_PARENT,
-                                            &parent_node);
+                   acpi_ns_get_node(start_node, operand[3]->string.pointer,
+                                    ACPI_NS_SEARCH_PARENT, &parent_node);
                if (ACPI_FAILURE(status)) {
                        return_ACPI_STATUS(status);
                }
@@ -234,9 +236,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
                /* Find the node referenced by the parameter_path_string */
 
                status =
-                   acpi_ns_get_node_by_path(operand[4]->string.pointer,
-                                            start_node, ACPI_NS_SEARCH_PARENT,
-                                            &parameter_node);
+                   acpi_ns_get_node(start_node, operand[4]->string.pointer,
+                                    ACPI_NS_SEARCH_PARENT, &parameter_node);
                if (ACPI_FAILURE(status)) {
                        return_ACPI_STATUS(status);
                }
@@ -252,6 +253,7 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
        /* Parameter Data (optional) */
 
        if (parameter_node) {
+
                /* Store the parameter data into the optional parameter object */
 
                status = acpi_ex_store(operand[5],
@@ -264,6 +266,10 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
                }
        }
 
+       ACPI_INFO((AE_INFO,
+                  "Dynamic OEM Table Load - [%4.4s] OemId [%6.6s] OemTableId [%8.8s]",
+                  table->signature, table->oem_id, table->oem_table_id));
+
        *return_desc = ddb_handle;
        return_ACPI_STATUS(status);
 }
@@ -294,9 +300,10 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
        struct acpi_table_header *table_ptr = NULL;
        acpi_physical_address address;
        struct acpi_table_header table_header;
+       acpi_integer temp;
        u32 i;
 
-       ACPI_FUNCTION_TRACE("ex_load_op");
+       ACPI_FUNCTION_TRACE(ex_load_op);
 
        /* Object can be either an op_region or a Field */
 
@@ -322,7 +329,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
 
                address = obj_desc->region.address;
 
-               /* Get the table length from the table header */
+               /* Get part of the table header to get the table length */
 
                table_header.length = 0;
                for (i = 0; i < 8; i++) {
@@ -330,11 +337,14 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
                            acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
                                                           (acpi_physical_address)
                                                           (i + address), 8,
-                                                          ((u8 *) &
-                                                           table_header) + i);
+                                                          &temp);
                        if (ACPI_FAILURE(status)) {
                                return_ACPI_STATUS(status);
                        }
+
+                       /* Get the one valid byte of the returned 64-bit value */
+
+                       ACPI_CAST_PTR(u8, &table_header)[i] = (u8) temp;
                }
 
                /* Sanity check the table length */
@@ -345,7 +355,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
 
                /* Allocate a buffer for the entire table */
 
-               table_ptr = ACPI_MEM_ALLOCATE(table_header.length);
+               table_ptr = ACPI_ALLOCATE(table_header.length);
                if (!table_ptr) {
                        return_ACPI_STATUS(AE_NO_MEMORY);
                }
@@ -357,11 +367,14 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
                            acpi_ev_address_space_dispatch(obj_desc, ACPI_READ,
                                                           (acpi_physical_address)
                                                           (i + address), 8,
-                                                          ((u8 *) table_ptr +
-                                                           i));
+                                                          &temp);
                        if (ACPI_FAILURE(status)) {
                                goto cleanup;
                        }
+
+                       /* Get the one valid byte of the returned 64-bit value */
+
+                       ACPI_CAST_PTR(u8, table_ptr)[i] = (u8) temp;
                }
                break;
 
@@ -407,12 +420,8 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
 
        /* The table must be either an SSDT or a PSDT */
 
-       if ((!ACPI_STRNCMP(table_ptr->signature,
-                          acpi_gbl_table_data[ACPI_TABLE_PSDT].signature,
-                          acpi_gbl_table_data[ACPI_TABLE_PSDT].sig_length)) &&
-           (!ACPI_STRNCMP(table_ptr->signature,
-                          acpi_gbl_table_data[ACPI_TABLE_SSDT].signature,
-                          acpi_gbl_table_data[ACPI_TABLE_SSDT].sig_length))) {
+       if ((!ACPI_COMPARE_NAME(table_ptr->signature, PSDT_SIG)) &&
+           (!ACPI_COMPARE_NAME(table_ptr->signature, SSDT_SIG))) {
                ACPI_ERROR((AE_INFO,
                            "Table has invalid signature [%4.4s], must be SSDT or PSDT",
                            table_ptr->signature));
@@ -424,6 +433,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
 
        status = acpi_ex_add_table(table_ptr, acpi_gbl_root_node, &ddb_handle);
        if (ACPI_FAILURE(status)) {
+
                /* On error, table_ptr was deallocated above */
 
                return_ACPI_STATUS(status);
@@ -440,9 +450,13 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
                return_ACPI_STATUS(status);
        }
 
+       ACPI_INFO((AE_INFO,
+                  "Dynamic SSDT Load - OemId [%6.6s] OemTableId [%8.8s]",
+                  table_ptr->oem_id, table_ptr->oem_table_id));
+
       cleanup:
        if (ACPI_FAILURE(status)) {
-               ACPI_MEM_FREE(table_ptr);
+               ACPI_FREE(table_ptr);
        }
        return_ACPI_STATUS(status);
 }
@@ -465,7 +479,7 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
        union acpi_operand_object *table_desc = ddb_handle;
        struct acpi_table_desc *table_info;
 
-       ACPI_FUNCTION_TRACE("ex_unload_table");
+       ACPI_FUNCTION_TRACE(ex_unload_table);
 
        /*
         * Validate the handle
@@ -488,7 +502,6 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
         * (Offset contains the table_id)
         */
        acpi_ns_delete_namespace_by_owner(table_info->owner_id);
-       acpi_ut_release_owner_id(&table_info->owner_id);
 
        /* Delete the table itself */