Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
6d63e354
Commit
6d63e354
authored
Aug 07, 2015
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'acpica' into acpi-trace
parents
74d33293
40913fe6
Changes
45
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
45 changed files
with
1491 additions
and
700 deletions
+1491
-700
drivers/acpi/acpica/Makefile
drivers/acpi/acpica/Makefile
+2
-0
drivers/acpi/acpica/acdebug.h
drivers/acpi/acpica/acdebug.h
+19
-0
drivers/acpi/acpica/acdispat.h
drivers/acpi/acpica/acdispat.h
+8
-0
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/acglobal.h
+1
-2
drivers/acpi/acpica/acinterp.h
drivers/acpi/acpica/acinterp.h
+22
-0
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/aclocal.h
+9
-2
drivers/acpi/acpica/acmacros.h
drivers/acpi/acpica/acmacros.h
+9
-0
drivers/acpi/acpica/acnamesp.h
drivers/acpi/acpica/acnamesp.h
+8
-5
drivers/acpi/acpica/acobject.h
drivers/acpi/acpica/acobject.h
+1
-0
drivers/acpi/acpica/acparser.h
drivers/acpi/acpica/acparser.h
+2
-2
drivers/acpi/acpica/acstruct.h
drivers/acpi/acpica/acstruct.h
+1
-1
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/acutils.h
+11
-12
drivers/acpi/acpica/dsargs.c
drivers/acpi/acpica/dsargs.c
+2
-2
drivers/acpi/acpica/dsdebug.c
drivers/acpi/acpica/dsdebug.c
+231
-0
drivers/acpi/acpica/dsmethod.c
drivers/acpi/acpica/dsmethod.c
+21
-14
drivers/acpi/acpica/dswload.c
drivers/acpi/acpica/dswload.c
+1
-1
drivers/acpi/acpica/dswload2.c
drivers/acpi/acpica/dswload2.c
+1
-1
drivers/acpi/acpica/excreate.c
drivers/acpi/acpica/excreate.c
+1
-0
drivers/acpi/acpica/exdebug.c
drivers/acpi/acpica/exdebug.c
+324
-0
drivers/acpi/acpica/exdump.c
drivers/acpi/acpica/exdump.c
+2
-3
drivers/acpi/acpica/nsnames.c
drivers/acpi/acpica/nsnames.c
+156
-119
drivers/acpi/acpica/nsparse.c
drivers/acpi/acpica/nsparse.c
+20
-22
drivers/acpi/acpica/nsutils.c
drivers/acpi/acpica/nsutils.c
+1
-1
drivers/acpi/acpica/nsxfname.c
drivers/acpi/acpica/nsxfname.c
+6
-2
drivers/acpi/acpica/psargs.c
drivers/acpi/acpica/psargs.c
+14
-12
drivers/acpi/acpica/psloop.c
drivers/acpi/acpica/psloop.c
+3
-15
drivers/acpi/acpica/psobject.c
drivers/acpi/acpica/psobject.c
+10
-7
drivers/acpi/acpica/psparse.c
drivers/acpi/acpica/psparse.c
+10
-4
drivers/acpi/acpica/psutils.c
drivers/acpi/acpica/psutils.c
+5
-3
drivers/acpi/acpica/psxface.c
drivers/acpi/acpica/psxface.c
+9
-114
drivers/acpi/acpica/rscreate.c
drivers/acpi/acpica/rscreate.c
+2
-1
drivers/acpi/acpica/utdebug.c
drivers/acpi/acpica/utdebug.c
+30
-1
drivers/acpi/acpica/utdelete.c
drivers/acpi/acpica/utdelete.c
+3
-0
drivers/acpi/acpica/utinit.c
drivers/acpi/acpica/utinit.c
+0
-2
drivers/acpi/acpica/utmisc.c
drivers/acpi/acpica/utmisc.c
+1
-1
drivers/acpi/acpica/utnonansi.c
drivers/acpi/acpica/utnonansi.c
+380
-0
drivers/acpi/acpica/utstring.c
drivers/acpi/acpica/utstring.c
+0
-342
include/acpi/acoutput.h
include/acpi/acoutput.h
+20
-1
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+6
-0
include/acpi/acpixf.h
include/acpi/acpixf.h
+10
-3
include/acpi/actbl2.h
include/acpi/actbl2.h
+13
-4
include/acpi/actypes.h
include/acpi/actypes.h
+10
-1
include/acpi/platform/acenvex.h
include/acpi/platform/acenvex.h
+3
-0
include/acpi/platform/acmsvcex.h
include/acpi/platform/acmsvcex.h
+54
-0
include/acpi/platform/acwinex.h
include/acpi/platform/acwinex.h
+49
-0
No files found.
drivers/acpi/acpica/Makefile
View file @
6d63e354
...
...
@@ -11,6 +11,7 @@ obj-y += acpi.o
acpi-y
:=
\
dsargs.o
\
dscontrol.o
\
dsdebug.o
\
dsfield.o
\
dsinit.o
\
dsmethod.o
\
...
...
@@ -164,6 +165,7 @@ acpi-y += \
utmath.o
\
utmisc.o
\
utmutex.o
\
utnonansi.o
\
utobject.o
\
utosi.o
\
utownerid.o
\
...
...
drivers/acpi/acpica/acdebug.h
View file @
6d63e354
...
...
@@ -102,6 +102,8 @@ void acpi_db_display_interfaces(char *action_arg, char *interface_name_arg);
acpi_status
acpi_db_sleep
(
char
*
object_arg
);
void
acpi_db_trace
(
char
*
enable_arg
,
char
*
method_arg
,
char
*
once_arg
);
void
acpi_db_display_locks
(
void
);
void
acpi_db_display_resources
(
char
*
object_arg
);
...
...
@@ -261,6 +263,23 @@ acpi_status acpi_db_user_commands(char prompt, union acpi_parse_object *op);
char
*
acpi_db_get_next_token
(
char
*
string
,
char
**
next
,
acpi_object_type
*
return_type
);
/*
* dbobject
*/
void
acpi_db_decode_internal_object
(
union
acpi_operand_object
*
obj_desc
);
void
acpi_db_display_internal_object
(
union
acpi_operand_object
*
obj_desc
,
struct
acpi_walk_state
*
walk_state
);
void
acpi_db_decode_arguments
(
struct
acpi_walk_state
*
walk_state
);
void
acpi_db_decode_locals
(
struct
acpi_walk_state
*
walk_state
);
void
acpi_db_dump_method_info
(
acpi_status
status
,
struct
acpi_walk_state
*
walk_state
);
/*
* dbstats - Generation and display of ACPI table statistics
*/
...
...
drivers/acpi/acpica/acdispat.h
View file @
6d63e354
...
...
@@ -354,4 +354,12 @@ acpi_status
acpi_ds_result_push
(
union
acpi_operand_object
*
object
,
struct
acpi_walk_state
*
walk_state
);
/*
* dsdebug - parser debugging routines
*/
void
acpi_ds_dump_method_stack
(
acpi_status
status
,
struct
acpi_walk_state
*
walk_state
,
union
acpi_parse_object
*
op
);
#endif
/* _ACDISPAT_H_ */
drivers/acpi/acpica/acglobal.h
View file @
6d63e354
...
...
@@ -290,8 +290,6 @@ ACPI_GLOBAL(u32, acpi_fixed_event_count[ACPI_NUM_FIXED_EVENTS]);
ACPI_GLOBAL
(
u32
,
acpi_gbl_original_dbg_level
);
ACPI_GLOBAL
(
u32
,
acpi_gbl_original_dbg_layer
);
ACPI_GLOBAL
(
u32
,
acpi_gbl_trace_dbg_level
);
ACPI_GLOBAL
(
u32
,
acpi_gbl_trace_dbg_layer
);
/*****************************************************************************
*
...
...
@@ -309,6 +307,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_no_resource_disassembly, FALSE);
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_ignore_noop_operator
,
FALSE
);
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_cstyle_disassembly
,
TRUE
);
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_force_aml_disassembly
,
FALSE
);
ACPI_INIT_GLOBAL
(
union
acpi_parse_object
*
,
acpi_gbl_previous_op
,
NULL
);
ACPI_GLOBAL
(
u8
,
acpi_gbl_db_opt_disasm
);
ACPI_GLOBAL
(
u8
,
acpi_gbl_db_opt_verbose
);
...
...
drivers/acpi/acpica/acinterp.h
View file @
6d63e354
...
...
@@ -131,6 +131,28 @@ void
acpi_ex_do_debug_object
(
union
acpi_operand_object
*
source_desc
,
u32
level
,
u32
index
);
void
acpi_ex_start_trace_method
(
struct
acpi_namespace_node
*
method_node
,
union
acpi_operand_object
*
obj_desc
,
struct
acpi_walk_state
*
walk_state
);
void
acpi_ex_stop_trace_method
(
struct
acpi_namespace_node
*
method_node
,
union
acpi_operand_object
*
obj_desc
,
struct
acpi_walk_state
*
walk_state
);
void
acpi_ex_start_trace_opcode
(
union
acpi_parse_object
*
op
,
struct
acpi_walk_state
*
walk_state
);
void
acpi_ex_stop_trace_opcode
(
union
acpi_parse_object
*
op
,
struct
acpi_walk_state
*
walk_state
);
void
acpi_ex_trace_point
(
acpi_trace_event_type
type
,
u8
begin
,
u8
*
aml
,
char
*
pathname
);
/*
* exfield - ACPI AML (p-code) execution - field manipulation
*/
...
...
drivers/acpi/acpica/aclocal.h
View file @
6d63e354
...
...
@@ -174,8 +174,12 @@ struct acpi_namespace_node {
*/
#ifdef ACPI_LARGE_NAMESPACE_NODE
union
acpi_parse_object
*
op
;
void
*
method_locals
;
void
*
method_args
;
u32
value
;
u32
length
;
u8
arg_count
;
#endif
};
...
...
@@ -715,7 +719,7 @@ union acpi_parse_value {
union
acpi_parse_object
*
arg
;
/* arguments and contained ops */
};
#if
def ACPI_DISASSEMBLER
#if
defined(ACPI_DISASSEMBLER) || defined(ACPI_DEBUG_OUTPUT)
#define ACPI_DISASM_ONLY_MEMBERS(a) a;
#else
#define ACPI_DISASM_ONLY_MEMBERS(a)
...
...
@@ -726,7 +730,7 @@ union acpi_parse_value {
u8 descriptor_type;
/* To differentiate various internal objs */
\
u8 flags;
/* Type of Op */
\
u16 aml_opcode;
/* AML opcode */
\
u
32 aml_offset;
/* Offset
of declaration in AML */
\
u
8 *aml;
/* Address
of declaration in AML */
\
union acpi_parse_object *next;
/* Next op */
\
struct acpi_namespace_node *node;
/* For use by interpreter */
\
union acpi_parse_value value;
/* Value or args associated with the opcode */
\
...
...
@@ -1103,6 +1107,9 @@ struct acpi_db_method_info {
* Index of current thread inside all them created.
*/
char
init_args
;
#ifdef ACPI_DEBUGGER
acpi_object_type
arg_types
[
4
];
#endif
char
*
arguments
[
4
];
char
num_threads_str
[
11
];
char
id_of_thread_str
[
11
];
...
...
drivers/acpi/acpica/acmacros.h
View file @
6d63e354
...
...
@@ -220,6 +220,15 @@
#define ACPI_MUL_32(a) _ACPI_MUL(a, 5)
#define ACPI_MOD_32(a) _ACPI_MOD(a, 32)
/* Test for ASCII character */
#define ACPI_IS_ASCII(c) ((c) < 0x80)
/* Signed integers */
#define ACPI_SIGN_POSITIVE 0
#define ACPI_SIGN_NEGATIVE 1
/*
* Rounding macros (Power of two boundaries only)
*/
...
...
drivers/acpi/acpica/acnamesp.h
View file @
6d63e354
...
...
@@ -272,17 +272,20 @@ acpi_ns_check_package(struct acpi_evaluate_info *info,
*/
u32
acpi_ns_opens_scope
(
acpi_object_type
type
);
acpi_status
acpi_ns_build_external_path
(
struct
acpi_namespace_node
*
node
,
acpi_size
size
,
char
*
name_buffer
);
char
*
acpi_ns_get_external_pathname
(
struct
acpi_namespace_node
*
node
);
u32
acpi_ns_build_normalized_path
(
struct
acpi_namespace_node
*
node
,
char
*
full_path
,
u32
path_size
,
u8
no_trailing
);
char
*
acpi_ns_get_normalized_pathname
(
struct
acpi_namespace_node
*
node
,
u8
no_trailing
);
char
*
acpi_ns_name_of_current_scope
(
struct
acpi_walk_state
*
walk_state
);
acpi_status
acpi_ns_handle_to_pathname
(
acpi_handle
target_handle
,
struct
acpi_buffer
*
buffer
);
struct
acpi_buffer
*
buffer
,
u8
no_trailing
);
u8
acpi_ns_pattern_match
(
struct
acpi_namespace_node
*
obj_node
,
char
*
search_for
);
...
...
drivers/acpi/acpica/acobject.h
View file @
6d63e354
...
...
@@ -176,6 +176,7 @@ struct acpi_object_method {
u8
param_count
;
u8
sync_level
;
union
acpi_operand_object
*
mutex
;
union
acpi_operand_object
*
node
;
u8
*
aml_start
;
union
{
acpi_internal_method
implementation
;
...
...
drivers/acpi/acpica/acparser.h
View file @
6d63e354
...
...
@@ -225,11 +225,11 @@ void acpi_ps_delete_parse_tree(union acpi_parse_object *root);
/*
* psutils - parser utilities
*/
union
acpi_parse_object
*
acpi_ps_create_scope_op
(
void
);
union
acpi_parse_object
*
acpi_ps_create_scope_op
(
u8
*
aml
);
void
acpi_ps_init_op
(
union
acpi_parse_object
*
op
,
u16
opcode
);
union
acpi_parse_object
*
acpi_ps_alloc_op
(
u16
opcode
);
union
acpi_parse_object
*
acpi_ps_alloc_op
(
u16
opcode
,
u8
*
aml
);
void
acpi_ps_free_op
(
union
acpi_parse_object
*
op
);
...
...
drivers/acpi/acpica/acstruct.h
View file @
6d63e354
...
...
@@ -85,7 +85,7 @@ struct acpi_walk_state {
u8
namespace_override
;
/* Override existing objects */
u8
result_size
;
/* Total elements for the result stack */
u8
result_count
;
/* Current number of occupied elements of result stack */
u
32
aml_offset
;
u
8
*
aml
;
u32
arg_types
;
u32
method_breakpoint
;
/* For single stepping */
u32
user_breakpoint
;
/* User AML breakpoint */
...
...
drivers/acpi/acpica/acutils.h
View file @
6d63e354
...
...
@@ -166,6 +166,17 @@ struct acpi_pkg_info {
#define DB_DWORD_DISPLAY 4
#define DB_QWORD_DISPLAY 8
/*
* utnonansi - Non-ANSI C library functions
*/
void
acpi_ut_strupr
(
char
*
src_string
);
void
acpi_ut_strlwr
(
char
*
src_string
);
int
acpi_ut_stricmp
(
char
*
string1
,
char
*
string2
);
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
base
,
u64
*
ret_integer
);
/*
* utglobal - Global data structures and procedures
*/
...
...
@@ -205,8 +216,6 @@ acpi_status acpi_ut_hardware_initialize(void);
void
acpi_ut_subsystem_shutdown
(
void
);
#define ACPI_IS_ASCII(c) ((c) < 0x80)
/*
* utcopy - Object construction and conversion interfaces
*/
...
...
@@ -567,16 +576,6 @@ acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc, u8 **end_tag);
/*
* utstring - String and character utilities
*/
void
acpi_ut_strupr
(
char
*
src_string
);
#ifdef ACPI_ASL_COMPILER
void
acpi_ut_strlwr
(
char
*
src_string
);
int
acpi_ut_stricmp
(
char
*
string1
,
char
*
string2
);
#endif
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
base
,
u64
*
ret_integer
);
void
acpi_ut_print_string
(
char
*
string
,
u16
max_length
);
#if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP
...
...
drivers/acpi/acpica/dsargs.c
View file @
6d63e354
...
...
@@ -86,7 +86,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
/* Allocate a new parser op to be the root of the parsed tree */
op
=
acpi_ps_alloc_op
(
AML_INT_EVAL_SUBTREE_OP
);
op
=
acpi_ps_alloc_op
(
AML_INT_EVAL_SUBTREE_OP
,
aml_start
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -129,7 +129,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,
/* Evaluate the deferred arguments */
op
=
acpi_ps_alloc_op
(
AML_INT_EVAL_SUBTREE_OP
);
op
=
acpi_ps_alloc_op
(
AML_INT_EVAL_SUBTREE_OP
,
aml_start
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/acpica/dsdebug.c
0 → 100644
View file @
6d63e354
/******************************************************************************
*
* Module Name: dsdebug - Parser/Interpreter interface - debugging
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2015, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#include <acpi/acpi.h>
#include "accommon.h"
#include "acdispat.h"
#include "acnamesp.h"
#ifdef ACPI_DISASSEMBLER
#include "acdisasm.h"
#endif
#include "acinterp.h"
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME
(
"dsdebug"
)
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/* Local prototypes */
static
void
acpi_ds_print_node_pathname
(
struct
acpi_namespace_node
*
node
,
const
char
*
message
);
/*******************************************************************************
*
* FUNCTION: acpi_ds_print_node_pathname
*
* PARAMETERS: node - Object
* message - Prefix message
*
* DESCRIPTION: Print an object's full namespace pathname
* Manages allocation/freeing of a pathname buffer
*
******************************************************************************/
static
void
acpi_ds_print_node_pathname
(
struct
acpi_namespace_node
*
node
,
const
char
*
message
)
{
struct
acpi_buffer
buffer
;
acpi_status
status
;
ACPI_FUNCTION_TRACE
(
ds_print_node_pathname
);
if
(
!
node
)
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"[NULL NAME]"
));
return_VOID
;
}
/* Convert handle to full pathname and print it (with supplied message) */
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
status
=
acpi_ns_handle_to_pathname
(
node
,
&
buffer
,
FALSE
);
if
(
ACPI_SUCCESS
(
status
))
{
if
(
message
)
{
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"%s "
,
message
));
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"[%s] (Node %p)"
,
(
char
*
)
buffer
.
pointer
,
node
));
ACPI_FREE
(
buffer
.
pointer
);
}
return_VOID
;
}
/*******************************************************************************
*
* FUNCTION: acpi_ds_dump_method_stack
*
* PARAMETERS: status - Method execution status
* walk_state - Current state of the parse tree walk
* op - Executing parse op
*
* RETURN: None
*
* DESCRIPTION: Called when a method has been aborted because of an error.
* Dumps the method execution stack.
*
******************************************************************************/
void
acpi_ds_dump_method_stack
(
acpi_status
status
,
struct
acpi_walk_state
*
walk_state
,
union
acpi_parse_object
*
op
)
{
union
acpi_parse_object
*
next
;
struct
acpi_thread_state
*
thread
;
struct
acpi_walk_state
*
next_walk_state
;
struct
acpi_namespace_node
*
previous_method
=
NULL
;
union
acpi_operand_object
*
method_desc
;
ACPI_FUNCTION_TRACE
(
ds_dump_method_stack
);
/* Ignore control codes, they are not errors */
if
((
status
&
AE_CODE_MASK
)
==
AE_CODE_CONTROL
)
{
return_VOID
;
}
/* We may be executing a deferred opcode */
if
(
walk_state
->
deferred_node
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
"Executing subtree for Buffer/Package/Region
\n
"
));
return_VOID
;
}
/*
* If there is no Thread, we are not actually executing a method.
* This can happen when the iASL compiler calls the interpreter
* to perform constant folding.
*/
thread
=
walk_state
->
thread
;
if
(
!
thread
)
{
return_VOID
;
}
/* Display exception and method name */
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
"
\n
**** Exception %s during execution of method "
,
acpi_format_exception
(
status
)));
acpi_ds_print_node_pathname
(
walk_state
->
method_node
,
NULL
);
/* Display stack of executing methods */
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"
\n\n
Method Execution Stack:
\n
"
));
next_walk_state
=
thread
->
walk_state_list
;
/* Walk list of linked walk states */
while
(
next_walk_state
)
{
method_desc
=
next_walk_state
->
method_desc
;
if
(
method_desc
)
{
acpi_ex_stop_trace_method
((
struct
acpi_namespace_node
*
)
method_desc
->
method
.
node
,
method_desc
,
walk_state
);
}
ACPI_DEBUG_PRINT
((
ACPI_DB_DISPATCH
,
" Method [%4.4s] executing: "
,
acpi_ut_get_node_name
(
next_walk_state
->
method_node
)));
/* First method is the currently executing method */
if
(
next_walk_state
==
walk_state
)
{
if
(
op
)
{
/* Display currently executing ASL statement */
next
=
op
->
common
.
next
;
op
->
common
.
next
=
NULL
;
#ifdef ACPI_DISASSEMBLER
acpi_dm_disassemble
(
next_walk_state
,
op
,
ACPI_UINT32_MAX
);
#endif
op
->
common
.
next
=
next
;
}
}
else
{
/*
* This method has called another method
* NOTE: the method call parse subtree is already deleted at this
* point, so we cannot disassemble the method invocation.
*/
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"Call to method "
));
acpi_ds_print_node_pathname
(
previous_method
,
NULL
);
}
previous_method
=
next_walk_state
->
method_node
;
next_walk_state
=
next_walk_state
->
next
;
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_DISPATCH
,
"
\n
"
));
}
return_VOID
;
}
#else
void
acpi_ds_dump_method_stack
(
acpi_status
status
,
struct
acpi_walk_state
*
walk_state
,
union
acpi_parse_object
*
op
)
{
return
;
}
#endif
drivers/acpi/acpica/dsmethod.c
View file @
6d63e354
...
...
@@ -46,11 +46,9 @@
#include "acdispat.h"
#include "acinterp.h"
#include "acnamesp.h"
#ifdef ACPI_DISASSEMBLER
#include "acdisasm.h"
#endif
#include "acparser.h"
#include "amlcode.h"
#include "acdebug.h"
#define _COMPONENT ACPI_DISPATCHER
ACPI_MODULE_NAME
(
"dsmethod"
)
...
...
@@ -103,7 +101,7 @@ acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
/* Create/Init a root op for the method parse tree */
op
=
acpi_ps_alloc_op
(
AML_METHOD_OP
);
op
=
acpi_ps_alloc_op
(
AML_METHOD_OP
,
obj_desc
->
method
.
aml_start
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -205,7 +203,7 @@ acpi_ds_detect_named_opcodes(struct acpi_walk_state *walk_state,
* RETURN: Status
*
* DESCRIPTION: Called on method error. Invoke the global exception handler if
* present, dump the method data if the d
isassembl
er is configured
* present, dump the method data if the d
ebugg
er is configured
*
* Note: Allows the exception handler to change the status code
*
...
...
@@ -214,6 +212,8 @@ acpi_ds_detect_named_opcodes(struct acpi_walk_state *walk_state,
acpi_status
acpi_ds_method_error
(
acpi_status
status
,
struct
acpi_walk_state
*
walk_state
)
{
u32
aml_offset
;
ACPI_FUNCTION_ENTRY
();
/* Ignore AE_OK and control exception codes */
...
...
@@ -234,26 +234,30 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state * walk_state)
* Handler can map the exception code to anything it wants, including
* AE_OK, in which case the executing method will not be aborted.
*/
aml_offset
=
(
u32
)
ACPI_PTR_DIFF
(
walk_state
->
aml
,
walk_state
->
parser_state
.
aml_start
);
status
=
acpi_gbl_exception_handler
(
status
,
walk_state
->
method_node
?
walk_state
->
method_node
->
name
.
integer
:
0
,
walk_state
->
opcode
,
walk_state
->
aml_offset
,
NULL
);
aml_offset
,
NULL
);
acpi_ex_enter_interpreter
();
}
acpi_ds_clear_implicit_return
(
walk_state
);
#ifdef ACPI_DISASSEMBLER
if
(
ACPI_FAILURE
(
status
))
{
acpi_ds_dump_method_stack
(
status
,
walk_state
,
walk_state
->
op
);
/* Display method locals/args if d
isassembl
er is present */
/* Display method locals/args if d
ebugg
er is present */
acpi_dm_dump_method_info
(
status
,
walk_state
,
walk_state
->
op
);
}
#ifdef ACPI_DEBUGGER
acpi_db_dump_method_info
(
status
,
walk_state
);
#endif
}
return
(
status
);
}
...
...
@@ -328,6 +332,8 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node,
return_ACPI_STATUS
(
AE_NULL_ENTRY
);
}
acpi_ex_start_trace_method
(
method_node
,
obj_desc
,
walk_state
);
/* Prevent wraparound of thread count */
if
(
obj_desc
->
method
.
thread_count
==
ACPI_UINT8_MAX
)
{
...
...
@@ -574,9 +580,7 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread,
/* On error, we must terminate the method properly */
acpi_ds_terminate_control_method
(
obj_desc
,
next_walk_state
);
if
(
next_walk_state
)
{
acpi_ds_delete_walk_state
(
next_walk_state
);
}
return_ACPI_STATUS
(
status
);
}
...
...
@@ -826,5 +830,8 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
}
}
acpi_ex_stop_trace_method
((
struct
acpi_namespace_node
*
)
method_desc
->
method
.
node
,
method_desc
,
walk_state
);
return_VOID
;
}
drivers/acpi/acpica/dswload.c
View file @
6d63e354
...
...
@@ -388,7 +388,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state * walk_state,
/* Create a new op */
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
);
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
,
walk_state
->
aml
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/acpica/dswload2.c
View file @
6d63e354
...
...
@@ -335,7 +335,7 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
/* Create a new op */
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
);
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
,
walk_state
->
aml
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/acpica/excreate.c
View file @
6d63e354
...
...
@@ -486,6 +486,7 @@ acpi_ex_create_method(u8 * aml_start,
obj_desc
->
method
.
aml_start
=
aml_start
;
obj_desc
->
method
.
aml_length
=
aml_length
;
obj_desc
->
method
.
node
=
operand
[
0
];
/*
* Disassemble the method flags. Split off the arg_count, Serialized
...
...
drivers/acpi/acpica/exdebug.c
View file @
6d63e354
...
...
@@ -43,11 +43,21 @@
#include <acpi/acpi.h>
#include "accommon.h"
#include "acnamesp.h"
#include "acinterp.h"
#include "acparser.h"
#define _COMPONENT ACPI_EXECUTER
ACPI_MODULE_NAME
(
"exdebug"
)
static
union
acpi_operand_object
*
acpi_gbl_trace_method_object
=
NULL
;
/* Local prototypes */
#ifdef ACPI_DEBUG_OUTPUT
static
const
char
*
acpi_ex_get_trace_event_name
(
acpi_trace_event_type
type
);
#endif
#ifndef ACPI_NO_ERROR_MESSAGES
/*******************************************************************************
*
...
...
@@ -70,6 +80,7 @@ ACPI_MODULE_NAME("exdebug")
* enabled if necessary.
*
******************************************************************************/
void
acpi_ex_do_debug_object
(
union
acpi_operand_object
*
source_desc
,
u32
level
,
u32
index
)
...
...
@@ -308,3 +319,316 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc,
return_VOID
;
}
#endif
/*******************************************************************************
*
* FUNCTION: acpi_ex_interpreter_trace_enabled
*
* PARAMETERS: name - Whether method name should be matched,
* this should be checked before starting
* the tracer
*
* RETURN: TRUE if interpreter trace is enabled.
*
* DESCRIPTION: Check whether interpreter trace is enabled
*
******************************************************************************/
static
u8
acpi_ex_interpreter_trace_enabled
(
char
*
name
)
{
/* Check if tracing is enabled */
if
(
!
(
acpi_gbl_trace_flags
&
ACPI_TRACE_ENABLED
))
{
return
(
FALSE
);
}
/*
* Check if tracing is filtered:
*
* 1. If the tracer is started, acpi_gbl_trace_method_object should have
* been filled by the trace starter
* 2. If the tracer is not started, acpi_gbl_trace_method_name should be
* matched if it is specified
* 3. If the tracer is oneshot style, acpi_gbl_trace_method_name should
* not be cleared by the trace stopper during the first match
*/
if
(
acpi_gbl_trace_method_object
)
{
return
(
TRUE
);
}
if
(
name
&&
(
acpi_gbl_trace_method_name
&&
strcmp
(
acpi_gbl_trace_method_name
,
name
)))
{
return
(
FALSE
);
}
if
((
acpi_gbl_trace_flags
&
ACPI_TRACE_ONESHOT
)
&&
!
acpi_gbl_trace_method_name
)
{
return
(
FALSE
);
}
return
(
TRUE
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_get_trace_event_name
*
* PARAMETERS: type - Trace event type
*
* RETURN: Trace event name.
*
* DESCRIPTION: Used to obtain the full trace event name.
*
******************************************************************************/
#ifdef ACPI_DEBUG_OUTPUT
static
const
char
*
acpi_ex_get_trace_event_name
(
acpi_trace_event_type
type
)
{
switch
(
type
)
{
case
ACPI_TRACE_AML_METHOD
:
return
"Method"
;
case
ACPI_TRACE_AML_OPCODE
:
return
"Opcode"
;
case
ACPI_TRACE_AML_REGION
:
return
"Region"
;
default:
return
""
;
}
}
#endif
/*******************************************************************************
*
* FUNCTION: acpi_ex_trace_point
*
* PARAMETERS: type - Trace event type
* begin - TRUE if before execution
* aml - Executed AML address
* pathname - Object path
*
* RETURN: None
*
* DESCRIPTION: Internal interpreter execution trace.
*
******************************************************************************/
void
acpi_ex_trace_point
(
acpi_trace_event_type
type
,
u8
begin
,
u8
*
aml
,
char
*
pathname
)
{
ACPI_FUNCTION_NAME
(
ex_trace_point
);
if
(
pathname
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_TRACE_POINT
,
"%s %s [0x%p:%s] execution.
\n
"
,
acpi_ex_get_trace_event_name
(
type
),
begin
?
"Begin"
:
"End"
,
aml
,
pathname
));
}
else
{
ACPI_DEBUG_PRINT
((
ACPI_DB_TRACE_POINT
,
"%s %s [0x%p] execution.
\n
"
,
acpi_ex_get_trace_event_name
(
type
),
begin
?
"Begin"
:
"End"
,
aml
));
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_start_trace_method
*
* PARAMETERS: method_node - Node of the method
* obj_desc - The method object
* walk_state - current state, NULL if not yet executing
* a method.
*
* RETURN: None
*
* DESCRIPTION: Start control method execution trace
*
******************************************************************************/
void
acpi_ex_start_trace_method
(
struct
acpi_namespace_node
*
method_node
,
union
acpi_operand_object
*
obj_desc
,
struct
acpi_walk_state
*
walk_state
)
{
acpi_status
status
;
char
*
pathname
=
NULL
;
u8
enabled
=
FALSE
;
ACPI_FUNCTION_NAME
(
ex_start_trace_method
);
if
(
method_node
)
{
pathname
=
acpi_ns_get_normalized_pathname
(
method_node
,
TRUE
);
}
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
goto
exit
;
}
enabled
=
acpi_ex_interpreter_trace_enabled
(
pathname
);
if
(
enabled
&&
!
acpi_gbl_trace_method_object
)
{
acpi_gbl_trace_method_object
=
obj_desc
;
acpi_gbl_original_dbg_level
=
acpi_dbg_level
;
acpi_gbl_original_dbg_layer
=
acpi_dbg_layer
;
acpi_dbg_level
=
ACPI_TRACE_LEVEL_ALL
;
acpi_dbg_layer
=
ACPI_TRACE_LAYER_ALL
;
if
(
acpi_gbl_trace_dbg_level
)
{
acpi_dbg_level
=
acpi_gbl_trace_dbg_level
;
}
if
(
acpi_gbl_trace_dbg_layer
)
{
acpi_dbg_layer
=
acpi_gbl_trace_dbg_layer
;
}
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
exit:
if
(
enabled
)
{
ACPI_TRACE_POINT
(
ACPI_TRACE_AML_METHOD
,
TRUE
,
obj_desc
?
obj_desc
->
method
.
aml_start
:
NULL
,
pathname
);
}
if
(
pathname
)
{
ACPI_FREE
(
pathname
);
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_stop_trace_method
*
* PARAMETERS: method_node - Node of the method
* obj_desc - The method object
* walk_state - current state, NULL if not yet executing
* a method.
*
* RETURN: None
*
* DESCRIPTION: Stop control method execution trace
*
******************************************************************************/
void
acpi_ex_stop_trace_method
(
struct
acpi_namespace_node
*
method_node
,
union
acpi_operand_object
*
obj_desc
,
struct
acpi_walk_state
*
walk_state
)
{
acpi_status
status
;
char
*
pathname
=
NULL
;
u8
enabled
;
ACPI_FUNCTION_NAME
(
ex_stop_trace_method
);
if
(
method_node
)
{
pathname
=
acpi_ns_get_normalized_pathname
(
method_node
,
TRUE
);
}
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
goto
exit_path
;
}
enabled
=
acpi_ex_interpreter_trace_enabled
(
NULL
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
enabled
)
{
ACPI_TRACE_POINT
(
ACPI_TRACE_AML_METHOD
,
FALSE
,
obj_desc
?
obj_desc
->
method
.
aml_start
:
NULL
,
pathname
);
}
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
goto
exit_path
;
}
/* Check whether the tracer should be stopped */
if
(
acpi_gbl_trace_method_object
==
obj_desc
)
{
/* Disable further tracing if type is one-shot */
if
(
acpi_gbl_trace_flags
&
ACPI_TRACE_ONESHOT
)
{
acpi_gbl_trace_method_name
=
NULL
;
}
acpi_dbg_level
=
acpi_gbl_original_dbg_level
;
acpi_dbg_layer
=
acpi_gbl_original_dbg_layer
;
acpi_gbl_trace_method_object
=
NULL
;
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
exit_path:
if
(
pathname
)
{
ACPI_FREE
(
pathname
);
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_start_trace_opcode
*
* PARAMETERS: op - The parser opcode object
* walk_state - current state, NULL if not yet executing
* a method.
*
* RETURN: None
*
* DESCRIPTION: Start opcode execution trace
*
******************************************************************************/
void
acpi_ex_start_trace_opcode
(
union
acpi_parse_object
*
op
,
struct
acpi_walk_state
*
walk_state
)
{
ACPI_FUNCTION_NAME
(
ex_start_trace_opcode
);
if
(
acpi_ex_interpreter_trace_enabled
(
NULL
)
&&
(
acpi_gbl_trace_flags
&
ACPI_TRACE_OPCODE
))
{
ACPI_TRACE_POINT
(
ACPI_TRACE_AML_OPCODE
,
TRUE
,
op
->
common
.
aml
,
op
->
common
.
aml_op_name
);
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ex_stop_trace_opcode
*
* PARAMETERS: op - The parser opcode object
* walk_state - current state, NULL if not yet executing
* a method.
*
* RETURN: None
*
* DESCRIPTION: Stop opcode execution trace
*
******************************************************************************/
void
acpi_ex_stop_trace_opcode
(
union
acpi_parse_object
*
op
,
struct
acpi_walk_state
*
walk_state
)
{
ACPI_FUNCTION_NAME
(
ex_stop_trace_opcode
);
if
(
acpi_ex_interpreter_trace_enabled
(
NULL
)
&&
(
acpi_gbl_trace_flags
&
ACPI_TRACE_OPCODE
))
{
ACPI_TRACE_POINT
(
ACPI_TRACE_AML_OPCODE
,
FALSE
,
op
->
common
.
aml
,
op
->
common
.
aml_op_name
);
}
}
drivers/acpi/acpica/exdump.c
View file @
6d63e354
...
...
@@ -995,9 +995,8 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc)
if
(
obj_desc
->
reference
.
class
==
ACPI_REFCLASS_NAME
)
{
acpi_os_printf
(
" %p "
,
obj_desc
->
reference
.
node
);
status
=
acpi_ns_handle_to_pathname
(
obj_desc
->
reference
.
node
,
&
ret_buf
);
status
=
acpi_ns_handle_to_pathname
(
obj_desc
->
reference
.
node
,
&
ret_buf
,
FALSE
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_os_printf
(
" Could not convert name to pathname
\n
"
);
}
else
{
...
...
drivers/acpi/acpica/nsnames.c
View file @
6d63e354
This diff is collapsed.
Click to expand it.
drivers/acpi/acpica/nsparse.c
View file @
6d63e354
...
...
@@ -78,6 +78,20 @@ acpi_ns_one_complete_parse(u32 pass_number,
ACPI_FUNCTION_TRACE
(
ns_one_complete_parse
);
status
=
acpi_get_table_by_index
(
table_index
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* Table must consist of at least a complete header */
if
(
table
->
length
<
sizeof
(
struct
acpi_table_header
))
{
return_ACPI_STATUS
(
AE_BAD_HEADER
);
}
aml_start
=
(
u8
*
)
table
+
sizeof
(
struct
acpi_table_header
);
aml_length
=
table
->
length
-
sizeof
(
struct
acpi_table_header
);
status
=
acpi_tb_get_owner_id
(
table_index
,
&
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
...
...
@@ -85,7 +99,7 @@ acpi_ns_one_complete_parse(u32 pass_number,
/* Create and init a Root Node */
parse_root
=
acpi_ps_create_scope_op
();
parse_root
=
acpi_ps_create_scope_op
(
aml_start
);
if
(
!
parse_root
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -98,23 +112,12 @@ acpi_ns_one_complete_parse(u32 pass_number,
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
status
=
acpi_get_table_by_index
(
table_index
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_ds_delete_walk_state
(
walk_state
);
acpi_ps_free_op
(
parse_root
);
return_ACPI_STATUS
(
status
);
}
/* Table must consist of at least a complete header */
if
(
table
->
length
<
sizeof
(
struct
acpi_table_header
))
{
status
=
AE_BAD_HEADER
;
}
else
{
aml_start
=
(
u8
*
)
table
+
sizeof
(
struct
acpi_table_header
);
aml_length
=
table
->
length
-
sizeof
(
struct
acpi_table_header
);
status
=
acpi_ds_init_aml_walk
(
walk_state
,
parse_root
,
NULL
,
aml_start
,
aml_length
,
NULL
,
(
u8
)
pass_number
);
(
u8
)
pass_number
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_ds_delete_walk_state
(
walk_state
);
goto
cleanup
;
}
/* Found OSDT table, enable the namespace override feature */
...
...
@@ -124,11 +127,6 @@ acpi_ns_one_complete_parse(u32 pass_number,
walk_state
->
namespace_override
=
TRUE
;
}
if
(
ACPI_FAILURE
(
status
))
{
acpi_ds_delete_walk_state
(
walk_state
);
goto
cleanup
;
}
/* start_node is the default location to load the table */
if
(
start_node
&&
start_node
!=
acpi_gbl_root_node
)
{
...
...
drivers/acpi/acpica/nsutils.c
View file @
6d63e354
...
...
@@ -83,7 +83,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node,
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
status
=
acpi_ns_handle_to_pathname
(
node
,
&
buffer
);
status
=
acpi_ns_handle_to_pathname
(
node
,
&
buffer
,
FALSE
);
if
(
ACPI_SUCCESS
(
status
))
{
if
(
message
)
{
acpi_os_printf
(
"%s "
,
message
);
...
...
drivers/acpi/acpica/nsxfname.c
View file @
6d63e354
...
...
@@ -172,11 +172,15 @@ acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
return
(
status
);
}
if
(
name_type
==
ACPI_FULL_PATHNAME
)
{
if
(
name_type
==
ACPI_FULL_PATHNAME
||
name_type
==
ACPI_FULL_PATHNAME_NO_TRAILING
)
{
/* Get the full pathname (From the namespace root) */
status
=
acpi_ns_handle_to_pathname
(
handle
,
buffer
);
status
=
acpi_ns_handle_to_pathname
(
handle
,
buffer
,
name_type
==
ACPI_FULL_PATHNAME
?
FALSE
:
TRUE
);
return
(
status
);
}
...
...
drivers/acpi/acpica/psargs.c
View file @
6d63e354
...
...
@@ -287,7 +287,7 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
"Control Method - %p Desc %p Path=%p
\n
"
,
node
,
method_desc
,
path
));
name_op
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
);
name_op
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
,
start
);
if
(
!
name_op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -484,7 +484,7 @@ acpi_ps_get_next_simple_arg(struct acpi_parse_state *parser_state,
static
union
acpi_parse_object
*
acpi_ps_get_next_field
(
struct
acpi_parse_state
*
parser_state
)
{
u
32
aml_offset
;
u
8
*
aml
;
union
acpi_parse_object
*
field
;
union
acpi_parse_object
*
arg
=
NULL
;
u16
opcode
;
...
...
@@ -498,8 +498,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
ACPI_FUNCTION_TRACE
(
ps_get_next_field
);
aml_offset
=
(
u32
)
ACPI_PTR_DIFF
(
parser_state
->
aml
,
parser_state
->
aml_start
);
aml
=
parser_state
->
aml
;
/* Determine field type */
...
...
@@ -536,13 +535,11 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
/* Allocate a new field op */
field
=
acpi_ps_alloc_op
(
opcode
);
field
=
acpi_ps_alloc_op
(
opcode
,
aml
);
if
(
!
field
)
{
return_PTR
(
NULL
);
}
field
->
common
.
aml_offset
=
aml_offset
;
/* Decode the field type */
switch
(
opcode
)
{
...
...
@@ -604,6 +601,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
* Argument for Connection operator can be either a Buffer
* (resource descriptor), or a name_string.
*/
aml
=
parser_state
->
aml
;
if
(
ACPI_GET8
(
parser_state
->
aml
)
==
AML_BUFFER_OP
)
{
parser_state
->
aml
++
;
...
...
@@ -616,7 +614,8 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
/* Non-empty list */
arg
=
acpi_ps_alloc_op
(
AML_INT_BYTELIST_OP
);
arg
=
acpi_ps_alloc_op
(
AML_INT_BYTELIST_OP
,
aml
);
if
(
!
arg
)
{
acpi_ps_free_op
(
field
);
return_PTR
(
NULL
);
...
...
@@ -665,7 +664,7 @@ static union acpi_parse_object *acpi_ps_get_next_field(struct acpi_parse_state
parser_state
->
aml
=
pkg_end
;
}
else
{
arg
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
);
arg
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
,
aml
);
if
(
!
arg
)
{
acpi_ps_free_op
(
field
);
return_PTR
(
NULL
);
...
...
@@ -730,7 +729,7 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
/* Constants, strings, and namestrings are all the same size */
arg
=
acpi_ps_alloc_op
(
AML_BYTE_OP
);
arg
=
acpi_ps_alloc_op
(
AML_BYTE_OP
,
parser_state
->
aml
);
if
(
!
arg
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -777,7 +776,8 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
/* Non-empty list */
arg
=
acpi_ps_alloc_op
(
AML_INT_BYTELIST_OP
);
arg
=
acpi_ps_alloc_op
(
AML_INT_BYTELIST_OP
,
parser_state
->
aml
);
if
(
!
arg
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
@@ -807,7 +807,9 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
/* null_name or name_string */
arg
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
);
arg
=
acpi_ps_alloc_op
(
AML_INT_NAMEPATH_OP
,
parser_state
->
aml
);
if
(
!
arg
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/acpica/psloop.c
View file @
6d63e354
...
...
@@ -51,6 +51,7 @@
#include <acpi/acpi.h>
#include "accommon.h"
#include "acinterp.h"
#include "acparser.h"
#include "acdispat.h"
#include "amlcode.h"
...
...
@@ -125,10 +126,7 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state,
*/
while
(
GET_CURRENT_ARG_TYPE
(
walk_state
->
arg_types
)
&&
!
walk_state
->
arg_count
)
{
walk_state
->
aml_offset
=
(
u32
)
ACPI_PTR_DIFF
(
walk_state
->
parser_state
.
aml
,
walk_state
->
parser_state
.
aml_start
);
walk_state
->
aml
=
walk_state
->
parser_state
.
aml
;
status
=
acpi_ps_get_next_arg
(
walk_state
,
...
...
@@ -140,7 +138,6 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state,
}
if
(
arg
)
{
arg
->
common
.
aml_offset
=
walk_state
->
aml_offset
;
acpi_ps_append_arg
(
op
,
arg
);
}
...
...
@@ -494,16 +491,7 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)
continue
;
}
op
->
common
.
aml_offset
=
walk_state
->
aml_offset
;
if
(
walk_state
->
op_info
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"Opcode %4.4X [%s] Op %p Aml %p AmlOffset %5.5X
\n
"
,
(
u32
)
op
->
common
.
aml_opcode
,
walk_state
->
op_info
->
name
,
op
,
parser_state
->
aml
,
op
->
common
.
aml_offset
));
}
acpi_ex_start_trace_opcode
(
op
,
walk_state
);
}
/*
...
...
drivers/acpi/acpica/psobject.c
View file @
6d63e354
...
...
@@ -66,12 +66,11 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state);
static
acpi_status
acpi_ps_get_aml_opcode
(
struct
acpi_walk_state
*
walk_state
)
{
u32
aml_offset
;
ACPI_FUNCTION_TRACE_PTR
(
ps_get_aml_opcode
,
walk_state
);
walk_state
->
aml_offset
=
(
u32
)
ACPI_PTR_DIFF
(
walk_state
->
parser_state
.
aml
,
walk_state
->
parser_state
.
aml_start
);
walk_state
->
aml
=
walk_state
->
parser_state
.
aml
;
walk_state
->
opcode
=
acpi_ps_peek_opcode
(
&
(
walk_state
->
parser_state
));
/*
...
...
@@ -98,10 +97,14 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
/* The opcode is unrecognized. Complain and skip unknown opcodes */
if
(
walk_state
->
pass_number
==
2
)
{
aml_offset
=
(
u32
)
ACPI_PTR_DIFF
(
walk_state
->
aml
,
walk_state
->
parser_state
.
aml_start
);
ACPI_ERROR
((
AE_INFO
,
"Unknown opcode 0x%.2X at table offset 0x%.4X, ignoring"
,
walk_state
->
opcode
,
(
u32
)(
walk_state
->
aml_offset
+
(
u32
)(
aml_offset
+
sizeof
(
struct
acpi_table_header
))));
ACPI_DUMP_BUFFER
((
walk_state
->
parser_state
.
aml
-
16
),
...
...
@@ -115,14 +118,14 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)
acpi_os_printf
(
"/*
\n
Error: Unknown opcode 0x%.2X at table offset 0x%.4X, context:
\n
"
,
walk_state
->
opcode
,
(
u32
)(
walk_state
->
aml_offset
+
(
u32
)(
aml_offset
+
sizeof
(
struct
acpi_table_header
)));
/* Dump the context surrounding the invalid opcode */
acpi_ut_dump_buffer
(((
u8
*
)
walk_state
->
parser_state
.
aml
-
16
),
48
,
DB_BYTE_DISPLAY
,
(
walk_state
->
aml_offset
+
(
aml_offset
+
sizeof
(
struct
acpi_table_header
)
-
16
));
acpi_os_printf
(
" */
\n
"
);
...
...
@@ -294,7 +297,7 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
/* Create Op structure and append to parent's argument list */
walk_state
->
op_info
=
acpi_ps_get_opcode_info
(
walk_state
->
opcode
);
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
);
op
=
acpi_ps_alloc_op
(
walk_state
->
opcode
,
aml_op_start
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
...
...
drivers/acpi/acpica/psparse.c
View file @
6d63e354
...
...
@@ -147,6 +147,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
return_ACPI_STATUS
(
AE_OK
);
/* OK for now */
}
acpi_ex_stop_trace_opcode
(
op
,
walk_state
);
/* Delete this op and the subtree below it if asked to */
if
(((
walk_state
->
parse_flags
&
ACPI_PARSE_TREE_MASK
)
!=
...
...
@@ -185,7 +187,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
* op must be replaced by a placeholder return op
*/
replacement_op
=
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
);
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
,
op
->
common
.
aml
);
if
(
!
replacement_op
)
{
status
=
AE_NO_MEMORY
;
}
...
...
@@ -209,7 +212,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
||
(
op
->
common
.
parent
->
common
.
aml_opcode
==
AML_VAR_PACKAGE_OP
))
{
replacement_op
=
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
);
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
,
op
->
common
.
aml
);
if
(
!
replacement_op
)
{
status
=
AE_NO_MEMORY
;
}
...
...
@@ -224,7 +228,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
AML_VAR_PACKAGE_OP
))
{
replacement_op
=
acpi_ps_alloc_op
(
op
->
common
.
aml_opcode
);
aml_opcode
,
op
->
common
.
aml
);
if
(
!
replacement_op
)
{
status
=
AE_NO_MEMORY
;
}
else
{
...
...
@@ -240,7 +245,8 @@ acpi_ps_complete_this_op(struct acpi_walk_state * walk_state,
default:
replacement_op
=
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
);
acpi_ps_alloc_op
(
AML_INT_RETURN_VALUE_OP
,
op
->
common
.
aml
);
if
(
!
replacement_op
)
{
status
=
AE_NO_MEMORY
;
}
...
...
drivers/acpi/acpica/psutils.c
View file @
6d63e354
...
...
@@ -60,11 +60,11 @@ ACPI_MODULE_NAME("psutils")
* DESCRIPTION: Create a Scope and associated namepath op with the root name
*
******************************************************************************/
union
acpi_parse_object
*
acpi_ps_create_scope_op
(
void
)
union
acpi_parse_object
*
acpi_ps_create_scope_op
(
u8
*
aml
)
{
union
acpi_parse_object
*
scope_op
;
scope_op
=
acpi_ps_alloc_op
(
AML_SCOPE_OP
);
scope_op
=
acpi_ps_alloc_op
(
AML_SCOPE_OP
,
aml
);
if
(
!
scope_op
)
{
return
(
NULL
);
}
...
...
@@ -103,6 +103,7 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
* FUNCTION: acpi_ps_alloc_op
*
* PARAMETERS: opcode - Opcode that will be stored in the new Op
* aml - Address of the opcode
*
* RETURN: Pointer to the new Op, null on failure
*
...
...
@@ -112,7 +113,7 @@ void acpi_ps_init_op(union acpi_parse_object *op, u16 opcode)
*
******************************************************************************/
union
acpi_parse_object
*
acpi_ps_alloc_op
(
u16
opcode
)
union
acpi_parse_object
*
acpi_ps_alloc_op
(
u16
opcode
,
u8
*
aml
)
{
union
acpi_parse_object
*
op
;
const
struct
acpi_opcode_info
*
op_info
;
...
...
@@ -149,6 +150,7 @@ union acpi_parse_object *acpi_ps_alloc_op(u16 opcode)
if
(
op
)
{
acpi_ps_init_op
(
op
,
opcode
);
op
->
common
.
aml
=
aml
;
op
->
common
.
flags
=
flags
;
}
...
...
drivers/acpi/acpica/psxface.c
View file @
6d63e354
...
...
@@ -47,15 +47,12 @@
#include "acdispat.h"
#include "acinterp.h"
#include "actables.h"
#include "acnamesp.h"
#define _COMPONENT ACPI_PARSER
ACPI_MODULE_NAME
(
"psxface"
)
/* Local Prototypes */
static
void
acpi_ps_start_trace
(
struct
acpi_evaluate_info
*
info
);
static
void
acpi_ps_stop_trace
(
struct
acpi_evaluate_info
*
info
);
static
void
acpi_ps_update_parameter_list
(
struct
acpi_evaluate_info
*
info
,
u16
action
);
...
...
@@ -76,7 +73,7 @@ acpi_ps_update_parameter_list(struct acpi_evaluate_info *info, u16 action);
******************************************************************************/
acpi_status
acpi_debug_trace
(
char
*
name
,
u32
debug_level
,
u32
debug_layer
,
u32
flags
)
acpi_debug_trace
(
c
onst
c
har
*
name
,
u32
debug_level
,
u32
debug_layer
,
u32
flags
)
{
acpi_status
status
;
...
...
@@ -85,108 +82,14 @@ acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags)
return
(
status
);
}
/* TBDs: Validate name, allow full path or just nameseg */
acpi_gbl_trace_method_name
=
*
ACPI_CAST_PTR
(
u32
,
name
);
acpi_gbl_trace_method_name
=
name
;
acpi_gbl_trace_flags
=
flags
;
if
(
debug_level
)
{
acpi_gbl_trace_dbg_level
=
debug_level
;
}
if
(
debug_layer
)
{
acpi_gbl_trace_dbg_layer
=
debug_layer
;
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
return
(
AE_OK
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_start_trace
*
* PARAMETERS: info - Method info struct
*
* RETURN: None
*
* DESCRIPTION: Start control method execution trace
*
******************************************************************************/
static
void
acpi_ps_start_trace
(
struct
acpi_evaluate_info
*
info
)
{
acpi_status
status
;
ACPI_FUNCTION_ENTRY
();
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
return
;
}
if
((
!
acpi_gbl_trace_method_name
)
||
(
acpi_gbl_trace_method_name
!=
info
->
node
->
name
.
integer
))
{
goto
exit
;
}
acpi_gbl_original_dbg_level
=
acpi_dbg_level
;
acpi_gbl_original_dbg_layer
=
acpi_dbg_layer
;
acpi_dbg_level
=
0x00FFFFFF
;
acpi_dbg_layer
=
ACPI_UINT32_MAX
;
if
(
acpi_gbl_trace_dbg_level
)
{
acpi_dbg_level
=
acpi_gbl_trace_dbg_level
;
}
if
(
acpi_gbl_trace_dbg_layer
)
{
acpi_dbg_layer
=
acpi_gbl_trace_dbg_layer
;
}
status
=
AE_OK
;
exit:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_stop_trace
*
* PARAMETERS: info - Method info struct
*
* RETURN: None
*
* DESCRIPTION: Stop control method execution trace
*
******************************************************************************/
static
void
acpi_ps_stop_trace
(
struct
acpi_evaluate_info
*
info
)
{
acpi_status
status
;
ACPI_FUNCTION_ENTRY
();
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
return
;
}
if
((
!
acpi_gbl_trace_method_name
)
||
(
acpi_gbl_trace_method_name
!=
info
->
node
->
name
.
integer
))
{
goto
exit
;
}
/* Disable further tracing if type is one-shot */
if
(
acpi_gbl_trace_flags
&
1
)
{
acpi_gbl_trace_method_name
=
0
;
acpi_gbl_trace_dbg_level
=
0
;
acpi_gbl_trace_dbg_layer
=
0
;
}
acpi_dbg_level
=
acpi_gbl_original_dbg_level
;
acpi_dbg_layer
=
acpi_gbl_original_dbg_layer
;
exit:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
return
(
status
);
}
/*******************************************************************************
...
...
@@ -212,7 +115,7 @@ static void acpi_ps_stop_trace(struct acpi_evaluate_info *info)
*
******************************************************************************/
acpi_status
acpi_ps_execute_method
(
struct
acpi_evaluate_info
*
info
)
acpi_status
acpi_ps_execute_method
(
struct
acpi_evaluate_info
*
info
)
{
acpi_status
status
;
union
acpi_parse_object
*
op
;
...
...
@@ -243,10 +146,6 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
*/
acpi_ps_update_parameter_list
(
info
,
REF_INCREMENT
);
/* Begin tracing if requested */
acpi_ps_start_trace
(
info
);
/*
* Execute the method. Performs parse simultaneously
*/
...
...
@@ -256,7 +155,7 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
/* Create and init a Root Node */
op
=
acpi_ps_create_scope_op
();
op
=
acpi_ps_create_scope_op
(
info
->
obj_desc
->
method
.
aml_start
);
if
(
!
op
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
...
...
@@ -326,10 +225,6 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
cleanup:
acpi_ps_delete_parse_tree
(
op
);
/* End optional tracing */
acpi_ps_stop_trace
(
info
);
/* Take away the extra reference that we gave the parameters above */
acpi_ps_update_parameter_list
(
info
,
REF_DECREMENT
);
...
...
drivers/acpi/acpica/rscreate.c
View file @
6d63e354
...
...
@@ -348,7 +348,8 @@ acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
status
=
acpi_ns_handle_to_pathname
((
acpi_handle
)
node
,
&
path_buffer
);
&
path_buffer
,
FALSE
);
/* +1 to include null terminator */
...
...
drivers/acpi/acpica/utdebug.c
View file @
6d63e354
...
...
@@ -45,6 +45,7 @@
#include <acpi/acpi.h>
#include "accommon.h"
#include "acinterp.h"
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME
(
"utdebug"
)
...
...
@@ -560,8 +561,37 @@ acpi_ut_ptr_exit(u32 line_number,
}
}
/*******************************************************************************
*
* FUNCTION: acpi_trace_point
*
* PARAMETERS: type - Trace event type
* begin - TRUE if before execution
* aml - Executed AML address
* pathname - Object path
* pointer - Pointer to the related object
*
* RETURN: None
*
* DESCRIPTION: Interpreter execution trace.
*
******************************************************************************/
void
acpi_trace_point
(
acpi_trace_event_type
type
,
u8
begin
,
u8
*
aml
,
char
*
pathname
)
{
ACPI_FUNCTION_ENTRY
();
acpi_ex_trace_point
(
type
,
begin
,
aml
,
pathname
);
#ifdef ACPI_USE_SYSTEM_TRACER
acpi_os_trace_point
(
type
,
begin
,
aml
,
pathname
);
#endif
}
ACPI_EXPORT_SYMBOL
(
acpi_trace_point
)
#endif
#ifdef ACPI_APPLICATION
/*******************************************************************************
*
...
...
@@ -575,7 +605,6 @@ acpi_ut_ptr_exit(u32 line_number,
* DESCRIPTION: Print error message to the console, used by applications.
*
******************************************************************************/
void
ACPI_INTERNAL_VAR_XFACE
acpi_log_error
(
const
char
*
format
,
...)
{
va_list
args
;
...
...
drivers/acpi/acpica/utdelete.c
View file @
6d63e354
...
...
@@ -209,6 +209,9 @@ static void acpi_ut_delete_internal_obj(union acpi_operand_object *object)
acpi_ut_delete_object_desc
(
object
->
method
.
mutex
);
object
->
method
.
mutex
=
NULL
;
}
if
(
object
->
method
.
node
)
{
object
->
method
.
node
=
NULL
;
}
break
;
case
ACPI_TYPE_REGION
:
...
...
drivers/acpi/acpica/utinit.c
View file @
6d63e354
...
...
@@ -204,8 +204,6 @@ acpi_status acpi_ut_init_globals(void)
acpi_gbl_acpi_hardware_present
=
TRUE
;
acpi_gbl_last_owner_id_index
=
0
;
acpi_gbl_next_owner_id_offset
=
0
;
acpi_gbl_trace_dbg_level
=
0
;
acpi_gbl_trace_dbg_layer
=
0
;
acpi_gbl_debugger_configuration
=
DEBUGGER_THREADING
;
acpi_gbl_osi_mutex
=
NULL
;
acpi_gbl_reg_methods_executed
=
FALSE
;
...
...
drivers/acpi/acpica/utmisc.c
View file @
6d63e354
...
...
@@ -376,7 +376,7 @@ acpi_ut_display_init_pathname(u8 type,
/* Get the full pathname to the node */
buffer
.
length
=
ACPI_ALLOCATE_LOCAL_BUFFER
;
status
=
acpi_ns_handle_to_pathname
(
obj_handle
,
&
buffer
);
status
=
acpi_ns_handle_to_pathname
(
obj_handle
,
&
buffer
,
FALSE
);
if
(
ACPI_FAILURE
(
status
))
{
return
;
}
...
...
drivers/acpi/acpica/utnonansi.c
0 → 100644
View file @
6d63e354
This diff is collapsed.
Click to expand it.
drivers/acpi/acpica/utstring.c
View file @
6d63e354
...
...
@@ -48,286 +48,6 @@
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME
(
"utstring"
)
/*
* Non-ANSI C library functions - strlwr, strupr, stricmp, and a 64-bit
* version of strtoul.
*/
#ifdef ACPI_ASL_COMPILER
/*******************************************************************************
*
* FUNCTION: acpi_ut_strlwr (strlwr)
*
* PARAMETERS: src_string - The source string to convert
*
* RETURN: None
*
* DESCRIPTION: Convert string to lowercase
*
* NOTE: This is not a POSIX function, so it appears here, not in utclib.c
*
******************************************************************************/
void
acpi_ut_strlwr
(
char
*
src_string
)
{
char
*
string
;
ACPI_FUNCTION_ENTRY
();
if
(
!
src_string
)
{
return
;
}
/* Walk entire string, lowercasing the letters */
for
(
string
=
src_string
;
*
string
;
string
++
)
{
*
string
=
(
char
)
tolower
((
int
)
*
string
);
}
return
;
}
/******************************************************************************
*
* FUNCTION: acpi_ut_stricmp (stricmp)
*
* PARAMETERS: string1 - first string to compare
* string2 - second string to compare
*
* RETURN: int that signifies string relationship. Zero means strings
* are equal.
*
* DESCRIPTION: Implementation of the non-ANSI stricmp function (compare
* strings with no case sensitivity)
*
******************************************************************************/
int
acpi_ut_stricmp
(
char
*
string1
,
char
*
string2
)
{
int
c1
;
int
c2
;
do
{
c1
=
tolower
((
int
)
*
string1
);
c2
=
tolower
((
int
)
*
string2
);
string1
++
;
string2
++
;
}
while
((
c1
==
c2
)
&&
(
c1
));
return
(
c1
-
c2
);
}
#endif
/*******************************************************************************
*
* FUNCTION: acpi_ut_strupr (strupr)
*
* PARAMETERS: src_string - The source string to convert
*
* RETURN: None
*
* DESCRIPTION: Convert string to uppercase
*
* NOTE: This is not a POSIX function, so it appears here, not in utclib.c
*
******************************************************************************/
void
acpi_ut_strupr
(
char
*
src_string
)
{
char
*
string
;
ACPI_FUNCTION_ENTRY
();
if
(
!
src_string
)
{
return
;
}
/* Walk entire string, uppercasing the letters */
for
(
string
=
src_string
;
*
string
;
string
++
)
{
*
string
=
(
char
)
toupper
((
int
)
*
string
);
}
return
;
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_strtoul64
*
* PARAMETERS: string - Null terminated string
* base - Radix of the string: 16 or ACPI_ANY_BASE;
* ACPI_ANY_BASE means 'in behalf of to_integer'
* ret_integer - Where the converted integer is returned
*
* RETURN: Status and Converted value
*
* DESCRIPTION: Convert a string into an unsigned value. Performs either a
* 32-bit or 64-bit conversion, depending on the current mode
* of the interpreter.
* NOTE: Does not support Octal strings, not needed.
*
******************************************************************************/
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
base
,
u64
*
ret_integer
)
{
u32
this_digit
=
0
;
u64
return_value
=
0
;
u64
quotient
;
u64
dividend
;
u32
to_integer_op
=
(
base
==
ACPI_ANY_BASE
);
u32
mode32
=
(
acpi_gbl_integer_byte_width
==
4
);
u8
valid_digits
=
0
;
u8
sign_of0x
=
0
;
u8
term
=
0
;
ACPI_FUNCTION_TRACE_STR
(
ut_stroul64
,
string
);
switch
(
base
)
{
case
ACPI_ANY_BASE
:
case
16
:
break
;
default:
/* Invalid Base */
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
if
(
!
string
)
{
goto
error_exit
;
}
/* Skip over any white space in the buffer */
while
((
*
string
)
&&
(
isspace
((
int
)
*
string
)
||
*
string
==
'\t'
))
{
string
++
;
}
if
(
to_integer_op
)
{
/*
* Base equal to ACPI_ANY_BASE means 'ToInteger operation case'.
* We need to determine if it is decimal or hexadecimal.
*/
if
((
*
string
==
'0'
)
&&
(
tolower
((
int
)
*
(
string
+
1
))
==
'x'
))
{
sign_of0x
=
1
;
base
=
16
;
/* Skip over the leading '0x' */
string
+=
2
;
}
else
{
base
=
10
;
}
}
/* Any string left? Check that '0x' is not followed by white space. */
if
(
!
(
*
string
)
||
isspace
((
int
)
*
string
)
||
*
string
==
'\t'
)
{
if
(
to_integer_op
)
{
goto
error_exit
;
}
else
{
goto
all_done
;
}
}
/*
* Perform a 32-bit or 64-bit conversion, depending upon the current
* execution mode of the interpreter
*/
dividend
=
(
mode32
)
?
ACPI_UINT32_MAX
:
ACPI_UINT64_MAX
;
/* Main loop: convert the string to a 32- or 64-bit integer */
while
(
*
string
)
{
if
(
isdigit
((
int
)
*
string
))
{
/* Convert ASCII 0-9 to Decimal value */
this_digit
=
((
u8
)
*
string
)
-
'0'
;
}
else
if
(
base
==
10
)
{
/* Digit is out of range; possible in to_integer case only */
term
=
1
;
}
else
{
this_digit
=
(
u8
)
toupper
((
int
)
*
string
);
if
(
isxdigit
((
int
)
this_digit
))
{
/* Convert ASCII Hex char to value */
this_digit
=
this_digit
-
'A'
+
10
;
}
else
{
term
=
1
;
}
}
if
(
term
)
{
if
(
to_integer_op
)
{
goto
error_exit
;
}
else
{
break
;
}
}
else
if
((
valid_digits
==
0
)
&&
(
this_digit
==
0
)
&&
!
sign_of0x
)
{
/* Skip zeros */
string
++
;
continue
;
}
valid_digits
++
;
if
(
sign_of0x
&&
((
valid_digits
>
16
)
||
((
valid_digits
>
8
)
&&
mode32
)))
{
/*
* This is to_integer operation case.
* No any restrictions for string-to-integer conversion,
* see ACPI spec.
*/
goto
error_exit
;
}
/* Divide the digit into the correct position */
(
void
)
acpi_ut_short_divide
((
dividend
-
(
u64
)
this_digit
),
base
,
&
quotient
,
NULL
);
if
(
return_value
>
quotient
)
{
if
(
to_integer_op
)
{
goto
error_exit
;
}
else
{
break
;
}
}
return_value
*=
base
;
return_value
+=
this_digit
;
string
++
;
}
/* All done, normal exit */
all_done:
ACPI_DEBUG_PRINT
((
ACPI_DB_EXEC
,
"Converted value: %8.8X%8.8X
\n
"
,
ACPI_FORMAT_UINT64
(
return_value
)));
*
ret_integer
=
return_value
;
return_ACPI_STATUS
(
AE_OK
);
error_exit:
/* Base was set/validated above */
if
(
base
==
10
)
{
return_ACPI_STATUS
(
AE_BAD_DECIMAL_CONSTANT
);
}
else
{
return_ACPI_STATUS
(
AE_BAD_HEX_CONSTANT
);
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_print_string
...
...
@@ -342,7 +62,6 @@ acpi_status acpi_ut_strtoul64(char *string, u32 base, u64 *ret_integer)
* sequences.
*
******************************************************************************/
void
acpi_ut_print_string
(
char
*
string
,
u16
max_length
)
{
u32
i
;
...
...
@@ -584,64 +303,3 @@ void ut_convert_backslashes(char *pathname)
}
}
#endif
#if defined (ACPI_DEBUGGER) || defined (ACPI_APPLICATION)
/*******************************************************************************
*
* FUNCTION: acpi_ut_safe_strcpy, acpi_ut_safe_strcat, acpi_ut_safe_strncat
*
* PARAMETERS: Adds a "DestSize" parameter to each of the standard string
* functions. This is the size of the Destination buffer.
*
* RETURN: TRUE if the operation would overflow the destination buffer.
*
* DESCRIPTION: Safe versions of standard Clib string functions. Ensure that
* the result of the operation will not overflow the output string
* buffer.
*
* NOTE: These functions are typically only helpful for processing
* user input and command lines. For most ACPICA code, the
* required buffer length is precisely calculated before buffer
* allocation, so the use of these functions is unnecessary.
*
******************************************************************************/
u8
acpi_ut_safe_strcpy
(
char
*
dest
,
acpi_size
dest_size
,
char
*
source
)
{
if
(
strlen
(
source
)
>=
dest_size
)
{
return
(
TRUE
);
}
strcpy
(
dest
,
source
);
return
(
FALSE
);
}
u8
acpi_ut_safe_strcat
(
char
*
dest
,
acpi_size
dest_size
,
char
*
source
)
{
if
((
strlen
(
dest
)
+
strlen
(
source
))
>=
dest_size
)
{
return
(
TRUE
);
}
strcat
(
dest
,
source
);
return
(
FALSE
);
}
u8
acpi_ut_safe_strncat
(
char
*
dest
,
acpi_size
dest_size
,
char
*
source
,
acpi_size
max_transfer_length
)
{
acpi_size
actual_transfer_length
;
actual_transfer_length
=
ACPI_MIN
(
max_transfer_length
,
strlen
(
source
));
if
((
strlen
(
dest
)
+
actual_transfer_length
)
>=
dest_size
)
{
return
(
TRUE
);
}
strncat
(
dest
,
source
,
max_transfer_length
);
return
(
FALSE
);
}
#endif
include/acpi/acoutput.h
View file @
6d63e354
...
...
@@ -88,7 +88,8 @@
#define ACPI_LV_DEBUG_OBJECT 0x00000002
#define ACPI_LV_INFO 0x00000004
#define ACPI_LV_REPAIR 0x00000008
#define ACPI_LV_ALL_EXCEPTIONS 0x0000000F
#define ACPI_LV_TRACE_POINT 0x00000010
#define ACPI_LV_ALL_EXCEPTIONS 0x0000001F
/* Trace verbosity level 1 [Standard Trace Level] */
...
...
@@ -147,6 +148,7 @@
#define ACPI_DB_DEBUG_OBJECT ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
#define ACPI_DB_INFO ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
#define ACPI_DB_REPAIR ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
#define ACPI_DB_TRACE_POINT ACPI_DEBUG_LEVEL (ACPI_LV_TRACE_POINT)
#define ACPI_DB_ALL_EXCEPTIONS ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
/* Trace level -- also used in the global "DebugLevel" */
...
...
@@ -182,6 +184,20 @@
#define ACPI_NORMAL_DEFAULT (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
#define ACPI_DEBUG_ALL (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
/*
* Global trace flags
*/
#define ACPI_TRACE_ENABLED ((u32) 4)
#define ACPI_TRACE_ONESHOT ((u32) 2)
#define ACPI_TRACE_OPCODE ((u32) 1)
/* Defaults for trace debugging level/layer */
#define ACPI_TRACE_LEVEL_ALL ACPI_LV_ALL
#define ACPI_TRACE_LAYER_ALL 0x000001FF
#define ACPI_TRACE_LEVEL_DEFAULT ACPI_LV_TRACE_POINT
#define ACPI_TRACE_LAYER_DEFAULT ACPI_EXECUTER
#if defined (ACPI_DEBUG_OUTPUT) || !defined (ACPI_NO_ERROR_MESSAGES)
/*
* The module name is used primarily for error and debug messages.
...
...
@@ -432,6 +448,8 @@
#define ACPI_DUMP_PATHNAME(a, b, c, d) acpi_ns_dump_pathname(a, b, c, d)
#define ACPI_DUMP_BUFFER(a, b) acpi_ut_debug_dump_buffer((u8 *) a, b, DB_BYTE_DISPLAY, _COMPONENT)
#define ACPI_TRACE_POINT(a, b, c, d) acpi_trace_point (a, b, c, d)
#else
/* ACPI_DEBUG_OUTPUT */
/*
* This is the non-debug case -- make everything go away,
...
...
@@ -453,6 +471,7 @@
#define ACPI_DUMP_PATHNAME(a, b, c, d)
#define ACPI_DUMP_BUFFER(a, b)
#define ACPI_IS_DEBUG_ENABLED(level, component) 0
#define ACPI_TRACE_POINT(a, b, c, d)
/* Return macros must have a return statement at the minimum */
...
...
include/acpi/acpiosxf.h
View file @
6d63e354
...
...
@@ -430,4 +430,10 @@ long acpi_os_get_file_offset(ACPI_FILE file);
acpi_status
acpi_os_set_file_offset
(
ACPI_FILE
file
,
long
offset
,
u8
from
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point
void
acpi_os_trace_point
(
acpi_trace_event_type
type
,
u8
begin
,
u8
*
aml
,
char
*
pathname
);
#endif
#endif
/* __ACPIOSXF_H__ */
include/acpi/acpixf.h
View file @
6d63e354
...
...
@@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20150
619
#define ACPI_CA_VERSION 0x20150
717
#include <acpi/acconfig.h>
#include <acpi/actypes.h>
...
...
@@ -251,7 +251,9 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE);
* traced each time it is executed.
*/
ACPI_INIT_GLOBAL
(
u32
,
acpi_gbl_trace_flags
,
0
);
ACPI_INIT_GLOBAL
(
acpi_name
,
acpi_gbl_trace_method_name
,
0
);
ACPI_INIT_GLOBAL
(
const
char
*
,
acpi_gbl_trace_method_name
,
NULL
);
ACPI_INIT_GLOBAL
(
u32
,
acpi_gbl_trace_dbg_level
,
ACPI_TRACE_LEVEL_DEFAULT
);
ACPI_INIT_GLOBAL
(
u32
,
acpi_gbl_trace_dbg_layer
,
ACPI_TRACE_LAYER_DEFAULT
);
/*
* Runtime configuration of debug output control masks. We want the debug
...
...
@@ -504,7 +506,7 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status
acpi_object_handler
handler
,
void
**
data
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
acpi_debug_trace
(
char
*
name
,
u32
debug_level
,
acpi_debug_trace
(
c
onst
c
har
*
name
,
u32
debug_level
,
u32
debug_layer
,
u32
flags
))
/*
...
...
@@ -907,6 +909,11 @@ ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6)
const
char
*
module_name
,
u32
component_id
,
const
char
*
format
,
...))
ACPI_DBG_DEPENDENT_RETURN_VOID
(
void
acpi_trace_point
(
acpi_trace_event_type
type
,
u8
begin
,
u8
*
aml
,
char
*
pathname
))
ACPI_APP_DEPENDENT_RETURN_VOID
(
ACPI_PRINTF_LIKE
(
1
)
void
ACPI_INTERNAL_VAR_XFACE
acpi_log_error
(
const
char
*
format
,
...))
...
...
include/acpi/actbl2.h
View file @
6d63e354
...
...
@@ -1186,20 +1186,29 @@ enum acpi_spmi_interface_types {
* December 19, 2014
*
* NOTE: There are two versions of the table with the same signature --
* the client version and the server version.
* the client version and the server version. The common platform_class
* field is used to differentiate the two types of tables.
*
******************************************************************************/
struct
acpi_table_tcpa_
client
{
struct
acpi_table_tcpa_
hdr
{
struct
acpi_table_header
header
;
/* Common ACPI table header */
u16
platform_class
;
};
/*
* Values for platform_class above.
* This is how the client and server subtables are differentiated
*/
#define ACPI_TCPA_CLIENT_TABLE 0
#define ACPI_TCPA_SERVER_TABLE 1
struct
acpi_table_tcpa_client
{
u32
minimum_log_length
;
/* Minimum length for the event log area */
u64
log_address
;
/* Address of the event log area */
};
struct
acpi_table_tcpa_server
{
struct
acpi_table_header
header
;
/* Common ACPI table header */
u16
platform_class
;
u16
reserved
;
u64
minimum_log_length
;
/* Minimum length for the event log area */
u64
log_address
;
/* Address of the event log area */
...
...
include/acpi/actypes.h
View file @
6d63e354
...
...
@@ -985,7 +985,8 @@ struct acpi_buffer {
*/
#define ACPI_FULL_PATHNAME 0
#define ACPI_SINGLE_NAME 1
#define ACPI_NAME_TYPE_MAX 1
#define ACPI_FULL_PATHNAME_NO_TRAILING 2
#define ACPI_NAME_TYPE_MAX 2
/*
* Predefined Namespace items
...
...
@@ -1246,6 +1247,14 @@ struct acpi_memory_list {
#endif
};
/* Definitions of trace event types */
typedef
enum
{
ACPI_TRACE_AML_METHOD
,
ACPI_TRACE_AML_OPCODE
,
ACPI_TRACE_AML_REGION
}
acpi_trace_event_type
;
/* Definitions of _OSI support */
#define ACPI_VENDOR_STRINGS 0x01
...
...
include/acpi/platform/acenvex.h
View file @
6d63e354
...
...
@@ -56,6 +56,9 @@
#if defined(_LINUX) || defined(__linux__)
#include <acpi/platform/aclinuxex.h>
#elif defined(WIN32)
#include "acwinex.h"
#elif defined(_AED_EFI)
#include "acefiex.h"
...
...
include/acpi/platform/acmsvcex.h
0 → 100644
View file @
6d63e354
/******************************************************************************
*
* Name: acmsvcex.h - Extra VC specific defines, etc.
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2015, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef __ACMSVCEX_H__
#define __ACMSVCEX_H__
/* Debug support. */
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
/* Enables specific file/lineno for leaks */
#include <crtdbg.h>
#endif
#endif
/* __ACMSVCEX_H__ */
include/acpi/platform/acwinex.h
0 → 100644
View file @
6d63e354
/******************************************************************************
*
* Name: acwinex.h - Extra OS specific defines, etc.
*
*****************************************************************************/
/*
* Copyright (C) 2000 - 2015, Intel Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions, and the following disclaimer,
* without modification.
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
* substantially similar to the "NO WARRANTY" disclaimer below
* ("Disclaimer") and any redistribution must be conditioned upon
* including a substantially similar Disclaimer requirement for further
* binary redistribution.
* 3. Neither the names of the above-listed copyright holders nor the names
* of any contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License ("GPL") version 2 as published by the Free
* Software Foundation.
*
* NO WARRANTY
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGES.
*/
#ifndef __ACWINEX_H__
#define __ACWINEX_H__
/* Windows uses VC */
#endif
/* __ACWINEX_H__ */
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