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