Pull acpi_bus_register_driver into release branch
[pandora-kernel.git] / drivers / acpi / dispatcher / dswstate.c
index 7d68a5a..7817e55 100644 (file)
@@ -5,7 +5,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
@@ -66,7 +66,6 @@ void *acpi_ds_obj_stack_get_value(u32 index,
 #endif
 
 #ifdef ACPI_FUTURE_USAGE
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ds_result_remove
@@ -88,30 +87,27 @@ acpi_ds_result_remove(union acpi_operand_object **object,
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_remove");
+       ACPI_FUNCTION_NAME(ds_result_remove);
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "No result object pushed! State=%p\n",
-                                 walk_state));
+               ACPI_ERROR((AE_INFO, "No result object pushed! State=%p",
+                           walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (index >= ACPI_OBJ_MAX_OPERAND) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Index out of range: %X State=%p Num=%X\n",
-                                 index, walk_state,
-                                 state->results.num_results));
+               ACPI_ERROR((AE_INFO,
+                           "Index out of range: %X State=%p Num=%X",
+                           index, walk_state, state->results.num_results));
        }
 
        /* Check for a valid result object */
 
        if (!state->results.obj_desc[index]) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Null operand! State=%p #Ops=%X, Index=%X\n",
-                                 walk_state, state->results.num_results,
-                                 index));
+               ACPI_ERROR((AE_INFO,
+                           "Null operand! State=%p #Ops=%X, Index=%X",
+                           walk_state, state->results.num_results, index));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -131,7 +127,6 @@ acpi_ds_result_remove(union acpi_operand_object **object,
 
        return (AE_OK);
 }
-
 #endif                         /*  ACPI_FUTURE_USAGE  */
 
 /*******************************************************************************
@@ -155,7 +150,7 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
        acpi_native_uint index;
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_pop");
+       ACPI_FUNCTION_NAME(ds_result_pop);
 
        state = walk_state->results;
        if (!state) {
@@ -163,9 +158,8 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
        }
 
        if (!state->results.num_results) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Result stack is empty! State=%p\n",
-                                 walk_state));
+               ACPI_ERROR((AE_INFO, "Result stack is empty! State=%p",
+                           walk_state));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -174,6 +168,7 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
        state->results.num_results--;
 
        for (index = ACPI_OBJ_NUM_OPERANDS; index; index--) {
+
                /* Check for a valid result object */
 
                if (state->results.obj_desc[index - 1]) {
@@ -192,8 +187,7 @@ acpi_ds_result_pop(union acpi_operand_object ** object,
                }
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                         "No result objects! State=%p\n", walk_state));
+       ACPI_ERROR((AE_INFO, "No result objects! State=%p", walk_state));
        return (AE_AML_NO_RETURN_VALUE);
 }
 
@@ -218,19 +212,18 @@ acpi_ds_result_pop_from_bottom(union acpi_operand_object ** object,
        acpi_native_uint index;
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_pop_from_bottom");
+       ACPI_FUNCTION_NAME(ds_result_pop_from_bottom);
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Warning: No result object pushed! State=%p\n",
-                                 walk_state));
+               ACPI_ERROR((AE_INFO,
+                           "No result object pushed! State=%p", walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (!state->results.num_results) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "No result objects! State=%p\n", walk_state));
+               ACPI_ERROR((AE_INFO, "No result objects! State=%p",
+                           walk_state));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -250,10 +243,10 @@ acpi_ds_result_pop_from_bottom(union acpi_operand_object ** object,
        /* Check for a valid result object */
 
        if (!*object) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Null operand! State=%p #Ops=%X Index=%X\n",
-                                 walk_state, state->results.num_results,
-                                 (u32) index));
+               ACPI_ERROR((AE_INFO,
+                           "Null operand! State=%p #Ops=%X Index=%X",
+                           walk_state, state->results.num_results,
+                           (u32) index));
                return (AE_AML_NO_RETURN_VALUE);
        }
 
@@ -284,27 +277,25 @@ acpi_ds_result_push(union acpi_operand_object * object,
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_push");
+       ACPI_FUNCTION_NAME(ds_result_push);
 
        state = walk_state->results;
        if (!state) {
-               ACPI_REPORT_ERROR(("No result stack frame during push\n"));
+               ACPI_ERROR((AE_INFO, "No result stack frame during push"));
                return (AE_AML_INTERNAL);
        }
 
        if (state->results.num_results == ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Result stack overflow: Obj=%p State=%p Num=%X\n",
-                                 object, walk_state,
-                                 state->results.num_results));
+               ACPI_ERROR((AE_INFO,
+                           "Result stack overflow: Obj=%p State=%p Num=%X",
+                           object, walk_state, state->results.num_results));
                return (AE_STACK_OVERFLOW);
        }
 
        if (!object) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Null Object! Obj=%p State=%p Num=%X\n",
