Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
39d7c3e1
Commit
39d7c3e1
authored
Sep 29, 2003
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/src/linux-acpi-test-2.6.0
into intel.com:/home/lenb/bk/linux-acpi-test-2.6.0
parents
d4536e93
3aac1e55
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
235 additions
and
138 deletions
+235
-138
drivers/acpi/Kconfig
drivers/acpi/Kconfig
+12
-0
drivers/acpi/dispatcher/dsfield.c
drivers/acpi/dispatcher/dsfield.c
+24
-18
drivers/acpi/dispatcher/dsinit.c
drivers/acpi/dispatcher/dsinit.c
+2
-2
drivers/acpi/dispatcher/dsopcode.c
drivers/acpi/dispatcher/dsopcode.c
+23
-12
drivers/acpi/dispatcher/dsutils.c
drivers/acpi/dispatcher/dsutils.c
+64
-52
drivers/acpi/dispatcher/dswload.c
drivers/acpi/dispatcher/dswload.c
+18
-0
drivers/acpi/dispatcher/dswscope.c
drivers/acpi/dispatcher/dswscope.c
+4
-7
drivers/acpi/dispatcher/dswstate.c
drivers/acpi/dispatcher/dswstate.c
+20
-10
drivers/acpi/executer/excreate.c
drivers/acpi/executer/excreate.c
+2
-6
drivers/acpi/executer/exfldio.c
drivers/acpi/executer/exfldio.c
+35
-1
drivers/acpi/namespace/nsdump.c
drivers/acpi/namespace/nsdump.c
+2
-2
drivers/acpi/namespace/nssearch.c
drivers/acpi/namespace/nssearch.c
+4
-4
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nsutils.c
+7
-2
drivers/acpi/parser/psparse.c
drivers/acpi/parser/psparse.c
+15
-16
include/acpi/acconfig.h
include/acpi/acconfig.h
+1
-1
include/acpi/acdisasm.h
include/acpi/acdisasm.h
+0
-4
include/acpi/acstruct.h
include/acpi/acstruct.h
+2
-1
No files found.
drivers/acpi/Kconfig
View file @
39d7c3e1
...
...
@@ -280,5 +280,17 @@ config ACPI_EFI
depends on IA64
default y
config ACPI_RELAXED_AML
bool
depends on ACPI_INTERPRETER
depends on !IA64_SGI_SN
default n
help
If you say `Y' here, the ACPI interpreter will relax its checking
for valid AML and will ignore some AML mistakes, such as off-by-one
errors in region sizes. Some laptops may require this option. In
particular, many Toshiba laptops require this for correct operation
of the AC module.
endmenu
drivers/acpi/dispatcher/dsfield.c
View file @
39d7c3e1
...
...
@@ -105,27 +105,33 @@ acpi_ds_create_buffer_field (
return_ACPI_STATUS
(
AE_AML_NO_OPERAND
);
}
/*
* During the load phase, we want to enter the name of the field into
* the namespace. During the execute phase (when we evaluate the size
* operand), we want to lookup the name
*/
if
(
walk_state
->
parse_flags
&
ACPI_PARSE_EXECUTE
)
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
;
if
(
walk_state
->
deferred_node
)
{
node
=
walk_state
->
deferred_node
;
status
=
AE_OK
;
}
else
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
|
ACPI_NS_ERROR_IF_FOUND
;
}
/*
* During the load phase, we want to enter the name of the field into
* the namespace. During the execute phase (when we evaluate the size
* operand), we want to lookup the name
*/
if
(
walk_state
->
parse_flags
&
ACPI_PARSE_EXECUTE
)
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
;
}
else
{
flags
=
ACPI_NS_NO_UPSEARCH
|
ACPI_NS_DONT_OPEN_SCOPE
|
ACPI_NS_ERROR_IF_FOUND
;
}
/*
* Enter the name_string into the namespace
*/
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
arg
->
common
.
value
.
string
,
ACPI_TYPE_ANY
,
ACPI_IMODE_LOAD_PASS1
,
flags
,
walk_state
,
&
(
node
));
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_NSERROR
(
arg
->
common
.
value
.
string
,
status
);
return_ACPI_STATUS
(
status
);
/*
* Enter the name_string into the namespace
*/
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
arg
->
common
.
value
.
string
,
ACPI_TYPE_ANY
,
ACPI_IMODE_LOAD_PASS1
,
flags
,
walk_state
,
&
(
node
));
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_NSERROR
(
arg
->
common
.
value
.
string
,
status
);
return_ACPI_STATUS
(
status
);
}
}
/* We could put the returned object (Node) on the object stack for later, but
...
...
drivers/acpi/dispatcher/dsinit.c
View file @
39d7c3e1
...
...
@@ -135,7 +135,7 @@ acpi_ds_init_one_object (
}
/*
* Always parse methods to detect errors, we
may
delete
* Always parse methods to detect errors, we
will
delete
* the parse tree below
*/
status
=
acpi_ds_parse_method
(
obj_handle
);
...
...
@@ -150,7 +150,7 @@ acpi_ds_init_one_object (
}
/*
* Delete the parse tree. We simpl
e
re-parse the method
* Delete the parse tree. We simpl
y
re-parse the method
* for every execution since there isn't much overhead
*/
acpi_ns_delete_namespace_subtree
(
obj_handle
);
...
...
drivers/acpi/dispatcher/dsopcode.c
View file @
39d7c3e1
...
...
@@ -65,7 +65,7 @@
*
* RETURN: Status.
*
* DESCRIPTION: Late execution of region or field arguments
* DESCRIPTION: Late
(deferred)
execution of region or field arguments
*
****************************************************************************/
...
...
@@ -111,7 +111,10 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS
(
status
);
}
/* Mark this parse as a deferred opcode */
walk_state
->
parse_flags
=
ACPI_PARSE_DEFERRED_OP
;
walk_state
->
deferred_node
=
node
;
/* Pass1: Parse the entire declaration */
...
...
@@ -128,7 +131,7 @@ acpi_ds_execute_arguments (
arg
->
common
.
node
=
node
;
acpi_ps_delete_parse_tree
(
op
);
/* Evaluate the
address and length arguments for the Buffer Field
*/
/* Evaluate the
deferred arguments
*/
op
=
acpi_ps_alloc_op
(
AML_INT_EVAL_SUBTREE_OP
);
if
(
!
op
)
{
...
...
@@ -144,6 +147,8 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Execute the opcode and arguments */
status
=
acpi_ds_init_aml_walk
(
walk_state
,
op
,
NULL
,
aml_start
,
aml_length
,
NULL
,
NULL
,
3
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -151,6 +156,9 @@ acpi_ds_execute_arguments (
return_ACPI_STATUS
(
status
);
}
/* Mark this execution as a deferred opcode */
walk_state
->
deferred_node
=
node
;
status
=
acpi_ps_parse_aml
(
walk_state
);
acpi_ps_delete_parse_tree
(
op
);
return_ACPI_STATUS
(
status
);
...
...
@@ -192,7 +200,7 @@ acpi_ds_get_buffer_field_arguments (
node
=
obj_desc
->
buffer_field
.
node
;
ACPI_DEBUG_EXEC
(
acpi_ut_display_init_pathname
(
ACPI_TYPE_BUFFER_FIELD
,
node
,
NULL
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[%4.4s] buffer_field
JIT
Init
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[%4.4s] buffer_field
Arg
Init
\n
"
,
node
->
name
.
ascii
));
/* Execute the AML code for the term_arg arguments */
...
...
@@ -207,7 +215,7 @@ acpi_ds_get_buffer_field_arguments (
*
* FUNCTION: acpi_ds_get_buffer_arguments
*
* PARAMETERS: obj_desc - A valid Bufferobject
* PARAMETERS: obj_desc - A valid Buffer
object
*
* RETURN: Status.
*
...
...
@@ -240,7 +248,7 @@ acpi_ds_get_buffer_arguments (
return_ACPI_STATUS
(
AE_AML_INTERNAL
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Buffer
JIT
Init
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Buffer
Arg
Init
\n
"
));
/* Execute the AML code for the term_arg arguments */
...
...
@@ -254,7 +262,7 @@ acpi_ds_get_buffer_arguments (
*
* FUNCTION: acpi_ds_get_package_arguments
*
* PARAMETERS: obj_desc - A valid Packageobject
* PARAMETERS: obj_desc - A valid Package
object
*
* RETURN: Status.
*
...
...
@@ -287,7 +295,7 @@ acpi_ds_get_package_arguments (
return_ACPI_STATUS
(
AE_AML_INTERNAL
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Package
JIT
Init
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Package
Arg
Init
\n
"
));
/* Execute the AML code for the term_arg arguments */
...
...
@@ -335,11 +343,12 @@ acpi_ds_get_region_arguments (
node
=
obj_desc
->
region
.
node
;
ACPI_DEBUG_EXEC
(
acpi_ut_display_init_pathname
(
ACPI_TYPE_REGION
,
node
,
NULL
));
ACPI_DEBUG_EXEC
(
acpi_ut_display_init_pathname
(
ACPI_TYPE_REGION
,
node
,
NULL
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[%4.4s] op_region Init at AML %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[%4.4s] op_region
Arg
Init at AML %p
\n
"
,
node
->
name
.
ascii
,
extra_desc
->
extra
.
aml_start
));
/* Execute the argument AML */
status
=
acpi_ds_execute_arguments
(
node
,
acpi_ns_get_parent_node
(
node
),
extra_desc
->
extra
.
aml_length
,
extra_desc
->
extra
.
aml_start
);
...
...
@@ -505,14 +514,16 @@ acpi_ds_init_buffer_field (
goto
cleanup
;
}
/* Entire field must fit within the current length of the buffer */
if
((
bit_offset
+
bit_count
)
>
(
8
*
(
u32
)
buffer_desc
->
buffer
.
length
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Field size %d exceeds Buffer size %d (bits)
\n
"
,
bit_offset
+
bit_count
,
8
*
(
u32
)
buffer_desc
->
buffer
.
length
));
"Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)
\n
"
,
((
struct
acpi_namespace_node
*
)
result_desc
)
->
name
.
ascii
,
bit_offset
+
bit_count
,
buffer_desc
->
buffer
.
node
->
name
.
ascii
,
8
*
(
u32
)
buffer_desc
->
buffer
.
length
));
status
=
AE_AML_BUFFER_LIMIT
;
goto
cleanup
;
}
...
...
drivers/acpi/dispatcher/dsutils.c
View file @
39d7c3e1
...
...
@@ -53,6 +53,7 @@
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME
(
"dsutils"
)
#ifndef ACPI_NO_METHOD_EXECUTION
/*******************************************************************************
...
...
@@ -196,7 +197,6 @@ acpi_ds_is_result_used (
acpi_ps_get_opcode_name
(
op
->
common
.
parent
->
common
.
aml_opcode
),
op
));
return_VALUE
(
FALSE
);
}
...
...
@@ -239,7 +239,6 @@ acpi_ds_delete_result_if_not_used (
return_VOID
;
}
if
(
!
acpi_ds_is_result_used
(
op
,
walk_state
))
{
/*
* Must pop the result stack (obj_desc should be equal to result_obj)
...
...
@@ -389,61 +388,77 @@ acpi_ds_create_operand (
* in name_string
*/
/*
* Differentiate between a namespace "create" operation
* versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
* IMODE_EXECUTE) in order to support the creation of
* namespace objects during the execution of control methods.
* Special handling for buffer_field declarations. This is a deferred
* opcode that unfortunately defines the field name as the last
* parameter instead of the first. We get here when we are performing
* the deferred execution, so the actual name of the field is already
* in the namespace. We don't want to attempt to look it up again
* because we may be executing in a different scope than where the
* actual opcode exists.
*/
parent_op
=
arg
->
common
.
parent
;
op_info
=
acpi_ps_get_opcode_info
(
parent_op
->
common
.
aml_opcode
);
if
((
op_info
->
flags
&
AML_NSNODE
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_METHODCALL_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_REGION_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_NAMEPATH_OP
))
{
/* Enter name into namespace if not found */
interpreter_mode
=
ACPI_IMODE_LOAD_PASS2
;
}
else
{
/* Return a failure if name not found */
interpreter_mode
=
ACPI_IMODE_EXECUTE
;
if
((
walk_state
->
deferred_node
)
&&
(
walk_state
->
deferred_node
->
type
==
ACPI_TYPE_BUFFER_FIELD
)
&&
(
arg_index
!=
0
))
{
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
walk_state
->
deferred_node
);
status
=
AE_OK
;
}
else
/* All other opcodes */
{
/*
* Differentiate between a namespace "create" operation
* versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
* IMODE_EXECUTE) in order to support the creation of
* namespace objects during the execution of control methods.
*/
parent_op
=
arg
->
common
.
parent
;
op_info
=
acpi_ps_get_opcode_info
(
parent_op
->
common
.
aml_opcode
);
if
((
op_info
->
flags
&
AML_NSNODE
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_METHODCALL_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_REGION_OP
)
&&
(
parent_op
->
common
.
aml_opcode
!=
AML_INT_NAMEPATH_OP
))
{
/* Enter name into namespace if not found */
interpreter_mode
=
ACPI_IMODE_LOAD_PASS2
;
}
else
{
/* Return a failure if name not found */
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
name_string
,
ACPI_TYPE_ANY
,
interpreter_mode
,
ACPI_NS_SEARCH_PARENT
|
ACPI_NS_DONT_OPEN_SCOPE
,
walk_state
,
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
obj_desc
));
/*
* The only case where we pass through (ignore) a NOT_FOUND
* error is for the cond_ref_of opcode.
*/
if
(
status
==
AE_NOT_FOUND
)
{
if
(
parent_op
->
common
.
aml_opcode
==
AML_COND_REF_OF_OP
)
{
/*
* For the Conditional Reference op, it's OK if
* the name is not found; We just need a way to
* indicate this to the interpreter, set the
* object to the root
*/
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
acpi_gbl_root_node
);
status
=
AE_OK
;
interpreter_mode
=
ACPI_IMODE_EXECUTE
;
}
else
{
/*
* We just plain didn't find it -- which is a
* very serious error at this point
*/
status
=
AE_AML_NAME_NOT_FOUND
;
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
name_string
,
ACPI_TYPE_ANY
,
interpreter_mode
,
ACPI_NS_SEARCH_PARENT
|
ACPI_NS_DONT_OPEN_SCOPE
,
walk_state
,
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
obj_desc
));
/*
* The only case where we pass through (ignore) a NOT_FOUND
* error is for the cond_ref_of opcode.
*/
if
(
status
==
AE_NOT_FOUND
)
{
if
(
parent_op
->
common
.
aml_opcode
==
AML_COND_REF_OF_OP
)
{
/*
* For the Conditional Reference op, it's OK if
* the name is not found; We just need a way to
* indicate this to the interpreter, set the
* object to the root
*/
obj_desc
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
acpi_gbl_root_node
);
status
=
AE_OK
;
}
else
{
/*
* We just plain didn't find it -- which is a
* very serious error at this point
*/
status
=
AE_AML_NAME_NOT_FOUND
;
}
}
}
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_NSERROR
(
name_string
,
status
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_REPORT_NSERROR
(
name_string
,
status
);
}
}
/* Free the namestring created above */
...
...
@@ -464,8 +479,6 @@ acpi_ds_create_operand (
}
ACPI_DEBUGGER_EXEC
(
acpi_db_display_argument_object
(
obj_desc
,
walk_state
));
}
else
{
/* Check for null name case */
...
...
@@ -480,7 +493,6 @@ acpi_ds_create_operand (
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
"Null namepath: Arg=%p
\n
"
,
arg
));
}
else
{
opcode
=
arg
->
common
.
aml_opcode
;
}
...
...
drivers/acpi/dispatcher/dswload.c
View file @
39d7c3e1
...
...
@@ -248,6 +248,14 @@ acpi_ds_load1_begin_op (
* buffer_field, or Package), the name of the object is already
* in the namespace.
*/
if
(
walk_state
->
deferred_node
)
{
/* This name is already in the namespace, get the node */
node
=
walk_state
->
deferred_node
;
status
=
AE_OK
;
break
;
}
flags
=
ACPI_NS_NO_UPSEARCH
;
if
((
walk_state
->
opcode
!=
AML_SCOPE_OP
)
&&
(
!
(
walk_state
->
parse_flags
&
ACPI_PARSE_DEFERRED_OP
)))
{
...
...
@@ -589,7 +597,17 @@ acpi_ds_load2_begin_op (
* Enter the named type into the internal namespace. We enter the name
* as we go downward in the parse tree. Any necessary subobjects that involve
* arguments to the opcode must be created as we go back up the parse tree later.
*
* Note: Name may already exist if we are executing a deferred opcode.
*/
if
(
walk_state
->
deferred_node
)
{
/* This name is already in the namespace, get the node */
node
=
walk_state
->
deferred_node
;
status
=
AE_OK
;
break
;
}
status
=
acpi_ns_lookup
(
walk_state
->
scope_info
,
buffer_ptr
,
object_type
,
ACPI_IMODE_EXECUTE
,
ACPI_NS_NO_UPSEARCH
,
walk_state
,
&
(
node
));
break
;
...
...
drivers/acpi/dispatcher/dswscope.c
View file @
39d7c3e1
...
...
@@ -121,10 +121,9 @@ acpi_ds_scope_stack_push (
/* Make sure object type is valid */
if
(
!
acpi_ut_valid_object_type
(
type
))
{
ACPI_REPORT_WARNING
((
"ds_scope_stack_push:
type code out of range
\n
"
));
ACPI_REPORT_WARNING
((
"ds_scope_stack_push:
Invalid object type: 0x%X
\n
"
,
type
));
}
/* Allocate a new scope object */
scope_info
=
acpi_ut_create_generic_state
();
...
...
@@ -146,13 +145,13 @@ acpi_ds_scope_stack_push (
old_scope_info
=
walk_state
->
scope_info
;
if
(
old_scope_info
)
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_EXEC
,
"[%4.4s] (%
10
s)"
,
"[%4.4s] (%s)"
,
old_scope_info
->
scope
.
node
->
name
.
ascii
,
acpi_ut_get_type_name
(
old_scope_info
->
common
.
value
)));
}
else
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_EXEC
,
"[
\\
___] (%
10
s)"
,
"ROOT"
));
"[
\\
___] (%s)"
,
"ROOT"
));
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_EXEC
,
...
...
@@ -163,7 +162,6 @@ acpi_ds_scope_stack_push (
/* Push new scope object onto stack */
acpi_ut_push_generic_state
(
&
walk_state
->
scope_info
,
scope_info
);
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -207,7 +205,7 @@ acpi_ds_scope_stack_pop (
walk_state
->
scope_depth
--
;
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"[%.2d] Popped scope [%4.4s] (%
10
s), New scope -> "
,
"[%.2d] Popped scope [%4.4s] (%s), New scope -> "
,
(
u32
)
walk_state
->
scope_depth
,
scope_info
->
scope
.
node
->
name
.
ascii
,
acpi_ut_get_type_name
(
scope_info
->
common
.
value
)));
...
...
@@ -225,7 +223,6 @@ acpi_ds_scope_stack_pop (
}
acpi_ut_delete_generic_state
(
scope_info
);
return_ACPI_STATUS
(
AE_OK
);
}
...
...
drivers/acpi/dispatcher/dswstate.c
View file @
39d7c3e1
...
...
@@ -56,11 +56,12 @@
* FUNCTION: acpi_ds_result_insert
*
* PARAMETERS: Object - Object to push
* Index - Where to insert the object
* walk_state - Current Walk state
*
* RETURN: Status
*
* DESCRIPTION:
Push
an object onto this walk's result stack
* DESCRIPTION:
Insert
an object onto this walk's result stack
*
******************************************************************************/
...
...
@@ -114,6 +115,7 @@ acpi_ds_result_insert (
* FUNCTION: acpi_ds_result_remove
*
* PARAMETERS: Object - Where to return the popped object
* Index - Where to extract the object
* walk_state - Current Walk state
*
* RETURN: Status
...
...
@@ -233,6 +235,7 @@ acpi_ds_result_pop (
return
(
AE_AML_NO_RETURN_VALUE
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ds_result_pop_from_bottom
...
...
@@ -295,7 +298,6 @@ acpi_ds_result_pop_from_bottom (
*
object
,
(
*
object
)
?
acpi_ut_get_object_type_name
(
*
object
)
:
"NULL"
,
state
,
walk_state
));
return
(
AE_OK
);
}
...
...
@@ -358,8 +360,7 @@ acpi_ds_result_push (
*
* FUNCTION: acpi_ds_result_stack_push
*
* PARAMETERS: Object - Object to push
* walk_state - Current Walk state
* PARAMETERS: walk_state - Current Walk state
*
* RETURN: Status
*
...
...
@@ -420,7 +421,6 @@ acpi_ds_result_stack_pop (
return
(
AE_AML_NO_OPERAND
);
}
state
=
acpi_ut_pop_generic_state
(
&
walk_state
->
results
);
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
...
...
@@ -572,6 +572,7 @@ acpi_ds_obj_stack_pop_object (
}
#endif
/*******************************************************************************
*
* FUNCTION: acpi_ds_obj_stack_pop
...
...
@@ -641,6 +642,7 @@ acpi_ds_obj_stack_pop_and_delete (
u32
i
;
union
acpi_operand_object
*
obj_desc
;
ACPI_FUNCTION_NAME
(
"ds_obj_stack_pop_and_delete"
);
...
...
@@ -883,8 +885,15 @@ acpi_ds_create_walk_state (
* FUNCTION: acpi_ds_init_aml_walk
*
* PARAMETERS: walk_state - New state to be initialized
* Op - Current parse op
* method_node - Control method NS node, if any
* aml_start - Start of AML
* aml_length - Length of AML
* Params - Method args, if any
* return_obj_desc - Where to store a return object, if any
* pass_number - 1, 2, or 3
*
* RETURN:
None
* RETURN:
Status
*
* DESCRIPTION: Initialize a walk state for a pass 1 or 2 parse tree walk
*
...
...
@@ -927,9 +936,9 @@ acpi_ds_init_aml_walk (
if
(
method_node
)
{
walk_state
->
parser_state
.
start_node
=
method_node
;
walk_state
->
walk_type
=
ACPI_WALK_METHOD
;
walk_state
->
method_node
=
method_node
;
walk_state
->
method_desc
=
acpi_ns_get_attached_object
(
method_node
);
walk_state
->
walk_type
=
ACPI_WALK_METHOD
;
walk_state
->
method_node
=
method_node
;
walk_state
->
method_desc
=
acpi_ns_get_attached_object
(
method_node
);
/* Push start scope on scope stack and make it current */
...
...
@@ -956,6 +965,7 @@ acpi_ds_init_aml_walk (
while
(
extra_op
&&
!
extra_op
->
common
.
node
)
{
extra_op
=
extra_op
->
common
.
parent
;
}
if
(
!
extra_op
)
{
parser_state
->
start_node
=
NULL
;
}
...
...
@@ -1014,7 +1024,7 @@ acpi_ds_delete_walk_state (
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%p walk still has a scope list
\n
"
,
walk_state
));
}
/* Always must free any linked control states */
/* Always must free any linked control states */
while
(
walk_state
->
control_state
)
{
state
=
walk_state
->
control_state
;
...
...
drivers/acpi/executer/excreate.c
View file @
39d7c3e1
...
...
@@ -286,7 +286,7 @@ acpi_ex_create_region (
ACPI_FUNCTION_TRACE
(
"ex_create_region"
);
/* Get the N
ode from the object stack
*/
/* Get the N
amespace Node
*/
node
=
walk_state
->
op
->
common
.
node
;
...
...
@@ -311,7 +311,6 @@ acpi_ex_create_region (
ACPI_DEBUG_PRINT
((
ACPI_DB_LOAD
,
"Region Type - %s (%X)
\n
"
,
acpi_ut_get_region_name
(
region_space
),
region_space
));
/* Create the region descriptor */
obj_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_REGION
);
...
...
@@ -375,6 +374,7 @@ acpi_ex_create_table_region (
ACPI_FUNCTION_TRACE
(
"ex_create_table_region"
);
/* Get the Node from the object stack */
node
=
walk_state
->
op
->
common
.
node
;
...
...
@@ -392,7 +392,6 @@ acpi_ex_create_table_region (
status
=
acpi_tb_find_table
(
operand
[
1
]
->
string
.
pointer
,
operand
[
2
]
->
string
.
pointer
,
operand
[
3
]
->
string
.
pointer
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -489,7 +488,6 @@ acpi_ex_create_processor (
status
=
acpi_ns_attach_object
((
struct
acpi_namespace_node
*
)
operand
[
0
],
obj_desc
,
ACPI_TYPE_PROCESSOR
);
/* Remove local reference to the object */
acpi_ut_remove_reference
(
obj_desc
);
...
...
@@ -540,7 +538,6 @@ acpi_ex_create_power_resource (
status
=
acpi_ns_attach_object
((
struct
acpi_namespace_node
*
)
operand
[
0
],
obj_desc
,
ACPI_TYPE_POWER
);
/* Remove local reference to the object */
acpi_ut_remove_reference
(
obj_desc
);
...
...
@@ -609,7 +606,6 @@ acpi_ex_create_method (
obj_desc
->
method
.
concurrency
=
(
u8
)
(((
method_flags
&
METHOD_FLAGS_SYNCH_LEVEL
)
>>
4
)
+
1
);
}
else
{
obj_desc
->
method
.
concurrency
=
INFINITE_CONCURRENCY
;
}
...
...
drivers/acpi/executer/exfldio.c
View file @
39d7c3e1
...
...
@@ -139,7 +139,41 @@ acpi_ex_setup_region (
field_datum_byte_offset
,
obj_desc
->
common_field
.
access_byte_width
,
rgn_desc
->
region
.
node
->
name
.
ascii
,
rgn_desc
->
region
.
length
));
return_ACPI_STATUS
(
AE_AML_REGION_LIMIT
);
#ifdef CONFIG_ACPI_RELAXED_AML
{
/*
* Allow access to the field if it is within the region size
* rounded up to a multiple of the access byte width. This
* overcomes "off-by-one" programming errors in the AML often
* found in Toshiba laptops. These errors were allowed by
* the Microsoft ASL compiler.
*/
u32
rounded_length
=
ACPI_ROUND_UP
(
rgn_desc
->
region
.
length
,
obj_desc
->
common_field
.
access_byte_width
);
if
(
rounded_length
<
(
obj_desc
->
common_field
.
base_byte_offset
+
field_datum_byte_offset
+
obj_desc
->
common_field
.
access_byte_width
))
{
return_ACPI_STATUS
(
AE_AML_REGION_LIMIT
);
}
else
{
static
int
warn_once
=
1
;
if
(
warn_once
)
{
// Could also associate a flag with each field, and
// warn once for each field.
ACPI_REPORT_WARNING
((
"The ACPI AML in your computer contains errors, "
"please nag the manufacturer to correct it.
\n
"
));
ACPI_REPORT_WARNING
((
"Allowing relaxed access to fields; "
"turn on CONFIG_ACPI_DEBUG for details.
\n
"
));
warn_once
=
0
;
}
return_ACPI_STATUS
(
AE_OK
);
}
}
#else
return_ACPI_STATUS
(
AE_AML_REGION_LIMIT
);
#endif
}
return_ACPI_STATUS
(
AE_OK
);
...
...
drivers/acpi/namespace/nsdump.c
View file @
39d7c3e1
...
...
@@ -234,7 +234,7 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_DEVICE
:
acpi_os_printf
(
"Notify
object: %p
"
,
obj_desc
);
acpi_os_printf
(
"Notify
Object: %p
\n
"
,
obj_desc
);
break
;
...
...
@@ -371,7 +371,7 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_LOCAL_BANK_FIELD
:
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
acpi_os_printf
(
"
Off %.2X Len %.2X Acc %.2hd
\n
"
,
acpi_os_printf
(
"Off %.2X Len %.2X Acc %.2hd
\n
"
,
(
obj_desc
->
common_field
.
base_byte_offset
*
8
)
+
obj_desc
->
common_field
.
start_field_bit_offset
,
obj_desc
->
common_field
.
bit_length
,
...
...
drivers/acpi/namespace/nssearch.c
View file @
39d7c3e1
...
...
@@ -96,7 +96,7 @@ acpi_ns_search_node (
scope_name
=
acpi_ns_get_external_pathname
(
node
);
if
(
scope_name
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching %s
[%p] For %4.4s
(%s)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching %s
(%p) For [%4.4s]
(%s)
\n
"
,
scope_name
,
node
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
type
)));
ACPI_MEM_FREE
(
scope_name
);
...
...
@@ -117,9 +117,9 @@ acpi_ns_search_node (
* Found matching entry.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Name
%4.4s Type [%s]
found in scope [%4.4s] %p
\n
"
,
"Name
[%4.4s] (%s) %p
found in scope [%4.4s] %p
\n
"
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
next_node
->
type
),
next_node
->
name
.
ascii
,
next_
node
));
next_node
,
node
->
name
.
ascii
,
node
));
*
return_node
=
next_node
;
return_ACPI_STATUS
(
AE_OK
);
...
...
@@ -143,7 +143,7 @@ acpi_ns_search_node (
/* Searched entire namespace level, not found */
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Name
%4.4s Type [%s]
not found in search in scope [%4.4s] %p first child %p
\n
"
,
"Name
[%4.4s] (%s)
not found in search in scope [%4.4s] %p first child %p
\n
"
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
type
),
node
->
name
.
ascii
,
node
,
node
->
child
));
...
...
drivers/acpi/namespace/nsutils.c
View file @
39d7c3e1
...
...
@@ -175,6 +175,11 @@ acpi_ns_print_node_pathname (
acpi_status
status
;
if
(
!
node
)
{
acpi_os_printf
(
"[NULL NAME]"
);
return
;
}
/* Convert handle to a full pathname and print it (with supplied message) */
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
...
...
@@ -470,11 +475,11 @@ acpi_ns_build_internal_name (
*
result
=
0
;
if
(
info
->
fully_qualified
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
r
eturning [%p] (abs)
\"\\
%s
\"\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
R
eturning [%p] (abs)
\"\\
%s
\"\n
"
,
internal_name
,
internal_name
));
}
else
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
r
eturning [%p] (rel)
\"
%s
\"\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
R
eturning [%p] (rel)
\"
%s
\"\n
"
,
internal_name
,
internal_name
));
}
...
...
drivers/acpi/parser/psparse.c
View file @
39d7c3e1
...
...
@@ -437,7 +437,6 @@ acpi_ps_parse_loop (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
parser_state
=
&
walk_state
->
parser_state
;
walk_state
->
arg_types
=
0
;
...
...
@@ -705,10 +704,9 @@ acpi_ps_parse_loop (
walk_state
->
arg_types
=
0
;
break
;
default:
/* Op is not a constant or string, append each argument */
/* Op is not a constant or string, append each argument
to the Op
*/
while
(
GET_CURRENT_ARG_TYPE
(
walk_state
->
arg_types
)
&&
!
walk_state
->
arg_count
)
{
...
...
@@ -727,23 +725,23 @@ acpi_ps_parse_loop (
INCREMENT_ARG_LIST
(
walk_state
->
arg_types
);
}
/* Special processing for certain opcodes */
switch
(
op
->
common
.
aml_opcode
)
{
case
AML_METHOD_OP
:
/* For a method, save the length and address of the body */
/*
* Skip parsing of control method
or opregion body,
* Skip parsing of control method
* because we don't have enough info in the first pass
* to parse them correctly.
* to parse it correctly.
*
* Save the length and address of the body
*/
op
->
named
.
data
=
parser_state
->
aml
;
op
->
named
.
length
=
(
u32
)
(
parser_state
->
pkg_end
-
parser_state
->
aml
);
/*
* Skip body of method. For op_regions, we must continue
* parsing because the opregion is not a standalone
* package (We don't know where the end is).
*/
/* Skip body of method */
parser_state
->
aml
=
parser_state
->
pkg_end
;
walk_state
->
arg_count
=
0
;
break
;
...
...
@@ -756,15 +754,15 @@ acpi_ps_parse_loop (
(
op
->
common
.
parent
->
common
.
aml_opcode
==
AML_NAME_OP
)
&&
(
walk_state
->
descending_callback
!=
acpi_ds_exec_begin_op
))
{
/*
* Skip parsing of
* Skip parsing of
Buffers and Packages
* because we don't have enough info in the first pass
* to parse them correctly.
*/
op
->
named
.
data
=
aml_op_start
;
op
->
named
.
length
=
(
u32
)
(
parser_state
->
pkg_end
-
aml_op_start
);
/*
* Skip body
*/
/* Skip body */
parser_state
->
aml
=
parser_state
->
pkg_end
;
walk_state
->
arg_count
=
0
;
}
...
...
@@ -778,6 +776,7 @@ acpi_ps_parse_loop (
break
;
default:
/* No action for all other opcodes */
break
;
}
...
...
include/acpi/acconfig.h
View file @
39d7c3e1
...
...
@@ -64,7 +64,7 @@
/* Version string */
#define ACPI_CA_VERSION 0x2003091
6
#define ACPI_CA_VERSION 0x2003091
8
/* Maximum objects in the various object caches */
...
...
include/acpi/acdisasm.h
View file @
39d7c3e1
...
...
@@ -152,10 +152,6 @@ void
acpi_dm_decode_internal_object
(
union
acpi_operand_object
*
obj_desc
);
void
acpi_dm_decode_node
(
struct
acpi_namespace_node
*
node
);
u32
acpi_dm_block_type
(
union
acpi_parse_object
*
op
);
...
...
include/acpi/acstruct.h
View file @
39d7c3e1
...
...
@@ -91,11 +91,12 @@ struct acpi_walk_state
struct
acpi_namespace_node
arguments
[
ACPI_METHOD_NUM_ARGS
];
/* Control method arguments */
union
acpi_operand_object
**
caller_return_desc
;
union
acpi_generic_state
*
control_state
;
/* List of control states (nested IFs) */
struct
acpi_namespace_node
*
deferred_node
;
/* Used when executing deferred opcodes */
struct
acpi_namespace_node
local_variables
[
ACPI_METHOD_NUM_LOCALS
];
/* Control method locals */
struct
acpi_namespace_node
*
method_call_node
;
/* Called method Node*/
union
acpi_parse_object
*
method_call_op
;
/* method_call Op if running a method */
union
acpi_operand_object
*
method_desc
;
/* Method descriptor if running a method */
struct
acpi_namespace_node
*
method_node
;
/* Method
Node if running a method
*/
struct
acpi_namespace_node
*
method_node
;
/* Method
node if running a method.
*/
union
acpi_parse_object
*
op
;
/* Current parser op */
union
acpi_operand_object
*
operands
[
ACPI_OBJ_NUM_OPERANDS
+
1
];
/* Operands passed to the interpreter (+1 for NULL terminator) */
const
struct
acpi_opcode_info
*
op_info
;
/* Info on current opcode */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment