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
c232f2a1
Commit
c232f2a1
authored
Oct 22, 2004
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/src/26-stable-acpica
into intel.com:/home/lenb/src/26-stable-dev
parents
7ad21148
2f294db8
Changes
52
Show whitespace changes
Inline
Side-by-side
Showing
52 changed files
with
1440 additions
and
1059 deletions
+1440
-1059
drivers/acpi/dispatcher/dsmthdat.c
drivers/acpi/dispatcher/dsmthdat.c
+2
-2
drivers/acpi/dispatcher/dsutils.c
drivers/acpi/dispatcher/dsutils.c
+1
-1
drivers/acpi/dispatcher/dswexec.c
drivers/acpi/dispatcher/dswexec.c
+28
-13
drivers/acpi/events/evgpe.c
drivers/acpi/events/evgpe.c
+2
-7
drivers/acpi/events/evgpeblk.c
drivers/acpi/events/evgpeblk.c
+1
-3
drivers/acpi/events/evxface.c
drivers/acpi/events/evxface.c
+45
-0
drivers/acpi/executer/exconvrt.c
drivers/acpi/executer/exconvrt.c
+168
-191
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exdump.c
+89
-84
drivers/acpi/executer/exfldio.c
drivers/acpi/executer/exfldio.c
+1
-1
drivers/acpi/executer/exmisc.c
drivers/acpi/executer/exmisc.c
+295
-172
drivers/acpi/executer/exoparg1.c
drivers/acpi/executer/exoparg1.c
+144
-40
drivers/acpi/executer/exoparg2.c
drivers/acpi/executer/exoparg2.c
+49
-91
drivers/acpi/executer/exregion.c
drivers/acpi/executer/exregion.c
+1
-1
drivers/acpi/executer/exresop.c
drivers/acpi/executer/exresop.c
+9
-7
drivers/acpi/executer/exstore.c
drivers/acpi/executer/exstore.c
+26
-11
drivers/acpi/executer/exsystem.c
drivers/acpi/executer/exsystem.c
+2
-3
drivers/acpi/executer/exutils.c
drivers/acpi/executer/exutils.c
+8
-10
drivers/acpi/hardware/hwregs.c
drivers/acpi/hardware/hwregs.c
+24
-10
drivers/acpi/hardware/hwtimer.c
drivers/acpi/hardware/hwtimer.c
+8
-11
drivers/acpi/namespace/nsaccess.c
drivers/acpi/namespace/nsaccess.c
+9
-5
drivers/acpi/namespace/nsdump.c
drivers/acpi/namespace/nsdump.c
+32
-29
drivers/acpi/namespace/nsdumpdv.c
drivers/acpi/namespace/nsdumpdv.c
+6
-5
drivers/acpi/namespace/nseval.c
drivers/acpi/namespace/nseval.c
+37
-55
drivers/acpi/namespace/nsinit.c
drivers/acpi/namespace/nsinit.c
+14
-13
drivers/acpi/namespace/nsload.c
drivers/acpi/namespace/nsload.c
+6
-5
drivers/acpi/namespace/nsnames.c
drivers/acpi/namespace/nsnames.c
+7
-2
drivers/acpi/namespace/nssearch.c
drivers/acpi/namespace/nssearch.c
+26
-23
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nsutils.c
+27
-26
drivers/acpi/osl.c
drivers/acpi/osl.c
+25
-2
drivers/acpi/parser/psopcode.c
drivers/acpi/parser/psopcode.c
+15
-8
drivers/acpi/parser/psutils.c
drivers/acpi/parser/psutils.c
+10
-15
drivers/acpi/resources/rscalc.c
drivers/acpi/resources/rscalc.c
+47
-65
drivers/acpi/tables/tbget.c
drivers/acpi/tables/tbget.c
+3
-0
drivers/acpi/tables/tbxfroot.c
drivers/acpi/tables/tbxfroot.c
+22
-5
drivers/acpi/utilities/utalloc.c
drivers/acpi/utilities/utalloc.c
+11
-9
drivers/acpi/utilities/utdelete.c
drivers/acpi/utilities/utdelete.c
+7
-2
drivers/acpi/utilities/utglobal.c
drivers/acpi/utilities/utglobal.c
+1
-0
drivers/acpi/utilities/utmath.c
drivers/acpi/utilities/utmath.c
+22
-21
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmisc.c
+41
-61
drivers/acpi/utilities/utobject.c
drivers/acpi/utilities/utobject.c
+57
-3
include/acpi/acconfig.h
include/acpi/acconfig.h
+1
-1
include/acpi/acglobal.h
include/acpi/acglobal.h
+1
-0
include/acpi/acinterp.h
include/acpi/acinterp.h
+27
-11
include/acpi/aclocal.h
include/acpi/aclocal.h
+1
-1
include/acpi/acobject.h
include/acpi/acobject.h
+4
-1
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+6
-3
include/acpi/acpixf.h
include/acpi/acpixf.h
+9
-0
include/acpi/actypes.h
include/acpi/actypes.h
+15
-2
include/acpi/acutils.h
include/acpi/acutils.h
+17
-3
include/acpi/amlcode.h
include/acpi/amlcode.h
+27
-23
include/acpi/amlresrc.h
include/acpi/amlresrc.h
+2
-2
include/acpi/platform/acenv.h
include/acpi/platform/acenv.h
+2
-0
No files found.
drivers/acpi/dispatcher/dsmthdat.c
View file @
c232f2a1
...
@@ -312,7 +312,7 @@ acpi_ds_method_data_set_value (
...
@@ -312,7 +312,7 @@ acpi_ds_method_data_set_value (
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"
obj %p op %X, ref count =
%d [%s]
\n
"
,
object
,
"
new_obj %p Opcode %X, Refs=
%d [%s]
\n
"
,
object
,
opcode
,
object
->
common
.
reference_count
,
opcode
,
object
->
common
.
reference_count
,
acpi_ut_get_type_name
(
object
->
common
.
type
)));
acpi_ut_get_type_name
(
object
->
common
.
type
)));
...
@@ -572,7 +572,7 @@ acpi_ds_store_object_to_local (
...
@@ -572,7 +572,7 @@ acpi_ds_store_object_to_local (
ACPI_FUNCTION_TRACE
(
"ds_store_object_to_local"
);
ACPI_FUNCTION_TRACE
(
"ds_store_object_to_local"
);
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Opcode=%
d Id
x=%d Obj=%p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Opcode=%
X Inde
x=%d Obj=%p
\n
"
,
opcode
,
index
,
obj_desc
));
opcode
,
index
,
obj_desc
));
/* Parameter validation */
/* Parameter validation */
...
...
drivers/acpi/dispatcher/dsutils.c
View file @
c232f2a1
...
@@ -333,7 +333,7 @@ acpi_ds_clear_operands (
...
@@ -333,7 +333,7 @@ acpi_ds_clear_operands (
u32
i
;
u32
i
;
ACPI_FUNCTION_TRACE_PTR
(
"
acpi_
ds_clear_operands"
,
walk_state
);
ACPI_FUNCTION_TRACE_PTR
(
"ds_clear_operands"
,
walk_state
);
/*
/*
...
...
drivers/acpi/dispatcher/dswexec.c
View file @
c232f2a1
...
@@ -60,6 +60,7 @@
...
@@ -60,6 +60,7 @@
* Dispatch table for opcode classes
* Dispatch table for opcode classes
*/
*/
static
ACPI_EXECUTE_OP
acpi_gbl_op_type_dispatch
[]
=
{
static
ACPI_EXECUTE_OP
acpi_gbl_op_type_dispatch
[]
=
{
acpi_ex_opcode_0A_0T_1R
,
acpi_ex_opcode_1A_0T_0R
,
acpi_ex_opcode_1A_0T_0R
,
acpi_ex_opcode_1A_0T_1R
,
acpi_ex_opcode_1A_0T_1R
,
acpi_ex_opcode_1A_1T_0R
,
acpi_ex_opcode_1A_1T_0R
,
...
@@ -413,7 +414,7 @@ acpi_ds_exec_end_op (
...
@@ -413,7 +414,7 @@ acpi_ds_exec_end_op (
* routine. There is one routine per opcode "type" based upon the
* routine. There is one routine per opcode "type" based upon the
* number of opcode arguments and return type.
* number of opcode arguments and return type.
*/
*/
status
=
acpi_gbl_op_type_dispatch
[
op_type
]
(
walk_state
);
status
=
acpi_gbl_op_type_dispatch
[
op_type
]
(
walk_state
);
}
}
else
{
else
{
/*
/*
...
@@ -639,7 +640,8 @@ acpi_ds_exec_end_op (
...
@@ -639,7 +640,8 @@ acpi_ds_exec_end_op (
* conditional predicate
* conditional predicate
*/
*/
if
((
walk_state
->
control_state
)
&&
if
((
ACPI_SUCCESS
(
status
))
&&
(
walk_state
->
control_state
)
&&
(
walk_state
->
control_state
->
common
.
state
==
(
walk_state
->
control_state
->
common
.
state
==
ACPI_CONTROL_PREDICATE_EXECUTING
)
&&
ACPI_CONTROL_PREDICATE_EXECUTING
)
&&
(
walk_state
->
control_state
->
control
.
predicate_op
==
op
))
{
(
walk_state
->
control_state
->
control
.
predicate_op
==
op
))
{
...
@@ -649,6 +651,19 @@ acpi_ds_exec_end_op (
...
@@ -649,6 +651,19 @@ acpi_ds_exec_end_op (
cleanup:
cleanup:
/* Invoke exception handler on error */
if
(
ACPI_FAILURE
(
status
)
&&
acpi_gbl_exception_handler
&&
!
(
status
&
AE_CODE_CONTROL
))
{
acpi_ex_exit_interpreter
();
status
=
acpi_gbl_exception_handler
(
status
,
walk_state
->
method_node
->
name
.
integer
,
walk_state
->
opcode
,
walk_state
->
aml_offset
,
NULL
);
acpi_ex_enter_interpreter
();
}
if
(
walk_state
->
result_obj
)
{
if
(
walk_state
->
result_obj
)
{
/* Break to debugger to display result */
/* Break to debugger to display result */
...
...
drivers/acpi/events/evgpe.c
View file @
c232f2a1
...
@@ -434,13 +434,8 @@ acpi_ev_gpe_detect (
...
@@ -434,13 +434,8 @@ acpi_ev_gpe_detect (
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INTERRUPTS
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INTERRUPTS
,
"GPE pair: Status %8.8X%8.8X = %02X, Enable %8.8X%8.8X = %02X
\n
"
,
"Read GPE Register at GPE%X: Status=%02X, Enable=%02X
\n
"
,
ACPI_FORMAT_UINT64
(
gpe_register_info
->
base_gpe_number
,
status_reg
,
enable_reg
));
gpe_register_info
->
status_address
.
address
),
status_reg
,
ACPI_FORMAT_UINT64
(
gpe_register_info
->
enable_address
.
address
),
enable_reg
));
/* First check if there is anything active at all in this register */
/* First check if there is anything active at all in this register */
...
...
drivers/acpi/events/evgpeblk.c
View file @
c232f2a1
...
@@ -970,16 +970,14 @@ acpi_ev_create_gpe_block (
...
@@ -970,16 +970,14 @@ acpi_ev_create_gpe_block (
/* Dump info about this GPE block */
/* Dump info about this GPE block */
ACPI_DEBUG_PRINT
((
ACPI_DB_INIT
,
ACPI_DEBUG_PRINT
((
ACPI_DB_INIT
,
"GPE %02X to %02X [%4.4s] %u regs
at %8.8X%8.8X
on int 0x%X
\n
"
,
"GPE %02X to %02X [%4.4s] %u regs on int 0x%X
\n
"
,
(
u32
)
gpe_block
->
block_base_number
,
(
u32
)
gpe_block
->
block_base_number
,
(
u32
)
(
gpe_block
->
block_base_number
+
(
u32
)
(
gpe_block
->
block_base_number
+
((
gpe_block
->
register_count
*
ACPI_GPE_REGISTER_WIDTH
)
-
1
)),
((
gpe_block
->
register_count
*
ACPI_GPE_REGISTER_WIDTH
)
-
1
)),
gpe_device
->
name
.
ascii
,
gpe_device
->
name
.
ascii
,
gpe_block
->
register_count
,
gpe_block
->
register_count
,
ACPI_FORMAT_UINT64
(
gpe_block
->
block_address
.
address
),
interrupt_level
));
interrupt_level
));
/* Enable all valid GPEs found above */
/* Enable all valid GPEs found above */
status
=
acpi_hw_enable_runtime_gpe_block
(
NULL
,
gpe_block
);
status
=
acpi_hw_enable_runtime_gpe_block
(
NULL
,
gpe_block
);
...
...
drivers/acpi/events/evxface.c
View file @
c232f2a1
...
@@ -51,6 +51,51 @@
...
@@ -51,6 +51,51 @@
ACPI_MODULE_NAME
(
"evxface"
)
ACPI_MODULE_NAME
(
"evxface"
)
/*******************************************************************************
*
* FUNCTION: acpi_install_exception_handler
*
* PARAMETERS: Handler - Pointer to the handler function for the
* event
*
* RETURN: Status
*
* DESCRIPTION: Saves the pointer to the handler function
*
******************************************************************************/
acpi_status
acpi_install_exception_handler
(
acpi_exception_handler
handler
)
{
acpi_status
status
;
ACPI_FUNCTION_TRACE
(
"acpi_install_exception_handler"
);
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_EVENTS
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* Don't allow two handlers. */
if
(
acpi_gbl_exception_handler
)
{
status
=
AE_ALREADY_EXISTS
;
goto
cleanup
;
}
/* Install the handler */
acpi_gbl_exception_handler
=
handler
;
cleanup:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_EVENTS
);
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
/*******************************************************************************
*
*
* FUNCTION: acpi_install_fixed_event_handler
* FUNCTION: acpi_install_fixed_event_handler
...
...
drivers/acpi/executer/exconvrt.c
View file @
c232f2a1
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
* PARAMETERS: obj_desc - Object to be converted. Must be an
* PARAMETERS: obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* Integer, Buffer, or String
* result_desc - Where the new Integer object is returned
* result_desc - Where the new Integer object is returned
*
walk_state - Current method state
*
Flags - Used for string conversion
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -70,13 +70,13 @@ acpi_status
...
@@ -70,13 +70,13 @@ acpi_status
acpi_ex_convert_to_integer
(
acpi_ex_convert_to_integer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
)
u32
flags
)
{
{
u32
i
;
union
acpi_operand_object
*
return_desc
;
union
acpi_operand_object
*
ret_desc
;
u32
count
;
u8
*
pointer
;
u8
*
pointer
;
acpi_integer
result
;
acpi_integer
result
;
u32
i
;
u32
count
;
acpi_status
status
;
acpi_status
status
;
...
@@ -85,15 +85,17 @@ acpi_ex_convert_to_integer (
...
@@ -85,15 +85,17 @@ acpi_ex_convert_to_integer (
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
case
ACPI_TYPE_INTEGER
:
case
ACPI_TYPE_INTEGER
:
/* No conversion necessary */
*
result_desc
=
obj_desc
;
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_STRING
:
case
ACPI_TYPE_STRING
:
pointer
=
(
u8
*
)
obj_desc
->
string
.
pointer
;
count
=
obj_desc
->
string
.
length
;
break
;
case
ACPI_TYPE_BUFFER
:
/* Note: Takes advantage of common buffer/string fields */
pointer
=
obj_desc
->
buffer
.
pointer
;
pointer
=
obj_desc
->
buffer
.
pointer
;
count
=
obj_desc
->
buffer
.
length
;
count
=
obj_desc
->
buffer
.
length
;
break
;
break
;
...
@@ -126,10 +128,12 @@ acpi_ex_convert_to_integer (
...
@@ -126,10 +128,12 @@ acpi_ex_convert_to_integer (
case
ACPI_TYPE_STRING
:
case
ACPI_TYPE_STRING
:
/*
/*
* Convert string to an integer
* Convert string to an integer - for most cases, the string must be
* String must be hexadecimal as per the ACPI specification
* hexadecimal as per the ACPI specification. The only exception (as
* of ACPI 3.0) is that the to_integer() operator allows both decimal
* and hexadecimal strings (hex prefixed with "0x").
*/
*/
status
=
acpi_ut_strtoul64
((
char
*
)
pointer
,
16
,
&
result
);
status
=
acpi_ut_strtoul64
((
char
*
)
pointer
,
flags
,
&
result
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
...
@@ -139,8 +143,8 @@ acpi_ex_convert_to_integer (
...
@@ -139,8 +143,8 @@ acpi_ex_convert_to_integer (
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
/*
/*
*
Buffer conversion - we simply grab enough raw data from the
*
Convert buffer to an integer - we simply grab enough raw data
* buffer to fill an integer
*
from the
buffer to fill an integer
*/
*/
for
(
i
=
0
;
i
<
count
;
i
++
)
{
for
(
i
=
0
;
i
<
count
;
i
++
)
{
/*
/*
...
@@ -161,27 +165,15 @@ acpi_ex_convert_to_integer (
...
@@ -161,27 +165,15 @@ acpi_ex_convert_to_integer (
/*
/*
* Create a new integer
* Create a new integer
*/
*/
ret_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
ret
urn
_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
ret_desc
)
{
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
}
/* Save the Result */
/* Save the Result */
ret_desc
->
integer
.
value
=
result
;
return_desc
->
integer
.
value
=
result
;
*
result_desc
=
return_desc
;
/*
* If we are about to overwrite the original object on the operand stack,
* we must remove a reference on the original object because we are
* essentially removing it from the stack.
*/
if
(
*
result_desc
==
obj_desc
)
{
if
(
walk_state
->
opcode
!=
AML_STORE_OP
)
{
acpi_ut_remove_reference
(
obj_desc
);
}
}
*
result_desc
=
ret_desc
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
@@ -193,7 +185,6 @@ acpi_ex_convert_to_integer (
...
@@ -193,7 +185,6 @@ acpi_ex_convert_to_integer (
* PARAMETERS: obj_desc - Object to be converted. Must be an
* PARAMETERS: obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* Integer, Buffer, or String
* result_desc - Where the new buffer object is returned
* result_desc - Where the new buffer object is returned
* walk_state - Current method state
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -204,11 +195,9 @@ acpi_ex_convert_to_integer (
...
@@ -204,11 +195,9 @@ acpi_ex_convert_to_integer (
acpi_status
acpi_status
acpi_ex_convert_to_buffer
(
acpi_ex_convert_to_buffer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
)
struct
acpi_walk_state
*
walk_state
)
{
{
union
acpi_operand_object
*
ret_desc
;
union
acpi_operand_object
*
return_desc
;
u32
i
;
u8
*
new_buf
;
u8
*
new_buf
;
...
@@ -230,17 +219,17 @@ acpi_ex_convert_to_buffer (
...
@@ -230,17 +219,17 @@ acpi_ex_convert_to_buffer (
* Create a new Buffer object.
* Create a new Buffer object.
* Need enough space for one integer
* Need enough space for one integer
*/
*/
ret_desc
=
acpi_ut_create_buffer_object
(
acpi_gbl_integer_byte_width
);
ret
urn
_desc
=
acpi_ut_create_buffer_object
(
acpi_gbl_integer_byte_width
);
if
(
!
ret_desc
)
{
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
}
/* Copy the integer to the buffer */
/* Copy the integer to the buffer
, LSB first
*/
new_buf
=
ret_desc
->
buffer
.
pointer
;
new_buf
=
ret
urn
_desc
->
buffer
.
pointer
;
for
(
i
=
0
;
i
<
acpi_gbl_integer_byte_width
;
i
++
)
{
ACPI_MEMCPY
(
new_buf
,
new_buf
[
i
]
=
(
u8
)
(
obj_desc
->
integer
.
value
>>
(
i
*
8
));
&
obj_desc
->
integer
.
value
,
}
acpi_gbl_integer_byte_width
);
break
;
break
;
...
@@ -250,14 +239,14 @@ acpi_ex_convert_to_buffer (
...
@@ -250,14 +239,14 @@ acpi_ex_convert_to_buffer (
* Create a new Buffer object
* Create a new Buffer object
* Size will be the string length
* Size will be the string length
*/
*/
ret_desc
=
acpi_ut_create_buffer_object
((
acpi_size
)
obj_desc
->
string
.
length
);
ret
urn
_desc
=
acpi_ut_create_buffer_object
((
acpi_size
)
obj_desc
->
string
.
length
);
if
(
!
ret_desc
)
{
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
}
/* Copy the string to the buffer */
/* Copy the string to the buffer */
new_buf
=
ret_desc
->
buffer
.
pointer
;
new_buf
=
ret
urn
_desc
->
buffer
.
pointer
;
ACPI_STRNCPY
((
char
*
)
new_buf
,
(
char
*
)
obj_desc
->
string
.
pointer
,
ACPI_STRNCPY
((
char
*
)
new_buf
,
(
char
*
)
obj_desc
->
string
.
pointer
,
obj_desc
->
string
.
length
);
obj_desc
->
string
.
length
);
break
;
break
;
...
@@ -269,32 +258,20 @@ acpi_ex_convert_to_buffer (
...
@@ -269,32 +258,20 @@ acpi_ex_convert_to_buffer (
/* Mark buffer initialized */
/* Mark buffer initialized */
ret_desc
->
common
.
flags
|=
AOPOBJ_DATA_VALID
;
return_desc
->
common
.
flags
|=
AOPOBJ_DATA_VALID
;
*
result_desc
=
return_desc
;
/*
* If we are about to overwrite the original object on the operand stack,
* we must remove a reference on the original object because we are
* essentially removing it from the stack.
*/
if
(
*
result_desc
==
obj_desc
)
{
if
(
walk_state
->
opcode
!=
AML_STORE_OP
)
{
acpi_ut_remove_reference
(
obj_desc
);
}
}
*
result_desc
=
ret_desc
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
/*******************************************************************************
/*******************************************************************************
*
*
* FUNCTION: acpi_ex_convert_ascii
* FUNCTION: acpi_ex_convert_
to_
ascii
*
*
* PARAMETERS: Integer - Value to be converted
* PARAMETERS: Integer - Value to be converted
* Base -
10 or 16
* Base -
ACPI_STRING_DECIMAL or ACPI_STRING_HEX
* String - Where the string is returned
* String - Where the string is returned
* data_width - Size of data item to be converted
* data_width - Size of data item to be converted
, in bytes
*
*
* RETURN: Actual string length
* RETURN: Actual string length
*
*
...
@@ -305,79 +282,81 @@ acpi_ex_convert_to_buffer (
...
@@ -305,79 +282,81 @@ acpi_ex_convert_to_buffer (
u32
u32
acpi_ex_convert_to_ascii
(
acpi_ex_convert_to_ascii
(
acpi_integer
integer
,
acpi_integer
integer
,
u
32
base
,
u
16
base
,
u8
*
string
,
u8
*
string
,
u8
data_width
)
u8
data_width
)
{
{
u32
i
;
u32
j
;
u32
k
=
0
;
char
hex_digit
;
acpi_integer
digit
;
acpi_integer
digit
;
acpi_native_uint
i
;
acpi_native_uint
j
;
acpi_native_uint
k
=
0
;
acpi_native_uint
hex_length
;
acpi_native_uint
decimal_length
;
u32
remainder
;
u32
remainder
;
u32
length
;
u8
supress_zeros
;
u8
leading_zero
;
ACPI_FUNCTION_ENTRY
();
ACPI_FUNCTION_ENTRY
();
if
(
data_width
<
sizeof
(
acpi_integer
))
{
leading_zero
=
FALSE
;
length
=
data_width
;
}
else
{
leading_zero
=
TRUE
;
length
=
sizeof
(
acpi_integer
);
}
switch
(
base
)
{
switch
(
base
)
{
case
10
:
case
10
:
/* Setup max length for the decimal number */
switch
(
data_width
)
{
case
1
:
decimal_length
=
ACPI_MAX8_DECIMAL_DIGITS
;
break
;
case
4
:
decimal_length
=
ACPI_MAX32_DECIMAL_DIGITS
;
break
;
case
8
:
default:
decimal_length
=
ACPI_MAX64_DECIMAL_DIGITS
;
break
;
}
supress_zeros
=
TRUE
;
/* No leading zeros */
remainder
=
0
;
remainder
=
0
;
for
(
i
=
ACPI_MAX_DECIMAL_DIGITS
;
i
>
0
;
i
--
)
{
for
(
i
=
decimal_length
;
i
>
0
;
i
--
)
{
/* Divide by nth factor of 10 */
/* Divide by nth factor of 10 */
digit
=
integer
;
digit
=
integer
;
for
(
j
=
0
;
j
<
i
;
j
++
)
{
for
(
j
=
0
;
j
<
i
;
j
++
)
{
(
void
)
acpi_ut_short_divide
(
&
digit
,
10
,
&
digit
,
&
remainder
);
(
void
)
acpi_ut_short_divide
(
digit
,
10
,
&
digit
,
&
remainder
);
}
}
/*
Create the decimal digit
*/
/*
Handle leading zeros
*/
if
(
remainder
!=
0
)
{
if
(
remainder
!=
0
)
{
leading_zero
=
FALSE
;
supress_zeros
=
FALSE
;
}
}
if
(
!
leading_zero
)
{
if
(
!
supress_zeros
)
{
string
[
k
]
=
(
u8
)
(
ACPI_ASCII_ZERO
+
remainder
);
string
[
k
]
=
(
u8
)
(
ACPI_ASCII_ZERO
+
remainder
);
k
++
;
k
++
;
}
}
}
}
break
;
break
;
case
16
:
case
16
:
/* Copy the integer to the buffer */
hex_length
=
ACPI_MUL_2
(
data_width
);
/* 2 ascii hex chars per data byte */
for
(
i
=
0
,
j
=
((
length
*
2
)
-
1
);
i
<
(
length
*
2
);
i
++
,
j
--
)
{
hex_digit
=
acpi_ut_hex_to_ascii_char
(
integer
,
(
j
*
4
));
for
(
i
=
0
,
j
=
(
hex_length
-
1
);
i
<
hex_length
;
i
++
,
j
--
)
{
if
(
hex_digit
!=
ACPI_ASCII_ZERO
)
{
/* Get one hex digit, most significant digits first */
leading_zero
=
FALSE
;
}
if
(
!
leading_zero
)
{
string
[
k
]
=
(
u8
)
acpi_ut_hex_to_ascii_char
(
integer
,
ACPI_MUL_4
(
j
));
string
[
k
]
=
(
u8
)
hex_digit
;
k
++
;
k
++
;
}
}
}
break
;
break
;
default:
default:
break
;
return
(
0
)
;
}
}
/*
/*
...
@@ -392,7 +371,7 @@ acpi_ex_convert_to_ascii (
...
@@ -392,7 +371,7 @@ acpi_ex_convert_to_ascii (
}
}
string
[
k
]
=
0
;
string
[
k
]
=
0
;
return
(
k
);
return
(
(
u32
)
k
);
}
}
...
@@ -403,9 +382,7 @@ acpi_ex_convert_to_ascii (
...
@@ -403,9 +382,7 @@ acpi_ex_convert_to_ascii (
* PARAMETERS: obj_desc - Object to be converted. Must be an
* PARAMETERS: obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* Integer, Buffer, or String
* result_desc - Where the string object is returned
* result_desc - Where the string object is returned
* Base - 10 or 16
* Type - String flags (base and conversion type)
* max_length - Max length of the returned string
* walk_state - Current method state
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -417,15 +394,14 @@ acpi_status
...
@@ -417,15 +394,14 @@ acpi_status
acpi_ex_convert_to_string
(
acpi_ex_convert_to_string
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
,
u32
base
,
u32
type
)
u32
max_length
,
struct
acpi_walk_state
*
walk_state
)
{
{
union
acpi_operand_object
*
ret_desc
;
union
acpi_operand_object
*
ret
urn
_desc
;
u8
*
new_buf
;
u8
*
new_buf
;
u
8
*
pointer
;
u
32
string_length
=
0
;
u
32
string_length
;
u
16
base
=
16
;
u32
i
;
u32
i
;
u8
separator
=
','
;
ACPI_FUNCTION_TRACE_PTR
(
"ex_convert_to_string"
,
obj_desc
);
ACPI_FUNCTION_TRACE_PTR
(
"ex_convert_to_string"
,
obj_desc
);
...
@@ -434,130 +410,129 @@ acpi_ex_convert_to_string (
...
@@ -434,130 +410,129 @@ acpi_ex_convert_to_string (
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
case
ACPI_TYPE_STRING
:
case
ACPI_TYPE_STRING
:
if
(
max_length
>=
obj_desc
->
string
.
length
)
{
/* No conversion necessary */
*
result_desc
=
obj_desc
;
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
else
{
/* Must copy the string first and then truncate it */
return_ACPI_STATUS
(
AE_NOT_IMPLEMENTED
);
}
case
ACPI_TYPE_INTEGER
:
case
ACPI_TYPE_INTEGER
:
string_length
=
acpi_gbl_integer_byte_width
*
2
;
switch
(
type
)
{
if
(
base
==
10
)
{
case
ACPI_EXPLICIT_CONVERT_DECIMAL
:
/* Make room for maximum decimal number */
string_length
=
ACPI_MAX_DECIMAL_DIGITS
;
string_length
=
ACPI_MAX_DECIMAL_DIGITS
;
base
=
10
;
break
;
default:
/* Two hex string characters for each integer byte */
string_length
=
ACPI_MUL_2
(
acpi_gbl_integer_byte_width
);
break
;
}
}
/*
/*
* Create a new String
* Create a new String
* Need enough space for one ASCII integer (plus null terminator)
*/
*/
ret
_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
ret
urn_desc
=
acpi_ut_create_string_object
((
acpi_size
)
string_length
);
if
(
!
ret_desc
)
{
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
}
/* Need enough space for one ASCII integer plus null terminator */
new_buf
=
return_desc
->
buffer
.
pointer
;
new_buf
=
ACPI_MEM_CALLOCATE
((
acpi_size
)
string_length
+
1
);
if
(
!
new_buf
)
{
ACPI_REPORT_ERROR
((
"ex_convert_to_string: Buffer allocation failure
\n
"
));
acpi_ut_remove_reference
(
ret_desc
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Convert */
/* Convert
integer to string
*/
i
=
acpi_ex_convert_to_ascii
(
obj_desc
->
integer
.
value
,
base
,
new_buf
,
sizeof
(
acpi_integer
));
string_length
=
acpi_ex_convert_to_ascii
(
obj_desc
->
integer
.
value
,
base
,
new_buf
,
acpi_gbl_integer_byte_width
);
/* Null terminate at the correct place */
/* Null terminate at the correct place */
if
(
max_length
<
i
)
{
return_desc
->
string
.
length
=
string_length
;
new_buf
[
max_length
]
=
0
;
new_buf
[
string_length
]
=
0
;
ret_desc
->
string
.
length
=
max_length
;
}
else
{
new_buf
[
i
]
=
0
;
ret_desc
->
string
.
length
=
i
;
}
ret_desc
->
buffer
.
pointer
=
new_buf
;
break
;
break
;
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
/* Find the string length */
switch
(
type
)
{
case
ACPI_EXPLICIT_CONVERT_DECIMAL
:
/* Used by to_decimal_string operator */
/*
* From ACPI: "If Data is a buffer, it is converted to a string of
* decimal values separated by commas."
*/
base
=
10
;
string_length
=
obj_desc
->
buffer
.
length
;
/* 4 chars for each decimal */
pointer
=
obj_desc
->
buffer
.
pointer
;
/*lint -fallthrough */
for
(
string_length
=
0
;
string_length
<
obj_desc
->
buffer
.
length
;
string_length
++
)
{
/* Exit on null terminator */
if
(
!
pointer
[
string_length
])
{
case
ACPI_IMPLICIT_CONVERT_HEX
:
break
;
/*
}
* From the ACPI spec:
*"The entire contents of the buffer are converted to a string of
* two-character hexadecimal numbers, each separated by a space."
*/
if
(
type
==
ACPI_IMPLICIT_CONVERT_HEX
)
{
separator
=
' '
;
}
}
if
(
max_length
>
ACPI_MAX_STRING_CONVERSION
)
{
/*lint -fallthrough */
if
(
string_length
>
ACPI_MAX_STRING_CONVERSION
)
{
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
}
case
ACPI_EXPLICIT_CONVERT_HEX
:
/* Used by to_hex_string operator */
/*
/*
* Create a new string object
* From ACPI: "If Data is a buffer, it is converted to a string of
* hexadecimal values separated by commas."
*/
*/
ret_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
string_length
+=
(
obj_desc
->
buffer
.
length
*
3
);
if
(
!
ret_desc
)
{
if
(
string_length
>
ACPI_MAX_STRING_CONVERSION
)
/* ACPI limit */
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
}
/* String length is the lesser of the Max or the actual length
*/
/* Create a new string object and string buffer
*/
if
(
max_length
<
string_length
)
{
return_desc
=
acpi_ut_create_string_object
((
acpi_size
)
string_length
-
1
);
string_length
=
max_length
;
if
(
!
return_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
}
new_buf
=
ACPI_MEM_CALLOCATE
((
acpi_size
)
string_length
+
1
);
new_buf
=
return_desc
->
buffer
.
pointer
;
if
(
!
new_buf
)
{
ACPI_REPORT_ERROR
/*
((
"ex_convert_to_string: Buffer allocation failure
\n
"
));
* Convert buffer bytes to hex or decimal values
acpi_ut_remove_reference
(
ret_desc
);
* (separated by commas)
return_ACPI_STATUS
(
AE_NO_MEMORY
);
*/
for
(
i
=
0
;
i
<
obj_desc
->
buffer
.
length
;
i
++
)
{
new_buf
+=
acpi_ex_convert_to_ascii
(
(
acpi_integer
)
obj_desc
->
buffer
.
pointer
[
i
],
base
,
new_buf
,
1
);
*
new_buf
++
=
separator
;
/* each separated by a comma or space */
}
}
/* Copy the appropriate number of buffer characters
*/
/* Null terminate the string (overwrites final comma from above)
*/
ACPI_MEMCPY
(
new_buf
,
pointer
,
string_length
);
new_buf
--
;
*
new_buf
=
0
;
/* Null terminate
*/
/* Recalculate length
*/
new_buf
[
string_length
]
=
0
;
return_desc
->
string
.
length
=
ACPI_STRLEN
(
return_desc
->
string
.
pointer
);
ret_desc
->
buffer
.
pointer
=
new_buf
;
ret_desc
->
string
.
length
=
string_length
;
break
;
break
;
default:
default:
return_ACPI_STATUS
(
AE_TYPE
);
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
}
break
;
/*
default:
* If we are about to overwrite the original object on the operand stack,
return_ACPI_STATUS
(
AE_TYPE
);
* we must remove a reference on the original object because we are
* essentially removing it from the stack.
*/
if
(
*
result_desc
==
obj_desc
)
{
if
(
walk_state
->
opcode
!=
AML_STORE_OP
)
{
acpi_ut_remove_reference
(
obj_desc
);
}
}
}
*
result_desc
=
ret_desc
;
*
result_desc
=
ret
urn
_desc
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
@@ -635,7 +610,8 @@ acpi_ex_convert_to_target_type (
...
@@ -635,7 +610,8 @@ acpi_ex_convert_to_target_type (
* These types require an Integer operand. We can convert
* These types require an Integer operand. We can convert
* a Buffer or a String to an Integer if necessary.
* a Buffer or a String to an Integer if necessary.
*/
*/
status
=
acpi_ex_convert_to_integer
(
source_desc
,
result_desc
,
walk_state
);
status
=
acpi_ex_convert_to_integer
(
source_desc
,
result_desc
,
16
);
break
;
break
;
...
@@ -645,7 +621,8 @@ acpi_ex_convert_to_target_type (
...
@@ -645,7 +621,8 @@ acpi_ex_convert_to_target_type (
* The operand must be a String. We can convert an
* The operand must be a String. We can convert an
* Integer or Buffer if necessary
* Integer or Buffer if necessary
*/
*/
status
=
acpi_ex_convert_to_string
(
source_desc
,
result_desc
,
16
,
ACPI_UINT32_MAX
,
walk_state
);
status
=
acpi_ex_convert_to_string
(
source_desc
,
result_desc
,
ACPI_IMPLICIT_CONVERT_HEX
);
break
;
break
;
...
@@ -655,7 +632,7 @@ acpi_ex_convert_to_target_type (
...
@@ -655,7 +632,7 @@ acpi_ex_convert_to_target_type (
* The operand must be a Buffer. We can convert an
* The operand must be a Buffer. We can convert an
* Integer or String if necessary
* Integer or String if necessary
*/
*/
status
=
acpi_ex_convert_to_buffer
(
source_desc
,
result_desc
,
walk_state
);
status
=
acpi_ex_convert_to_buffer
(
source_desc
,
result_desc
);
break
;
break
;
...
...
drivers/acpi/executer/exdump.c
View file @
c232f2a1
...
@@ -55,7 +55,6 @@
...
@@ -55,7 +55,6 @@
/*
/*
* The following routines are used for debug output only
* The following routines are used for debug output only
*/
*/
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*****************************************************************************
/*****************************************************************************
...
@@ -125,8 +124,8 @@ acpi_ex_dump_operand (
...
@@ -125,8 +124,8 @@ acpi_ex_dump_operand (
case
AML_NAME_OP
:
case
AML_NAME_OP
:
ACPI_DUMP_PATHNAME
(
obj_desc
->
reference
.
object
,
"Reference: Name: "
,
ACPI_DUMP_PATHNAME
(
obj_desc
->
reference
.
object
,
ACPI_LV_INFO
,
_COMPONENT
);
"Reference: Name: "
,
ACPI_LV_INFO
,
_COMPONENT
);
ACPI_DUMP_ENTRY
(
obj_desc
->
reference
.
object
,
ACPI_LV_INFO
);
ACPI_DUMP_ENTRY
(
obj_desc
->
reference
.
object
,
ACPI_LV_INFO
);
break
;
break
;
...
@@ -201,8 +200,7 @@ acpi_ex_dump_operand (
...
@@ -201,8 +200,7 @@ acpi_ex_dump_operand (
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
acpi_os_printf
(
"Buffer len %X @ %p
\n
"
,
acpi_os_printf
(
"Buffer len %X @ %p
\n
"
,
obj_desc
->
buffer
.
length
,
obj_desc
->
buffer
.
length
,
obj_desc
->
buffer
.
pointer
);
obj_desc
->
buffer
.
pointer
);
length
=
obj_desc
->
buffer
.
length
;
length
=
obj_desc
->
buffer
.
length
;
...
@@ -387,10 +385,13 @@ acpi_ex_dump_operand (
...
@@ -387,10 +385,13 @@ acpi_ex_dump_operand (
*
*
* FUNCTION: acpi_ex_dump_operands
* FUNCTION: acpi_ex_dump_operands
*
*
* PARAMETERS: interpreter_mode - Load or Exec
* PARAMETERS: Operands - Operand list
* *Ident - Identification
* interpreter_mode - Load or Exec
* Ident - Identification
* num_levels - # of stack entries to dump above line
* num_levels - # of stack entries to dump above line
* *Note - Output notation
* Note - Output notation
* module_name - Caller's module name
* line_number - Caller's invocation line number
*
*
* DESCRIPTION: Dump the object stack
* DESCRIPTION: Dump the object stack
*
*
...
@@ -489,8 +490,7 @@ acpi_ex_out_address (
...
@@ -489,8 +490,7 @@ acpi_ex_out_address (
#if ACPI_MACHINE_WIDTH == 16
#if ACPI_MACHINE_WIDTH == 16
acpi_os_printf
(
"%20s : %p
\n
"
,
title
,
value
);
acpi_os_printf
(
"%20s : %p
\n
"
,
title
,
value
);
#else
#else
acpi_os_printf
(
"%20s : %8.8X%8.8X
\n
"
,
title
,
acpi_os_printf
(
"%20s : %8.8X%8.8X
\n
"
,
title
,
ACPI_FORMAT_UINT64
(
value
));
ACPI_FORMAT_UINT64
(
value
));
#endif
#endif
}
}
...
@@ -563,13 +563,16 @@ acpi_ex_dump_object_descriptor (
...
@@ -563,13 +563,16 @@ acpi_ex_dump_object_descriptor (
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
==
ACPI_DESC_TYPE_NAMED
)
{
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
==
ACPI_DESC_TYPE_NAMED
)
{
acpi_ex_dump_node
((
struct
acpi_namespace_node
*
)
obj_desc
,
flags
);
acpi_ex_dump_node
((
struct
acpi_namespace_node
*
)
obj_desc
,
flags
);
acpi_os_printf
(
"
\n
Attached Object (%p):
\n
"
,
((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
);
acpi_os_printf
(
"
\n
Attached Object (%p):
\n
"
,
acpi_ex_dump_object_descriptor
(((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
,
flags
);
((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
);
return
;
acpi_ex_dump_object_descriptor
(
((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
,
flags
);
return_VOID
;
}
}
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
!=
ACPI_DESC_TYPE_OPERAND
)
{
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
!=
ACPI_DESC_TYPE_OPERAND
)
{
acpi_os_printf
(
"ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]
\n
"
,
acpi_os_printf
(
"ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]
\n
"
,
obj_desc
,
acpi_ut_get_descriptor_name
(
obj_desc
));
obj_desc
,
acpi_ut_get_descriptor_name
(
obj_desc
));
return_VOID
;
return_VOID
;
}
}
...
@@ -621,7 +624,8 @@ acpi_ex_dump_object_descriptor (
...
@@ -621,7 +624,8 @@ acpi_ex_dump_object_descriptor (
for
(
i
=
0
;
i
<
obj_desc
->
package
.
count
;
i
++
)
{
for
(
i
=
0
;
i
<
obj_desc
->
package
.
count
;
i
++
)
{
acpi_os_printf
(
"[%.3d] %p"
,
i
,
obj_desc
->
package
.
elements
[
i
]);
acpi_os_printf
(
"[%.3d] %p"
,
i
,
obj_desc
->
package
.
elements
[
i
]);
if
(
obj_desc
->
package
.
elements
[
i
])
{
if
(
obj_desc
->
package
.
elements
[
i
])
{
acpi_os_printf
(
" %s"
,
acpi_ut_get_object_type_name
(
obj_desc
->
package
.
elements
[
i
]));
acpi_os_printf
(
" %s"
,
acpi_ut_get_object_type_name
(
obj_desc
->
package
.
elements
[
i
]));
}
}
acpi_os_printf
(
"
\n
"
);
acpi_os_printf
(
"
\n
"
);
}
}
...
@@ -658,7 +662,7 @@ acpi_ex_dump_object_descriptor (
...
@@ -658,7 +662,7 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_integer
(
"sync_level"
,
obj_desc
->
mutex
.
sync_level
);
acpi_ex_out_integer
(
"sync_level"
,
obj_desc
->
mutex
.
sync_level
);
acpi_ex_out_pointer
(
"owner_thread"
,
obj_desc
->
mutex
.
owner_thread
);
acpi_ex_out_pointer
(
"owner_thread"
,
obj_desc
->
mutex
.
owner_thread
);
acpi_ex_out_integer
(
"acqui
sition_depth"
,
obj_desc
->
mutex
.
acquisition_depth
);
acpi_ex_out_integer
(
"acqui
re_depth"
,
obj_desc
->
mutex
.
acquisition_depth
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
mutex
.
semaphore
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
mutex
.
semaphore
);
break
;
break
;
...
@@ -708,13 +712,13 @@ acpi_ex_dump_object_descriptor (
...
@@ -708,13 +712,13 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
acpi_ex_out_integer
(
"field_flags"
,
obj_desc
->
common_field
.
field_flags
);
acpi_ex_out_integer
(
"field_flags"
,
obj_desc
->
common_field
.
field_flags
);
acpi_ex_out_integer
(
"access_byte_width"
,
obj_desc
->
common_field
.
access_byte_width
);
acpi_ex_out_integer
(
"access_byte_width"
,
obj_desc
->
common_field
.
access_byte_width
);
acpi_ex_out_integer
(
"bit_length"
,
obj_desc
->
common_field
.
bit_length
);
acpi_ex_out_integer
(
"bit_length"
,
obj_desc
->
common_field
.
bit_length
);
acpi_ex_out_integer
(
"fld_bit_offset"
,
obj_desc
->
common_field
.
start_field_bit_offset
);
acpi_ex_out_integer
(
"fld_bit_offset"
,
obj_desc
->
common_field
.
start_field_bit_offset
);
acpi_ex_out_integer
(
"base_byte_offset"
,
obj_desc
->
common_field
.
base_byte_offset
);
acpi_ex_out_integer
(
"base_byte_offset"
,
obj_desc
->
common_field
.
base_byte_offset
);
acpi_ex_out_integer
(
"datum_valid_bits"
,
obj_desc
->
common_field
.
datum_valid_bits
);
acpi_ex_out_integer
(
"datum_valid_bits"
,
obj_desc
->
common_field
.
datum_valid_bits
);
acpi_ex_out_integer
(
"end_fld_valid_bits"
,
obj_desc
->
common_field
.
end_field_valid_bits
);
acpi_ex_out_integer
(
"end_fld_valid_bits"
,
obj_desc
->
common_field
.
end_field_valid_bits
);
acpi_ex_out_integer
(
"end_buf_valid_bits"
,
obj_desc
->
common_field
.
end_buffer_valid_bits
);
acpi_ex_out_integer
(
"end_buf_valid_bits"
,
obj_desc
->
common_field
.
end_buffer_valid_bits
);
acpi_ex_out_pointer
(
"parent_node"
,
obj_desc
->
common_field
.
node
);
acpi_ex_out_pointer
(
"parent_node"
,
obj_desc
->
common_field
.
node
);
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
...
@@ -779,7 +783,8 @@ acpi_ex_dump_object_descriptor (
...
@@ -779,7 +783,8 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_DATA
:
case
ACPI_TYPE_LOCAL_DATA
:
default:
default:
acpi_os_printf
(
"ex_dump_object_descriptor: Display not implemented for object type %s
\n
"
,
acpi_os_printf
(
"ex_dump_object_descriptor: Display not implemented for object type %s
\n
"
,
acpi_ut_get_object_type_name
(
obj_desc
));
acpi_ut_get_object_type_name
(
obj_desc
));
break
;
break
;
}
}
...
...
drivers/acpi/executer/exfldio.c
View file @
c232f2a1
...
@@ -139,7 +139,7 @@ acpi_ex_setup_region (
...
@@ -139,7 +139,7 @@ acpi_ex_setup_region (
if
(
ACPI_ROUND_UP
(
rgn_desc
->
region
.
length
,
if
(
ACPI_ROUND_UP
(
rgn_desc
->
region
.
length
,
obj_desc
->
common_field
.
access_byte_width
)
>=
obj_desc
->
common_field
.
access_byte_width
)
>=
(
obj_desc
->
common_field
.
base_byte_offset
+
(
obj_desc
->
common_field
.
base_byte_offset
+
obj_desc
->
common_field
.
access_byte_width
+
(
acpi_native_uint
)
obj_desc
->
common_field
.
access_byte_width
+
field_datum_byte_offset
))
{
field_datum_byte_offset
))
{
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
...
drivers/acpi/executer/exmisc.c
View file @
c232f2a1
...
@@ -149,8 +149,9 @@ acpi_ex_get_object_reference (
...
@@ -149,8 +149,9 @@ acpi_ex_get_object_reference (
*
*
* FUNCTION: acpi_ex_concat_template
* FUNCTION: acpi_ex_concat_template
*
*
* PARAMETERS: *obj_desc - Object to be converted. Must be an
* PARAMETERS: Operand0 - First source object
* Integer, Buffer, or String
* Operand1 - Second source object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
* walk_state - Current walk state
*
*
* RETURN: Status
* RETURN: Status
...
@@ -161,8 +162,8 @@ acpi_ex_get_object_reference (
...
@@ -161,8 +162,8 @@ acpi_ex_get_object_reference (
acpi_status
acpi_status
acpi_ex_concat_template
(
acpi_ex_concat_template
(
union
acpi_operand_object
*
o
bj_desc1
,
union
acpi_operand_object
*
o
perand0
,
union
acpi_operand_object
*
o
bj_desc2
,
union
acpi_operand_object
*
o
perand1
,
union
acpi_operand_object
**
actual_return_desc
,
union
acpi_operand_object
**
actual_return_desc
,
struct
acpi_walk_state
*
walk_state
)
struct
acpi_walk_state
*
walk_state
)
{
{
...
@@ -179,16 +180,16 @@ acpi_ex_concat_template (
...
@@ -179,16 +180,16 @@ acpi_ex_concat_template (
/* Find the end_tags in each resource template */
/* Find the end_tags in each resource template */
end_tag1
=
acpi_ut_get_resource_end_tag
(
o
bj_desc1
);
end_tag1
=
acpi_ut_get_resource_end_tag
(
o
perand0
);
end_tag2
=
acpi_ut_get_resource_end_tag
(
o
bj_desc2
);
end_tag2
=
acpi_ut_get_resource_end_tag
(
o
perand1
);
if
(
!
end_tag1
||
!
end_tag2
)
{
if
(
!
end_tag1
||
!
end_tag2
)
{
return_ACPI_STATUS
(
AE_AML_OPERAND_TYPE
);
return_ACPI_STATUS
(
AE_AML_OPERAND_TYPE
);
}
}
/* Compute the length of each part */
/* Compute the length of each part */
length1
=
ACPI_PTR_DIFF
(
end_tag1
,
o
bj_desc1
->
buffer
.
pointer
);
length1
=
ACPI_PTR_DIFF
(
end_tag1
,
o
perand0
->
buffer
.
pointer
);
length2
=
ACPI_PTR_DIFF
(
end_tag2
,
o
bj_desc2
->
buffer
.
pointer
)
+
length2
=
ACPI_PTR_DIFF
(
end_tag2
,
o
perand1
->
buffer
.
pointer
)
+
2
;
/* Size of END_TAG */
2
;
/* Size of END_TAG */
/* Create a new buffer object for the result */
/* Create a new buffer object for the result */
...
@@ -201,8 +202,8 @@ acpi_ex_concat_template (
...
@@ -201,8 +202,8 @@ acpi_ex_concat_template (
/* Copy the templates to the new descriptor */
/* Copy the templates to the new descriptor */
new_buf
=
return_desc
->
buffer
.
pointer
;
new_buf
=
return_desc
->
buffer
.
pointer
;
ACPI_MEMCPY
(
new_buf
,
o
bj_desc1
->
buffer
.
pointer
,
length1
);
ACPI_MEMCPY
(
new_buf
,
o
perand0
->
buffer
.
pointer
,
length1
);
ACPI_MEMCPY
(
new_buf
+
length1
,
o
bj_desc2
->
buffer
.
pointer
,
length2
);
ACPI_MEMCPY
(
new_buf
+
length1
,
o
perand1
->
buffer
.
pointer
,
length2
);
/* Compute the new checksum */
/* Compute the new checksum */
...
@@ -221,8 +222,8 @@ acpi_ex_concat_template (
...
@@ -221,8 +222,8 @@ acpi_ex_concat_template (
*
*
* FUNCTION: acpi_ex_do_concatenate
* FUNCTION: acpi_ex_do_concatenate
*
*
* PARAMETERS:
obj_desc1
- First source object
* PARAMETERS:
Operand0
- First source object
*
obj_desc2
- Second source object
*
Operand1
- Second source object
* actual_return_desc - Where to place the return object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
* walk_state - Current walk state
*
*
...
@@ -234,21 +235,58 @@ acpi_ex_concat_template (
...
@@ -234,21 +235,58 @@ acpi_ex_concat_template (
acpi_status
acpi_status
acpi_ex_do_concatenate
(
acpi_ex_do_concatenate
(
union
acpi_operand_object
*
o
bj_desc1
,
union
acpi_operand_object
*
o
perand0
,
union
acpi_operand_object
*
o
bj_desc2
,
union
acpi_operand_object
*
o
perand1
,
union
acpi_operand_object
**
actual_return_desc
,
union
acpi_operand_object
**
actual_return_desc
,
struct
acpi_walk_state
*
walk_state
)
struct
acpi_walk_state
*
walk_state
)
{
{
acpi_status
status
;
union
acpi_operand_object
*
local_operand1
=
operand1
;
u32
i
;
acpi_integer
this_integer
;
union
acpi_operand_object
*
return_desc
;
union
acpi_operand_object
*
return_desc
;
char
*
new_buf
;
char
*
new_buf
;
acpi_status
status
;
acpi_size
new_length
;
ACPI_FUNCTION_
ENTRY
(
);
ACPI_FUNCTION_
TRACE
(
"ex_do_concatenate"
);
/*
* Convert the second operand if necessary. The first operand
* determines the type of the second operand, (See the Data Types
* section of the ACPI specification.) Both object types are
* guaranteed to be either Integer/String/Buffer by the operand
* resolution mechanism.
*/
switch
(
ACPI_GET_OBJECT_TYPE
(
operand0
))
{
case
ACPI_TYPE_INTEGER
:
status
=
acpi_ex_convert_to_integer
(
operand1
,
&
local_operand1
,
16
);
break
;
case
ACPI_TYPE_STRING
:
status
=
acpi_ex_convert_to_string
(
operand1
,
&
local_operand1
,
ACPI_IMPLICIT_CONVERT_HEX
);
break
;
case
ACPI_TYPE_BUFFER
:
status
=
acpi_ex_convert_to_buffer
(
operand1
,
&
local_operand1
);
break
;
default:
ACPI_REPORT_ERROR
((
"Concat - invalid obj type: %X
\n
"
,
ACPI_GET_OBJECT_TYPE
(
operand0
)));
status
=
AE_AML_INTERNAL
;
}
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
/*
* Both operands are now known to be the same object type
* (Both are Integer, String, or Buffer), and we can now perform the
* concatenation.
*/
/*
/*
* There are three cases to handle:
* There are three cases to handle:
*
*
...
@@ -256,113 +294,102 @@ acpi_ex_do_concatenate (
...
@@ -256,113 +294,102 @@ acpi_ex_do_concatenate (
* 2) Two Strings concatenated to produce a new String
* 2) Two Strings concatenated to produce a new String
* 3) Two Buffers concatenated to produce a new Buffer
* 3) Two Buffers concatenated to produce a new Buffer
*/
*/
switch
(
ACPI_GET_OBJECT_TYPE
(
o
bj_desc1
))
{
switch
(
ACPI_GET_OBJECT_TYPE
(
o
perand0
))
{
case
ACPI_TYPE_INTEGER
:
case
ACPI_TYPE_INTEGER
:
/* Result of two Integers is a Buffer */
/* Result of two Integers is a Buffer */
/* Need enough buffer space for two integers */
/* Need enough buffer space for two integers */
return_desc
=
acpi_ut_create_buffer_object
(
acpi_gbl_integer_byte_width
*
2
);
return_desc
=
acpi_ut_create_buffer_object
(
ACPI_MUL_2
(
acpi_gbl_integer_byte_width
));
if
(
!
return_desc
)
{
if
(
!
return_desc
)
{
return
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
}
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
/* Convert the first integer */
/* Copy the first integer, LSB first */
this_integer
=
obj_desc1
->
integer
.
value
;
for
(
i
=
0
;
i
<
acpi_gbl_integer_byte_width
;
i
++
)
{
new_buf
[
i
]
=
(
char
)
this_integer
;
this_integer
>>=
8
;
}
/* Convert the second integer */
ACPI_MEMCPY
(
new_buf
,
&
operand0
->
integer
.
value
,
acpi_gbl_integer_byte_width
);
this_integer
=
obj_desc2
->
integer
.
value
;
/* Copy the second integer (LSB first) after the first */
for
(;
i
<
(
ACPI_MUL_2
(
acpi_gbl_integer_byte_width
));
i
++
)
{
new_buf
[
i
]
=
(
char
)
this_integer
;
this_integer
>>=
8
;
}
ACPI_MEMCPY
(
new_buf
+
acpi_gbl_integer_byte_width
,
&
local_operand1
->
integer
.
value
,
acpi_gbl_integer_byte_width
);
break
;
break
;
case
ACPI_TYPE_STRING
:
case
ACPI_TYPE_STRING
:
/* Result of two Strings is a String */
/* Result of two Strings is a String */
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
new_length
=
(
acpi_size
)
operand0
->
string
.
length
+
if
(
!
return_desc
)
{
(
acpi_size
)
local_operand1
->
string
.
length
;
return
(
AE_NO_MEMORY
);
if
(
new_length
>
ACPI_MAX_STRING_CONVERSION
)
{
status
=
AE_AML_STRING_LIMIT
;
goto
cleanup
;
}
}
/* Operand0 is string */
return_desc
=
acpi_ut_create_string_object
(
new_length
);
if
(
!
return_desc
)
{
new_buf
=
ACPI_MEM_CALLOCATE
((
acpi_size
)
obj_desc1
->
string
.
length
+
(
acpi_size
)
obj_desc2
->
string
.
length
+
1
);
if
(
!
new_buf
)
{
ACPI_REPORT_ERROR
((
"ex_do_concatenate: String allocation failure
\n
"
));
status
=
AE_NO_MEMORY
;
status
=
AE_NO_MEMORY
;
goto
cleanup
;
goto
cleanup
;
}
}
/* Concatenate the strings */
new_buf
=
return_desc
->
string
.
pointer
;
ACPI_STRCPY
(
new_buf
,
obj_desc1
->
string
.
pointer
);
/* Concatenate the strings */
ACPI_STRCPY
(
new_buf
+
obj_desc1
->
string
.
length
,
obj_desc2
->
string
.
pointer
);
/* Complete the String object initialization */
return_desc
->
string
.
pointer
=
new_buf
;
ACPI_STRCPY
(
new_buf
,
return_desc
->
string
.
length
=
obj_desc1
->
string
.
length
+
operand0
->
string
.
pointer
);
obj_desc2
->
string
.
length
;
ACPI_STRCPY
(
new_buf
+
operand0
->
string
.
length
,
local_operand1
->
string
.
pointer
);
break
;
break
;
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
/* Result of two Buffers is a Buffer */
/* Result of two Buffers is a Buffer */
return_desc
=
acpi_ut_create_buffer_object
(
return_desc
=
acpi_ut_create_buffer_object
(
(
acpi_size
)
o
bj_desc1
->
buffer
.
length
+
(
acpi_size
)
o
perand0
->
buffer
.
length
+
(
acpi_size
)
obj_desc2
->
buffer
.
length
);
(
acpi_size
)
local_operand1
->
buffer
.
length
);
if
(
!
return_desc
)
{
if
(
!
return_desc
)
{
return
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
}
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
/* Concatenate the buffers */
/* Concatenate the buffers */
ACPI_MEMCPY
(
new_buf
,
obj_desc1
->
buffer
.
pointer
,
ACPI_MEMCPY
(
new_buf
,
obj_desc1
->
buffer
.
length
);
operand0
->
buffer
.
pointer
,
ACPI_MEMCPY
(
new_buf
+
obj_desc1
->
buffer
.
length
,
obj_desc2
->
buffer
.
pointer
,
operand0
->
buffer
.
length
);
obj_desc2
->
buffer
.
length
);
ACPI_MEMCPY
(
new_buf
+
operand0
->
buffer
.
length
,
local_operand1
->
buffer
.
pointer
,
local_operand1
->
buffer
.
length
);
break
;
break
;
default:
default:
/* Invalid object type, should not happen here */
/* Invalid object type, should not happen here */
ACPI_REPORT_ERROR
((
"Concat
- invalid obj
type: %X
\n
"
,
ACPI_REPORT_ERROR
((
"Concat
enate - Invalid object
type: %X
\n
"
,
ACPI_GET_OBJECT_TYPE
(
o
bj_desc1
)));
ACPI_GET_OBJECT_TYPE
(
o
perand0
)));
status
=
AE_AML_INTERNAL
;
status
=
AE_AML_INTERNAL
;
return_desc
=
NULL
;
goto
cleanup
;
}
}
*
actual_return_desc
=
return_desc
;
*
actual_return_desc
=
return_desc
;
return
(
AE_OK
);
cleanup:
cleanup:
if
(
local_operand1
!=
operand1
)
{
acpi_ut_remove_reference
(
return_desc
);
acpi_ut_remove_reference
(
local_operand1
);
return
(
status
);
}
return_ACPI_STATUS
(
AE_OK
);
}
}
...
@@ -371,8 +398,8 @@ acpi_ex_do_concatenate (
...
@@ -371,8 +398,8 @@ acpi_ex_do_concatenate (
* FUNCTION: acpi_ex_do_math_op
* FUNCTION: acpi_ex_do_math_op
*
*
* PARAMETERS: Opcode - AML opcode
* PARAMETERS: Opcode - AML opcode
*
Operand
0 - Integer operand #0
*
Integer
0 - Integer operand #0
*
Operand
1 - Integer operand #1
*
Integer
1 - Integer operand #1
*
*
* RETURN: Integer result of the operation
* RETURN: Integer result of the operation
*
*
...
@@ -385,62 +412,62 @@ acpi_ex_do_concatenate (
...
@@ -385,62 +412,62 @@ acpi_ex_do_concatenate (
acpi_integer
acpi_integer
acpi_ex_do_math_op
(
acpi_ex_do_math_op
(
u16
opcode
,
u16
opcode
,
acpi_integer
operand
0
,
acpi_integer
integer
0
,
acpi_integer
operand
1
)
acpi_integer
integer
1
)
{
{
ACPI_FUNCTION_ENTRY
();
ACPI_FUNCTION_ENTRY
();
switch
(
opcode
)
{
switch
(
opcode
)
{
case
AML_ADD_OP
:
/* Add (
Operand0, Operand
1, Result) */
case
AML_ADD_OP
:
/* Add (
Integer0, Integer
1, Result) */
return
(
operand0
+
operand
1
);
return
(
integer0
+
integer
1
);
case
AML_BIT_AND_OP
:
/* And (
Operand0, Operand
1, Result) */
case
AML_BIT_AND_OP
:
/* And (
Integer0, Integer
1, Result) */
return
(
operand0
&
operand
1
);
return
(
integer0
&
integer
1
);
case
AML_BIT_NAND_OP
:
/* NAnd (
Operand0, Operand
1, Result) */
case
AML_BIT_NAND_OP
:
/* NAnd (
Integer0, Integer
1, Result) */
return
(
~
(
operand0
&
operand
1
));
return
(
~
(
integer0
&
integer
1
));
case
AML_BIT_OR_OP
:
/* Or (
Operand0, Operand
1, Result) */
case
AML_BIT_OR_OP
:
/* Or (
Integer0, Integer
1, Result) */
return
(
operand0
|
operand
1
);
return
(
integer0
|
integer
1
);
case
AML_BIT_NOR_OP
:
/* NOr (
Operand0, Operand
1, Result) */
case
AML_BIT_NOR_OP
:
/* NOr (
Integer0, Integer
1, Result) */
return
(
~
(
operand0
|
operand
1
));
return
(
~
(
integer0
|
integer
1
));
case
AML_BIT_XOR_OP
:
/* XOr (
Operand0, Operand
1, Result) */
case
AML_BIT_XOR_OP
:
/* XOr (
Integer0, Integer
1, Result) */
return
(
operand0
^
operand
1
);
return
(
integer0
^
integer
1
);
case
AML_MULTIPLY_OP
:
/* Multiply (
Operand0, Operand
1, Result) */
case
AML_MULTIPLY_OP
:
/* Multiply (
Integer0, Integer
1, Result) */
return
(
operand0
*
operand
1
);
return
(
integer0
*
integer
1
);
case
AML_SHIFT_LEFT_OP
:
/* shift_left (Operand, shift_count, Result) */
case
AML_SHIFT_LEFT_OP
:
/* shift_left (Operand, shift_count, Result) */
return
(
operand0
<<
operand
1
);
return
(
integer0
<<
integer
1
);
case
AML_SHIFT_RIGHT_OP
:
/* shift_right (Operand, shift_count, Result) */
case
AML_SHIFT_RIGHT_OP
:
/* shift_right (Operand, shift_count, Result) */
return
(
operand0
>>
operand
1
);
return
(
integer0
>>
integer
1
);
case
AML_SUBTRACT_OP
:
/* Subtract (
Operand0, Operand
1, Result) */
case
AML_SUBTRACT_OP
:
/* Subtract (
Integer0, Integer
1, Result) */
return
(
operand0
-
operand
1
);
return
(
integer0
-
integer
1
);
default:
default:
...
@@ -449,22 +476,86 @@ acpi_ex_do_math_op (
...
@@ -449,22 +476,86 @@ acpi_ex_do_math_op (
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_do_logical_numeric_op
*
* PARAMETERS: Opcode - AML opcode
* Integer0 - Integer operand #0
* Integer1 - Integer operand #1
* logical_result - TRUE/FALSE result of the operation
*
* RETURN: Status
*
* DESCRIPTION: Execute a logical "Numeric" AML opcode. For these Numeric
* operators (LAnd and LOr), both operands must be integers.
*
* Note: cleanest machine code seems to be produced by the code
* below, rather than using statements of the form:
* Result = (Integer0 && Integer1);
*
******************************************************************************/
acpi_status
acpi_ex_do_logical_numeric_op
(
u16
opcode
,
acpi_integer
integer0
,
acpi_integer
integer1
,
u8
*
logical_result
)
{
acpi_status
status
=
AE_OK
;
u8
local_result
=
FALSE
;
ACPI_FUNCTION_TRACE
(
"ex_do_logical_numeric_op"
);
switch
(
opcode
)
{
case
AML_LAND_OP
:
/* LAnd (Integer0, Integer1) */
if
(
integer0
&&
integer1
)
{
local_result
=
TRUE
;
}
break
;
case
AML_LOR_OP
:
/* LOr (Integer0, Integer1) */
if
(
integer0
||
integer1
)
{
local_result
=
TRUE
;
}
break
;
default:
status
=
AE_AML_INTERNAL
;
break
;
}
/* Return the logical result and status */
*
logical_result
=
local_result
;
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
/*******************************************************************************
*
*
* FUNCTION: acpi_ex_do_logical_op
* FUNCTION: acpi_ex_do_logical_op
*
*
* PARAMETERS: Opcode - AML opcode
* PARAMETERS: Opcode - AML opcode
* obj_desc0 - operand #0
* Operand0 - operand #0
* obj_desc1 - operand #1
* Operand1 - operand #1
* logical_result - TRUE/FALSE result of the operation
*
*
* RETURN:
TRUE/FALSE result of the operation
* RETURN:
Status
*
*
* DESCRIPTION: Execute a logical AML opcode. The purpose of having all of the
* DESCRIPTION: Execute a logical AML opcode. The purpose of having all of the
* functions here is to prevent a lot of pointer dereferencing
* functions here is to prevent a lot of pointer dereferencing
* to obtain the operands and to simplify the generation of the
* to obtain the operands and to simplify the generation of the
* logical value. Both operands must already be validated as
* logical value. For the Numeric operators (LAnd and LOr), both
* 1) Both the same type, and
* operands must be integers. For the other logical operators,
* 2) Either Integer, Buffer, or String type.
* operands can be any combination of Integer/String/Buffer. The
* first operand determines the type to which the second operand
* will be converted.
*
*
* Note: cleanest machine code seems to be produced by the code
* Note: cleanest machine code seems to be produced by the code
* below, rather than using statements of the form:
* below, rather than using statements of the form:
...
@@ -472,143 +563,175 @@ acpi_ex_do_math_op (
...
@@ -472,143 +563,175 @@ acpi_ex_do_math_op (
*
*
******************************************************************************/
******************************************************************************/
u8
acpi_status
acpi_ex_do_logical_op
(
acpi_ex_do_logical_op
(
u16
opcode
,
u16
opcode
,
union
acpi_operand_object
*
obj_desc0
,
union
acpi_operand_object
*
operand0
,
union
acpi_operand_object
*
obj_desc1
)
union
acpi_operand_object
*
operand1
,
u8
*
logical_result
)
{
{
acpi_integer
operand0
;
union
acpi_operand_object
*
local_operand1
=
operand1
;
acpi_integer
operand1
;
acpi_integer
integer0
;
u8
*
ptr0
;
acpi_integer
integer1
;
u8
*
ptr1
;
u32
length0
;
u32
length0
;
u32
length1
;
u32
length1
;
u32
i
;
acpi_status
status
=
AE_OK
;
u8
local_result
=
FALSE
;
int
compare
;
ACPI_FUNCTION_
ENTRY
(
);
ACPI_FUNCTION_
TRACE
(
"ex_do_logical_op"
);
if
(
ACPI_GET_OBJECT_TYPE
(
obj_desc0
)
==
ACPI_TYPE_INTEGER
)
{
/*
/* Both operands are of type integer */
* Convert the second operand if necessary. The first operand
* determines the type of the second operand, (See the Data Types
* section of the ACPI 3.0+ specification.) Both object types are
* guaranteed to be either Integer/String/Buffer by the operand
* resolution mechanism.
*/
switch
(
ACPI_GET_OBJECT_TYPE
(
operand0
))
{
case
ACPI_TYPE_INTEGER
:
status
=
acpi_ex_convert_to_integer
(
operand1
,
&
local_operand1
,
16
);
break
;
operand0
=
obj_desc0
->
integer
.
value
;
case
ACPI_TYPE_STRING
:
operand1
=
obj_desc1
->
integer
.
value
;
status
=
acpi_ex_convert_to_string
(
operand1
,
&
local_operand1
,
ACPI_IMPLICIT_CONVERT_HEX
);
break
;
switch
(
opcode
)
{
case
ACPI_TYPE_BUFFER
:
case
AML_LAND_OP
:
/* LAnd (Operand0, Operand1) */
status
=
acpi_ex_convert_to_buffer
(
operand1
,
&
local_operand1
);
break
;
if
(
operand0
&&
operand1
)
{
default:
return
(
TRUE
);
status
=
AE_AML_INTERNAL
;
}
break
;
break
;
}
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
/*
* Two cases: 1) Both Integers, 2) Both Strings or Buffers
*/
if
(
ACPI_GET_OBJECT_TYPE
(
operand0
)
==
ACPI_TYPE_INTEGER
)
{
/*
* 1) Both operands are of type integer
* Note: local_operand1 may have changed above
*/
integer0
=
operand0
->
integer
.
value
;
integer1
=
local_operand1
->
integer
.
value
;
switch
(
opcode
)
{
case
AML_LEQUAL_OP
:
/* LEqual (Operand0, Operand1) */
case
AML_LEQUAL_OP
:
/* LEqual (Operand0, Operand1) */
if
(
operand0
==
operand
1
)
{
if
(
integer0
==
integer
1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
}
break
;
break
;
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
if
(
operand0
>
operand
1
)
{
if
(
integer0
>
integer
1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
}
break
;
break
;
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
if
(
operand0
<
operand1
)
{
if
(
integer0
<
integer1
)
{
return
(
TRUE
);
local_result
=
TRUE
;
}
break
;
case
AML_LOR_OP
:
/* LOr (Operand0, Operand1) */
if
(
operand0
||
operand1
)
{
return
(
TRUE
);
}
}
break
;
break
;
default:
default:
status
=
AE_AML_INTERNAL
;
break
;
break
;
}
}
}
}
else
{
else
{
/*
/*
* Case for Buffer/String objects.
* 2) Both operands are Strings or both are Buffers
* NOTE: takes advantage of common Buffer/String object fields
* Note: Code below takes advantage of common Buffer/String
* object fields. local_operand1 may have changed above. Use
* memcmp to handle nulls in buffers.
*/
*/
length0
=
o
bj_desc
0
->
buffer
.
length
;
length0
=
o
perand
0
->
buffer
.
length
;
ptr0
=
obj_desc0
->
buffer
.
pointer
;
length1
=
local_operand1
->
buffer
.
length
;
length1
=
obj_desc1
->
buffer
.
length
;
/* Lexicographic compare: compare the data bytes */
ptr1
=
obj_desc1
->
buffer
.
pointer
;
compare
=
ACPI_MEMCMP
((
const
char
*
)
operand0
->
buffer
.
pointer
,
(
const
char
*
)
local_operand1
->
buffer
.
pointer
,
(
length0
>
length1
)
?
length1
:
length0
);
switch
(
opcode
)
{
switch
(
opcode
)
{
case
AML_LEQUAL_OP
:
/* LEqual (Operand0, Operand1) */
case
AML_LEQUAL_OP
:
/* LEqual (Operand0, Operand1) */
/* Length and all bytes must be equal */
/* Length and all bytes must be equal */
if
(
length0
!=
length1
)
{
if
(
(
length0
==
length1
)
&&
return
(
FALSE
);
(
compare
==
0
))
{
}
/* Length and all bytes match ==> TRUE */
for
(
i
=
0
;
i
<
length0
;
i
++
)
{
local_result
=
TRUE
;
if
(
ptr0
[
i
]
!=
ptr1
[
i
])
{
return
(
FALSE
);
}
}
}
break
;
return
(
TRUE
);
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
/* Lexicographic compare: Scan the 1-to-1 data */
if
(
compare
>
0
)
{
local_result
=
TRUE
;
for
(
i
=
0
;
(
i
<
length0
)
&&
(
i
<
length1
);
i
++
)
{
goto
cleanup
;
/* TRUE */
if
(
ptr0
[
i
]
>
ptr1
[
i
])
{
return
(
TRUE
);
}
}
if
(
compare
<
0
)
{
goto
cleanup
;
/* FALSE */
}
}
/* Bytes match
, now check
lengths */
/* Bytes match
(to shortest length), compare
lengths */
if
(
length0
>
length1
)
{
if
(
length0
>
length1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
}
break
;
/* Length0 <= Length1 */
return
(
FALSE
);
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
/* Lexicographic compare: Scan the 1-to-1 data */
if
(
compare
>
0
)
{
goto
cleanup
;
/* FALSE */
for
(
i
=
0
;
(
i
<
length0
)
&&
(
i
<
length1
);
i
++
)
{
if
(
ptr0
[
i
]
<
ptr1
[
i
])
{
return
(
TRUE
);
}
}
if
(
compare
<
0
)
{
local_result
=
TRUE
;
goto
cleanup
;
/* TRUE */
}
}
/* Bytes match
, now check
lengths */
/* Bytes match
(to shortest length), compare
lengths */
if
(
length0
<
length1
)
{
if
(
length0
<
length1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
}
break
;
/* Length0 >= Length1 */
return
(
FALSE
);
default:
default:
status
=
AE_AML_INTERNAL
;
break
;
break
;
}
}
}
}
return
(
FALSE
);
cleanup:
/* New object was created if implicit conversion performed - delete */
if
(
local_operand1
!=
operand1
)
{
acpi_ut_remove_reference
(
local_operand1
);
}
/* Return the logical result and status */
*
logical_result
=
local_result
;
return_ACPI_STATUS
(
status
);
}
}
drivers/acpi/executer/exoparg1.c
View file @
c232f2a1
...
@@ -67,7 +67,7 @@
...
@@ -67,7 +67,7 @@
* Where:
* Where:
*
*
* xA - ARGUMENTS: The number of arguments (input operands) that are
* xA - ARGUMENTS: The number of arguments (input operands) that are
* required for this opcode type (
1
through 6 args).
* required for this opcode type (
0
through 6 args).
* yT - TARGETS: The number of targets (output operands) that are required
* yT - TARGETS: The number of targets (output operands) that are required
* for this opcode type (0, 1, or 2 targets).
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
...
@@ -77,6 +77,69 @@
...
@@ -77,6 +77,69 @@
* fully resolved operands.
* fully resolved operands.
!*/
!*/
/*******************************************************************************
*
* FUNCTION: acpi_ex_opcode_0A_0T_1R
*
* PARAMETERS: walk_state - Current state (contains AML opcode)
*
* RETURN: Status
*
* DESCRIPTION: Execute operator with no operands, one return value
*
******************************************************************************/
acpi_status
acpi_ex_opcode_0A_0T_1R
(
struct
acpi_walk_state
*
walk_state
)
{
acpi_status
status
=
AE_OK
;
union
acpi_operand_object
*
return_desc
=
NULL
;
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_0A_0T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
/* Examine the AML opcode */
switch
(
walk_state
->
opcode
)
{
case
AML_TIMER_OP
:
/* Timer () */
/* Create a return object of type Integer */
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
return_desc
->
integer
.
value
=
acpi_os_get_timer
();
break
;
default:
/* Unknown opcode */
ACPI_REPORT_ERROR
((
"acpi_ex_opcode_0A_0T_1R: Unknown opcode %X
\n
"
,
walk_state
->
opcode
));
status
=
AE_AML_BAD_OPCODE
;
break
;
}
cleanup:
if
(
!
walk_state
->
result_obj
)
{
walk_state
->
result_obj
=
return_desc
;
}
/* Delete return object on error */
if
(
ACPI_FAILURE
(
status
))
{
acpi_ut_remove_reference
(
return_desc
);
}
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
/*******************************************************************************
*
*
* FUNCTION: acpi_ex_opcode_1A_0T_0R
* FUNCTION: acpi_ex_opcode_1A_0T_0R
...
@@ -124,7 +187,7 @@ acpi_ex_opcode_1A_0T_0R (
...
@@ -124,7 +187,7 @@ acpi_ex_opcode_1A_0T_0R (
case
AML_SLEEP_OP
:
/* Sleep (msec_time) */
case
AML_SLEEP_OP
:
/* Sleep (msec_time) */
status
=
acpi_ex_system_do_suspend
(
(
u32
)
operand
[
0
]
->
integer
.
value
);
status
=
acpi_ex_system_do_suspend
(
operand
[
0
]
->
integer
.
value
);
break
;
break
;
...
@@ -222,7 +285,7 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -222,7 +285,7 @@ acpi_ex_opcode_1A_1T_1R (
union
acpi_operand_object
*
return_desc2
=
NULL
;
union
acpi_operand_object
*
return_desc2
=
NULL
;
u32
temp32
;
u32
temp32
;
u32
i
;
u32
i
;
u32
power_of_ten
;
acpi_integer
power_of_ten
;
acpi_integer
digit
;
acpi_integer
digit
;
...
@@ -262,7 +325,8 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -262,7 +325,8 @@ acpi_ex_opcode_1A_1T_1R (
* Acpi specification describes Integer type as a little
* Acpi specification describes Integer type as a little
* endian unsigned value, so this boundary condition is valid.
* endian unsigned value, so this boundary condition is valid.
*/
*/
for
(
temp32
=
0
;
return_desc
->
integer
.
value
&&
temp32
<
ACPI_INTEGER_BIT_SIZE
;
++
temp32
)
{
for
(
temp32
=
0
;
return_desc
->
integer
.
value
&&
temp32
<
ACPI_INTEGER_BIT_SIZE
;
++
temp32
)
{
return_desc
->
integer
.
value
>>=
1
;
return_desc
->
integer
.
value
>>=
1
;
}
}
...
@@ -278,13 +342,15 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -278,13 +342,15 @@ acpi_ex_opcode_1A_1T_1R (
* The Acpi specification describes Integer type as a little
* The Acpi specification describes Integer type as a little
* endian unsigned value, so this boundary condition is valid.
* endian unsigned value, so this boundary condition is valid.
*/
*/
for
(
temp32
=
0
;
return_desc
->
integer
.
value
&&
temp32
<
ACPI_INTEGER_BIT_SIZE
;
++
temp32
)
{
for
(
temp32
=
0
;
return_desc
->
integer
.
value
&&
temp32
<
ACPI_INTEGER_BIT_SIZE
;
++
temp32
)
{
return_desc
->
integer
.
value
<<=
1
;
return_desc
->
integer
.
value
<<=
1
;
}
}
/* Since the bit position is one-based, subtract from 33 (65) */
/* Since the bit position is one-based, subtract from 33 (65) */
return_desc
->
integer
.
value
=
temp32
==
0
?
0
:
(
ACPI_INTEGER_BIT_SIZE
+
1
)
-
temp32
;
return_desc
->
integer
.
value
=
temp32
==
0
?
0
:
(
ACPI_INTEGER_BIT_SIZE
+
1
)
-
temp32
;
break
;
break
;
...
@@ -319,7 +385,8 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -319,7 +385,8 @@ acpi_ex_opcode_1A_1T_1R (
/* Sum the digit into the result with the current power of 10 */
/* Sum the digit into the result with the current power of 10 */
return_desc
->
integer
.
value
+=
(((
acpi_integer
)
temp32
)
*
power_of_ten
);
return_desc
->
integer
.
value
+=
(((
acpi_integer
)
temp32
)
*
power_of_ten
);
/* Shift to next BCD digit */
/* Shift to next BCD digit */
...
@@ -340,17 +407,19 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -340,17 +407,19 @@ acpi_ex_opcode_1A_1T_1R (
/* Each BCD digit is one nybble wide */
/* Each BCD digit is one nybble wide */
for
(
i
=
0
;
(
i
<
acpi_gbl_integer_nybble_width
)
&&
(
digit
>
0
);
i
++
)
{
for
(
i
=
0
;
(
i
<
acpi_gbl_integer_nybble_width
)
&&
(
digit
>
0
);
i
++
)
{
(
void
)
acpi_ut_short_divide
(
&
digit
,
10
,
&
digit
,
&
temp32
);
(
void
)
acpi_ut_short_divide
(
digit
,
10
,
&
digit
,
&
temp32
);
/* Insert the BCD digit that resides in the remainder from above */
/* Insert the BCD digit that resides in the remainder from above */
return_desc
->
integer
.
value
|=
(((
acpi_integer
)
temp32
)
<<
(
i
*
4
));
return_desc
->
integer
.
value
|=
(((
acpi_integer
)
temp32
)
<<
ACPI_MUL_4
(
i
));
}
}
/* Overflow if there is any data left in Digit */
/* Overflow if there is any data left in Digit */
if
(
digit
>
0
)
{
if
(
digit
>
0
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Integer too large to convert to BCD: %8.8X%8.8X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Integer too large to convert to BCD: %8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
operand
[
0
]
->
integer
.
value
)));
ACPI_FORMAT_UINT64
(
operand
[
0
]
->
integer
.
value
)));
status
=
AE_AML_NUMERIC_OVERFLOW
;
status
=
AE_AML_NUMERIC_OVERFLOW
;
goto
cleanup
;
goto
cleanup
;
...
@@ -429,31 +498,35 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -429,31 +498,35 @@ acpi_ex_opcode_1A_1T_1R (
*/
*/
case
AML_COPY_OP
:
/* Copy (Source, Target) */
case
AML_COPY_OP
:
/* Copy (Source, Target) */
status
=
acpi_ut_copy_iobject_to_iobject
(
operand
[
0
],
&
return_desc
,
walk_state
);
status
=
acpi_ut_copy_iobject_to_iobject
(
operand
[
0
],
&
return_desc
,
walk_state
);
break
;
break
;
case
AML_TO_DECSTRING_OP
:
/* to_decimal_string (Data, Result) */
case
AML_TO_DECSTRING_OP
:
/* to_decimal_string (Data, Result) */
status
=
acpi_ex_convert_to_string
(
operand
[
0
],
&
return_desc
,
10
,
ACPI_UINT32_MAX
,
walk_state
);
status
=
acpi_ex_convert_to_string
(
operand
[
0
],
&
return_desc
,
ACPI_EXPLICIT_CONVERT_DECIMAL
);
break
;
break
;
case
AML_TO_HEXSTRING_OP
:
/* to_hex_string (Data, Result) */
case
AML_TO_HEXSTRING_OP
:
/* to_hex_string (Data, Result) */
status
=
acpi_ex_convert_to_string
(
operand
[
0
],
&
return_desc
,
16
,
ACPI_UINT32_MAX
,
walk_state
);
status
=
acpi_ex_convert_to_string
(
operand
[
0
],
&
return_desc
,
ACPI_EXPLICIT_CONVERT_HEX
);
break
;
break
;
case
AML_TO_BUFFER_OP
:
/* to_buffer (Data, Result) */
case
AML_TO_BUFFER_OP
:
/* to_buffer (Data, Result) */
status
=
acpi_ex_convert_to_buffer
(
operand
[
0
],
&
return_desc
,
walk_state
);
status
=
acpi_ex_convert_to_buffer
(
operand
[
0
],
&
return_desc
);
break
;
break
;
case
AML_TO_INTEGER_OP
:
/* to_integer (Data, Result) */
case
AML_TO_INTEGER_OP
:
/* to_integer (Data, Result) */
status
=
acpi_ex_convert_to_integer
(
operand
[
0
],
&
return_desc
,
walk_state
);
status
=
acpi_ex_convert_to_integer
(
operand
[
0
],
&
return_desc
,
ACPI_ANY_BASE
);
break
;
break
;
...
@@ -463,7 +536,8 @@ acpi_ex_opcode_1A_1T_1R (
...
@@ -463,7 +536,8 @@ acpi_ex_opcode_1A_1T_1R (
/*
/*
* These are two obsolete opcodes
* These are two obsolete opcodes
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
)));
acpi_ps_get_opcode_name
(
walk_state
->
opcode
)));
status
=
AE_SUPPORT
;
status
=
AE_SUPPORT
;
goto
cleanup
;
goto
cleanup
;
...
@@ -537,7 +611,13 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -537,7 +611,13 @@ acpi_ex_opcode_1A_0T_1R (
goto
cleanup
;
goto
cleanup
;
}
}
return_desc
->
integer
.
value
=
!
operand
[
0
]
->
integer
.
value
;
/*
* Set result to ONES (TRUE) if Value == 0. Note:
* return_desc->Integer.Value is initially == 0 (FALSE) from above.
*/
if
(
!
operand
[
0
]
->
integer
.
value
)
{
return_desc
->
integer
.
value
=
ACPI_INTEGER_MAX
;
}
break
;
break
;
...
@@ -545,41 +625,61 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -545,41 +625,61 @@ acpi_ex_opcode_1A_0T_1R (
case
AML_INCREMENT_OP
:
/* Increment (Operand) */
case
AML_INCREMENT_OP
:
/* Increment (Operand) */
/*
/*
* Since we are expecting a Reference operand, it
* Create a new integer. Can't just get the base integer and
* can be either a NS Node or an internal object.
* increment it because it may be an Arg or Field.
*/
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/*
* Since we are expecting a Reference operand, it can be either a
* NS Node or an internal object.
*/
*/
return
_desc
=
operand
[
0
];
temp
_desc
=
operand
[
0
];
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
operand
[
0
]
)
==
ACPI_DESC_TYPE_OPERAND
)
{
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
temp_desc
)
==
ACPI_DESC_TYPE_OPERAND
)
{
/* Internal reference object - prevent deletion */
/* Internal reference object - prevent deletion */
acpi_ut_add_reference
(
return
_desc
);
acpi_ut_add_reference
(
temp
_desc
);
}
}
/*
/*
* Convert the return_desc Reference to a Number
* Convert the Reference operand to an Integer (This removes a
* (This removes a reference on the return_desc object)
* reference on the Operand[0] object)
*
* NOTE: We use LNOT_OP here in order to force resolution of the
* reference operand to an actual integer.
*/
*/
status
=
acpi_ex_resolve_operands
(
AML_LNOT_OP
,
&
return
_desc
,
walk_state
);
status
=
acpi_ex_resolve_operands
(
AML_LNOT_OP
,
&
temp
_desc
,
walk_state
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s: bad operand(s) %s
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s: bad operand(s) %s
\n
"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
),
acpi_format_exception
(
status
)));
acpi_ps_get_opcode_name
(
walk_state
->
opcode
),
acpi_format_exception
(
status
)));
goto
cleanup
;
goto
cleanup
;
}
}
/*
/*
*
return_desc is now guaranteed to be an Integer object
*
temp_desc is now guaranteed to be an Integer object --
*
Do
the actual increment or decrement
*
Perform
the actual increment or decrement
*/
*/
if
(
AML_INCREMENT_OP
==
walk_state
->
opcode
)
{
if
(
walk_state
->
opcode
==
AML_INCREMENT_OP
)
{
return_desc
->
integer
.
value
++
;
return_desc
->
integer
.
value
=
temp_desc
->
integer
.
value
+
1
;
}
}
else
{
else
{
return_desc
->
integer
.
value
--
;
return_desc
->
integer
.
value
=
temp_desc
->
integer
.
value
-
1
;
}
}
/* Store the result back in the original descriptor */
/* Finished with this Integer object */
acpi_ut_remove_reference
(
temp_desc
);
/*
* Store the result back (indirectly) through the original
* Reference object
*/
status
=
acpi_ex_store
(
return_desc
,
operand
[
0
],
walk_state
);
status
=
acpi_ex_store
(
return_desc
,
operand
[
0
],
walk_state
);
break
;
break
;
...
@@ -633,7 +733,8 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -633,7 +733,8 @@ acpi_ex_opcode_1A_0T_1R (
break
;
break
;
default:
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"size_of, Not Buf/Str/Pkg - found type %s
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"size_of, Not Buf/Str/Pkg - found type %s
\n
"
,
acpi_ut_get_type_name
(
type
)));
acpi_ut_get_type_name
(
type
)));
status
=
AE_AML_OPERAND_TYPE
;
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
goto
cleanup
;
...
@@ -803,7 +904,8 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -803,7 +904,8 @@ acpi_ex_opcode_1A_0T_1R (
* an uninitialized package element and is thus a
* an uninitialized package element and is thus a
* severe error.
* severe error.
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"NULL package element obj %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"NULL package element obj %p
\n
"
,
operand
[
0
]));
operand
[
0
]));
status
=
AE_AML_UNINITIALIZED_ELEMENT
;
status
=
AE_AML_UNINITIALIZED_ELEMENT
;
goto
cleanup
;
goto
cleanup
;
...
@@ -815,7 +917,8 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -815,7 +917,8 @@ acpi_ex_opcode_1A_0T_1R (
default:
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown Index target_type %X in obj %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown Index target_type %X in obj %p
\n
"
,
operand
[
0
]
->
reference
.
target_type
,
operand
[
0
]));
operand
[
0
]
->
reference
.
target_type
,
operand
[
0
]));
status
=
AE_AML_OPERAND_TYPE
;
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
goto
cleanup
;
...
@@ -839,7 +942,8 @@ acpi_ex_opcode_1A_0T_1R (
...
@@ -839,7 +942,8 @@ acpi_ex_opcode_1A_0T_1R (
default:
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown opcode in ref(%p) - %X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown opcode in ref(%p) - %X
\n
"
,
operand
[
0
],
operand
[
0
]
->
reference
.
opcode
));
operand
[
0
],
operand
[
0
]
->
reference
.
opcode
));
status
=
AE_TYPE
;
status
=
AE_TYPE
;
...
...
drivers/acpi/executer/exoparg2.c
View file @
c232f2a1
...
@@ -199,7 +199,8 @@ acpi_ex_opcode_2A_2T_1R (
...
@@ -199,7 +199,8 @@ acpi_ex_opcode_2A_2T_1R (
acpi_status
status
;
acpi_status
status
;
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_2T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_2T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
/*
/*
...
@@ -222,8 +223,10 @@ acpi_ex_opcode_2A_2T_1R (
...
@@ -222,8 +223,10 @@ acpi_ex_opcode_2A_2T_1R (
/* Quotient to return_desc1, remainder to return_desc2 */
/* Quotient to return_desc1, remainder to return_desc2 */
status
=
acpi_ut_divide
(
&
operand
[
0
]
->
integer
.
value
,
&
operand
[
1
]
->
integer
.
value
,
status
=
acpi_ut_divide
(
operand
[
0
]
->
integer
.
value
,
&
return_desc1
->
integer
.
value
,
&
return_desc2
->
integer
.
value
);
operand
[
1
]
->
integer
.
value
,
&
return_desc1
->
integer
.
value
,
&
return_desc2
->
integer
.
value
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
goto
cleanup
;
}
}
...
@@ -292,13 +295,13 @@ acpi_ex_opcode_2A_1T_1R (
...
@@ -292,13 +295,13 @@ acpi_ex_opcode_2A_1T_1R (
{
{
union
acpi_operand_object
**
operand
=
&
walk_state
->
operands
[
0
];
union
acpi_operand_object
**
operand
=
&
walk_state
->
operands
[
0
];
union
acpi_operand_object
*
return_desc
=
NULL
;
union
acpi_operand_object
*
return_desc
=
NULL
;
union
acpi_operand_object
*
temp_desc
=
NULL
;
u32
index
;
u32
index
;
acpi_status
status
=
AE_OK
;
acpi_status
status
=
AE_OK
;
acpi_size
length
;
acpi_size
length
;
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_1T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_1T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
/*
/*
...
@@ -331,52 +334,17 @@ acpi_ex_opcode_2A_1T_1R (
...
@@ -331,52 +334,17 @@ acpi_ex_opcode_2A_1T_1R (
/* return_desc will contain the remainder */
/* return_desc will contain the remainder */
status
=
acpi_ut_divide
(
&
operand
[
0
]
->
integer
.
value
,
&
operand
[
1
]
->
integer
.
value
,
status
=
acpi_ut_divide
(
operand
[
0
]
->
integer
.
value
,
NULL
,
&
return_desc
->
integer
.
value
);
operand
[
1
]
->
integer
.
value
,
NULL
,
&
return_desc
->
integer
.
value
);
break
;
break
;
case
AML_CONCAT_OP
:
/* Concatenate (Data1, Data2, Result) */
case
AML_CONCAT_OP
:
/* Concatenate (Data1, Data2, Result) */
/*
status
=
acpi_ex_do_concatenate
(
operand
[
0
],
operand
[
1
],
* Convert the second operand if necessary. The first operand
&
return_desc
,
walk_state
);
* determines the type of the second operand, (See the Data Types
* section of the ACPI specification.) Both object types are
* guaranteed to be either Integer/String/Buffer by the operand
* resolution mechanism above.
*/
switch
(
ACPI_GET_OBJECT_TYPE
(
operand
[
0
]))
{
case
ACPI_TYPE_INTEGER
:
status
=
acpi_ex_convert_to_integer
(
operand
[
1
],
&
temp_desc
,
walk_state
);
break
;
case
ACPI_TYPE_STRING
:
status
=
acpi_ex_convert_to_string
(
operand
[
1
],
&
temp_desc
,
16
,
ACPI_UINT32_MAX
,
walk_state
);
break
;
case
ACPI_TYPE_BUFFER
:
status
=
acpi_ex_convert_to_buffer
(
operand
[
1
],
&
temp_desc
,
walk_state
);
break
;
default:
ACPI_REPORT_ERROR
((
"Concat - invalid obj type: %X
\n
"
,
ACPI_GET_OBJECT_TYPE
(
operand
[
0
])));
status
=
AE_AML_INTERNAL
;
}
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
/*
* Both operands are now known to be the same object type
* (Both are Integer, String, or Buffer), and we can now perform the
* concatenation.
*/
status
=
acpi_ex_do_concatenate
(
operand
[
0
],
temp_desc
,
&
return_desc
,
walk_state
);
if
(
temp_desc
!=
operand
[
1
])
{
acpi_ut_remove_reference
(
temp_desc
);
}
break
;
break
;
...
@@ -387,55 +355,45 @@ acpi_ex_opcode_2A_1T_1R (
...
@@ -387,55 +355,45 @@ acpi_ex_opcode_2A_1T_1R (
* been converted.) Copy the raw buffer data to a new object of type String.
* been converted.) Copy the raw buffer data to a new object of type String.
*/
*/
/* Get the length of the new string */
/*
* Get the length of the new string. It is the smallest of:
* 1) Length of the input buffer
* 2) Max length as specified in the to_string operator
* 3) Length of input buffer up to a zero byte (null terminator)
*
* NOTE: A length of zero is ok, and will create a zero-length, null
* terminated string.
*/
length
=
0
;
length
=
0
;
if
(
operand
[
1
]
->
integer
.
value
==
0
)
{
/* Handle optional length value */
operand
[
1
]
->
integer
.
value
=
ACPI_INTEGER_MAX
;
}
while
((
length
<
operand
[
0
]
->
buffer
.
length
)
&&
while
((
length
<
operand
[
0
]
->
buffer
.
length
)
&&
(
length
<
operand
[
1
]
->
integer
.
value
)
&&
(
length
<
operand
[
1
]
->
integer
.
value
)
&&
(
operand
[
0
]
->
buffer
.
pointer
[
length
]))
{
(
operand
[
0
]
->
buffer
.
pointer
[
length
]))
{
length
++
;
length
++
;
}
if
(
length
>
ACPI_MAX_STRING_CONVERSION
)
{
if
(
length
>
ACPI_MAX_STRING_CONVERSION
)
{
status
=
AE_AML_STRING_LIMIT
;
status
=
AE_AML_STRING_LIMIT
;
goto
cleanup
;
goto
cleanup
;
}
}
/* Create the internal return object */
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
}
/* Allocate a new string
buffer (Length + 1 for null terminator)
*/
/* Allocate a new string
object
*/
return_desc
->
string
.
pointer
=
ACPI_MEM_CALLOCATE
(
length
+
1
);
return_desc
=
acpi_ut_create_string_object
(
length
);
if
(
!
return_desc
->
string
.
pointer
)
{
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
status
=
AE_NO_MEMORY
;
goto
cleanup
;
goto
cleanup
;
}
}
/* Copy the raw buffer data with no transform */
/* Copy the raw buffer data with no transform. NULL terminated already. */
ACPI_MEMCPY
(
return_desc
->
string
.
pointer
,
operand
[
0
]
->
buffer
.
pointer
,
length
);
/* Set the string length */
return_desc
->
string
.
length
=
(
u32
)
length
;
ACPI_MEMCPY
(
return_desc
->
string
.
pointer
,
operand
[
0
]
->
buffer
.
pointer
,
length
);
break
;
break
;
case
AML_CONCAT_RES_OP
:
/* concatenate_res_template (Buffer, Buffer, Result) (ACPI 2.0) */
case
AML_CONCAT_RES_OP
:
/* concatenate_res_template (Buffer, Buffer, Result) (ACPI 2.0) */
status
=
acpi_ex_concat_template
(
operand
[
0
],
operand
[
1
],
&
return_desc
,
walk_state
);
status
=
acpi_ex_concat_template
(
operand
[
0
],
operand
[
1
],
&
return_desc
,
walk_state
);
break
;
break
;
...
@@ -458,7 +416,8 @@ acpi_ex_opcode_2A_1T_1R (
...
@@ -458,7 +416,8 @@ acpi_ex_opcode_2A_1T_1R (
/* Object to be indexed is a Package */
/* Object to be indexed is a Package */
if
(
index
>=
operand
[
0
]
->
package
.
count
)
{
if
(
index
>=
operand
[
0
]
->
package
.
count
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Index value (%X) beyond package end (%X)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Index value (%X) beyond package end (%X)
\n
"
,
index
,
operand
[
0
]
->
package
.
count
));
index
,
operand
[
0
]
->
package
.
count
));
status
=
AE_AML_PACKAGE_LIMIT
;
status
=
AE_AML_PACKAGE_LIMIT
;
goto
cleanup
;
goto
cleanup
;
...
@@ -472,7 +431,8 @@ acpi_ex_opcode_2A_1T_1R (
...
@@ -472,7 +431,8 @@ acpi_ex_opcode_2A_1T_1R (
/* Object to be indexed is a Buffer */
/* Object to be indexed is a Buffer */
if
(
index
>=
operand
[
0
]
->
buffer
.
length
)
{
if
(
index
>=
operand
[
0
]
->
buffer
.
length
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Index value (%X) beyond end of buffer (%X)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Index value (%X) beyond end of buffer (%X)
\n
"
,
index
,
operand
[
0
]
->
buffer
.
length
));
index
,
operand
[
0
]
->
buffer
.
length
));
status
=
AE_AML_BUFFER_LIMIT
;
status
=
AE_AML_BUFFER_LIMIT
;
goto
cleanup
;
goto
cleanup
;
...
@@ -558,7 +518,8 @@ acpi_ex_opcode_2A_0T_1R (
...
@@ -558,7 +518,8 @@ acpi_ex_opcode_2A_0T_1R (
u8
logical_result
=
FALSE
;
u8
logical_result
=
FALSE
;
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_0T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
ACPI_FUNCTION_TRACE_STR
(
"ex_opcode_2A_0T_1R"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
));
/* Create the internal return object */
/* Create the internal return object */
...
@@ -572,18 +533,15 @@ acpi_ex_opcode_2A_0T_1R (
...
@@ -572,18 +533,15 @@ acpi_ex_opcode_2A_0T_1R (
/*
/*
* Execute the Opcode
* Execute the Opcode
*/
*/
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL
)
/* logical_op (Operand0, Operand1) */
{
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL_NUMERIC
)
/* logical_op (Operand0, Operand1) */
{
/* Both operands must be of the same type */
status
=
acpi_ex_do_logical_numeric_op
(
walk_state
->
opcode
,
operand
[
0
]
->
integer
.
value
,
operand
[
1
]
->
integer
.
value
,
if
(
ACPI_GET_OBJECT_TYPE
(
operand
[
0
])
!=
&
logical_result
);
ACPI_GET_OBJECT_TYPE
(
operand
[
1
]))
{
goto
store_logical_result
;
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
}
}
else
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL
)
/* logical_op (Operand0, Operand1) */
{
logical_result
=
acpi_ex_do_logical_op
(
walk_state
->
opcode
,
status
=
acpi_ex_do_logical_op
(
walk_state
->
opcode
,
operand
[
0
],
operand
[
0
],
operand
[
1
],
&
logical_result
);
operand
[
1
]);
goto
store_logical_result
;
goto
store_logical_result
;
}
}
...
...
drivers/acpi/executer/exregion.c
View file @
c232f2a1
...
@@ -121,7 +121,7 @@ acpi_ex_system_memory_space_handler (
...
@@ -121,7 +121,7 @@ acpi_ex_system_memory_space_handler (
* Hardware does not support non-aligned data transfers, we must verify
* Hardware does not support non-aligned data transfers, we must verify
* the request.
* the request.
*/
*/
(
void
)
acpi_ut_short_divide
((
acpi_integer
*
)
&
address
,
length
,
NULL
,
&
remainder
);
(
void
)
acpi_ut_short_divide
((
acpi_integer
)
address
,
length
,
NULL
,
&
remainder
);
if
(
remainder
!=
0
)
{
if
(
remainder
!=
0
)
{
return_ACPI_STATUS
(
AE_AML_ALIGNMENT
);
return_ACPI_STATUS
(
AE_AML_ALIGNMENT
);
}
}
...
...
drivers/acpi/executer/exresop.c
View file @
c232f2a1
...
@@ -160,7 +160,7 @@ acpi_ex_resolve_operands (
...
@@ -160,7 +160,7 @@ acpi_ex_resolve_operands (
return_ACPI_STATUS
(
AE_AML_INTERNAL
);
return_ACPI_STATUS
(
AE_AML_INTERNAL
);
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Opcode %X [%s]
operand_types=%
X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Opcode %X [%s]
required_operand_types=%8.8
X
\n
"
,
opcode
,
op_info
->
name
,
arg_types
));
opcode
,
op_info
->
name
,
arg_types
));
/*
/*
...
@@ -227,12 +227,13 @@ acpi_ex_resolve_operands (
...
@@ -227,12 +227,13 @@ acpi_ex_resolve_operands (
case
AML_LOAD_OP
:
/* ddb_handle from LOAD_OP or LOAD_TABLE_OP */
case
AML_LOAD_OP
:
/* ddb_handle from LOAD_OP or LOAD_TABLE_OP */
ACPI_DEBUG_ONLY_MEMBERS
(
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
ACPI_DEBUG_ONLY_MEMBERS
(
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Reference Opcode: %s
\n
"
,
op_info
->
name
)));
"Operand is a Reference, ref_opcode [%s]
\n
"
,
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
)));
break
;
break
;
default:
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown Reference Opcode %X [%s]
\n
"
,
"
Operand is a Reference,
Unknown Reference Opcode %X [%s]
\n
"
,
obj_desc
->
reference
.
opcode
,
obj_desc
->
reference
.
opcode
,
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
));
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
));
...
@@ -398,7 +399,7 @@ acpi_ex_resolve_operands (
...
@@ -398,7 +399,7 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a STRING or BUFFER
* But we can implicitly convert from a STRING or BUFFER
* Aka - "Implicit Source Operand Conversion"
* Aka - "Implicit Source Operand Conversion"
*/
*/
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
stack_ptr
,
walk_state
);
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
stack_ptr
,
16
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_TYPE
)
{
if
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
@@ -420,7 +421,7 @@ acpi_ex_resolve_operands (
...
@@ -420,7 +421,7 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a STRING or INTEGER
* But we can implicitly convert from a STRING or INTEGER
* Aka - "Implicit Source Operand Conversion"
* Aka - "Implicit Source Operand Conversion"
*/
*/
status
=
acpi_ex_convert_to_buffer
(
obj_desc
,
stack_ptr
,
walk_state
);
status
=
acpi_ex_convert_to_buffer
(
obj_desc
,
stack_ptr
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_TYPE
)
{
if
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
@@ -442,7 +443,8 @@ acpi_ex_resolve_operands (
...
@@ -442,7 +443,8 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a BUFFER or INTEGER
* But we can implicitly convert from a BUFFER or INTEGER
* Aka - "Implicit Source Operand Conversion"
* Aka - "Implicit Source Operand Conversion"
*/
*/
status
=
acpi_ex_convert_to_string
(
obj_desc
,
stack_ptr
,
16
,
ACPI_UINT32_MAX
,
walk_state
);
status
=
acpi_ex_convert_to_string
(
obj_desc
,
stack_ptr
,
ACPI_IMPLICIT_CONVERT_HEX
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_TYPE
)
{
if
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
@@ -494,7 +496,7 @@ acpi_ex_resolve_operands (
...
@@ -494,7 +496,7 @@ acpi_ex_resolve_operands (
/* Highest priority conversion is to type Buffer */
/* Highest priority conversion is to type Buffer */
status
=
acpi_ex_convert_to_buffer
(
obj_desc
,
stack_ptr
,
walk_state
);
status
=
acpi_ex_convert_to_buffer
(
obj_desc
,
stack_ptr
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
...
...
drivers/acpi/executer/exstore.c
View file @
c232f2a1
...
@@ -129,7 +129,8 @@ acpi_ex_store (
...
@@ -129,7 +129,8 @@ acpi_ex_store (
/* Destination is not a Reference object */
/* Destination is not a Reference object */
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Destination is not a Reference or Constant object [%p]
\n
"
,
dest_desc
));
"Target is not a Reference or Constant object - %s [%p]
\n
"
,
acpi_ut_get_object_type_name
(
dest_desc
),
dest_desc
));
ACPI_DUMP_STACK_ENTRY
(
source_desc
);
ACPI_DUMP_STACK_ENTRY
(
source_desc
);
ACPI_DUMP_STACK_ENTRY
(
dest_desc
);
ACPI_DUMP_STACK_ENTRY
(
dest_desc
);
...
@@ -182,22 +183,36 @@ acpi_ex_store (
...
@@ -182,22 +183,36 @@ acpi_ex_store (
* Storing to the Debug object causes the value stored to be
* Storing to the Debug object causes the value stored to be
* displayed and otherwise has no effect -- see ACPI Specification
* displayed and otherwise has no effect -- see ACPI Specification
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"**** Write to Debug Object: ****:
\n\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"**** Write to Debug Object: Object %p %s ****:
\n\n
"
,
source_desc
,
acpi_ut_get_object_type_name
(
source_desc
)));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"[ACPI Debug] %s: "
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"[ACPI Debug] %s: "
,
acpi_ut_get_object_type_name
(
source_desc
)));
acpi_ut_get_object_type_name
(
source_desc
)));
if
(
!
acpi_ut_valid_internal_object
(
source_desc
))
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"%p, Invalid Internal Object!
\n
"
,
source_desc
));
break
;
}
switch
(
ACPI_GET_OBJECT_TYPE
(
source_desc
))
{
switch
(
ACPI_GET_OBJECT_TYPE
(
source_desc
))
{
case
ACPI_TYPE_INTEGER
:
case
ACPI_TYPE_INTEGER
:
if
(
acpi_gbl_integer_byte_width
==
4
)
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"0x%8.8X
\n
"
,
(
u32
)
source_desc
->
integer
.
value
));
}
else
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"0x%8.8X%8.8X
\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"0x%8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
source_desc
->
integer
.
value
)));
ACPI_FORMAT_UINT64
(
source_desc
->
integer
.
value
)));
}
break
;
break
;
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Length 0x%.2X
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
"
,
(
u32
)
source_desc
->
buffer
.
length
));
(
u32
)
source_desc
->
buffer
.
length
));
ACPI_DUMP_BUFFER
(
source_desc
->
buffer
.
pointer
,
ACPI_DUMP_BUFFER
(
source_desc
->
buffer
.
pointer
,
(
source_desc
->
buffer
.
length
<
32
)
?
source_desc
->
buffer
.
length
:
32
);
(
source_desc
->
buffer
.
length
<
32
)
?
source_desc
->
buffer
.
length
:
32
);
...
@@ -206,14 +221,14 @@ acpi_ex_store (
...
@@ -206,14 +221,14 @@ acpi_ex_store (
case
ACPI_TYPE_STRING
:
case
ACPI_TYPE_STRING
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Length 0x%.2X,
\"
%s
\"\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
\"
%s
\"\n
"
,
source_desc
->
string
.
length
,
source_desc
->
string
.
pointer
));
source_desc
->
string
.
length
,
source_desc
->
string
.
pointer
));
break
;
break
;
case
ACPI_TYPE_PACKAGE
:
case
ACPI_TYPE_PACKAGE
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Size 0x%.2X
Elements Ptr - %p
\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
Elements Ptr - %p
\n
"
,
source_desc
->
package
.
count
,
source_desc
->
package
.
elements
));
source_desc
->
package
.
count
,
source_desc
->
package
.
elements
));
break
;
break
;
...
...
drivers/acpi/executer/exsystem.c
View file @
c232f2a1
...
@@ -167,7 +167,7 @@ acpi_ex_system_do_stall (
...
@@ -167,7 +167,7 @@ acpi_ex_system_do_stall (
acpi_status
acpi_status
acpi_ex_system_do_suspend
(
acpi_ex_system_do_suspend
(
u32
how_long
)
acpi_integer
how_long
)
{
{
acpi_status
status
;
acpi_status
status
;
...
@@ -179,8 +179,7 @@ acpi_ex_system_do_suspend (
...
@@ -179,8 +179,7 @@ acpi_ex_system_do_suspend (
acpi_ex_exit_interpreter
();
acpi_ex_exit_interpreter
();
acpi_os_sleep
((
u16
)
(
how_long
/
(
u32
)
1000
),
acpi_os_sleep
(
how_long
);
(
u16
)
(
how_long
%
(
u32
)
1000
));
/* And now we must get the interpreter again */
/* And now we must get the interpreter again */
...
...
drivers/acpi/executer/exutils.c
View file @
c232f2a1
...
@@ -280,25 +280,25 @@ acpi_ex_digits_needed (
...
@@ -280,25 +280,25 @@ acpi_ex_digits_needed (
{
{
u32
num_digits
;
u32
num_digits
;
acpi_integer
current_value
;
acpi_integer
current_value
;
acpi_integer
quotient
;
ACPI_FUNCTION_TRACE
(
"ex_digits_needed"
);
ACPI_FUNCTION_TRACE
(
"ex_digits_needed"
);
/*
/* acpi_integer is unsigned, so we don't worry about a '-' prefix */
* acpi_integer is unsigned, so we don't worry about a '-'
*/
if
(
value
==
0
)
{
if
((
current_value
=
value
)
==
0
)
{
return_VALUE
(
1
);
return_VALUE
(
1
);
}
}
current_value
=
value
;
num_digits
=
0
;
num_digits
=
0
;
/* Count the digits in the requested base */
while
(
current_value
)
{
while
(
current_value
)
{
(
void
)
acpi_ut_short_divide
(
&
current_value
,
base
,
&
quotient
,
NULL
);
(
void
)
acpi_ut_short_divide
(
current_value
,
base
,
&
current_value
,
NULL
);
num_digits
++
;
num_digits
++
;
current_value
=
quotient
;
}
}
return_VALUE
(
num_digits
);
return_VALUE
(
num_digits
);
...
@@ -361,7 +361,6 @@ acpi_ex_unsigned_integer_to_string (
...
@@ -361,7 +361,6 @@ acpi_ex_unsigned_integer_to_string (
u32
count
;
u32
count
;
u32
digits_needed
;
u32
digits_needed
;
u32
remainder
;
u32
remainder
;
acpi_integer
quotient
;
ACPI_FUNCTION_ENTRY
();
ACPI_FUNCTION_ENTRY
();
...
@@ -371,9 +370,8 @@ acpi_ex_unsigned_integer_to_string (
...
@@ -371,9 +370,8 @@ acpi_ex_unsigned_integer_to_string (
out_string
[
digits_needed
]
=
0
;
out_string
[
digits_needed
]
=
0
;
for
(
count
=
digits_needed
;
count
>
0
;
count
--
)
{
for
(
count
=
digits_needed
;
count
>
0
;
count
--
)
{
(
void
)
acpi_ut_short_divide
(
&
value
,
10
,
&
quotient
,
&
remainder
);
(
void
)
acpi_ut_short_divide
(
value
,
10
,
&
value
,
&
remainder
);
out_string
[
count
-
1
]
=
(
char
)
(
'0'
+
remainder
);
\
out_string
[
count
-
1
]
=
(
char
)
(
'0'
+
remainder
);
\
value
=
quotient
;
}
}
}
}
...
...
drivers/acpi/hardware/hwregs.c
View file @
c232f2a1
...
@@ -709,6 +709,7 @@ acpi_hw_low_level_read (
...
@@ -709,6 +709,7 @@ acpi_hw_low_level_read (
u32
*
value
,
u32
*
value
,
struct
acpi_generic_address
*
reg
)
struct
acpi_generic_address
*
reg
)
{
{
u64
address
;
acpi_status
status
;
acpi_status
status
;
...
@@ -720,8 +721,14 @@ acpi_hw_low_level_read (
...
@@ -720,8 +721,14 @@ acpi_hw_low_level_read (
* a non-zero address within. However, don't return an error
* a non-zero address within. However, don't return an error
* because the PM1A/B code must not fail if B isn't present.
* because the PM1A/B code must not fail if B isn't present.
*/
*/
if
((
!
reg
)
||
if
(
!
reg
)
{
(
!
reg
->
address
))
{
return
(
AE_OK
);
}
/* Get a local copy of the address. Handles possible alignment issues */
ACPI_MOVE_64_TO_64
(
&
address
,
&
reg
->
address
);
if
(
!
address
)
{
return
(
AE_OK
);
return
(
AE_OK
);
}
}
*
value
=
0
;
*
value
=
0
;
...
@@ -734,14 +741,14 @@ acpi_hw_low_level_read (
...
@@ -734,14 +741,14 @@ acpi_hw_low_level_read (
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
status
=
acpi_os_read_memory
(
status
=
acpi_os_read_memory
(
(
acpi_physical_address
)
reg
->
address
,
(
acpi_physical_address
)
address
,
value
,
width
);
value
,
width
);
break
;
break
;
case
ACPI_ADR_SPACE_SYSTEM_IO
:
case
ACPI_ADR_SPACE_SYSTEM_IO
:
status
=
acpi_os_read_port
((
acpi_io_address
)
reg
->
address
,
status
=
acpi_os_read_port
((
acpi_io_address
)
address
,
value
,
width
);
value
,
width
);
break
;
break
;
...
@@ -754,7 +761,7 @@ acpi_hw_low_level_read (
...
@@ -754,7 +761,7 @@ acpi_hw_low_level_read (
ACPI_DEBUG_PRINT
((
ACPI_DB_IO
,
"Read: %8.8X width %2d from %8.8X%8.8X (%s)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_IO
,
"Read: %8.8X width %2d from %8.8X%8.8X (%s)
\n
"
,
*
value
,
width
,
*
value
,
width
,
ACPI_FORMAT_UINT64
(
reg
->
address
),
ACPI_FORMAT_UINT64
(
address
),
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
return
(
status
);
return
(
status
);
...
@@ -781,6 +788,7 @@ acpi_hw_low_level_write (
...
@@ -781,6 +788,7 @@ acpi_hw_low_level_write (
u32
value
,
u32
value
,
struct
acpi_generic_address
*
reg
)
struct
acpi_generic_address
*
reg
)
{
{
u64
address
;
acpi_status
status
;
acpi_status
status
;
...
@@ -792,8 +800,14 @@ acpi_hw_low_level_write (
...
@@ -792,8 +800,14 @@ acpi_hw_low_level_write (
* a non-zero address within. However, don't return an error
* a non-zero address within. However, don't return an error
* because the PM1A/B code must not fail if B isn't present.
* because the PM1A/B code must not fail if B isn't present.
*/
*/
if
((
!
reg
)
||
if
(
!
reg
)
{
(
!
reg
->
address
))
{
return
(
AE_OK
);
}
/* Get a local copy of the address. Handles possible alignment issues */
ACPI_MOVE_64_TO_64
(
&
address
,
&
reg
->
address
);
if
(
!
address
)
{
return
(
AE_OK
);
return
(
AE_OK
);
}
}
...
@@ -805,14 +819,14 @@ acpi_hw_low_level_write (
...
@@ -805,14 +819,14 @@ acpi_hw_low_level_write (
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
status
=
acpi_os_write_memory
(
status
=
acpi_os_write_memory
(
(
acpi_physical_address
)
reg
->
address
,
(
acpi_physical_address
)
address
,
value
,
width
);
value
,
width
);
break
;
break
;
case
ACPI_ADR_SPACE_SYSTEM_IO
:
case
ACPI_ADR_SPACE_SYSTEM_IO
:
status
=
acpi_os_write_port
((
acpi_io_address
)
reg
->
address
,
status
=
acpi_os_write_port
((
acpi_io_address
)
address
,
value
,
width
);
value
,
width
);
break
;
break
;
...
@@ -825,7 +839,7 @@ acpi_hw_low_level_write (
...
@@ -825,7 +839,7 @@ acpi_hw_low_level_write (
ACPI_DEBUG_PRINT
((
ACPI_DB_IO
,
"Wrote: %8.8X width %2d to %8.8X%8.8X (%s)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_IO
,
"Wrote: %8.8X width %2d to %8.8X%8.8X (%s)
\n
"
,
value
,
width
,
value
,
width
,
ACPI_FORMAT_UINT64
(
reg
->
address
),
ACPI_FORMAT_UINT64
(
address
),
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
return
(
status
);
return
(
status
);
...
...
drivers/acpi/hardware/hwtimer.c
View file @
c232f2a1
...
@@ -149,10 +149,9 @@ acpi_get_timer_duration (
...
@@ -149,10 +149,9 @@ acpi_get_timer_duration (
u32
end_ticks
,
u32
end_ticks
,
u32
*
time_elapsed
)
u32
*
time_elapsed
)
{
{
u32
delta_ticks
=
0
;
union
uint64_overlay
normalized_ticks
;
acpi_status
status
;
acpi_status
status
;
acpi_integer
out_quotient
;
u32
delta_ticks
;
acpi_integer
quotient
;
ACPI_FUNCTION_TRACE
(
"acpi_get_timer_duration"
);
ACPI_FUNCTION_TRACE
(
"acpi_get_timer_duration"
);
...
@@ -164,7 +163,7 @@ acpi_get_timer_duration (
...
@@ -164,7 +163,7 @@ acpi_get_timer_duration (
/*
/*
* Compute Tick Delta:
* Compute Tick Delta:
* Handle (max one) timer rollovers on 24- versus 32-bit timers.
* Handle (max one) timer rollovers on 24-
bit
versus 32-bit timers.
*/
*/
if
(
start_ticks
<
end_ticks
)
{
if
(
start_ticks
<
end_ticks
)
{
delta_ticks
=
end_ticks
-
start_ticks
;
delta_ticks
=
end_ticks
-
start_ticks
;
...
@@ -181,22 +180,20 @@ acpi_get_timer_duration (
...
@@ -181,22 +180,20 @@ acpi_get_timer_duration (
delta_ticks
=
(
0xFFFFFFFF
-
start_ticks
)
+
end_ticks
;
delta_ticks
=
(
0xFFFFFFFF
-
start_ticks
)
+
end_ticks
;
}
}
}
}
else
{
else
/* start_ticks == end_ticks */
{
*
time_elapsed
=
0
;
*
time_elapsed
=
0
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
/*
/*
* Compute Duration (Requires a 64-bit divide):
* Compute Duration (Requires a 64-bit
multiply and
divide):
*
*
* time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY;
* time_elapsed = (delta_ticks * 1000000) / PM_TIMER_FREQUENCY;
*/
*/
normalized_ticks
.
full
=
((
u64
)
delta_ticks
)
*
1000000
;
status
=
acpi_ut_short_divide
(((
u64
)
delta_ticks
)
*
1000000
,
PM_TIMER_FREQUENCY
,
&
quotient
,
NULL
);
status
=
acpi_ut_short_divide
(
&
normalized_ticks
.
full
,
PM_TIMER_FREQUENCY
,
&
out_quotient
,
NULL
);
*
time_elapsed
=
(
u32
)
out_
quotient
;
*
time_elapsed
=
(
u32
)
quotient
;
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
...
...
drivers/acpi/namespace/nsaccess.c
View file @
c232f2a1
...
@@ -161,8 +161,10 @@ acpi_ns_root_initialize (void)
...
@@ -161,8 +161,10 @@ acpi_ns_root_initialize (void)
#if defined (_ACPI_ASL_COMPILER) || defined (_ACPI_DUMP_App)
#if defined (_ACPI_ASL_COMPILER) || defined (_ACPI_DUMP_App)
/* i_aSL Compiler cheats by putting parameter count in the owner_iD */
/*
* i_aSL Compiler cheats by putting parameter count
* in the owner_iD
*/
new_node
->
owner_id
=
obj_desc
->
method
.
param_count
;
new_node
->
owner_id
=
obj_desc
->
method
.
param_count
;
#else
#else
/* Mark this as a very SPECIAL method */
/* Mark this as a very SPECIAL method */
...
@@ -236,7 +238,8 @@ acpi_ns_root_initialize (void)
...
@@ -236,7 +238,8 @@ acpi_ns_root_initialize (void)
/* Store pointer to value descriptor in the Node */
/* Store pointer to value descriptor in the Node */
status
=
acpi_ns_attach_object
(
new_node
,
obj_desc
,
ACPI_GET_OBJECT_TYPE
(
obj_desc
));
status
=
acpi_ns_attach_object
(
new_node
,
obj_desc
,
ACPI_GET_OBJECT_TYPE
(
obj_desc
));
/* Remove local reference to the object */
/* Remove local reference to the object */
...
@@ -462,7 +465,8 @@ acpi_ns_lookup (
...
@@ -462,7 +465,8 @@ acpi_ns_lookup (
type
=
this_node
->
type
;
type
=
this_node
->
type
;
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Prefix-only Pathname (Zero name segments), Flags=%X
\n
"
,
flags
));
"Prefix-only Pathname (Zero name segments), Flags=%X
\n
"
,
flags
));
break
;
break
;
case
AML_DUAL_NAME_PREFIX
:
case
AML_DUAL_NAME_PREFIX
:
...
...
drivers/acpi/namespace/nsdump.c
View file @
c232f2a1
...
@@ -198,7 +198,8 @@ acpi_ns_dump_one_object (
...
@@ -198,7 +198,8 @@ acpi_ns_dump_one_object (
}
}
if
(
!
acpi_ut_valid_acpi_name
(
this_node
->
name
.
integer
))
{
if
(
!
acpi_ut_valid_acpi_name
(
this_node
->
name
.
integer
))
{
ACPI_REPORT_WARNING
((
"Invalid ACPI Name %08X
\n
"
,
this_node
->
name
.
integer
));
ACPI_REPORT_WARNING
((
"Invalid ACPI Name %08X
\n
"
,
this_node
->
name
.
integer
));
}
}
/*
/*
...
@@ -226,8 +227,7 @@ acpi_ns_dump_one_object (
...
@@ -226,8 +227,7 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_PROCESSOR
:
case
ACPI_TYPE_PROCESSOR
:
acpi_os_printf
(
"ID %X Len %.4X Addr %p
\n
"
,
acpi_os_printf
(
"ID %X Len %.4X Addr %p
\n
"
,
obj_desc
->
processor
.
proc_id
,
obj_desc
->
processor
.
proc_id
,
obj_desc
->
processor
.
length
,
obj_desc
->
processor
.
length
,
(
char
*
)
obj_desc
->
processor
.
address
);
(
char
*
)
obj_desc
->
processor
.
address
);
break
;
break
;
...
@@ -242,8 +242,7 @@ acpi_ns_dump_one_object (
...
@@ -242,8 +242,7 @@ acpi_ns_dump_one_object (
acpi_os_printf
(
"Args %X Len %.4X Aml %p
\n
"
,
acpi_os_printf
(
"Args %X Len %.4X Aml %p
\n
"
,
(
u32
)
obj_desc
->
method
.
param_count
,
(
u32
)
obj_desc
->
method
.
param_count
,
obj_desc
->
method
.
aml_length
,
obj_desc
->
method
.
aml_length
,
obj_desc
->
method
.
aml_start
);
obj_desc
->
method
.
aml_start
);
break
;
break
;
...
@@ -298,7 +297,8 @@ acpi_ns_dump_one_object (
...
@@ -298,7 +297,8 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_REGION
:
case
ACPI_TYPE_REGION
:
acpi_os_printf
(
"[%s]"
,
acpi_ut_get_region_name
(
obj_desc
->
region
.
space_id
));
acpi_os_printf
(
"[%s]"
,
acpi_ut_get_region_name
(
obj_desc
->
region
.
space_id
));
if
(
obj_desc
->
region
.
flags
&
AOPOBJ_DATA_VALID
)
{
if
(
obj_desc
->
region
.
flags
&
AOPOBJ_DATA_VALID
)
{
acpi_os_printf
(
" Addr %8.8X%8.8X Len %.4X
\n
"
,
acpi_os_printf
(
" Addr %8.8X%8.8X Len %.4X
\n
"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
region
.
address
),
ACPI_FORMAT_UINT64
(
obj_desc
->
region
.
address
),
...
@@ -353,7 +353,8 @@ acpi_ns_dump_one_object (
...
@@ -353,7 +353,8 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_LOCAL_ALIAS
:
case
ACPI_TYPE_LOCAL_ALIAS
:
case
ACPI_TYPE_LOCAL_METHOD_ALIAS
:
case
ACPI_TYPE_LOCAL_METHOD_ALIAS
:
acpi_os_printf
(
"Target %4.4s (%p)
\n
"
,
acpi_ut_get_node_name
(
obj_desc
),
obj_desc
);
acpi_os_printf
(
"Target %4.4s (%p)
\n
"
,
acpi_ut_get_node_name
(
obj_desc
),
obj_desc
);
break
;
break
;
default:
default:
...
@@ -471,7 +472,8 @@ acpi_ns_dump_one_object (
...
@@ -471,7 +472,8 @@ acpi_ns_dump_one_object (
obj_type
=
ACPI_GET_OBJECT_TYPE
(
obj_desc
);
obj_type
=
ACPI_GET_OBJECT_TYPE
(
obj_desc
);
if
(
obj_type
>
ACPI_TYPE_LOCAL_MAX
)
{
if
(
obj_type
>
ACPI_TYPE_LOCAL_MAX
)
{
acpi_os_printf
(
"(Ptr to ACPI Object type %X [UNKNOWN])
\n
"
,
obj_type
);
acpi_os_printf
(
"(Ptr to ACPI Object type %X [UNKNOWN])
\n
"
,
obj_type
);
bytes_to_dump
=
32
;
bytes_to_dump
=
32
;
}
}
else
{
else
{
...
@@ -484,7 +486,8 @@ acpi_ns_dump_one_object (
...
@@ -484,7 +486,8 @@ acpi_ns_dump_one_object (
default:
default:
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_ut_get_descriptor_name
(
obj_desc
));
acpi_ut_get_descriptor_name
(
obj_desc
));
bytes_to_dump
=
16
;
bytes_to_dump
=
16
;
break
;
break
;
...
...
drivers/acpi/namespace/nsdumpdv.c
View file @
c232f2a1
...
@@ -91,9 +91,9 @@ acpi_ns_dump_one_device (
...
@@ -91,9 +91,9 @@ acpi_ns_dump_one_device (
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" "
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" "
));
}
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" HID: %s, ADR: %8.8X%8.8X, Status: %X
\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
info
->
hardware_id
.
value
,
" HID: %s, ADR: %8.8X%8.8X, Status: %X
\n
"
,
ACPI_FORMAT_UINT64
(
info
->
address
),
info
->
hardware_id
.
value
,
ACPI_FORMAT_UINT64
(
info
->
address
),
info
->
current_status
));
info
->
current_status
));
ACPI_MEM_FREE
(
info
);
ACPI_MEM_FREE
(
info
);
}
}
...
@@ -133,7 +133,8 @@ acpi_ns_dump_root_devices (void)
...
@@ -133,7 +133,8 @@ acpi_ns_dump_root_devices (void)
return
;
return
;
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Display of all devices in the namespace:
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Display of all devices in the namespace:
\n
"
));
status
=
acpi_ns_walk_namespace
(
ACPI_TYPE_DEVICE
,
sys_bus_handle
,
status
=
acpi_ns_walk_namespace
(
ACPI_TYPE_DEVICE
,
sys_bus_handle
,
ACPI_UINT32_MAX
,
ACPI_NS_WALK_NO_UNLOCK
,
ACPI_UINT32_MAX
,
ACPI_NS_WALK_NO_UNLOCK
,
...
...
drivers/acpi/namespace/nseval.c
View file @
c232f2a1
...
@@ -57,14 +57,9 @@
...
@@ -57,14 +57,9 @@
*
*
* FUNCTION: acpi_ns_evaluate_relative
* FUNCTION: acpi_ns_evaluate_relative
*
*
* PARAMETERS: Handle - The relative containing object
* PARAMETERS: Pathname - Name of method to execute, If NULL, the
* Pathname - Name of method to execute, If NULL, the
* handle is the object to execute
* handle is the object to execute
* Params - List of parameters to pass to the method,
* Info - Method info block
* terminated by NULL. Params itself may be
* NULL if no parameters are being passed.
* return_object - Where to put method's return value (if
* any). If NULL, no value is returned.
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -138,8 +133,7 @@ acpi_ns_evaluate_relative (
...
@@ -138,8 +133,7 @@ acpi_ns_evaluate_relative (
}
}
/*
/*
* Now that we have a handle to the object, we can attempt
* Now that we have a handle to the object, we can attempt to evaluate it.
* to evaluate it.
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
pathname
,
node
,
acpi_ns_get_attached_object
(
node
)));
pathname
,
node
,
acpi_ns_get_attached_object
(
node
)));
...
@@ -213,14 +207,14 @@ acpi_ns_evaluate_by_name (
...
@@ -213,14 +207,14 @@ acpi_ns_evaluate_by_name (
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Object at [%s] was not found, status=%.4X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Object at [%s] was not found, status=%.4X
\n
"
,
pathname
,
status
));
pathname
,
status
));
goto
cleanup
;
goto
cleanup
;
}
}
/*
/*
* Now that we have a handle to the object, we can attempt
* Now that we have a handle to the object, we can attempt to evaluate it.
* to evaluate it.
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
pathname
,
info
->
node
,
acpi_ns_get_attached_object
(
info
->
node
)));
pathname
,
info
->
node
,
acpi_ns_get_attached_object
(
info
->
node
)));
...
@@ -303,9 +297,8 @@ acpi_ns_evaluate_by_handle (
...
@@ -303,9 +297,8 @@ acpi_ns_evaluate_by_handle (
}
}
/*
/*
* For a method alias, we must grab the actual method node
* For a method alias, we must grab the actual method node so that proper
* so that proper scoping context will be established
* scoping context will be established before execution.
* before execution.
*/
*/
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_LOCAL_METHOD_ALIAS
)
{
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_LOCAL_METHOD_ALIAS
)
{
info
->
node
=
ACPI_CAST_PTR
(
struct
acpi_namespace_node
,
info
->
node
->
object
);
info
->
node
=
ACPI_CAST_PTR
(
struct
acpi_namespace_node
,
info
->
node
->
object
);
...
@@ -314,11 +307,9 @@ acpi_ns_evaluate_by_handle (
...
@@ -314,11 +307,9 @@ acpi_ns_evaluate_by_handle (
/*
/*
* Two major cases here:
* Two major cases here:
* 1) The object is an actual control method -- execute it.
* 1) The object is an actual control method -- execute it.
* 2) The object is not a method -- just return it's current
* 2) The object is not a method -- just return it's current value
* value
*
*
* In both cases, the namespace is unlocked by the
* In both cases, the namespace is unlocked by the acpi_ns* procedure
* acpi_ns* procedure
*/
*/
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_METHOD
)
{
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_METHOD
)
{
/*
/*
...
@@ -328,15 +319,13 @@ acpi_ns_evaluate_by_handle (
...
@@ -328,15 +319,13 @@ acpi_ns_evaluate_by_handle (
}
}
else
{
else
{
/*
/*
* Case 2) Object is NOT a method, just return its
* Case 2) Object is NOT a method, just return its current value
* current value
*/
*/
status
=
acpi_ns_get_object_value
(
info
);
status
=
acpi_ns_get_object_value
(
info
);
}
}
/*
/*
* Check if there is a return value on the stack that must
* Check if there is a return value on the stack that must be dealt with
* be dealt with
*/
*/
if
(
status
==
AE_CTRL_RETURN_VALUE
)
{
if
(
status
==
AE_CTRL_RETURN_VALUE
)
{
/* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
/* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
...
@@ -345,8 +334,8 @@ acpi_ns_evaluate_by_handle (
...
@@ -345,8 +334,8 @@ acpi_ns_evaluate_by_handle (
}
}
/*
/*
* Namespace was unlocked by the handling acpi_ns* function,
* Namespace was unlocked by the handling acpi_ns* function,
so we
*
so we
just return
* just return
*/
*/
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
...
@@ -356,12 +345,7 @@ acpi_ns_evaluate_by_handle (
...
@@ -356,12 +345,7 @@ acpi_ns_evaluate_by_handle (
*
*
* FUNCTION: acpi_ns_execute_control_method
* FUNCTION: acpi_ns_execute_control_method
*
*
* PARAMETERS: method_node - The method to execute
* PARAMETERS: Info - Method info block (w/params)
* Params - List of parameters to pass to the method,
* terminated by NULL. Params itself may be
* NULL if no parameters are being passed.
* return_obj_desc - List of result objects to be returned
* from the method.
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -430,8 +414,7 @@ acpi_ns_execute_control_method (
...
@@ -430,8 +414,7 @@ acpi_ns_execute_control_method (
*
*
* FUNCTION: acpi_ns_get_object_value
* FUNCTION: acpi_ns_get_object_value
*
*
* PARAMETERS: Node - The object
* PARAMETERS: Info - Method info block (w/params)
* return_obj_desc - Where the objects value is returned
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -453,28 +436,25 @@ acpi_ns_get_object_value (
...
@@ -453,28 +436,25 @@ acpi_ns_get_object_value (
/*
/*
* Objects require additional resolution steps (e.g., the
* Objects require additional resolution steps (e.g., the
Node may be a
*
Node may be a field that must be read, etc.) -- we can't just grab
*
field that must be read, etc.) -- we can't just grab the object out of
* the
object out of the
node.
* the node.
*/
*/
/*
/*
* Use resolve_node_to_value() to get the associated value. This call
* Use resolve_node_to_value() to get the associated value. This call always
* always deletes obj_desc (allocated above).
* deletes obj_desc (allocated above).
*
*
* NOTE: we can get away with passing in NULL for a walk state
* NOTE: we can get away with passing in NULL for a walk state because
* because obj_desc is guaranteed to not be a reference to either
* obj_desc is guaranteed to not be a reference to either a method local or
* a method local or a method argument (because this interface can only be
* a method argument (because this interface can only be called from the
* called from the acpi_evaluate external interface, never called from
* acpi_evaluate external interface, never called from a running method.)
* a running control method.)
*
*
* Even though we do not directly invoke the interpreter for this, we must
* Even though we do not directly invoke the interpreter
* enter it because we could access an opregion. The opregion access code
* for this, we must enter it because we could access an opregion.
* assumes that the interpreter is locked.
* The opregion access code assumes that the interpreter
*
* is locked.
* We must release the namespace lock before entering the intepreter.
*
* We must release the namespace lock before entering the
* intepreter.
*/
*/
status
=
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
status
=
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
...
@@ -485,16 +465,18 @@ acpi_ns_get_object_value (
...
@@ -485,16 +465,18 @@ acpi_ns_get_object_value (
if
(
ACPI_SUCCESS
(
status
))
{
if
(
ACPI_SUCCESS
(
status
))
{
status
=
acpi_ex_resolve_node_to_value
(
&
resolved_node
,
NULL
);
status
=
acpi_ex_resolve_node_to_value
(
&
resolved_node
,
NULL
);
/*
/*
* If acpi_ex_resolve_node_to_value() succeeded, the return value was
* If acpi_ex_resolve_node_to_value() succeeded, the return value was
placed
*
placed
in resolved_node.
* in resolved_node.
*/
*/
acpi_ex_exit_interpreter
();
acpi_ex_exit_interpreter
();
if
(
ACPI_SUCCESS
(
status
))
{
if
(
ACPI_SUCCESS
(
status
))
{
status
=
AE_CTRL_RETURN_VALUE
;
status
=
AE_CTRL_RETURN_VALUE
;
info
->
return_object
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
resolved_node
);
info
->
return_object
=
ACPI_CAST_PTR
(
union
acpi_operand_object
,
resolved_node
);
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Returning object %p [%s]
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Returning object %p [%s]
\n
"
,
info
->
return_object
,
acpi_ut_get_object_type_name
(
info
->
return_object
)));
info
->
return_object
,
acpi_ut_get_object_type_name
(
info
->
return_object
)));
}
}
}
}
...
...
drivers/acpi/namespace/nsinit.c
View file @
c232f2a1
...
@@ -77,7 +77,8 @@ acpi_ns_initialize_objects (
...
@@ -77,7 +77,8 @@ acpi_ns_initialize_objects (
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
"**** Starting initialization of namespace objects ****
\n
"
));
"**** Starting initialization of namespace objects ****
\n
"
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"Completing Region/Field/Buffer/Package initialization:"
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"Completing Region/Field/Buffer/Package initialization:"
));
/* Set all init info to zero */
/* Set all init info to zero */
...
@@ -142,7 +143,8 @@ acpi_ns_initialize_devices (
...
@@ -142,7 +143,8 @@ acpi_ns_initialize_devices (
info
.
num_STA
=
0
;
info
.
num_STA
=
0
;
info
.
num_INI
=
0
;
info
.
num_INI
=
0
;
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"Executing all Device _STA and_INI methods:"
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"Executing all Device _STA and_INI methods:"
));
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
...
@@ -257,8 +259,8 @@ acpi_ns_init_one_object (
...
@@ -257,8 +259,8 @@ acpi_ns_init_one_object (
}
}
/*
/*
* Each of these types can contain executable AML code within
* Each of these types can contain executable AML code within
the
*
the
declaration.
* declaration.
*/
*/
switch
(
type
)
{
switch
(
type
)
{
case
ACPI_TYPE_REGION
:
case
ACPI_TYPE_REGION
:
...
@@ -267,21 +269,18 @@ acpi_ns_init_one_object (
...
@@ -267,21 +269,18 @@ acpi_ns_init_one_object (
status
=
acpi_ds_get_region_arguments
(
obj_desc
);
status
=
acpi_ds_get_region_arguments
(
obj_desc
);
break
;
break
;
case
ACPI_TYPE_BUFFER_FIELD
:
case
ACPI_TYPE_BUFFER_FIELD
:
info
->
field_init
++
;
info
->
field_init
++
;
status
=
acpi_ds_get_buffer_field_arguments
(
obj_desc
);
status
=
acpi_ds_get_buffer_field_arguments
(
obj_desc
);
break
;
break
;
case
ACPI_TYPE_BUFFER
:
case
ACPI_TYPE_BUFFER
:
info
->
buffer_init
++
;
info
->
buffer_init
++
;
status
=
acpi_ds_get_buffer_arguments
(
obj_desc
);
status
=
acpi_ds_get_buffer_arguments
(
obj_desc
);
break
;
break
;
case
ACPI_TYPE_PACKAGE
:
case
ACPI_TYPE_PACKAGE
:
info
->
package_init
++
;
info
->
package_init
++
;
...
@@ -301,15 +300,17 @@ acpi_ns_init_one_object (
...
@@ -301,15 +300,17 @@ acpi_ns_init_one_object (
acpi_format_exception
(
status
)));
acpi_format_exception
(
status
)));
}
}
/* Print a dot for each object unless we are going to print the entire pathname */
/*
* Print a dot for each object unless we are going to print the entire
* pathname
*/
if
(
!
(
acpi_dbg_level
&
ACPI_LV_INIT_NAMES
))
{
if
(
!
(
acpi_dbg_level
&
ACPI_LV_INIT_NAMES
))
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"."
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"."
));
}
}
/*
/*
* We ignore errors from above, and always return OK, since
* We ignore errors from above, and always return OK, since
we don't want
*
we don't want
to abort the walk on any single error.
* to abort the walk on any single error.
*/
*/
acpi_ex_exit_interpreter
();
acpi_ex_exit_interpreter
();
return
(
AE_OK
);
return
(
AE_OK
);
...
@@ -363,7 +364,8 @@ acpi_ns_init_one_device (
...
@@ -363,7 +364,8 @@ acpi_ns_init_one_device (
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
if
((
acpi_dbg_level
<=
ACPI_LV_ALL_EXCEPTIONS
)
&&
(
!
(
acpi_dbg_level
&
ACPI_LV_INFO
)))
{
if
((
acpi_dbg_level
<=
ACPI_LV_ALL_EXCEPTIONS
)
&&
(
!
(
acpi_dbg_level
&
ACPI_LV_INFO
)))
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"."
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"."
));
}
}
...
@@ -429,6 +431,5 @@ acpi_ns_init_one_device (
...
@@ -429,6 +431,5 @@ acpi_ns_init_one_device (
status
=
acpi_gbl_init_handler
(
pinfo
.
node
,
ACPI_INIT_DEVICE_INI
);
status
=
acpi_gbl_init_handler
(
pinfo
.
node
,
ACPI_INIT_DEVICE_INI
);
}
}
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
drivers/acpi/namespace/nsload.c
View file @
c232f2a1
...
@@ -92,12 +92,14 @@ acpi_ns_load_table (
...
@@ -92,12 +92,14 @@ acpi_ns_load_table (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"AML block at %p
\n
"
,
table_desc
->
aml_start
));
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"AML block at %p
\n
"
,
table_desc
->
aml_start
));
/* Ignore table if there is no AML contained within */
/* Ignore table if there is no AML contained within */
if
(
!
table_desc
->
aml_length
)
{
if
(
!
table_desc
->
aml_length
)
{
ACPI_REPORT_WARNING
((
"Zero-length AML block in table [%4.4s]
\n
"
,
table_desc
->
pointer
->
signature
));
ACPI_REPORT_WARNING
((
"Zero-length AML block in table [%4.4s]
\n
"
,
table_desc
->
pointer
->
signature
));
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
@@ -110,7 +112,8 @@ acpi_ns_load_table (
...
@@ -110,7 +112,8 @@ acpi_ns_load_table (
* to another control method, we can't continue parsing
* to another control method, we can't continue parsing
* because we don't know how many arguments to parse next!
* because we don't know how many arguments to parse next!
*/
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"**** Loading table into namespace ****
\n
"
));
ACPI_DEBUG_PRINT
((
ACPI_DB_INFO
,
"**** Loading table into namespace ****
\n
"
));
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
...
@@ -196,7 +199,6 @@ acpi_ns_load_table_by_type (
...
@@ -196,7 +199,6 @@ acpi_ns_load_table_by_type (
if
(
ACPI_SUCCESS
(
status
))
{
if
(
ACPI_SUCCESS
(
status
))
{
table_desc
->
loaded_into_namespace
=
TRUE
;
table_desc
->
loaded_into_namespace
=
TRUE
;
}
}
break
;
break
;
...
@@ -252,7 +254,6 @@ acpi_ns_load_table_by_type (
...
@@ -252,7 +254,6 @@ acpi_ns_load_table_by_type (
table_desc
=
table_desc
->
next
;
table_desc
=
table_desc
->
next
;
}
}
break
;
break
;
...
...
drivers/acpi/namespace/nsnames.c
View file @
c232f2a1
...
@@ -202,7 +202,11 @@ acpi_ns_get_pathname_length (
...
@@ -202,7 +202,11 @@ acpi_ns_get_pathname_length (
next_node
=
acpi_ns_get_parent_node
(
next_node
);
next_node
=
acpi_ns_get_parent_node
(
next_node
);
}
}
return
(
size
+
1
);
if
(
!
size
)
{
size
=
1
;
/* Root node case */
}
return
(
size
+
1
);
/* +1 for null string terminator */
}
}
...
@@ -253,7 +257,8 @@ acpi_ns_handle_to_pathname (
...
@@ -253,7 +257,8 @@ acpi_ns_handle_to_pathname (
acpi_ns_build_external_path
(
node
,
required_size
,
buffer
->
pointer
);
acpi_ns_build_external_path
(
node
,
required_size
,
buffer
->
pointer
);
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"%s [%X]
\n
"
,
(
char
*
)
buffer
->
pointer
,
(
u32
)
required_size
));
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"%s [%X]
\n
"
,
(
char
*
)
buffer
->
pointer
,
(
u32
)
required_size
));
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
...
drivers/acpi/namespace/nssearch.c
View file @
c232f2a1
...
@@ -96,8 +96,10 @@ acpi_ns_search_node (
...
@@ -96,8 +96,10 @@ acpi_ns_search_node (
scope_name
=
acpi_ns_get_external_pathname
(
node
);
scope_name
=
acpi_ns_get_external_pathname
(
node
);
if
(
scope_name
)
{
if
(
scope_name
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching %s (%p) For [%4.4s] (%s)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
scope_name
,
node
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
type
)));
"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
);
ACPI_MEM_FREE
(
scope_name
);
}
}
...
@@ -164,7 +166,7 @@ acpi_ns_search_node (
...
@@ -164,7 +166,7 @@ acpi_ns_search_node (
* PARAMETERS: *target_name - Ascii ACPI name to search for
* PARAMETERS: *target_name - Ascii ACPI name to search for
* *Node - Starting node where search will begin
* *Node - Starting node where search will begin
* Type - Object type to match
* Type - Object type to match
* **return_node - Where the matched N
amed Obj
is returned
* **return_node - Where the matched N
ode
is returned
*
*
* RETURN: Status
* RETURN: Status
*
*
...
@@ -199,8 +201,8 @@ acpi_ns_search_parent_tree (
...
@@ -199,8 +201,8 @@ acpi_ns_search_parent_tree (
parent_node
=
acpi_ns_get_parent_node
(
node
);
parent_node
=
acpi_ns_get_parent_node
(
node
);
/*
/*
* If there is no parent (i.e., we are at the root) or
* If there is no parent (i.e., we are at the root) or
type is "local",
*
type is "local",
we won't be searching the parent tree.
* we won't be searching the parent tree.
*/
*/
if
(
!
parent_node
)
{
if
(
!
parent_node
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"[%4.4s] has no parent
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"[%4.4s] has no parent
\n
"
,
...
@@ -217,11 +219,12 @@ acpi_ns_search_parent_tree (
...
@@ -217,11 +219,12 @@ acpi_ns_search_parent_tree (
/* Search the parent tree */
/* Search the parent tree */
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching parent for %4.4s
\n
"
,
(
char
*
)
&
target_name
));
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching parent [%4.4s] for [%4.4s]
\n
"
,
acpi_ut_get_node_name
(
parent_node
),
(
char
*
)
&
target_name
));
/*
/*
* Search parents until found the target or we have backed up to
* Search parents until target is found or we have backed up to the root
* the root
*/
*/
while
(
parent_node
)
{
while
(
parent_node
)
{
/*
/*
...
@@ -293,7 +296,8 @@ acpi_ns_search_and_enter (
...
@@ -293,7 +296,8 @@ acpi_ns_search_and_enter (
/* Parameter validation */
/* Parameter validation */
if
(
!
node
||
!
target_name
||
!
return_node
)
{
if
(
!
node
||
!
target_name
||
!
return_node
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Null param: Node %p Name %X return_node %p
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Null param: Node %p Name %X return_node %p
\n
"
,
node
,
target_name
,
return_node
));
node
,
target_name
,
return_node
));
ACPI_REPORT_ERROR
((
"ns_search_and_enter: Null parameter
\n
"
));
ACPI_REPORT_ERROR
((
"ns_search_and_enter: Null parameter
\n
"
));
...
@@ -330,22 +334,20 @@ acpi_ns_search_and_enter (
...
@@ -330,22 +334,20 @@ acpi_ns_search_and_enter (
}
}
/*
/*
* The name was not found. If we are NOT performing the
* The name was not found. If we are NOT performing the first pass
* first pass (name entry) of loading the namespace, search
* (name entry) of loading the namespace, search the parent tree (all the
* the parent tree (all the way to the root if necessary.)
* way to the root if necessary.) We don't want to perform the parent
* We don't want to perform the parent search when the
* search when the namespace is actually being loaded. We want to perform
* namespace is actually being loaded. We want to perform
* the search when namespace references are being resolved (load pass 2)
* the search when namespace references are being resolved
* and during the execution phase.
* (load pass 2) and during the execution phase.
*/
*/
if
((
interpreter_mode
!=
ACPI_IMODE_LOAD_PASS1
)
&&
if
((
interpreter_mode
!=
ACPI_IMODE_LOAD_PASS1
)
&&
(
flags
&
ACPI_NS_SEARCH_PARENT
))
{
(
flags
&
ACPI_NS_SEARCH_PARENT
))
{
/*
/*
* Not found at this level - search parent tree according
* Not found at this level - search parent tree according
to the
*
to
ACPI specification
* ACPI specification
*/
*/
status
=
acpi_ns_search_parent_tree
(
target_name
,
node
,
status
=
acpi_ns_search_parent_tree
(
target_name
,
node
,
type
,
return_node
);
type
,
return_node
);
if
(
ACPI_SUCCESS
(
status
))
{
if
(
ACPI_SUCCESS
(
status
))
{
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
...
@@ -355,7 +357,8 @@ acpi_ns_search_and_enter (
...
@@ -355,7 +357,8 @@ acpi_ns_search_and_enter (
* In execute mode, just search, never add names. Exit now.
* In execute mode, just search, never add names. Exit now.
*/
*/
if
(
interpreter_mode
==
ACPI_IMODE_EXECUTE
)
{
if
(
interpreter_mode
==
ACPI_IMODE_EXECUTE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%4.4s Not found in %p [Not adding]
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%4.4s Not found in %p [Not adding]
\n
"
,
(
char
*
)
&
target_name
,
node
));
(
char
*
)
&
target_name
,
node
));
return_ACPI_STATUS
(
AE_NOT_FOUND
);
return_ACPI_STATUS
(
AE_NOT_FOUND
);
...
...
drivers/acpi/namespace/nsutils.c
View file @
c232f2a1
...
@@ -85,12 +85,14 @@ acpi_ns_report_error (
...
@@ -85,12 +85,14 @@ acpi_ns_report_error (
if
(
lookup_status
==
AE_BAD_CHARACTER
)
{
if
(
lookup_status
==
AE_BAD_CHARACTER
)
{
/* There is a non-ascii character in the name */
/* There is a non-ascii character in the name */
acpi_os_printf
(
"[0x%4.4X] (NON-ASCII)
\n
"
,
*
(
ACPI_CAST_PTR
(
u32
,
internal_name
)));
acpi_os_printf
(
"[0x%4.4X] (NON-ASCII)
\n
"
,
*
(
ACPI_CAST_PTR
(
u32
,
internal_name
)));
}
}
else
{
else
{
/* Convert path to external format */
/* Convert path to external format */
status
=
acpi_ns_externalize_name
(
ACPI_UINT32_MAX
,
internal_name
,
NULL
,
&
name
);
status
=
acpi_ns_externalize_name
(
ACPI_UINT32_MAX
,
internal_name
,
NULL
,
&
name
);
/* Print target name */
/* Print target name */
...
@@ -141,7 +143,8 @@ acpi_ns_report_method_error (
...
@@ -141,7 +143,8 @@ acpi_ns_report_method_error (
if
(
path
)
{
if
(
path
)
{
status
=
acpi_ns_get_node_by_path
(
path
,
prefix_node
,
ACPI_NS_NO_UPSEARCH
,
&
node
);
status
=
acpi_ns_get_node_by_path
(
path
,
prefix_node
,
ACPI_NS_NO_UPSEARCH
,
&
node
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
acpi_os_printf
(
"report_method_error: Could not get node
\n
"
);
acpi_os_printf
(
"report_method_error: Could not get node
\n
"
);
return
;
return
;
...
@@ -180,7 +183,7 @@ acpi_ns_print_node_pathname (
...
@@ -180,7 +183,7 @@ acpi_ns_print_node_pathname (
return
;
return
;
}
}
/* Convert handle to
a
full pathname and print it (with supplied message) */
/* Convert handle to full pathname and print it (with supplied message) */
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
...
@@ -324,13 +327,11 @@ acpi_ns_get_internal_name_length (
...
@@ -324,13 +327,11 @@ acpi_ns_get_internal_name_length (
info
->
fully_qualified
=
FALSE
;
info
->
fully_qualified
=
FALSE
;
/*
/*
* For the internal name, the required length is 4 bytes
* For the internal name, the required length is 4 bytes per segment, plus
* per segment, plus 1 each for root_prefix, multi_name_prefix_op,
* 1 each for root_prefix, multi_name_prefix_op, segment count, trailing null
* segment count, trailing null (which is not really needed,
* (which is not really needed, but no there's harm in putting it there)
* but no there's harm in putting it there)
*
*
* strlen() + 1 covers the first name_seg, which has no
* strlen() + 1 covers the first name_seg, which has no path separator
* path separator
*/
*/
if
(
acpi_ns_valid_root_prefix
(
next_external_char
[
0
]))
{
if
(
acpi_ns_valid_root_prefix
(
next_external_char
[
0
]))
{
info
->
fully_qualified
=
TRUE
;
info
->
fully_qualified
=
TRUE
;
...
@@ -347,10 +348,9 @@ acpi_ns_get_internal_name_length (
...
@@ -347,10 +348,9 @@ acpi_ns_get_internal_name_length (
}
}
/*
/*
* Determine the number of ACPI name "segments" by counting
* Determine the number of ACPI name "segments" by counting the number of
* the number of path separators within the string. Start
* path separators within the string. Start with one segment since the
* with one segment since the segment count is (# separators)
* segment count is [(# separators) + 1], and zero separators is ok.
* + 1, and zero separators is ok.
*/
*/
if
(
*
next_external_char
)
{
if
(
*
next_external_char
)
{
info
->
num_segments
=
1
;
info
->
num_segments
=
1
;
...
@@ -625,7 +625,8 @@ acpi_ns_externalize_name (
...
@@ -625,7 +625,8 @@ acpi_ns_externalize_name (
/* <count> 4-byte names */
/* <count> 4-byte names */
names_index
=
prefix_length
+
2
;
names_index
=
prefix_length
+
2
;
num_segments
=
(
acpi_native_uint
)
(
u8
)
internal_name
[(
acpi_native_uint
)
(
prefix_length
+
1
)];
num_segments
=
(
acpi_native_uint
)
(
u8
)
internal_name
[(
acpi_native_uint
)
(
prefix_length
+
1
)];
break
;
break
;
case
AML_DUAL_NAME_PREFIX
:
case
AML_DUAL_NAME_PREFIX
:
...
@@ -672,7 +673,7 @@ acpi_ns_externalize_name (
...
@@ -672,7 +673,7 @@ acpi_ns_externalize_name (
}
}
/*
/*
* Build converted_name
...
* Build converted_name
*/
*/
*
converted_name
=
ACPI_MEM_CALLOCATE
(
required_length
);
*
converted_name
=
ACPI_MEM_CALLOCATE
(
required_length
);
if
(
!
(
*
converted_name
))
{
if
(
!
(
*
converted_name
))
{
...
@@ -756,7 +757,7 @@ acpi_ns_map_handle_to_node (
...
@@ -756,7 +757,7 @@ acpi_ns_map_handle_to_node (
*
*
* PARAMETERS: Node - Node to be converted to a Handle
* PARAMETERS: Node - Node to be converted to a Handle
*
*
* RETURN: A
n USER acpi_
handle
* RETURN: A
user
handle
*
*
* DESCRIPTION: Convert a real Node to a namespace handle
* DESCRIPTION: Convert a real Node to a namespace handle
*
*
...
@@ -976,7 +977,8 @@ acpi_ns_find_parent_name (
...
@@ -976,7 +977,8 @@ acpi_ns_find_parent_name (
parent_node
=
acpi_ns_get_parent_node
(
child_node
);
parent_node
=
acpi_ns_get_parent_node
(
child_node
);
if
(
parent_node
)
{
if
(
parent_node
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Parent of %p [%4.4s] is %p [%4.4s]
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Parent of %p [%4.4s] is %p [%4.4s]
\n
"
,
child_node
,
acpi_ut_get_node_name
(
child_node
),
child_node
,
acpi_ut_get_node_name
(
child_node
),
parent_node
,
acpi_ut_get_node_name
(
parent_node
)));
parent_node
,
acpi_ut_get_node_name
(
parent_node
)));
...
@@ -985,7 +987,8 @@ acpi_ns_find_parent_name (
...
@@ -985,7 +987,8 @@ acpi_ns_find_parent_name (
}
}
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"unable to find parent of %p (%4.4s)
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Unable to find parent of %p (%4.4s)
\n
"
,
child_node
,
acpi_ut_get_node_name
(
child_node
)));
child_node
,
acpi_ut_get_node_name
(
child_node
)));
}
}
...
@@ -1018,11 +1021,9 @@ acpi_ns_get_parent_node (
...
@@ -1018,11 +1021,9 @@ acpi_ns_get_parent_node (
}
}
/*
/*
* Walk to the end of this peer list.
* Walk to the end of this peer list. The last entry is marked with a flag
* The last entry is marked with a flag and the peer
* and the peer pointer is really a pointer back to the parent. This saves
* pointer is really a pointer back to the parent.
* putting a parent back pointer in each and every named object!
* This saves putting a parent back pointer in each and
* every named object!
*/
*/
while
(
!
(
node
->
flags
&
ANOBJ_END_OF_PEER_LIST
))
{
while
(
!
(
node
->
flags
&
ANOBJ_END_OF_PEER_LIST
))
{
node
=
node
->
peer
;
node
=
node
->
peer
;
...
@@ -1040,7 +1041,7 @@ acpi_ns_get_parent_node (
...
@@ -1040,7 +1041,7 @@ acpi_ns_get_parent_node (
* PARAMETERS: Node - Current table entry
* PARAMETERS: Node - Current table entry
*
*
* RETURN: Next valid Node in the linked node list. NULL if no more valid
* RETURN: Next valid Node in the linked node list. NULL if no more valid
* nodes
s
* nodes
.
*
*
* DESCRIPTION: Find the next valid node within a name table.
* DESCRIPTION: Find the next valid node within a name table.
* Useful for implementing NULL-end-of-list loops.
* Useful for implementing NULL-end-of-list loops.
...
...
drivers/acpi/osl.c
View file @
c232f2a1
...
@@ -306,10 +306,10 @@ acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
...
@@ -306,10 +306,10 @@ acpi_os_remove_interrupt_handler(u32 irq, acpi_osd_handler handler)
*/
*/
void
void
acpi_os_sleep
(
u32
sec
,
u32
ms
)
acpi_os_sleep
(
acpi_integer
ms
)
{
{
current
->
state
=
TASK_INTERRUPTIBLE
;
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
HZ
*
sec
+
(
ms
*
HZ
)
/
1000
);
schedule_timeout
(
((
signed
long
)
ms
*
HZ
)
/
1000
);
}
}
void
void
...
@@ -326,6 +326,29 @@ acpi_os_stall(u32 us)
...
@@ -326,6 +326,29 @@ acpi_os_stall(u32 us)
}
}
}
}
/*
* Support ACPI 3.0 AML Timer operand
* Returns 64-bit free-running, monotonically increasing timer
* with 100ns granularity
*/
u64
acpi_os_get_timer
(
void
)
{
static
u64
t
;
#ifdef CONFIG_HPET
/* TBD: use HPET if available */
#endif
#ifdef CONFIG_X86_PM_TIMER
/* TBD: default to PM timer if HPET was not available */
#endif
if
(
!
t
)
printk
(
KERN_ERR
PREFIX
"acpi_os_get_timer() TBD
\n
"
);
return
(
++
t
);
}
acpi_status
acpi_status
acpi_os_read_port
(
acpi_os_read_port
(
acpi_io_address
port
,
acpi_io_address
port
,
...
...
drivers/acpi/parser/psopcode.c
View file @
c232f2a1
...
@@ -194,6 +194,7 @@
...
@@ -194,6 +194,7 @@
#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST)
#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST)
#define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
#define ARGP_SUBTRACT_OP ARGP_LIST3 (ARGP_TERMARG, ARGP_TERMARG, ARGP_TARGET)
#define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST)
#define ARGP_THERMAL_ZONE_OP ARGP_LIST3 (ARGP_PKGLENGTH, ARGP_NAME, ARGP_OBJLIST)
#define ARGP_TIMER_OP ARG_NONE
#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TO_BCD_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TO_BUFFER_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
#define ARGP_TO_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
...
@@ -325,6 +326,7 @@
...
@@ -325,6 +326,7 @@
#define ARGI_STRING_OP ARGI_INVALID_OPCODE
#define ARGI_STRING_OP ARGI_INVALID_OPCODE
#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
#define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE
#define ARGI_THERMAL_ZONE_OP ARGI_INVALID_OPCODE
#define ARGI_TIMER_OP ARG_NONE
#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET)
#define ARGI_TO_BCD_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_FIXED_TARGET)
#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
#define ARGI_TO_BUFFER_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
#define ARGI_TO_DEC_STR_OP ARGI_LIST2 (ARGI_COMPUTEDATA,ARGI_FIXED_TARGET)
...
@@ -527,8 +529,8 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
...
@@ -527,8 +529,8 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
/* 35 */
ACPI_OP
(
"CreateByteField"
,
ARGP_CREATE_BYTE_FIELD_OP
,
ARGI_CREATE_BYTE_FIELD_OP
,
ACPI_TYPE_BUFFER_FIELD
,
AML_CLASS_CREATE
,
AML_TYPE_CREATE_FIELD
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSNODE
|
AML_DEFER
|
AML_CREATE
),
/* 35 */
ACPI_OP
(
"CreateByteField"
,
ARGP_CREATE_BYTE_FIELD_OP
,
ARGI_CREATE_BYTE_FIELD_OP
,
ACPI_TYPE_BUFFER_FIELD
,
AML_CLASS_CREATE
,
AML_TYPE_CREATE_FIELD
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSNODE
|
AML_DEFER
|
AML_CREATE
),
/* 36 */
ACPI_OP
(
"CreateBitField"
,
ARGP_CREATE_BIT_FIELD_OP
,
ARGI_CREATE_BIT_FIELD_OP
,
ACPI_TYPE_BUFFER_FIELD
,
AML_CLASS_CREATE
,
AML_TYPE_CREATE_FIELD
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSNODE
|
AML_DEFER
|
AML_CREATE
),
/* 36 */
ACPI_OP
(
"CreateBitField"
,
ARGP_CREATE_BIT_FIELD_OP
,
ARGI_CREATE_BIT_FIELD_OP
,
ACPI_TYPE_BUFFER_FIELD
,
AML_CLASS_CREATE
,
AML_TYPE_CREATE_FIELD
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSNODE
|
AML_DEFER
|
AML_CREATE
),
/* 37 */
ACPI_OP
(
"ObjectType"
,
ARGP_TYPE_OP
,
ARGI_TYPE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_1A_0T_1R
,
AML_FLAGS_EXEC_1A_0T_1R
),
/* 37 */
ACPI_OP
(
"ObjectType"
,
ARGP_TYPE_OP
,
ARGI_TYPE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_1A_0T_1R
,
AML_FLAGS_EXEC_1A_0T_1R
),
/* 38 */
ACPI_OP
(
"LAnd"
,
ARGP_LAND_OP
,
ARGI_LAND_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
/* 38 */
ACPI_OP
(
"LAnd"
,
ARGP_LAND_OP
,
ARGI_LAND_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
_NUMERIC
|
AML_CONSTANT
),
/* 39 */
ACPI_OP
(
"LOr"
,
ARGP_LOR_OP
,
ARGI_LOR_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
/* 39 */
ACPI_OP
(
"LOr"
,
ARGP_LOR_OP
,
ARGI_LOR_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
_NUMERIC
|
AML_CONSTANT
),
/* 3A */
ACPI_OP
(
"LNot"
,
ARGP_LNOT_OP
,
ARGI_LNOT_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_1A_0T_1R
,
AML_FLAGS_EXEC_1A_0T_1R
|
AML_CONSTANT
),
/* 3A */
ACPI_OP
(
"LNot"
,
ARGP_LNOT_OP
,
ARGI_LNOT_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_1A_0T_1R
,
AML_FLAGS_EXEC_1A_0T_1R
|
AML_CONSTANT
),
/* 3B */
ACPI_OP
(
"LEqual"
,
ARGP_LEQUAL_OP
,
ARGI_LEQUAL_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
/* 3B */
ACPI_OP
(
"LEqual"
,
ARGP_LEQUAL_OP
,
ARGI_LEQUAL_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
/* 3C */
ACPI_OP
(
"LGreater"
,
ARGP_LGREATER_OP
,
ARGI_LGREATER_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
/* 3C */
ACPI_OP
(
"LGreater"
,
ARGP_LGREATER_OP
,
ARGI_LGREATER_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_2A_0T_1R
,
AML_FLAGS_EXEC_2A_0T_1R
|
AML_LOGICAL
|
AML_CONSTANT
),
...
@@ -588,7 +590,6 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
...
@@ -588,7 +590,6 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
/* 6C */
ACPI_OP
(
"-ASCII_ONLY-"
,
ARG_NONE
,
ARG_NONE
,
ACPI_TYPE_ANY
,
AML_CLASS_ASCII
,
AML_TYPE_BOGUS
,
AML_HAS_ARGS
),
/* 6C */
ACPI_OP
(
"-ASCII_ONLY-"
,
ARG_NONE
,
ARG_NONE
,
ACPI_TYPE_ANY
,
AML_CLASS_ASCII
,
AML_TYPE_BOGUS
,
AML_HAS_ARGS
),
/* 6D */
ACPI_OP
(
"-PREFIX_ONLY-"
,
ARG_NONE
,
ARG_NONE
,
ACPI_TYPE_ANY
,
AML_CLASS_PREFIX
,
AML_TYPE_BOGUS
,
AML_HAS_ARGS
),
/* 6D */
ACPI_OP
(
"-PREFIX_ONLY-"
,
ARG_NONE
,
ARG_NONE
,
ACPI_TYPE_ANY
,
AML_CLASS_PREFIX
,
AML_TYPE_BOGUS
,
AML_HAS_ARGS
),
/* ACPI 2.0 opcodes */
/* ACPI 2.0 opcodes */
/* 6E */
ACPI_OP
(
"QwordConst"
,
ARGP_QWORD_OP
,
ARGI_QWORD_OP
,
ACPI_TYPE_INTEGER
,
AML_CLASS_ARGUMENT
,
AML_TYPE_LITERAL
,
AML_CONSTANT
),
/* 6E */
ACPI_OP
(
"QwordConst"
,
ARGP_QWORD_OP
,
ARGI_QWORD_OP
,
ACPI_TYPE_INTEGER
,
AML_CLASS_ARGUMENT
,
AML_TYPE_LITERAL
,
AML_CONSTANT
),
...
@@ -606,7 +607,11 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
...
@@ -606,7 +607,11 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
/* 7A */
ACPI_OP
(
"Continue"
,
ARGP_CONTINUE_OP
,
ARGI_CONTINUE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_CONTROL
,
AML_TYPE_CONTROL
,
0
),
/* 7A */
ACPI_OP
(
"Continue"
,
ARGP_CONTINUE_OP
,
ARGI_CONTINUE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_CONTROL
,
AML_TYPE_CONTROL
,
0
),
/* 7B */
ACPI_OP
(
"LoadTable"
,
ARGP_LOAD_TABLE_OP
,
ARGI_LOAD_TABLE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_6A_0T_1R
,
AML_FLAGS_EXEC_6A_0T_1R
),
/* 7B */
ACPI_OP
(
"LoadTable"
,
ARGP_LOAD_TABLE_OP
,
ARGI_LOAD_TABLE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_6A_0T_1R
,
AML_FLAGS_EXEC_6A_0T_1R
),
/* 7C */
ACPI_OP
(
"DataTableRegion"
,
ARGP_DATA_REGION_OP
,
ARGI_DATA_REGION_OP
,
ACPI_TYPE_REGION
,
AML_CLASS_NAMED_OBJECT
,
AML_TYPE_NAMED_SIMPLE
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSOPCODE
|
AML_NSNODE
|
AML_NAMED
),
/* 7C */
ACPI_OP
(
"DataTableRegion"
,
ARGP_DATA_REGION_OP
,
ARGI_DATA_REGION_OP
,
ACPI_TYPE_REGION
,
AML_CLASS_NAMED_OBJECT
,
AML_TYPE_NAMED_SIMPLE
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSOPCODE
|
AML_NSNODE
|
AML_NAMED
),
/* 7D */
ACPI_OP
(
"[EvalSubTree]"
,
ARGP_SCOPE_OP
,
ARGI_SCOPE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_NAMED_OBJECT
,
AML_TYPE_NAMED_NO_OBJ
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSOPCODE
|
AML_NSNODE
)
/* 7D */
ACPI_OP
(
"[EvalSubTree]"
,
ARGP_SCOPE_OP
,
ARGI_SCOPE_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_NAMED_OBJECT
,
AML_TYPE_NAMED_NO_OBJ
,
AML_HAS_ARGS
|
AML_NSOBJECT
|
AML_NSOPCODE
|
AML_NSNODE
),
/* ACPI 3.0 opcodes */
/* 7E */
ACPI_OP
(
"Timer"
,
ARGP_TIMER_OP
,
ARGI_TIMER_OP
,
ACPI_TYPE_ANY
,
AML_CLASS_EXECUTE
,
AML_TYPE_EXEC_0A_0T_1R
,
AML_FLAGS_EXEC_0A_0T_1R
)
/*! [End] no source code translation !*/
/*! [End] no source code translation !*/
};
};
...
@@ -615,7 +620,6 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
...
@@ -615,7 +620,6 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] =
* This table is directly indexed by the opcodes, and returns an
* This table is directly indexed by the opcodes, and returns an
* index into the table above
* index into the table above
*/
*/
static
const
u8
acpi_gbl_short_op_index
[
256
]
=
static
const
u8
acpi_gbl_short_op_index
[
256
]
=
{
{
/* 0 1 2 3 4 5 6 7 */
/* 0 1 2 3 4 5 6 7 */
...
@@ -654,7 +658,10 @@ static const u8 acpi_gbl_short_op_index[256] =
...
@@ -654,7 +658,10 @@ static const u8 acpi_gbl_short_op_index[256] =
/* 0xF8 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
0x45
,
/* 0xF8 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
0x45
,
};
};
/*
* This table is indexed by the second opcode of the extended opcode
* pair. It returns an index into the opcode table (acpi_gbl_aml_op_info)
*/
static
const
u8
acpi_gbl_long_op_index
[
NUM_EXTENDED_OPCODE
]
=
static
const
u8
acpi_gbl_long_op_index
[
NUM_EXTENDED_OPCODE
]
=
{
{
/* 0 1 2 3 4 5 6 7 */
/* 0 1 2 3 4 5 6 7 */
...
@@ -665,7 +672,7 @@ static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] =
...
@@ -665,7 +672,7 @@ static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] =
/* 0x18 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
0x7B
,
/* 0x18 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
0x7B
,
/* 0x20 */
0x4a
,
0x4b
,
0x4c
,
0x4d
,
0x4e
,
0x4f
,
0x50
,
0x51
,
/* 0x20 */
0x4a
,
0x4b
,
0x4c
,
0x4d
,
0x4e
,
0x4f
,
0x50
,
0x51
,
/* 0x28 */
0x52
,
0x53
,
0x54
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x28 */
0x52
,
0x53
,
0x54
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x30 */
0x55
,
0x56
,
0x57
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x30 */
0x55
,
0x56
,
0x57
,
0x7e
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x38 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x38 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x40 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x40 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x48 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
/* 0x48 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
...
@@ -724,7 +731,7 @@ acpi_ps_get_opcode_info (
...
@@ -724,7 +731,7 @@ acpi_ps_get_opcode_info (
default:
default:
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown
extended opcode [%
X]
\n
"
,
opcode
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Unknown
AML opcode [%4.4
X]
\n
"
,
opcode
));
break
;
break
;
}
}
...
...
drivers/acpi/parser/psutils.c
View file @
c232f2a1
...
@@ -129,10 +129,9 @@ union acpi_parse_object*
...
@@ -129,10 +129,9 @@ union acpi_parse_object*
acpi_ps_alloc_op
(
acpi_ps_alloc_op
(
u16
opcode
)
u16
opcode
)
{
{
union
acpi_parse_object
*
op
=
NULL
;
union
acpi_parse_object
*
op
;
u32
size
;
u8
flags
;
const
struct
acpi_opcode_info
*
op_info
;
const
struct
acpi_opcode_info
*
op_info
;
u8
flags
=
ACPI_PARSEOP_GENERIC
;
ACPI_FUNCTION_ENTRY
();
ACPI_FUNCTION_ENTRY
();
...
@@ -140,32 +139,28 @@ acpi_ps_alloc_op (
...
@@ -140,32 +139,28 @@ acpi_ps_alloc_op (
op_info
=
acpi_ps_get_opcode_info
(
opcode
);
op_info
=
acpi_ps_get_opcode_info
(
opcode
);
/*
Allocate the minimum required size object
*/
/*
Determine type of parse_op required
*/
if
(
op_info
->
flags
&
AML_DEFER
)
{
if
(
op_info
->
flags
&
AML_DEFER
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_DEFERRED
;
flags
=
ACPI_PARSEOP_DEFERRED
;
}
}
else
if
(
op_info
->
flags
&
AML_NAMED
)
{
else
if
(
op_info
->
flags
&
AML_NAMED
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_NAMED
;
flags
=
ACPI_PARSEOP_NAMED
;
}
}
else
if
(
opcode
==
AML_INT_BYTELIST_OP
)
{
else
if
(
opcode
==
AML_INT_BYTELIST_OP
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_BYTELIST
;
flags
=
ACPI_PARSEOP_BYTELIST
;
}
}
else
{
size
=
sizeof
(
struct
acpi_parse_obj_common
);
flags
=
ACPI_PARSEOP_GENERIC
;
}
if
(
size
==
sizeof
(
struct
acpi_parse_obj_common
))
{
/* Allocate the minimum required size object */
/*
* The generic op is by far the most common (16 to 1)
if
(
flags
==
ACPI_PARSEOP_GENERIC
)
{
*/
/* The generic op (default) is by far the most common (16 to 1) */
op
=
acpi_ut_acquire_from_cache
(
ACPI_MEM_LIST_PSNODE
);
op
=
acpi_ut_acquire_from_cache
(
ACPI_MEM_LIST_PSNODE
);
}
}
else
{
else
{
/* Extended parseop */
op
=
acpi_ut_acquire_from_cache
(
ACPI_MEM_LIST_PSNODE_EXT
);
op
=
acpi_ut_acquire_from_cache
(
ACPI_MEM_LIST_PSNODE_EXT
);
}
}
...
...
drivers/acpi/resources/rscalc.c
View file @
c232f2a1
...
@@ -74,7 +74,6 @@ acpi_rs_get_byte_stream_length (
...
@@ -74,7 +74,6 @@ acpi_rs_get_byte_stream_length (
{
{
acpi_size
byte_stream_size_needed
=
0
;
acpi_size
byte_stream_size_needed
=
0
;
acpi_size
segment_size
;
acpi_size
segment_size
;
struct
acpi_resource_ext_irq
*
ex_irq
=
NULL
;
u8
done
=
FALSE
;
u8
done
=
FALSE
;
...
@@ -91,8 +90,8 @@ acpi_rs_get_byte_stream_length (
...
@@ -91,8 +90,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_IRQ
:
case
ACPI_RSTYPE_IRQ
:
/*
/*
* IRQ Resource
* IRQ Resource
* For an IRQ Resource, Byte 3, although optional, will
* For an IRQ Resource, Byte 3, although optional, will
always be
*
always be
created - it holds IRQ information.
* created - it holds IRQ information.
*/
*/
segment_size
=
4
;
segment_size
=
4
;
break
;
break
;
...
@@ -108,8 +107,8 @@ acpi_rs_get_byte_stream_length (
...
@@ -108,8 +107,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_START_DPF
:
case
ACPI_RSTYPE_START_DPF
:
/*
/*
* Start Dependent Functions Resource
* Start Dependent Functions Resource
* For a start_dependent_functions Resource, Byte 1,
* For a start_dependent_functions Resource, Byte 1,
although
*
although
optional, will always be created.
* optional, will always be created.
*/
*/
segment_size
=
2
;
segment_size
=
2
;
break
;
break
;
...
@@ -141,10 +140,9 @@ acpi_rs_get_byte_stream_length (
...
@@ -141,10 +140,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_VENDOR
:
case
ACPI_RSTYPE_VENDOR
:
/*
/*
* Vendor Defined Resource
* Vendor Defined Resource
* For a Vendor Specific resource, if the Length is
* For a Vendor Specific resource, if the Length is between 1 and 7
* between 1 and 7 it will be created as a Small
* it will be created as a Small Resource data type, otherwise it
* Resource data type, otherwise it is a Large
* is a Large Resource data type.
* Resource data type.
*/
*/
if
(
linked_list
->
data
.
vendor_specific
.
length
>
7
)
{
if
(
linked_list
->
data
.
vendor_specific
.
length
>
7
)
{
segment_size
=
3
;
segment_size
=
3
;
...
@@ -191,10 +189,9 @@ acpi_rs_get_byte_stream_length (
...
@@ -191,10 +189,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_ADDRESS16
:
case
ACPI_RSTYPE_ADDRESS16
:
/*
/*
* 16-Bit Address Resource
* 16-Bit Address Resource
* The base size of this byte stream is 16. If a
* The base size of this byte stream is 16. If a Resource Source
* Resource Source string is not NULL, add 1 for
* string is not NULL, add 1 for the Index + the length of the null
* the Index + the length of the null terminated
* terminated string Resource Source + 1 for the null.
* string Resource Source + 1 for the null.
*/
*/
segment_size
=
16
;
segment_size
=
16
;
...
@@ -223,10 +220,9 @@ acpi_rs_get_byte_stream_length (
...
@@ -223,10 +220,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_ADDRESS64
:
case
ACPI_RSTYPE_ADDRESS64
:
/*
/*
* 64-Bit Address Resource
* 64-Bit Address Resource
* The base size of this byte stream is 46. If a Resource
* The base size of this byte stream is 46. If a resource_source
* Source string is not NULL, add 1 for the Index + the
* string is not NULL, add 1 for the Index + the length of the null
* length of the null terminated string Resource Source +
* terminated string Resource Source + 1 for the null.
* 1 for the null.
*/
*/
segment_size
=
46
;
segment_size
=
46
;
...
@@ -239,9 +235,8 @@ acpi_rs_get_byte_stream_length (
...
@@ -239,9 +235,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_EXT_IRQ
:
case
ACPI_RSTYPE_EXT_IRQ
:
/*
/*
* Extended IRQ Resource
* Extended IRQ Resource
* The base size of this byte stream is 9. This is for an
* The base size of this byte stream is 9. This is for an Interrupt
* Interrupt table length of 1. For each additional
* table length of 1. For each additional interrupt, add 4.
* interrupt, add 4.
* If a Resource Source string is not NULL, add 1 for the
* If a Resource Source string is not NULL, add 1 for the
* Index + the length of the null terminated string
* Index + the length of the null terminated string
* Resource Source + 1 for the null.
* Resource Source + 1 for the null.
...
@@ -249,7 +244,7 @@ acpi_rs_get_byte_stream_length (
...
@@ -249,7 +244,7 @@ acpi_rs_get_byte_stream_length (
segment_size
=
9
+
segment_size
=
9
+
(((
acpi_size
)
linked_list
->
data
.
extended_irq
.
number_of_interrupts
-
1
)
*
4
);
(((
acpi_size
)
linked_list
->
data
.
extended_irq
.
number_of_interrupts
-
1
)
*
4
);
if
(
ex_irq
&&
ex_irq
->
resource_source
.
string_ptr
)
{
if
(
linked_list
->
data
.
extended_irq
.
resource_source
.
string_ptr
)
{
segment_size
+=
linked_list
->
data
.
extended_irq
.
resource_source
.
string_length
;
segment_size
+=
linked_list
->
data
.
extended_irq
.
resource_source
.
string_length
;
segment_size
++
;
segment_size
++
;
}
}
...
@@ -257,8 +252,7 @@ acpi_rs_get_byte_stream_length (
...
@@ -257,8 +252,7 @@ acpi_rs_get_byte_stream_length (
default:
default:
/*
/*
* If we get here, everything is out of sync,
* If we get here, everything is out of sync, exit with error
* so exit with an error
*/
*/
return_ACPI_STATUS
(
AE_AML_INVALID_RESOURCE_TYPE
);
return_ACPI_STATUS
(
AE_AML_INVALID_RESOURCE_TYPE
);
...
@@ -366,7 +360,6 @@ acpi_rs_get_list_length (
...
@@ -366,7 +360,6 @@ acpi_rs_get_list_length (
/*
/*
* 32-Bit Memory Range Resource
* 32-Bit Memory Range Resource
*/
*/
bytes_consumed
=
20
;
bytes_consumed
=
20
;
structure_size
=
ACPI_SIZEOF_RESOURCE
(
struct
acpi_resource_mem32
);
structure_size
=
ACPI_SIZEOF_RESOURCE
(
struct
acpi_resource_mem32
);
...
@@ -395,14 +388,12 @@ acpi_rs_get_list_length (
...
@@ -395,14 +388,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
bytes_consumed
=
temp16
+
3
;
/*
/*
* Resource Source Index and Resource Source are
* Resource Source Index and Resource Source are optional elements.
* optional elements. Check the length of the
* Check the length of the Bytestream. If it is greater than 43,
* Bytestream. If it is greater than 43, that
* that means that an Index exists and is followed by a null
* means that an Index exists and is followed by
* terminated string. Therefore, set the temp variable to the
* a null termininated string. Therefore, set
* length minus the minimum byte stream length plus the byte for
* the temp variable to the length minus the minimum
* the Index to determine the size of the NULL terminated string.
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
*/
*/
if
(
43
<
temp16
)
{
if
(
43
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
44
);
temp8
=
(
u8
)
(
temp16
-
44
);
...
@@ -433,14 +424,12 @@ acpi_rs_get_list_length (
...
@@ -433,14 +424,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
bytes_consumed
=
temp16
+
3
;
/*
/*
* Resource Source Index and Resource Source are
* Resource Source Index and Resource Source are optional elements.
* optional elements. Check the length of the
* Check the length of the Bytestream. If it is greater than 23,
* Bytestream. If it is greater than 23, that
* that means that an Index exists and is followed by a null
* means that an Index exists and is followed by
* terminated string. Therefore, set the temp variable to the
* a null termininated string. Therefore, set
* length minus the minimum byte stream length plus the byte for
* the temp variable to the length minus the minimum
* the Index to determine the size of the NULL terminated string.
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
*/
*/
if
(
23
<
temp16
)
{
if
(
23
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
24
);
temp8
=
(
u8
)
(
temp16
-
24
);
...
@@ -471,14 +460,12 @@ acpi_rs_get_list_length (
...
@@ -471,14 +460,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
bytes_consumed
=
temp16
+
3
;
/*
/*
* Resource Source Index and Resource Source are
* Resource Source Index and Resource Source are optional elements.
* optional elements. Check the length of the
* Check the length of the Bytestream. If it is greater than 13,
* Bytestream. If it is greater than 13, that
* that means that an Index exists and is followed by a null
* means that an Index exists and is followed by
* terminated string. Therefore, set the temp variable to the
* a null termininated string. Therefore, set
* length minus the minimum byte stream length plus the byte for
* the temp variable to the length minus the minimum
* the Index to determine the size of the NULL terminated string.
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
*/
*/
if
(
13
<
temp16
)
{
if
(
13
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
14
);
temp8
=
(
u8
)
(
temp16
-
14
);
...
@@ -509,9 +496,8 @@ acpi_rs_get_list_length (
...
@@ -509,9 +496,8 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
bytes_consumed
=
temp16
+
3
;
/*
/*
* Point past the length field and the
* Point past the length field and the Interrupt vector flags to
* Interrupt vector flags to save off the
* save off the Interrupt table length to the Temp8 variable.
* Interrupt table length to the Temp8 variable.
*/
*/
buffer
+=
3
;
buffer
+=
3
;
temp8
=
*
buffer
;
temp8
=
*
buffer
;
...
@@ -523,14 +509,12 @@ acpi_rs_get_list_length (
...
@@ -523,14 +509,12 @@ acpi_rs_get_list_length (
additional_bytes
=
(
u8
)
((
temp8
-
1
)
*
4
);
additional_bytes
=
(
u8
)
((
temp8
-
1
)
*
4
);
/*
/*
* Resource Source Index and Resource Source are
* Resource Source Index and Resource Source are optional elements.
* optional elements. Check the length of the
* Check the length of the Bytestream. If it is greater than 9,
* Bytestream. If it is greater than 9, that
* that means that an Index exists and is followed by a null
* means that an Index exists and is followed by
* terminated string. Therefore, set the temp variable to the
* a null termininated string. Therefore, set
* length minus the minimum byte stream length plus the byte for
* the temp variable to the length minus the minimum
* the Index to determine the size of the NULL terminated string.
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
*/
*/
if
(
9
+
additional_bytes
<
temp16
)
{
if
(
9
+
additional_bytes
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
(
9
+
additional_bytes
));
temp8
=
(
u8
)
(
temp16
-
(
9
+
additional_bytes
));
...
@@ -565,9 +549,8 @@ acpi_rs_get_list_length (
...
@@ -565,9 +549,8 @@ acpi_rs_get_list_length (
bytes_consumed
=
3
;
bytes_consumed
=
3
;
}
}
/*
/* Point past the descriptor */
* Point past the descriptor
*/
++
buffer
;
++
buffer
;
/*
/*
...
@@ -595,9 +578,8 @@ acpi_rs_get_list_length (
...
@@ -595,9 +578,8 @@ acpi_rs_get_list_length (
buffer
=
byte_stream_buffer
;
buffer
=
byte_stream_buffer
;
bytes_consumed
=
3
;
bytes_consumed
=
3
;
/*
/* Point past the descriptor */
* Point past the descriptor
*/
++
buffer
;
++
buffer
;
/*
/*
...
...
drivers/acpi/tables/tbget.c
View file @
c232f2a1
...
@@ -167,6 +167,9 @@ acpi_tb_get_table_header (
...
@@ -167,6 +167,9 @@ acpi_tb_get_table_header (
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Table Signature: [%4.4s]
\n
"
,
return_header
->
signature
));
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
...
drivers/acpi/tables/tbxfroot.c
View file @
c232f2a1
...
@@ -87,6 +87,21 @@ acpi_tb_find_table (
...
@@ -87,6 +87,21 @@ acpi_tb_find_table (
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
}
if
(
!
ACPI_STRNCMP
(
signature
,
DSDT_SIG
,
ACPI_NAME_SIZE
))
{
/*
* The DSDT pointer is contained in the FADT, not the RSDT.
* This code should suffice, because the only code that would perform
* a "find" on the DSDT is the data_table_region() AML opcode -- in
* which case, the DSDT is guaranteed to be already loaded.
* If this becomes insufficient, the FADT will have to be found first.
*/
if
(
!
acpi_gbl_DSDT
)
{
return_ACPI_STATUS
(
AE_NO_ACPI_TABLES
);
}
table
=
acpi_gbl_DSDT
;
}
else
{
/* Find the table */
/* Find the table */
status
=
acpi_get_firmware_table
(
signature
,
1
,
status
=
acpi_get_firmware_table
(
signature
,
1
,
...
@@ -94,6 +109,7 @@ acpi_tb_find_table (
...
@@ -94,6 +109,7 @@ acpi_tb_find_table (
if
(
ACPI_FAILURE
(
status
))
{
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
return_ACPI_STATUS
(
status
);
}
}
}
/* Check oem_id and oem_table_id */
/* Check oem_id and oem_table_id */
...
@@ -102,6 +118,7 @@ acpi_tb_find_table (
...
@@ -102,6 +118,7 @@ acpi_tb_find_table (
return_ACPI_STATUS
(
AE_AML_NAME_NOT_FOUND
);
return_ACPI_STATUS
(
AE_AML_NAME_NOT_FOUND
);
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Found table [%4.4s]
\n
"
,
table
->
signature
));
*
table_ptr
=
table
;
*
table_ptr
=
table
;
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
}
}
...
...
drivers/acpi/utilities/utalloc.c
View file @
c232f2a1
...
@@ -265,7 +265,7 @@ acpi_ut_validate_buffer (
...
@@ -265,7 +265,7 @@ acpi_ut_validate_buffer (
* RETURN: Status
* RETURN: Status
*
*
* DESCRIPTION: Validate that the buffer is of the required length or
* DESCRIPTION: Validate that the buffer is of the required length or
* allocate a new buffer.
* allocate a new buffer.
Returned buffer is always zeroed.
*
*
******************************************************************************/
******************************************************************************/
...
@@ -305,24 +305,25 @@ acpi_ut_initialize_buffer (
...
@@ -305,24 +305,25 @@ acpi_ut_initialize_buffer (
/* Allocate a new buffer with local interface to allow tracking */
/* Allocate a new buffer with local interface to allow tracking */
buffer
->
pointer
=
ACPI_MEM_ALLOCATE
(
required_length
);
buffer
->
pointer
=
ACPI_MEM_
C
ALLOCATE
(
required_length
);
if
(
!
buffer
->
pointer
)
{
if
(
!
buffer
->
pointer
)
{
return
(
AE_NO_MEMORY
);
return
(
AE_NO_MEMORY
);
}
}
/* Clear the buffer */
ACPI_MEMSET
(
buffer
->
pointer
,
0
,
required_length
);
break
;
break
;
default:
default:
/* Validate the size of the buffer */
/*
Existing buffer:
Validate the size of the buffer */
if
(
buffer
->
length
<
required_length
)
{
if
(
buffer
->
length
<
required_length
)
{
status
=
AE_BUFFER_OVERFLOW
;
status
=
AE_BUFFER_OVERFLOW
;
break
;
}
}
/* Clear the buffer */
ACPI_MEMSET
(
buffer
->
pointer
,
0
,
required_length
);
break
;
break
;
}
}
...
@@ -472,7 +473,7 @@ acpi_ut_allocate_and_track (
...
@@ -472,7 +473,7 @@ acpi_ut_allocate_and_track (
acpi_status
status
;
acpi_status
status
;
allocation
=
acpi_ut_allocate
(
size
+
sizeof
(
struct
acpi_debug_mem_
block
),
component
,
allocation
=
acpi_ut_allocate
(
size
+
sizeof
(
struct
acpi_debug_mem_
header
),
component
,
module
,
line
);
module
,
line
);
if
(
!
allocation
)
{
if
(
!
allocation
)
{
return
(
NULL
);
return
(
NULL
);
...
@@ -518,7 +519,7 @@ acpi_ut_callocate_and_track (
...
@@ -518,7 +519,7 @@ acpi_ut_callocate_and_track (
acpi_status
status
;
acpi_status
status
;
allocation
=
acpi_ut_callocate
(
size
+
sizeof
(
struct
acpi_debug_mem_
block
),
component
,
allocation
=
acpi_ut_callocate
(
size
+
sizeof
(
struct
acpi_debug_mem_
header
),
component
,
module
,
line
);
module
,
line
);
if
(
!
allocation
)
{
if
(
!
allocation
)
{
/* Report allocation error */
/* Report allocation error */
...
@@ -712,6 +713,7 @@ acpi_ut_track_allocation (
...
@@ -712,6 +713,7 @@ acpi_ut_track_allocation (
allocation
->
line
=
line
;
allocation
->
line
=
line
;
ACPI_STRNCPY
(
allocation
->
module
,
module
,
ACPI_MAX_MODULE_NAME
);
ACPI_STRNCPY
(
allocation
->
module
,
module
,
ACPI_MAX_MODULE_NAME
);
allocation
->
module
[
ACPI_MAX_MODULE_NAME
-
1
]
=
0
;
/* Insert at list head */
/* Insert at list head */
...
...
drivers/acpi/utilities/utdelete.c
View file @
c232f2a1
...
@@ -621,6 +621,10 @@ acpi_ut_add_reference (
...
@@ -621,6 +621,10 @@ acpi_ut_add_reference (
return_VOID
;
return_VOID
;
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Current Refs=%X [To Be Incremented]
\n
"
,
object
,
object
->
common
.
reference_count
));
/* Increment the reference count */
/* Increment the reference count */
(
void
)
acpi_ut_update_object_reference
(
object
,
REF_INCREMENT
);
(
void
)
acpi_ut_update_object_reference
(
object
,
REF_INCREMENT
);
...
@@ -664,7 +668,8 @@ acpi_ut_remove_reference (
...
@@ -664,7 +668,8 @@ acpi_ut_remove_reference (
return_VOID
;
return_VOID
;
}
}
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Refs=%X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Current Refs=%X [To Be Decremented]
\n
"
,
object
,
object
->
common
.
reference_count
));
object
,
object
->
common
.
reference_count
));
/*
/*
...
...
drivers/acpi/utilities/utglobal.c
View file @
c232f2a1
...
@@ -861,6 +861,7 @@ acpi_ut_init_globals (
...
@@ -861,6 +861,7 @@ acpi_ut_init_globals (
acpi_gbl_system_notify
.
handler
=
NULL
;
acpi_gbl_system_notify
.
handler
=
NULL
;
acpi_gbl_device_notify
.
handler
=
NULL
;
acpi_gbl_device_notify
.
handler
=
NULL
;
acpi_gbl_exception_handler
=
NULL
;
acpi_gbl_init_handler
=
NULL
;
acpi_gbl_init_handler
=
NULL
;
/* Global "typed" ACPI table pointers */
/* Global "typed" ACPI table pointers */
...
...
drivers/acpi/utilities/utmath.c
View file @
c232f2a1
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
*
*
* FUNCTION: acpi_ut_short_divide
* FUNCTION: acpi_ut_short_divide
*
*
* PARAMETERS:
in_dividend - Pointer to the
dividend
* PARAMETERS:
Dividend - 64-bit
dividend
* Divisor - 32-bit divisor
* Divisor - 32-bit divisor
* out_quotient - Pointer to where the quotient is returned
* out_quotient - Pointer to where the quotient is returned
* out_remainder - Pointer to where the remainder is returned
* out_remainder - Pointer to where the remainder is returned
...
@@ -74,19 +74,18 @@
...
@@ -74,19 +74,18 @@
acpi_status
acpi_status
acpi_ut_short_divide
(
acpi_ut_short_divide
(
acpi_integer
*
in_
dividend
,
acpi_integer
dividend
,
u32
divisor
,
u32
divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
)
u32
*
out_remainder
)
{
{
union
uint64_overlay
dividend
;
union
uint64_overlay
dividend
_ovl
;
union
uint64_overlay
quotient
;
union
uint64_overlay
quotient
;
u32
remainder32
;
u32
remainder32
;
ACPI_FUNCTION_TRACE
(
"ut_short_divide"
);
ACPI_FUNCTION_TRACE
(
"ut_short_divide"
);
dividend
.
full
=
*
in_dividend
;
/* Always check for a zero divisor */
/* Always check for a zero divisor */
...
@@ -95,13 +94,15 @@ acpi_ut_short_divide (
...
@@ -95,13 +94,15 @@ acpi_ut_short_divide (
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
}
dividend_ovl
.
full
=
dividend
;
/*
/*
* The quotient is 64 bits, the remainder is always 32 bits,
* The quotient is 64 bits, the remainder is always 32 bits,
* and is generated by the second divide.
* and is generated by the second divide.
*/
*/
ACPI_DIV_64_BY_32
(
0
,
dividend
.
part
.
hi
,
divisor
,
ACPI_DIV_64_BY_32
(
0
,
dividend
_ovl
.
part
.
hi
,
divisor
,
quotient
.
part
.
hi
,
remainder32
);
quotient
.
part
.
hi
,
remainder32
);
ACPI_DIV_64_BY_32
(
remainder32
,
dividend
.
part
.
lo
,
divisor
,
ACPI_DIV_64_BY_32
(
remainder32
,
dividend
_ovl
.
part
.
lo
,
divisor
,
quotient
.
part
.
lo
,
remainder32
);
quotient
.
part
.
lo
,
remainder32
);
/* Return only what was requested */
/* Return only what was requested */
...
@@ -121,8 +122,8 @@ acpi_ut_short_divide (
...
@@ -121,8 +122,8 @@ acpi_ut_short_divide (
*
*
* FUNCTION: acpi_ut_divide
* FUNCTION: acpi_ut_divide
*
*
* PARAMETERS: in_dividend -
Pointer to the d
ividend
* PARAMETERS: in_dividend -
D
ividend
* in_divisor -
Pointer to the d
ivisor
* in_divisor -
D
ivisor
* out_quotient - Pointer to where the quotient is returned
* out_quotient - Pointer to where the quotient is returned
* out_remainder - Pointer to where the remainder is returned
* out_remainder - Pointer to where the remainder is returned
*
*
...
@@ -134,8 +135,8 @@ acpi_ut_short_divide (
...
@@ -134,8 +135,8 @@ acpi_ut_short_divide (
acpi_status
acpi_status
acpi_ut_divide
(
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
)
acpi_integer
*
out_remainder
)
{
{
...
@@ -155,13 +156,13 @@ acpi_ut_divide (
...
@@ -155,13 +156,13 @@ acpi_ut_divide (
/* Always check for a zero divisor */
/* Always check for a zero divisor */
if
(
*
in_divisor
==
0
)
{
if
(
in_divisor
==
0
)
{
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
}
divisor
.
full
=
*
in_divisor
;
divisor
.
full
=
in_divisor
;
dividend
.
full
=
*
in_dividend
;
dividend
.
full
=
in_dividend
;
if
(
divisor
.
part
.
hi
==
0
)
{
if
(
divisor
.
part
.
hi
==
0
)
{
/*
/*
* 1) Simplest case is where the divisor is 32 bits, we can
* 1) Simplest case is where the divisor is 32 bits, we can
...
@@ -269,7 +270,7 @@ acpi_ut_divide (
...
@@ -269,7 +270,7 @@ acpi_ut_divide (
acpi_status
acpi_status
acpi_ut_short_divide
(
acpi_ut_short_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
u32
divisor
,
u32
divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
)
u32
*
out_remainder
)
...
@@ -288,10 +289,10 @@ acpi_ut_short_divide (
...
@@ -288,10 +289,10 @@ acpi_ut_short_divide (
/* Return only what was requested */
/* Return only what was requested */
if
(
out_quotient
)
{
if
(
out_quotient
)
{
*
out_quotient
=
*
in_dividend
/
divisor
;
*
out_quotient
=
in_dividend
/
divisor
;
}
}
if
(
out_remainder
)
{
if
(
out_remainder
)
{
*
out_remainder
=
(
u32
)
*
in_dividend
%
divisor
;
*
out_remainder
=
(
u32
)
in_dividend
%
divisor
;
}
}
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
...
@@ -299,8 +300,8 @@ acpi_ut_short_divide (
...
@@ -299,8 +300,8 @@ acpi_ut_short_divide (
acpi_status
acpi_status
acpi_ut_divide
(
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
)
acpi_integer
*
out_remainder
)
{
{
...
@@ -309,7 +310,7 @@ acpi_ut_divide (
...
@@ -309,7 +310,7 @@ acpi_ut_divide (
/* Always check for a zero divisor */
/* Always check for a zero divisor */
if
(
*
in_divisor
==
0
)
{
if
(
in_divisor
==
0
)
{
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
}
...
@@ -318,10 +319,10 @@ acpi_ut_divide (
...
@@ -318,10 +319,10 @@ acpi_ut_divide (
/* Return only what was requested */
/* Return only what was requested */
if
(
out_quotient
)
{
if
(
out_quotient
)
{
*
out_quotient
=
*
in_dividend
/
*
in_divisor
;
*
out_quotient
=
in_dividend
/
in_divisor
;
}
}
if
(
out_remainder
)
{
if
(
out_remainder
)
{
*
out_remainder
=
*
in_dividend
%
*
in_divisor
;
*
out_remainder
=
in_dividend
%
in_divisor
;
}
}
return_ACPI_STATUS
(
AE_OK
);
return_ACPI_STATUS
(
AE_OK
);
...
...
drivers/acpi/utilities/utmisc.c
View file @
c232f2a1
...
@@ -356,16 +356,15 @@ acpi_ut_valid_acpi_character (
...
@@ -356,16 +356,15 @@ acpi_ut_valid_acpi_character (
* FUNCTION: acpi_ut_strtoul64
* FUNCTION: acpi_ut_strtoul64
*
*
* PARAMETERS: String - Null terminated string
* PARAMETERS: String - Null terminated string
*
Terminater - Where a pointer to the terminating byte is returned
*
Base - Radix of the string: 10, 16, or ACPI_ANY_BASE
*
Base - Radix of the string
*
ret_integer - Where the converted integer is returned
*
*
* RETURN: Converted value
* RETURN:
Status and
Converted value
*
*
* DESCRIPTION: Convert a string into an unsigned value.
* DESCRIPTION: Convert a string into an unsigned value.
* NOTE: Does not support Octal strings, not needed.
*
*
******************************************************************************/
******************************************************************************/
#define NEGATIVE 1
#define POSITIVE 0
acpi_status
acpi_status
acpi_ut_strtoul64
(
acpi_ut_strtoul64
(
...
@@ -373,127 +372,108 @@ acpi_ut_strtoul64 (
...
@@ -373,127 +372,108 @@ acpi_ut_strtoul64 (
u32
base
,
u32
base
,
acpi_integer
*
ret_integer
)
acpi_integer
*
ret_integer
)
{
{
u32
index
;
u32
this_digit
;
acpi_integer
return_value
=
0
;
acpi_integer
return_value
=
0
;
acpi_status
status
=
AE_OK
;
acpi_integer
dividend
;
acpi_integer
quotient
;
acpi_integer
quotient
;
*
ret_integer
=
0
;
ACPI_FUNCTION_TRACE
(
"ut_stroul64"
);
switch
(
base
)
{
switch
(
base
)
{
case
0
:
case
ACPI_ANY_BASE
:
case
8
:
case
10
:
case
10
:
case
16
:
case
16
:
break
;
break
;
default:
default:
/*
/* Invalid Base */
* The specified Base parameter is not in the domain of
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
* this function:
*/
return
(
AE_BAD_PARAMETER
);
}
}
/*
/* Skip over any white space in the buffer */
* skip over any white space in the buffer:
*/
while
(
ACPI_IS_SPACE
(
*
string
)
||
*
string
==
'\t'
)
{
while
(
ACPI_IS_SPACE
(
*
string
)
||
*
string
==
'\t'
)
{
++
string
;
++
string
;
}
}
/*
/*
* If the input parameter Base is zero, then we need to
* If the input parameter Base is zero, then we need to
* determine if it is
octal, decimal,
or hexadecimal:
* determine if it is
decimal
or hexadecimal:
*/
*/
if
(
base
==
0
)
{
if
(
base
==
0
)
{
if
(
*
string
==
'0'
)
{
if
(
(
*
string
==
'0'
)
&&
if
(
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
{
(
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
)
{
base
=
16
;
base
=
16
;
++
string
;
++
string
;
}
}
else
{
base
=
8
;
}
}
else
{
else
{
base
=
10
;
base
=
10
;
}
}
}
}
/*
/*
* For
octal and hexadecimal bases
, skip over the leading
* For
hexadecimal base
, skip over the leading
* 0 or 0x, if they are present.
* 0 or 0x, if they are present.
*/
*/
if
(
base
==
8
&&
*
string
==
'0'
)
{
string
++
;
}
if
(
base
==
16
&&
if
(
base
==
16
&&
*
string
==
'0'
&&
*
string
==
'0'
&&
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
{
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
{
string
++
;
string
++
;
}
}
/* Main loop: convert the string to a
n unsigned long
*/
/* Main loop: convert the string to a
64-bit integer
*/
while
(
*
string
)
{
while
(
*
string
)
{
if
(
ACPI_IS_DIGIT
(
*
string
))
{
if
(
ACPI_IS_DIGIT
(
*
string
))
{
index
=
((
u8
)
*
string
)
-
'0'
;
/* Convert ASCII 0-9 to Decimal value */
this_digit
=
((
u8
)
*
string
)
-
'0'
;
}
}
else
{
else
{
index
=
(
u8
)
ACPI_TOUPPER
(
*
string
);
this_digit
=
(
u8
)
ACPI_TOUPPER
(
*
string
);
if
(
ACPI_IS_UPPER
((
char
)
index
))
{
if
(
ACPI_IS_UPPER
((
char
)
this_digit
))
{
index
=
index
-
'A'
+
10
;
/* Convert ASCII Hex char to value */
this_digit
=
this_digit
-
'A'
+
10
;
}
}
else
{
else
{
goto
error_exit
;
goto
error_exit
;
}
}
}
}
if
(
index
>=
base
)
{
/* Check to see if digit is out of range */
if
(
this_digit
>=
base
)
{
goto
error_exit
;
goto
error_exit
;
}
}
/*
Check to see if value is out of range:
*/
/*
Divide the digit into the correct position
*/
dividend
=
ACPI_INTEGER_MAX
-
(
acpi_integer
)
index
;
(
void
)
acpi_ut_short_divide
((
ACPI_INTEGER_MAX
-
(
acpi_integer
)
this_digit
),
(
void
)
acpi_ut_short_divide
(
&
dividend
,
base
,
&
quotient
,
NULL
);
base
,
&
quotient
,
NULL
);
if
(
return_value
>
quotient
)
{
if
(
return_value
>
quotient
)
{
goto
error_exit
;
goto
error_exit
;
}
}
return_value
*=
base
;
return_value
*=
base
;
return_value
+=
index
;
return_value
+=
this_digit
;
++
string
;
++
string
;
}
}
*
ret_integer
=
return_value
;
*
ret_integer
=
return_value
;
return
(
status
);
return
_ACPI_STATUS
(
AE_OK
);
error_exit:
error_exit:
switch
(
base
)
{
/* Base was set/validated above */
case
8
:
status
=
AE_BAD_OCTAL_CONSTANT
;
break
;
case
10
:
if
(
base
==
10
)
{
status
=
AE_BAD_DECIMAL_CONSTANT
;
return_ACPI_STATUS
(
AE_BAD_DECIMAL_CONSTANT
);
break
;
}
else
{
case
16
:
return_ACPI_STATUS
(
AE_BAD_HEX_CONSTANT
);
status
=
AE_BAD_HEX_CONSTANT
;
break
;
default:
/* Base validated above */
break
;
}
}
return
(
status
);
}
}
...
...
drivers/acpi/utilities/utobject.c
View file @
c232f2a1
...
@@ -155,9 +155,8 @@ acpi_ut_create_buffer_object (
...
@@ -155,9 +155,8 @@ acpi_ut_create_buffer_object (
ACPI_FUNCTION_TRACE_U32
(
"ut_create_buffer_object"
,
buffer_size
);
ACPI_FUNCTION_TRACE_U32
(
"ut_create_buffer_object"
,
buffer_size
);
/*
/* Create a new Buffer object */
* Create a new Buffer object
*/
buffer_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_BUFFER
);
buffer_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_BUFFER
);
if
(
!
buffer_desc
)
{
if
(
!
buffer_desc
)
{
return_PTR
(
NULL
);
return_PTR
(
NULL
);
...
@@ -189,6 +188,61 @@ acpi_ut_create_buffer_object (
...
@@ -189,6 +188,61 @@ acpi_ut_create_buffer_object (
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_create_string_object
*
* PARAMETERS: string_size - Size of string to be created. Does not
* include NULL terminator, this is added
* automatically.
*
* RETURN: Pointer to a new String object
*
* DESCRIPTION: Create a fully initialized string object
*
******************************************************************************/
union
acpi_operand_object
*
acpi_ut_create_string_object
(
acpi_size
string_size
)
{
union
acpi_operand_object
*
string_desc
;
char
*
string
;
ACPI_FUNCTION_TRACE_U32
(
"ut_create_string_object"
,
string_size
);
/* Create a new String object */
string_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
string_desc
)
{
return_PTR
(
NULL
);
}
/*
* Allocate the actual string buffer -- (Size + 1) for NULL terminator.
* NOTE: Zero-length strings are NULL terminated
*/
string
=
ACPI_MEM_CALLOCATE
(
string_size
+
1
);
if
(
!
string
)
{
ACPI_REPORT_ERROR
((
"create_string: could not allocate size %X
\n
"
,
(
u32
)
string_size
));
acpi_ut_remove_reference
(
string_desc
);
return_PTR
(
NULL
);
}
/* Complete string object initialization */
string_desc
->
string
.
pointer
=
string
;
string_desc
->
string
.
length
=
(
u32
)
string_size
;
/* Return the new string descriptor */
return_PTR
(
string_desc
);
}
/*******************************************************************************
/*******************************************************************************
*
*
* FUNCTION: acpi_ut_valid_internal_object
* FUNCTION: acpi_ut_valid_internal_object
...
...
include/acpi/acconfig.h
View file @
c232f2a1
...
@@ -64,7 +64,7 @@
...
@@ -64,7 +64,7 @@
/* Version string */
/* Version string */
#define ACPI_CA_VERSION 0x2004
0816
#define ACPI_CA_VERSION 0x2004
1015
/*
/*
* OS name, used for the _OS object. The _OS object is essentially obsolete,
* OS name, used for the _OS object. The _OS object is essentially obsolete,
...
...
include/acpi/acglobal.h
View file @
c232f2a1
...
@@ -180,6 +180,7 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX];
...
@@ -180,6 +180,7 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX];
ACPI_EXTERN
struct
acpi_memory_list
acpi_gbl_memory_lists
[
ACPI_NUM_MEM_LISTS
];
ACPI_EXTERN
struct
acpi_memory_list
acpi_gbl_memory_lists
[
ACPI_NUM_MEM_LISTS
];
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_device_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_device_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_system_notify
;
ACPI_EXTERN
struct
acpi_object_notify_handler
acpi_gbl_system_notify
;
ACPI_EXTERN
acpi_exception_handler
acpi_gbl_exception_handler
;
ACPI_EXTERN
acpi_init_handler
acpi_gbl_init_handler
;
ACPI_EXTERN
acpi_init_handler
acpi_gbl_init_handler
;
ACPI_EXTERN
struct
acpi_walk_state
*
acpi_gbl_breakpoint_walk
;
ACPI_EXTERN
struct
acpi_walk_state
*
acpi_gbl_breakpoint_walk
;
ACPI_EXTERN
acpi_handle
acpi_gbl_global_lock_semaphore
;
ACPI_EXTERN
acpi_handle
acpi_gbl_global_lock_semaphore
;
...
...
include/acpi/acinterp.h
View file @
c232f2a1
...
@@ -83,21 +83,25 @@ acpi_status
...
@@ -83,21 +83,25 @@ acpi_status
acpi_ex_convert_to_integer
(
acpi_ex_convert_to_integer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
);
u32
flags
);
acpi_status
acpi_status
acpi_ex_convert_to_buffer
(
acpi_ex_convert_to_buffer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
);
struct
acpi_walk_state
*
walk_state
);
acpi_status
acpi_status
acpi_ex_convert_to_string
(
acpi_ex_convert_to_string
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
union
acpi_operand_object
**
result_desc
,
u32
base
,
u32
type
);
u32
max_length
,
struct
acpi_walk_state
*
walk_state
);
/* Types for ->String conversion */
#define ACPI_EXPLICIT_BYTE_COPY 0x00000000
#define ACPI_EXPLICIT_CONVERT_HEX 0x00000001
#define ACPI_IMPLICIT_CONVERT_HEX 0x00000002
#define ACPI_EXPLICIT_CONVERT_DECIMAL 0x00000003
acpi_status
acpi_status
acpi_ex_convert_to_target_type
(
acpi_ex_convert_to_target_type
(
...
@@ -109,7 +113,7 @@ acpi_ex_convert_to_target_type (
...
@@ -109,7 +113,7 @@ acpi_ex_convert_to_target_type (
u32
u32
acpi_ex_convert_to_ascii
(
acpi_ex_convert_to_ascii
(
acpi_integer
integer
,
acpi_integer
integer
,
u
32
base
,
u
16
base
,
u8
*
string
,
u8
*
string
,
u8
max_length
);
u8
max_length
);
...
@@ -243,11 +247,19 @@ acpi_ex_do_concatenate (
...
@@ -243,11 +247,19 @@ acpi_ex_do_concatenate (
union
acpi_operand_object
**
actual_return_desc
,
union
acpi_operand_object
**
actual_return_desc
,
struct
acpi_walk_state
*
walk_state
);
struct
acpi_walk_state
*
walk_state
);
u8
acpi_status
acpi_ex_do_logical_numeric_op
(
u16
opcode
,
acpi_integer
integer0
,
acpi_integer
integer1
,
u8
*
logical_result
);
acpi_status
acpi_ex_do_logical_op
(
acpi_ex_do_logical_op
(
u16
opcode
,
u16
opcode
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
operand0
,
union
acpi_operand_object
*
obj_desc2
);
union
acpi_operand_object
*
operand1
,
u8
*
logical_result
);
acpi_integer
acpi_integer
acpi_ex_do_math_op
(
acpi_ex_do_math_op
(
...
@@ -374,7 +386,7 @@ acpi_ex_system_do_notify_op (
...
@@ -374,7 +386,7 @@ acpi_ex_system_do_notify_op (
acpi_status
acpi_status
acpi_ex_system_do_suspend
(
acpi_ex_system_do_suspend
(
u32
time
);
acpi_integer
time
);
acpi_status
acpi_status
acpi_ex_system_do_stall
(
acpi_ex_system_do_stall
(
...
@@ -412,6 +424,10 @@ acpi_ex_system_wait_semaphore (
...
@@ -412,6 +424,10 @@ acpi_ex_system_wait_semaphore (
* exmonadic - ACPI AML (p-code) execution, monadic operators
* exmonadic - ACPI AML (p-code) execution, monadic operators
*/
*/
acpi_status
acpi_ex_opcode_0A_0T_1R
(
struct
acpi_walk_state
*
walk_state
);
acpi_status
acpi_status
acpi_ex_opcode_1A_0T_0R
(
acpi_ex_opcode_1A_0T_0R
(
struct
acpi_walk_state
*
walk_state
);
struct
acpi_walk_state
*
walk_state
);
...
...
include/acpi/aclocal.h
View file @
c232f2a1
...
@@ -53,7 +53,7 @@ typedef u32 acpi_mutex_handle;
...
@@ -53,7 +53,7 @@ typedef u32 acpi_mutex_handle;
/* Total number of aml opcodes defined */
/* Total number of aml opcodes defined */
#define AML_NUM_OPCODES 0x7
E
#define AML_NUM_OPCODES 0x7
F
/*****************************************************************************
/*****************************************************************************
...
...
include/acpi/acobject.h
View file @
c232f2a1
...
@@ -135,7 +135,10 @@ struct acpi_object_integer
...
@@ -135,7 +135,10 @@ struct acpi_object_integer
acpi_integer
value
;
acpi_integer
value
;
};
};
/*
* Note: The String and Buffer object must be identical through the Pointer
* element. There is code that depends on this.
*/
struct
acpi_object_string
/* Null terminated, ASCII characters only */
struct
acpi_object_string
/* Null terminated, ASCII characters only */
{
{
ACPI_OBJECT_COMMON_HEADER
ACPI_OBJECT_COMMON_HEADER
...
...
include/acpi/acpiosxf.h
View file @
c232f2a1
...
@@ -216,10 +216,13 @@ void
...
@@ -216,10 +216,13 @@ void
acpi_os_wait_events_complete
(
acpi_os_wait_events_complete
(
void
*
context
);
void
*
context
);
void
acpi_os_wait_events_complete
(
void
*
context
);
void
void
acpi_os_sleep
(
acpi_os_sleep
(
u32
seconds
,
acpi_integer
milliseconds
);
u32
milliseconds
);
void
void
acpi_os_stall
(
acpi_os_stall
(
...
@@ -304,7 +307,7 @@ acpi_os_writable (
...
@@ -304,7 +307,7 @@ acpi_os_writable (
void
*
pointer
,
void
*
pointer
,
acpi_size
length
);
acpi_size
length
);
u
32
u
64
acpi_os_get_timer
(
acpi_os_get_timer
(
void
);
void
);
...
...
include/acpi/acpixf.h
View file @
c232f2a1
...
@@ -299,6 +299,15 @@ acpi_install_gpe_handler (
...
@@ -299,6 +299,15 @@ acpi_install_gpe_handler (
acpi_event_handler
address
,
acpi_event_handler
address
,
void
*
context
);
void
*
context
);
acpi_status
acpi_install_exception_handler
(
acpi_exception_handler
handler
);
/*
* Event interfaces
*/
acpi_status
acpi_status
acpi_acquire_global_lock
(
acpi_acquire_global_lock
(
u16
timeout
,
u16
timeout
,
...
...
include/acpi/actypes.h
View file @
c232f2a1
...
@@ -303,7 +303,7 @@ struct uint32_struct
...
@@ -303,7 +303,7 @@ struct uint32_struct
typedef
u32
acpi_integer
;
typedef
u32
acpi_integer
;
#define ACPI_INTEGER_MAX ACPI_UINT32_MAX
#define ACPI_INTEGER_MAX ACPI_UINT32_MAX
#define ACPI_INTEGER_BIT_SIZE 32
#define ACPI_INTEGER_BIT_SIZE 32
#define ACPI_MAX_DECIMAL_DIGITS 10
#define ACPI_MAX_DECIMAL_DIGITS 10
/* 2^32 = 4,294,967,296 */
#define ACPI_USE_NATIVE_DIVIDE
/* Use compiler native 32-bit divide */
#define ACPI_USE_NATIVE_DIVIDE
/* Use compiler native 32-bit divide */
...
@@ -315,13 +315,18 @@ typedef u32 acpi_integer;
...
@@ -315,13 +315,18 @@ typedef u32 acpi_integer;
typedef
u64
acpi_integer
;
typedef
u64
acpi_integer
;
#define ACPI_INTEGER_MAX ACPI_UINT64_MAX
#define ACPI_INTEGER_MAX ACPI_UINT64_MAX
#define ACPI_INTEGER_BIT_SIZE 64
#define ACPI_INTEGER_BIT_SIZE 64
#define ACPI_MAX_DECIMAL_DIGITS 19
#define ACPI_MAX_DECIMAL_DIGITS 20
/* 2^64 = 18,446,744,073,709,551,616 */
#if ACPI_MACHINE_WIDTH == 64
#if ACPI_MACHINE_WIDTH == 64
#define ACPI_USE_NATIVE_DIVIDE
/* Use compiler native 64-bit divide */
#define ACPI_USE_NATIVE_DIVIDE
/* Use compiler native 64-bit divide */
#endif
#endif
#endif
#endif
#define ACPI_MAX64_DECIMAL_DIGITS 20
#define ACPI_MAX32_DECIMAL_DIGITS 10
#define ACPI_MAX16_DECIMAL_DIGITS 5
#define ACPI_MAX8_DECIMAL_DIGITS 3
/*
/*
* Constants with special meanings
* Constants with special meanings
...
@@ -831,6 +836,14 @@ acpi_status (*acpi_init_handler) (
...
@@ -831,6 +836,14 @@ acpi_status (*acpi_init_handler) (
#define ACPI_INIT_DEVICE_INI 1
#define ACPI_INIT_DEVICE_INI 1
typedef
acpi_status
(
*
acpi_exception_handler
)
(
acpi_status
aml_status
,
acpi_name
name
,
u16
opcode
,
u32
aml_offset
,
void
*
context
);
/* Address Spaces (For Operation Regions) */
/* Address Spaces (For Operation Regions) */
...
...
include/acpi/acutils.h
View file @
c232f2a1
...
@@ -177,6 +177,12 @@ acpi_ut_strncpy (
...
@@ -177,6 +177,12 @@ acpi_ut_strncpy (
const
char
*
src_string
,
const
char
*
src_string
,
acpi_size
count
);
acpi_size
count
);
int
acpi_ut_memcmp
(
const
char
*
buffer1
,
const
char
*
buffer2
,
acpi_size
count
);
int
int
acpi_ut_strncmp
(
acpi_ut_strncmp
(
const
char
*
string1
,
const
char
*
string1
,
...
@@ -577,6 +583,10 @@ union acpi_operand_object *
...
@@ -577,6 +583,10 @@ union acpi_operand_object *
acpi_ut_create_buffer_object
(
acpi_ut_create_buffer_object
(
acpi_size
buffer_size
);
acpi_size
buffer_size
);
union
acpi_operand_object
*
acpi_ut_create_string_object
(
acpi_size
string_size
);
/*
/*
* ut_ref_cnt - Object reference count management
* ut_ref_cnt - Object reference count management
...
@@ -690,14 +700,14 @@ acpi_ut_print_string (
...
@@ -690,14 +700,14 @@ acpi_ut_print_string (
acpi_status
acpi_status
acpi_ut_divide
(
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
);
acpi_integer
*
out_remainder
);
acpi_status
acpi_status
acpi_ut_short_divide
(
acpi_ut_short_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
u32
divisor
,
u32
divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
);
u32
*
out_remainder
);
...
@@ -716,6 +726,10 @@ acpi_ut_strtoul64 (
...
@@ -716,6 +726,10 @@ acpi_ut_strtoul64 (
u32
base
,
u32
base
,
acpi_integer
*
ret_integer
);
acpi_integer
*
ret_integer
);
/* Values for Base above (16=Hex, 10=Decimal) */
#define ACPI_ANY_BASE 0
char
*
char
*
acpi_ut_strupr
(
acpi_ut_strupr
(
char
*
src_string
);
char
*
src_string
);
...
...
include/acpi/amlcode.h
View file @
c232f2a1
...
@@ -170,6 +170,7 @@
...
@@ -170,6 +170,7 @@
#define AML_REVISION_OP (u16) 0x5b30
#define AML_REVISION_OP (u16) 0x5b30
#define AML_DEBUG_OP (u16) 0x5b31
#define AML_DEBUG_OP (u16) 0x5b31
#define AML_FATAL_OP (u16) 0x5b32
#define AML_FATAL_OP (u16) 0x5b32
#define AML_TIMER_OP (u16) 0x5b33
/* ACPI 3.0 */
#define AML_REGION_OP (u16) 0x5b80
#define AML_REGION_OP (u16) 0x5b80
#define AML_FIELD_OP (u16) 0x5b81
#define AML_FIELD_OP (u16) 0x5b81
#define AML_DEVICE_OP (u16) 0x5b82
#define AML_DEVICE_OP (u16) 0x5b82
...
@@ -305,22 +306,24 @@
...
@@ -305,22 +306,24 @@
/* Opcode flags */
/* Opcode flags */
#define AML_HAS_ARGS 0x0800
#define AML_HAS_TARGET 0x0400
#define AML_HAS_RETVAL 0x0200
#define AML_NSOBJECT 0x0100
#define AML_NSOPCODE 0x0080
#define AML_NSNODE 0x0040
#define AML_NAMED 0x0020
#define AML_DEFER 0x0010
#define AML_FIELD 0x0008
#define AML_CREATE 0x0004
#define AML_MATH 0x0002
#define AML_LOGICAL 0x0001
#define AML_LOGICAL 0x0001
#define AML_CONSTANT 0x1000
#define AML_LOGICAL_NUMERIC 0x0002
#define AML_MATH 0x0004
#define AML_CREATE 0x0008
#define AML_FIELD 0x0010
#define AML_DEFER 0x0020
#define AML_NAMED 0x0040
#define AML_NSNODE 0x0080
#define AML_NSOPCODE 0x0100
#define AML_NSOBJECT 0x0200
#define AML_HAS_RETVAL 0x0400
#define AML_HAS_TARGET 0x0800
#define AML_HAS_ARGS 0x1000
#define AML_CONSTANT 0x2000
/* Convenient flag groupings */
/* Convenient flag groupings */
#define AML_FLAGS_EXEC_0A_0T_1R AML_HAS_RETVAL
#define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS
/* Monadic1 */
#define AML_FLAGS_EXEC_1A_0T_0R AML_HAS_ARGS
/* Monadic1 */
#define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL
/* Monadic2 */
#define AML_FLAGS_EXEC_1A_0T_1R AML_HAS_ARGS | AML_HAS_RETVAL
/* Monadic2 */
#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET
#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET
...
@@ -338,17 +341,18 @@
...
@@ -338,17 +341,18 @@
* The opcode Type is used in a dispatch table, do not change
* The opcode Type is used in a dispatch table, do not change
* without updating the table.
* without updating the table.
*/
*/
#define AML_TYPE_EXEC_1A_0T_0R 0x00
/* Monadic1 */
#define AML_TYPE_EXEC_0A_0T_1R 0x00
#define AML_TYPE_EXEC_1A_0T_1R 0x01
/* Monadic2 */
#define AML_TYPE_EXEC_1A_0T_0R 0x01
/* Monadic1 */
#define AML_TYPE_EXEC_1A_1T_0R 0x02
#define AML_TYPE_EXEC_1A_0T_1R 0x02
/* Monadic2 */
#define AML_TYPE_EXEC_1A_1T_1R 0x03
/* monadic2_r */
#define AML_TYPE_EXEC_1A_1T_0R 0x03
#define AML_TYPE_EXEC_2A_0T_0R 0x04
/* Dyadic1 */
#define AML_TYPE_EXEC_1A_1T_1R 0x04
/* monadic2_r */
#define AML_TYPE_EXEC_2A_0T_1R 0x05
/* Dyadic2 */
#define AML_TYPE_EXEC_2A_0T_0R 0x05
/* Dyadic1 */
#define AML_TYPE_EXEC_2A_1T_1R 0x06
/* dyadic2_r */
#define AML_TYPE_EXEC_2A_0T_1R 0x06
/* Dyadic2 */
#define AML_TYPE_EXEC_2A_2T_1R 0x07
#define AML_TYPE_EXEC_2A_1T_1R 0x07
/* dyadic2_r */
#define AML_TYPE_EXEC_3A_0T_0R 0x08
#define AML_TYPE_EXEC_2A_2T_1R 0x08
#define AML_TYPE_EXEC_3A_1T_1R 0x09
#define AML_TYPE_EXEC_3A_0T_0R 0x09
#define AML_TYPE_EXEC_6A_0T_1R 0x0A
#define AML_TYPE_EXEC_3A_1T_1R 0x0A
#define AML_TYPE_EXEC_6A_0T_1R 0x0B
/* End of types used in dispatch table */
/* End of types used in dispatch table */
#define AML_TYPE_LITERAL 0x0B
#define AML_TYPE_LITERAL 0x0B
...
...
include/acpi/amlresrc.h
View file @
c232f2a1
...
@@ -99,7 +99,7 @@ struct asl_resource_node
...
@@ -99,7 +99,7 @@ struct asl_resource_node
/*
/*
* Resource descriptors defined in the ACPI specification.
* Resource descriptors defined in the ACPI specification.
*
*
*
A
lignment must be BYTE because these descriptors
*
Packing/a
lignment must be BYTE because these descriptors
* are used to overlay the AML byte stream.
* are used to overlay the AML byte stream.
*/
*/
#pragma pack(1)
#pragma pack(1)
...
@@ -297,7 +297,7 @@ struct asl_general_register_desc
...
@@ -297,7 +297,7 @@ struct asl_general_register_desc
#pragma pack()
#pragma pack()
/* Union of all resource descriptors, so
w
we can allocate the worst case */
/* Union of all resource descriptors, so we can allocate the worst case */
union
asl_resource_desc
union
asl_resource_desc
{
{
...
...
include/acpi/platform/acenv.h
View file @
c232f2a1
...
@@ -232,6 +232,7 @@
...
@@ -232,6 +232,7 @@
#define ACPI_STRCAT(d,s) (void) strcat((d), (s))
#define ACPI_STRCAT(d,s) (void) strcat((d), (s))
#define ACPI_STRNCAT(d,s,n) strncat((d), (s), (acpi_size)(n))
#define ACPI_STRNCAT(d,s,n) strncat((d), (s), (acpi_size)(n))
#define ACPI_STRTOUL(d,s,n) strtoul((d), (s), (acpi_size)(n))
#define ACPI_STRTOUL(d,s,n) strtoul((d), (s), (acpi_size)(n))
#define ACPI_MEMCMP(s1,s2,n) memcmp((s1), (s2), (acpi_size)(n))
#define ACPI_MEMCPY(d,s,n) (void) memcpy((d), (s), (acpi_size)(n))
#define ACPI_MEMCPY(d,s,n) (void) memcpy((d), (s), (acpi_size)(n))
#define ACPI_MEMSET(d,s,n) (void) memset((d), (s), (acpi_size)(n))
#define ACPI_MEMSET(d,s,n) (void) memset((d), (s), (acpi_size)(n))
...
@@ -295,6 +296,7 @@ typedef char *va_list;
...
@@ -295,6 +296,7 @@ typedef char *va_list;
#define ACPI_STRCAT(d,s) (void) acpi_ut_strcat ((d), (s))
#define ACPI_STRCAT(d,s) (void) acpi_ut_strcat ((d), (s))
#define ACPI_STRNCAT(d,s,n) acpi_ut_strncat ((d), (s), (acpi_size)(n))
#define ACPI_STRNCAT(d,s,n) acpi_ut_strncat ((d), (s), (acpi_size)(n))
#define ACPI_STRTOUL(d,s,n) acpi_ut_strtoul ((d), (s), (acpi_size)(n))
#define ACPI_STRTOUL(d,s,n) acpi_ut_strtoul ((d), (s), (acpi_size)(n))
#define ACPI_MEMCMP(s1,s2,n) acpi_ut_memcmp((s1), (s2), (acpi_size)(n))
#define ACPI_MEMCPY(d,s,n) (void) acpi_ut_memcpy ((d), (s), (acpi_size)(n))
#define ACPI_MEMCPY(d,s,n) (void) acpi_ut_memcpy ((d), (s), (acpi_size)(n))
#define ACPI_MEMSET(d,v,n) (void) acpi_ut_memset ((d), (v), (acpi_size)(n))
#define ACPI_MEMSET(d,v,n) (void) acpi_ut_memset ((d), (v), (acpi_size)(n))
#define ACPI_TOUPPER acpi_ut_to_upper
#define ACPI_TOUPPER acpi_ut_to_upper
...
...
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