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
f42106fe
Commit
f42106fe
authored
Sep 26, 2016
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'acpica' into acpi-bus
parents
daae45ca
7a0b71dc
Changes
83
Show whitespace changes
Inline
Side-by-side
Showing
83 changed files
with
1958 additions
and
1302 deletions
+1958
-1302
drivers/acpi/acpica/Makefile
drivers/acpi/acpica/Makefile
+1
-0
drivers/acpi/acpica/acapps.h
drivers/acpi/acpica/acapps.h
+6
-4
drivers/acpi/acpica/acdebug.h
drivers/acpi/acpica/acdebug.h
+1
-1
drivers/acpi/acpica/acevents.h
drivers/acpi/acpica/acevents.h
+3
-0
drivers/acpi/acpica/acglobal.h
drivers/acpi/acpica/acglobal.h
+2
-0
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/aclocal.h
+2
-0
drivers/acpi/acpica/acnamesp.h
drivers/acpi/acpica/acnamesp.h
+8
-0
drivers/acpi/acpica/acparser.h
drivers/acpi/acpica/acparser.h
+2
-0
drivers/acpi/acpica/actables.h
drivers/acpi/acpica/actables.h
+8
-4
drivers/acpi/acpica/acutils.h
drivers/acpi/acpica/acutils.h
+27
-26
drivers/acpi/acpica/dbconvert.c
drivers/acpi/acpica/dbconvert.c
+4
-3
drivers/acpi/acpica/dbexec.c
drivers/acpi/acpica/dbexec.c
+34
-28
drivers/acpi/acpica/dbfileio.c
drivers/acpi/acpica/dbfileio.c
+6
-14
drivers/acpi/acpica/dbinput.c
drivers/acpi/acpica/dbinput.c
+2
-0
drivers/acpi/acpica/dbmethod.c
drivers/acpi/acpica/dbmethod.c
+132
-0
drivers/acpi/acpica/dbobject.c
drivers/acpi/acpica/dbobject.c
+2
-2
drivers/acpi/acpica/dsmethod.c
drivers/acpi/acpica/dsmethod.c
+12
-2
drivers/acpi/acpica/dsutils.c
drivers/acpi/acpica/dsutils.c
+8
-9
drivers/acpi/acpica/dswexec.c
drivers/acpi/acpica/dswexec.c
+2
-1
drivers/acpi/acpica/dswload2.c
drivers/acpi/acpica/dswload2.c
+2
-5
drivers/acpi/acpica/evgpe.c
drivers/acpi/acpica/evgpe.c
+57
-0
drivers/acpi/acpica/evgpeinit.c
drivers/acpi/acpica/evgpeinit.c
+5
-2
drivers/acpi/acpica/evrgnini.c
drivers/acpi/acpica/evrgnini.c
+2
-1
drivers/acpi/acpica/evxfgpe.c
drivers/acpi/acpica/evxfgpe.c
+43
-0
drivers/acpi/acpica/exconcat.c
drivers/acpi/acpica/exconcat.c
+1
-1
drivers/acpi/acpica/exconfig.c
drivers/acpi/acpica/exconfig.c
+48
-93
drivers/acpi/acpica/exconvrt.c
drivers/acpi/acpica/exconvrt.c
+4
-4
drivers/acpi/acpica/exmisc.c
drivers/acpi/acpica/exmisc.c
+2
-2
drivers/acpi/acpica/exoparg1.c
drivers/acpi/acpica/exoparg1.c
+13
-10
drivers/acpi/acpica/exresop.c
drivers/acpi/acpica/exresop.c
+6
-5
drivers/acpi/acpica/extrace.c
drivers/acpi/acpica/extrace.c
+0
-25
drivers/acpi/acpica/exutils.c
drivers/acpi/acpica/exutils.c
+8
-0
drivers/acpi/acpica/hwgpe.c
drivers/acpi/acpica/hwgpe.c
+18
-5
drivers/acpi/acpica/nsaccess.c
drivers/acpi/acpica/nsaccess.c
+3
-3
drivers/acpi/acpica/nsconvert.c
drivers/acpi/acpica/nsconvert.c
+0
-1
drivers/acpi/acpica/nsdump.c
drivers/acpi/acpica/nsdump.c
+1
-1
drivers/acpi/acpica/nsload.c
drivers/acpi/acpica/nsload.c
+12
-18
drivers/acpi/acpica/nsparse.c
drivers/acpi/acpica/nsparse.c
+134
-31
drivers/acpi/acpica/nsutils.c
drivers/acpi/acpica/nsutils.c
+50
-16
drivers/acpi/acpica/psparse.c
drivers/acpi/acpica/psparse.c
+5
-1
drivers/acpi/acpica/psxface.c
drivers/acpi/acpica/psxface.c
+84
-0
drivers/acpi/acpica/tbdata.c
drivers/acpi/acpica/tbdata.c
+141
-6
drivers/acpi/acpica/tbfadt.c
drivers/acpi/acpica/tbfadt.c
+69
-67
drivers/acpi/acpica/tbfind.c
drivers/acpi/acpica/tbfind.c
+8
-4
drivers/acpi/acpica/tbinstal.c
drivers/acpi/acpica/tbinstal.c
+9
-64
drivers/acpi/acpica/tbutils.c
drivers/acpi/acpica/tbutils.c
+2
-1
drivers/acpi/acpica/tbxface.c
drivers/acpi/acpica/tbxface.c
+2
-2
drivers/acpi/acpica/tbxfload.c
drivers/acpi/acpica/tbxfload.c
+16
-50
drivers/acpi/acpica/tbxfroot.c
drivers/acpi/acpica/tbxfroot.c
+4
-1
drivers/acpi/acpica/utaddress.c
drivers/acpi/acpica/utaddress.c
+0
-8
drivers/acpi/acpica/utbuffer.c
drivers/acpi/acpica/utbuffer.c
+14
-16
drivers/acpi/acpica/utdebug.c
drivers/acpi/acpica/utdebug.c
+37
-24
drivers/acpi/acpica/utdecode.c
drivers/acpi/acpica/utdecode.c
+1
-1
drivers/acpi/acpica/uthex.c
drivers/acpi/acpica/uthex.c
+42
-4
drivers/acpi/acpica/utinit.c
drivers/acpi/acpica/utinit.c
+1
-1
drivers/acpi/acpica/utnonansi.c
drivers/acpi/acpica/utnonansi.c
+2
-355
drivers/acpi/acpica/utosi.c
drivers/acpi/acpica/utosi.c
+17
-5
drivers/acpi/acpica/utpredef.c
drivers/acpi/acpica/utpredef.c
+0
-2
drivers/acpi/acpica/utprint.c
drivers/acpi/acpica/utprint.c
+90
-15
drivers/acpi/acpica/utstrtoul64.c
drivers/acpi/acpica/utstrtoul64.c
+348
-0
drivers/acpi/acpica/uttrack.c
drivers/acpi/acpica/uttrack.c
+1
-3
drivers/acpi/acpica/utxface.c
drivers/acpi/acpica/utxface.c
+1
-1
drivers/acpi/acpica/utxfinit.c
drivers/acpi/acpica/utxfinit.c
+5
-4
include/acpi/acconfig.h
include/acpi/acconfig.h
+4
-0
include/acpi/acoutput.h
include/acpi/acoutput.h
+5
-1
include/acpi/acpiosxf.h
include/acpi/acpiosxf.h
+6
-37
include/acpi/acpixf.h
include/acpi/acpixf.h
+28
-16
include/acpi/actbl.h
include/acpi/actbl.h
+94
-70
include/acpi/actypes.h
include/acpi/actypes.h
+28
-36
include/acpi/platform/acenv.h
include/acpi/platform/acenv.h
+34
-56
include/acpi/platform/acenvex.h
include/acpi/platform/acenvex.h
+14
-7
include/acpi/platform/acgcc.h
include/acpi/platform/acgcc.h
+6
-11
include/acpi/platform/acgccex.h
include/acpi/platform/acgccex.h
+58
-0
include/acpi/platform/aclinux.h
include/acpi/platform/aclinux.h
+14
-8
include/acpi/platform/aclinuxex.h
include/acpi/platform/aclinuxex.h
+1
-1
tools/power/acpi/common/cmfsize.c
tools/power/acpi/common/cmfsize.c
+6
-7
tools/power/acpi/common/getopt.c
tools/power/acpi/common/getopt.c
+2
-2
tools/power/acpi/os_specific/service_layers/osunixxf.c
tools/power/acpi/os_specific/service_layers/osunixxf.c
+0
-3
tools/power/acpi/tools/acpidump/Makefile
tools/power/acpi/tools/acpidump/Makefile
+2
-1
tools/power/acpi/tools/acpidump/acpidump.h
tools/power/acpi/tools/acpidump/acpidump.h
+1
-11
tools/power/acpi/tools/acpidump/apdump.c
tools/power/acpi/tools/acpidump/apdump.c
+38
-37
tools/power/acpi/tools/acpidump/apfiles.c
tools/power/acpi/tools/acpidump/apfiles.c
+28
-28
tools/power/acpi/tools/acpidump/apmain.c
tools/power/acpi/tools/acpidump/apmain.c
+19
-18
No files found.
drivers/acpi/acpica/Makefile
View file @
f42106fe
...
...
@@ -175,6 +175,7 @@ acpi-y += \
utresrc.o
\
utstate.o
\
utstring.o
\
utstrtoul64.o
\
utxface.o
\
utxfinit.o
\
utxferror.o
\
...
...
drivers/acpi/acpica/acapps.h
View file @
f42106fe
...
...
@@ -44,7 +44,9 @@
#ifndef _ACAPPS
#define _ACAPPS
#include <stdio.h>
#ifdef ACPI_USE_STANDARD_HEADERS
#include <sys/stat.h>
#endif
/* ACPI_USE_STANDARD_HEADERS */
/* Common info for tool signons */
...
...
@@ -81,13 +83,13 @@
/* Macros for usage messages */
#define ACPI_USAGE_HEADER(usage) \
acpi_os_
printf ("Usage: %s\nOptions:\n", usage);
printf ("Usage: %s\nOptions:\n", usage);
#define ACPI_USAGE_TEXT(description) \
acpi_os_
printf (description);
printf (description);
#define ACPI_OPTION(name, description) \
acpi_os_printf ("
%-20s%s\n", name, description);
printf ("
%-20s%s\n", name, description);
/* Check for unexpected exceptions */
...
...
drivers/acpi/acpica/acdebug.h
View file @
f42106fe
...
...
@@ -155,7 +155,7 @@ acpi_status acpi_db_disassemble_method(char *name);
void
acpi_db_disassemble_aml
(
char
*
statements
,
union
acpi_parse_object
*
op
);
void
acpi_db_
batch_execute
(
char
*
count_arg
);
void
acpi_db_
evaluate_predefined_names
(
void
);
/*
* dbnames - namespace commands
...
...
drivers/acpi/acpica/acevents.h
View file @
f42106fe
...
...
@@ -85,6 +85,9 @@ acpi_ev_update_gpe_enable_mask(struct acpi_gpe_event_info *gpe_event_info);
acpi_status
acpi_ev_enable_gpe
(
struct
acpi_gpe_event_info
*
gpe_event_info
);
acpi_status
acpi_ev_mask_gpe
(
struct
acpi_gpe_event_info
*
gpe_event_info
,
u8
is_masked
);
acpi_status
acpi_ev_add_gpe_reference
(
struct
acpi_gpe_event_info
*
gpe_event_info
);
...
...
drivers/acpi/acpica/acglobal.h
View file @
f42106fe
...
...
@@ -317,6 +317,7 @@ 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
(
u8
,
acpi_gbl_dm_opt_verbose
,
TRUE
);
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_dm_emit_external_opcodes
,
FALSE
);
ACPI_GLOBAL
(
u8
,
acpi_gbl_dm_opt_disasm
);
ACPI_GLOBAL
(
u8
,
acpi_gbl_dm_opt_listing
);
...
...
@@ -382,6 +383,7 @@ ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]);
ACPI_INIT_GLOBAL
(
ACPI_FILE
,
acpi_gbl_debug_file
,
NULL
);
ACPI_INIT_GLOBAL
(
ACPI_FILE
,
acpi_gbl_output_file
,
NULL
);
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_debug_timeout
,
FALSE
);
/* Print buffer */
...
...
drivers/acpi/acpica/aclocal.h
View file @
f42106fe
...
...
@@ -484,6 +484,7 @@ struct acpi_gpe_event_info {
u8
flags
;
/* Misc info about this GPE */
u8
gpe_number
;
/* This GPE */
u8
runtime_count
;
/* References to a run GPE */
u8
disable_for_dispatch
;
/* Masked during dispatching */
};
/* Information about a GPE register pair, one per each status/enable pair in an array */
...
...
@@ -494,6 +495,7 @@ struct acpi_gpe_register_info {
u16
base_gpe_number
;
/* Base GPE number for this register */
u8
enable_for_wake
;
/* GPEs to keep enabled when sleeping */
u8
enable_for_run
;
/* GPEs to keep enabled when running */
u8
mask_for_run
;
/* GPEs to keep masked when running */
u8
enable_mask
;
/* Current mask of enabled GPEs */
};
...
...
drivers/acpi/acpica/acnamesp.h
View file @
f42106fe
...
...
@@ -129,6 +129,9 @@ struct acpi_namespace_node *acpi_ns_get_next_node_typed(acpi_object_type type,
acpi_status
acpi_ns_parse_table
(
u32
table_index
,
struct
acpi_namespace_node
*
start_node
);
acpi_status
acpi_ns_execute_table
(
u32
table_index
,
struct
acpi_namespace_node
*
start_node
);
acpi_status
acpi_ns_one_complete_parse
(
u32
pass_number
,
u32
table_index
,
...
...
@@ -295,6 +298,11 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle,
u8
acpi_ns_pattern_match
(
struct
acpi_namespace_node
*
obj_node
,
char
*
search_for
);
acpi_status
acpi_ns_get_node_unlocked
(
struct
acpi_namespace_node
*
prefix_node
,
const
char
*
external_pathname
,
u32
flags
,
struct
acpi_namespace_node
**
out_node
);
acpi_status
acpi_ns_get_node
(
struct
acpi_namespace_node
*
prefix_node
,
const
char
*
external_pathname
,
...
...
drivers/acpi/acpica/acparser.h
View file @
f42106fe
...
...
@@ -78,6 +78,8 @@ extern const u8 acpi_gbl_long_op_index[];
*/
acpi_status
acpi_ps_execute_method
(
struct
acpi_evaluate_info
*
info
);
acpi_status
acpi_ps_execute_table
(
struct
acpi_evaluate_info
*
info
);
/*
* psargs - Parse AML opcode arguments
*/
...
...
drivers/acpi/acpica/actables.h
View file @
f42106fe
...
...
@@ -123,6 +123,14 @@ acpi_tb_install_standard_table(acpi_physical_address address,
void
acpi_tb_uninstall_table
(
struct
acpi_table_desc
*
table_desc
);
acpi_status
acpi_tb_load_table
(
u32
table_index
,
struct
acpi_namespace_node
*
parent_node
);
acpi_status
acpi_tb_install_and_load_table
(
struct
acpi_table_header
*
table
,
acpi_physical_address
address
,
u8
flags
,
u8
override
,
u32
*
table_index
);
void
acpi_tb_terminate
(
void
);
acpi_status
acpi_tb_delete_namespace_by_owner
(
u32
table_index
);
...
...
@@ -155,10 +163,6 @@ void
acpi_tb_install_table_with_override
(
struct
acpi_table_desc
*
new_table_desc
,
u8
override
,
u32
*
table_index
);
acpi_status
acpi_tb_install_fixed_table
(
acpi_physical_address
address
,
char
*
signature
,
u32
*
table_index
);
acpi_status
acpi_tb_parse_root_table
(
acpi_physical_address
rsdp_address
);
/*
...
...
drivers/acpi/acpica/acutils.h
View file @
f42106fe
...
...
@@ -114,13 +114,25 @@ extern const char *acpi_gbl_pt_decode[];
/*
* Common error message prefixes
*/
#ifndef ACPI_MSG_ERROR
#define ACPI_MSG_ERROR "ACPI Error: "
#endif
#ifndef ACPI_MSG_EXCEPTION
#define ACPI_MSG_EXCEPTION "ACPI Exception: "
#endif
#ifndef ACPI_MSG_WARNING
#define ACPI_MSG_WARNING "ACPI Warning: "
#endif
#ifndef ACPI_MSG_INFO
#define ACPI_MSG_INFO "ACPI: "
#endif
#ifndef ACPI_MSG_BIOS_ERROR
#define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): "
#endif
#ifndef ACPI_MSG_BIOS_WARNING
#define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): "
#endif
/*
* Common message suffix
...
...
@@ -184,14 +196,15 @@ void acpi_ut_strlwr(char *src_string);
int
acpi_ut_stricmp
(
char
*
string1
,
char
*
string2
);
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
base
,
u32
max_integer_byte_width
,
u64
*
ret_integer
);
/* Values for max_integer_byte_width above */
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
flags
,
u64
*
ret_integer
);
#define ACPI_MAX32_BYTE_WIDTH 4
#define ACPI_MAX64_BYTE_WIDTH 8
/*
* Values for Flags above
* Note: LIMIT values correspond to acpi_gbl_integer_byte_width values (4/8)
*/
#define ACPI_STRTOUL_32BIT 0x04
/* 4 bytes */
#define ACPI_STRTOUL_64BIT 0x08
/* 8 bytes */
#define ACPI_STRTOUL_BASE16 0x10
/* Default: Base10/16 */
/*
* utglobal - Global data structures and procedures
...
...
@@ -221,6 +234,8 @@ const char *acpi_ut_get_event_name(u32 event_id);
char
acpi_ut_hex_to_ascii_char
(
u64
integer
,
u32
position
);
acpi_status
acpi_ut_ascii_to_hex_byte
(
char
*
two_ascii_chars
,
u8
*
return_byte
);
u8
acpi_ut_ascii_char_to_hex
(
int
hex_char
);
u8
acpi_ut_valid_object_type
(
acpi_object_type
type
);
...
...
@@ -317,6 +332,11 @@ acpi_ut_ptr_exit(u32 line_number,
const
char
*
function_name
,
const
char
*
module_name
,
u32
component_id
,
u8
*
ptr
);
void
acpi_ut_str_exit
(
u32
line_number
,
const
char
*
function_name
,
const
char
*
module_name
,
u32
component_id
,
const
char
*
string
);
void
acpi_ut_debug_dump_buffer
(
u8
*
buffer
,
u32
count
,
u32
display
,
u32
component_id
);
...
...
@@ -706,25 +726,6 @@ const struct ah_device_id *acpi_ah_match_hardware_id(char *hid);
const
char
*
acpi_ah_match_uuid
(
u8
*
data
);
/*
* utprint - printf/vprintf output functions
*/
const
char
*
acpi_ut_scan_number
(
const
char
*
string
,
u64
*
number_ptr
);
const
char
*
acpi_ut_print_number
(
char
*
string
,
u64
number
);
int
acpi_ut_vsnprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
va_list
args
);
int
acpi_ut_snprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
...);
#ifdef ACPI_APPLICATION
int
acpi_ut_file_vprintf
(
ACPI_FILE
file
,
const
char
*
format
,
va_list
args
);
int
acpi_ut_file_printf
(
ACPI_FILE
file
,
const
char
*
format
,
...);
#endif
/*
* utuuid -- UUID support functions
*/
...
...
drivers/acpi/acpica/dbconvert.c
View file @
f42106fe
...
...
@@ -277,8 +277,9 @@ acpi_db_convert_to_object(acpi_object_type type,
default:
object
->
type
=
ACPI_TYPE_INTEGER
;
status
=
acpi_ut_strtoul64
(
string
,
16
,
acpi_gbl_integer_byte_width
,
status
=
acpi_ut_strtoul64
(
string
,
(
acpi_gbl_integer_byte_width
|
ACPI_STRTOUL_BASE16
),
&
object
->
integer
.
value
);
break
;
}
...
...
drivers/acpi/acpica/dbexec.c
View file @
f42106fe
...
...
@@ -392,17 +392,25 @@ acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags)
acpi_db_execution_walk
,
NULL
,
NULL
,
NULL
);
return
;
}
else
{
}
name_string
=
ACPI_ALLOCATE
(
strlen
(
name
)
+
1
);
if
(
!
name_string
)
{
return
;
}
memset
(
&
acpi_gbl_db_method_info
,
0
,
sizeof
(
struct
acpi_db_method_info
));
memset
(
&
acpi_gbl_db_method_info
,
0
,
sizeof
(
struct
acpi_db_method_info
));
strcpy
(
name_string
,
name
);
acpi_ut_strupr
(
name_string
);
/* Subcommand to Execute all predefined names in the namespace */
if
(
!
strncmp
(
name_string
,
"PREDEF"
,
6
))
{
acpi_db_evaluate_predefined_names
();
ACPI_FREE
(
name_string
);
return
;
}
acpi_gbl_db_method_info
.
name
=
name_string
;
acpi_gbl_db_method_info
.
args
=
args
;
acpi_gbl_db_method_info
.
types
=
types
;
...
...
@@ -422,12 +430,10 @@ acpi_db_execute(char *name, char **args, acpi_object_type *types, u32 flags)
status
=
acpi_get_handle
(
NULL
,
acpi_gbl_db_method_info
.
pathname
,
&
acpi_gbl_db_method_info
.
method
);
if
(
ACPI_SUCCESS
(
status
))
{
status
=
acpi_db_execute_method
(
&
acpi_gbl_db_method_info
,
status
=
acpi_db_execute_method
(
&
acpi_gbl_db_method_info
,
&
return_obj
);
}
ACPI_FREE
(
name_string
);
}
/*
* Allow any handlers in separate threads to complete.
...
...
drivers/acpi/acpica/dbfileio.c
View file @
f42106fe
...
...
@@ -46,14 +46,12 @@
#include "accommon.h"
#include "acdebug.h"
#include "actables.h"
#include <stdio.h>
#ifdef ACPI_APPLICATION
#include "acapps.h"
#endif
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME
(
"dbfileio"
)
#ifdef ACPI_APPLICATION
#include "acapps.h"
#ifdef ACPI_DEBUGGER
/*******************************************************************************
*
...
...
@@ -69,8 +67,6 @@ ACPI_MODULE_NAME("dbfileio")
void
acpi_db_close_debug_file
(
void
)
{
#ifdef ACPI_APPLICATION
if
(
acpi_gbl_debug_file
)
{
fclose
(
acpi_gbl_debug_file
);
acpi_gbl_debug_file
=
NULL
;
...
...
@@ -78,7 +74,6 @@ void acpi_db_close_debug_file(void)
acpi_os_printf
(
"Debug output file %s closed
\n
"
,
acpi_gbl_db_debug_filename
);
}
#endif
}
/*******************************************************************************
...
...
@@ -96,8 +91,6 @@ void acpi_db_close_debug_file(void)
void
acpi_db_open_debug_file
(
char
*
name
)
{
#ifdef ACPI_APPLICATION
acpi_db_close_debug_file
();
acpi_gbl_debug_file
=
fopen
(
name
,
"w+"
);
if
(
!
acpi_gbl_debug_file
)
{
...
...
@@ -109,8 +102,6 @@ void acpi_db_open_debug_file(char *name)
strncpy
(
acpi_gbl_db_debug_filename
,
name
,
sizeof
(
acpi_gbl_db_debug_filename
));
acpi_gbl_db_output_to_file
=
TRUE
;
#endif
}
#endif
...
...
@@ -152,8 +143,8 @@ acpi_status acpi_db_load_tables(struct acpi_new_table_desc *list_head)
return
(
status
);
}
fprintf
(
stderr
,
"Acpi table [%4.4s] successfully installed and loaded
\n
"
,
acpi_os_printf
(
"Acpi table [%4.4s] successfully installed and loaded
\n
"
,
table
->
signature
);
table_list_head
=
table_list_head
->
next
;
...
...
@@ -161,3 +152,4 @@ acpi_status acpi_db_load_tables(struct acpi_new_table_desc *list_head)
return
(
AE_OK
);
}
#endif
drivers/acpi/acpica/dbinput.c
View file @
f42106fe
...
...
@@ -286,6 +286,8 @@ static const struct acpi_db_command_help acpi_gbl_db_command_help[] = {
{
1
,
"
\"
Ascii String
\"
"
,
"String method argument
\n
"
},
{
1
,
" (Hex Byte List)"
,
"Buffer method argument
\n
"
},
{
1
,
" [Package Element List]"
,
"Package method argument
\n
"
},
{
5
,
" Execute predefined"
,
"Execute all predefined (public) methods
\n
"
},
{
1
,
" Go"
,
"Allow method to run to completion
\n
"
},
{
1
,
" Information"
,
"Display info about the current method
\n
"
},
{
1
,
" Into"
,
"Step into (not over) a method call
\n
"
},
...
...
drivers/acpi/acpica/dbmethod.c
View file @
f42106fe
...
...
@@ -52,6 +52,11 @@
#define _COMPONENT ACPI_CA_DEBUGGER
ACPI_MODULE_NAME
(
"dbmethod"
)
/* Local prototypes */
static
acpi_status
acpi_db_walk_for_execute
(
acpi_handle
obj_handle
,
u32
nesting_level
,
void
*
context
,
void
**
return_value
);
/*******************************************************************************
*
* FUNCTION: acpi_db_set_method_breakpoint
...
...
@@ -66,6 +71,7 @@ ACPI_MODULE_NAME("dbmethod")
* AML offset
*
******************************************************************************/
void
acpi_db_set_method_breakpoint
(
char
*
location
,
struct
acpi_walk_state
*
walk_state
,
...
...
@@ -367,3 +373,129 @@ acpi_status acpi_db_disassemble_method(char *name)
acpi_ut_release_owner_id
(
&
obj_desc
->
method
.
owner_id
);
return
(
AE_OK
);
}
/*******************************************************************************
*
* FUNCTION: acpi_db_walk_for_execute
*
* PARAMETERS: Callback from walk_namespace
*
* RETURN: Status
*
* DESCRIPTION: Batch execution module. Currently only executes predefined
* ACPI names.
*
******************************************************************************/
static
acpi_status
acpi_db_walk_for_execute
(
acpi_handle
obj_handle
,
u32
nesting_level
,
void
*
context
,
void
**
return_value
)
{
struct
acpi_namespace_node
*
node
=
(
struct
acpi_namespace_node
*
)
obj_handle
;
struct
acpi_db_execute_walk
*
info
=
(
struct
acpi_db_execute_walk
*
)
context
;
struct
acpi_buffer
return_obj
;
acpi_status
status
;
char
*
pathname
;
u32
i
;
struct
acpi_device_info
*
obj_info
;
struct
acpi_object_list
param_objects
;
union
acpi_object
params
[
ACPI_METHOD_NUM_ARGS
];
const
union
acpi_predefined_info
*
predefined
;
predefined
=
acpi_ut_match_predefined_method
(
node
->
name
.
ascii
);
if
(
!
predefined
)
{
return
(
AE_OK
);
}
if
(
node
->
type
==
ACPI_TYPE_LOCAL_SCOPE
)
{
return
(
AE_OK
);
}
pathname
=
acpi_ns_get_external_pathname
(
node
);
if
(
!
pathname
)
{
return
(
AE_OK
);
}
/* Get the object info for number of method parameters */
status
=
acpi_get_object_info
(
obj_handle
,
&
obj_info
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
param_objects
.
pointer
=
NULL
;
param_objects
.
count
=
0
;
if
(
obj_info
->
type
==
ACPI_TYPE_METHOD
)
{
/* Setup default parameters */
for
(
i
=
0
;
i
<
obj_info
->
param_count
;
i
++
)
{
params
[
i
].
type
=
ACPI_TYPE_INTEGER
;
params
[
i
].
integer
.
value
=
1
;
}
param_objects
.
pointer
=
params
;
param_objects
.
count
=
obj_info
->
param_count
;
}
ACPI_FREE
(
obj_info
);
return_obj
.
pointer
=
NULL
;
return_obj
.
length
=
ACPI_ALLOCATE_BUFFER
;
/* Do the actual method execution */
acpi_gbl_method_executing
=
TRUE
;
status
=
acpi_evaluate_object
(
node
,
NULL
,
&
param_objects
,
&
return_obj
);
acpi_os_printf
(
"%-32s returned %s
\n
"
,
pathname
,
acpi_format_exception
(
status
));
acpi_gbl_method_executing
=
FALSE
;
ACPI_FREE
(
pathname
);
/* Ignore status from method execution */
status
=
AE_OK
;
/* Update count, check if we have executed enough methods */
info
->
count
++
;
if
(
info
->
count
>=
info
->
max_count
)
{
status
=
AE_CTRL_TERMINATE
;
}
return
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_db_evaluate_predefined_names
*
* PARAMETERS: None
*
* RETURN: None
*
* DESCRIPTION: Namespace batch execution. Execute predefined names in the
* namespace, up to the max count, if specified.
*
******************************************************************************/
void
acpi_db_evaluate_predefined_names
(
void
)
{
struct
acpi_db_execute_walk
info
;
info
.
count
=
0
;
info
.
max_count
=
ACPI_UINT32_MAX
;
/* Search all nodes in namespace */
(
void
)
acpi_walk_namespace
(
ACPI_TYPE_ANY
,
ACPI_ROOT_OBJECT
,
ACPI_UINT32_MAX
,
acpi_db_walk_for_execute
,
NULL
,
(
void
*
)
&
info
,
NULL
);
acpi_os_printf
(
"Evaluated %u predefined names in the namespace
\n
"
,
info
.
count
);
}
drivers/acpi/acpica/dbobject.c
View file @
f42106fe
...
...
@@ -142,11 +142,11 @@ void acpi_db_decode_internal_object(union acpi_operand_object *obj_desc)
case
ACPI_TYPE_STRING
:
acpi_os_printf
(
"(%u)
\"
%.
24
s"
,
acpi_os_printf
(
"(%u)
\"
%.
60
s"
,
obj_desc
->
string
.
length
,
obj_desc
->
string
.
pointer
);
if
(
obj_desc
->
string
.
length
>
24
)
{
if
(
obj_desc
->
string
.
length
>
60
)
{
acpi_os_printf
(
"..."
);
}
else
{
acpi_os_printf
(
"
\"
"
);
...
...
drivers/acpi/acpica/dsmethod.c
View file @
f42106fe
...
...
@@ -99,11 +99,14 @@ acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
"Method auto-serialization parse [%4.4s] %p
\n
"
,
acpi_ut_get_node_name
(
node
),
node
));
acpi_ex_enter_interpreter
();
/* Create/Init a root op for the method parse tree */
op
=
acpi_ps_alloc_op
(
AML_METHOD_OP
,
obj_desc
->
method
.
aml_start
);
if
(
!
op
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
unlock
;
}
acpi_ps_set_name
(
op
,
node
->
name
.
integer
);
...
...
@@ -115,7 +118,8 @@ acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
acpi_ds_create_walk_state
(
node
->
owner_id
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
acpi_ps_free_op
(
op
);
return_ACPI_STATUS
(
AE_NO_MEMORY
);
status
=
AE_NO_MEMORY
;
goto
unlock
;
}
status
=
acpi_ds_init_aml_walk
(
walk_state
,
op
,
node
,
...
...
@@ -134,6 +138,8 @@ acpi_ds_auto_serialize_method(struct acpi_namespace_node *node,
status
=
acpi_ps_parse_aml
(
walk_state
);
acpi_ps_delete_parse_tree
(
op
);
unlock:
acpi_ex_exit_interpreter
();
return_ACPI_STATUS
(
status
);
}
...
...
@@ -757,8 +763,10 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
/* Delete any direct children of (created by) this method */
(
void
)
acpi_ex_exit_interpreter
();
acpi_ns_delete_namespace_subtree
(
walk_state
->
method_node
);
(
void
)
acpi_ex_enter_interpreter
();
/*
* Delete any objects that were created by this method
...
...
@@ -769,9 +777,11 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc,
*/
if
(
method_desc
->
method
.
info_flags
&
ACPI_METHOD_MODIFIED_NAMESPACE
)
{
(
void
)
acpi_ex_exit_interpreter
();
acpi_ns_delete_namespace_by_owner
(
method_desc
->
method
.
owner_id
);
(
void
)
acpi_ex_enter_interpreter
();
method_desc
->
method
.
info_flags
&=
~
ACPI_METHOD_MODIFIED_NAMESPACE
;
}
...
...
drivers/acpi/acpica/dsutils.c
View file @
f42106fe
...
...
@@ -565,15 +565,14 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,
status
=
AE_OK
;
}
else
if
(
parent_op
->
common
.
aml_opcode
==
AML_EXTERNAL_OP
)
{
/* TBD: May only be temporary */
obj_desc
=
acpi_ut_create_string_object
((
acpi_size
)
name_length
);
strncpy
(
obj_desc
->
string
.
pointer
,
name_string
,
name_length
);
status
=
AE_OK
;
/*
* This opcode should never appear here. It is used only
* by AML disassemblers and is surrounded by an If(0)
* by the ASL compiler.
*
* Therefore, if we see it here, it is a serious error.
*/
status
=
AE_AML_BAD_OPCODE
;
}
else
{
/*
* We just plain didn't find it -- which is a
...
...
drivers/acpi/acpica/dswexec.c
View file @
f42106fe
...
...
@@ -133,7 +133,8 @@ acpi_ds_get_predicate_value(struct acpi_walk_state *walk_state,
* Result of predicate evaluation must be an Integer
* object. Implicitly convert the argument if necessary.
*/
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
&
local_obj_desc
,
16
);
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
&
local_obj_desc
,
ACPI_STRTOUL_BASE16
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
...
...
drivers/acpi/acpica/dswload2.c
View file @
f42106fe
...
...
@@ -605,16 +605,13 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
acpi_ex_exit_interpreter
();
}
acpi_ex_exit_interpreter
();
status
=
acpi_ev_initialize_region
(
acpi_ns_get_attached_object
(
node
),
FALSE
);
if
(
walk_state
->
method_node
)
{
acpi_ex_enter_interpreter
();
}
if
(
ACPI_FAILURE
(
status
))
{
/*
...
...
drivers/acpi/acpica/evgpe.c
View file @
f42106fe
...
...
@@ -128,6 +128,60 @@ acpi_status acpi_ev_enable_gpe(struct acpi_gpe_event_info *gpe_event_info)
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ev_mask_gpe
*
* PARAMETERS: gpe_event_info - GPE to be blocked/unblocked
* is_masked - Whether the GPE is masked or not
*
* RETURN: Status
*
* DESCRIPTION: Unconditionally mask/unmask a GPE during runtime.
*
******************************************************************************/
acpi_status
acpi_ev_mask_gpe
(
struct
acpi_gpe_event_info
*
gpe_event_info
,
u8
is_masked
)
{
struct
acpi_gpe_register_info
*
gpe_register_info
;
u32
register_bit
;
ACPI_FUNCTION_TRACE
(
ev_mask_gpe
);
gpe_register_info
=
gpe_event_info
->
register_info
;
if
(
!
gpe_register_info
)
{
return_ACPI_STATUS
(
AE_NOT_EXIST
);
}
register_bit
=
acpi_hw_get_gpe_register_bit
(
gpe_event_info
);
/* Perform the action */
if
(
is_masked
)
{
if
(
register_bit
&
gpe_register_info
->
mask_for_run
)
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
(
void
)
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_DISABLE
);
ACPI_SET_BIT
(
gpe_register_info
->
mask_for_run
,
(
u8
)
register_bit
);
}
else
{
if
(
!
(
register_bit
&
gpe_register_info
->
mask_for_run
))
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
ACPI_CLEAR_BIT
(
gpe_register_info
->
mask_for_run
,
(
u8
)
register_bit
);
if
(
gpe_event_info
->
runtime_count
&&
!
gpe_event_info
->
disable_for_dispatch
)
{
(
void
)
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_ENABLE
);
}
}
return_ACPI_STATUS
(
AE_OK
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ev_add_gpe_reference
...
...
@@ -674,6 +728,7 @@ acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info)
* in the event_info.
*/
(
void
)
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_CONDITIONAL_ENABLE
);
gpe_event_info
->
disable_for_dispatch
=
FALSE
;
return
(
AE_OK
);
}
...
...
@@ -737,6 +792,8 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,
}
}
gpe_event_info
->
disable_for_dispatch
=
TRUE
;
/*
* Dispatch the GPE to either an installed handler or the control
* method associated with this GPE (_Lxx or _Exx). If a handler
...
...
drivers/acpi/acpica/evgpeinit.c
View file @
f42106fe
...
...
@@ -323,7 +323,9 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
struct
acpi_gpe_walk_info
*
walk_info
=
ACPI_CAST_PTR
(
struct
acpi_gpe_walk_info
,
context
);
struct
acpi_gpe_event_info
*
gpe_event_info
;
acpi_status
status
;
u32
gpe_number
;
u8
temp_gpe_number
;
char
name
[
ACPI_NAME_SIZE
+
1
];
u8
type
;
...
...
@@ -377,8 +379,8 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
/* 4) The last two characters of the name are the hex GPE Number */
gpe_number
=
strtoul
(
&
name
[
2
],
NULL
,
16
);
if
(
gpe_number
==
ACPI_UINT32_MAX
)
{
status
=
acpi_ut_ascii_to_hex_byte
(
&
name
[
2
],
&
temp_gpe_number
);
if
(
ACPI_FAILURE
(
status
)
)
{
/* Conversion failed; invalid method, just ignore it */
...
...
@@ -390,6 +392,7 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle,
/* Ensure that we have a valid GPE number for this GPE block */
gpe_number
=
(
u32
)
temp_gpe_number
;
gpe_event_info
=
acpi_ev_low_get_gpe_info
(
gpe_number
,
walk_info
->
gpe_block
);
if
(
!
gpe_event_info
)
{
...
...
drivers/acpi/acpica/evrgnini.c
View file @
f42106fe
...
...
@@ -553,7 +553,8 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj,
*
* See acpi_ns_exec_module_code
*/
if
(
obj_desc
->
method
.
if
(
!
acpi_gbl_parse_table_as_term_list
&&
obj_desc
->
method
.
info_flags
&
ACPI_METHOD_MODULE_LEVEL
)
{
handler_obj
=
obj_desc
->
method
.
dispatch
.
handler
;
...
...
drivers/acpi/acpica/evxfgpe.c
View file @
f42106fe
...
...
@@ -235,11 +235,13 @@ acpi_status acpi_set_gpe(acpi_handle gpe_device, u32 gpe_number, u8 action)
case
ACPI_GPE_ENABLE
:
status
=
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_ENABLE
);
gpe_event_info
->
disable_for_dispatch
=
FALSE
;
break
;
case
ACPI_GPE_DISABLE
:
status
=
acpi_hw_low_set_gpe
(
gpe_event_info
,
ACPI_GPE_DISABLE
);
gpe_event_info
->
disable_for_dispatch
=
TRUE
;
break
;
default:
...
...
@@ -255,6 +257,47 @@ acpi_status acpi_set_gpe(acpi_handle gpe_device, u32 gpe_number, u8 action)
ACPI_EXPORT_SYMBOL
(
acpi_set_gpe
)
/*******************************************************************************
*
* FUNCTION: acpi_mask_gpe
*
* PARAMETERS: gpe_device - Parent GPE Device. NULL for GPE0/GPE1
* gpe_number - GPE level within the GPE block
* is_masked - Whether the GPE is masked or not
*
* RETURN: Status
*
* DESCRIPTION: Unconditionally mask/unmask the an individual GPE, ex., to
* prevent a GPE flooding.
*
******************************************************************************/
acpi_status
acpi_mask_gpe
(
acpi_handle
gpe_device
,
u32
gpe_number
,
u8
is_masked
)
{
struct
acpi_gpe_event_info
*
gpe_event_info
;
acpi_status
status
;
acpi_cpu_flags
flags
;
ACPI_FUNCTION_TRACE
(
acpi_mask_gpe
);
flags
=
acpi_os_acquire_lock
(
acpi_gbl_gpe_lock
);
/* Ensure that we have a valid GPE number */
gpe_event_info
=
acpi_ev_get_gpe_event_info
(
gpe_device
,
gpe_number
);
if
(
!
gpe_event_info
)
{
status
=
AE_BAD_PARAMETER
;
goto
unlock_and_exit
;
}
status
=
acpi_ev_mask_gpe
(
gpe_event_info
,
is_masked
);
unlock_and_exit:
acpi_os_release_lock
(
acpi_gbl_gpe_lock
,
flags
);
return_ACPI_STATUS
(
status
);
}
ACPI_EXPORT_SYMBOL
(
acpi_mask_gpe
)
/*******************************************************************************
*
* FUNCTION: acpi_mark_gpe_for_wake
...
...
drivers/acpi/acpica/exconcat.c
View file @
f42106fe
...
...
@@ -156,7 +156,7 @@ acpi_ex_do_concatenate(union acpi_operand_object *operand0,
status
=
acpi_ex_convert_to_integer
(
local_operand1
,
&
temp_operand1
,
16
);
ACPI_STRTOUL_BASE
16
);
break
;
case
ACPI_TYPE_BUFFER
:
...
...
drivers/acpi/acpica/exconfig.c
View file @
f42106fe
...
...
@@ -55,9 +55,7 @@ ACPI_MODULE_NAME("exconfig")
/* Local prototypes */
static
acpi_status
acpi_ex_add_table
(
u32
table_index
,
struct
acpi_namespace_node
*
parent_node
,
union
acpi_operand_object
**
ddb_handle
);
acpi_ex_add_table
(
u32
table_index
,
union
acpi_operand_object
**
ddb_handle
);
static
acpi_status
acpi_ex_region_read
(
union
acpi_operand_object
*
obj_desc
,
...
...
@@ -79,13 +77,9 @@ acpi_ex_region_read(union acpi_operand_object *obj_desc,
******************************************************************************/
static
acpi_status
acpi_ex_add_table
(
u32
table_index
,
struct
acpi_namespace_node
*
parent_node
,
union
acpi_operand_object
**
ddb_handle
)
acpi_ex_add_table
(
u32
table_index
,
union
acpi_operand_object
**
ddb_handle
)
{
union
acpi_operand_object
*
obj_desc
;
acpi_status
status
;
acpi_owner_id
owner_id
;
ACPI_FUNCTION_TRACE
(
ex_add_table
);
...
...
@@ -100,39 +94,8 @@ acpi_ex_add_table(u32 table_index,
obj_desc
->
common
.
flags
|=
AOPOBJ_DATA_VALID
;
obj_desc
->
reference
.
class
=
ACPI_REFCLASS_TABLE
;
*
ddb_handle
=
obj_desc
;
/* Install the new table into the local data structures */
obj_desc
->
reference
.
value
=
table_index
;
/* Add the table to the namespace */
status
=
acpi_ns_load_table
(
table_index
,
parent_node
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_ut_remove_reference
(
obj_desc
);
*
ddb_handle
=
NULL
;
return_ACPI_STATUS
(
status
);
}
/* Execute any module-level code that was found in the table */
acpi_ex_exit_interpreter
();
if
(
acpi_gbl_group_module_level_code
)
{
acpi_ns_exec_module_code_list
();
}
acpi_ex_enter_interpreter
();
/*
* Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is
* responsible for discovering any new wake GPEs by running _PRW methods
* that may have been loaded by this table.
*/
status
=
acpi_tb_get_owner_id
(
table_index
,
&
owner_id
);
if
(
ACPI_SUCCESS
(
status
))
{
acpi_ev_update_gpes
(
owner_id
);
}
*
ddb_handle
=
obj_desc
;
return_ACPI_STATUS
(
AE_OK
);
}
...
...
@@ -159,16 +122,17 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
struct
acpi_namespace_node
*
start_node
;
struct
acpi_namespace_node
*
parameter_node
=
NULL
;
union
acpi_operand_object
*
ddb_handle
;
struct
acpi_table_header
*
table
;
u32
table_index
;
ACPI_FUNCTION_TRACE
(
ex_load_table_op
);
/* Find the ACPI table in the RSDT/XSDT */
acpi_ex_exit_interpreter
();
status
=
acpi_tb_find_table
(
operand
[
0
]
->
string
.
pointer
,
operand
[
1
]
->
string
.
pointer
,
operand
[
2
]
->
string
.
pointer
,
&
table_index
);
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
!=
AE_NOT_FOUND
)
{
return_ACPI_STATUS
(
status
);
...
...
@@ -197,9 +161,10 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
* Find the node referenced by the root_path_string. This is the
* location within the namespace where the table will be loaded.
*/
status
=
acpi_ns_get_node
(
start_node
,
operand
[
3
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
&
parent_node
);
status
=
acpi_ns_get_node_unlocked
(
start_node
,
operand
[
3
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
&
parent_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -219,9 +184,10 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
/* Find the node referenced by the parameter_path_string */
status
=
acpi_ns_get_node
(
start_node
,
operand
[
4
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
&
parameter_node
);
status
=
acpi_ns_get_node_unlocked
(
start_node
,
operand
[
4
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
&
parameter_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -229,7 +195,15 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
/* Load the table into the namespace */
status
=
acpi_ex_add_table
(
table_index
,
parent_node
,
&
ddb_handle
);
ACPI_INFO
((
"Dynamic OEM Table Load:"
));
acpi_ex_exit_interpreter
();
status
=
acpi_tb_load_table
(
table_index
,
parent_node
);
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
status
=
acpi_ex_add_table
(
table_index
,
&
ddb_handle
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -252,19 +226,6 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
}
}
status
=
acpi_get_table_by_index
(
table_index
,
&
table
);
if
(
ACPI_SUCCESS
(
status
))
{
ACPI_INFO
((
"Dynamic OEM Table Load:"
));
acpi_tb_print_table_header
(
0
,
table
);
}
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_LOAD
,
table
,
acpi_gbl_table_handler_context
);
}
*
return_desc
=
ddb_handle
;
return_ACPI_STATUS
(
status
);
}
...
...
@@ -475,13 +436,12 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
/* Install the new table into the local data structures */
ACPI_INFO
((
"Dynamic OEM Table Load:"
));
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
status
=
acpi_tb_install_standard_table
(
ACPI_PTR_TO_PHYSADDR
(
table
),
acpi_ex_exit_interpreter
(
);
status
=
acpi_tb_install_and_load_table
(
table
,
ACPI_PTR_TO_PHYSADDR
(
table
),
ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL
,
TRUE
,
TRUE
,
&
table_index
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
TRUE
,
&
table_index
);
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
/* Delete allocated table buffer */
...
...
@@ -490,17 +450,6 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
return_ACPI_STATUS
(
status
);
}
/*
* Note: Now table is "INSTALLED", it must be validated before
* loading.
*/
status
=
acpi_tb_validate_table
(
&
acpi_gbl_root_table_list
.
tables
[
table_index
]);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/*
* Add the table to the namespace.
*
...
...
@@ -508,8 +457,7 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
* This appears to go against the ACPI specification, but we do it for
* compatibility with other ACPI implementations.
*/
status
=
acpi_ex_add_table
(
table_index
,
acpi_gbl_root_node
,
&
ddb_handle
);
status
=
acpi_ex_add_table
(
table_index
,
&
ddb_handle
);
if
(
ACPI_FAILURE
(
status
))
{
/* On error, table_ptr was deallocated above */
...
...
@@ -532,14 +480,6 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
/* Remove the reference by added by acpi_ex_store above */
acpi_ut_remove_reference
(
ddb_handle
);
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_LOAD
,
table
,
acpi_gbl_table_handler_context
);
}
return_ACPI_STATUS
(
status
);
}
...
...
@@ -592,10 +532,17 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
table_index
=
table_desc
->
reference
.
value
;
/*
* Release the interpreter lock so that the table lock won't have
* strict order requirement against it.
*/
acpi_ex_exit_interpreter
();
/* Ensure the table is still loaded */
if
(
!
acpi_tb_is_table_loaded
(
table_index
))
{
return_ACPI_STATUS
(
AE_NOT_EXIST
);
status
=
AE_NOT_EXIST
;
goto
lock_and_exit
;
}
/* Invoke table handler if present */
...
...
@@ -613,16 +560,24 @@ acpi_status acpi_ex_unload_table(union acpi_operand_object *ddb_handle)
status
=
acpi_tb_delete_namespace_by_owner
(
table_index
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
)
;
goto
lock_and_exit
;
}
(
void
)
acpi_tb_release_owner_id
(
table_index
);
acpi_tb_set_table_loaded_flag
(
table_index
,
FALSE
);
lock_and_exit:
/* Re-acquire the interpreter lock */
acpi_ex_enter_interpreter
();
/*
* Invalidate the handle. We do this because the handle may be stored
* in a named object and may not be actually deleted until much later.
*/
if
(
ACPI_SUCCESS
(
status
))
{
ddb_handle
->
common
.
flags
&=
~
AOPOBJ_DATA_VALID
;
return_ACPI_STATUS
(
AE_OK
);
}
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/exconvrt.c
View file @
f42106fe
...
...
@@ -124,9 +124,9 @@ acpi_ex_convert_to_integer(union acpi_operand_object *obj_desc,
* 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
,
flags
,
acpi_gbl_integer_byte_width
,
&
result
);
status
=
acpi_ut_strtoul64
(
ACPI_CAST_PTR
(
char
,
pointer
)
,
(
acpi_gbl_integer_byte_width
|
flags
),
&
result
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -632,7 +632,7 @@ acpi_ex_convert_to_target_type(acpi_object_type destination_type,
*/
status
=
acpi_ex_convert_to_integer
(
source_desc
,
result_desc
,
16
);
ACPI_STRTOUL_BASE
16
);
break
;
case
ACPI_TYPE_STRING
:
...
...
drivers/acpi/acpica/exmisc.c
View file @
f42106fe
...
...
@@ -327,8 +327,8 @@ acpi_ex_do_logical_op(u16 opcode,
switch
(
operand0
->
common
.
type
)
{
case
ACPI_TYPE_INTEGER
:
status
=
acpi_ex_convert_to_integer
(
operand1
,
&
local_operand1
,
16
);
status
=
acpi_ex_convert_to_integer
(
operand1
,
&
local_operand1
,
ACPI_STRTOUL_BASE
16
);
break
;
case
ACPI_TYPE_STRING
:
...
...
drivers/acpi/acpica/exoparg1.c
View file @
f42106fe
...
...
@@ -521,9 +521,10 @@ acpi_status acpi_ex_opcode_1A_1T_1R(struct acpi_walk_state *walk_state)
case
AML_TO_INTEGER_OP
:
/* to_integer (Data, Result) */
/* Perform "explicit" conversion */
status
=
acpi_ex_convert_to_integer
(
operand
[
0
],
&
return_desc
,
ACPI_ANY_BASE
);
acpi_ex_convert_to_integer
(
operand
[
0
],
&
return_desc
,
0
);
if
(
return_desc
==
operand
[
0
])
{
/* No conversion performed, add ref to handle return value */
...
...
@@ -890,9 +891,11 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)
* Field, so we need to resolve the node to a value.
*/
status
=
acpi_ns_get_node
(
walk_state
->
scope_info
->
scope
.
node
,
operand
[
0
]
->
string
.
pointer
,
acpi_ns_get_node_unlocked
(
walk_state
->
scope_info
->
scope
.
node
,
operand
[
0
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
ACPI_CAST_INDIRECT_PTR
(
struct
...
...
drivers/acpi/acpica/exresop.c
View file @
f42106fe
...
...
@@ -410,12 +410,13 @@ acpi_ex_resolve_operands(u16 opcode,
case
ARGI_INTEGER
:
/*
* Need an operand of type ACPI_TYPE_INTEGER,
* But we can implicitly convert from a STRING or BUFFER
* aka - "Implicit Source Operand Conversion"
* Need an operand of type ACPI_TYPE_INTEGER, but we can
* implicitly convert from a STRING or BUFFER.
*
* Known as "Implicit Source Operand Conversion"
*/
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
stack_ptr
,
16
);
status
=
acpi_ex_convert_to_integer
(
obj_desc
,
stack_ptr
,
ACPI_STRTOUL_BASE
16
);
if
(
ACPI_FAILURE
(
status
))
{
if
(
status
==
AE_TYPE
)
{
ACPI_ERROR
((
AE_INFO
,
...
...
drivers/acpi/acpica/extrace.c
View file @
f42106fe
...
...
@@ -201,7 +201,6 @@ 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
;
...
...
@@ -211,11 +210,6 @@ acpi_ex_start_trace_method(struct acpi_namespace_node *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
;
...
...
@@ -233,9 +227,6 @@ acpi_ex_start_trace_method(struct acpi_namespace_node *method_node,
}
}
(
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
,
...
...
@@ -267,7 +258,6 @@ 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
;
...
...
@@ -277,26 +267,14 @@ acpi_ex_stop_trace_method(struct acpi_namespace_node *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
)
{
...
...
@@ -312,9 +290,6 @@ acpi_ex_stop_trace_method(struct acpi_namespace_node *method_node,
acpi_gbl_trace_method_object
=
NULL
;
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
exit_path:
if
(
pathname
)
{
ACPI_FREE
(
pathname
);
}
...
...
drivers/acpi/acpica/exutils.c
View file @
f42106fe
...
...
@@ -94,6 +94,10 @@ void acpi_ex_enter_interpreter(void)
ACPI_ERROR
((
AE_INFO
,
"Could not acquire AML Interpreter mutex"
));
}
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not acquire AML Namespace mutex"
));
}
return_VOID
;
}
...
...
@@ -127,6 +131,10 @@ void acpi_ex_exit_interpreter(void)
ACPI_FUNCTION_TRACE
(
ex_exit_interpreter
);
status
=
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not release AML Namespace mutex"
));
}
status
=
acpi_ut_release_mutex
(
ACPI_MTX_INTERPRETER
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
...
...
drivers/acpi/acpica/hwgpe.c
View file @
f42106fe
...
...
@@ -98,7 +98,7 @@ acpi_status
acpi_hw_low_set_gpe
(
struct
acpi_gpe_event_info
*
gpe_event_info
,
u32
action
)
{
struct
acpi_gpe_register_info
*
gpe_register_info
;
acpi_status
status
;
acpi_status
status
=
AE_OK
;
u32
enable_mask
;
u32
register_bit
;
...
...
@@ -148,9 +148,14 @@ acpi_hw_low_set_gpe(struct acpi_gpe_event_info *gpe_event_info, u32 action)
return
(
AE_BAD_PARAMETER
);
}
if
(
!
(
register_bit
&
gpe_register_info
->
mask_for_run
))
{
/* Write the updated enable mask */
status
=
acpi_hw_write
(
enable_mask
,
&
gpe_register_info
->
enable_address
);
status
=
acpi_hw_write
(
enable_mask
,
&
gpe_register_info
->
enable_address
);
}
return
(
status
);
}
...
...
@@ -242,6 +247,12 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info *gpe_event_info,
local_event_status
|=
ACPI_EVENT_FLAG_ENABLED
;
}
/* GPE currently masked? (masked for runtime?) */
if
(
register_bit
&
gpe_register_info
->
mask_for_run
)
{
local_event_status
|=
ACPI_EVENT_FLAG_MASKED
;
}
/* GPE enabled for wake? */
if
(
register_bit
&
gpe_register_info
->
enable_for_wake
)
{
...
...
@@ -397,6 +408,7 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
u32
i
;
acpi_status
status
;
struct
acpi_gpe_register_info
*
gpe_register_info
;
u8
enable_mask
;
/* NOTE: assumes that all GPEs are currently disabled */
...
...
@@ -410,9 +422,10 @@ acpi_hw_enable_runtime_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
/* Enable all "runtime" GPEs in this register */
enable_mask
=
gpe_register_info
->
enable_for_run
&
~
gpe_register_info
->
mask_for_run
;
status
=
acpi_hw_gpe_enable_write
(
gpe_register_info
->
enable_for_run
,
gpe_register_info
);
acpi_hw_gpe_enable_write
(
enable_mask
,
gpe_register_info
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
}
...
...
drivers/acpi/acpica/nsaccess.c
View file @
f42106fe
...
...
@@ -108,9 +108,9 @@ acpi_status acpi_ns_root_initialize(void)
}
status
=
acpi_ns_lookup
(
NULL
,
(
char
*
)
init_val
->
name
,
init_val
->
type
,
ACPI_IMODE_LOAD_PASS2
,
ACPI_NS_NO_UPSEARCH
,
NULL
,
&
new_node
);
acpi_ns_lookup
(
NULL
,
ACPI_CAST_PTR
(
char
,
init_val
->
name
)
,
init_val
->
type
,
ACPI_IMODE_LOAD_PASS2
,
ACPI_NS_NO_UPSEARCH
,
NULL
,
&
new_node
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"Could not create predefined name %s"
,
...
...
drivers/acpi/acpica/nsconvert.c
View file @
f42106fe
...
...
@@ -79,7 +79,6 @@ acpi_ns_convert_to_integer(union acpi_operand_object *original_object,
/* String-to-Integer conversion */
status
=
acpi_ut_strtoul64
(
original_object
->
string
.
pointer
,
ACPI_ANY_BASE
,
acpi_gbl_integer_byte_width
,
&
value
);
if
(
ACPI_FAILURE
(
status
))
{
return
(
status
);
...
...
drivers/acpi/acpica/nsdump.c
View file @
f42106fe
...
...
@@ -338,7 +338,7 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,
case
ACPI_TYPE_STRING
:
acpi_os_printf
(
"Len %.2X "
,
obj_desc
->
string
.
length
);
acpi_ut_print_string
(
obj_desc
->
string
.
pointer
,
32
);
acpi_ut_print_string
(
obj_desc
->
string
.
pointer
,
80
);
acpi_os_printf
(
"
\n
"
);
break
;
...
...
drivers/acpi/acpica/nsload.c
View file @
f42106fe
...
...
@@ -46,6 +46,7 @@
#include "acnamesp.h"
#include "acdispat.h"
#include "actables.h"
#include "acinterp.h"
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME
(
"nsload"
)
...
...
@@ -78,20 +79,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
ACPI_FUNCTION_TRACE
(
ns_load_table
);
/*
* Parse the table and load the namespace with all named
* objects found within. Control methods are NOT parsed
* at this time. In fact, the control methods cannot be
* parsed until the entire namespace is loaded, because
* if a control method makes a forward reference (call)
* to another control method, we can't continue parsing
* because we don't know how many arguments to parse next!
*/
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* If table already loaded into namespace, just return */
if
(
acpi_tb_is_table_loaded
(
table_index
))
{
...
...
@@ -107,6 +94,15 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
goto
unlock
;
}
/*
* Parse the table and load the namespace with all named
* objects found within. Control methods are NOT parsed
* at this time. In fact, the control methods cannot be
* parsed until the entire namespace is loaded, because
* if a control method makes a forward reference (call)
* to another control method, we can't continue parsing
* because we don't know how many arguments to parse next!
*/
status
=
acpi_ns_parse_table
(
table_index
,
node
);
if
(
ACPI_SUCCESS
(
status
))
{
acpi_tb_set_table_loaded_flag
(
table_index
,
TRUE
);
...
...
@@ -120,7 +116,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
* exist. This target of Scope must already exist in the
* namespace, as per the ACPI specification.
*/
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
acpi_ns_delete_namespace_by_owner
(
acpi_gbl_root_table_list
.
tables
[
table_index
].
owner_id
);
...
...
@@ -129,8 +124,6 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
}
unlock:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -162,7 +155,8 @@ acpi_ns_load_table(u32 table_index, struct acpi_namespace_node *node)
* other ACPI implementations. Optionally, the execution can be deferred
* until later, see acpi_initialize_objects.
*/
if
(
!
acpi_gbl_group_module_level_code
)
{
if
(
!
acpi_gbl_parse_table_as_term_list
&&
!
acpi_gbl_group_module_level_code
)
{
acpi_ns_exec_module_code_list
();
}
...
...
drivers/acpi/acpica/nsparse.c
View file @
f42106fe
...
...
@@ -47,10 +47,101 @@
#include "acparser.h"
#include "acdispat.h"
#include "actables.h"
#include "acinterp.h"
#define _COMPONENT ACPI_NAMESPACE
ACPI_MODULE_NAME
(
"nsparse"
)
/*******************************************************************************
*
* FUNCTION: ns_execute_table
*
* PARAMETERS: table_desc - An ACPI table descriptor for table to parse
* start_node - Where to enter the table into the namespace
*
* RETURN: Status
*
* DESCRIPTION: Load ACPI/AML table by executing the entire table as a
* term_list.
*
******************************************************************************/
acpi_status
acpi_ns_execute_table
(
u32
table_index
,
struct
acpi_namespace_node
*
start_node
)
{
acpi_status
status
;
struct
acpi_table_header
*
table
;
acpi_owner_id
owner_id
;
struct
acpi_evaluate_info
*
info
=
NULL
;
u32
aml_length
;
u8
*
aml_start
;
union
acpi_operand_object
*
method_obj
=
NULL
;
ACPI_FUNCTION_TRACE
(
ns_execute_table
);
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
);
}
/* Create, initialize, and link a new temporary method object */
method_obj
=
acpi_ut_create_internal_object
(
ACPI_TYPE_METHOD
);
if
(
!
method_obj
)
{
return_ACPI_STATUS
(
AE_NO_MEMORY
);
}
/* Allocate the evaluation information block */
info
=
ACPI_ALLOCATE_ZEROED
(
sizeof
(
struct
acpi_evaluate_info
));
if
(
!
info
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"Create table code block: %p
\n
"
,
method_obj
));
method_obj
->
method
.
aml_start
=
aml_start
;
method_obj
->
method
.
aml_length
=
aml_length
;
method_obj
->
method
.
owner_id
=
owner_id
;
method_obj
->
method
.
info_flags
|=
ACPI_METHOD_MODULE_LEVEL
;
info
->
pass_number
=
ACPI_IMODE_EXECUTE
;
info
->
node
=
start_node
;
info
->
obj_desc
=
method_obj
;
info
->
node_flags
=
info
->
node
->
flags
;
info
->
full_pathname
=
acpi_ns_get_normalized_pathname
(
info
->
node
,
TRUE
);
if
(
!
info
->
full_pathname
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
status
=
acpi_ps_execute_table
(
info
);
cleanup:
if
(
info
)
{
ACPI_FREE
(
info
->
full_pathname
);
info
->
full_pathname
=
NULL
;
}
ACPI_FREE
(
info
);
acpi_ut_remove_reference
(
method_obj
);
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: ns_one_complete_parse
...
...
@@ -63,6 +154,7 @@ ACPI_MODULE_NAME("nsparse")
* DESCRIPTION: Perform one complete parse of an ACPI/AML table.
*
******************************************************************************/
acpi_status
acpi_ns_one_complete_parse
(
u32
pass_number
,
u32
table_index
,
...
...
@@ -143,7 +235,9 @@ acpi_ns_one_complete_parse(u32 pass_number,
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"*PARSE* pass %u parse
\n
"
,
pass_number
));
acpi_ex_enter_interpreter
();
status
=
acpi_ps_parse_aml
(
walk_state
);
acpi_ex_exit_interpreter
();
cleanup:
acpi_ps_delete_parse_tree
(
parse_root
);
...
...
@@ -170,15 +264,23 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
ACPI_FUNCTION_TRACE
(
ns_parse_table
);
if
(
acpi_gbl_parse_table_as_term_list
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start load pass
\n
"
));
status
=
acpi_ns_execute_table
(
table_index
,
start_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
else
{
/*
* AML Parse, pass 1
*
* In this pass, we load most of the namespace. Control methods
* are not parsed until later. A parse tree is not created. Instead,
* each Parser Op subtree is deleted when it is finished. This saves
* a great deal of memory, and allows a small cache of parse objects
* to service the entire parse. The second pass of the parse then
*
performs another complete parse of the AML.
* are not parsed until later. A parse tree is not created.
* Instead, each Parser Op subtree is deleted when it is finished.
* This saves a great deal of memory, and allows a small cache of
* parse objects to service the entire parse. The second pass of
* the parse then
performs another complete parse of the AML.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start pass 1
\n
"
));
...
...
@@ -203,6 +305,7 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/nsutils.c
View file @
f42106fe
...
...
@@ -662,7 +662,7 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
/*******************************************************************************
*
* FUNCTION: acpi_ns_get_node
* FUNCTION: acpi_ns_get_node
_unlocked
*
* PARAMETERS: *pathname - Name to be found, in external (ASL) format. The
* \ (backslash) and ^ (carat) prefixes, and the
...
...
@@ -678,12 +678,12 @@ u32 acpi_ns_opens_scope(acpi_object_type type)
* DESCRIPTION: Look up a name relative to a given scope and return the
* corresponding Node. NOTE: Scope can be null.
*
* MUTEX:
L
ocks namespace
* MUTEX:
Doesn't l
ocks namespace
*
******************************************************************************/
acpi_status
acpi_ns_get_node
(
struct
acpi_namespace_node
*
prefix_node
,
acpi_ns_get_node
_unlocked
(
struct
acpi_namespace_node
*
prefix_node
,
const
char
*
pathname
,
u32
flags
,
struct
acpi_namespace_node
**
return_node
)
{
...
...
@@ -691,7 +691,8 @@ acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
acpi_status
status
;
char
*
internal_path
;
ACPI_FUNCTION_TRACE_PTR
(
ns_get_node
,
ACPI_CAST_PTR
(
char
,
pathname
));
ACPI_FUNCTION_TRACE_PTR
(
ns_get_node_unlocked
,
ACPI_CAST_PTR
(
char
,
pathname
));
/* Simplest case is a null pathname */
...
...
@@ -718,13 +719,6 @@ acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
return_ACPI_STATUS
(
status
);
}
/* Must lock namespace during lookup */
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
/* Setup lookup scope (search starting point) */
scope_info
.
scope
.
node
=
prefix_node
;
...
...
@@ -740,9 +734,49 @@ acpi_ns_get_node(struct acpi_namespace_node *prefix_node,
pathname
,
acpi_format_exception
(
status
)));
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
cleanup:
ACPI_FREE
(
internal_path
);
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ns_get_node
*
* PARAMETERS: *pathname - Name to be found, in external (ASL) format. The
* \ (backslash) and ^ (carat) prefixes, and the
* . (period) to separate segments are supported.
* prefix_node - Root of subtree to be searched, or NS_ALL for the
* root of the name space. If Name is fully
* qualified (first s8 is '\'), the passed value
* of Scope will not be accessed.
* flags - Used to indicate whether to perform upsearch or
* not.
* return_node - Where the Node is returned
*
* DESCRIPTION: Look up a name relative to a given scope and return the
* corresponding Node. NOTE: Scope can be null.
*
* MUTEX: Locks namespace
*
******************************************************************************/
acpi_status
acpi_ns_get_node
(
struct
acpi_namespace_node
*
prefix_node
,
const
char
*
pathname
,
u32
flags
,
struct
acpi_namespace_node
**
return_node
)
{
acpi_status
status
;
ACPI_FUNCTION_TRACE_PTR
(
ns_get_node
,
ACPI_CAST_PTR
(
char
,
pathname
));
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
status
=
acpi_ns_get_node_unlocked
(
prefix_node
,
pathname
,
flags
,
return_node
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/psparse.c
View file @
f42106fe
...
...
@@ -537,9 +537,11 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
/* Either the method parse or actual execution failed */
acpi_ex_exit_interpreter
();
ACPI_ERROR_METHOD
(
"Method parse/execution failed"
,
walk_state
->
method_node
,
NULL
,
status
);
acpi_ex_enter_interpreter
();
/* Check for possible multi-thread reentrancy problem */
...
...
@@ -571,7 +573,9 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
* cleanup to do
*/
if
(((
walk_state
->
parse_flags
&
ACPI_PARSE_MODE_MASK
)
==
ACPI_PARSE_EXECUTE
)
||
(
ACPI_FAILURE
(
status
)))
{
ACPI_PARSE_EXECUTE
&&
!
(
walk_state
->
parse_flags
&
ACPI_PARSE_MODULE_LEVEL
))
||
(
ACPI_FAILURE
(
status
)))
{
acpi_ds_terminate_control_method
(
walk_state
->
method_desc
,
walk_state
);
...
...
drivers/acpi/acpica/psxface.c
View file @
f42106fe
...
...
@@ -250,6 +250,90 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info)
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_execute_table
*
* PARAMETERS: info - Method info block, contains:
* node - Node to where the is entered into the
* namespace
* obj_desc - Pseudo method object describing the AML
* code of the entire table
* pass_number - Parse or execute pass
*
* RETURN: Status
*
* DESCRIPTION: Execute a table
*
******************************************************************************/
acpi_status
acpi_ps_execute_table
(
struct
acpi_evaluate_info
*
info
)
{
acpi_status
status
;
union
acpi_parse_object
*
op
=
NULL
;
struct
acpi_walk_state
*
walk_state
=
NULL
;
ACPI_FUNCTION_TRACE
(
ps_execute_table
);
/* Create and init a Root Node */
op
=
acpi_ps_create_scope_op
(
info
->
obj_desc
->
method
.
aml_start
);
if
(
!
op
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
/* Create and initialize a new walk state */
walk_state
=
acpi_ds_create_walk_state
(
info
->
obj_desc
->
method
.
owner_id
,
NULL
,
NULL
,
NULL
);
if
(
!
walk_state
)
{
status
=
AE_NO_MEMORY
;
goto
cleanup
;
}
status
=
acpi_ds_init_aml_walk
(
walk_state
,
op
,
info
->
node
,
info
->
obj_desc
->
method
.
aml_start
,
info
->
obj_desc
->
method
.
aml_length
,
info
,
info
->
pass_number
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
if
(
info
->
obj_desc
->
method
.
info_flags
&
ACPI_METHOD_MODULE_LEVEL
)
{
walk_state
->
parse_flags
|=
ACPI_PARSE_MODULE_LEVEL
;
}
/* Info->Node is the default location to load the table */
if
(
info
->
node
&&
info
->
node
!=
acpi_gbl_root_node
)
{
status
=
acpi_ds_scope_stack_push
(
info
->
node
,
ACPI_TYPE_METHOD
,
walk_state
);
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
}
/*
* Parse the AML, walk_state will be deleted by parse_aml
*/
acpi_ex_enter_interpreter
();
status
=
acpi_ps_parse_aml
(
walk_state
);
acpi_ex_exit_interpreter
();
walk_state
=
NULL
;
cleanup:
if
(
walk_state
)
{
acpi_ds_delete_walk_state
(
walk_state
);
}
if
(
op
)
{
acpi_ps_delete_parse_tree
(
op
);
}
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ps_update_parameter_list
...
...
drivers/acpi/acpica/tbdata.c
View file @
f42106fe
...
...
@@ -45,6 +45,7 @@
#include "accommon.h"
#include "acnamesp.h"
#include "actables.h"
#include "acevents.h"
#define _COMPONENT ACPI_TABLES
ACPI_MODULE_NAME
(
"tbdata"
)
...
...
@@ -613,17 +614,12 @@ acpi_status acpi_tb_delete_namespace_by_owner(u32 table_index)
* lock may block, and also since the execution of a namespace walk
* must be allowed to use the interpreter.
*/
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_INTERPRETER
);
status
=
acpi_ut_acquire_write_lock
(
&
acpi_gbl_namespace_rw_lock
);
acpi_ns_delete_namespace_by_owner
(
owner_id
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
acpi_ns_delete_namespace_by_owner
(
owner_id
);
acpi_ut_release_write_lock
(
&
acpi_gbl_namespace_rw_lock
);
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_INTERPRETER
);
return_ACPI_STATUS
(
status
);
}
...
...
@@ -771,3 +767,142 @@ void acpi_tb_set_table_loaded_flag(u32 table_index, u8 is_loaded)
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_load_table
*
* PARAMETERS: table_index - Table index
* parent_node - Where table index is returned
*
* RETURN: Status
*
* DESCRIPTION: Load an ACPI table
*
******************************************************************************/
acpi_status
acpi_tb_load_table
(
u32
table_index
,
struct
acpi_namespace_node
*
parent_node
)
{
struct
acpi_table_header
*
table
;
acpi_status
status
;
acpi_owner_id
owner_id
;
ACPI_FUNCTION_TRACE
(
tb_load_table
);
/*
* Note: Now table is "INSTALLED", it must be validated before
* using.
*/
status
=
acpi_get_table_by_index
(
table_index
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
status
=
acpi_ns_load_table
(
table_index
,
parent_node
);
/* Execute any module-level code that was found in the table */
if
(
!
acpi_gbl_parse_table_as_term_list
&&
acpi_gbl_group_module_level_code
)
{
acpi_ns_exec_module_code_list
();
}
/*
* Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is
* responsible for discovering any new wake GPEs by running _PRW methods
* that may have been loaded by this table.
*/
status
=
acpi_tb_get_owner_id
(
table_index
,
&
owner_id
);
if
(
ACPI_SUCCESS
(
status
))
{
acpi_ev_update_gpes
(
owner_id
);
}
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_LOAD
,
table
,
acpi_gbl_table_handler_context
);
}
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_install_and_load_table
*
* PARAMETERS: table - Pointer to the table
* address - Physical address of the table
* flags - Allocation flags of the table
* table_index - Where table index is returned
*
* RETURN: Status
*
* DESCRIPTION: Install and load an ACPI table
*
******************************************************************************/
acpi_status
acpi_tb_install_and_load_table
(
struct
acpi_table_header
*
table
,
acpi_physical_address
address
,
u8
flags
,
u8
override
,
u32
*
table_index
)
{
acpi_status
status
;
u32
i
;
acpi_owner_id
owner_id
;
ACPI_FUNCTION_TRACE
(
acpi_load_table
);
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
/* Install the table and load it into the namespace */
status
=
acpi_tb_install_standard_table
(
address
,
flags
,
TRUE
,
override
,
&
i
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
/*
* Note: Now table is "INSTALLED", it must be validated before
* using.
*/
status
=
acpi_tb_validate_table
(
&
acpi_gbl_root_table_list
.
tables
[
i
]);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
status
=
acpi_ns_load_table
(
i
,
acpi_gbl_root_node
);
/* Execute any module-level code that was found in the table */
if
(
!
acpi_gbl_parse_table_as_term_list
&&
acpi_gbl_group_module_level_code
)
{
acpi_ns_exec_module_code_list
();
}
/*
* Update GPEs for any new _Lxx/_Exx methods. Ignore errors. The host is
* responsible for discovering any new wake GPEs by running _PRW methods
* that may have been loaded by this table.
*/
status
=
acpi_tb_get_owner_id
(
i
,
&
owner_id
);
if
(
ACPI_SUCCESS
(
status
))
{
acpi_ev_update_gpes
(
owner_id
);
}
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_LOAD
,
table
,
acpi_gbl_table_handler_context
);
}
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
unlock_and_exit:
*
table_index
=
i
;
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/tbfadt.c
View file @
f42106fe
...
...
@@ -344,22 +344,26 @@ void acpi_tb_parse_fadt(void)
/* Obtain the DSDT and FACS tables via their addresses within the FADT */
acpi_tb_install_fixed_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
Xdsdt
,
ACPI_SIG_DSDT
,
&
acpi_gbl_dsdt_index
);
acpi_tb_install_standard_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
Xdsdt
,
ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL
,
FALSE
,
TRUE
,
&
acpi_gbl_dsdt_index
);
/* If Hardware Reduced flag is set, there is no FACS */
if
(
!
acpi_gbl_reduced_hardware
)
{
if
(
acpi_gbl_FADT
.
facs
)
{
acpi_tb_install_
fixe
d_table
((
acpi_physical_address
)
acpi_tb_install_
standar
d_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
facs
,
ACPI_SIG_FACS
,
ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL
,
FALSE
,
TRUE
,
&
acpi_gbl_facs_index
);
}
if
(
acpi_gbl_FADT
.
Xfacs
)
{
acpi_tb_install_
fixe
d_table
((
acpi_physical_address
)
acpi_tb_install_
standar
d_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
Xfacs
,
ACPI_SIG_FACS
,
ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL
,
FALSE
,
TRUE
,
&
acpi_gbl_xfacs_index
);
}
}
...
...
@@ -476,17 +480,19 @@ static void acpi_tb_convert_fadt(void)
u32
i
;
/*
* For ACPI 1.0 FADTs (revision 1
or 2
), ensure that reserved fields which
* For ACPI 1.0 FADTs (revision 1), ensure that reserved fields which
* should be zero are indeed zero. This will workaround BIOSs that
* inadvertently place values in these fields.
*
* The ACPI 1.0 reserved fields that will be zeroed are the bytes located
* at offset 45, 55, 95, and the word located at offset 109, 110.
*
* Note: The FADT revision value is unreliable. Only the length can be
* trusted.
* Note: The FADT revision value is unreliable because of BIOS errors.
* The table length is instead used as the final word on the version.
*
* Note: FADT revision 3 is the ACPI 2.0 version of the FADT.
*/
if
(
acpi_gbl_FADT
.
header
.
length
<=
ACPI_FADT_V
2
_SIZE
)
{
if
(
acpi_gbl_FADT
.
header
.
length
<=
ACPI_FADT_V
3
_SIZE
)
{
acpi_gbl_FADT
.
preferred_profile
=
0
;
acpi_gbl_FADT
.
pstate_control
=
0
;
acpi_gbl_FADT
.
cst_control
=
0
;
...
...
@@ -552,30 +558,21 @@ static void acpi_tb_convert_fadt(void)
*
* Address32 zero, Address64 [don't care] - Use Address64
*
* No override: if acpi_gbl_use32_bit_fadt_addresses is FALSE, and:
* Address32 non-zero, Address64 zero - Copy/use Address32
* Address32 non-zero == Address64 non-zero - Use Address64
* Address32 non-zero != Address64 non-zero - Warning, use Address64
*
* Override: if acpi_gbl_use32_bit_fadt_addresses is TRUE, and:
* Address32 non-zero, Address64 zero - Copy/use Address32
* Address32 non-zero == Address64 non-zero - Copy/use Address32
* Address32 non-zero != Address64 non-zero - Warning, copy/use Address32
*
* Note: space_id is always I/O for 32-bit legacy address fields
*/
if
(
address32
)
{
if
(
!
address64
->
address
)
{
/* 64-bit address is zero, use 32-bit address */
acpi_tb_init_generic_address
(
address64
,
ACPI_ADR_SPACE_SYSTEM_IO
,
*
ACPI_ADD_PTR
(
u8
,
&
acpi_gbl_FADT
,
fadt_info_table
[
i
].
length
),
(
u64
)
address32
,
name
,
flags
);
}
else
if
(
address64
->
address
!=
(
u64
)
address32
)
{
if
(
address64
->
address
)
{
if
(
address64
->
address
!=
(
u64
)
address32
)
{
/* Address mismatch */
...
...
@@ -587,41 +584,46 @@ static void acpi_tb_convert_fadt(void)
(
address64
->
address
),
acpi_gbl_use32_bit_fadt_addresses
?
32
:
64
));
}
if
(
acpi_gbl_use32_bit_fadt_addresses
)
{
/* 32-bit address override */
acpi_tb_init_generic_address
(
address64
,
ACPI_ADR_SPACE_SYSTEM_IO
,
*
ACPI_ADD_PTR
(
u8
,
&
acpi_gbl_FADT
,
fadt_info_table
[
i
].
length
),
(
u64
)
address32
,
/*
* For each extended field, check for length mismatch
* between the legacy length field and the corresponding
* 64-bit X length field.
* Note: If the legacy length field is > 0xFF bits, ignore
* this check. (GPE registers can be larger than the
* 64-bit GAS structure can accomodate, 0xFF bits).
*/
if
((
ACPI_MUL_8
(
length
)
<=
ACPI_UINT8_MAX
)
&&
(
address64
->
bit_width
!=
ACPI_MUL_8
(
length
)))
{
ACPI_BIOS_WARNING
((
AE_INFO
,
"32/64X length mismatch in FADT/%s: %u/%u"
,
name
,
flags
);
}
ACPI_MUL_8
(
length
),
address64
->
bit_width
));
}
}
/*
* For each extended field, check for length mismatch between the
* legacy length field and the corresponding 64-bit X length field.
* Note: If the legacy length field is > 0xFF bits, ignore this
* check. (GPE registers can be larger than the 64-bit GAS structure
* can accomodate, 0xFF bits).
* Hardware register access code always uses the 64-bit fields.
* So if the 64-bit field is zero or is to be overridden,
* initialize it with the 32-bit fields.
* Note that when the 32-bit address favor is specified, the
* 64-bit fields are always re-initialized so that
* access_size/bit_width/bit_offset fields can be correctly
* configured to the values to trigger a 32-bit compatible
* access mode in the hardware register access code.
*/
if
(
address64
->
address
&&
(
ACPI_MUL_8
(
length
)
<=
ACPI_UINT8_MAX
)
&&
(
address64
->
bit_width
!=
ACPI_MUL_8
(
length
)))
{
ACPI_BIOS_WARNING
((
AE_INFO
,
"32/64X length mismatch in FADT/%s: %u/%u"
,
name
,
ACPI_MUL_8
(
length
),
address64
->
bit_width
));
if
(
!
address64
->
address
||
acpi_gbl_use32_bit_fadt_addresses
)
{
acpi_tb_init_generic_address
(
address64
,
ACPI_ADR_SPACE_SYSTEM_IO
,
length
,
(
u64
)
address32
,
name
,
flags
);
}
}
if
(
fadt_info_table
[
i
].
flags
&
ACPI_FADT_REQUIRED
)
{
...
...
drivers/acpi/acpica/tbfind.c
View file @
f42106fe
...
...
@@ -68,7 +68,7 @@ acpi_status
acpi_tb_find_table
(
char
*
signature
,
char
*
oem_id
,
char
*
oem_table_id
,
u32
*
table_index
)
{
acpi_status
status
;
acpi_status
status
=
AE_OK
;
struct
acpi_table_header
header
;
u32
i
;
...
...
@@ -96,6 +96,7 @@ acpi_tb_find_table(char *signature,
/* Search for the table */
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
for
(
i
=
0
;
i
<
acpi_gbl_root_table_list
.
current_table_count
;
++
i
)
{
if
(
memcmp
(
&
(
acpi_gbl_root_table_list
.
tables
[
i
].
signature
),
header
.
signature
,
ACPI_NAME_SIZE
))
{
...
...
@@ -115,7 +116,7 @@ acpi_tb_find_table(char *signature,
acpi_tb_validate_table
(
&
acpi_gbl_root_table_list
.
tables
[
i
]);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
)
;
goto
unlock_and_exit
;
}
if
(
!
acpi_gbl_root_table_list
.
tables
[
i
].
pointer
)
{
...
...
@@ -144,9 +145,12 @@ acpi_tb_find_table(char *signature,
ACPI_DEBUG_PRINT
((
ACPI_DB_TABLES
,
"Found table [%4.4s]
\n
"
,
header
.
signature
));
return_ACPI_STATUS
(
AE_OK
)
;
goto
unlock_and_exit
;
}
}
status
=
AE_NOT_FOUND
;
return_ACPI_STATUS
(
AE_NOT_FOUND
);
unlock_and_exit:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/tbinstal.c
View file @
f42106fe
...
...
@@ -155,68 +155,6 @@ acpi_tb_install_table_with_override(struct acpi_table_desc *new_table_desc,
}
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_install_fixed_table
*
* PARAMETERS: address - Physical address of DSDT or FACS
* signature - Table signature, NULL if no need to
* match
* table_index - Where the table index is returned
*
* RETURN: Status
*
* DESCRIPTION: Install a fixed ACPI table (DSDT/FACS) into the global data
* structure.
*
******************************************************************************/
acpi_status
acpi_tb_install_fixed_table
(
acpi_physical_address
address
,
char
*
signature
,
u32
*
table_index
)
{
struct
acpi_table_desc
new_table_desc
;
acpi_status
status
;
ACPI_FUNCTION_TRACE
(
tb_install_fixed_table
);
if
(
!
address
)
{
ACPI_ERROR
((
AE_INFO
,
"Null physical address for ACPI table [%s]"
,
signature
));
return
(
AE_NO_MEMORY
);
}
/* Fill a table descriptor for validation */
status
=
acpi_tb_acquire_temp_table
(
&
new_table_desc
,
address
,
ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_ERROR
((
AE_INFO
,
"Could not acquire table length at %8.8X%8.8X"
,
ACPI_FORMAT_UINT64
(
address
)));
return_ACPI_STATUS
(
status
);
}
/* Validate and verify a table before installation */
status
=
acpi_tb_verify_temp_table
(
&
new_table_desc
,
signature
);
if
(
ACPI_FAILURE
(
status
))
{
goto
release_and_exit
;
}
/* Add the table to the global root table list */
acpi_tb_install_table_with_override
(
&
new_table_desc
,
TRUE
,
table_index
);
release_and_exit:
/* Release the temporary table descriptor */
acpi_tb_release_temp_table
(
&
new_table_desc
);
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_tb_install_standard_table
...
...
@@ -230,8 +168,7 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
*
* RETURN: Status
*
* DESCRIPTION: This function is called to install an ACPI table that is
* neither DSDT nor FACS (a "standard" table.)
* DESCRIPTION: This function is called to verify and install an ACPI table.
* When this function is called by "Load" or "LoadTable" opcodes,
* or by acpi_load_table() API, the "Reload" parameter is set.
* After sucessfully returning from this function, table is
...
...
@@ -364,6 +301,14 @@ acpi_tb_install_standard_table(acpi_physical_address address,
acpi_tb_install_table_with_override
(
&
new_table_desc
,
override
,
table_index
);
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_INSTALL
,
new_table_desc
.
pointer
,
acpi_gbl_table_handler_context
);
}
release_and_exit:
/* Release the temporary table descriptor */
...
...
drivers/acpi/acpica/tbutils.c
View file @
f42106fe
...
...
@@ -252,7 +252,8 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)
*
******************************************************************************/
acpi_status
__init
acpi_tb_parse_root_table
(
acpi_physical_address
rsdp_address
)
acpi_status
ACPI_INIT_FUNCTION
acpi_tb_parse_root_table
(
acpi_physical_address
rsdp_address
)
{
struct
acpi_table_rsdp
*
rsdp
;
u32
table_entry_size
;
...
...
drivers/acpi/acpica/tbxface.c
View file @
f42106fe
...
...
@@ -98,7 +98,7 @@ acpi_status acpi_allocate_root_table(u32 initial_table_count)
*
******************************************************************************/
acpi_status
__init
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_tables
(
struct
acpi_table_desc
*
initial_table_array
,
u32
initial_table_count
,
u8
allow_resize
)
{
...
...
@@ -164,7 +164,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_tables)
* kernel.
*
******************************************************************************/
acpi_status
__init
acpi_reallocate_root_table
(
void
)
acpi_status
ACPI_INIT_FUNCTION
acpi_reallocate_root_table
(
void
)
{
acpi_status
status
;
...
...
drivers/acpi/acpica/tbxfload.c
View file @
f42106fe
...
...
@@ -63,7 +63,7 @@ ACPI_MODULE_NAME("tbxfload")
* DESCRIPTION: Load the ACPI tables from the RSDT/XSDT
*
******************************************************************************/
acpi_status
__init
acpi_load_tables
(
void
)
acpi_status
ACPI_INIT_FUNCTION
acpi_load_tables
(
void
)
{
acpi_status
status
;
...
...
@@ -103,7 +103,8 @@ acpi_status __init acpi_load_tables(void)
"While loading namespace from ACPI tables"
));
}
if
(
!
acpi_gbl_group_module_level_code
)
{
if
(
acpi_gbl_parse_table_as_term_list
||
!
acpi_gbl_group_module_level_code
)
{
/*
* Initialize the objects that remain uninitialized. This
* runs the executable AML that may be part of the
...
...
@@ -188,11 +189,11 @@ acpi_status acpi_tb_load_namespace(void)
memcpy
(
&
acpi_gbl_original_dsdt_header
,
acpi_gbl_DSDT
,
sizeof
(
struct
acpi_table_header
));
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
/* Load and parse tables */
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
status
=
acpi_ns_load_table
(
acpi_gbl_dsdt_index
,
acpi_gbl_root_node
);
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"[DSDT] table load failed"
));
tables_failed
++
;
...
...
@@ -202,7 +203,6 @@ acpi_status acpi_tb_load_namespace(void)
/* Load any SSDT or PSDT tables. Note: Loop leaves tables locked */
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
for
(
i
=
0
;
i
<
acpi_gbl_root_table_list
.
current_table_count
;
++
i
)
{
table
=
&
acpi_gbl_root_table_list
.
tables
[
i
];
...
...
@@ -220,6 +220,7 @@ acpi_status acpi_tb_load_namespace(void)
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
status
=
acpi_ns_load_table
(
i
,
acpi_gbl_root_node
);
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_EXCEPTION
((
AE_INFO
,
status
,
"(%4.4s:%8.8s) while loading table"
,
...
...
@@ -235,8 +236,6 @@ acpi_status acpi_tb_load_namespace(void)
}
else
{
tables_loaded
++
;
}
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
}
if
(
!
tables_failed
)
{
...
...
@@ -272,7 +271,7 @@ acpi_status acpi_tb_load_namespace(void)
*
******************************************************************************/
acpi_status
__init
acpi_status
ACPI_INIT_FUNCTION
acpi_install_table
(
acpi_physical_address
address
,
u8
physical
)
{
acpi_status
status
;
...
...
@@ -324,49 +323,13 @@ acpi_status acpi_load_table(struct acpi_table_header *table)
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
/* Must acquire the interpreter lock during this operation */
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_INTERPRETER
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/* Install the table and load it into the namespace */
ACPI_INFO
((
"Host-directed Dynamic ACPI Table Load:"
));
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
status
=
acpi_tb_install_standard_table
(
ACPI_PTR_TO_PHYSADDR
(
table
),
ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL
,
TRUE
,
FALSE
,
&
table_index
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
/*
* Note: Now table is "INSTALLED", it must be validated before
* using.
*/
status
=
acpi_tb_validate_table
(
&
acpi_gbl_root_table_list
.
tables
[
table_index
]);
if
(
ACPI_FAILURE
(
status
))
{
goto
unlock_and_exit
;
}
status
=
acpi_ns_load_table
(
table_index
,
acpi_gbl_root_node
);
/* Invoke table handler if present */
if
(
acpi_gbl_table_handler
)
{
(
void
)
acpi_gbl_table_handler
(
ACPI_TABLE_EVENT_LOAD
,
table
,
acpi_gbl_table_handler_context
);
}
unlock_and_exit:
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_INTERPRETER
);
acpi_tb_install_and_load_table
(
table
,
ACPI_PTR_TO_PHYSADDR
(
table
),
ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL
,
FALSE
,
&
table_index
);
return_ACPI_STATUS
(
status
);
}
...
...
@@ -415,9 +378,9 @@ acpi_status acpi_unload_parent_table(acpi_handle object)
return_ACPI_STATUS
(
AE_TYPE
);
}
/* Must acquire the
interpreter
lock during this operation */
/* Must acquire the
table
lock during this operation */
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_
INTERPRETER
);
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_
TABLES
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
...
...
@@ -444,8 +407,10 @@ acpi_status acpi_unload_parent_table(acpi_handle object)
/* Ensure the table is actually loaded */
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
if
(
!
acpi_tb_is_table_loaded
(
i
))
{
status
=
AE_NOT_EXIST
;
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
break
;
}
...
...
@@ -471,10 +436,11 @@ acpi_status acpi_unload_parent_table(acpi_handle object)
status
=
acpi_tb_release_owner_id
(
i
);
acpi_tb_set_table_loaded_flag
(
i
,
FALSE
);
(
void
)
acpi_ut_acquire_mutex
(
ACPI_MTX_TABLES
);
break
;
}
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_
INTERPRETER
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_
TABLES
);
return_ACPI_STATUS
(
status
);
}
...
...
drivers/acpi/acpica/tbxfroot.c
View file @
f42106fe
...
...
@@ -142,7 +142,8 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp *rsdp)
*
******************************************************************************/
acpi_status
__init
acpi_find_root_pointer
(
acpi_physical_address
*
table_address
)
acpi_status
ACPI_INIT_FUNCTION
acpi_find_root_pointer
(
acpi_physical_address
*
table_address
)
{
u8
*
table_ptr
;
u8
*
mem_rover
;
...
...
@@ -244,6 +245,8 @@ acpi_status __init acpi_find_root_pointer(acpi_physical_address *table_address)
return_ACPI_STATUS
(
AE_NOT_FOUND
);
}
ACPI_EXPORT_SYMBOL_INIT
(
acpi_find_root_pointer
)
/*******************************************************************************
*
* FUNCTION: acpi_tb_scan_memory_for_rsdp
...
...
drivers/acpi/acpica/utaddress.c
View file @
f42106fe
...
...
@@ -77,7 +77,6 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
u32
length
,
struct
acpi_namespace_node
*
region_node
)
{
struct
acpi_address_range
*
range_info
;
acpi_status
status
;
ACPI_FUNCTION_TRACE
(
ut_add_address_range
);
...
...
@@ -97,12 +96,6 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
range_info
->
end_address
=
(
address
+
length
-
1
);
range_info
->
region_node
=
region_node
;
status
=
acpi_ut_acquire_mutex
(
ACPI_MTX_NAMESPACE
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_FREE
(
range_info
);
return_ACPI_STATUS
(
status
);
}
range_info
->
next
=
acpi_gbl_address_range_list
[
space_id
];
acpi_gbl_address_range_list
[
space_id
]
=
range_info
;
...
...
@@ -112,7 +105,6 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id,
ACPI_FORMAT_UINT64
(
address
),
ACPI_FORMAT_UINT64
(
range_info
->
end_address
)));
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_NAMESPACE
);
return_ACPI_STATUS
(
AE_OK
);
}
...
...
drivers/acpi/acpica/utbuffer.c
View file @
f42106fe
...
...
@@ -239,8 +239,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
u8
buf_char
;
if
(
!
buffer
)
{
acpi_ut_file_printf
(
file
,
"Null Buffer Pointer in DumpBuffer!
\n
"
);
fprintf
(
file
,
"Null Buffer Pointer in DumpBuffer!
\n
"
);
return
;
}
...
...
@@ -254,7 +253,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
/* Print current offset */
acpi_ut_file_
printf
(
file
,
"%6.4X: "
,
(
base_offset
+
i
));
f
printf
(
file
,
"%6.4X: "
,
(
base_offset
+
i
));
/* Print 16 hex chars */
...
...
@@ -263,8 +262,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
/* Dump fill spaces */
acpi_ut_file_printf
(
file
,
"%*s"
,
((
display
*
2
)
+
1
),
" "
);
fprintf
(
file
,
"%*s"
,
((
display
*
2
)
+
1
),
" "
);
j
+=
display
;
continue
;
}
...
...
@@ -273,7 +271,7 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
case
DB_BYTE_DISPLAY
:
default:
/* Default is BYTE display */
acpi_ut_file_
printf
(
file
,
"%02X "
,
f
printf
(
file
,
"%02X "
,
buffer
[(
acpi_size
)
i
+
j
]);
break
;
...
...
@@ -281,26 +279,26 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
ACPI_MOVE_16_TO_32
(
&
temp32
,
&
buffer
[(
acpi_size
)
i
+
j
]);
acpi_ut_file_
printf
(
file
,
"%04X "
,
temp32
);
f
printf
(
file
,
"%04X "
,
temp32
);
break
;
case
DB_DWORD_DISPLAY
:
ACPI_MOVE_32_TO_32
(
&
temp32
,
&
buffer
[(
acpi_size
)
i
+
j
]);
acpi_ut_file_
printf
(
file
,
"%08X "
,
temp32
);
f
printf
(
file
,
"%08X "
,
temp32
);
break
;
case
DB_QWORD_DISPLAY
:
ACPI_MOVE_32_TO_32
(
&
temp32
,
&
buffer
[(
acpi_size
)
i
+
j
]);
acpi_ut_file_
printf
(
file
,
"%08X"
,
temp32
);
f
printf
(
file
,
"%08X"
,
temp32
);
ACPI_MOVE_32_TO_32
(
&
temp32
,
&
buffer
[(
acpi_size
)
i
+
j
+
4
]);
acpi_ut_file_
printf
(
file
,
"%08X "
,
temp32
);
f
printf
(
file
,
"%08X "
,
temp32
);
break
;
}
...
...
@@ -311,24 +309,24 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
* Print the ASCII equivalent characters but watch out for the bad
* unprintable ones (printable chars are 0x20 through 0x7E)
*/
acpi_ut_file_
printf
(
file
,
" "
);
f
printf
(
file
,
" "
);
for
(
j
=
0
;
j
<
16
;
j
++
)
{
if
(
i
+
j
>=
count
)
{
acpi_ut_file_
printf
(
file
,
"
\n
"
);
f
printf
(
file
,
"
\n
"
);
return
;
}
buf_char
=
buffer
[(
acpi_size
)
i
+
j
];
if
(
isprint
(
buf_char
))
{
acpi_ut_file_
printf
(
file
,
"%c"
,
buf_char
);
f
printf
(
file
,
"%c"
,
buf_char
);
}
else
{
acpi_ut_file_
printf
(
file
,
"."
);
f
printf
(
file
,
"."
);
}
}
/* Done with that line. */
acpi_ut_file_
printf
(
file
,
"
\n
"
);
f
printf
(
file
,
"
\n
"
);
i
+=
16
;
}
...
...
drivers/acpi/acpica/utdebug.c
View file @
f42106fe
...
...
@@ -560,6 +560,43 @@ acpi_ut_ptr_exit(u32 line_number,
}
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_str_exit
*
* PARAMETERS: line_number - Caller's line number
* function_name - Caller's procedure name
* module_name - Caller's module name
* component_id - Caller's component ID
* string - String to display
*
* RETURN: None
*
* DESCRIPTION: Function exit trace. Prints only if TRACE_FUNCTIONS bit is
* set in debug_level. Prints exit value also.
*
******************************************************************************/
void
acpi_ut_str_exit
(
u32
line_number
,
const
char
*
function_name
,
const
char
*
module_name
,
u32
component_id
,
const
char
*
string
)
{
/* Check if enabled up-front for performance */
if
(
ACPI_IS_DEBUG_ENABLED
(
ACPI_LV_FUNCTIONS
,
component_id
))
{
acpi_debug_print
(
ACPI_LV_FUNCTIONS
,
line_number
,
function_name
,
module_name
,
component_id
,
"%s %s
\n
"
,
acpi_gbl_function_exit_prefix
,
string
);
}
if
(
acpi_gbl_nesting_level
)
{
acpi_gbl_nesting_level
--
;
}
}
/*******************************************************************************
*
* FUNCTION: acpi_trace_point
...
...
@@ -591,27 +628,3 @@ acpi_trace_point(acpi_trace_event_type type, u8 begin, u8 *aml, char *pathname)
ACPI_EXPORT_SYMBOL
(
acpi_trace_point
)
#endif
#ifdef ACPI_APPLICATION
/*******************************************************************************
*
* FUNCTION: acpi_log_error
*
* PARAMETERS: format - Printf format field
* ... - Optional printf arguments
*
* RETURN: None
*
* DESCRIPTION: Print error message to the console, used by applications.
*
******************************************************************************/
void
ACPI_INTERNAL_VAR_XFACE
acpi_log_error
(
const
char
*
format
,
...)
{
va_list
args
;
va_start
(
args
,
format
);
(
void
)
acpi_ut_file_vprintf
(
ACPI_FILE_ERR
,
format
,
args
);
va_end
(
args
);
}
ACPI_EXPORT_SYMBOL
(
acpi_log_error
)
#endif
drivers/acpi/acpica/utdecode.c
View file @
f42106fe
...
...
@@ -253,7 +253,7 @@ const char *acpi_ut_get_object_type_name(union acpi_operand_object *obj_desc)
return_PTR
(
"Invalid object"
);
}
return_
P
TR
(
acpi_ut_get_type_name
(
obj_desc
->
common
.
type
));
return_
S
TR
(
acpi_ut_get_type_name
(
obj_desc
->
common
.
type
));
}
/*******************************************************************************
...
...
drivers/acpi/acpica/uthex.c
View file @
f42106fe
...
...
@@ -73,11 +73,43 @@ char acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
return
(
acpi_gbl_hex_to_ascii
[(
integer
>>
position
)
&
0xF
]);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_ascii_to_hex_byte
*
* PARAMETERS: two_ascii_chars - Pointer to two ASCII characters
* return_byte - Where converted byte is returned
*
* RETURN: Status and converted hex byte
*
* DESCRIPTION: Perform ascii-to-hex translation, exactly two ASCII characters
* to a single converted byte value.
*
******************************************************************************/
acpi_status
acpi_ut_ascii_to_hex_byte
(
char
*
two_ascii_chars
,
u8
*
return_byte
)
{
/* Both ASCII characters must be valid hex digits */
if
(
!
isxdigit
((
int
)
two_ascii_chars
[
0
])
||
!
isxdigit
((
int
)
two_ascii_chars
[
1
]))
{
return
(
AE_BAD_HEX_CONSTANT
);
}
*
return_byte
=
acpi_ut_ascii_char_to_hex
(
two_ascii_chars
[
1
])
|
(
acpi_ut_ascii_char_to_hex
(
two_ascii_chars
[
0
])
<<
4
);
return
(
AE_OK
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_ascii_char_to_hex
*
* PARAMETERS: hex_char - Hex character in Ascii
* PARAMETERS: hex_char - Hex character in Ascii. Must be:
* 0-9 or A-F or a-f
*
* RETURN: The binary value of the ascii/hex character
*
...
...
@@ -88,13 +120,19 @@ char acpi_ut_hex_to_ascii_char(u64 integer, u32 position)
u8
acpi_ut_ascii_char_to_hex
(
int
hex_char
)
{
if
(
hex_char
<=
0x39
)
{
return
((
u8
)(
hex_char
-
0x30
));
/* Values 0-9 */
if
(
hex_char
<=
'9'
)
{
return
((
u8
)(
hex_char
-
'0'
));
}
if
(
hex_char
<=
0x46
)
{
/* Upper case A-F */
if
(
hex_char
<=
'F'
)
{
return
((
u8
)(
hex_char
-
0x37
));
}
/* Lower case a-f */
return
((
u8
)(
hex_char
-
0x57
));
}
drivers/acpi/acpica/utinit.c
View file @
f42106fe
...
...
@@ -206,7 +206,7 @@ acpi_status acpi_ut_init_globals(void)
acpi_gbl_next_owner_id_offset
=
0
;
acpi_gbl_debugger_configuration
=
DEBUGGER_THREADING
;
acpi_gbl_osi_mutex
=
NULL
;
acpi_gbl_max_loop_iterations
=
0xFFFF
;
acpi_gbl_max_loop_iterations
=
ACPI_MAX_LOOP_COUNT
;
/* Hardware oriented */
...
...
drivers/acpi/acpica/utnonansi.c
View file @
f42106fe
...
...
@@ -48,8 +48,8 @@
ACPI_MODULE_NAME
(
"utnonansi"
)
/*
* Non-ANSI C library functions - strlwr, strupr, stricmp, and
a 64-bit
*
version of strtoul
.
* Non-ANSI C library functions - strlwr, strupr, stricmp, and
"safe"
*
string functions
.
*/
/*******************************************************************************
*
...
...
@@ -200,356 +200,3 @@ acpi_ut_safe_strncat(char *dest,
return
(
FALSE
);
}
#endif
/*******************************************************************************
*
* FUNCTION: acpi_ut_strtoul64
*
* PARAMETERS: string - Null terminated string
* base - Radix of the string: 16 or 10 or
* ACPI_ANY_BASE
* max_integer_byte_width - Maximum allowable integer,in bytes:
* 4 or 8 (32 or 64 bits)
* 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 input integer
* size (often the current mode of the interpreter).
*
* NOTES: Negative numbers are not supported, as they are not supported
* by ACPI.
*
* acpi_gbl_integer_byte_width should be set to the proper width.
* For the core ACPICA code, this width depends on the DSDT
* version. For iASL, the default byte width is always 8 for the
* parser, but error checking is performed later to flag cases
* where a 64-bit constant is defined in a 32-bit DSDT/SSDT.
*
* Does not support Octal strings, not needed at this time.
*
******************************************************************************/
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
base
,
u32
max_integer_byte_width
,
u64
*
ret_integer
)
{
u32
this_digit
=
0
;
u64
return_value
=
0
;
u64
quotient
;
u64
dividend
;
u8
valid_digits
=
0
;
u8
sign_of0x
=
0
;
u8
term
=
0
;
ACPI_FUNCTION_TRACE_STR
(
ut_strtoul64
,
string
);
switch
(
base
)
{
case
ACPI_ANY_BASE
:
case
10
:
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
(
base
==
ACPI_ANY_BASE
)
{
/*
* Base equal to ACPI_ANY_BASE means 'Either decimal or hex'.
* 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
(
base
==
ACPI_ANY_BASE
)
{
goto
error_exit
;
}
else
{
goto
all_done
;
}
}
/*
* Perform a 32-bit or 64-bit conversion, depending upon the input
* byte width
*/
dividend
=
(
max_integer_byte_width
<=
ACPI_MAX32_BYTE_WIDTH
)
?
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
(
base
==
ACPI_ANY_BASE
)
{
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
)
&&
(
max_integer_byte_width
<=
ACPI_MAX32_BYTE_WIDTH
))))
{
/*
* This is to_integer operation case.
* No 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
(
base
==
ACPI_ANY_BASE
)
{
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 (10 or 16) */
if
(
base
==
10
)
{
return_ACPI_STATUS
(
AE_BAD_DECIMAL_CONSTANT
);
}
else
{
return_ACPI_STATUS
(
AE_BAD_HEX_CONSTANT
);
}
}
#ifdef _OBSOLETE_FUNCTIONS
/* Removed: 01/2016 */
/*******************************************************************************
*
* FUNCTION: strtoul64
*
* PARAMETERS: string - Null terminated string
* terminater - Where a pointer to the terminating byte
* is returned
* base - Radix of the string
*
* RETURN: Converted value
*
* DESCRIPTION: Convert a string into an unsigned value.
*
******************************************************************************/
acpi_status
strtoul64
(
char
*
string
,
u32
base
,
u64
*
ret_integer
)
{
u32
index
;
u32
sign
;
u64
return_value
=
0
;
acpi_status
status
=
AE_OK
;
*
ret_integer
=
0
;
switch
(
base
)
{
case
0
:
case
8
:
case
10
:
case
16
:
break
;
default:
/*
* The specified Base parameter is not in the domain of
* this function:
*/
return
(
AE_BAD_PARAMETER
);
}
/* Skip over any white space in the buffer: */
while
(
isspace
((
int
)
*
string
)
||
*
string
==
'\t'
)
{
++
string
;
}
/*
* The buffer may contain an optional plus or minus sign.
* If it does, then skip over it but remember what is was:
*/
if
(
*
string
==
'-'
)
{
sign
=
ACPI_SIGN_NEGATIVE
;
++
string
;
}
else
if
(
*
string
==
'+'
)
{
++
string
;
sign
=
ACPI_SIGN_POSITIVE
;
}
else
{
sign
=
ACPI_SIGN_POSITIVE
;
}
/*
* If the input parameter Base is zero, then we need to
* determine if it is octal, decimal, or hexadecimal:
*/
if
(
base
==
0
)
{
if
(
*
string
==
'0'
)
{
if
(
tolower
((
int
)
*
(
++
string
))
==
'x'
)
{
base
=
16
;
++
string
;
}
else
{
base
=
8
;
}
}
else
{
base
=
10
;
}
}
/*
* For octal and hexadecimal bases, skip over the leading
* 0 or 0x, if they are present.
*/
if
(
base
==
8
&&
*
string
==
'0'
)
{
string
++
;
}
if
(
base
==
16
&&
*
string
==
'0'
&&
tolower
((
int
)
*
(
++
string
))
==
'x'
)
{
string
++
;
}
/* Main loop: convert the string to an unsigned long */
while
(
*
string
)
{
if
(
isdigit
((
int
)
*
string
))
{
index
=
((
u8
)
*
string
)
-
'0'
;
}
else
{
index
=
(
u8
)
toupper
((
int
)
*
string
);
if
(
isupper
((
int
)
index
))
{
index
=
index
-
'A'
+
10
;
}
else
{
goto
error_exit
;
}
}
if
(
index
>=
base
)
{
goto
error_exit
;
}
/* Check to see if value is out of range: */
if
(
return_value
>
((
ACPI_UINT64_MAX
-
(
u64
)
index
)
/
(
u64
)
base
))
{
goto
error_exit
;
}
else
{
return_value
*=
base
;
return_value
+=
index
;
}
++
string
;
}
/* If a minus sign was present, then "the conversion is negated": */
if
(
sign
==
ACPI_SIGN_NEGATIVE
)
{
return_value
=
(
ACPI_UINT32_MAX
-
return_value
)
+
1
;
}
*
ret_integer
=
return_value
;
return
(
status
);
error_exit:
switch
(
base
)
{
case
8
:
status
=
AE_BAD_OCTAL_CONSTANT
;
break
;
case
10
:
status
=
AE_BAD_DECIMAL_CONSTANT
;
break
;
case
16
:
status
=
AE_BAD_HEX_CONSTANT
;
break
;
default:
/* Base validated above */
break
;
}
return
(
status
);
}
#endif
drivers/acpi/acpica/utosi.c
View file @
f42106fe
...
...
@@ -390,11 +390,22 @@ struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name)
* PARAMETERS: walk_state - Current walk state
*
* RETURN: Status
* Integer: TRUE (0) if input string is matched
* FALSE (-1) if string is not matched
*
* DESCRIPTION: Implementation of the _OSI predefined control method. When
* an invocation of _OSI is encountered in the system AML,
* control is transferred to this function.
*
* (August 2016)
* Note: _OSI is now defined to return "Ones" to indicate a match, for
* compatibility with other ACPI implementations. On a 32-bit DSDT, Ones
* is 0xFFFFFFFF. On a 64-bit DSDT, Ones is 0xFFFFFFFFFFFFFFFF
* (ACPI_UINT64_MAX).
*
* This function always returns ACPI_UINT64_MAX for TRUE, and later code
* will truncate this to 32 bits if necessary.
*
******************************************************************************/
acpi_status
acpi_ut_osi_implementation
(
struct
acpi_walk_state
*
walk_state
)
...
...
@@ -404,7 +415,7 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
struct
acpi_interface_info
*
interface_info
;
acpi_interface_handler
interface_handler
;
acpi_status
status
;
u
32
return_value
;
u
64
return_value
;
ACPI_FUNCTION_TRACE
(
ut_osi_implementation
);
...
...
@@ -444,7 +455,7 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
acpi_gbl_osi_data
=
interface_info
->
value
;
}
return_value
=
ACPI_UINT
32
_MAX
;
return_value
=
ACPI_UINT
64
_MAX
;
}
acpi_os_release_mutex
(
acpi_gbl_osi_mutex
);
...
...
@@ -456,9 +467,10 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
*/
interface_handler
=
acpi_gbl_interface_handler
;
if
(
interface_handler
)
{
return_value
=
interface_handler
(
string_desc
->
string
.
pointer
,
return_value
);
if
(
interface_handler
(
string_desc
->
string
.
pointer
,
(
u32
)
return_value
))
{
return_value
=
ACPI_UINT64_MAX
;
}
}
ACPI_DEBUG_PRINT_RAW
((
ACPI_DB_INFO
,
...
...
drivers/acpi/acpica/utpredef.c
View file @
f42106fe
...
...
@@ -176,8 +176,6 @@ void acpi_ut_get_expected_return_types(char *buffer, u32 expected_btypes)
******************************************************************************/
#if (defined ACPI_ASL_COMPILER || defined ACPI_HELP_APP)
#include <stdio.h>
#include <string.h>
/* Local prototypes */
...
...
drivers/acpi/acpica/utprint.c
View file @
f42106fe
...
...
@@ -336,7 +336,7 @@ static char *acpi_ut_format_number(char *string,
/*******************************************************************************
*
* FUNCTION:
acpi_ut_
vsnprintf
* FUNCTION: vsnprintf
*
* PARAMETERS: string - String with boundary
* size - Boundary of the string
...
...
@@ -349,9 +349,7 @@ static char *acpi_ut_format_number(char *string,
*
******************************************************************************/
int
acpi_ut_vsnprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
va_list
args
)
int
vsnprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
va_list
args
)
{
u8
base
;
u8
type
;
...
...
@@ -586,7 +584,7 @@ acpi_ut_vsnprintf(char *string,
/*******************************************************************************
*
* FUNCTION:
acpi_ut_
snprintf
* FUNCTION: snprintf
*
* PARAMETERS: string - String with boundary
* size - Boundary of the string
...
...
@@ -598,13 +596,38 @@ acpi_ut_vsnprintf(char *string,
*
******************************************************************************/
int
acpi_ut_
snprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
...)
int
snprintf
(
char
*
string
,
acpi_size
size
,
const
char
*
format
,
...)
{
va_list
args
;
int
length
;
va_start
(
args
,
format
);
length
=
acpi_ut_vsnprintf
(
string
,
size
,
format
,
args
);
length
=
vsnprintf
(
string
,
size
,
format
,
args
);
va_end
(
args
);
return
(
length
);
}
/*******************************************************************************
*
* FUNCTION: sprintf
*
* PARAMETERS: string - String with boundary
* Format, ... - Standard printf format
*
* RETURN: Number of bytes actually written.
*
* DESCRIPTION: Formatted output to a string.
*
******************************************************************************/
int
sprintf
(
char
*
string
,
const
char
*
format
,
...)
{
va_list
args
;
int
length
;
va_start
(
args
,
format
);
length
=
vsnprintf
(
string
,
ACPI_UINT32_MAX
,
format
,
args
);
va_end
(
args
);
return
(
length
);
...
...
@@ -613,7 +636,59 @@ int acpi_ut_snprintf(char *string, acpi_size size, const char *format, ...)
#ifdef ACPI_APPLICATION
/*******************************************************************************
*
* FUNCTION: acpi_ut_file_vprintf
* FUNCTION: vprintf
*
* PARAMETERS: format - Standard printf format
* args - Argument list
*
* RETURN: Number of bytes actually written.
*
* DESCRIPTION: Formatted output to stdout using argument list pointer.
*
******************************************************************************/
int
vprintf
(
const
char
*
format
,
va_list
args
)
{
acpi_cpu_flags
flags
;
int
length
;
flags
=
acpi_os_acquire_lock
(
acpi_gbl_print_lock
);
length
=
vsnprintf
(
acpi_gbl_print_buffer
,
sizeof
(
acpi_gbl_print_buffer
),
format
,
args
);
(
void
)
fwrite
(
acpi_gbl_print_buffer
,
length
,
1
,
ACPI_FILE_OUT
);
acpi_os_release_lock
(
acpi_gbl_print_lock
,
flags
);
return
(
length
);
}
/*******************************************************************************
*
* FUNCTION: printf
*
* PARAMETERS: Format, ... - Standard printf format
*
* RETURN: Number of bytes actually written.
*
* DESCRIPTION: Formatted output to stdout.
*
******************************************************************************/
int
printf
(
const
char
*
format
,
...)
{
va_list
args
;
int
length
;
va_start
(
args
,
format
);
length
=
vprintf
(
format
,
args
);
va_end
(
args
);
return
(
length
);
}
/*******************************************************************************
*
* FUNCTION: vfprintf
*
* PARAMETERS: file - File descriptor
* format - Standard printf format
...
...
@@ -625,16 +700,16 @@ int acpi_ut_snprintf(char *string, acpi_size size, const char *format, ...)
*
******************************************************************************/
int
acpi_ut_file_vprintf
(
ACPI_FILE
file
,
const
char
*
format
,
va_list
args
)
int
vfprintf
(
FILE
*
file
,
const
char
*
format
,
va_list
args
)
{
acpi_cpu_flags
flags
;
int
length
;
flags
=
acpi_os_acquire_lock
(
acpi_gbl_print_lock
);
length
=
acpi_ut_
vsnprintf
(
acpi_gbl_print_buffer
,
length
=
vsnprintf
(
acpi_gbl_print_buffer
,
sizeof
(
acpi_gbl_print_buffer
),
format
,
args
);
(
void
)
acpi_os_write_file
(
file
,
acpi_gbl_print_buffer
,
length
,
1
);
(
void
)
fwrite
(
acpi_gbl_print_buffer
,
length
,
1
,
file
);
acpi_os_release_lock
(
acpi_gbl_print_lock
,
flags
);
return
(
length
);
...
...
@@ -642,7 +717,7 @@ int acpi_ut_file_vprintf(ACPI_FILE file, const char *format, va_list args)
/*******************************************************************************
*
* FUNCTION:
acpi_ut_file_
printf
* FUNCTION:
f
printf
*
* PARAMETERS: file - File descriptor
* Format, ... - Standard printf format
...
...
@@ -653,13 +728,13 @@ int acpi_ut_file_vprintf(ACPI_FILE file, const char *format, va_list args)
*
******************************************************************************/
int
acpi_ut_file_printf
(
ACPI_FILE
file
,
const
char
*
format
,
...)
int
fprintf
(
FILE
*
file
,
const
char
*
format
,
...)
{
va_list
args
;
int
length
;
va_start
(
args
,
format
);
length
=
acpi_ut_file_v
printf
(
file
,
format
,
args
);
length
=
vf
printf
(
file
,
format
,
args
);
va_end
(
args
);
return
(
length
);
...
...
drivers/acpi/acpica/utstrtoul64.c
0 → 100644
View file @
f42106fe
/*******************************************************************************
*
* Module Name: utstrtoul64 - string to 64-bit integer support
*
******************************************************************************/
/*
* Copyright (C) 2000 - 2016, 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"
/*******************************************************************************
*
* The functions in this module satisfy the need for 64-bit string-to-integer
* conversions on both 32-bit and 64-bit platforms.
*
******************************************************************************/
#define _COMPONENT ACPI_UTILITIES
ACPI_MODULE_NAME
(
"utstrtoul64"
)
/* Local prototypes */
static
u64
acpi_ut_strtoul_base10
(
char
*
string
,
u32
flags
);
static
u64
acpi_ut_strtoul_base16
(
char
*
string
,
u32
flags
);
/*******************************************************************************
*
* String conversion rules as written in the ACPI specification. The error
* conditions and behavior are different depending on the type of conversion.
*
*
* Implicit data type conversion: string-to-integer
* --------------------------------------------------
*
* Base is always 16. This is the ACPI_STRTOUL_BASE16 case.
*
* Example:
* Add ("BA98", Arg0, Local0)
*
* The integer is initialized to the value zero.
* The ASCII string is interpreted as a hexadecimal constant.
*
* 1) A "0x" prefix is not allowed. However, ACPICA allows this for
* compatibility with previous ACPICA. (NO ERROR)
*
* 2) Terminates when the size of an integer is reached (32 or 64 bits).
* (NO ERROR)
*
* 3) The first non-hex character terminates the conversion without error.
* (NO ERROR)
*
* 4) Conversion of a null (zero-length) string to an integer is not
* allowed. However, ACPICA allows this for compatibility with previous
* ACPICA. This conversion returns the value 0. (NO ERROR)
*
*
* Explicit data type conversion: to_integer() with string operand
* ---------------------------------------------------------------
*
* Base is either 10 (default) or 16 (with 0x prefix)
*
* Examples:
* to_integer ("1000")
* to_integer ("0xABCD")
*
* 1) Can be (must be) either a decimal or hexadecimal numeric string.
* A hex value must be prefixed by "0x" or it is interpreted as a decimal.
*
* 2) The value must not exceed the maximum of an integer value. ACPI spec
* states the behavior is "unpredictable", so ACPICA matches the behavior
* of the implicit conversion case.(NO ERROR)
*
* 3) Behavior on the first non-hex character is not specified by the ACPI
* spec, so ACPICA matches the behavior of the implicit conversion case
* and terminates. (NO ERROR)
*
* 4) A null (zero-length) string is illegal.
* However, ACPICA allows this for compatibility with previous ACPICA.
* This conversion returns the value 0. (NO ERROR)
*
******************************************************************************/
/*******************************************************************************
*
* FUNCTION: acpi_ut_strtoul64
*
* PARAMETERS: string - Null terminated input string
* flags - Conversion info, see below
* return_value - 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 input integer
* size in Flags (often the current mode of the interpreter).
*
* Values for Flags:
* ACPI_STRTOUL_32BIT - Max integer value is 32 bits
* ACPI_STRTOUL_64BIT - Max integer value is 64 bits
* ACPI_STRTOUL_BASE16 - Input string is hexadecimal. Default
* is 10/16 based on string prefix (0x).
*
* NOTES:
* Negative numbers are not supported, as they are not supported by ACPI.
*
* Supports only base 16 or base 10 strings/values. Does not
* support Octal strings, as these are not supported by ACPI.
*
* Current users of this support:
*
* interpreter - Implicit and explicit conversions, GPE method names
* debugger - Command line input string conversion
* iASL - Main parser, conversion of constants to integers
* iASL - Data Table Compiler parser (constant math expressions)
* iASL - Preprocessor (constant math expressions)
* acpi_dump - Input table addresses
* acpi_exec - Testing of the acpi_ut_strtoul64 function
*
* Note concerning callers:
* acpi_gbl_integer_byte_width can be used to set the 32/64 limit. If used,
* this global should be set to the proper width. For the core ACPICA code,
* this width depends on the DSDT version. For iASL, the default byte
* width is always 8 for the parser, but error checking is performed later
* to flag cases where a 64-bit constant is defined in a 32-bit DSDT/SSDT.
*
******************************************************************************/
acpi_status
acpi_ut_strtoul64
(
char
*
string
,
u32
flags
,
u64
*
return_value
)
{
acpi_status
status
=
AE_OK
;
u32
base
;
ACPI_FUNCTION_TRACE_STR
(
ut_strtoul64
,
string
);
/* Parameter validation */
if
(
!
string
||
!
return_value
)
{
return_ACPI_STATUS
(
AE_BAD_PARAMETER
);
}
*
return_value
=
0
;
/* Check for zero-length string, returns 0 */
if
(
*
string
==
0
)
{
return_ACPI_STATUS
(
AE_OK
);
}
/* Skip over any white space at start of string */
while
(
isspace
((
int
)
*
string
))
{
string
++
;
}
/* End of string? return 0 */
if
(
*
string
==
0
)
{
return_ACPI_STATUS
(
AE_OK
);
}
/*
* 1) The "0x" prefix indicates base 16. Per the ACPI specification,
* the "0x" prefix is only allowed for implicit (non-strict) conversions.
* However, we always allow it for compatibility with older ACPICA.
*/
if
((
*
string
==
ACPI_ASCII_ZERO
)
&&
(
tolower
((
int
)
*
(
string
+
1
))
==
'x'
))
{
string
+=
2
;
/* Go past the 0x */
if
(
*
string
==
0
)
{
return_ACPI_STATUS
(
AE_OK
);
/* Return value 0 */
}
base
=
16
;
}
/* 2) Force to base 16 (implicit conversion case) */
else
if
(
flags
&
ACPI_STRTOUL_BASE16
)
{
base
=
16
;
}
/* 3) Default fallback is to Base 10 */
else
{
base
=
10
;
}
/* Skip all leading zeros */
while
(
*
string
==
ACPI_ASCII_ZERO
)
{
string
++
;
if
(
*
string
==
0
)
{
return_ACPI_STATUS
(
AE_OK
);
/* Return value 0 */
}
}
/* Perform the base 16 or 10 conversion */
if
(
base
==
16
)
{
*
return_value
=
acpi_ut_strtoul_base16
(
string
,
flags
);
}
else
{
*
return_value
=
acpi_ut_strtoul_base10
(
string
,
flags
);
}
return_ACPI_STATUS
(
status
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_strtoul_base10
*
* PARAMETERS: string - Null terminated input string
* flags - Conversion info
*
* RETURN: 64-bit converted integer
*
* DESCRIPTION: Performs a base 10 conversion of the input string to an
* integer value, either 32 or 64 bits.
* Note: String must be valid and non-null.
*
******************************************************************************/
static
u64
acpi_ut_strtoul_base10
(
char
*
string
,
u32
flags
)
{
int
ascii_digit
;
u64
next_value
;
u64
return_value
=
0
;
/* Main loop: convert each ASCII byte in the input string */
while
(
*
string
)
{
ascii_digit
=
*
string
;
if
(
!
isdigit
(
ascii_digit
))
{
/* Not ASCII 0-9, terminate */
goto
exit
;
}
/* Convert and insert (add) the decimal digit */
next_value
=
(
return_value
*
10
)
+
(
ascii_digit
-
ACPI_ASCII_ZERO
);
/* Check for overflow (32 or 64 bit) - return current converted value */
if
(((
flags
&
ACPI_STRTOUL_32BIT
)
&&
(
next_value
>
ACPI_UINT32_MAX
))
||
(
next_value
<
return_value
))
{
/* 64-bit overflow case */
goto
exit
;
}
return_value
=
next_value
;
string
++
;
}
exit:
return
(
return_value
);
}
/*******************************************************************************
*
* FUNCTION: acpi_ut_strtoul_base16
*
* PARAMETERS: string - Null terminated input string
* flags - conversion info
*
* RETURN: 64-bit converted integer
*
* DESCRIPTION: Performs a base 16 conversion of the input string to an
* integer value, either 32 or 64 bits.
* Note: String must be valid and non-null.
*
******************************************************************************/
static
u64
acpi_ut_strtoul_base16
(
char
*
string
,
u32
flags
)
{
int
ascii_digit
;
u32
valid_digits
=
1
;
u64
return_value
=
0
;
/* Main loop: convert each ASCII byte in the input string */
while
(
*
string
)
{
/* Check for overflow (32 or 64 bit) - return current converted value */
if
((
valid_digits
>
16
)
||
((
valid_digits
>
8
)
&&
(
flags
&
ACPI_STRTOUL_32BIT
)))
{
goto
exit
;
}
ascii_digit
=
*
string
;
if
(
!
isxdigit
(
ascii_digit
))
{
/* Not Hex ASCII A-F, a-f, or 0-9, terminate */
goto
exit
;
}
/* Convert and insert the hex digit */
return_value
=
(
return_value
<<
4
)
|
acpi_ut_ascii_char_to_hex
(
ascii_digit
);
string
++
;
valid_digits
++
;
}
exit:
return
(
return_value
);
}
drivers/acpi/acpica/uttrack.c
View file @
f42106fe
...
...
@@ -95,13 +95,11 @@ acpi_ut_create_list(const char *list_name,
{
struct
acpi_memory_list
*
cache
;
cache
=
acpi_os_allocate
(
sizeof
(
struct
acpi_memory_list
));
cache
=
acpi_os_allocate
_zeroed
(
sizeof
(
struct
acpi_memory_list
));
if
(
!
cache
)
{
return
(
AE_NO_MEMORY
);
}
memset
(
cache
,
0
,
sizeof
(
struct
acpi_memory_list
));
cache
->
list_name
=
list_name
;
cache
->
object_size
=
object_size
;
...
...
drivers/acpi/acpica/utxface.c
View file @
f42106fe
...
...
@@ -61,7 +61,7 @@ ACPI_MODULE_NAME("utxface")
* DESCRIPTION: Shutdown the ACPICA subsystem and release all resources.
*
******************************************************************************/
acpi_status
__init
acpi_terminate
(
void
)
acpi_status
ACPI_INIT_FUNCTION
acpi_terminate
(
void
)
{
acpi_status
status
;
...
...
drivers/acpi/acpica/utxfinit.c
View file @
f42106fe
...
...
@@ -69,7 +69,7 @@ void ae_do_object_overrides(void);
*
******************************************************************************/
acpi_status
__init
acpi_initialize_subsystem
(
void
)
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_subsystem
(
void
)
{
acpi_status
status
;
...
...
@@ -141,7 +141,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_initialize_subsystem)
* Puts system into ACPI mode if it isn't already.
*
******************************************************************************/
acpi_status
__init
acpi_enable_subsystem
(
u32
flags
)
acpi_status
ACPI_INIT_FUNCTION
acpi_enable_subsystem
(
u32
flags
)
{
acpi_status
status
=
AE_OK
;
...
...
@@ -239,7 +239,7 @@ ACPI_EXPORT_SYMBOL_INIT(acpi_enable_subsystem)
* objects and executing AML code for Regions, buffers, etc.
*
******************************************************************************/
acpi_status
__init
acpi_initialize_objects
(
u32
flags
)
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_objects
(
u32
flags
)
{
acpi_status
status
=
AE_OK
;
...
...
@@ -265,7 +265,8 @@ acpi_status __init acpi_initialize_objects(u32 flags)
* all of the tables have been loaded. It is a legacy option and is
* not compatible with other ACPI implementations. See acpi_ns_load_table.
*/
if
(
acpi_gbl_group_module_level_code
)
{
if
(
!
acpi_gbl_parse_table_as_term_list
&&
acpi_gbl_group_module_level_code
)
{
acpi_ns_exec_module_code_list
();
/*
...
...
include/acpi/acconfig.h
View file @
f42106fe
...
...
@@ -144,6 +144,10 @@
#define ACPI_ADDRESS_RANGE_MAX 2
/* Maximum number of While() loops before abort */
#define ACPI_MAX_LOOP_COUNT 0xFFFF
/******************************************************************************
*
* ACPI Specification constants (Do not change unless the specification changes)
...
...
include/acpi/acoutput.h
View file @
f42106fe
...
...
@@ -366,7 +366,7 @@
ACPI_TRACE_ENTRY (name, acpi_ut_trace_u32, u32, value)
#define ACPI_FUNCTION_TRACE_STR(name, string) \
ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, char *, string)
ACPI_TRACE_ENTRY (name, acpi_ut_trace_str, c
onst c
har *, string)
#define ACPI_FUNCTION_ENTRY() \
acpi_ut_track_stack_ptr()
...
...
@@ -425,6 +425,9 @@
#define return_PTR(pointer) \
ACPI_TRACE_EXIT (acpi_ut_ptr_exit, void *, pointer)
#define return_STR(string) \
ACPI_TRACE_EXIT (acpi_ut_str_exit, const char *, string)
#define return_VALUE(value) \
ACPI_TRACE_EXIT (acpi_ut_value_exit, u64, value)
...
...
@@ -478,6 +481,7 @@
#define return_VOID return
#define return_ACPI_STATUS(s) return(s)
#define return_PTR(s) return(s)
#define return_STR(s) return(s)
#define return_VALUE(s) return(s)
#define return_UINT8(s) return(s)
#define return_UINT32(s) return(s)
...
...
include/acpi/acpiosxf.h
View file @
f42106fe
...
...
@@ -371,6 +371,12 @@ acpi_status acpi_os_wait_command_ready(void);
acpi_status
acpi_os_notify_command_complete
(
void
);
#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
/*
* Obtain ACPI table(s)
*/
...
...
@@ -416,41 +422,4 @@ char *acpi_os_get_next_filename(void *dir_handle);
void
acpi_os_close_directory
(
void
*
dir_handle
);
#endif
/*
* File I/O and related support
*/
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_file
ACPI_FILE
acpi_os_open_file
(
const
char
*
path
,
u8
modes
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_file
void
acpi_os_close_file
(
ACPI_FILE
file
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_file
int
acpi_os_read_file
(
ACPI_FILE
file
,
void
*
buffer
,
acpi_size
size
,
acpi_size
count
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_file
int
acpi_os_write_file
(
ACPI_FILE
file
,
void
*
buffer
,
acpi_size
size
,
acpi_size
count
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_file_offset
long
acpi_os_get_file_offset
(
ACPI_FILE
file
);
#endif
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_set_file_offset
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 @
f42106fe
...
...
@@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20160
422
#define ACPI_CA_VERSION 0x20160
831
#include <acpi/acconfig.h>
#include <acpi/actypes.h>
...
...
@@ -194,6 +194,13 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_do_not_use_xsdt, FALSE);
*/
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_group_module_level_code
,
TRUE
);
/*
* Optionally support module level code by parsing the entire table as
* a term_list. Default is FALSE, do not execute entire table until some
* lock order issues are fixed.
*/
ACPI_INIT_GLOBAL
(
u8
,
acpi_gbl_parse_table_as_term_list
,
FALSE
);
/*
* Optionally use 32-bit FADT addresses if and when there is a conflict
* (address mismatch) between the 32-bit and 64-bit versions of the
...
...
@@ -416,18 +423,19 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);
/*
* Initialization
*/
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_tables
(
struct
acpi_table_desc
*
initial_storage
,
u32
initial_table_count
,
u8
allow_resize
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_initialize_subsystem
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_enable_subsystem
(
u32
flags
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_subsystem
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_enable_subsystem
(
u32
flags
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_initialize_objects
(
u32
flags
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_terminate
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_terminate
(
void
))
/*
* Miscellaneous global interfaces
...
...
@@ -467,7 +475,7 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status
/*
* ACPI table load/unload interfaces
*/
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_install_table
(
acpi_physical_address
address
,
u8
physical
))
...
...
@@ -476,14 +484,17 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
acpi_unload_parent_table
(
acpi_handle
object
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_load_tables
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_load_tables
(
void
))
/*
* ACPI table manipulation interfaces
*/
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_reallocate_root_table
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_reallocate_root_table
(
void
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
ACPI_INIT_FUNCTION
acpi_find_root_pointer
(
acpi_physical_address
*
rsdp_address
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
...
...
@@ -731,6 +742,10 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status
acpi_finish_gpe
(
acpi_handle
gpe_device
,
u32
gpe_number
))
ACPI_HW_DEPENDENT_RETURN_STATUS
(
acpi_status
acpi_mask_gpe
(
acpi_handle
gpe_device
,
u32
gpe_number
,
u8
is_masked
))
ACPI_HW_DEPENDENT_RETURN_STATUS
(
acpi_status
acpi_mark_gpe_for_wake
(
acpi_handle
gpe_device
,
u32
gpe_number
))
...
...
@@ -935,9 +950,6 @@ 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
,
...))
acpi_status
acpi_initialize_debugger
(
void
);
...
...
include/acpi/actbl.h
View file @
f42106fe
...
...
@@ -230,62 +230,72 @@ struct acpi_table_facs {
/* Fields common to all versions of the FADT */
struct
acpi_table_fadt
{
struct
acpi_table_header
header
;
/* Common ACPI table header */
u32
facs
;
/* 32-bit physical address of FACS */
u32
dsdt
;
/* 32-bit physical address of DSDT */
u8
model
;
/* System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */
u8
preferred_profile
;
/* Conveys preferred power management profile to OSPM. */
u16
sci_interrupt
;
/* System vector of SCI interrupt */
u32
smi_command
;
/* 32-bit Port address of SMI command port */
u8
acpi_enable
;
/* Value to write to SMI_CMD to enable ACPI */
u8
acpi_disable
;
/* Value to write to SMI_CMD to disable ACPI */
u8
s4_bios_request
;
/* Value to write to SMI_CMD to enter S4BIOS state */
u8
pstate_control
;
/* Processor performance state control */
u32
pm1a_event_block
;
/* 32-bit port address of Power Mgt 1a Event Reg Blk */
u32
pm1b_event_block
;
/* 32-bit port address of Power Mgt 1b Event Reg Blk */
u32
pm1a_control_block
;
/* 32-bit port address of Power Mgt 1a Control Reg Blk */
u32
pm1b_control_block
;
/* 32-bit port address of Power Mgt 1b Control Reg Blk */
u32
pm2_control_block
;
/* 32-bit port address of Power Mgt 2 Control Reg Blk */
u32
pm_timer_block
;
/* 32-bit port address of Power Mgt Timer Ctrl Reg Blk */
u32
gpe0_block
;
/* 32-bit port address of General Purpose Event 0 Reg Blk */
u32
gpe1_block
;
/* 32-bit port address of General Purpose Event 1 Reg Blk */
u8
pm1_event_length
;
/* Byte Length of ports at pm1x_event_block */
u8
pm1_control_length
;
/* Byte Length of ports at pm1x_control_block */
u8
pm2_control_length
;
/* Byte Length of ports at pm2_control_block */
u8
pm_timer_length
;
/* Byte Length of ports at pm_timer_block */
u8
gpe0_block_length
;
/* Byte Length of ports at gpe0_block */
u8
gpe1_block_length
;
/* Byte Length of ports at gpe1_block */
u8
gpe1_base
;
/* Offset in GPE number space where GPE1 events start */
u8
cst_control
;
/* Support for the _CST object and C-States change notification */
u16
c2_latency
;
/* Worst case HW latency to enter/exit C2 state */
u16
c3_latency
;
/* Worst case HW latency to enter/exit C3 state */
u16
flush_size
;
/* Processor memory cache line width, in bytes */
u16
flush_stride
;
/* Number of flush strides that need to be read */
u8
duty_offset
;
/* Processor duty cycle index in processor P_CNT reg */
u8
duty_width
;
/* Processor duty cycle value bit width in P_CNT register */
u8
day_alarm
;
/* Index to day-of-month alarm in RTC CMOS RAM */
u8
month_alarm
;
/* Index to month-of-year alarm in RTC CMOS RAM */
u8
century
;
/* Index to century in RTC CMOS RAM */
u16
boot_flags
;
/* IA-PC Boot Architecture Flags (see below for individual flags) */
u8
reserved
;
/* Reserved, must be zero */
u32
flags
;
/* Miscellaneous flag bits (see below for individual flags) */
struct
acpi_generic_address
reset_register
;
/* 64-bit address of the Reset register */
u8
reset_value
;
/* Value to write to the reset_register port to reset the system */
u16
arm_boot_flags
;
/* ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
u8
minor_revision
;
/* FADT Minor Revision (ACPI 5.1) */
u64
Xfacs
;
/* 64-bit physical address of FACS */
u64
Xdsdt
;
/* 64-bit physical address of DSDT */
struct
acpi_generic_address
xpm1a_event_block
;
/* 64-bit Extended Power Mgt 1a Event Reg Blk address */
struct
acpi_generic_address
xpm1b_event_block
;
/* 64-bit Extended Power Mgt 1b Event Reg Blk address */
struct
acpi_generic_address
xpm1a_control_block
;
/* 64-bit Extended Power Mgt 1a Control Reg Blk address */
struct
acpi_generic_address
xpm1b_control_block
;
/* 64-bit Extended Power Mgt 1b Control Reg Blk address */
struct
acpi_generic_address
xpm2_control_block
;
/* 64-bit Extended Power Mgt 2 Control Reg Blk address */
struct
acpi_generic_address
xpm_timer_block
;
/* 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
struct
acpi_generic_address
xgpe0_block
;
/* 64-bit Extended General Purpose Event 0 Reg Blk address */
struct
acpi_generic_address
xgpe1_block
;
/* 64-bit Extended General Purpose Event 1 Reg Blk address */
struct
acpi_generic_address
sleep_control
;
/* 64-bit Sleep Control register (ACPI 5.0) */
struct
acpi_generic_address
sleep_status
;
/* 64-bit Sleep Status register (ACPI 5.0) */
u64
hypervisor_id
;
/* Hypervisor Vendor ID (ACPI 6.0) */
struct
acpi_table_header
header
;
/* [V1] Common ACPI table header */
u32
facs
;
/* [V1] 32-bit physical address of FACS */
u32
dsdt
;
/* [V1] 32-bit physical address of DSDT */
u8
model
;
/* [V1] System Interrupt Model (ACPI 1.0) - not used in ACPI 2.0+ */
u8
preferred_profile
;
/* [V1] Conveys preferred power management profile to OSPM. */
u16
sci_interrupt
;
/* [V1] System vector of SCI interrupt */
u32
smi_command
;
/* [V1] 32-bit Port address of SMI command port */
u8
acpi_enable
;
/* [V1] Value to write to SMI_CMD to enable ACPI */
u8
acpi_disable
;
/* [V1] Value to write to SMI_CMD to disable ACPI */
u8
s4_bios_request
;
/* [V1] Value to write to SMI_CMD to enter S4BIOS state */
u8
pstate_control
;
/* [V1] Processor performance state control */
u32
pm1a_event_block
;
/* [V1] 32-bit port address of Power Mgt 1a Event Reg Blk */
u32
pm1b_event_block
;
/* [V1] 32-bit port address of Power Mgt 1b Event Reg Blk */
u32
pm1a_control_block
;
/* [V1] 32-bit port address of Power Mgt 1a Control Reg Blk */
u32
pm1b_control_block
;
/* [V1] 32-bit port address of Power Mgt 1b Control Reg Blk */
u32
pm2_control_block
;
/* [V1] 32-bit port address of Power Mgt 2 Control Reg Blk */
u32
pm_timer_block
;
/* [V1] 32-bit port address of Power Mgt Timer Ctrl Reg Blk */
u32
gpe0_block
;
/* [V1] 32-bit port address of General Purpose Event 0 Reg Blk */
u32
gpe1_block
;
/* [V1] 32-bit port address of General Purpose Event 1 Reg Blk */
u8
pm1_event_length
;
/* [V1] Byte Length of ports at pm1x_event_block */
u8
pm1_control_length
;
/* [V1] Byte Length of ports at pm1x_control_block */
u8
pm2_control_length
;
/* [V1] Byte Length of ports at pm2_control_block */
u8
pm_timer_length
;
/* [V1] Byte Length of ports at pm_timer_block */
u8
gpe0_block_length
;
/* [V1] Byte Length of ports at gpe0_block */
u8
gpe1_block_length
;
/* [V1] Byte Length of ports at gpe1_block */
u8
gpe1_base
;
/* [V1] Offset in GPE number space where GPE1 events start */
u8
cst_control
;
/* [V1] Support for the _CST object and C-States change notification */
u16
c2_latency
;
/* [V1] Worst case HW latency to enter/exit C2 state */
u16
c3_latency
;
/* [V1] Worst case HW latency to enter/exit C3 state */
u16
flush_size
;
/* [V1] Processor memory cache line width, in bytes */
u16
flush_stride
;
/* [V1] Number of flush strides that need to be read */
u8
duty_offset
;
/* [V1] Processor duty cycle index in processor P_CNT reg */
u8
duty_width
;
/* [V1] Processor duty cycle value bit width in P_CNT register */
u8
day_alarm
;
/* [V1] Index to day-of-month alarm in RTC CMOS RAM */
u8
month_alarm
;
/* [V1] Index to month-of-year alarm in RTC CMOS RAM */
u8
century
;
/* [V1] Index to century in RTC CMOS RAM */
u16
boot_flags
;
/* [V3] IA-PC Boot Architecture Flags (see below for individual flags) */
u8
reserved
;
/* [V1] Reserved, must be zero */
u32
flags
;
/* [V1] Miscellaneous flag bits (see below for individual flags) */
/* End of Version 1 FADT fields (ACPI 1.0) */
struct
acpi_generic_address
reset_register
;
/* [V3] 64-bit address of the Reset register */
u8
reset_value
;
/* [V3] Value to write to the reset_register port to reset the system */
u16
arm_boot_flags
;
/* [V5] ARM-Specific Boot Flags (see below for individual flags) (ACPI 5.1) */
u8
minor_revision
;
/* [V5] FADT Minor Revision (ACPI 5.1) */
u64
Xfacs
;
/* [V3] 64-bit physical address of FACS */
u64
Xdsdt
;
/* [V3] 64-bit physical address of DSDT */
struct
acpi_generic_address
xpm1a_event_block
;
/* [V3] 64-bit Extended Power Mgt 1a Event Reg Blk address */
struct
acpi_generic_address
xpm1b_event_block
;
/* [V3] 64-bit Extended Power Mgt 1b Event Reg Blk address */
struct
acpi_generic_address
xpm1a_control_block
;
/* [V3] 64-bit Extended Power Mgt 1a Control Reg Blk address */
struct
acpi_generic_address
xpm1b_control_block
;
/* [V3] 64-bit Extended Power Mgt 1b Control Reg Blk address */
struct
acpi_generic_address
xpm2_control_block
;
/* [V3] 64-bit Extended Power Mgt 2 Control Reg Blk address */
struct
acpi_generic_address
xpm_timer_block
;
/* [V3] 64-bit Extended Power Mgt Timer Ctrl Reg Blk address */
struct
acpi_generic_address
xgpe0_block
;
/* [V3] 64-bit Extended General Purpose Event 0 Reg Blk address */
struct
acpi_generic_address
xgpe1_block
;
/* [V3] 64-bit Extended General Purpose Event 1 Reg Blk address */
/* End of Version 3 FADT fields (ACPI 2.0) */
struct
acpi_generic_address
sleep_control
;
/* [V4] 64-bit Sleep Control register (ACPI 5.0) */
/* End of Version 4 FADT fields (ACPI 3.0 and ACPI 4.0) (Field was originally reserved in ACPI 3.0) */
struct
acpi_generic_address
sleep_status
;
/* [V5] 64-bit Sleep Status register (ACPI 5.0) */
/* End of Version 5 FADT fields (ACPI 5.0) */
u64
hypervisor_id
;
/* [V6] Hypervisor Vendor ID (ACPI 6.0) */
/* End of Version 6 FADT fields (ACPI 6.0) */
};
/* Masks for FADT IA-PC Boot Architecture Flags (boot_flags) [Vx]=Introduced in this FADT revision */
...
...
@@ -301,8 +311,8 @@ struct acpi_table_fadt {
/* Masks for FADT ARM Boot Architecture Flags (arm_boot_flags) ACPI 5.1 */
#define ACPI_FADT_PSCI_COMPLIANT (1)
/* 00: [V5
+
] PSCI 0.2+ is implemented */
#define ACPI_FADT_PSCI_USE_HVC (1<<1)
/* 01: [V5
+
] HVC must be used instead of SMC as the PSCI conduit */
#define ACPI_FADT_PSCI_COMPLIANT (1)
/* 00: [V5] PSCI 0.2+ is implemented */
#define ACPI_FADT_PSCI_USE_HVC (1<<1)
/* 01: [V5] HVC must be used instead of SMC as the PSCI conduit */
/* Masks for FADT flags */
...
...
@@ -399,20 +409,34 @@ struct acpi_table_desc {
* match the expected length. In other words, the length of the
* FADT is the bottom line as to what the version really is.
*
* For reference, the values below are as follows:
* FADT V1 size: 0x074
* FADT V2 size: 0x084
* FADT V3 size: 0x0F4
* FADT V4 size: 0x0F4
* FADT V5 size: 0x10C
* FADT V6 size: 0x114
* NOTE: There is no officialy released V2 of the FADT. This
* version was used only for prototyping and testing during the
* 32-bit to 64-bit transition. V3 was the first official 64-bit
* version of the FADT.
*
* Update this list of defines when a new version of the FADT is
* added to the ACPI specification. Note that the FADT version is
* only incremented when new fields are appended to the existing
* version. Therefore, the FADT version is competely independent
* from the version of the ACPI specification where it is
* defined.
*
* For reference, the various FADT lengths are as follows:
* FADT V1 size: 0x074 ACPI 1.0
* FADT V3 size: 0x0F4 ACPI 2.0
* FADT V4 size: 0x100 ACPI 3.0 and ACPI 4.0
* FADT V5 size: 0x10C ACPI 5.0
* FADT V6 size: 0x114 ACPI 6.0
*/
#define ACPI_FADT_V1_SIZE (u32) (ACPI_FADT_OFFSET (flags) + 4)
#define ACPI_FADT_V2_SIZE (u32) (ACPI_FADT_OFFSET (minor_revision) + 1)
#define ACPI_FADT_V3_SIZE (u32) (ACPI_FADT_OFFSET (sleep_control))
#define ACPI_FADT_V5_SIZE (u32) (ACPI_FADT_OFFSET (hypervisor_id))
#define ACPI_FADT_V6_SIZE (u32) (sizeof (struct acpi_table_fadt))
#define ACPI_FADT_V1_SIZE (u32) (ACPI_FADT_OFFSET (flags) + 4)
/* ACPI 1.0 */
#define ACPI_FADT_V3_SIZE (u32) (ACPI_FADT_OFFSET (sleep_control))
/* ACPI 2.0 */
#define ACPI_FADT_V4_SIZE (u32) (ACPI_FADT_OFFSET (sleep_status))
/* ACPI 3.0 and ACPI 4.0 */
#define ACPI_FADT_V5_SIZE (u32) (ACPI_FADT_OFFSET (hypervisor_id))
/* ACPI 5.0 */
#define ACPI_FADT_V6_SIZE (u32) (sizeof (struct acpi_table_fadt))
/* ACPI 6.0 */
/* Update these when new FADT versions are added */
#define ACPI_FADT_MAX_VERSION 6
#define ACPI_FADT_CONFORMANCE "ACPI 6.1 (FADT version 6)"
#endif
/* __ACTBL_H__ */
include/acpi/actypes.h
View file @
f42106fe
...
...
@@ -732,16 +732,17 @@ typedef u32 acpi_event_type;
* The encoding of acpi_event_status is illustrated below.
* Note that a set bit (1) indicates the property is TRUE
* (e.g. if bit 0 is set then the event is enabled).
* +-------------+-+-+-+-+-+
* | Bits 31:5 |4|3|2|1|0|
* +-------------+-+-+-+-+-+
* | | | | | |
* | | | | | +- Enabled?
* | | | | +--- Enabled for wake?
* | | | +----- Status bit set?
* | | +------- Enable bit set?
* | +--------- Has a handler?
* +--------------- <Reserved>
* +-------------+-+-+-+-+-+-+
* | Bits 31:6 |5|4|3|2|1|0|
* +-------------+-+-+-+-+-+-+
* | | | | | | |
* | | | | | | +- Enabled?
* | | | | | +--- Enabled for wake?
* | | | | +----- Status bit set?
* | | | +------- Enable bit set?
* | | +--------- Has a handler?
* | +----------- Masked?
* +----------------- <Reserved>
*/
typedef
u32
acpi_event_status
;
...
...
@@ -751,6 +752,7 @@ typedef u32 acpi_event_status;
#define ACPI_EVENT_FLAG_STATUS_SET (acpi_event_status) 0x04
#define ACPI_EVENT_FLAG_ENABLE_SET (acpi_event_status) 0x08
#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x10
#define ACPI_EVENT_FLAG_MASKED (acpi_event_status) 0x20
#define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET
/* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
...
...
@@ -761,13 +763,14 @@ typedef u32 acpi_event_status;
/*
* GPE info flags - Per GPE
* +-------+-+-+---+
* | 7:5 |4|3|2:0|
* +-------+-+-+---+
* | | | |
* | | | +-- Type of dispatch:to method, handler, notify, or none
* | | +----- Interrupt type: edge or level triggered
* | +------- Is a Wake GPE
* +---+-+-+-+---+
* |7:6|5|4|3|2:0|
* +---+-+-+-+---+
* | | | | |
* | | | | +-- Type of dispatch:to method, handler, notify, or none
* | | | +----- Interrupt type: edge or level triggered
* | | +------- Is a Wake GPE
* | +--------- Is GPE masked by the software GPE masking machanism
* +------------ <Reserved>
*/
#define ACPI_GPE_DISPATCH_NONE (u8) 0x00
...
...
@@ -1031,12 +1034,6 @@ struct acpi_statistics {
u32
method_count
;
};
/* Table Event Types */
#define ACPI_TABLE_EVENT_LOAD 0x0
#define ACPI_TABLE_EVENT_UNLOAD 0x1
#define ACPI_NUM_TABLE_EVENTS 2
/*
* Types specific to the OS service interfaces
*/
...
...
@@ -1088,9 +1085,13 @@ acpi_status (*acpi_exception_handler) (acpi_status aml_status,
typedef
acpi_status
(
*
acpi_table_handler
)
(
u32
event
,
void
*
table
,
void
*
context
);
#define ACPI_TABLE_LOAD 0x0
#define ACPI_TABLE_UNLOAD 0x1
#define ACPI_NUM_TABLE_EVENTS 2
/* Table Event Types */
#define ACPI_TABLE_EVENT_LOAD 0x0
#define ACPI_TABLE_EVENT_UNLOAD 0x1
#define ACPI_TABLE_EVENT_INSTALL 0x2
#define ACPI_TABLE_EVENT_UNINSTALL 0x3
#define ACPI_NUM_TABLE_EVENTS 4
/* Address Spaces (For Operation Regions) */
...
...
@@ -1285,15 +1286,6 @@ typedef enum {
#define ACPI_OSI_WIN_8 0x0C
#define ACPI_OSI_WIN_10 0x0D
/* Definitions of file IO */
#define ACPI_FILE_READING 0x01
#define ACPI_FILE_WRITING 0x02
#define ACPI_FILE_BINARY 0x04
#define ACPI_FILE_BEGIN 0x01
#define ACPI_FILE_END 0x02
/* Definitions of getopt */
#define ACPI_OPT_END -1
...
...
include/acpi/platform/acenv.h
View file @
f42106fe
...
...
@@ -78,6 +78,7 @@
(defined ACPI_EXAMPLE_APP)
#define ACPI_APPLICATION
#define ACPI_SINGLE_THREADED
#define USE_NATIVE_ALLOCATE_ZEROED
#endif
/* iASL configuration */
...
...
@@ -124,7 +125,6 @@
#ifdef ACPI_DUMP_APP
#define ACPI_USE_NATIVE_MEMORY_MAPPING
#define USE_NATIVE_ALLOCATE_ZEROED
#endif
/* acpi_names/Example configuration. Hardware disabled */
...
...
@@ -149,7 +149,6 @@
/* Common for all ACPICA applications */
#ifdef ACPI_APPLICATION
#define ACPI_USE_SYSTEM_CLIBRARY
#define ACPI_USE_LOCAL_CACHE
#endif
...
...
@@ -167,10 +166,21 @@
/******************************************************************************
*
* Host configuration files. The compiler configuration files are included
*
by the host files
.
*
first
.
*
*****************************************************************************/
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#include <acpi/platform/acgcc.h>
#elif defined(_MSC_VER)
#include "acmsvc.h"
#elif defined(__INTEL_COMPILER)
#include "acintel.h"
#endif
#if defined(_LINUX) || defined(__linux__)
#include <acpi/platform/aclinux.h>
...
...
@@ -210,18 +220,20 @@
#elif defined(__OS2__)
#include "acos2.h"
#elif defined(_AED_EFI)
#include "acefi.h"
#elif defined(_GNU_EFI)
#include "acefi.h"
#elif defined(__HAIKU__)
#include "achaiku.h"
#elif defined(__QNX__)
#include "acqnx.h"
/*
* EFI applications can be built with -nostdlib, in this case, it must be
* included after including all other host environmental definitions, in
* order to override the definitions.
*/
#elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI)
#include "acefi.h"
#else
/* Unknown environment */
...
...
@@ -326,7 +338,8 @@
* ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library.
* Otherwise, local versions of string/memory functions will be used.
* ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and
* the standard header files may be used.
* the standard header files may be used. Defining this implies that
* ACPI_USE_SYSTEM_CLIBRARY has been defined.
*
* The ACPICA subsystem only uses low level C library functions that do not
* call operating system services and may therefore be inlined in the code.
...
...
@@ -334,7 +347,6 @@
* It may be necessary to tailor these include files to the target
* generation environment.
*/
#ifdef ACPI_USE_SYSTEM_CLIBRARY
/* Use the standard C library headers. We want to keep these to a minimum. */
...
...
@@ -342,57 +354,20 @@
/* Use the standard headers from the standard locations */
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifdef ACPI_APPLICATION
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include <signal.h>
#endif
#endif
/* ACPI_USE_STANDARD_HEADERS */
/* We will be linking to the standard Clib functions */
#else
/******************************************************************************
*
* Not using native C library, use local implementations
*
*****************************************************************************/
/*
* Use local definitions of C library macros and functions. These function
* implementations may not be as efficient as an inline or assembly code
* implementation provided by a native C library, but they are functionally
* equivalent.
*/
#ifndef va_arg
#ifndef _VALIST
#define _VALIST
typedef
char
*
va_list
;
#endif
/* _VALIST */
/* Storage alignment properties */
#define _AUPBND (sizeof (acpi_native_int) - 1)
#define _ADNBND (sizeof (acpi_native_int) - 1)
/* Variable argument list macro definitions */
#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))
#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
#define va_end(ap) (ap = (va_list) NULL)
#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
#endif
/* va_arg */
/* Use the local (ACPICA) definitions of the clib functions */
#endif
/* ACPI_USE_SYSTEM_CLIBRARY */
#ifndef ACPI_FILE
#ifdef ACPI_APPLICATION
#include <stdio.h>
#define ACPI_FILE FILE *
#define ACPI_FILE_OUT stdout
#define ACPI_FILE_ERR stderr
...
...
@@ -401,6 +376,9 @@ typedef char *va_list;
#define ACPI_FILE_OUT NULL
#define ACPI_FILE_ERR NULL
#endif
/* ACPI_APPLICATION */
#endif
/* ACPI_FILE */
#ifndef ACPI_INIT_FUNCTION
#define ACPI_INIT_FUNCTION
#endif
#endif
/* __ACENV_H__ */
include/acpi/platform/acenvex.h
View file @
f42106fe
...
...
@@ -56,17 +56,24 @@
#if defined(_LINUX) || defined(__linux__)
#include <acpi/platform/aclinuxex.h>
#elif defined(
WIN32
)
#include "ac
win
ex.h"
#elif defined(
__DragonFly__
)
#include "ac
dragonfly
ex.h"
#elif defined(_AED_EFI)
/*
* EFI applications can be built with -nostdlib, in this case, it must be
* included after including all other host environmental definitions, in
* order to override the definitions.
*/
#elif defined(_AED_EFI) || defined(_GNU_EFI) || defined(_EDK2_EFI)
#include "acefiex.h"
#elif defined(_GNU_EFI)
#include "acefiex.h"
#endif
#elif defined(__DragonFly__)
#include "acdragonflyex.h"
#if defined(__GNUC__) && !defined(__INTEL_COMPILER)
#include "acgccex.h"
#elif defined(_MSC_VER)
#include "acmsvcex.h"
#endif
...
...
include/acpi/platform/acgcc.h
View file @
f42106fe
...
...
@@ -44,6 +44,12 @@
#ifndef __ACGCC_H__
#define __ACGCC_H__
/*
* Use compiler specific <stdarg.h> is a good practice for even when
* -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined.
*/
#include <stdarg.h>
#define ACPI_INLINE __inline__
/* Function name is used for debug output. Non-ANSI, compiler-dependent */
...
...
@@ -64,17 +70,6 @@
*/
#define ACPI_UNUSED_VAR __attribute__ ((unused))
/*
* Some versions of gcc implement strchr() with a buggy macro. So,
* undef it here. Prevents error messages of this form (usually from the
* file getopt.c):
*
* error: logical '&&' with non-zero constant will always evaluate as true
*/
#ifdef strchr
#undef strchr
#endif
/* GCC supports __VA_ARGS__ in macros */
#define COMPILER_VA_MACRO 1
...
...
tools/power/acpi/os_specific/service_layers/oslibcfs.c
→
include/acpi/platform/acgccex.h
View file @
f42106fe
/******************************************************************************
*
*
Module Name: oslibcfs - C library OSL for file I/O
*
Name: acgccex.h - Extra GCC specific defines, etc.
*
*****************************************************************************/
...
...
@@ -41,177 +41,18 @@
* POSSIBILITY OF SUCH DAMAGES.
*/
#include <acpi/acpi.h>
#include <stdio.h>
#include <stdarg.h>
#ifndef __ACGCCEX_H__
#define __ACGCCEX_H__
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME
(
"oslibcfs"
)
/*******************************************************************************
*
* FUNCTION: acpi_os_open_file
*
* PARAMETERS: path - File path
* modes - File operation type
*
* RETURN: File descriptor.
*
* DESCRIPTION: Open a file for reading (ACPI_FILE_READING) or/and writing
* (ACPI_FILE_WRITING).
*
******************************************************************************/
ACPI_FILE
acpi_os_open_file
(
const
char
*
path
,
u8
modes
)
{
ACPI_FILE
file
;
u32
i
=
0
;
char
modes_str
[
4
];
if
(
modes
&
ACPI_FILE_READING
)
{
modes_str
[
i
++
]
=
'r'
;
}
if
(
modes
&
ACPI_FILE_WRITING
)
{
modes_str
[
i
++
]
=
'w'
;
}
if
(
modes
&
ACPI_FILE_BINARY
)
{
modes_str
[
i
++
]
=
'b'
;
}
modes_str
[
i
++
]
=
'\0'
;
file
=
fopen
(
path
,
modes_str
);
if
(
!
file
)
{
perror
(
"Could not open file"
);
}
return
(
file
);
}
/*******************************************************************************
*
* FUNCTION: acpi_os_close_file
*
* PARAMETERS: file - An open file descriptor
*
* RETURN: None.
*
* DESCRIPTION: Close a file opened via acpi_os_open_file.
*
******************************************************************************/
void
acpi_os_close_file
(
ACPI_FILE
file
)
{
fclose
(
file
);
}
/*******************************************************************************
*
* FUNCTION: acpi_os_read_file
*
* PARAMETERS: file - An open file descriptor
* buffer - Data buffer
* size - Data block size
* count - Number of data blocks
*
* RETURN: Number of bytes actually read.
*
* DESCRIPTION: Read from a file.
*
******************************************************************************/
int
acpi_os_read_file
(
ACPI_FILE
file
,
void
*
buffer
,
acpi_size
size
,
acpi_size
count
)
{
int
length
;
length
=
fread
(
buffer
,
size
,
count
,
file
);
if
(
length
<
0
)
{
perror
(
"Error reading file"
);
}
return
(
length
);
}
/*******************************************************************************
*
* FUNCTION: acpi_os_write_file
*
* PARAMETERS: file - An open file descriptor
* buffer - Data buffer
* size - Data block size
* count - Number of data blocks
*
* RETURN: Number of bytes actually written.
*
* DESCRIPTION: Write to a file.
*
******************************************************************************/
int
acpi_os_write_file
(
ACPI_FILE
file
,
void
*
buffer
,
acpi_size
size
,
acpi_size
count
)
{
int
length
;
length
=
fwrite
(
buffer
,
size
,
count
,
file
);
if
(
length
<
0
)
{
perror
(
"Error writing file"
);
}
return
(
length
);
}
/*******************************************************************************
*
* FUNCTION: acpi_os_get_file_offset
*
* PARAMETERS: file - An open file descriptor
*
* RETURN: Current file pointer position.
*
* DESCRIPTION: Get current file offset.
*
******************************************************************************/
long
acpi_os_get_file_offset
(
ACPI_FILE
file
)
{
long
offset
;
offset
=
ftell
(
file
);
return
(
offset
);
}
/*******************************************************************************
*
* FUNCTION: acpi_os_set_file_offset
*
* PARAMETERS: file - An open file descriptor
* offset - New file offset
* from - From begin/end of file
*
* RETURN: Status
*
* DESCRIPTION: Set current file offset.
/*
* Some versions of gcc implement strchr() with a buggy macro. So,
* undef it here. Prevents error messages of this form (usually from the
* file getopt.c):
*
******************************************************************************/
acpi_status
acpi_os_set_file_offset
(
ACPI_FILE
file
,
long
offset
,
u8
from
)
{
int
ret
=
0
;
if
(
from
==
ACPI_FILE_BEGIN
)
{
ret
=
fseek
(
file
,
offset
,
SEEK_SET
);
}
if
(
from
==
ACPI_FILE_END
)
{
ret
=
fseek
(
file
,
offset
,
SEEK_END
);
}
* error: logical '&&' with non-zero constant will always evaluate as true
*/
#ifdef strchr
#undef strchr
#endif
if
(
ret
<
0
)
{
return
(
AE_ERROR
);
}
else
{
return
(
AE_OK
);
}
}
#endif
/* __ACGCCEX_H__ */
include/acpi/platform/aclinux.h
View file @
f42106fe
...
...
@@ -92,6 +92,8 @@
#include <asm/acenv.h>
#endif
#define ACPI_INIT_FUNCTION __init
#ifndef CONFIG_ACPI
/* External globals for __KERNEL__, stubs is needed */
...
...
@@ -168,13 +170,21 @@
#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename
#define ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
#define ACPI_MSG_ERROR KERN_ERR "ACPI Error: "
#define ACPI_MSG_EXCEPTION KERN_ERR "ACPI Exception: "
#define ACPI_MSG_WARNING KERN_WARNING "ACPI Warning: "
#define ACPI_MSG_INFO KERN_INFO "ACPI: "
#define ACPI_MSG_BIOS_ERROR KERN_ERR "ACPI BIOS Error (bug): "
#define ACPI_MSG_BIOS_WARNING KERN_WARNING "ACPI BIOS Warning (bug): "
#else
/* !__KERNEL__ */
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define ACPI_USE_STANDARD_HEADERS
#ifdef ACPI_USE_STANDARD_HEADERS
#include <unistd.h>
#endif
/* Define/disable kernel-specific declarators */
...
...
@@ -205,8 +215,4 @@
#endif
/* __KERNEL__ */
/* Linux uses GCC */
#include <acpi/platform/acgcc.h>
#endif
/* __ACLINUX_H__ */
include/acpi/platform/aclinuxex.h
View file @
f42106fe
...
...
@@ -71,7 +71,7 @@
/*
* Overrides for in-kernel ACPICA
*/
acpi_status
__init
acpi_os_initialize
(
void
);
acpi_status
ACPI_INIT_FUNCTION
acpi_os_initialize
(
void
);
acpi_status
acpi_os_terminate
(
void
);
...
...
tools/power/acpi/common/cmfsize.c
View file @
f42106fe
...
...
@@ -44,7 +44,6 @@
#include <acpi/acpi.h>
#include "accommon.h"
#include "acapps.h"
#include <stdio.h>
#define _COMPONENT ACPI_TOOLS
ACPI_MODULE_NAME
(
"cmfsize"
)
...
...
@@ -69,24 +68,24 @@ u32 cm_get_file_size(ACPI_FILE file)
/* Save the current file pointer, seek to EOF to obtain file size */
current_offset
=
acpi_os_get_file_offset
(
file
);
current_offset
=
ftell
(
file
);
if
(
current_offset
<
0
)
{
goto
offset_error
;
}
status
=
acpi_os_set_file_offset
(
file
,
0
,
ACPI_FILE
_END
);
status
=
fseek
(
file
,
0
,
SEEK
_END
);
if
(
ACPI_FAILURE
(
status
))
{
goto
seek_error
;
}
file_size
=
acpi_os_get_file_offset
(
file
);
file_size
=
ftell
(
file
);
if
(
file_size
<
0
)
{
goto
offset_error
;
}
/* Restore original file pointer */
status
=
acpi_os_set_file_offset
(
file
,
current_offset
,
ACPI_FILE_BEGIN
);
status
=
fseek
(
file
,
current_offset
,
SEEK_SET
);
if
(
ACPI_FAILURE
(
status
))
{
goto
seek_error
;
}
...
...
@@ -94,10 +93,10 @@ u32 cm_get_file_size(ACPI_FILE file)
return
((
u32
)
file_size
);
offset_error:
acpi_log_error
(
"Could not get file offset
"
);
fprintf
(
stderr
,
"Could not get file offset
\n
"
);
return
(
ACPI_UINT32_MAX
);
seek_error:
acpi_log_error
(
"Could not set file offset
"
);
fprintf
(
stderr
,
"Could not set file offset
\n
"
);
return
(
ACPI_UINT32_MAX
);
}
tools/power/acpi/common/getopt.c
View file @
f42106fe
...
...
@@ -57,7 +57,7 @@
#include "acapps.h"
#define ACPI_OPTION_ERROR(msg, badchar) \
if (acpi_gbl_opterr) {
acpi_log_error (
"%s%c\n", msg, badchar);}
if (acpi_gbl_opterr) {
fprintf (stderr,
"%s%c\n", msg, badchar);}
int
acpi_gbl_opterr
=
1
;
int
acpi_gbl_optind
=
1
;
...
...
@@ -94,7 +94,7 @@ int acpi_getopt_argument(int argc, char **argv)
acpi_gbl_optarg
=
&
argv
[
acpi_gbl_optind
++
][(
int
)(
current_char_ptr
+
1
)];
}
else
if
(
++
acpi_gbl_optind
>=
argc
)
{
ACPI_OPTION_ERROR
(
"
Option requires an argument: -"
,
'v'
);
ACPI_OPTION_ERROR
(
"
\n
Option requires an argument"
,
0
);
current_char_ptr
=
1
;
return
(
-
1
);
...
...
tools/power/acpi/os_specific/service_layers/osunixxf.c
View file @
f42106fe
...
...
@@ -63,10 +63,7 @@
#define _COMPONENT ACPI_OS_SERVICES
ACPI_MODULE_NAME
(
"osunixxf"
)
u8
acpi_gbl_debug_timeout
=
FALSE
;
/* Upcalls to acpi_exec */
void
ae_table_override
(
struct
acpi_table_header
*
existing_table
,
struct
acpi_table_header
**
new_table
);
...
...
tools/power/acpi/tools/acpidump/Makefile
View file @
f42106fe
...
...
@@ -36,12 +36,13 @@ TOOL_OBJS = \
utdebug.o
\
utexcep.o
\
utglobal.o
\
uthex.o
\
utmath.o
\
utnonansi.o
\
utprint.o
\
utstring.o
\
utstrtoul64.o
\
utxferror.o
\
oslibcfs.o
\
oslinuxtbl.o
\
cmfsize.o
\
getopt.o
...
...
tools/power/acpi/tools/acpidump/acpidump.h
View file @
f42106fe
...
...
@@ -55,11 +55,7 @@
#include <acpi/acpi.h>
#include "accommon.h"
#include "actables.h"
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#include "acapps.h"
/* Globals */
...
...
@@ -72,12 +68,6 @@ EXTERN ACPI_FILE INIT_GLOBAL(gbl_output_file, NULL);
EXTERN
char
INIT_GLOBAL
(
*
gbl_output_filename
,
NULL
);
EXTERN
u64
INIT_GLOBAL
(
gbl_rsdp_base
,
0
);
/* Globals required for use with ACPICA modules */
#ifdef _DECLARE_GLOBALS
u8
acpi_gbl_integer_byte_width
=
8
;
#endif
/* Action table used to defer requested options */
struct
ap_dump_action
{
...
...
tools/power/acpi/tools/acpidump/apdump.c
View file @
f42106fe
...
...
@@ -69,7 +69,8 @@ u8 ap_is_valid_header(struct acpi_table_header *table)
/* Make sure signature is all ASCII and a valid ACPI name */
if
(
!
acpi_ut_valid_nameseg
(
table
->
signature
))
{
acpi_log_error
(
"Table signature (0x%8.8X) is invalid
\n
"
,
fprintf
(
stderr
,
"Table signature (0x%8.8X) is invalid
\n
"
,
*
(
u32
*
)
table
->
signature
);
return
(
FALSE
);
}
...
...
@@ -77,7 +78,7 @@ u8 ap_is_valid_header(struct acpi_table_header *table)
/* Check for minimum table length */
if
(
table
->
length
<
sizeof
(
struct
acpi_table_header
))
{
acpi_log_error
(
"Table length (0x%8.8X) is invalid
\n
"
,
fprintf
(
stderr
,
"Table length (0x%8.8X) is invalid
\n
"
,
table
->
length
);
return
(
FALSE
);
}
...
...
@@ -115,7 +116,7 @@ u8 ap_is_valid_checksum(struct acpi_table_header *table)
}
if
(
ACPI_FAILURE
(
status
))
{
acpi_log_error
(
"%4.4s: Warning: wrong checksum in table
\n
"
,
fprintf
(
stderr
,
"%4.4s: Warning: wrong checksum in table
\n
"
,
table
->
signature
);
}
...
...
@@ -195,13 +196,13 @@ ap_dump_table_buffer(struct acpi_table_header *table,
* Note: simplest to just always emit a 64-bit address. acpi_xtract
* utility can handle this.
*/
acpi_ut_file_
printf
(
gbl_output_file
,
"%4.4s @ 0x%8.8X%8.8X
\n
"
,
f
printf
(
gbl_output_file
,
"%4.4s @ 0x%8.8X%8.8X
\n
"
,
table
->
signature
,
ACPI_FORMAT_UINT64
(
address
));
acpi_ut_dump_buffer_to_file
(
gbl_output_file
,
ACPI_CAST_PTR
(
u8
,
table
),
table_length
,
DB_BYTE_DISPLAY
,
0
);
acpi_ut_file_
printf
(
gbl_output_file
,
"
\n
"
);
f
printf
(
gbl_output_file
,
"
\n
"
);
return
(
0
);
}
...
...
@@ -239,13 +240,13 @@ int ap_dump_all_tables(void)
if
(
status
==
AE_LIMIT
)
{
return
(
0
);
}
else
if
(
i
==
0
)
{
acpi_log_error
(
"Could not get ACPI tables, %s
\n
"
,
fprintf
(
stderr
,
"Could not get ACPI tables, %s
\n
"
,
acpi_format_exception
(
status
));
return
(
-
1
);
}
else
{
acpi_log_error
(
"Could not get ACPI table at index %u, %s
\n
"
,
fprintf
(
stderr
,
"Could not get ACPI table at index %u, %s
\n
"
,
i
,
acpi_format_exception
(
status
));
continue
;
}
...
...
@@ -286,10 +287,10 @@ int ap_dump_table_by_address(char *ascii_address)
/* Convert argument to an integer physical address */
status
=
acpi_ut_strtoul64
(
ascii_address
,
ACPI_
ANY_BASE
,
ACPI_MAX64_BYTE_WIDTH
,
&
long_address
);
status
=
acpi_ut_strtoul64
(
ascii_address
,
ACPI_
STRTOUL_64BIT
,
&
long_address
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_log_error
(
"%s: Could not convert to a physical address
\n
"
,
fprintf
(
stderr
,
"%s: Could not convert to a physical address
\n
"
,
ascii_address
);
return
(
-
1
);
}
...
...
@@ -297,7 +298,7 @@ int ap_dump_table_by_address(char *ascii_address)
address
=
(
acpi_physical_address
)
long_address
;
status
=
acpi_os_get_table_by_address
(
address
,
&
table
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_log_error
(
"Could not get table at 0x%8.8X%8.8X, %s
\n
"
,
fprintf
(
stderr
,
"Could not get table at 0x%8.8X%8.8X, %s
\n
"
,
ACPI_FORMAT_UINT64
(
address
),
acpi_format_exception
(
status
));
return
(
-
1
);
...
...
@@ -331,8 +332,8 @@ int ap_dump_table_by_name(char *signature)
int
table_status
;
if
(
strlen
(
signature
)
!=
ACPI_NAME_SIZE
)
{
acpi_log_error
(
"Invalid table signature [%s]: must be exactly 4 characters
\n
"
,
fprintf
(
stderr
,
"Invalid table signature [%s]: must be exactly 4 characters
\n
"
,
signature
);
return
(
-
1
);
}
...
...
@@ -363,8 +364,8 @@ int ap_dump_table_by_name(char *signature)
return
(
0
);
}
acpi_log_error
(
"Could not get ACPI table with signature [%s], %s
\n
"
,
fprintf
(
stderr
,
"Could not get ACPI table with signature [%s], %s
\n
"
,
local_signature
,
acpi_format_exception
(
status
));
return
(
-
1
);
}
...
...
@@ -408,23 +409,23 @@ int ap_dump_table_from_file(char *pathname)
}
if
(
!
acpi_ut_valid_nameseg
(
table
->
signature
))
{
acpi_log_error
(
"No valid ACPI signature was found in input file %s
\n
"
,
fprintf
(
stderr
,
"No valid ACPI signature was found in input file %s
\n
"
,
pathname
);
}
/* File must be at least as long as the table length */
if
(
table
->
length
>
file_size
)
{
acpi_log_error
(
"Table length (0x%X) is too large for input file (0x%X) %s
\n
"
,
fprintf
(
stderr
,
"Table length (0x%X) is too large for input file (0x%X) %s
\n
"
,
table
->
length
,
file_size
,
pathname
);
goto
exit
;
}
if
(
gbl_verbose_mode
)
{
acpi_log_error
(
"Input file: %s contains table [%4.4s], 0x%X (%u) bytes
\n
"
,
fprintf
(
stderr
,
"Input file: %s contains table [%4.4s], 0x%X (%u) bytes
\n
"
,
pathname
,
table
->
signature
,
file_size
,
file_size
);
}
...
...
tools/power/acpi/tools/acpidump/apfiles.c
View file @
f42106fe
...
...
@@ -42,7 +42,6 @@
*/
#include "acpidump.h"
#include "acapps.h"
/* Local prototypes */
...
...
@@ -66,7 +65,8 @@ static int ap_is_existing_file(char *pathname)
struct
stat
stat_info
;
if
(
!
stat
(
pathname
,
&
stat_info
))
{
acpi_log_error
(
"Target path already exists, overwrite? [y|n] "
);
fprintf
(
stderr
,
"Target path already exists, overwrite? [y|n] "
);
if
(
getchar
()
!=
'y'
)
{
return
(
-
1
);
...
...
@@ -102,9 +102,9 @@ int ap_open_output_file(char *pathname)
/* Point stdout to the file */
file
=
acpi_os_open_file
(
pathname
,
ACPI_FILE_WRITING
);
file
=
fopen
(
pathname
,
"w"
);
if
(
!
file
)
{
acpi_log_error
(
"Could not open output file: %s
\n
"
,
pathname
);
fprintf
(
stderr
,
"Could not open output file: %s
\n
"
,
pathname
);
return
(
-
1
);
}
...
...
@@ -134,7 +134,7 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance)
char
filename
[
ACPI_NAME_SIZE
+
16
];
char
instance_str
[
16
];
ACPI_FILE
file
;
size_t
actual
;
acpi_size
actual
;
u32
table_length
;
/* Obtain table length */
...
...
@@ -158,37 +158,36 @@ int ap_write_to_binary_file(struct acpi_table_header *table, u32 instance)
/* Handle multiple SSDts - create different filenames for each */
if
(
instance
>
0
)
{
acpi_ut_snprintf
(
instance_str
,
sizeof
(
instance_str
),
"%u"
,
instance
);
snprintf
(
instance_str
,
sizeof
(
instance_str
),
"%u"
,
instance
);
strcat
(
filename
,
instance_str
);
}
strcat
(
filename
,
FILE_SUFFIX_BINARY_TABLE
);
if
(
gbl_verbose_mode
)
{
acpi_log_error
(
"Writing [%4.4s] to binary file: %s 0x%X (%u) bytes
\n
"
,
table
->
signature
,
filename
,
table
->
length
,
table
->
length
);
fprintf
(
stderr
,
"Writing [%4.4s] to binary file: %s 0x%X (%u) bytes
\n
"
,
table
->
signature
,
filename
,
table
->
length
,
table
->
length
);
}
/* Open the file and dump the entire table in binary mode */
file
=
acpi_os_open_file
(
filename
,
ACPI_FILE_WRITING
|
ACPI_FILE_BINARY
);
file
=
fopen
(
filename
,
"wb"
);
if
(
!
file
)
{
acpi_log_error
(
"Could not open output file: %s
\n
"
,
filename
);
fprintf
(
stderr
,
"Could not open output file: %s
\n
"
,
filename
);
return
(
-
1
);
}
actual
=
acpi_os_write_file
(
file
,
table
,
1
,
table_length
);
actual
=
fwrite
(
table
,
1
,
table_length
,
file
);
if
(
actual
!=
table_length
)
{
acpi_log_error
(
"Error writing binary output file: %s
\n
"
,
fprintf
(
stderr
,
"Error writing binary output file: %s
\n
"
,
filename
);
acpi_os_close_fil
e
(
file
);
fclos
e
(
file
);
return
(
-
1
);
}
acpi_os_close_fil
e
(
file
);
fclos
e
(
file
);
return
(
0
);
}
...
...
@@ -211,14 +210,13 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname,
struct
acpi_table_header
*
buffer
=
NULL
;
ACPI_FILE
file
;
u32
file_size
;
size_t
actual
;
acpi_size
actual
;
/* Must use binary mode */
file
=
acpi_os_open_file
(
pathname
,
ACPI_FILE_READING
|
ACPI_FILE_BINARY
);
file
=
fopen
(
pathname
,
"rb"
);
if
(
!
file
)
{
acpi_log_error
(
"Could not open input file: %s
\n
"
,
pathname
);
fprintf
(
stderr
,
"Could not open input file: %s
\n
"
,
pathname
);
return
(
NULL
);
}
...
...
@@ -226,7 +224,8 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname,
file_size
=
cm_get_file_size
(
file
);
if
(
file_size
==
ACPI_UINT32_MAX
)
{
acpi_log_error
(
"Could not get input file size: %s
\n
"
,
pathname
);
fprintf
(
stderr
,
"Could not get input file size: %s
\n
"
,
pathname
);
goto
cleanup
;
}
...
...
@@ -234,16 +233,17 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname,
buffer
=
ACPI_ALLOCATE_ZEROED
(
file_size
);
if
(
!
buffer
)
{
acpi_log_error
(
"Could not allocate file buffer of size: %u
\n
"
,
fprintf
(
stderr
,
"Could not allocate file buffer of size: %u
\n
"
,
file_size
);
goto
cleanup
;
}
/* Read the entire file */
actual
=
acpi_os_read_file
(
file
,
buffer
,
1
,
file_siz
e
);
actual
=
fread
(
buffer
,
1
,
file_size
,
fil
e
);
if
(
actual
!=
file_size
)
{
acpi_log_error
(
"Could not read input file: %s
\n
"
,
pathname
);
fprintf
(
stderr
,
"Could not read input file: %s
\n
"
,
pathname
);
ACPI_FREE
(
buffer
);
buffer
=
NULL
;
goto
cleanup
;
...
...
@@ -252,6 +252,6 @@ struct acpi_table_header *ap_get_table_from_file(char *pathname,
*
out_file_size
=
file_size
;
cleanup:
acpi_os_close_fil
e
(
file
);
fclos
e
(
file
);
return
(
buffer
);
}
tools/power/acpi/tools/acpidump/apmain.c
View file @
f42106fe
...
...
@@ -43,7 +43,6 @@
#define _DECLARE_GLOBALS
#include "acpidump.h"
#include "acapps.h"
/*
* acpidump - A portable utility for obtaining system ACPI tables and dumping
...
...
@@ -140,7 +139,7 @@ static int ap_insert_action(char *argument, u32 to_be_done)
current_action
++
;
if
(
current_action
>
AP_MAX_ACTIONS
)
{
acpi_log_error
(
"Too many table options (max %u)
\n
"
,
fprintf
(
stderr
,
"Too many table options (max %u)
\n
"
,
AP_MAX_ACTIONS
);
return
(
-
1
);
}
...
...
@@ -186,8 +185,8 @@ static int ap_do_options(int argc, char **argv)
}
else
if
(
!
strcmp
(
acpi_gbl_optarg
,
"off"
))
{
gbl_dump_customized_tables
=
FALSE
;
}
else
{
acpi_log_error
(
"%s: Cannot handle this switch, please use on|off
\n
"
,
fprintf
(
stderr
,
"%s: Cannot handle this switch, please use on|off
\n
"
,
acpi_gbl_optarg
);
return
(
-
1
);
}
...
...
@@ -209,12 +208,12 @@ static int ap_do_options(int argc, char **argv)
case
'r'
:
/* Dump tables from specified RSDP */
status
=
acpi_ut_strtoul64
(
acpi_gbl_optarg
,
ACPI_ANY_BASE
,
ACPI_
MAX64_BYTE_WIDTH
,
acpi_ut_strtoul64
(
acpi_gbl_optarg
,
ACPI_
STRTOUL_64BIT
,
&
gbl_rsdp_base
);
if
(
ACPI_FAILURE
(
status
))
{
acpi_log_error
(
"%s: Could not convert to a physical address
\n
"
,
fprintf
(
stderr
,
"%s: Could not convert to a physical address
\n
"
,
acpi_gbl_optarg
);
return
(
-
1
);
}
...
...
@@ -242,7 +241,7 @@ static int ap_do_options(int argc, char **argv)
case
'z'
:
/* Verbose mode */
gbl_verbose_mode
=
TRUE
;
acpi_log_error
(
ACPI_COMMON_SIGNON
(
AP_UTILITY_NAME
));
fprintf
(
stderr
,
ACPI_COMMON_SIGNON
(
AP_UTILITY_NAME
));
continue
;
/*
...
...
@@ -315,6 +314,7 @@ int ACPI_SYSTEM_XFACE acpi_main(int argc, char *argv[])
ACPI_DEBUG_INITIALIZE
();
/* For debug version only */
acpi_os_initialize
();
gbl_output_file
=
ACPI_FILE_OUT
;
acpi_gbl_integer_byte_width
=
8
;
/* Process command line options */
...
...
@@ -353,7 +353,8 @@ int ACPI_SYSTEM_XFACE acpi_main(int argc, char *argv[])
default:
acpi_log_error
(
"Internal error, invalid action: 0x%X
\n
"
,
fprintf
(
stderr
,
"Internal error, invalid action: 0x%X
\n
"
,
action
->
to_be_done
);
return
(
-
1
);
}
...
...
@@ -369,12 +370,12 @@ int ACPI_SYSTEM_XFACE acpi_main(int argc, char *argv[])
/* Summary for the output file */
file_size
=
cm_get_file_size
(
gbl_output_file
);
acpi_log_error
(
"Output file %s contains 0x%X (%u) bytes
\n\n
"
,
fprintf
(
stderr
,
"Output file %s contains 0x%X (%u) bytes
\n\n
"
,
gbl_output_filename
,
file_size
,
file_size
);
}
acpi_os_close_fil
e
(
gbl_output_file
);
fclos
e
(
gbl_output_file
);
}
return
(
status
);
...
...
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