-                                 object, walk_state,
-                                 state->results.num_results));
+               ACPI_ERROR((AE_INFO,
+                           "Null Object! Obj=%p State=%p Num=%X",
+                           object, walk_state, state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
@@ -339,14 +330,14 @@ acpi_status acpi_ds_result_stack_push(struct acpi_walk_state * walk_state)
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_stack_push");
+       ACPI_FUNCTION_NAME(ds_result_stack_push);
 
        state = acpi_ut_create_generic_state();
        if (!state) {
                return (AE_NO_MEMORY);
        }
 
-       state->common.data_type = ACPI_DESC_TYPE_STATE_RESULT;
+       state->common.descriptor_type = ACPI_DESC_TYPE_STATE_RESULT;
        acpi_ut_push_generic_state(&walk_state->results, state);
 
        ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Results=%p State=%p\n",
@@ -371,7 +362,7 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_stack_pop");
+       ACPI_FUNCTION_NAME(ds_result_stack_pop);
 
        /* Check for stack underflow */
 
@@ -384,7 +375,7 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
        state = acpi_ut_pop_generic_state(&walk_state->results);
 
        ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
-                         "Result=%p remaining_results=%X State=%p\n",
+                         "Result=%p RemainingResults=%X State=%p\n",
                          state, state->results.num_results, walk_state));
 
        acpi_ut_delete_generic_state(state);
@@ -408,15 +399,14 @@ acpi_status acpi_ds_result_stack_pop(struct acpi_walk_state * walk_state)
 acpi_status
 acpi_ds_obj_stack_push(void *object, struct acpi_walk_state * walk_state)
 {
-       ACPI_FUNCTION_NAME("ds_obj_stack_push");
+       ACPI_FUNCTION_NAME(ds_obj_stack_push);
 
        /* Check for stack overflow */
 
        if (walk_state->num_operands >= ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "overflow! Obj=%p State=%p #Ops=%X\n",
-                                 object, walk_state,
-                                 walk_state->num_operands));
+               ACPI_ERROR((AE_INFO,
+                           "Object stack overflow! Obj=%p State=%p #Ops=%X",
+                           object, walk_state, walk_state->num_operands));
                return (AE_STACK_OVERFLOW);
        }
 
@@ -454,16 +444,17 @@ acpi_ds_obj_stack_pop(u32 pop_count, struct acpi_walk_state * walk_state)
 {
        u32 i;
 
-       ACPI_FUNCTION_NAME("ds_obj_stack_pop");
+       ACPI_FUNCTION_NAME(ds_obj_stack_pop);
 
        for (i = 0; i < pop_count; i++) {
+
                /* Check for stack underflow */
 
                if (walk_state->num_operands == 0) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                         "Underflow! Count=%X State=%p #Ops=%X\n",
-                                         pop_count, walk_state,
-                                         walk_state->num_operands));
+                       ACPI_ERROR((AE_INFO,
+                                   "Object stack underflow! Count=%X State=%p #Ops=%X",
+                                   pop_count, walk_state,
+                                   walk_state->num_operands));
                        return (AE_STACK_UNDERFLOW);
                }
 
@@ -500,16 +491,17 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
        u32 i;
        union acpi_operand_object *obj_desc;
 
-       ACPI_FUNCTION_NAME("ds_obj_stack_pop_and_delete");
+       ACPI_FUNCTION_NAME(ds_obj_stack_pop_and_delete);
 
        for (i = 0; i < pop_count; i++) {
+
                /* Check for stack underflow */
 
                if (walk_state->num_operands == 0) {
-                       ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                         "Underflow! Count=%X State=%p #Ops=%X\n",
-                                         pop_count, walk_state,
-                                         walk_state->num_operands));
+                       ACPI_ERROR((AE_INFO,
+                                   "Object stack underflow! Count=%X State=%p #Ops=%X",
+                                   pop_count, walk_state,
+                                   walk_state->num_operands));
                        return (AE_STACK_UNDERFLOW);
                }
 
