Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
c232f2a1
Commit
c232f2a1
authored
Oct 22, 2004
by
Len Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge intel.com:/home/lenb/src/26-stable-acpica
into intel.com:/home/lenb/src/26-stable-dev
parents
7ad21148
2f294db8
Changes
52
Show whitespace changes
Inline
Side-by-side
Showing
52 changed files
with
1440 additions
and
1059 deletions
+1440
-1059
drivers/acpi/dispatcher/dsmthdat.c
drivers/acpi/dispatcher/dsmthdat.c
+2
-2
drivers/acpi/dispatcher/dsutils.c
drivers/acpi/dispatcher/dsutils.c
+1
-1
drivers/acpi/dispatcher/dswexec.c
drivers/acpi/dispatcher/dswexec.c
+28
-13
drivers/acpi/events/evgpe.c
drivers/acpi/events/evgpe.c
+2
-7
drivers/acpi/events/evgpeblk.c
drivers/acpi/events/evgpeblk.c
+1
-3
drivers/acpi/events/evxface.c
drivers/acpi/events/evxface.c
+45
-0
drivers/acpi/executer/exconvrt.c
drivers/acpi/executer/exconvrt.c
+168
-191
drivers/acpi/executer/exdump.c
drivers/acpi/executer/exdump.c
+89
-84
drivers/acpi/executer/exfldio.c
drivers/acpi/executer/exfldio.c
+1
-1
drivers/acpi/executer/exmisc.c
drivers/acpi/executer/exmisc.c
+295
-172
drivers/acpi/executer/exoparg1.c
drivers/acpi/executer/exoparg1.c
+144
-40
drivers/acpi/executer/exoparg2.c
drivers/acpi/executer/exoparg2.c
+49
-91
drivers/acpi/executer/exregion.c
drivers/acpi/executer/exregion.c
+1
-1
drivers/acpi/executer/exresop.c
drivers/acpi/executer/exresop.c
+9
-7
drivers/acpi/executer/exstore.c
drivers/acpi/executer/exstore.c
+26
-11
drivers/acpi/executer/exsystem.c
drivers/acpi/executer/exsystem.c
+2
-3
drivers/acpi/executer/exutils.c
drivers/acpi/executer/exutils.c
+8
-10
drivers/acpi/hardware/hwregs.c
drivers/acpi/hardware/hwregs.c
+24
-10
drivers/acpi/hardware/hwtimer.c
drivers/acpi/hardware/hwtimer.c
+8
-11
drivers/acpi/namespace/nsaccess.c
drivers/acpi/namespace/nsaccess.c
+9
-5
drivers/acpi/namespace/nsdump.c
drivers/acpi/namespace/nsdump.c
+32
-29
drivers/acpi/namespace/nsdumpdv.c
drivers/acpi/namespace/nsdumpdv.c
+6
-5
drivers/acpi/namespace/nseval.c
drivers/acpi/namespace/nseval.c
+37
-55
drivers/acpi/namespace/nsinit.c
drivers/acpi/namespace/nsinit.c
+14
-13
drivers/acpi/namespace/nsload.c
drivers/acpi/namespace/nsload.c
+6
-5
drivers/acpi/namespace/nsnames.c
drivers/acpi/namespace/nsnames.c
+7
-2
drivers/acpi/namespace/nssearch.c
drivers/acpi/namespace/nssearch.c
+26
-23
drivers/acpi/namespace/nsutils.c
drivers/acpi/namespace/nsutils.c
+27
-26
drivers/acpi/osl.c
drivers/acpi/osl.c
+25
-2
drivers/acpi/parser/psopcode.c
drivers/acpi/parser/psopcode.c
+15
-8
drivers/acpi/parser/psutils.c
drivers/acpi/parser/psutils.c
+10
-15
drivers/acpi/resources/rscalc.c
drivers/acpi/resources/rscalc.c
+47
-65
drivers/acpi/tables/tbget.c
drivers/acpi/tables/tbget.c
+3
-0
drivers/acpi/tables/tbxfroot.c
drivers/acpi/tables/tbxfroot.c
+22
-5
drivers/acpi/utilities/utalloc.c
drivers/acpi/utilities/utalloc.c
+11
-9
drivers/acpi/utilities/utdelete.c
drivers/acpi/utilities/utdelete.c
+7
-2
drivers/acpi/utilities/utglobal.c
drivers/acpi/utilities/utglobal.c
+1
-0
drivers/acpi/utilities/utmath.c
drivers/acpi/utilities/utmath.c
+22
-21
drivers/acpi/utilities/utmisc.c
drivers/acpi/utilities/utmisc.c
+41
-61
drivers/acpi/utilities/utobject.c
drivers/acpi/utilities/utobject.c
+57
-3
include/acpi/acconfig.h
include/acpi/acconfig.h
+1
-1
include/acpi/acglobal.h
include/acpi/acglobal.h
+1
-0
include/acpi/acinterp.h
include/acpi/acinterp.h
+27
-11
include/acpi/aclocal.h
include/acpi/aclocal.h
+1
-1
include/acpi/acobject.h
include/acpi/acobject.h
+4
-1
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+6
-3
include/acpi/acpixf.h
include/acpi/acpixf.h
+9
-0
include/acpi/actypes.h
include/acpi/actypes.h
+15
-2
include/acpi/acutils.h
include/acpi/acutils.h
+17
-3
include/acpi/amlcode.h
include/acpi/amlcode.h
+27
-23
include/acpi/amlresrc.h
include/acpi/amlresrc.h
+2
-2
include/acpi/platform/acenv.h
include/acpi/platform/acenv.h
+2
-0
No files found.
drivers/acpi/dispatcher/dsmthdat.c
View file @
c232f2a1
...
...
@@ -312,7 +312,7 @@ acpi_ds_method_data_set_value (
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,6 +60,7 @@
* Dispatch table for opcode classes
*/
static
ACPI_EXECUTE_OP
acpi_gbl_op_type_dispatch
[]
=
{
acpi_ex_opcode_0A_0T_1R
,
acpi_ex_opcode_1A_0T_0R
,
acpi_ex_opcode_1A_0T_1R
,
acpi_ex_opcode_1A_1T_0R
,
...
...
@@ -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 */
for
(
i
=
0
,
j
=
((
length
*
2
)
-
1
);
i
<
(
length
*
2
);
i
++
,
j
--
)
{
hex_length
=
ACPI_MUL_2
(
data_width
);
/* 2 ascii hex chars per data byte */
hex_digit
=
acpi_ut_hex_to_ascii_char
(
integer
,
(
j
*
4
));
if
(
hex_digit
!=
ACPI_ASCII_ZERO
)
{
leading_zero
=
FALSE
;
}
for
(
i
=
0
,
j
=
(
hex_length
-
1
);
i
<
hex_length
;
i
++
,
j
--
)
{
/* Get one hex digit, most significant digits first */
if
(
!
leading_zero
)
{
string
[
k
]
=
(
u8
)
hex_digit
;
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
);
}
...
...
@@ -403,9 +382,7 @@ acpi_ex_convert_to_ascii (
* PARAMETERS: obj_desc - Object to be converted. Must be an
* 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
)
{
/* No conversion necessary */
*
result_desc
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
else
{
/* Must copy the string first and then truncate it */
return_ACPI_STATUS
(
AE_NOT_IMPLEMENTED
);
}
case
ACPI_TYPE_INTEGER
:
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
=
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
);
}
new_buf
=
return_desc
->
buffer
.
pointer
;
/* Convert */
/* Convert
integer to string
*/
i
=
acpi_ex_convert_to_ascii
(
obj_desc
->
integer
.
value
,
base
,
new_buf
,
sizeof
(
acpi_integer
));
string_length
=
acpi_ex_convert_to_ascii
(
obj_desc
->
integer
.
value
,
base
,
new_buf
,
acpi_gbl_integer_byte_width
);
/* Null terminate at the correct place */
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
)
{
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
}
/*lint -fallthrough */
case
ACPI_EXPLICIT_CONVERT_HEX
:
/* Used by to_hex_string operator */
/*
* Create a new string object
* From ACPI: "If Data is a buffer, it is converted to a string of
* hexadecimal values separated by commas."
*/
ret_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
ret_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
string_length
+=
(
obj_desc
->
buffer
.
length
*
3
);
if
(
string_length
>
ACPI_MAX_STRING_CONVERSION
)
/* ACPI limit */
{
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
/* String length is the lesser of the Max or the actual length
*/
/* Create a new string object and string buffer
*/
if
(
max_length
<
string_length
)
{
string_length
=
max_length
;
return_desc
=
acpi_ut_create_string_object
((
acpi_size
)
string_length
-
1
);
if
(
!
return_desc
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
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
);
new_buf
=
return_desc
->
buffer
.
pointer
;
/*
* 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
;
return_desc
->
string
.
length
=
ACPI_STRLEN
(
return_desc
->
string
.
pointer
);
break
;
default:
return_ACPI_STATUS
(
AE_TYPE
);
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
break
;
/*
* 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
);
}
default:
return_ACPI_STATUS
(
AE_TYPE
);
}
*
result_desc
=
ret_desc
;
*
result_desc
=
ret
urn
_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)
/*****************************************************************************
...
...
@@ -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
;
...
...
@@ -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
;
...
...
@@ -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,13 +563,16 @@ 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
"
,
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
;
}
...
...
@@ -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
"
);
}
...
...
@@ -658,7 +662,7 @@ acpi_ex_dump_object_descriptor (
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_integer
(
"acqui
re_depth"
,
obj_desc
->
mutex
.
acquisition_depth
);
acpi_ex_out_pointer
(
"Semaphore"
,
obj_desc
->
mutex
.
semaphore
);
break
;
...
...
@@ -708,13 +712,13 @@ acpi_ex_dump_object_descriptor (
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
(
"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_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
))
{
...
...
@@ -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 */
new_buf
=
return_desc
->
string
.
pointer
;
ACPI_STRCPY
(
new_buf
,
obj_desc1
->
string
.
pointer
);
ACPI_STRCPY
(
new_buf
+
obj_desc1
->
string
.
length
,
obj_desc2
->
string
.
pointer
);
/* Complete the String object initialization */
/* Concatenate 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
);
}
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,17 +407,19 @@ 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_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,31 +498,35 @@ 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
;
...
...
@@ -463,7 +536,8 @@ acpi_ex_opcode_1A_1T_1R (
/*
* These are two obsolete opcodes
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ERROR
,
"%s is obsolete and not implemented
\n
"
,
acpi_ps_get_opcode_name
(
walk_state
->
opcode
)));
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
=
acpi_ut_create_internal_object
(
ACPI_TYPE_INTEGER
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/*
* Since we are expecting a Reference operand, it can be either a
* NS Node or an internal object.
*/
return
_desc
=
operand
[
0
];
if
(
ACPI_GET_DESCRIPTOR_TYPE
(
operand
[
0
]
)
==
ACPI_DESC_TYPE_OPERAND
)
{
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
;
}
/* Create the internal return object */
return_desc
=
acpi_ut_create_internal_object
(
ACPI_TYPE_STRING
);
if
(
!
return_desc
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/* Allocate a new string
buffer (Length + 1 for null terminator)
*/
/* Allocate a new string
object
*/
return_desc
->
string
.
pointer
=
ACPI_MEM_CALLOCATE
(
length
+
1
);
if
(
!
return_desc
->
string
.
pointer
)
{
return_desc
=
acpi_ut_create_string_object
(
length
);
if
(
!
return_desc
)
{
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
);
/* Set the string length */
/* Copy the raw buffer data with no transform. NULL terminated already. */
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
;
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
;
}
logical_result
=
acpi_ex_do_logical_op
(
walk_state
->
opcode
,
operand
[
0
],
operand
[
1
]);
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,22 +183,36 @@ 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
)));
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
:
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
"
,
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
);
...
...
@@ -206,14 +221,14 @@ acpi_ex_store (
case
ACPI_TYPE_STRING
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Length 0x%.2X,
\"
%s
\"\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
\"
%s
\"\n
"
,
source_desc
->
string
.
length
,
source_desc
->
string
.
pointer
));
break
;
case
ACPI_TYPE_PACKAGE
:
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
Size 0x%.2X
Elements Ptr - %p
\n
"
,
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DEBUG_OBJECT
,
"
[0x%.2X]
Elements Ptr - %p
\n
"
,
source_desc
->
package
.
count
,
source_desc
->
package
.
elements
));
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
:
...
...
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,8 +227,7 @@ 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
,
obj_desc
->
processor
.
proc_id
,
obj_desc
->
processor
.
length
,
(
char
*
)
obj_desc
->
processor
.
address
);
break
;
...
...
@@ -242,8 +242,7 @@ acpi_ns_dump_one_object (
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
);
obj_desc
->
method
.
aml_length
,
obj_desc
->
method
.
aml_start
);
break
;
...
...
@@ -298,7 +297,8 @@ 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
),
...
...
@@ -353,7 +353,8 @@ acpi_ns_dump_one_object (
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:
...
...
@@ -471,7 +472,8 @@ 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
{
...
...
@@ -484,7 +486,8 @@ acpi_ns_dump_one_object (
default:
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_os_printf
(
"(String or Buffer ptr - not an object descriptor) [%s]
\n
"
,
acpi_ut_get_descriptor_name
(
obj_desc
));
bytes_to_dump
=
16
;
break
;
...
...
drivers/acpi/namespace/nsdumpdv.c
View file @
c232f2a1
...
...
@@ -91,9 +91,9 @@ 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
),
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
)));
...
...
@@ -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).
*
* 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.)
*
* 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.
* 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 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.
*
* 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,8 +201,8 @@ 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
"
,
...
...
@@ -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
)
{
/*
...
...
@@ -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
;
...
...
@@ -1040,7 +1041,7 @@ 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
* 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,6 +87,21 @@ acpi_tb_find_table (
return_ACPI_STATUS
(
AE_AML_STRING_LIMIT
);
}
if
(
!
ACPI_STRNCMP
(
signature
,
DSDT_SIG
,
ACPI_NAME_SIZE
))
{
/*
* The DSDT pointer is contained in the FADT, not the RSDT.
* This code should suffice, because the only code that would perform
* a "find" on the DSDT is the data_table_region() AML opcode -- in
* which case, the DSDT is guaranteed to be already loaded.
* If this becomes insufficient, the FADT will have to be found first.
*/
if
(
!
acpi_gbl_DSDT
)
{
return_ACPI_STATUS
(
AE_NO_ACPI_TABLES
);
}
table
=
acpi_gbl_DSDT
;
}
else
{
/* Find the table */
status
=
acpi_get_firmware_table
(
signature
,
1
,
...
...
@@ -94,6 +109,7 @@ acpi_tb_find_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,7 +668,8 @@ acpi_ut_remove_reference (
return_VOID
;
}
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Refs=%X
\n
"
,
ACPI_DEBUG_PRINT
((
ACPI_DB_ALLOCATIONS
,
"Obj %p Current Refs=%X [To Be Decremented]
\n
"
,
object
,
object
->
common
.
reference_count
));
/*
...
...
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,127 +372,108 @@ 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'
)
{
if
(
(
*
string
==
'0'
)
&&
(
ACPI_TOLOWER
(
*
(
++
string
))
==
'x'
)
)
{
base
=
16
;
++
string
;
}
else
{
base
=
8
;
}
}
else
{
base
=
10
;
}
}
/*
* For
octal and hexadecimal bases
, skip over the leading
* For
hexadecimal base
, skip over the leading
* 0 or 0x, if they are present.
*/
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
;
/* Base was set/validated above */
case
10
:
status
=
AE_BAD_DECIMAL_CONSTANT
;
break
;
case
16
:
status
=
AE_BAD_HEX_CONSTANT
;
break
;
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