Blame view
drivers/acpi/acpica/dswscope.c
6.59 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 |
/****************************************************************************** * * Module Name: dswscope - Scope stack manipulation * *****************************************************************************/ /* |
75a44ce00 ACPICA: update In... |
8 |
* Copyright (C) 2000 - 2008, Intel Corp. |
1da177e4c Linux-2.6.12-rc2 |
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
* All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer, * without modification. * 2. Redistributions in binary form must reproduce at minimum a disclaimer * substantially similar to the "NO WARRANTY" disclaimer below * ("Disclaimer") and any redistribution must be conditioned upon * including a substantially similar Disclaimer requirement for further * binary redistribution. * 3. Neither the names of the above-listed copyright holders nor the names * of any contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * * NO WARRANTY * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. */ |
1da177e4c Linux-2.6.12-rc2 |
43 |
#include <acpi/acpi.h> |
e2f7a7772 ACPICA: hide priv... |
44 45 |
#include "accommon.h" #include "acdispat.h" |
1da177e4c Linux-2.6.12-rc2 |
46 |
|
1da177e4c Linux-2.6.12-rc2 |
47 |
#define _COMPONENT ACPI_DISPATCHER |
4be44fcd3 [ACPI] Lindent al... |
48 |
ACPI_MODULE_NAME("dswscope") |
1da177e4c Linux-2.6.12-rc2 |
49 |
|
1da177e4c Linux-2.6.12-rc2 |
50 51 52 53 |
/**************************************************************************** * * FUNCTION: acpi_ds_scope_stack_clear * |
44f6c0124 ACPICA 20050408 f... |
54 55 56 |
* PARAMETERS: walk_state - Current state * * RETURN: None |
1da177e4c Linux-2.6.12-rc2 |
57 58 59 60 61 |
* * DESCRIPTION: Pop (and free) everything on the scope stack except the * root scope object (which remains at the stack top.) * ***************************************************************************/ |
4be44fcd3 [ACPI] Lindent al... |
62 |
void acpi_ds_scope_stack_clear(struct acpi_walk_state *walk_state) |
1da177e4c Linux-2.6.12-rc2 |
63 |
{ |
4be44fcd3 [ACPI] Lindent al... |
64 |
union acpi_generic_state *scope_info; |
1da177e4c Linux-2.6.12-rc2 |
65 |
|
b229cf92e ACPI: ACPICA 2006... |
66 |
ACPI_FUNCTION_NAME(ds_scope_stack_clear); |
1da177e4c Linux-2.6.12-rc2 |
67 68 |
while (walk_state->scope_info) { |
52fc0b026 [ACPI] ACPICA 200... |
69 |
|
1da177e4c Linux-2.6.12-rc2 |
70 71 72 73 |
/* Pop a scope off the stack */ scope_info = walk_state->scope_info; walk_state->scope_info = scope_info->scope.next; |
4be44fcd3 [ACPI] Lindent al... |
74 75 76 77 78 79 |
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "Popped object type (%s) ", acpi_ut_get_type_name(scope_info->common. value))); acpi_ut_delete_generic_state(scope_info); |
1da177e4c Linux-2.6.12-rc2 |
80 81 |
} } |
1da177e4c Linux-2.6.12-rc2 |
82 83 84 85 |
/**************************************************************************** * * FUNCTION: acpi_ds_scope_stack_push * |
44f6c0124 ACPICA 20050408 f... |
86 87 88 89 90 |
* PARAMETERS: Node - Name to be made current * Type - Type of frame being pushed * walk_state - Current state * * RETURN: Status |
1da177e4c Linux-2.6.12-rc2 |
91 92 93 94 95 96 97 |
* * DESCRIPTION: Push the current scope on the scope stack, and make the * passed Node current. * ***************************************************************************/ acpi_status |
4be44fcd3 [ACPI] Lindent al... |
98 99 100 |
acpi_ds_scope_stack_push(struct acpi_namespace_node *node, acpi_object_type type, struct acpi_walk_state *walk_state) |
1da177e4c Linux-2.6.12-rc2 |
101 |
{ |
4be44fcd3 [ACPI] Lindent al... |
102 103 |
union acpi_generic_state *scope_info; union acpi_generic_state *old_scope_info; |
1da177e4c Linux-2.6.12-rc2 |
104 |
|
b229cf92e ACPI: ACPICA 2006... |
105 |
ACPI_FUNCTION_TRACE(ds_scope_stack_push); |
1da177e4c Linux-2.6.12-rc2 |
106 107 |
if (!node) { |
52fc0b026 [ACPI] ACPICA 200... |
108 |
|
1da177e4c Linux-2.6.12-rc2 |
109 |
/* Invalid scope */ |
b8e4d8935 [ACPI] ACPICA 200... |
110 |
ACPI_ERROR((AE_INFO, "Null scope parameter")); |
4be44fcd3 [ACPI] Lindent al... |
111 |
return_ACPI_STATUS(AE_BAD_PARAMETER); |
1da177e4c Linux-2.6.12-rc2 |
112 113 114 |
} /* Make sure object type is valid */ |
4be44fcd3 [ACPI] Lindent al... |
115 |
if (!acpi_ut_valid_object_type(type)) { |
b8e4d8935 [ACPI] ACPICA 200... |
116 |
ACPI_WARNING((AE_INFO, "Invalid object type: 0x%X", type)); |
1da177e4c Linux-2.6.12-rc2 |
117 118 119 |
} /* Allocate a new scope object */ |
4be44fcd3 [ACPI] Lindent al... |
120 |
scope_info = acpi_ut_create_generic_state(); |
1da177e4c Linux-2.6.12-rc2 |
121 |
if (!scope_info) { |
4be44fcd3 [ACPI] Lindent al... |
122 |
return_ACPI_STATUS(AE_NO_MEMORY); |
1da177e4c Linux-2.6.12-rc2 |
123 124 125 |
} /* Init new scope object */ |
61686124f [ACPI] ACPICA 200... |
126 |
scope_info->common.descriptor_type = ACPI_DESC_TYPE_STATE_WSCOPE; |
4be44fcd3 [ACPI] Lindent al... |
127 128 |
scope_info->scope.node = node; scope_info->common.value = (u16) type; |
1da177e4c Linux-2.6.12-rc2 |
129 130 |
walk_state->scope_depth++; |
4be44fcd3 [ACPI] Lindent al... |
131 132 133 |
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%.2d] Pushed scope ", (u32) walk_state->scope_depth)); |
1da177e4c Linux-2.6.12-rc2 |
134 135 136 |
old_scope_info = walk_state->scope_info; if (old_scope_info) { |
4be44fcd3 [ACPI] Lindent al... |
137 138 139 140 141 142 143 144 |
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[%4.4s] (%s)", acpi_ut_get_node_name(old_scope_info-> scope.node), acpi_ut_get_type_name(old_scope_info-> common.value))); } else { ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (%s)", "ROOT")); |
1da177e4c Linux-2.6.12-rc2 |
145 |
} |
4be44fcd3 [ACPI] Lindent al... |
146 147 148 149 150 |
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, ", New scope -> [%4.4s] (%s) ", acpi_ut_get_node_name(scope_info->scope.node), acpi_ut_get_type_name(scope_info->common.value))); |
1da177e4c Linux-2.6.12-rc2 |
151 152 |
/* Push new scope object onto stack */ |
4be44fcd3 [ACPI] Lindent al... |
153 154 |
acpi_ut_push_generic_state(&walk_state->scope_info, scope_info); return_ACPI_STATUS(AE_OK); |
1da177e4c Linux-2.6.12-rc2 |
155 |
} |
1da177e4c Linux-2.6.12-rc2 |
156 157 158 159 |
/**************************************************************************** * * FUNCTION: acpi_ds_scope_stack_pop * |
44f6c0124 ACPICA 20050408 f... |
160 |
* PARAMETERS: walk_state - Current state |
1da177e4c Linux-2.6.12-rc2 |
161 |
* |
44f6c0124 ACPICA 20050408 f... |
162 |
* RETURN: Status |
1da177e4c Linux-2.6.12-rc2 |
163 |
* |
44f6c0124 ACPICA 20050408 f... |
164 |
* DESCRIPTION: Pop the scope stack once. |
1da177e4c Linux-2.6.12-rc2 |
165 166 |
* ***************************************************************************/ |
4be44fcd3 [ACPI] Lindent al... |
167 |
acpi_status acpi_ds_scope_stack_pop(struct acpi_walk_state *walk_state) |
1da177e4c Linux-2.6.12-rc2 |
168 |
{ |
4be44fcd3 [ACPI] Lindent al... |
169 170 |
union acpi_generic_state *scope_info; union acpi_generic_state *new_scope_info; |
1da177e4c Linux-2.6.12-rc2 |
171 |
|
b229cf92e ACPI: ACPICA 2006... |
172 |
ACPI_FUNCTION_TRACE(ds_scope_stack_pop); |
1da177e4c Linux-2.6.12-rc2 |
173 174 175 176 |
/* * Pop scope info object off the stack. */ |
4be44fcd3 [ACPI] Lindent al... |
177 |
scope_info = acpi_ut_pop_generic_state(&walk_state->scope_info); |
1da177e4c Linux-2.6.12-rc2 |
178 |
if (!scope_info) { |
4be44fcd3 [ACPI] Lindent al... |
179 |
return_ACPI_STATUS(AE_STACK_UNDERFLOW); |
1da177e4c Linux-2.6.12-rc2 |
180 181 182 |
} walk_state->scope_depth--; |
4be44fcd3 [ACPI] Lindent al... |
183 184 185 186 187 |
ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "[%.2d] Popped scope [%4.4s] (%s), New scope -> ", (u32) walk_state->scope_depth, acpi_ut_get_node_name(scope_info->scope.node), acpi_ut_get_type_name(scope_info->common.value))); |
1da177e4c Linux-2.6.12-rc2 |
188 189 190 |
new_scope_info = walk_state->scope_info; if (new_scope_info) { |
4be44fcd3 [ACPI] Lindent al... |
191 192 193 194 195 196 197 198 199 200 |
ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[%4.4s] (%s) ", acpi_ut_get_node_name(new_scope_info-> scope.node), acpi_ut_get_type_name(new_scope_info-> common.value))); } else { ACPI_DEBUG_PRINT_RAW((ACPI_DB_EXEC, "[\\___] (ROOT) ")); |
1da177e4c Linux-2.6.12-rc2 |
201 |
} |
4be44fcd3 [ACPI] Lindent al... |
202 203 |
acpi_ut_delete_generic_state(scope_info); return_ACPI_STATUS(AE_OK); |
1da177e4c Linux-2.6.12-rc2 |
204 |
} |