@@ -547,13 +539,13 @@ acpi_ds_obj_stack_pop_and_delete(u32 pop_count,
 struct acpi_walk_state *acpi_ds_get_current_walk_state(struct acpi_thread_state
                                                       *thread)
 {
-       ACPI_FUNCTION_NAME("ds_get_current_walk_state");
+       ACPI_FUNCTION_NAME(ds_get_current_walk_state);
 
        if (!thread) {
                return (NULL);
        }
 
-       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Current walk_state %p\n",
+       ACPI_DEBUG_PRINT((ACPI_DB_PARSE, "Current WalkState %p\n",
                          thread->walk_state_list));
 
        return (thread->walk_state_list);
@@ -576,7 +568,7 @@ void
 acpi_ds_push_walk_state(struct acpi_walk_state *walk_state,
                        struct acpi_thread_state *thread)
 {
-       ACPI_FUNCTION_TRACE("ds_push_walk_state");
+       ACPI_FUNCTION_TRACE(ds_push_walk_state);
 
        walk_state->next = thread->walk_state_list;
        thread->walk_state_list = walk_state;
@@ -602,11 +594,12 @@ struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state *thread)
 {
        struct acpi_walk_state *walk_state;
 
-       ACPI_FUNCTION_TRACE("ds_pop_walk_state");
+       ACPI_FUNCTION_TRACE(ds_pop_walk_state);
 
        walk_state = thread->walk_state_list;
 
        if (walk_state) {
+
                /* Next walk state becomes the current walk state */
 
                thread->walk_state_list = walk_state->next;
@@ -627,7 +620,7 @@ struct acpi_walk_state *acpi_ds_pop_walk_state(struct acpi_thread_state *thread)
  *
  * PARAMETERS:  owner_id        - ID for object creation
  *              Origin          - Starting point for this walk
- *              mth_desc        - Method object
+ *              method_desc     - Method object
  *              Thread          - Current thread state
  *
  * RETURN:      Pointer to the new walk state.
@@ -641,24 +634,24 @@ struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
                                                  union acpi_parse_object
                                                  *origin,
                                                  union acpi_operand_object
-                                                 *mth_desc,
+                                                 *method_desc,
                                                  struct acpi_thread_state
                                                  *thread)
 {
        struct acpi_walk_state *walk_state;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE("ds_create_walk_state");
+       ACPI_FUNCTION_TRACE(ds_create_walk_state);
 
-       walk_state = ACPI_MEM_CALLOCATE(sizeof(struct acpi_walk_state));
+       walk_state = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_walk_state));
        if (!walk_state) {
                return_PTR(NULL);
        }
 
-       walk_state->data_type = ACPI_DESC_TYPE_WALK;
+       walk_state->descriptor_type = ACPI_DESC_TYPE_WALK;
+       walk_state->method_desc = method_desc;
        walk_state->owner_id = owner_id;
        walk_state->origin = origin;
-       walk_state->method_desc = mth_desc;
        walk_state->thread = thread;
 
        walk_state->parser_state.start_op = origin;
@@ -673,7 +666,7 @@ struct acpi_walk_state *acpi_ds_create_walk_state(acpi_owner_id owner_id,
 
        status = acpi_ds_result_stack_push(walk_state);
        if (ACPI_FAILURE(status)) {
-               ACPI_MEM_FREE(walk_state);
+               ACPI_FREE(walk_state);
                return_PTR(NULL);
        }
 
@@ -710,13 +703,13 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
                      struct acpi_namespace_node *method_node,
                      u8 * aml_start,
                      u32 aml_length,
-                     struct acpi_parameter_info *info, u8 pass_number)
+                     struct acpi_evaluate_info *info, u8 pass_number)
 {
        acpi_status status;
        struct acpi_parse_state *parser_state = &walk_state->parser_state;
        union acpi_parse_object *extra_op;
 
-       ACPI_FUNCTION_TRACE("ds_init_aml_walk");
+       ACPI_FUNCTION_TRACE(ds_init_aml_walk);
 
        walk_state->parser_state.aml =
            walk_state->parser_state.aml_start = aml_start;
@@ -787,6 +780,7 @@ acpi_ds_init_aml_walk(struct acpi_walk_state *walk_state,
                }
 
                if (parser_state->start_node) {
+
                        /* Push start scope on scope stack and make it current  */
 
                        status =
@@ -819,23 +813,24 @@ void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state)
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_TRACE_PTR("ds_delete_walk_state", walk_state);
+       ACPI_FUNCTION_TRACE_PTR(ds_delete_walk_state, walk_state);
 
        if (!walk_state) {
                return;
        }
 
-       if (walk_state->data_type != ACPI_DESC_TYPE_WALK) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "%p is not a valid walk state\n",
-                                 walk_state));
+       if (walk_state->descriptor_type != ACPI_DESC_TYPE_WALK) {
+               ACPI_ERROR((AE_INFO, "%p is not a valid walk state",
+                           walk_state));
                return;
        }
 
