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
nexedi
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
Hide 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 (
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
,
acpi_ut_get_type_name
(
object
->
common
.
type
)));
...
...
@@ -572,7 +572,7 @@ acpi_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
));
/* Parameter validation */
...
...
drivers/acpi/dispatcher/dsutils.c
View file @
c232f2a1
...
...
@@ -333,7 +333,7 @@ acpi_ds_clear_operands (
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,17 +60,18 @@
* Dispatch table for opcode classes
*/
static
ACPI_EXECUTE_OP
acpi_gbl_op_type_dispatch
[]
=
{
acpi_ex_opcode_1A_0T_0R
,
acpi_ex_opcode_1A_0T_1R
,
acpi_ex_opcode_1A_1T_0R
,
acpi_ex_opcode_1A_1T_1R
,
acpi_ex_opcode_2A_0T_0R
,
acpi_ex_opcode_2A_0T_1R
,
acpi_ex_opcode_2A_1T_1R
,
acpi_ex_opcode_2A_2T_1R
,
acpi_ex_opcode_3A_0T_0R
,
acpi_ex_opcode_3A_1T_1R
,
acpi_ex_opcode_6A_0T_1R
};
acpi_ex_opcode_0A_0T_1R
,
acpi_ex_opcode_1A_0T_0R
,
acpi_ex_opcode_1A_0T_1R
,
acpi_ex_opcode_1A_1T_0R
,
acpi_ex_opcode_1A_1T_1R
,
acpi_ex_opcode_2A_0T_0R
,
acpi_ex_opcode_2A_0T_1R
,
acpi_ex_opcode_2A_1T_1R
,
acpi_ex_opcode_2A_2T_1R
,
acpi_ex_opcode_3A_0T_0R
,
acpi_ex_opcode_3A_1T_1R
,
acpi_ex_opcode_6A_0T_1R
};
/*****************************************************************************
*
...
...
@@ -413,7 +414,7 @@ acpi_ds_exec_end_op (
* routine. There is one routine per opcode "type" based upon the
* 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
{
/*
...
...
@@ -639,7 +640,8 @@ acpi_ds_exec_end_op (
* conditional predicate
*/
if
((
walk_state
->
control_state
)
&&
if
((
ACPI_SUCCESS
(
status
))
&&
(
walk_state
->
control_state
)
&&
(
walk_state
->
control_state
->
common
.
state
==
ACPI_CONTROL_PREDICATE_EXECUTING
)
&&
(
walk_state
->
control_state
->
control
.
predicate_op
==
op
))
{
...
...
@@ -649,6 +651,19 @@ acpi_ds_exec_end_op (
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
)
{
/* Break to debugger to display result */
...
...
drivers/acpi/events/evgpe.c
View file @
c232f2a1
...
...
@@ -434,13 +434,8 @@ acpi_ev_gpe_detect (
}
ACPI_DEBUG_PRINT
((
ACPI_DB_INTERRUPTS
,
"GPE pair: Status %8.8X%8.8X = %02X, Enable %8.8X%8.8X = %02X
\n
"
,
ACPI_FORMAT_UINT64
(
gpe_register_info
->
status_address
.
address
),
status_reg
,
ACPI_FORMAT_UINT64
(
gpe_register_info
->
enable_address
.
address
),
enable_reg
));
"Read GPE Register at GPE%X: Status=%02X, Enable=%02X
\n
"
,
gpe_register_info
->
base_gpe_number
,
status_reg
,
enable_reg
));
/* 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 (
/* Dump info about this GPE block */
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
+
((
gpe_block
->
register_count
*
ACPI_GPE_REGISTER_WIDTH
)
-
1
)),
gpe_device
->
name
.
ascii
,
gpe_block
->
register_count
,
ACPI_FORMAT_UINT64
(
gpe_block
->
block_address
.
address
),
interrupt_level
));
/* Enable all valid GPEs found above */
status
=
acpi_hw_enable_runtime_gpe_block
(
NULL
,
gpe_block
);
...
...
drivers/acpi/events/evxface.c
View file @
c232f2a1
...
...
@@ -51,6 +51,51 @@
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
...
...
drivers/acpi/executer/exconvrt.c
View file @
c232f2a1
...
...
@@ -58,7 +58,7 @@
* PARAMETERS: obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* result_desc - Where the new Integer object is returned
*
walk_state - Current method state
*
Flags - Used for string conversion
*
* RETURN: Status
*
...
...
@@ -70,13 +70,13 @@ acpi_status
acpi_ex_convert_to_integer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
)
u32
flags
)
{
u32
i
;
union
acpi_operand_object
*
ret_desc
;
u32
count
;
union
acpi_operand_object
*
return_desc
;
u8
*
pointer
;
acpi_integer
result
;
u32
i
;
u32
count
;
acpi_status
status
;
...
...
@@ -85,15 +85,17 @@ acpi_ex_convert_to_integer (
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
case
ACPI_TYPE_INTEGER
:
/* No conversion necessary */
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
case
ACPI_TYPE_BUFFER
:
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
;
count
=
obj_desc
->
buffer
.
length
;
break
;
...
...
@@ -126,10 +128,12 @@ acpi_ex_convert_to_integer (
case
ACPI_TYPE_STRING
:
/*
* Convert string to an integer
* String must be hexadecimal as per the ACPI specification
* Convert string to an integer - for most cases, the string must be
* 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
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -139,8 +143,8 @@ acpi_ex_convert_to_integer (
case
ACPI_TYPE_BUFFER
:
/*
*
Buffer conversion - we simply grab enough raw data from the
* buffer to fill an integer
*
Convert buffer to an integer - we simply grab enough raw data
*
from the
buffer to fill an integer
*/
for
(
i
=
0
;
i
<
count
;
i
++
)
{
/*
...
...
@@ -161,27 +165,15 @@ acpi_ex_convert_to_integer (
/*
* Create a new integer
*/
ret_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
ret_desc
)
{
ret
urn
_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Save the Result */
ret_desc
->
integer
.
value
=
result
;
/*
* 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_desc
->
integer
.
value
=
result
;
*
result_desc
=
return_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -193,7 +185,6 @@ acpi_ex_convert_to_integer (
* PARAMETERS: obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* result_desc - Where the new buffer object is returned
* walk_state - Current method state
*
* RETURN: Status
*
...
...
@@ -204,11 +195,9 @@ acpi_ex_convert_to_integer (
acpi_status
acpi_ex_convert_to_buffer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
)
union
acpi_operand_object
**
result_desc
)
{
union
acpi_operand_object
*
ret_desc
;
u32
i
;
union
acpi_operand_object
*
return_desc
;
u8
*
new_buf
;
...
...
@@ -230,17 +219,17 @@ acpi_ex_convert_to_buffer (
* Create a new Buffer object.
* Need enough space for one integer
*/
ret_desc
=
acpi_ut_create_buffer_object
(
acpi_gbl_integer_byte_width
);
if
(
!
ret_desc
)
{
ret
urn
_desc
=
acpi_ut_create_buffer_object
(
acpi_gbl_integer_byte_width
);
if
(
!
ret
urn
_desc
)
{
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
;
for
(
i
=
0
;
i
<
acpi_gbl_integer_byte_width
;
i
++
)
{
new_buf
[
i
]
=
(
u8
)
(
obj_desc
->
integer
.
value
>>
(
i
*
8
));
}
new_buf
=
ret
urn
_desc
->
buffer
.
pointer
;
ACPI_MEMCPY
(
new_buf
,
&
obj_desc
->
integer
.
value
,
acpi_gbl_integer_byte_width
);
break
;
...
...
@@ -250,14 +239,14 @@ acpi_ex_convert_to_buffer (
* Create a new Buffer object
* Size will be the string length
*/
ret_desc
=
acpi_ut_create_buffer_object
((
acpi_size
)
obj_desc
->
string
.
length
);
if
(
!
ret_desc
)
{
ret
urn
_desc
=
acpi_ut_create_buffer_object
((
acpi_size
)
obj_desc
->
string
.
length
);
if
(
!
ret
urn
_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* 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
,
obj_desc
->
string
.
length
);
break
;
...
...
@@ -269,32 +258,20 @@ acpi_ex_convert_to_buffer (
/* Mark buffer initialized */
ret_desc
->
common
.
flags
|=
AOPOBJ_DATA_VALID
;
/*
* 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_desc
->
common
.
flags
|=
AOPOBJ_DATA_VALID
;
*
result_desc
=
return_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_convert_ascii
* FUNCTION: acpi_ex_convert_
to_
ascii
*
* PARAMETERS: Integer - Value to be converted
* Base -
10 or 16
* Base -
ACPI_STRING_DECIMAL or ACPI_STRING_HEX
* 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
*
...
...
@@ -305,79 +282,81 @@ acpi_ex_convert_to_buffer (
u32
acpi_ex_convert_to_ascii
(
acpi_integer
integer
,
u
32
base
,
u
16
base
,
u8
*
string
,
u8
data_width
)
{
u32
i
;
u32
j
;
u32
k
=
0
;
char
hex_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
length
;
u8
leading_zero
;
u8
supress_zeros
;
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
)
{
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
;
for
(
i
=
ACPI_MAX_DECIMAL_DIGITS
;
i
>
0
;
i
--
)
{
for
(
i
=
decimal_length
;
i
>
0
;
i
--
)
{
/* Divide by nth factor of 10 */
digit
=
integer
;
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
)
{
leading_zero
=
FALSE
;
supress_zeros
=
FALSE
;
}
if
(
!
leading_zero
)
{
if
(
!
supress_zeros
)
{
string
[
k
]
=
(
u8
)
(
ACPI_ASCII_ZERO
+
remainder
);
k
++
;
}
}
break
;
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
--
)
{
for
(
i
=
0
,
j
=
(
hex_length
-
1
);
i
<
hex_length
;
i
++
,
j
--
)
{
/* Get one hex digit, most significant digits first */
hex_digit
=
acpi_ut_hex_to_ascii_char
(
integer
,
(
j
*
4
));
if
(
hex_digit
!=
ACPI_ASCII_ZERO
)
{
leading_zero
=
FALSE
;
}
if
(
!
leading_zero
)
{
string
[
k
]
=
(
u8
)
hex_digit
;
k
++
;
}
string
[
k
]
=
(
u8
)
acpi_ut_hex_to_ascii_char
(
integer
,
ACPI_MUL_4
(
j
));
k
++
;
}
break
;
default:
break
;
return
(
0
)
;
}
/*
...
...
@@ -392,7 +371,7 @@ acpi_ex_convert_to_ascii (
}
string
[
k
]
=
0
;
return
(
k
);
return
(
(
u32
)
k
);
}
...
...
@@ -401,11 +380,9 @@ acpi_ex_convert_to_ascii (
* FUNCTION: acpi_ex_convert_to_string
*
* 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
* Base - 10 or 16
* max_length - Max length of the returned string
* walk_state - Current method state
* Type - String flags (base and conversion type)
*
* RETURN: Status
*
...
...
@@ -417,15 +394,14 @@ acpi_status
acpi_ex_convert_to_string
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
u32
base
,
u32
max_length
,
struct
acpi_walk_state
*
walk_state
)
u32
type
)
{
union
acpi_operand_object
*
ret_desc
;
union
acpi_operand_object
*
ret
urn
_desc
;
u8
*
new_buf
;
u
8
*
pointer
;
u
32
string_length
;
u
32
string_length
=
0
;
u
16
base
=
16
;
u32
i
;
u8
separator
=
','
;
ACPI_FUNCTION_TRACE_PTR
(
"ex_convert_to_string"
,
obj_desc
);
...
...
@@ -434,130 +410,129 @@ acpi_ex_convert_to_string (
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
case
ACPI_TYPE_STRING
:
if
(
max_length
>=
obj_desc
->
string
.
length
)
{
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
else
{
/* Must copy the string first and then truncate it */
/* No conversion necessary */
return_ACPI_STATUS
(
AE_NOT_IMPLEMENTED
)
;
}
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
case
ACPI_TYPE_INTEGER
:
string_length
=
acpi_gbl_integer_byte_width
*
2
;
if
(
base
==
10
)
{
switch
(
type
)
{
case
ACPI_EXPLICIT_CONVERT_DECIMAL
:
/* Make room for maximum decimal number */
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
* Need enough space for one ASCII integer (plus null terminator)
*/
ret
_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
ret_desc
)
{
ret
urn_desc
=
acpi_ut_create_string_object
((
acpi_size
)
string_length
);
if
(
!
ret
urn
_desc
)
{
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 integer to string */
/* Convert */
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 */
if
(
max_length
<
i
)
{
new_buf
[
max_length
]
=
0
;
ret_desc
->
string
.
length
=
max_length
;
}
else
{
new_buf
[
i
]
=
0
;
ret_desc
->
string
.
length
=
i
;
}
ret_desc
->
buffer
.
pointer
=
new_buf
;
return_desc
->
string
.
length
=
string_length
;
new_buf
[
string_length
]
=
0
;
break
;
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
;
for
(
string_length
=
0
;
string_length
<
obj_desc
->
buffer
.
length
;
string_length
++
)
{
/* Exit on null terminator */
/*lint -fallthrough */
if
(
!
pointer
[
string_length
])
{
break
;
case
ACPI_IMPLICIT_CONVERT_HEX
:
/*
* 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
)
{
if
(
string_length
>
ACPI_MAX_STRING_CONVERSION
)
{
/*lint -fallthrough */
case
ACPI_EXPLICIT_CONVERT_HEX
:
/* Used by to_hex_string operator */
/*
* From ACPI: "If Data is a buffer, it is converted to a string of
* hexadecimal values separated by commas."
*/
string_length
+=
(
obj_desc
->
buffer
.
length
*
3
);
if
(
string_length
>
ACPI_MAX_STRING_CONVERSION
)
/* ACPI limit */
{
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
}
/*
* Create a new string object
*/
ret_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
ret_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Create a new string object and string buffer */
/* String length is the lesser of the Max or the actual length */
return_desc
=
acpi_ut_create_string_object
((
acpi_size
)
string_length
-
1
);
if
(
!
return_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
if
(
max_length
<
string_length
)
{
string_length
=
max_length
;
}
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 buffer bytes to hex or decimal values
* (separated by commas)
*/
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
;
ret_desc
->
buffer
.
pointer
=
new_buf
;
ret_desc
->
string
.
length
=
string_length
;
break
;
return_desc
->
string
.
length
=
ACPI_STRLEN
(
return_desc
->
string
.
pointer
);
break
;
default:
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
break
;
default:
return_ACPI_STATUS
(
AE_TYPE
);
}
/*
* 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
;
*
result_desc
=
return_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -635,7 +610,8 @@ acpi_ex_convert_to_target_type (
* These types require an Integer operand. We can convert
* 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
;
...
...
@@ -645,7 +621,8 @@ acpi_ex_convert_to_target_type (
* The operand must be a String. We can convert an
* 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
;
...
...
@@ -655,7 +632,7 @@ acpi_ex_convert_to_target_type (
* The operand must be a Buffer. We can convert an
* 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
;
...
...
drivers/acpi/executer/exdump.c
View file @
c232f2a1
...
...
@@ -55,7 +55,6 @@
/*
* The following routines are used for debug output only
*/
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*****************************************************************************
...
...
@@ -103,8 +102,8 @@ acpi_ex_dump_operand (
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
!=
ACPI_DESC_TYPE_OPERAND
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"%p is not a node or operand object: [%s]
\n
"
,
obj_desc
,
acpi_ut_get_descriptor_name
(
obj_desc
)));
"%p is not a node or operand object: [%s]
\n
"
,
obj_desc
,
acpi_ut_get_descriptor_name
(
obj_desc
)));
ACPI_DUMP_BUFFER
(
obj_desc
,
sizeof
(
union
acpi_operand_object
));
return
;
}
...
...
@@ -125,8 +124,8 @@ acpi_ex_dump_operand (
case
AML_NAME_OP
:
ACPI_DUMP_PATHNAME
(
obj_desc
->
reference
.
object
,
"Reference: Name: "
,
ACPI_LV_INFO
,
_COMPONENT
);
ACPI_DUMP_PATHNAME
(
obj_desc
->
reference
.
object
,
"Reference: Name: "
,
ACPI_LV_INFO
,
_COMPONENT
);
ACPI_DUMP_ENTRY
(
obj_desc
->
reference
.
object
,
ACPI_LV_INFO
);
break
;
...
...
@@ -134,27 +133,27 @@ acpi_ex_dump_operand (
case
AML_INDEX_OP
:
acpi_os_printf
(
"Reference: Index %p
\n
"
,
obj_desc
->
reference
.
object
);
obj_desc
->
reference
.
object
);
break
;
case
AML_REF_OF_OP
:
acpi_os_printf
(
"Reference: (ref_of) %p
\n
"
,
obj_desc
->
reference
.
object
);
obj_desc
->
reference
.
object
);
break
;
case
AML_ARG_OP
:
acpi_os_printf
(
"Reference: Arg%d"
,
obj_desc
->
reference
.
offset
);
obj_desc
->
reference
.
offset
);
if
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
)
==
ACPI_TYPE_INTEGER
)
{
/* Value is an Integer */
acpi_os_printf
(
" value is [%8.8X%8.8x]"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
}
acpi_os_printf
(
"
\n
"
);
...
...
@@ -164,14 +163,14 @@ acpi_ex_dump_operand (
case
AML_LOCAL_OP
:
acpi_os_printf
(
"Reference: Local%d"
,
obj_desc
->
reference
.
offset
);
obj_desc
->
reference
.
offset
);
if
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
)
==
ACPI_TYPE_INTEGER
)
{
/* Value is an Integer */
acpi_os_printf
(
" value is [%8.8X%8.8x]"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
}
acpi_os_printf
(
"
\n
"
);
...
...
@@ -181,7 +180,7 @@ acpi_ex_dump_operand (
case
AML_INT_NAMEPATH_OP
:
acpi_os_printf
(
"Reference.Node->Name %X
\n
"
,
obj_desc
->
reference
.
node
->
name
.
integer
);
obj_desc
->
reference
.
node
->
name
.
integer
);
break
;
...
...
@@ -201,8 +200,7 @@ acpi_ex_dump_operand (
case
ACPI_TYPE_BUFFER
:
acpi_os_printf
(
"Buffer len %X @ %p
\n
"
,
obj_desc
->
buffer
.
length
,
obj_desc
->
buffer
.
pointer
);
obj_desc
->
buffer
.
length
,
obj_desc
->
buffer
.
pointer
);
length
=
obj_desc
->
buffer
.
length
;
...
...
@@ -227,14 +225,14 @@ acpi_ex_dump_operand (
case
ACPI_TYPE_INTEGER
:
acpi_os_printf
(
"Integer %8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
break
;
case
ACPI_TYPE_PACKAGE
:
acpi_os_printf
(
"Package count %X @ %p
\n
"
,
obj_desc
->
package
.
count
,
obj_desc
->
package
.
elements
);
obj_desc
->
package
.
count
,
obj_desc
->
package
.
elements
);
/*
* If elements exist, package vector pointer is valid,
...
...
@@ -277,7 +275,7 @@ acpi_ex_dump_operand (
case
ACPI_TYPE_STRING
:
acpi_os_printf
(
"String length %X @ %p "
,
obj_desc
->
string
.
length
,
obj_desc
->
string
.
pointer
);
obj_desc
->
string
.
length
,
obj_desc
->
string
.
pointer
);
acpi_ut_print_string
(
obj_desc
->
string
.
pointer
,
ACPI_UINT8_MAX
);
acpi_os_printf
(
"
\n
"
);
break
;
...
...
@@ -387,10 +385,13 @@ acpi_ex_dump_operand (
*
* FUNCTION: acpi_ex_dump_operands
*
* PARAMETERS: interpreter_mode - Load or Exec
* *Ident - Identification
* PARAMETERS: Operands - Operand list
* interpreter_mode - Load or Exec
* Ident - Identification
* 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
*
...
...
@@ -489,8 +490,7 @@ acpi_ex_out_address (
#if ACPI_MACHINE_WIDTH == 16
acpi_os_printf
(
"%20s : %p
\n
"
,
title
,
value
);
#else
acpi_os_printf
(
"%20s : %8.8X%8.8X
\n
"
,
title
,
ACPI_FORMAT_UINT64
(
value
));
acpi_os_printf
(
"%20s : %8.8X%8.8X
\n
"
,
title
,
ACPI_FORMAT_UINT64
(
value
));
#endif
}
...
...
@@ -563,22 +563,25 @@ acpi_ex_dump_object_descriptor (
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
obj_desc
)
==
ACPI_DESC_TYPE_NAMED
)
{
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_ex_dump_object_descriptor
(((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
,
flags
);
return
;
acpi_os_printf
(
"
\n
Attached Object (%p):
\n
"
,
((
struct
acpi_namespace_node
*
)
obj_desc
)
->
object
);
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
)
{
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
));
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
));
return_VOID
;
}
/* Common Fields */
acpi_ex_out_string
(
"Type"
,
acpi_ut_get_object_type_name
(
obj_desc
));
acpi_ex_out_string
(
"Type"
,
acpi_ut_get_object_type_name
(
obj_desc
));
acpi_ex_out_integer
(
"Reference Count"
,
obj_desc
->
common
.
reference_count
);
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
common
.
flags
);
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
common
.
flags
);
/* Object-specific Fields */
...
...
@@ -592,7 +595,7 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_STRING
:
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
string
.
length
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
string
.
length
);
acpi_os_printf
(
"%20s : %p "
,
"Pointer"
,
obj_desc
->
string
.
pointer
);
acpi_ut_print_string
(
obj_desc
->
string
.
pointer
,
ACPI_UINT8_MAX
);
...
...
@@ -602,17 +605,17 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_BUFFER
:
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
buffer
.
length
);
acpi_ex_out_pointer
(
"Pointer"
,
obj_desc
->
buffer
.
pointer
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
buffer
.
length
);
acpi_ex_out_pointer
(
"Pointer"
,
obj_desc
->
buffer
.
pointer
);
ACPI_DUMP_BUFFER
(
obj_desc
->
buffer
.
pointer
,
obj_desc
->
buffer
.
length
);
break
;
case
ACPI_TYPE_PACKAGE
:
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
package
.
flags
);
acpi_ex_out_integer
(
"Count"
,
obj_desc
->
package
.
count
);
acpi_ex_out_pointer
(
"Elements"
,
obj_desc
->
package
.
elements
);
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
package
.
flags
);
acpi_ex_out_integer
(
"Count"
,
obj_desc
->
package
.
count
);
acpi_ex_out_pointer
(
"Elements"
,
obj_desc
->
package
.
elements
);
/* Dump the package contents */
...
...
@@ -621,7 +624,8 @@ acpi_ex_dump_object_descriptor (
for
(
i
=
0
;
i
<
obj_desc
->
package
.
count
;
i
++
)
{
acpi_os_printf
(
"[%.3d] %p"
,
i
,
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
"
);
}
...
...
@@ -639,38 +643,38 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_EVENT
:
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
event
.
semaphore
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
event
.
semaphore
);
break
;
case
ACPI_TYPE_METHOD
:
acpi_ex_out_integer
(
"param_count"
,
obj_desc
->
method
.
param_count
);
acpi_ex_out_integer
(
"Concurrency"
,
obj_desc
->
method
.
concurrency
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
method
.
semaphore
);
acpi_ex_out_integer
(
"owning_id"
,
obj_desc
->
method
.
owning_id
);
acpi_ex_out_integer
(
"aml_length"
,
obj_desc
->
method
.
aml_length
);
acpi_ex_out_pointer
(
"aml_start"
,
obj_desc
->
method
.
aml_start
);
acpi_ex_out_integer
(
"param_count"
,
obj_desc
->
method
.
param_count
);
acpi_ex_out_integer
(
"Concurrency"
,
obj_desc
->
method
.
concurrency
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
method
.
semaphore
);
acpi_ex_out_integer
(
"owning_id"
,
obj_desc
->
method
.
owning_id
);
acpi_ex_out_integer
(
"aml_length"
,
obj_desc
->
method
.
aml_length
);
acpi_ex_out_pointer
(
"aml_start"
,
obj_desc
->
method
.
aml_start
);
break
;
case
ACPI_TYPE_MUTEX
:
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_integer
(
"acqui
sition_depth"
,
obj_desc
->
mutex
.
acquisition_depth
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
mutex
.
semaphore
);
acpi_ex_out_integer
(
"acqui
re_depth"
,
obj_desc
->
mutex
.
acquisition_depth
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
mutex
.
semaphore
);
break
;
case
ACPI_TYPE_REGION
:
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
region
.
space_id
);
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
region
.
flags
);
acpi_ex_out_address
(
"Address"
,
obj_desc
->
region
.
address
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
region
.
length
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
region
.
handler
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
region
.
next
);
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
region
.
space_id
);
acpi_ex_out_integer
(
"Flags"
,
obj_desc
->
region
.
flags
);
acpi_ex_out_address
(
"Address"
,
obj_desc
->
region
.
address
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
region
.
length
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
region
.
handler
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
region
.
next
);
break
;
...
...
@@ -686,11 +690,11 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_PROCESSOR
:
acpi_ex_out_integer
(
"Processor ID"
,
obj_desc
->
processor
.
proc_id
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
processor
.
length
);
acpi_ex_out_address
(
"Address"
,
(
acpi_physical_address
)
obj_desc
->
processor
.
address
);
acpi_ex_out_integer
(
"Length"
,
obj_desc
->
processor
.
length
);
acpi_ex_out_address
(
"Address"
,
(
acpi_physical_address
)
obj_desc
->
processor
.
address
);
acpi_ex_out_pointer
(
"system_notify"
,
obj_desc
->
processor
.
system_notify
);
acpi_ex_out_pointer
(
"device_notify"
,
obj_desc
->
processor
.
device_notify
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
processor
.
handler
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
processor
.
handler
);
break
;
...
...
@@ -698,7 +702,7 @@ acpi_ex_dump_object_descriptor (
acpi_ex_out_pointer
(
"system_notify"
,
obj_desc
->
thermal_zone
.
system_notify
);
acpi_ex_out_pointer
(
"device_notify"
,
obj_desc
->
thermal_zone
.
device_notify
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
thermal_zone
.
handler
);
acpi_ex_out_pointer
(
"Handler"
,
obj_desc
->
thermal_zone
.
handler
);
break
;
...
...
@@ -707,35 +711,35 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_BANK_FIELD
:
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
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
(
"bit_length"
,
obj_desc
->
common_field
.
bit_length
);
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
(
"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
(
"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
(
"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_pointer
(
"parent_node"
,
obj_desc
->
common_field
.
node
);
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_pointer
(
"parent_node"
,
obj_desc
->
common_field
.
node
);
switch
(
ACPI_GET_OBJECT_TYPE
(
obj_desc
))
{
case
ACPI_TYPE_BUFFER_FIELD
:
acpi_ex_out_pointer
(
"buffer_obj"
,
obj_desc
->
buffer_field
.
buffer_obj
);
acpi_ex_out_pointer
(
"buffer_obj"
,
obj_desc
->
buffer_field
.
buffer_obj
);
break
;
case
ACPI_TYPE_LOCAL_REGION_FIELD
:
acpi_ex_out_pointer
(
"region_obj"
,
obj_desc
->
field
.
region_obj
);
acpi_ex_out_pointer
(
"region_obj"
,
obj_desc
->
field
.
region_obj
);
break
;
case
ACPI_TYPE_LOCAL_BANK_FIELD
:
acpi_ex_out_integer
(
"Value"
,
obj_desc
->
bank_field
.
value
);
acpi_ex_out_pointer
(
"region_obj"
,
obj_desc
->
bank_field
.
region_obj
);
acpi_ex_out_pointer
(
"bank_obj"
,
obj_desc
->
bank_field
.
bank_obj
);
acpi_ex_out_integer
(
"Value"
,
obj_desc
->
bank_field
.
value
);
acpi_ex_out_pointer
(
"region_obj"
,
obj_desc
->
bank_field
.
region_obj
);
acpi_ex_out_pointer
(
"bank_obj"
,
obj_desc
->
bank_field
.
bank_obj
);
break
;
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
acpi_ex_out_integer
(
"Value"
,
obj_desc
->
index_field
.
value
);
acpi_ex_out_pointer
(
"Index"
,
obj_desc
->
index_field
.
index_obj
);
acpi_ex_out_pointer
(
"Data"
,
obj_desc
->
index_field
.
data_obj
);
acpi_ex_out_integer
(
"Value"
,
obj_desc
->
index_field
.
value
);
acpi_ex_out_pointer
(
"Index"
,
obj_desc
->
index_field
.
index_obj
);
acpi_ex_out_pointer
(
"Data"
,
obj_desc
->
index_field
.
data_obj
);
break
;
default:
...
...
@@ -747,29 +751,29 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_REFERENCE
:
acpi_ex_out_integer
(
"target_type"
,
obj_desc
->
reference
.
target_type
);
acpi_ex_out_string
(
"Opcode"
,
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
);
acpi_ex_out_integer
(
"Offset"
,
obj_desc
->
reference
.
offset
);
acpi_ex_out_pointer
(
"obj_desc"
,
obj_desc
->
reference
.
object
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
reference
.
node
);
acpi_ex_out_pointer
(
"Where"
,
obj_desc
->
reference
.
where
);
acpi_ex_out_integer
(
"target_type"
,
obj_desc
->
reference
.
target_type
);
acpi_ex_out_string
(
"Opcode"
,
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
);
acpi_ex_out_integer
(
"Offset"
,
obj_desc
->
reference
.
offset
);
acpi_ex_out_pointer
(
"obj_desc"
,
obj_desc
->
reference
.
object
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
reference
.
node
);
acpi_ex_out_pointer
(
"Where"
,
obj_desc
->
reference
.
where
);
break
;
case
ACPI_TYPE_LOCAL_ADDRESS_HANDLER
:
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
address_space
.
space_id
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
address_space
.
next
);
acpi_ex_out_pointer
(
"region_list"
,
obj_desc
->
address_space
.
region_list
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
address_space
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
address_space
.
context
);
acpi_ex_out_integer
(
"space_id"
,
obj_desc
->
address_space
.
space_id
);
acpi_ex_out_pointer
(
"Next"
,
obj_desc
->
address_space
.
next
);
acpi_ex_out_pointer
(
"region_list"
,
obj_desc
->
address_space
.
region_list
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
address_space
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
address_space
.
context
);
break
;
case
ACPI_TYPE_LOCAL_NOTIFY
:
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
notify
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
notify
.
context
);
acpi_ex_out_pointer
(
"Node"
,
obj_desc
->
notify
.
node
);
acpi_ex_out_pointer
(
"Context"
,
obj_desc
->
notify
.
context
);
break
;
...
...
@@ -779,7 +783,8 @@ acpi_ex_dump_object_descriptor (
case
ACPI_TYPE_LOCAL_DATA
:
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
));
break
;
}
...
...
drivers/acpi/executer/exfldio.c
View file @
c232f2a1
...
...
@@ -139,7 +139,7 @@ acpi_ex_setup_region (
if
(
ACPI_ROUND_UP
(
rgn_desc
->
region
.
length
,
obj_desc
->
common_field
.
access_byte_width
)
>=
(
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
))
{
return_ACPI_STATUS
(
AE_OK
);
}
...
...
drivers/acpi/executer/exmisc.c
View file @
c232f2a1
...
...
@@ -149,8 +149,9 @@ acpi_ex_get_object_reference (
*
* FUNCTION: acpi_ex_concat_template
*
* PARAMETERS: *obj_desc - Object to be converted. Must be an
* Integer, Buffer, or String
* PARAMETERS: Operand0 - First source object
* Operand1 - Second source object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
*
* RETURN: Status
...
...
@@ -161,8 +162,8 @@ acpi_ex_get_object_reference (
acpi_status
acpi_ex_concat_template
(
union
acpi_operand_object
*
o
bj_desc1
,
union
acpi_operand_object
*
o
bj_desc2
,
union
acpi_operand_object
*
o
perand0
,
union
acpi_operand_object
*
o
perand1
,
union
acpi_operand_object
**
actual_return_desc
,
struct
acpi_walk_state
*
walk_state
)
{
...
...
@@ -179,16 +180,16 @@ acpi_ex_concat_template (
/* Find the end_tags in each resource template */
end_tag1
=
acpi_ut_get_resource_end_tag
(
o
bj_desc1
);
end_tag2
=
acpi_ut_get_resource_end_tag
(
o
bj_desc2
);
end_tag1
=
acpi_ut_get_resource_end_tag
(
o
perand0
);
end_tag2
=
acpi_ut_get_resource_end_tag
(
o
perand1
);
if
(
!
end_tag1
||
!
end_tag2
)
{
return_ACPI_STATUS
(
AE_AML_OPERAND_TYPE
);
}
/* Compute the length of each part */
length1
=
ACPI_PTR_DIFF
(
end_tag1
,
o
bj_desc1
->
buffer
.
pointer
);
length2
=
ACPI_PTR_DIFF
(
end_tag2
,
o
bj_desc2
->
buffer
.
pointer
)
+
length1
=
ACPI_PTR_DIFF
(
end_tag1
,
o
perand0
->
buffer
.
pointer
);
length2
=
ACPI_PTR_DIFF
(
end_tag2
,
o
perand1
->
buffer
.
pointer
)
+
2
;
/* Size of END_TAG */
/* Create a new buffer object for the result */
...
...
@@ -201,8 +202,8 @@ acpi_ex_concat_template (
/* Copy the templates to the new descriptor */
new_buf
=
return_desc
->
buffer
.
pointer
;
ACPI_MEMCPY
(
new_buf
,
o
bj_desc1
->
buffer
.
pointer
,
length1
);
ACPI_MEMCPY
(
new_buf
+
length1
,
o
bj_desc2
->
buffer
.
pointer
,
length2
);
ACPI_MEMCPY
(
new_buf
,
o
perand0
->
buffer
.
pointer
,
length1
);
ACPI_MEMCPY
(
new_buf
+
length1
,
o
perand1
->
buffer
.
pointer
,
length2
);
/* Compute the new checksum */
...
...
@@ -221,8 +222,8 @@ acpi_ex_concat_template (
*
* FUNCTION: acpi_ex_do_concatenate
*
* PARAMETERS:
obj_desc1
- First source object
*
obj_desc2
- Second source object
* PARAMETERS:
Operand0
- First source object
*
Operand1
- Second source object
* actual_return_desc - Where to place the return object
* walk_state - Current walk state
*
...
...
@@ -234,21 +235,58 @@ acpi_ex_concat_template (
acpi_status
acpi_ex_do_concatenate
(
union
acpi_operand_object
*
o
bj_desc1
,
union
acpi_operand_object
*
o
bj_desc2
,
union
acpi_operand_object
*
o
perand0
,
union
acpi_operand_object
*
o
perand1
,
union
acpi_operand_object
**
actual_return_desc
,
struct
acpi_walk_state
*
walk_state
)
{
acpi_status
status
;
u32
i
;
acpi_integer
this_integer
;
union
acpi_operand_object
*
local_operand1
=
operand1
;
union
acpi_operand_object
*
return_desc
;
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:
*
...
...
@@ -256,113 +294,102 @@ acpi_ex_do_concatenate (
* 2) Two Strings concatenated to produce a new String
* 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
:
/* Result of two Integers is a Buffer */
/* 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
)
{
return
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
/* Convert the first integer */
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
;
}
/* Copy the first integer, LSB first */
/* Convert the second integer */
ACPI_MEMCPY
(
new_buf
,
&
operand0
->
integer
.
value
,
acpi_gbl_integer_byte_width
);
this_integer
=
obj_desc2
->
integer
.
value
;
for
(;
i
<
(
ACPI_MUL_2
(
acpi_gbl_integer_byte_width
));
i
++
)
{
new_buf
[
i
]
=
(
char
)
this_integer
;
this_integer
>>=
8
;
}
/* Copy the second integer (LSB first) after the first */
ACPI_MEMCPY
(
new_buf
+
acpi_gbl_integer_byte_width
,
&
local_operand1
->
integer
.
value
,
acpi_gbl_integer_byte_width
);
break
;
case
ACPI_TYPE_STRING
:
/* Result of two Strings is a String */
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
return_desc
)
{
return
(
AE_NO_MEMORY
);
new_length
=
(
acpi_size
)
operand0
->
string
.
length
+
(
acpi_size
)
local_operand1
->
string
.
length
;
if
(
new_length
>
ACPI_MAX_STRING_CONVERSION
)
{
status
=
AE_AML_STRING_LIMIT
;
goto
cleanup
;
}
/* Operand0 is string */
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
"
));
return_desc
=
acpi_ut_create_string_object
(
new_length
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/* Concatenate the strings */
ACPI_STRCPY
(
new_buf
,
obj_desc1
->
string
.
pointer
);
ACPI_STRCPY
(
new_buf
+
obj_desc1
->
string
.
length
,
obj_desc2
->
string
.
pointer
);
new_buf
=
return_desc
->
string
.
pointer
;
/* Co
mplete the String object initialization
*/
/* Co
ncatenate the strings
*/
return_desc
->
string
.
pointer
=
new_buf
;
return_desc
->
string
.
length
=
obj_desc1
->
string
.
length
+
obj_desc2
->
string
.
length
;
ACPI_STRCPY
(
new_buf
,
operand0
->
string
.
pointer
);
ACPI_STRCPY
(
new_buf
+
operand0
->
string
.
length
,
local_operand1
->
string
.
pointer
);
break
;
case
ACPI_TYPE_BUFFER
:
/* Result of two Buffers is a Buffer */
return_desc
=
acpi_ut_create_buffer_object
(
(
acpi_size
)
o
bj_desc1
->
buffer
.
length
+
(
acpi_size
)
obj_desc2
->
buffer
.
length
);
(
acpi_size
)
o
perand0
->
buffer
.
length
+
(
acpi_size
)
local_operand1
->
buffer
.
length
);
if
(
!
return_desc
)
{
return
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
new_buf
=
(
char
*
)
return_desc
->
buffer
.
pointer
;
/* Concatenate the buffers */
ACPI_MEMCPY
(
new_buf
,
obj_desc1
->
buffer
.
pointer
,
obj_desc1
->
buffer
.
length
);
ACPI_MEMCPY
(
new_buf
+
obj_desc1
->
buffer
.
length
,
obj_desc2
->
buffer
.
pointer
,
obj_desc2
->
buffer
.
length
);
ACPI_MEMCPY
(
new_buf
,
operand0
->
buffer
.
pointer
,
operand0
->
buffer
.
length
);
ACPI_MEMCPY
(
new_buf
+
operand0
->
buffer
.
length
,
local_operand1
->
buffer
.
pointer
,
local_operand1
->
buffer
.
length
);
break
;
default:
/* Invalid object type, should not happen here */
ACPI_REPORT_ERROR
((
"Concat
- invalid obj
type: %X
\n
"
,
ACPI_GET_OBJECT_TYPE
(
o
bj_desc1
)));
status
=
AE_AML_INTERNAL
;
return_desc
=
NULL
;
ACPI_REPORT_ERROR
((
"Concat
enate - Invalid object
type: %X
\n
"
,
ACPI_GET_OBJECT_TYPE
(
o
perand0
)));
status
=
AE_AML_INTERNAL
;
goto
cleanup
;
}
*
actual_return_desc
=
return_desc
;
return
(
AE_OK
);
cleanup:
acpi_ut_remove_reference
(
return_desc
);
return
(
status
);
if
(
local_operand1
!=
operand1
)
{
acpi_ut_remove_reference
(
local_operand1
);
}
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -371,8 +398,8 @@ acpi_ex_do_concatenate (
* FUNCTION: acpi_ex_do_math_op
*
* PARAMETERS: Opcode - AML opcode
*
Operand
0 - Integer operand #0
*
Operand
1 - Integer operand #1
*
Integer
0 - Integer operand #0
*
Integer
1 - Integer operand #1
*
* RETURN: Integer result of the operation
*
...
...
@@ -385,62 +412,62 @@ acpi_ex_do_concatenate (
acpi_integer
acpi_ex_do_math_op
(
u16
opcode
,
acpi_integer
operand
0
,
acpi_integer
operand
1
)
acpi_integer
integer
0
,
acpi_integer
integer
1
)
{
ACPI_FUNCTION_ENTRY
();
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) */
return
(
operand0
<<
operand
1
);
return
(
integer0
<<
integer
1
);
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:
...
...
@@ -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
*
* PARAMETERS: Opcode - AML opcode
* obj_desc0 - operand #0
* obj_desc1 - operand #1
* Operand0 - operand #0
* 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
* functions here is to prevent a lot of pointer dereferencing
* to obtain the operands and to simplify the generation of the
* logical value. Both operands must already be validated as
* 1) Both the same type, and
* 2) Either Integer, Buffer, or String type.
* logical value. For the Numeric operators (LAnd and LOr), both
* operands must be integers. For the other logical operators,
* 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
* below, rather than using statements of the form:
...
...
@@ -472,143 +563,175 @@ acpi_ex_do_math_op (
*
******************************************************************************/
u8
acpi_status
acpi_ex_do_logical_op
(
u16
opcode
,
union
acpi_operand_object
*
obj_desc0
,
union
acpi_operand_object
*
obj_desc1
)
union
acpi_operand_object
*
operand0
,
union
acpi_operand_object
*
operand1
,
u8
*
logical_result
)
{
acpi_integer
operand0
;
acpi_integer
operand1
;
u8
*
ptr0
;
u8
*
ptr1
;
union
acpi_operand_object
*
local_operand1
=
operand1
;
acpi_integer
integer0
;
acpi_integer
integer1
;
u32
length0
;
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
;
operand1
=
obj_desc1
->
integer
.
value
;
case
ACPI_TYPE_STRING
:
status
=
acpi_ex_convert_to_string
(
operand1
,
&
local_operand1
,
ACPI_IMPLICIT_CONVERT_HEX
);
break
;
switch
(
opcode
)
{
case
AML_LAND_OP
:
/* LAnd (Operand0, Operand1) */
case
ACPI_TYPE_BUFFER
:
status
=
acpi_ex_convert_to_buffer
(
operand1
,
&
local_operand1
);
break
;
if
(
operand0
&&
operand1
)
{
return
(
TRUE
);
}
break
;
default:
status
=
AE_AML_INTERNAL
;
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) */
if
(
operand0
==
operand
1
)
{
return
(
TRUE
)
;
if
(
integer0
==
integer
1
)
{
local_result
=
TRUE
;
}
break
;
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
if
(
operand0
>
operand
1
)
{
return
(
TRUE
)
;
if
(
integer0
>
integer
1
)
{
local_result
=
TRUE
;
}
break
;
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
if
(
operand0
<
operand1
)
{
return
(
TRUE
);
}
break
;
case
AML_LOR_OP
:
/* LOr (Operand0, Operand1) */
if
(
operand0
||
operand1
)
{
return
(
TRUE
);
if
(
integer0
<
integer1
)
{
local_result
=
TRUE
;
}
break
;
default:
status
=
AE_AML_INTERNAL
;
break
;
}
}
else
{
/*
* Case for Buffer/String objects.
* NOTE: takes advantage of common Buffer/String object fields
* 2) Both operands are Strings or both are Buffers
* 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
;
ptr0
=
obj_desc0
->
buffer
.
pointer
;
length0
=
o
perand
0
->
buffer
.
length
;
length1
=
local_operand1
->
buffer
.
length
;
length1
=
obj_desc1
->
buffer
.
length
;
ptr1
=
obj_desc1
->
buffer
.
pointer
;
/* Lexicographic compare: compare the data bytes */
compare
=
ACPI_MEMCMP
((
const
char
*
)
operand0
->
buffer
.
pointer
,
(
const
char
*
)
local_operand1
->
buffer
.
pointer
,
(
length0
>
length1
)
?
length1
:
length0
);
switch
(
opcode
)
{
case
AML_LEQUAL_OP
:
/* LEqual (Operand0, Operand1) */
/* Length and all bytes must be equal */
if
(
length0
!=
length1
)
{
return
(
FALSE
);
}
if
(
(
length0
==
length1
)
&&
(
compare
==
0
))
{
/* Length and all bytes match ==> TRUE */
for
(
i
=
0
;
i
<
length0
;
i
++
)
{
if
(
ptr0
[
i
]
!=
ptr1
[
i
])
{
return
(
FALSE
);
}
local_result
=
TRUE
;
}
return
(
TRUE
)
;
break
;
case
AML_LGREATER_OP
:
/* LGreater (Operand0, Operand1) */
/* Lexicographic compare: Scan the 1-to-1 data */
for
(
i
=
0
;
(
i
<
length0
)
&&
(
i
<
length1
);
i
++
)
{
if
(
ptr0
[
i
]
>
ptr1
[
i
])
{
return
(
TRUE
);
}
if
(
compare
>
0
)
{
local_result
=
TRUE
;
goto
cleanup
;
/* TRUE */
}
if
(
compare
<
0
)
{
goto
cleanup
;
/* FALSE */
}
/* Bytes match
, now check
lengths */
/* Bytes match
(to shortest length), compare
lengths */
if
(
length0
>
length1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
/* Length0 <= Length1 */
return
(
FALSE
);
break
;
case
AML_LLESS_OP
:
/* LLess (Operand0, Operand1) */
/* Lexicographic compare: Scan the 1-to-1 data */
for
(
i
=
0
;
(
i
<
length0
)
&&
(
i
<
length1
);
i
++
)
{
if
(
ptr0
[
i
]
<
ptr1
[
i
]
)
{
return
(
TRUE
)
;
}
if
(
compare
>
0
)
{
goto
cleanup
;
/* FALSE */
}
if
(
compare
<
0
)
{
local_result
=
TRUE
;
goto
cleanup
;
/* TRUE */
}
/* Bytes match
, now check
lengths */
/* Bytes match
(to shortest length), compare
lengths */
if
(
length0
<
length1
)
{
return
(
TRUE
)
;
local_result
=
TRUE
;
}
/* Length0 >= Length1 */
return
(
FALSE
);
break
;
default:
status
=
AE_AML_INTERNAL
;
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 @@
* Where:
*
* 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
* for this opcode type (0, 1, or 2 targets).
* zR - RETURN VALUE: Indicates whether this opcode type returns a value
...
...
@@ -77,6 +77,69 @@
* 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
...
...
@@ -124,7 +187,7 @@ acpi_ex_opcode_1A_0T_0R (
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
;
...
...
@@ -222,7 +285,7 @@ acpi_ex_opcode_1A_1T_1R (
union
acpi_operand_object
*
return_desc2
=
NULL
;
u32
temp32
;
u32
i
;
u32
power_of_ten
;
acpi_integer
power_of_ten
;
acpi_integer
digit
;
...
...
@@ -262,7 +325,8 @@ acpi_ex_opcode_1A_1T_1R (
* Acpi specification describes Integer type as a little
* 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
;
}
...
...
@@ -278,13 +342,15 @@ acpi_ex_opcode_1A_1T_1R (
* The Acpi specification describes Integer type as a little
* 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
;
}
/* 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
;
...
...
@@ -319,7 +385,8 @@ acpi_ex_opcode_1A_1T_1R (
/* 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 */
...
...
@@ -340,18 +407,20 @@ acpi_ex_opcode_1A_1T_1R (
/* Each BCD digit is one nybble wide */
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 */
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 */
if
(
digit
>
0
)
{
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_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"Integer too large to convert to BCD: %8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
operand
[
0
]
->
integer
.
value
)));
status
=
AE_AML_NUMERIC_OVERFLOW
;
goto
cleanup
;
}
...
...
@@ -429,42 +498,47 @@ acpi_ex_opcode_1A_1T_1R (
*/
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
;
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
;
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
;
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
;
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
;
case
AML_SHIFT_LEFT_BIT_OP
:
/*
shift_left_bit (Source, bit_num) */
case
AML_SHIFT_RIGHT_BIT_OP
:
/*
shift_right_bit (Source, bit_num) */
case
AML_SHIFT_LEFT_BIT_OP
:
/* shift_left_bit (Source, bit_num) */
case
AML_SHIFT_RIGHT_BIT_OP
:
/* shift_right_bit (Source, bit_num) */
/*
* These are two obsolete opcodes
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
)));
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
)));
status
=
AE_SUPPORT
;
goto
cleanup
;
...
...
@@ -537,7 +611,13 @@ acpi_ex_opcode_1A_0T_1R (
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
;
...
...
@@ -545,41 +625,61 @@ acpi_ex_opcode_1A_0T_1R (
case
AML_INCREMENT_OP
:
/* Increment (Operand) */
/*
*
Since we are expecting a Reference operand, it
*
can be either a NS Node or an internal object
.
*
Create a new integer. Can't just get the base integer and
*
increment it because it may be an Arg or Field
.
*/
return_desc
=
operand
[
0
];
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
operand
[
0
])
==
ACPI_DESC_TYPE_OPERAND
)
{
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.
*/
temp_desc
=
operand
[
0
];
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
temp_desc
)
==
ACPI_DESC_TYPE_OPERAND
)
{
/* 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
* (This removes a reference on the return_desc object)
* Convert the Reference operand to an Integer (This removes a
* 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
))
{
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
;
}
/*
*
return_desc is now guaranteed to be an Integer object
*
Do
the actual increment or decrement
*
temp_desc is now guaranteed to be an Integer object --
*
Perform
the actual increment or decrement
*/
if
(
AML_INCREMENT_OP
==
walk_state
->
opcode
)
{
return_desc
->
integer
.
value
++
;
if
(
walk_state
->
opcode
==
AML_INCREMENT_OP
)
{
return_desc
->
integer
.
value
=
temp_desc
->
integer
.
value
+
1
;
}
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
);
break
;
...
...
@@ -633,7 +733,8 @@ acpi_ex_opcode_1A_0T_1R (
break
;
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
)));
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
...
...
@@ -803,7 +904,8 @@ acpi_ex_opcode_1A_0T_1R (
* an uninitialized package element and is thus a
* 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
]));
status
=
AE_AML_UNINITIALIZED_ELEMENT
;
goto
cleanup
;
...
...
@@ -815,7 +917,8 @@ acpi_ex_opcode_1A_0T_1R (
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
]));
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
...
...
@@ -839,7 +942,8 @@ acpi_ex_opcode_1A_0T_1R (
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
));
status
=
AE_TYPE
;
...
...
drivers/acpi/executer/exoparg2.c
View file @
c232f2a1
...
...
@@ -199,7 +199,8 @@ acpi_ex_opcode_2A_2T_1R (
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 (
/* Quotient to return_desc1, remainder to return_desc2 */
status
=
acpi_ut_divide
(
&
operand
[
0
]
->
integer
.
value
,
&
operand
[
1
]
->
integer
.
value
,
&
return_desc1
->
integer
.
value
,
&
return_desc2
->
integer
.
value
);
status
=
acpi_ut_divide
(
operand
[
0
]
->
integer
.
value
,
operand
[
1
]
->
integer
.
value
,
&
return_desc1
->
integer
.
value
,
&
return_desc2
->
integer
.
value
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
...
...
@@ -292,13 +295,13 @@ acpi_ex_opcode_2A_1T_1R (
{
union
acpi_operand_object
**
operand
=
&
walk_state
->
operands
[
0
];
union
acpi_operand_object
*
return_desc
=
NULL
;
union
acpi_operand_object
*
temp_desc
=
NULL
;
u32
index
;
acpi_status
status
=
AE_OK
;
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 (
/* return_desc will contain the remainder */
status
=
acpi_ut_divide
(
&
operand
[
0
]
->
integer
.
value
,
&
operand
[
1
]
->
integer
.
value
,
NULL
,
&
return_desc
->
integer
.
value
);
status
=
acpi_ut_divide
(
operand
[
0
]
->
integer
.
value
,
operand
[
1
]
->
integer
.
value
,
NULL
,
&
return_desc
->
integer
.
value
);
break
;
case
AML_CONCAT_OP
:
/* Concatenate (Data1, Data2, Result) */
/*
* 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 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
);
}
status
=
acpi_ex_do_concatenate
(
operand
[
0
],
operand
[
1
],
&
return_desc
,
walk_state
);
break
;
...
...
@@ -387,55 +355,45 @@ acpi_ex_opcode_2A_1T_1R (
* 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
;
if
(
operand
[
1
]
->
integer
.
value
==
0
)
{
/* Handle optional length value */
operand
[
1
]
->
integer
.
value
=
ACPI_INTEGER_MAX
;
}
while
((
length
<
operand
[
0
]
->
buffer
.
length
)
&&
(
length
<
operand
[
1
]
->
integer
.
value
)
&&
(
operand
[
0
]
->
buffer
.
pointer
[
length
]))
{
length
++
;
if
(
length
>
ACPI_MAX_STRING_CONVERSION
)
{
status
=
AE_AML_STRING_LIMIT
;
goto
cleanup
;
}
}
if
(
length
>
ACPI_MAX_STRING_CONVERSION
)
{
status
=
AE_AML_STRING_LIMIT
;
goto
cleanup
;
}
/* Create the internal return object */
/* Allocate a new string object */
return_desc
=
acpi_ut_create_
internal_object
(
ACPI_TYPE_STRING
);
return_desc
=
acpi_ut_create_
string_object
(
length
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/* Allocate a new string buffer (Length + 1 for null terminator) */
return_desc
->
string
.
pointer
=
ACPI_MEM_CALLOCATE
(
length
+
1
);
if
(
!
return_desc
->
string
.
pointer
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/* Copy the raw buffer data with no transform */
ACPI_MEMCPY
(
return_desc
->
string
.
pointer
,
operand
[
0
]
->
buffer
.
pointer
,
length
);
/* Copy the raw buffer data with no transform. NULL terminated already. */
/* Set the string length */
return_desc
->
string
.
length
=
(
u32
)
length
;
ACPI_MEMCPY
(
return_desc
->
string
.
pointer
,
operand
[
0
]
->
buffer
.
pointer
,
length
);
break
;
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
;
...
...
@@ -458,7 +416,8 @@ acpi_ex_opcode_2A_1T_1R (
/* Object to be indexed is a Package */
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
));
status
=
AE_AML_PACKAGE_LIMIT
;
goto
cleanup
;
...
...
@@ -472,7 +431,8 @@ acpi_ex_opcode_2A_1T_1R (
/* Object to be indexed is a Buffer */
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
));
status
=
AE_AML_BUFFER_LIMIT
;
goto
cleanup
;
...
...
@@ -558,7 +518,8 @@ acpi_ex_opcode_2A_0T_1R (
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 */
...
...
@@ -572,18 +533,15 @@ acpi_ex_opcode_2A_0T_1R (
/*
* Execute the Opcode
*/
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL
)
/* logical_op (Operand0, Operand1) */
{
/* Both operands must be of the same type */
if
(
ACPI_GET_OBJECT_TYPE
(
operand
[
0
])
!=
ACPI_GET_OBJECT_TYPE
(
operand
[
1
]))
{
status
=
AE_AML_OPERAND_TYPE
;
goto
cleanup
;
}
logical_result
=
acpi_ex_do_logical_op
(
walk_state
->
opcode
,
operand
[
0
],
operand
[
1
]);
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL_NUMERIC
)
/* logical_op (Operand0, Operand1) */
{
status
=
acpi_ex_do_logical_numeric_op
(
walk_state
->
opcode
,
operand
[
0
]
->
integer
.
value
,
operand
[
1
]
->
integer
.
value
,
&
logical_result
);
goto
store_logical_result
;
}
else
if
(
walk_state
->
op_info
->
flags
&
AML_LOGICAL
)
/* logical_op (Operand0, Operand1) */
{
status
=
acpi_ex_do_logical_op
(
walk_state
->
opcode
,
operand
[
0
],
operand
[
1
],
&
logical_result
);
goto
store_logical_result
;
}
...
...
drivers/acpi/executer/exregion.c
View file @
c232f2a1
...
...
@@ -121,7 +121,7 @@ acpi_ex_system_memory_space_handler (
* Hardware does not support non-aligned data transfers, we must verify
* 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
)
{
return_ACPI_STATUS
(
AE_AML_ALIGNMENT
);
}
...
...
drivers/acpi/executer/exresop.c
View file @
c232f2a1
...
...
@@ -160,7 +160,7 @@ acpi_ex_resolve_operands (
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
));
/*
...
...
@@ -227,12 +227,13 @@ acpi_ex_resolve_operands (
case
AML_LOAD_OP
:
/* ddb_handle from LOAD_OP or LOAD_TABLE_OP */
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
;
default:
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
,
(
acpi_ps_get_opcode_info
(
obj_desc
->
reference
.
opcode
))
->
name
));
...
...
@@ -398,7 +399,7 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a STRING or BUFFER
* 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
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
...
@@ -420,7 +421,7 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a STRING or INTEGER
* 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
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
...
@@ -442,7 +443,8 @@ acpi_ex_resolve_operands (
* But we can implicitly convert from a BUFFER or INTEGER
* 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
(
status
==
AE_TYPE
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
...
...
@@ -494,7 +496,7 @@ acpi_ex_resolve_operands (
/* 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
))
{
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/executer/exstore.c
View file @
c232f2a1
...
...
@@ -129,7 +129,8 @@ acpi_ex_store (
/* Destination is not a Reference object */
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
(
dest_desc
);
...
...
@@ -182,23 +183,37 @@ acpi_ex_store (
* Storing to the Debug object causes the value stored to be
* 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_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
))
{
case
ACPI_TYPE_INTEGER
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"0x%8.8X%8.8X
\n
"
,
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_FORMAT_UINT64
(
source_desc
->
integer
.
value
)));
}
break
;
case
ACPI_TYPE_BUFFER
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Length 0x%.2X
"
,
(
u32
)
source_desc
->
buffer
.
length
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
"
,
(
u32
)
source_desc
->
buffer
.
length
));
ACPI_DUMP_BUFFER
(
source_desc
->
buffer
.
pointer
,
(
source_desc
->
buffer
.
length
<
32
)
?
source_desc
->
buffer
.
length
:
32
);
break
;
...
...
@@ -206,22 +221,22 @@ acpi_ex_store (
case
ACPI_TYPE_STRING
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Length 0x%.2X,
\"
%s
\"\n
"
,
source_desc
->
string
.
length
,
source_desc
->
string
.
pointer
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
\"
%s
\"\n
"
,
source_desc
->
string
.
length
,
source_desc
->
string
.
pointer
));
break
;
case
ACPI_TYPE_PACKAGE
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Size 0x%.2X
Elements Ptr - %p
\n
"
,
source_desc
->
package
.
count
,
source_desc
->
package
.
elements
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
Elements Ptr - %p
\n
"
,
source_desc
->
package
.
count
,
source_desc
->
package
.
elements
));
break
;
default:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"%p
\n
"
,
source_desc
));
source_desc
));
break
;
}
...
...
drivers/acpi/executer/exsystem.c
View file @
c232f2a1
...
...
@@ -167,7 +167,7 @@ acpi_ex_system_do_stall (
acpi_status
acpi_ex_system_do_suspend
(
u32
how_long
)
acpi_integer
how_long
)
{
acpi_status
status
;
...
...
@@ -179,8 +179,7 @@ acpi_ex_system_do_suspend (
acpi_ex_exit_interpreter
();
acpi_os_sleep
((
u16
)
(
how_long
/
(
u32
)
1000
),
(
u16
)
(
how_long
%
(
u32
)
1000
));
acpi_os_sleep
(
how_long
);
/* And now we must get the interpreter again */
...
...
drivers/acpi/executer/exutils.c
View file @
c232f2a1
...
...
@@ -280,25 +280,25 @@ acpi_ex_digits_needed (
{
u32
num_digits
;
acpi_integer
current_value
;
acpi_integer
quotient
;
ACPI_FUNCTION_TRACE
(
"ex_digits_needed"
);
/*
* acpi_integer is unsigned, so we don't worry about a '-'
*/
if
((
current_value
=
value
)
==
0
)
{
/* acpi_integer is unsigned, so we don't worry about a '-' prefix */
if
(
value
==
0
)
{
return_VALUE
(
1
);
}
current_value
=
value
;
num_digits
=
0
;
/* Count the digits in the requested base */
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
++
;
current_value
=
quotient
;
}
return_VALUE
(
num_digits
);
...
...
@@ -361,7 +361,6 @@ acpi_ex_unsigned_integer_to_string (
u32
count
;
u32
digits_needed
;
u32
remainder
;
acpi_integer
quotient
;
ACPI_FUNCTION_ENTRY
();
...
...
@@ -371,9 +370,8 @@ acpi_ex_unsigned_integer_to_string (
out_string
[
digits_needed
]
=
0
;
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
);
\
value
=
quotient
;
}
}
...
...
drivers/acpi/hardware/hwregs.c
View file @
c232f2a1
...
...
@@ -709,6 +709,7 @@ acpi_hw_low_level_read (
u32
*
value
,
struct
acpi_generic_address
*
reg
)
{
u64
address
;
acpi_status
status
;
...
...
@@ -720,8 +721,14 @@ acpi_hw_low_level_read (
* a non-zero address within. However, don't return an error
* because the PM1A/B code must not fail if B isn't present.
*/
if
((
!
reg
)
||
(
!
reg
->
address
))
{
if
(
!
reg
)
{
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
);
}
*
value
=
0
;
...
...
@@ -734,14 +741,14 @@ acpi_hw_low_level_read (
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
status
=
acpi_os_read_memory
(
(
acpi_physical_address
)
reg
->
address
,
(
acpi_physical_address
)
address
,
value
,
width
);
break
;
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
);
break
;
...
...
@@ -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
"
,
*
value
,
width
,
ACPI_FORMAT_UINT64
(
reg
->
address
),
ACPI_FORMAT_UINT64
(
address
),
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
return
(
status
);
...
...
@@ -781,6 +788,7 @@ acpi_hw_low_level_write (
u32
value
,
struct
acpi_generic_address
*
reg
)
{
u64
address
;
acpi_status
status
;
...
...
@@ -792,8 +800,14 @@ acpi_hw_low_level_write (
* a non-zero address within. However, don't return an error
* because the PM1A/B code must not fail if B isn't present.
*/
if
((
!
reg
)
||
(
!
reg
->
address
))
{
if
(
!
reg
)
{
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
);
}
...
...
@@ -805,14 +819,14 @@ acpi_hw_low_level_write (
case
ACPI_ADR_SPACE_SYSTEM_MEMORY
:
status
=
acpi_os_write_memory
(
(
acpi_physical_address
)
reg
->
address
,
(
acpi_physical_address
)
address
,
value
,
width
);
break
;
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
);
break
;
...
...
@@ -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
"
,
value
,
width
,
ACPI_FORMAT_UINT64
(
reg
->
address
),
ACPI_FORMAT_UINT64
(
address
),
acpi_ut_get_region_name
(
reg
->
address_space_id
)));
return
(
status
);
...
...
drivers/acpi/hardware/hwtimer.c
View file @
c232f2a1
...
...
@@ -149,10 +149,9 @@ acpi_get_timer_duration (
u32
end_ticks
,
u32
*
time_elapsed
)
{
u32
delta_ticks
=
0
;
union
uint64_overlay
normalized_ticks
;
acpi_status
status
;
acpi_integer
out_quotient
;
u32
delta_ticks
;
acpi_integer
quotient
;
ACPI_FUNCTION_TRACE
(
"acpi_get_timer_duration"
);
...
...
@@ -164,7 +163,7 @@ acpi_get_timer_duration (
/*
* 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
)
{
delta_ticks
=
end_ticks
-
start_ticks
;
...
...
@@ -181,22 +180,20 @@ acpi_get_timer_duration (
delta_ticks
=
(
0xFFFFFFFF
-
start_ticks
)
+
end_ticks
;
}
}
else
{
else
/* start_ticks == end_ticks */
{
*
time_elapsed
=
0
;
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;
*/
normalized_ticks
.
full
=
((
u64
)
delta_ticks
)
*
1000000
;
status
=
acpi_ut_short_divide
(
&
normalized_ticks
.
full
,
PM_TIMER_FREQUENCY
,
&
out_quotient
,
NULL
);
status
=
acpi_ut_short_divide
(((
u64
)
delta_ticks
)
*
1000000
,
PM_TIMER_FREQUENCY
,
&
quotient
,
NULL
);
*
time_elapsed
=
(
u32
)
out_
quotient
;
*
time_elapsed
=
(
u32
)
quotient
;
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/namespace/nsaccess.c
View file @
c232f2a1
...
...
@@ -161,8 +161,10 @@ acpi_ns_root_initialize (void)
#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
;
#else
/* Mark this as a very SPECIAL method */
...
...
@@ -236,7 +238,8 @@ acpi_ns_root_initialize (void)
/* 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 */
...
...
@@ -462,7 +465,8 @@ acpi_ns_lookup (
type
=
this_node
->
type
;
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
;
case
AML_DUAL_NAME_PREFIX
:
...
...
@@ -554,7 +558,7 @@ acpi_ns_lookup (
/* Try to find the single (4 character) ACPI name */
status
=
acpi_ns_search_and_enter
(
simple_name
,
walk_state
,
current_node
,
interpreter_mode
,
this_search_type
,
local_flags
,
&
this_node
);
interpreter_mode
,
this_search_type
,
local_flags
,
&
this_node
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_NOT_FOUND
)
{
/* Name not found in ACPI namespace */
...
...
drivers/acpi/namespace/nsdump.c
View file @
c232f2a1
...
...
@@ -198,7 +198,8 @@ acpi_ns_dump_one_object (
}
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,9 +227,8 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_PROCESSOR
:
acpi_os_printf
(
"ID %X Len %.4X Addr %p
\n
"
,
obj_desc
->
processor
.
proc_id
,
obj_desc
->
processor
.
length
,
(
char
*
)
obj_desc
->
processor
.
address
);
obj_desc
->
processor
.
proc_id
,
obj_desc
->
processor
.
length
,
(
char
*
)
obj_desc
->
processor
.
address
);
break
;
...
...
@@ -241,16 +241,15 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_METHOD
:
acpi_os_printf
(
"Args %X Len %.4X Aml %p
\n
"
,
(
u32
)
obj_desc
->
method
.
param_count
,
obj_desc
->
method
.
aml_length
,
obj_desc
->
method
.
aml_start
);
(
u32
)
obj_desc
->
method
.
param_count
,
obj_desc
->
method
.
aml_length
,
obj_desc
->
method
.
aml_start
);
break
;
case
ACPI_TYPE_INTEGER
:
acpi_os_printf
(
"= %8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
ACPI_FORMAT_UINT64
(
obj_desc
->
integer
.
value
));
break
;
...
...
@@ -258,7 +257,7 @@ acpi_ns_dump_one_object (
if
(
obj_desc
->
common
.
flags
&
AOPOBJ_DATA_VALID
)
{
acpi_os_printf
(
"Elements %.2X
\n
"
,
obj_desc
->
package
.
count
);
obj_desc
->
package
.
count
);
}
else
{
acpi_os_printf
(
"[Length not yet evaluated]
\n
"
);
...
...
@@ -298,11 +297,12 @@ acpi_ns_dump_one_object (
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
)
{
acpi_os_printf
(
" Addr %8.8X%8.8X Len %.4X
\n
"
,
ACPI_FORMAT_UINT64
(
obj_desc
->
region
.
address
),
obj_desc
->
region
.
length
);
ACPI_FORMAT_UINT64
(
obj_desc
->
region
.
address
),
obj_desc
->
region
.
length
);
}
else
{
acpi_os_printf
(
" [Address/Length not yet evaluated]
\n
"
);
...
...
@@ -313,7 +313,7 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_LOCAL_REFERENCE
:
acpi_os_printf
(
"[%s]
\n
"
,
acpi_ps_get_opcode_name
(
obj_desc
->
reference
.
opcode
));
acpi_ps_get_opcode_name
(
obj_desc
->
reference
.
opcode
));
break
;
...
...
@@ -322,7 +322,7 @@ acpi_ns_dump_one_object (
if
(
obj_desc
->
buffer_field
.
buffer_obj
&&
obj_desc
->
buffer_field
.
buffer_obj
->
buffer
.
node
)
{
acpi_os_printf
(
"Buf [%4.4s]"
,
acpi_ut_get_node_name
(
obj_desc
->
buffer_field
.
buffer_obj
->
buffer
.
node
));
acpi_ut_get_node_name
(
obj_desc
->
buffer_field
.
buffer_obj
->
buffer
.
node
));
}
break
;
...
...
@@ -330,30 +330,31 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_LOCAL_REGION_FIELD
:
acpi_os_printf
(
"Rgn [%4.4s]"
,
acpi_ut_get_node_name
(
obj_desc
->
common_field
.
region_obj
->
region
.
node
));
acpi_ut_get_node_name
(
obj_desc
->
common_field
.
region_obj
->
region
.
node
));
break
;
case
ACPI_TYPE_LOCAL_BANK_FIELD
:
acpi_os_printf
(
"Rgn [%4.4s] Bnk [%4.4s]"
,
acpi_ut_get_node_name
(
obj_desc
->
common_field
.
region_obj
->
region
.
node
),
acpi_ut_get_node_name
(
obj_desc
->
bank_field
.
bank_obj
->
common_field
.
node
));
acpi_ut_get_node_name
(
obj_desc
->
common_field
.
region_obj
->
region
.
node
),
acpi_ut_get_node_name
(
obj_desc
->
bank_field
.
bank_obj
->
common_field
.
node
));
break
;
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
acpi_os_printf
(
"Idx [%4.4s] Dat [%4.4s]"
,
acpi_ut_get_node_name
(
obj_desc
->
index_field
.
index_obj
->
common_field
.
node
),
acpi_ut_get_node_name
(
obj_desc
->
index_field
.
data_obj
->
common_field
.
node
));
acpi_ut_get_node_name
(
obj_desc
->
index_field
.
index_obj
->
common_field
.
node
),
acpi_ut_get_node_name
(
obj_desc
->
index_field
.
data_obj
->
common_field
.
node
));
break
;
case
ACPI_TYPE_LOCAL_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
;
default:
...
...
@@ -371,10 +372,10 @@ acpi_ns_dump_one_object (
case
ACPI_TYPE_LOCAL_INDEX_FIELD
:
acpi_os_printf
(
" Off %.3X Len %.2X Acc %.2hd
\n
"
,
(
obj_desc
->
common_field
.
base_byte_offset
*
8
)
+
obj_desc
->
common_field
.
start_field_bit_offset
,
obj_desc
->
common_field
.
bit_length
,
obj_desc
->
common_field
.
access_byte_width
);
(
obj_desc
->
common_field
.
base_byte_offset
*
8
)
+
obj_desc
->
common_field
.
start_field_bit_offset
,
obj_desc
->
common_field
.
bit_length
,
obj_desc
->
common_field
.
access_byte_width
);
break
;
default:
...
...
@@ -471,12 +472,13 @@ acpi_ns_dump_one_object (
obj_type
=
ACPI_GET_OBJECT_TYPE
(
obj_desc
);
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
;
}
else
{
acpi_os_printf
(
"(Ptr to ACPI Object type %s, %X)
\n
"
,
acpi_ut_get_type_name
(
obj_type
),
obj_type
);
acpi_ut_get_type_name
(
obj_type
),
obj_type
);
bytes_to_dump
=
sizeof
(
union
acpi_operand_object
);
}
break
;
...
...
@@ -484,8 +486,9 @@ acpi_ns_dump_one_object (
default:
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_ut_get_descriptor_name
(
obj_desc
));
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_ut_get_descriptor_name
(
obj_desc
));
bytes_to_dump
=
16
;
break
;
}
...
...
@@ -552,7 +555,7 @@ acpi_ns_dump_one_object (
* FUNCTION: acpi_ns_dump_objects
*
* PARAMETERS: Type - Object type to be dumped
* max_depth - Maximum depth of dump.
Use ACPI_UINT32_MAX
* max_depth - Maximum depth of dump. Use ACPI_UINT32_MAX
* for an effectively unlimited depth.
* owner_id - Dump only objects owned by this ID. Use
* ACPI_UINT32_MAX to match all owners.
...
...
drivers/acpi/namespace/nsdumpdv.c
View file @
c232f2a1
...
...
@@ -91,10 +91,10 @@ acpi_ns_dump_one_device (
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" "
));
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" HID: %s, ADR: %8.8X%8.8X, Status: %X
\n
"
,
info
->
hardware_id
.
value
,
ACPI_FORMAT_UINT64
(
info
->
address
),
info
->
current_status
));
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_TABLES
,
" HID: %s, ADR: %8.8X%8.8X, Status: %X
\n
"
,
info
->
hardware_id
.
value
,
ACPI_FORMAT_UINT64
(
info
->
address
),
info
->
current_status
));
ACPI_MEM_FREE
(
info
);
}
...
...
@@ -133,7 +133,8 @@ acpi_ns_dump_root_devices (void)
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
,
ACPI_UINT32_MAX
,
ACPI_NS_WALK_NO_UNLOCK
,
...
...
drivers/acpi/namespace/nseval.c
View file @
c232f2a1
...
...
@@ -57,14 +57,9 @@
*
* FUNCTION: acpi_ns_evaluate_relative
*
* PARAMETERS: Handle - The relative containing object
* Pathname - Name of method to execute, If NULL, the
* PARAMETERS: Pathname - Name of method to execute, If NULL, the
* handle is the object to execute
* Params - List of parameters to pass to the method,
* 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.
* Info - Method info block
*
* RETURN: Status
*
...
...
@@ -138,8 +133,7 @@ acpi_ns_evaluate_relative (
}
/*
* Now that we have a handle to the object, we can attempt
* to evaluate it.
* Now that we have a handle to the object, we can attempt to evaluate it.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
pathname
,
node
,
acpi_ns_get_attached_object
(
node
)));
...
...
@@ -165,9 +159,9 @@ acpi_ns_evaluate_relative (
*
* PARAMETERS: Pathname - Fully qualified pathname to the object
* Info - Contains:
*
return_object
- Where to put method's return value (if
*
return_object
- Where to put method's return value (if
* any). If NULL, no value is returned.
*
Params
- List of parameters to pass to the method,
*
Params
- List of parameters to pass to the method,
* terminated by NULL. Params itself may be
* NULL if no parameters are being passed.
*
...
...
@@ -213,14 +207,14 @@ acpi_ns_evaluate_by_name (
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
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
));
goto
cleanup
;
}
/*
* Now that we have a handle to the object, we can attempt
* to evaluate it.
* Now that we have a handle to the object, we can attempt to evaluate it.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"%s [%p] Value %p
\n
"
,
pathname
,
info
->
node
,
acpi_ns_get_attached_object
(
info
->
node
)));
...
...
@@ -303,9 +297,8 @@ acpi_ns_evaluate_by_handle (
}
/*
* For a method alias, we must grab the actual method node
* so that proper scoping context will be established
* before execution.
* For a method alias, we must grab the actual method node so that proper
* scoping context will be established before execution.
*/
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_LOCAL_METHOD_ALIAS
)
{
info
->
node
=
ACPI_CAST_PTR
(
struct
acpi_namespace_node
,
info
->
node
->
object
);
...
...
@@ -314,11 +307,9 @@ acpi_ns_evaluate_by_handle (
/*
* Two major cases here:
* 1) The object is an actual control method -- execute it.
* 2) The object is not a method -- just return it's current
* value
* 2) The object is not a method -- just return it's current value
*
* In both cases, the namespace is unlocked by the
* acpi_ns* procedure
* In both cases, the namespace is unlocked by the acpi_ns* procedure
*/
if
(
acpi_ns_get_type
(
info
->
node
)
==
ACPI_TYPE_METHOD
)
{
/*
...
...
@@ -328,15 +319,13 @@ acpi_ns_evaluate_by_handle (
}
else
{
/*
* Case 2) Object is NOT a method, just return its
* current value
* Case 2) Object is NOT a method, just return its current value
*/
status
=
acpi_ns_get_object_value
(
info
);
}
/*
* Check if there is a return value on the stack that must
* be dealt with
* Check if there is a return value on the stack that must be dealt with
*/
if
(
status
==
AE_CTRL_RETURN_VALUE
)
{
/* Map AE_CTRL_RETURN_VALUE to AE_OK, we are done with it */
...
...
@@ -345,8 +334,8 @@ acpi_ns_evaluate_by_handle (
}
/*
* Namespace was unlocked by the handling acpi_ns* function,
*
so we
just return
* Namespace was unlocked by the handling acpi_ns* function,
so we
* just return
*/
return_ACPI_STATUS
(
status
);
}
...
...
@@ -356,12 +345,7 @@ acpi_ns_evaluate_by_handle (
*
* FUNCTION: acpi_ns_execute_control_method
*
* PARAMETERS: method_node - The method to execute
* 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.
* PARAMETERS: Info - Method info block (w/params)
*
* RETURN: Status
*
...
...
@@ -430,8 +414,7 @@ acpi_ns_execute_control_method (
*
* FUNCTION: acpi_ns_get_object_value
*
* PARAMETERS: Node - The object
* return_obj_desc - Where the objects value is returned
* PARAMETERS: Info - Method info block (w/params)
*
* RETURN: Status
*
...
...
@@ -453,28 +436,25 @@ acpi_ns_get_object_value (
/*
* Objects require additional resolution steps (e.g., the
*
Node may be a field that must be read, etc.) -- we can't just grab
* the
object out of the
node.
* Objects require additional resolution steps (e.g., the
Node may be a
*
field that must be read, etc.) -- we can't just grab the object out of
* the node.
*/
/*
* Use resolve_node_to_value() to get the associated value. This call
*
always
deletes obj_desc (allocated above).
* Use resolve_node_to_value() to get the associated value. This call
always
* deletes obj_desc (allocated above).
*
* NOTE: we can get away with passing in NULL for a walk state
* because obj_desc is guaranteed to not be a reference to either
* a method local or a method argument (because this interface can only be
* called from the acpi_evaluate external interface, never called from
* a running control method.)
* NOTE: we can get away with passing in NULL for a walk state because
* obj_desc is guaranteed to not be a reference to either a method local or
* a method argument (because this interface can only be called from the
* acpi_evaluate external interface, never called from a running method.)
*
* Even though we do not directly invoke the interpreter
* for this, we must enter it because we could access an opregion.
* The opregion access code assumes that the interpreter
* is locked.
* Even though we do not directly invoke the interpreter for this, we must
* enter it because we could access an opregion. 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
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -485,16 +465,18 @@ acpi_ns_get_object_value (
if
(
ACPI_SUCCESS
(
status
))
{
status
=
acpi_ex_resolve_node_to_value
(
&
resolved_node
,
NULL
);
/*
* If acpi_ex_resolve_node_to_value() succeeded, the return value was
*
placed
in resolved_node.
* If acpi_ex_resolve_node_to_value() succeeded, the return value was
placed
* in resolved_node.
*/
acpi_ex_exit_interpreter
();
if
(
ACPI_SUCCESS
(
status
))
{
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
"
,
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 (
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
"**** 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 */
...
...
@@ -142,7 +143,8 @@ acpi_ns_initialize_devices (
info
.
num_STA
=
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
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -257,8 +259,8 @@ acpi_ns_init_one_object (
}
/*
* Each of these types can contain executable AML code within
*
the
declaration.
* Each of these types can contain executable AML code within
the
* declaration.
*/
switch
(
type
)
{
case
ACPI_TYPE_REGION
:
...
...
@@ -267,21 +269,18 @@ acpi_ns_init_one_object (
status
=
acpi_ds_get_region_arguments
(
obj_desc
);
break
;
case
ACPI_TYPE_BUFFER_FIELD
:
info
->
field_init
++
;
status
=
acpi_ds_get_buffer_field_arguments
(
obj_desc
);
break
;
case
ACPI_TYPE_BUFFER
:
info
->
buffer_init
++
;
status
=
acpi_ds_get_buffer_arguments
(
obj_desc
);
break
;
case
ACPI_TYPE_PACKAGE
:
info
->
package_init
++
;
...
...
@@ -301,15 +300,17 @@ acpi_ns_init_one_object (
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
))
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INIT
,
"."
));
}
/*
* We ignore errors from above, and always return OK, since
*
we don't want
to abort the walk on any single error.
* We ignore errors from above, and always return OK, since
we don't want
* to abort the walk on any single error.
*/
acpi_ex_exit_interpreter
();
return
(
AE_OK
);
...
...
@@ -363,7 +364,8 @@ acpi_ns_init_one_device (
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
,
"."
));
}
...
...
@@ -429,6 +431,5 @@ acpi_ns_init_one_device (
status
=
acpi_gbl_init_handler
(
pinfo
.
node
,
ACPI_INIT_DEVICE_INI
);
}
return_ACPI_STATUS
(
status
);
}
drivers/acpi/namespace/nsload.c
View file @
c232f2a1
...
...
@@ -92,12 +92,14 @@ acpi_ns_load_table (
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 */
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
);
}
...
...
@@ -110,7 +112,8 @@ acpi_ns_load_table (
* to another control method, we can't continue parsing
* 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
);
if
(
ACPI_FAILURE
(
status
))
{
...
...
@@ -196,7 +199,6 @@ acpi_ns_load_table_by_type (
if
(
ACPI_SUCCESS
(
status
))
{
table_desc
->
loaded_into_namespace
=
TRUE
;
}
break
;
...
...
@@ -252,7 +254,6 @@ acpi_ns_load_table_by_type (
table_desc
=
table_desc
->
next
;
}
break
;
...
...
drivers/acpi/namespace/nsnames.c
View file @
c232f2a1
...
...
@@ -202,7 +202,11 @@ acpi_ns_get_pathname_length (
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 (
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
);
}
...
...
drivers/acpi/namespace/nssearch.c
View file @
c232f2a1
...
...
@@ -96,8 +96,10 @@ acpi_ns_search_node (
scope_name
=
acpi_ns_get_external_pathname
(
node
);
if
(
scope_name
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching %s (%p) For [%4.4s] (%s)
\n
"
,
scope_name
,
node
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
type
)));
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"Searching %s (%p) For [%4.4s] (%s)
\n
"
,
scope_name
,
node
,
(
char
*
)
&
target_name
,
acpi_ut_get_type_name
(
type
)));
ACPI_MEM_FREE
(
scope_name
);
}
...
...
@@ -164,7 +166,7 @@ acpi_ns_search_node (
* PARAMETERS: *target_name - Ascii ACPI name to search for
* *Node - Starting node where search will begin
* 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
*
...
...
@@ -199,13 +201,13 @@ acpi_ns_search_parent_tree (
parent_node
=
acpi_ns_get_parent_node
(
node
);
/*
* If there is no parent (i.e., we are at the root) or
*
type is "local",
we won't be searching the parent tree.
* If there is no parent (i.e., we are at the root) or
type is "local",
* we won't be searching the parent tree.
*/
if
(
!
parent_node
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_NAMES
,
"[%4.4s] has no parent
\n
"
,
(
char
*
)
&
target_name
));
return_ACPI_STATUS
(
AE_NOT_FOUND
);
return_ACPI_STATUS
(
AE_NOT_FOUND
);
}
if
(
acpi_ns_local
(
type
))
{
...
...
@@ -217,11 +219,12 @@ acpi_ns_search_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
* the root
* Search parents until target is found or we have backed up to the root
*/
while
(
parent_node
)
{
/*
...
...
@@ -230,7 +233,7 @@ acpi_ns_search_parent_tree (
* the actual name we are searching for. Typechecking comes later.
*/
status
=
acpi_ns_search_node
(
target_name
,
parent_node
,
ACPI_TYPE_ANY
,
return_node
);
ACPI_TYPE_ANY
,
return_node
);
if
(
ACPI_SUCCESS
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -293,7 +296,8 @@ acpi_ns_search_and_enter (
/* Parameter validation */
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
));
ACPI_REPORT_ERROR
((
"ns_search_and_enter: Null parameter
\n
"
));
...
...
@@ -330,22 +334,20 @@ acpi_ns_search_and_enter (
}
/*
* The name was not found. If we are NOT performing the
* first pass (name entry) of loading the namespace, search
* the parent tree (all the way to the root if necessary.)
* We don't want to perform the parent search when the
* namespace is actually being loaded. We want to perform
* the search when namespace references are being resolved
* (load pass 2) and during the execution phase.
* The name was not found. If we are NOT performing the first pass
* (name entry) of loading the namespace, search the parent tree (all the
* way to the root if necessary.) We don't want to perform the parent
* search when the namespace is actually being loaded. We want to perform
* the search when namespace references are being resolved (load pass 2)
* and during the execution phase.
*/
if
((
interpreter_mode
!=
ACPI_IMODE_LOAD_PASS1
)
&&
(
flags
&
ACPI_NS_SEARCH_PARENT
))
{
/*
* Not found at this level - search parent tree according
*
to
ACPI specification
* Not found at this level - search parent tree according
to the
* ACPI specification
*/
status
=
acpi_ns_search_parent_tree
(
target_name
,
node
,
type
,
return_node
);
status
=
acpi_ns_search_parent_tree
(
target_name
,
node
,
type
,
return_node
);
if
(
ACPI_SUCCESS
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -355,7 +357,8 @@ acpi_ns_search_and_enter (
* In execute mode, just search, never add names. Exit now.
*/
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
));
return_ACPI_STATUS
(
AE_NOT_FOUND
);
...
...
drivers/acpi/namespace/nsutils.c
View file @
c232f2a1
...
...
@@ -85,12 +85,14 @@ acpi_ns_report_error (
if
(
lookup_status
==
AE_BAD_CHARACTER
)
{
/* 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
{
/* 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 */
...
...
@@ -141,7 +143,8 @@ acpi_ns_report_method_error (
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
))
{
acpi_os_printf
(
"report_method_error: Could not get node
\n
"
);
return
;
...
...
@@ -180,7 +183,7 @@ acpi_ns_print_node_pathname (
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
;
...
...
@@ -324,13 +327,11 @@ acpi_ns_get_internal_name_length (
info
->
fully_qualified
=
FALSE
;
/*
* For the internal name, the required length is 4 bytes
* per segment, plus 1 each for root_prefix, multi_name_prefix_op,
* segment count, trailing null (which is not really needed,
* but no there's harm in putting it there)
* For the internal name, the required length is 4 bytes per segment, plus
* 1 each for root_prefix, multi_name_prefix_op, segment count, trailing null
* (which is not really needed, but no there's harm in putting it there)
*
* strlen() + 1 covers the first name_seg, which has no
* path separator
* strlen() + 1 covers the first name_seg, which has no path separator
*/
if
(
acpi_ns_valid_root_prefix
(
next_external_char
[
0
]))
{
info
->
fully_qualified
=
TRUE
;
...
...
@@ -347,10 +348,9 @@ acpi_ns_get_internal_name_length (
}
/*
* Determine the number of ACPI name "segments" by counting
* the number of path separators within the string. Start
* with one segment since the segment count is (# separators)
* + 1, and zero separators is ok.
* Determine the number of ACPI name "segments" by counting the number of
* path separators within the string. Start with one segment since the
* segment count is [(# separators) + 1], and zero separators is ok.
*/
if
(
*
next_external_char
)
{
info
->
num_segments
=
1
;
...
...
@@ -625,7 +625,8 @@ acpi_ns_externalize_name (
/* <count> 4-byte names */
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
;
case
AML_DUAL_NAME_PREFIX
:
...
...
@@ -672,7 +673,7 @@ acpi_ns_externalize_name (
}
/*
* Build converted_name
...
* Build converted_name
*/
*
converted_name
=
ACPI_MEM_CALLOCATE
(
required_length
);
if
(
!
(
*
converted_name
))
{
...
...
@@ -756,7 +757,7 @@ acpi_ns_map_handle_to_node (
*
* 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
*
...
...
@@ -976,7 +977,8 @@ acpi_ns_find_parent_name (
parent_node
=
acpi_ns_get_parent_node
(
child_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
),
parent_node
,
acpi_ut_get_node_name
(
parent_node
)));
...
...
@@ -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
)));
}
...
...
@@ -1018,11 +1021,9 @@ acpi_ns_get_parent_node (
}
/*
* Walk to the end of this peer list.
* The last entry is marked with a flag and the peer
* pointer is really a pointer back to the parent.
* This saves putting a parent back pointer in each and
* every named object!
* Walk to the end of this peer list. The last entry is marked with a flag
* and the peer pointer is really a pointer back to the parent. This saves
* putting a parent back pointer in each and every named object!
*/
while
(
!
(
node
->
flags
&
ANOBJ_END_OF_PEER_LIST
))
{
node
=
node
->
peer
;
...
...
@@ -1039,8 +1040,8 @@ acpi_ns_get_parent_node (
*
* PARAMETERS: Node - Current table entry
*
* RETURN: Next valid Node in the linked node list.
NULL if no more valid
* nodes
s
* RETURN: Next valid Node in the linked node list. NULL if no more valid
* nodes
.
*
* DESCRIPTION: Find the next valid node within a name table.
* 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)
*/
void
acpi_os_sleep
(
u32
sec
,
u32
ms
)
acpi_os_sleep
(
acpi_integer
ms
)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule_timeout
(
HZ
*
sec
+
(
ms
*
HZ
)
/
1000
);
schedule_timeout
(
((
signed
long
)
ms
*
HZ
)
/
1000
);
}
void
...
...
@@ -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_os_read_port
(
acpi_io_address
port
,
...
...
drivers/acpi/parser/psopcode.c
View file @
c232f2a1
...
...
@@ -194,6 +194,7 @@
#define ARGP_STRING_OP ARGP_LIST1 (ARGP_CHARLIST)
#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_TIMER_OP ARG_NONE
#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_DEC_STR_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
...
...
@@ -325,6 +326,7 @@
#define ARGI_STRING_OP ARGI_INVALID_OPCODE
#define ARGI_SUBTRACT_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_TARGETREF)
#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_BUFFER_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] =
/* 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
),
/* 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
),
/* 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
),
/* 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
_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
),
/* 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
),
...
...
@@ -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
),
/* 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 */
/* 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] =
/* 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
),
/* 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 !*/
};
...
...
@@ -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
* index into the table above
*/
static
const
u8
acpi_gbl_short_op_index
[
256
]
=
{
/* 0 1 2 3 4 5 6 7 */
...
...
@@ -654,7 +658,10 @@ static const u8 acpi_gbl_short_op_index[256] =
/* 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
]
=
{
/* 0 1 2 3 4 5 6 7 */
...
...
@@ -665,7 +672,7 @@ static const u8 acpi_gbl_long_op_index[NUM_EXTENDED_OPCODE] =
/* 0x18 */
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
_UNK
,
0x7B
,
/* 0x20 */
0x4a
,
0x4b
,
0x4c
,
0x4d
,
0x4e
,
0x4f
,
0x50
,
0x51
,
/* 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
,
/* 0x40 */
_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 (
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
;
}
...
...
drivers/acpi/parser/psutils.c
View file @
c232f2a1
...
...
@@ -129,10 +129,9 @@ union acpi_parse_object*
acpi_ps_alloc_op
(
u16
opcode
)
{
union
acpi_parse_object
*
op
=
NULL
;
u32
size
;
u8
flags
;
union
acpi_parse_object
*
op
;
const
struct
acpi_opcode_info
*
op_info
;
u8
flags
=
ACPI_PARSEOP_GENERIC
;
ACPI_FUNCTION_ENTRY
();
...
...
@@ -140,32 +139,28 @@ acpi_ps_alloc_op (
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
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_DEFERRED
;
}
else
if
(
op_info
->
flags
&
AML_NAMED
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_NAMED
;
}
else
if
(
opcode
==
AML_INT_BYTELIST_OP
)
{
size
=
sizeof
(
struct
acpi_parse_obj_named
);
flags
=
ACPI_PARSEOP_BYTELIST
;
}
else
{
size
=
sizeof
(
struct
acpi_parse_obj_common
);
flags
=
ACPI_PARSEOP_GENERIC
;
}
if
(
size
==
sizeof
(
struct
acpi_parse_obj_common
))
{
/*
* The generic op is by far the most common (16 to 1)
*/
/* Allocate the minimum required size object */
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
);
}
else
{
/* Extended parseop */
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 (
{
acpi_size
byte_stream_size_needed
=
0
;
acpi_size
segment_size
;
struct
acpi_resource_ext_irq
*
ex_irq
=
NULL
;
u8
done
=
FALSE
;
...
...
@@ -91,8 +90,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_IRQ
:
/*
* IRQ Resource
* For an IRQ Resource, Byte 3, although optional, will
*
always be
created - it holds IRQ information.
* For an IRQ Resource, Byte 3, although optional, will
always be
* created - it holds IRQ information.
*/
segment_size
=
4
;
break
;
...
...
@@ -108,8 +107,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_START_DPF
:
/*
* Start Dependent Functions Resource
* For a start_dependent_functions Resource, Byte 1,
*
although
optional, will always be created.
* For a start_dependent_functions Resource, Byte 1,
although
* optional, will always be created.
*/
segment_size
=
2
;
break
;
...
...
@@ -141,10 +140,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_VENDOR
:
/*
* Vendor Defined Resource
* For a Vendor Specific resource, if the Length is
* between 1 and 7 it will be created as a Small
* Resource data type, otherwise it is a Large
* Resource data type.
* For a Vendor Specific resource, if the Length is between 1 and 7
* it will be created as a Small Resource data type, otherwise it
* is a Large Resource data type.
*/
if
(
linked_list
->
data
.
vendor_specific
.
length
>
7
)
{
segment_size
=
3
;
...
...
@@ -191,10 +189,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_ADDRESS16
:
/*
* 16-Bit Address Resource
* The base size of this byte stream is 16. If a
* Resource Source string is not NULL, add 1 for
* the Index + the length of the null terminated
* string Resource Source + 1 for the null.
* The base size of this byte stream is 16. If a Resource Source
* string is not NULL, add 1 for the Index + the length of the null
* terminated string Resource Source + 1 for the null.
*/
segment_size
=
16
;
...
...
@@ -223,10 +220,9 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_ADDRESS64
:
/*
* 64-Bit Address Resource
* The base size of this byte stream is 46. If a Resource
* Source string is not NULL, add 1 for the Index + the
* length of the null terminated string Resource Source +
* 1 for the null.
* The base size of this byte stream is 46. If a resource_source
* string is not NULL, add 1 for the Index + the length of the null
* terminated string Resource Source + 1 for the null.
*/
segment_size
=
46
;
...
...
@@ -239,9 +235,8 @@ acpi_rs_get_byte_stream_length (
case
ACPI_RSTYPE_EXT_IRQ
:
/*
* Extended IRQ Resource
* The base size of this byte stream is 9. This is for an
* Interrupt table length of 1. For each additional
* interrupt, add 4.
* The base size of this byte stream is 9. This is for an Interrupt
* table length of 1. For each additional interrupt, add 4.
* If a Resource Source string is not NULL, add 1 for the
* Index + the length of the null terminated string
* Resource Source + 1 for the null.
...
...
@@ -249,7 +244,7 @@ acpi_rs_get_byte_stream_length (
segment_size
=
9
+
(((
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
++
;
}
...
...
@@ -257,8 +252,7 @@ acpi_rs_get_byte_stream_length (
default:
/*
* If we get here, everything is out of sync,
* so exit with an error
* If we get here, everything is out of sync, exit with error
*/
return_ACPI_STATUS
(
AE_AML_INVALID_RESOURCE_TYPE
);
...
...
@@ -366,7 +360,6 @@ acpi_rs_get_list_length (
/*
* 32-Bit Memory Range Resource
*/
bytes_consumed
=
20
;
structure_size
=
ACPI_SIZEOF_RESOURCE
(
struct
acpi_resource_mem32
);
...
...
@@ -395,14 +388,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
/*
* Resource Source Index and Resource Source are
* optional elements. Check the length of the
* Bytestream. If it is greater than 43, that
* means that an Index exists and is followed by
* a null termininated string. Therefore, set
* the temp variable to the length minus the minimum
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
* Resource Source Index and Resource Source are optional elements.
* Check the length of the Bytestream. If it is greater than 43,
* that means that an Index exists and is followed by a null
* terminated string. Therefore, set the temp variable to the
* length minus the minimum byte stream length plus the byte for
* the Index to determine the size of the NULL terminated string.
*/
if
(
43
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
44
);
...
...
@@ -433,14 +424,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
/*
* Resource Source Index and Resource Source are
* optional elements. Check the length of the
* Bytestream. If it is greater than 23, that
* means that an Index exists and is followed by
* a null termininated string. Therefore, set
* the temp variable to the length minus the minimum
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
* Resource Source Index and Resource Source are optional elements.
* Check the length of the Bytestream. If it is greater than 23,
* that means that an Index exists and is followed by a null
* terminated string. Therefore, set the temp variable to the
* length minus the minimum byte stream length plus the byte for
* the Index to determine the size of the NULL terminated string.
*/
if
(
23
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
24
);
...
...
@@ -471,14 +460,12 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
/*
* Resource Source Index and Resource Source are
* optional elements. Check the length of the
* Bytestream. If it is greater than 13, that
* means that an Index exists and is followed by
* a null termininated string. Therefore, set
* the temp variable to the length minus the minimum
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
* Resource Source Index and Resource Source are optional elements.
* Check the length of the Bytestream. If it is greater than 13,
* that means that an Index exists and is followed by a null
* terminated string. Therefore, set the temp variable to the
* length minus the minimum byte stream length plus the byte for
* the Index to determine the size of the NULL terminated string.
*/
if
(
13
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
14
);
...
...
@@ -509,9 +496,8 @@ acpi_rs_get_list_length (
bytes_consumed
=
temp16
+
3
;
/*
* Point past the length field and the
* Interrupt vector flags to save off the
* Interrupt table length to the Temp8 variable.
* Point past the length field and the Interrupt vector flags to
* save off the Interrupt table length to the Temp8 variable.
*/
buffer
+=
3
;
temp8
=
*
buffer
;
...
...
@@ -523,14 +509,12 @@ acpi_rs_get_list_length (
additional_bytes
=
(
u8
)
((
temp8
-
1
)
*
4
);
/*
* Resource Source Index and Resource Source are
* optional elements. Check the length of the
* Bytestream. If it is greater than 9, that
* means that an Index exists and is followed by
* a null termininated string. Therefore, set
* the temp variable to the length minus the minimum
* byte stream length plus the byte for the Index to
* determine the size of the NULL terminiated string.
* Resource Source Index and Resource Source are optional elements.
* Check the length of the Bytestream. If it is greater than 9,
* that means that an Index exists and is followed by a null
* terminated string. Therefore, set the temp variable to the
* length minus the minimum byte stream length plus the byte for
* the Index to determine the size of the NULL terminated string.
*/
if
(
9
+
additional_bytes
<
temp16
)
{
temp8
=
(
u8
)
(
temp16
-
(
9
+
additional_bytes
));
...
...
@@ -565,9 +549,8 @@ acpi_rs_get_list_length (
bytes_consumed
=
3
;
}
/*
* Point past the descriptor
*/
/* Point past the descriptor */
++
buffer
;
/*
...
...
@@ -595,9 +578,8 @@ acpi_rs_get_list_length (
buffer
=
byte_stream_buffer
;
bytes_consumed
=
3
;
/*
* Point past the descriptor
*/
/* Point past the descriptor */
++
buffer
;
/*
...
...
drivers/acpi/tables/tbget.c
View file @
c232f2a1
...
...
@@ -167,6 +167,9 @@ acpi_tb_get_table_header (
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
);
}
...
...
drivers/acpi/tables/tbxfroot.c
View file @
c232f2a1
...
...
@@ -87,12 +87,28 @@ acpi_tb_find_table (
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
/* Find the table */
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
);
}
status
=
acpi_get_firmware_table
(
signature
,
1
,
ACPI_LOGICAL_ADDRESSING
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
table
=
acpi_gbl_DSDT
;
}
else
{
/* Find the table */
status
=
acpi_get_firmware_table
(
signature
,
1
,
ACPI_LOGICAL_ADDRESSING
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
/* Check oem_id and oem_table_id */
...
...
@@ -102,6 +118,7 @@ acpi_tb_find_table (
return_ACPI_STATUS
(
AE_AML_NAME_NOT_FOUND
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Found table [%4.4s]
\n
"
,
table
->
signature
));
*
table_ptr
=
table
;
return_ACPI_STATUS
(
AE_OK
);
}
...
...
drivers/acpi/utilities/utalloc.c
View file @
c232f2a1
...
...
@@ -265,7 +265,7 @@ acpi_ut_validate_buffer (
* RETURN: Status
*
* 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 (
/* 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
)
{
return
(
AE_NO_MEMORY
);
}
/* Clear the buffer */
ACPI_MEMSET
(
buffer
->
pointer
,
0
,
required_length
);
break
;
default:
/* Validate the size of the buffer */
/*
Existing buffer:
Validate the size of the buffer */
if
(
buffer
->
length
<
required_length
)
{
status
=
AE_BUFFER_OVERFLOW
;
break
;
}
/* Clear the buffer */
ACPI_MEMSET
(
buffer
->
pointer
,
0
,
required_length
);
break
;
}
...
...
@@ -472,7 +473,7 @@ acpi_ut_allocate_and_track (
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
);
if
(
!
allocation
)
{
return
(
NULL
);
...
...
@@ -518,7 +519,7 @@ acpi_ut_callocate_and_track (
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
);
if
(
!
allocation
)
{
/* Report allocation error */
...
...
@@ -712,6 +713,7 @@ acpi_ut_track_allocation (
allocation
->
line
=
line
;
ACPI_STRNCPY
(
allocation
->
module
,
module
,
ACPI_MAX_MODULE_NAME
);
allocation
->
module
[
ACPI_MAX_MODULE_NAME
-
1
]
=
0
;
/* Insert at list head */
...
...
drivers/acpi/utilities/utdelete.c
View file @
c232f2a1
...
...
@@ -621,6 +621,10 @@ acpi_ut_add_reference (
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 */
(
void
)
acpi_ut_update_object_reference
(
object
,
REF_INCREMENT
);
...
...
@@ -664,8 +668,9 @@ acpi_ut_remove_reference (
return_VOID
;
}
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Refs=%X
\n
"
,
object
,
object
->
common
.
reference_count
));
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Current Refs=%X [To Be Decremented]
\n
"
,
object
,
object
->
common
.
reference_count
));
/*
* Decrement the reference count, and only actually delete the object
...
...
drivers/acpi/utilities/utglobal.c
View file @
c232f2a1
...
...
@@ -861,6 +861,7 @@ acpi_ut_init_globals (
acpi_gbl_system_notify
.
handler
=
NULL
;
acpi_gbl_device_notify
.
handler
=
NULL
;
acpi_gbl_exception_handler
=
NULL
;
acpi_gbl_init_handler
=
NULL
;
/* Global "typed" ACPI table pointers */
...
...
drivers/acpi/utilities/utmath.c
View file @
c232f2a1
...
...
@@ -59,7 +59,7 @@
*
* FUNCTION: acpi_ut_short_divide
*
* PARAMETERS:
in_dividend - Pointer to the
dividend
* PARAMETERS:
Dividend - 64-bit
dividend
* Divisor - 32-bit divisor
* out_quotient - Pointer to where the quotient is returned
* out_remainder - Pointer to where the remainder is returned
...
...
@@ -74,19 +74,18 @@
acpi_status
acpi_ut_short_divide
(
acpi_integer
*
in_
dividend
,
acpi_integer
dividend
,
u32
divisor
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
)
{
union
uint64_overlay
dividend
;
union
uint64_overlay
dividend
_ovl
;
union
uint64_overlay
quotient
;
u32
remainder32
;
ACPI_FUNCTION_TRACE
(
"ut_short_divide"
);
dividend
.
full
=
*
in_dividend
;
/* Always check for a zero divisor */
...
...
@@ -95,13 +94,15 @@ acpi_ut_short_divide (
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
dividend_ovl
.
full
=
dividend
;
/*
* The quotient is 64 bits, the remainder is always 32 bits,
* 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
);
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
);
/* Return only what was requested */
...
...
@@ -121,8 +122,8 @@ acpi_ut_short_divide (
*
* FUNCTION: acpi_ut_divide
*
* PARAMETERS: in_dividend -
Pointer to the d
ividend
* in_divisor -
Pointer to the d
ivisor
* PARAMETERS: in_dividend -
D
ividend
* in_divisor -
D
ivisor
* out_quotient - Pointer to where the quotient is returned
* out_remainder - Pointer to where the remainder is returned
*
...
...
@@ -134,8 +135,8 @@ acpi_ut_short_divide (
acpi_status
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_dividend
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
)
{
...
...
@@ -155,13 +156,13 @@ acpi_ut_divide (
/* Always check for a zero divisor */
if
(
*
in_divisor
==
0
)
{
if
(
in_divisor
==
0
)
{
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
divisor
.
full
=
*
in_divisor
;
dividend
.
full
=
*
in_dividend
;
divisor
.
full
=
in_divisor
;
dividend
.
full
=
in_dividend
;
if
(
divisor
.
part
.
hi
==
0
)
{
/*
* 1) Simplest case is where the divisor is 32 bits, we can
...
...
@@ -269,7 +270,7 @@ acpi_ut_divide (
acpi_status
acpi_ut_short_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
u32
divisor
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
)
...
...
@@ -288,10 +289,10 @@ acpi_ut_short_divide (
/* Return only what was requested */
if
(
out_quotient
)
{
*
out_quotient
=
*
in_dividend
/
divisor
;
*
out_quotient
=
in_dividend
/
divisor
;
}
if
(
out_remainder
)
{
*
out_remainder
=
(
u32
)
*
in_dividend
%
divisor
;
*
out_remainder
=
(
u32
)
in_dividend
%
divisor
;
}
return_ACPI_STATUS
(
AE_OK
);
...
...
@@ -299,8 +300,8 @@ acpi_ut_short_divide (
acpi_status
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_dividend
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
)
{
...
...
@@ -309,7 +310,7 @@ acpi_ut_divide (
/* Always check for a zero divisor */
if
(
*
in_divisor
==
0
)
{
if
(
in_divisor
==
0
)
{
ACPI_REPORT_ERROR
((
"acpi_ut_divide: Divide by zero
\n
"
));
return_ACPI_STATUS
(
AE_AML_DIVIDE_BY_ZERO
);
}
...
...
@@ -318,10 +319,10 @@ acpi_ut_divide (
/* Return only what was requested */
if
(
out_quotient
)
{
*
out_quotient
=
*
in_dividend
/
*
in_divisor
;
*
out_quotient
=
in_dividend
/
in_divisor
;
}
if
(
out_remainder
)
{
*
out_remainder
=
*
in_dividend
%
*
in_divisor
;
*
out_remainder
=
in_dividend
%
in_divisor
;
}
return_ACPI_STATUS
(
AE_OK
);
...
...
drivers/acpi/utilities/utmisc.c
View file @
c232f2a1
...
...
@@ -356,16 +356,15 @@ acpi_ut_valid_acpi_character (
* FUNCTION: acpi_ut_strtoul64
*
* PARAMETERS: String - Null terminated string
*
Terminater - Where a pointer to the terminating byte is returned
*
Base - Radix of the string
*
Base - Radix of the string: 10, 16, or ACPI_ANY_BASE
*
ret_integer - Where the converted integer is returned
*
* RETURN: Converted value
* RETURN:
Status and
Converted 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_ut_strtoul64
(
...
...
@@ -373,50 +372,40 @@ acpi_ut_strtoul64 (
u32
base
,
acpi_integer
*
ret_integer
)
{
u32
index
;
u32
this_digit
;
acpi_integer
return_value
=
0
;
acpi_status
status
=
AE_OK
;
acpi_integer
dividend
;
acpi_integer
quotient
;
*
ret_integer
=
0
;
ACPI_FUNCTION_TRACE
(
"ut_stroul64"
);
switch
(
base
)
{
case
0
:
case
8
:
case
ACPI_ANY_BASE
:
case
10
:
case
16
:
break
;
default:
/*
* The specified Base parameter is not in the domain of
* this function:
*/
return
(
AE_BAD_PARAMETER
);
/* Invalid Base */
return_ACPI_STATUS
(
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'
)
{
++
string
;
}
/*
* 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
(
*
string
==
'0'
)
{
if
(
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
{
base
=
16
;
++
string
;
}
else
{
base
=
8
;
}
if
((
*
string
==
'0'
)
&&
(
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
))
{
base
=
16
;
++
string
;
}
else
{
base
=
10
;
...
...
@@ -424,76 +413,67 @@ acpi_ut_strtoul64 (
}
/*
* For
octal and hexadecimal bases
, skip over the leading
* For
hexadecimal base
, skip over the leading
* 0 or 0x, if they are present.
*/
if
(
base
==
8
&&
*
string
==
'0'
)
{
string
++
;
}
if
(
base
==
16
&&
*
string
==
'0'
&&
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
{
string
++
;
}
/* Main loop: convert the string to a
n unsigned long
*/
/* Main loop: convert the string to a
64-bit integer
*/
while
(
*
string
)
{
if
(
ACPI_IS_DIGIT
(
*
string
))
{
index
=
((
u8
)
*
string
)
-
'0'
;
/* Convert ASCII 0-9 to Decimal value */
this_digit
=
((
u8
)
*
string
)
-
'0'
;
}
else
{
index
=
(
u8
)
ACPI_TOUPPER
(
*
string
);
if
(
ACPI_IS_UPPER
((
char
)
index
))
{
index
=
index
-
'A'
+
10
;
this_digit
=
(
u8
)
ACPI_TOUPPER
(
*
string
);
if
(
ACPI_IS_UPPER
((
char
)
this_digit
))
{
/* Convert ASCII Hex char to value */
this_digit
=
this_digit
-
'A'
+
10
;
}
else
{
goto
error_exit
;
}
}
if
(
index
>=
base
)
{
/* Check to see if digit is out of range */
if
(
this_digit
>=
base
)
{
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
(
&
dividend
,
base
,
&
quotient
,
NULL
);
(
void
)
acpi_ut_short_divide
((
ACPI_INTEGER_MAX
-
(
acpi_integer
)
this_digit
),
base
,
&
quotient
,
NULL
);
if
(
return_value
>
quotient
)
{
goto
error_exit
;
}
return_value
*=
base
;
return_value
+=
index
;
return_value
+=
this_digit
;
++
string
;
}
*
ret_integer
=
return_value
;
return
(
status
);
return
_ACPI_STATUS
(
AE_OK
);
error_exit:
switch
(
base
)
{
case
8
:
status
=
AE_BAD_OCTAL_CONSTANT
;
break
;
case
10
:
status
=
AE_BAD_DECIMAL_CONSTANT
;
break
;
case
16
:
status
=
AE_BAD_HEX_CONSTANT
;
break
;
/* Base was set/validated above */
default:
/* Base validated above */
break
;
if
(
base
==
10
)
{
return_ACPI_STATUS
(
AE_BAD_DECIMAL_CONSTANT
);
}
else
{
return_ACPI_STATUS
(
AE_BAD_HEX_CONSTANT
);
}
return
(
status
);
}
...
...
drivers/acpi/utilities/utobject.c
View file @
c232f2a1
...
...
@@ -155,9 +155,8 @@ acpi_ut_create_buffer_object (
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
);
if
(
!
buffer_desc
)
{
return_PTR
(
NULL
);
...
...
@@ -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
...
...
include/acpi/acconfig.h
View file @
c232f2a1
...
...
@@ -64,7 +64,7 @@
/* 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,
...
...
include/acpi/acglobal.h
View file @
c232f2a1
...
...
@@ -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_object_notify_handler
acpi_gbl_device_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
struct
acpi_walk_state
*
acpi_gbl_breakpoint_walk
;
ACPI_EXTERN
acpi_handle
acpi_gbl_global_lock_semaphore
;
...
...
include/acpi/acinterp.h
View file @
c232f2a1
...
...
@@ -83,21 +83,25 @@ acpi_status
acpi_ex_convert_to_integer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
);
u32
flags
);
acpi_status
acpi_ex_convert_to_buffer
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
struct
acpi_walk_state
*
walk_state
);
union
acpi_operand_object
**
result_desc
);
acpi_status
acpi_ex_convert_to_string
(
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
**
result_desc
,
u32
base
,
u32
max_length
,
struct
acpi_walk_state
*
walk_state
);
u32
type
);
/* 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_ex_convert_to_target_type
(
...
...
@@ -109,7 +113,7 @@ acpi_ex_convert_to_target_type (
u32
acpi_ex_convert_to_ascii
(
acpi_integer
integer
,
u
32
base
,
u
16
base
,
u8
*
string
,
u8
max_length
);
...
...
@@ -243,11 +247,19 @@ acpi_ex_do_concatenate (
union
acpi_operand_object
**
actual_return_desc
,
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
(
u16
opcode
,
union
acpi_operand_object
*
obj_desc
,
union
acpi_operand_object
*
obj_desc2
);
union
acpi_operand_object
*
operand0
,
union
acpi_operand_object
*
operand1
,
u8
*
logical_result
);
acpi_integer
acpi_ex_do_math_op
(
...
...
@@ -374,7 +386,7 @@ acpi_ex_system_do_notify_op (
acpi_status
acpi_ex_system_do_suspend
(
u32
time
);
acpi_integer
time
);
acpi_status
acpi_ex_system_do_stall
(
...
...
@@ -412,6 +424,10 @@ acpi_ex_system_wait_semaphore (
* 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_ex_opcode_1A_0T_0R
(
struct
acpi_walk_state
*
walk_state
);
...
...
include/acpi/aclocal.h
View file @
c232f2a1
...
...
@@ -53,7 +53,7 @@ typedef u32 acpi_mutex_handle;
/* 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
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 */
{
ACPI_OBJECT_COMMON_HEADER
...
...
include/acpi/acpiosxf.h
View file @
c232f2a1
...
...
@@ -216,10 +216,13 @@ void
acpi_os_wait_events_complete
(
void
*
context
);
void
acpi_os_wait_events_complete
(
void
*
context
);
void
acpi_os_sleep
(
u32
seconds
,
u32
milliseconds
);
acpi_integer
milliseconds
);
void
acpi_os_stall
(
...
...
@@ -304,7 +307,7 @@ acpi_os_writable (
void
*
pointer
,
acpi_size
length
);
u
32
u
64
acpi_os_get_timer
(
void
);
...
...
include/acpi/acpixf.h
View file @
c232f2a1
...
...
@@ -299,6 +299,15 @@ acpi_install_gpe_handler (
acpi_event_handler
address
,
void
*
context
);
acpi_status
acpi_install_exception_handler
(
acpi_exception_handler
handler
);
/*
* Event interfaces
*/
acpi_status
acpi_acquire_global_lock
(
u16
timeout
,
...
...
include/acpi/actypes.h
View file @
c232f2a1
...
...
@@ -303,7 +303,7 @@ struct uint32_struct
typedef
u32
acpi_integer
;
#define ACPI_INTEGER_MAX ACPI_UINT32_MAX
#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 */
...
...
@@ -315,13 +315,18 @@ typedef u32 acpi_integer;
typedef
u64
acpi_integer
;
#define ACPI_INTEGER_MAX ACPI_UINT64_MAX
#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
#define ACPI_USE_NATIVE_DIVIDE
/* Use compiler native 64-bit divide */
#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
...
...
@@ -831,6 +836,14 @@ acpi_status (*acpi_init_handler) (
#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) */
...
...
include/acpi/acutils.h
View file @
c232f2a1
...
...
@@ -177,6 +177,12 @@ acpi_ut_strncpy (
const
char
*
src_string
,
acpi_size
count
);
int
acpi_ut_memcmp
(
const
char
*
buffer1
,
const
char
*
buffer2
,
acpi_size
count
);
int
acpi_ut_strncmp
(
const
char
*
string1
,
...
...
@@ -577,6 +583,10 @@ union acpi_operand_object *
acpi_ut_create_buffer_object
(
acpi_size
buffer_size
);
union
acpi_operand_object
*
acpi_ut_create_string_object
(
acpi_size
string_size
);
/*
* ut_ref_cnt - Object reference count management
...
...
@@ -690,14 +700,14 @@ acpi_ut_print_string (
acpi_status
acpi_ut_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
*
in_divisor
,
acpi_integer
in_dividend
,
acpi_integer
in_divisor
,
acpi_integer
*
out_quotient
,
acpi_integer
*
out_remainder
);
acpi_status
acpi_ut_short_divide
(
acpi_integer
*
in_dividend
,
acpi_integer
in_dividend
,
u32
divisor
,
acpi_integer
*
out_quotient
,
u32
*
out_remainder
);
...
...
@@ -716,6 +726,10 @@ acpi_ut_strtoul64 (
u32
base
,
acpi_integer
*
ret_integer
);
/* Values for Base above (16=Hex, 10=Decimal) */
#define ACPI_ANY_BASE 0
char
*
acpi_ut_strupr
(
char
*
src_string
);
...
...
include/acpi/amlcode.h
View file @
c232f2a1
...
...
@@ -170,6 +170,7 @@
#define AML_REVISION_OP (u16) 0x5b30
#define AML_DEBUG_OP (u16) 0x5b31
#define AML_FATAL_OP (u16) 0x5b32
#define AML_TIMER_OP (u16) 0x5b33
/* ACPI 3.0 */
#define AML_REGION_OP (u16) 0x5b80
#define AML_FIELD_OP (u16) 0x5b81
#define AML_DEVICE_OP (u16) 0x5b82
...
...
@@ -305,22 +306,24 @@
/* 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_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 */
#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_1R AML_HAS_ARGS | AML_HAS_RETVAL
/* Monadic2 */
#define AML_FLAGS_EXEC_1A_1T_0R AML_HAS_ARGS | AML_HAS_TARGET
...
...
@@ -338,17 +341,18 @@
* The opcode Type is used in a dispatch table, do not change
* without updating the table.
*/
#define AML_TYPE_EXEC_1A_0T_0R 0x00
/* Monadic1 */
#define AML_TYPE_EXEC_1A_0T_1R 0x01
/* Monadic2 */
#define AML_TYPE_EXEC_1A_1T_0R 0x02
#define AML_TYPE_EXEC_1A_1T_1R 0x03
/* monadic2_r */
#define AML_TYPE_EXEC_2A_0T_0R 0x04
/* Dyadic1 */
#define AML_TYPE_EXEC_2A_0T_1R 0x05
/* Dyadic2 */
#define AML_TYPE_EXEC_2A_1T_1R 0x06
/* dyadic2_r */
#define AML_TYPE_EXEC_2A_2T_1R 0x07
#define AML_TYPE_EXEC_3A_0T_0R 0x08
#define AML_TYPE_EXEC_3A_1T_1R 0x09
#define AML_TYPE_EXEC_6A_0T_1R 0x0A
#define AML_TYPE_EXEC_0A_0T_1R 0x00
#define AML_TYPE_EXEC_1A_0T_0R 0x01
/* Monadic1 */
#define AML_TYPE_EXEC_1A_0T_1R 0x02
/* Monadic2 */
#define AML_TYPE_EXEC_1A_1T_0R 0x03
#define AML_TYPE_EXEC_1A_1T_1R 0x04
/* monadic2_r */
#define AML_TYPE_EXEC_2A_0T_0R 0x05
/* Dyadic1 */
#define AML_TYPE_EXEC_2A_0T_1R 0x06
/* Dyadic2 */
#define AML_TYPE_EXEC_2A_1T_1R 0x07
/* dyadic2_r */
#define AML_TYPE_EXEC_2A_2T_1R 0x08
#define AML_TYPE_EXEC_3A_0T_0R 0x09
#define AML_TYPE_EXEC_3A_1T_1R 0x0A
#define AML_TYPE_EXEC_6A_0T_1R 0x0B
/* End of types used in dispatch table */
#define AML_TYPE_LITERAL 0x0B
...
...
include/acpi/amlresrc.h
View file @
c232f2a1
...
...
@@ -99,7 +99,7 @@ struct asl_resource_node
/*
* 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.
*/
#pragma pack(1)
...
...
@@ -297,7 +297,7 @@ struct asl_general_register_desc
#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
{
...
...
include/acpi/platform/acenv.h
View file @
c232f2a1
...
...
@@ -232,6 +232,7 @@
#define ACPI_STRCAT(d,s) (void) strcat((d), (s))
#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_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_MEMSET(d,s,n) (void) memset((d), (s), (acpi_size)(n))
...
...
@@ -295,6 +296,7 @@ typedef char *va_list;
#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_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_MEMSET(d,v,n) (void) acpi_ut_memset ((d), (v), (acpi_size)(n))
#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