Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
f42106fe
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
f42106fe
编写于
9月 26, 2016
作者:
R
Rafael J. Wysocki
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'acpica' into acpi-bus
上级
daae45ca
7a0b71dc
变更
83
展开全部
隐藏空白更改
内联
并排
Showing
83 changed file
with
1958 addition
and
1302 deletion
+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
未找到文件。
drivers/acpi/acpica/Makefile
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
f42106fe
...
...
@@ -277,9 +277,10 @@ 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
,
&
object
->
integer
.
value
);
status
=
acpi_ut_strtoul64
(
string
,
(
acpi_gbl_integer_byte_width
|
ACPI_STRTOUL_BASE16
),
&
object
->
integer
.
value
);
break
;
}
...
...
drivers/acpi/acpica/dbexec.c
浏览文件 @
f42106fe
...
...
@@ -392,42 +392,48 @@ 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
));
name_string
=
ACPI_ALLOCATE
(
strlen
(
name
)
+
1
);
if
(
!
name_string
)
{
return
;
}
strcpy
(
name_string
,
name
);
acpi_ut_strupr
(
name_string
);
acpi_gbl_db_method_info
.
name
=
name_string
;
acpi_gbl_db_method_info
.
args
=
args
;
acpi_gbl_db_method_info
.
types
=
types
;
acpi_gbl_db_method_info
.
flags
=
flags
;
memset
(
&
acpi_gbl_db_method_info
,
0
,
sizeof
(
struct
acpi_db_method_info
));
strcpy
(
name_string
,
name
);
acpi_ut_strupr
(
name_string
);
return_obj
.
pointer
=
NULL
;
return_obj
.
length
=
ACPI_ALLOCATE_BUFFER
;
/* Subcommand to Execute all predefined names in the namespace */
status
=
acpi_db_execute_setup
(
&
acpi_gbl_db_method_info
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_FREE
(
name_string
);
return
;
}
if
(
!
strncmp
(
name_string
,
"PREDEF"
,
6
))
{
acpi_db_evaluate_predefined_names
();
ACPI_FREE
(
name_string
);
return
;
}
/* Get the NS node, determines existence also */
acpi_gbl_db_method_info
.
name
=
name_string
;
acpi_gbl_db_method_info
.
args
=
args
;
acpi_gbl_db_method_info
.
types
=
types
;
acpi_gbl_db_method_info
.
flags
=
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
,
&
return_obj
);
}
return_obj
.
pointer
=
NULL
;
return_obj
.
length
=
ACPI_ALLOCATE_BUFFER
;
status
=
acpi_db_execute_setup
(
&
acpi_gbl_db_method_info
);
if
(
ACPI_FAILURE
(
status
))
{
ACPI_FREE
(
name_string
);
return
;
}
/* Get the NS node, determines existence also */
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
,
&
return_obj
);
}
ACPI_FREE
(
name_string
);
/*
* Allow any handlers in separate threads to complete.
...
...
drivers/acpi/acpica/dbfileio.c
浏览文件 @
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,12 +143,13 @@ 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
"
,
table
->
signature
);
acpi_os_printf
(
"Acpi table [%4.4s] successfully installed and loaded
\n
"
,
table
->
signature
);
table_list_head
=
table_list_head
->
next
;
}
return
(
AE_OK
);
}
#endif
drivers/acpi/acpica/dbinput.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
();
}
acpi_ex_enter_interpreter
();
if
(
ACPI_FAILURE
(
status
))
{
/*
...
...
drivers/acpi/acpica/evgpe.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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_TABLE_ORIGIN_INTERNAL_VIRTUAL
,
TRUE
,
TRUE
,
&
table_index
);
(
void
)
acpi_ut_release_mutex
(
ACPI_MTX_TABLES
);
acpi_ex_exit_interpreter
();
status
=
acpi_tb_install_and_load_table
(
table
,
ACPI_PTR_TO_PHYSADDR
(
table
),
ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL
,
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.
*/
ddb_handle
->
common
.
flags
&=
~
AOPOBJ_DATA_VALID
;
return_ACPI_STATUS
(
AE_OK
);
if
(
ACPI_SUCCESS
(
status
))
{
ddb_handle
->
common
.
flags
&=
~
AOPOBJ_DATA_VALID
;
}
return_ACPI_STATUS
(
status
);
}
drivers/acpi/acpica/exconvrt.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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,14 +891,16 @@ 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_SEARCH_PARENT
,
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
return_desc
));
acpi_ns_get_node_unlocked
(
walk_state
->
scope_info
->
scope
.
node
,
operand
[
0
]
->
string
.
pointer
,
ACPI_NS_SEARCH_PARENT
,
ACPI_CAST_INDIRECT_PTR
(
struct
acpi_namespace_node
,
&
return_desc
));
if
(
ACPI_FAILURE
(
status
))
{
goto
cleanup
;
}
...
...
drivers/acpi/acpica/exresop.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
);
}
/* Write the updated enable mask */
if
(
!
(
register_bit
&
gpe_register_info
->
mask_for_run
))
{
status
=
acpi_hw_write
(
enable_mask
,
&
gpe_register_info
->
enable_address
);
/* Write the updated enable mask */
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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,38 +264,47 @@ acpi_ns_parse_table(u32 table_index, struct acpi_namespace_node *start_node)
ACPI_FUNCTION_TRACE
(
ns_parse_table
);
/*
* 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.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start pass 1
\n
"
));
status
=
acpi_ns_one_complete_parse
(
ACPI_IMODE_LOAD_PASS1
,
table_index
,
start_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
if
(
acpi_gbl_parse_table_as_term_list
)
{
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start load pass
\n
"
));
/*
* AML Parse, pass 2
*
* In this pass, we resolve forward references and other things
* that could not be completed during the first pass.
* Another complete parse of the AML is performed, but the
* overhead of this is compensated for by the fact that the
* parse objects are all cached.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start pass 2
\n
"
));
status
=
acpi_ns_one_complete_parse
(
ACPI_IMODE_LOAD_PASS2
,
table_index
,
start_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
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.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start pass 1
\n
"
));
status
=
acpi_ns_one_complete_parse
(
ACPI_IMODE_LOAD_PASS1
,
table_index
,
start_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
/*
* AML Parse, pass 2
*
* In this pass, we resolve forward references and other things
* that could not be completed during the first pass.
* Another complete parse of the AML is performed, but the
* overhead of this is compensated for by the fact that the
* parse objects are all cached.
*/
ACPI_DEBUG_PRINT
((
ACPI_DB_PARSE
,
"**** Start pass 2
\n
"
));
status
=
acpi_ns_one_complete_parse
(
ACPI_IMODE_LOAD_PASS2
,
table_index
,
start_node
);
if
(
ACPI_FAILURE
(
status
))
{
return_ACPI_STATUS
(
status
);
}
}
return_ACPI_STATUS
(
status
);
...
...
drivers/acpi/acpica/nsutils.c
浏览文件 @
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,20 +678,21 @@ 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
,
const
char
*
pathname
,
u32
flags
,
struct
acpi_namespace_node
**
return_node
)
acpi_ns_get_node
_unlocked
(
struct
acpi_namespace_node
*
prefix_node
,
const
char
*
pathname
,
u32
flags
,
struct
acpi_namespace_node
**
return_node
)
{
union
acpi_generic_state
scope_info
;
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
f42106fe
...
...
@@ -344,23 +344,27 @@ 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_fixed_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
facs
,
ACPI_SIG_FACS
,
&
acpi_gbl_facs_index
);
acpi_tb_install_standard_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
facs
,
ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL
,
FALSE
,
TRUE
,
&
acpi_gbl_facs_index
);
}
if
(
acpi_gbl_FADT
.
Xfacs
)
{
acpi_tb_install_fixed_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
Xfacs
,
ACPI_SIG_FACS
,
&
acpi_gbl_xfacs_index
);
acpi_tb_install_standard_table
((
acpi_physical_address
)
acpi_gbl_FADT
.
Xfacs
,
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,78 +558,74 @@ 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
)
{
if
(
address64
->
address
)
{
if
(
address64
->
address
!=
(
u64
)
address32
)
{
/* Address mismatch */
ACPI_BIOS_WARNING
((
AE_INFO
,
"32/64X address mismatch in FADT/%s: "
"0x%8.8X/0x%8.8X%8.8X, using %u-bit address"
,
name
,
address32
,
ACPI_FORMAT_UINT64
(
address64
->
address
),
acpi_gbl_use32_bit_fadt_addresses
?
32
:
64
));
}
/* 64-bit address is zero, use 32-bit address */
/*
* 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
,
ACPI_MUL_8
(
length
),
address64
->
bit_width
));
}
}
/*
* 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_gbl_use32_bit_fadt_addresses
)
{
acpi_tb_init_generic_address
(
address64
,
ACPI_ADR_SPACE_SYSTEM_IO
,
*
ACPI_ADD_PTR
(
u8
,
&
acpi_gbl_FADT
,
fadt_info_table
[
i
].
length
),
length
,
(
u64
)
address32
,
name
,
flags
);
}
else
if
(
address64
->
address
!=
(
u64
)
address32
)
{
/* Address mismatch */
ACPI_BIOS_WARNING
((
AE_INFO
,
"32/64X address mismatch in FADT/%s: "
"0x%8.8X/0x%8.8X%8.8X, using %u-bit address"
,
name
,
address32
,
ACPI_FORMAT_UINT64
(
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
,
name
,
flags
);
}
}
}
/*
* 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
(
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
(
fadt_info_table
[
i
].
flags
&
ACPI_FADT_REQUIRED
)
{
/*
* Field is required (Pm1a_event, Pm1a_control).
...
...
drivers/acpi/acpica/tbfind.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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,34 +271,34 @@ acpi_ut_dump_buffer_to_file(ACPI_FILE file,
case
DB_BYTE_DISPLAY
:
default:
/* Default is BYTE display */
acpi_ut_file_
printf
(
file
,
"%02X "
,
buffer
[(
acpi_size
)
i
+
j
]);
f
printf
(
file
,
"%02X "
,
buffer
[(
acpi_size
)
i
+
j
]);
break
;
case
DB_WORD_DISPLAY
:
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
,
sizeof
(
acpi_gbl_print_buffer
),
format
,
args
);
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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_initialize_objects
(
u32
flags
))
ACPI_EXTERNAL_RETURN_STATUS
(
acpi_status
__init
acpi_terminate
(
void
))
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
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
浏览文件 @
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
浏览文件 @
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,14 +763,15 @@ 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
* +------------ <Reserved>
* +---+-+-+-+---+
* |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
#define ACPI_GPE_DISPATCH_METHOD (u8) 0x01
...
...
@@ -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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
f42106fe
...
...
@@ -69,16 +69,17 @@ 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
"
,
*
(
u32
*
)
table
->
signature
);
fprintf
(
stderr
,
"Table signature (0x%8.8X) is invalid
\n
"
,
*
(
u32
*
)
table
->
signature
);
return
(
FALSE
);
}
/* Check for minimum table length */
if
(
table
->
length
<
sizeof
(
struct
acpi_table_header
))
{
acpi_log_error
(
"Table length (0x%8.8X) is invalid
\n
"
,
table
->
length
);
fprintf
(
stderr
,
"Table length (0x%8.8X) is invalid
\n
"
,
table
->
length
);
return
(
FALSE
);
}
}
...
...
@@ -115,8 +116,8 @@ 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
"
,
table
->
signature
);
fprintf
(
stderr
,
"%4.4s: Warning: wrong checksum in table
\n
"
,
table
->
signature
);
}
return
(
AE_OK
);
...
...
@@ -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
"
,
table
->
signature
,
ACPI_FORMAT_UINT64
(
address
));
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,14 +240,14 @@ 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
"
,
acpi_format_exception
(
status
));
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
"
,
i
,
acpi_format_exception
(
status
));
fprintf
(
stderr
,
"Could not get ACPI table at index %u, %s
\n
"
,
i
,
acpi_format_exception
(
status
));
continue
;
}
}
...
...
@@ -286,20 +287,20 @@ 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
"
,
ascii_address
);
fprintf
(
stderr
,
"%s: Could not convert to a physical address
\n
"
,
ascii_address
);
return
(
-
1
);
}
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
"
,
ACPI_FORMAT_UINT64
(
address
),
acpi_format_exception
(
status
));
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,9 +332,9 @@ 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
"
,
signature
);
fprintf
(
stderr
,
"Invalid table signature [%s]: must be exactly 4 characters
\n
"
,
signature
);
return
(
-
1
);
}
...
...
@@ -363,9 +364,9 @@ int ap_dump_table_by_name(char *signature)
return
(
0
);
}
acpi_log_error
(
"Could not get ACPI table with signature [%s], %s
\n
"
,
local_signature
,
acpi_format_exception
(
status
));
fprintf
(
stderr
,
"Could not get ACPI table with signature [%s], %s
\n
"
,
local_signature
,
acpi_format_exception
(
status
));
return
(
-
1
);
}
...
...
@@ -408,24 +409,24 @@ 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
"
,
pathname
);
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
"
,
table
->
length
,
file_size
,
pathname
);
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
"
,
pathname
,
table
->
signature
,
file_size
,
file_size
);
fprintf
(
stderr
,
"Input file: %s contains table [%4.4s], 0x%X (%u) bytes
\n
"
,
pathname
,
table
->
signature
,
file_size
,
file_size
);
}
table_status
=
ap_dump_table_buffer
(
table
,
0
,
0
);
...
...
tools/power/acpi/tools/acpidump/apfiles.c
浏览文件 @
f42106fe
此差异已折叠。
点击以展开。
tools/power/acpi/tools/acpidump/apmain.c
浏览文件 @
f42106fe
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录