+       /* There should not be any open scopes */
+
        if (walk_state->parser_state.scope) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "%p walk still has a scope list\n",
-                                 walk_state));
+               ACPI_ERROR((AE_INFO, "%p walk still has a scope list",
+                           walk_state));
+               acpi_ps_cleanup_scope(&walk_state->parser_state);
        }
 
        /* Always must free any linked control states */
@@ -865,7 +860,7 @@ void acpi_ds_delete_walk_state(struct acpi_walk_state *walk_state)
                acpi_ut_delete_generic_state(state);
        }
 
-       ACPI_MEM_FREE(walk_state);
+       ACPI_FREE(walk_state);
        return_VOID;
 }
 
@@ -890,29 +885,28 @@ acpi_ds_result_insert(void *object,
 {
        union acpi_generic_state *state;
 
-       ACPI_FUNCTION_NAME("ds_result_insert");
+       ACPI_FUNCTION_NAME(ds_result_insert);
 
        state = walk_state->results;
        if (!state) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "No result object pushed! State=%p\n",
-                                 walk_state));
+               ACPI_ERROR((AE_INFO, "No result object pushed! State=%p",
+                           walk_state));
                return (AE_NOT_EXIST);
        }
 
        if (index >= ACPI_OBJ_NUM_OPERANDS) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Index out of range: %X Obj=%p State=%p Num=%X\n",
-                                 index, object, walk_state,
-                                 state->results.num_results));
+               ACPI_ERROR((AE_INFO,
+                           "Index out of range: %X Obj=%p State=%p Num=%X",
+                           index, object, walk_state,
+                           state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
        if (!object) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Null Object! Index=%X Obj=%p State=%p Num=%X\n",
-                                 index, object, walk_state,
-                                 state->results.num_results));
+               ACPI_ERROR((AE_INFO,
+                           "Null Object! Index=%X Obj=%p State=%p Num=%X",
+                           index, object, walk_state,
+                           state->results.num_results));
                return (AE_BAD_PARAMETER);
        }
 
@@ -949,7 +943,7 @@ acpi_status acpi_ds_obj_stack_delete_all(struct acpi_walk_state * walk_state)
 {
        u32 i;
 
-       ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_delete_all", walk_state);
+       ACPI_FUNCTION_TRACE_PTR(ds_obj_stack_delete_all, walk_state);
 
        /* The stack size is configurable, but fixed */
 
@@ -981,14 +975,14 @@ acpi_status
 acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
                             struct acpi_walk_state *walk_state)
 {
-       ACPI_FUNCTION_NAME("ds_obj_stack_pop_object");
+       ACPI_FUNCTION_NAME(ds_obj_stack_pop_object);
 
        /* Check for stack underflow */
 
        if (walk_state->num_operands == 0) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Missing operand/stack empty! State=%p #Ops=%X\n",
-                                 walk_state, walk_state->num_operands));
+               ACPI_ERROR((AE_INFO,
+                           "Missing operand/stack empty! State=%p #Ops=%X",
+                           walk_state, walk_state->num_operands));
                *object = NULL;
                return (AE_AML_NO_OPERAND);
        }
@@ -1000,9 +994,9 @@ acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
        /* Check for a valid operand */
 
        if (!walk_state->operands[walk_state->num_operands]) {
-               ACPI_DEBUG_PRINT((ACPI_DB_ERROR,
-                                 "Null operand! State=%p #Ops=%X\n",
-                                 walk_state, walk_state->num_operands));
+               ACPI_ERROR((AE_INFO,
+                           "Null operand! State=%p #Ops=%X",
+                           walk_state, walk_state->num_operands));
                *object = NULL;
                return (AE_AML_NO_OPERAND);
        }
@@ -1037,7 +1031,7 @@ acpi_ds_obj_stack_pop_object(union acpi_operand_object **object,
 void *acpi_ds_obj_stack_get_value(u32 index, struct acpi_walk_state *walk_state)
 {
 
-       ACPI_FUNCTION_TRACE_PTR("ds_obj_stack_get_value", walk_state);
+       ACPI_FUNCTION_TRACE_PTR(ds_obj_stack_get_value, walk_state);
 
        /* Can't do it if the stack is empty */