ACPICA: 20140424 Release
Subsystems (2)
cover ACPICA: 20140424 Release
ACPICA 20140424 Release Notes for kernel-resident subsystem:
Implemented support to skip/ignore NULL address entries in the RSDT/XSDT. Some of these tables are known to contain a trailing NULL entry. Lv Zheng.
Removed an extraneous error message for the case where there are a large number of system GPEs (> 124). This was the "32-bit FADT register is too long to convert to GAS struct" message, which is irrelevant for GPEs since the GPEx_BLK_LEN fields of the FADT are always used instead of the (limited capacity) GAS bit length. Also, several changes to ensure proper support for GPE numbers > 255, where some "GPE number" fields were 8-bits internally.
Implemented and deployed additional configuration support for the public ACPICA external interfaces. Entire classes of interfaces can now be easily modified or configured out, replaced by stubbed inline functions by default. Lv Zheng.
Moved all public ACPICA runtime configuration globals to the public ACPICA external interface file for convenience. Also, removed some obsolete/unused globals. See the file acpixf.h. Lv Zheng.
Documentation: Added a new section to the ACPICA reference describing the maximum number of GPEs that can be supported by the FADT-defined GPEs in block zero and one. About 1200 total. See section 4.4.1 of the ACPICA reference.
Example Code and Data Size: These are the sizes for the OS-independent acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The debug version of the code includes the debug output trace mechanism and has a much larger code and data size.
Current Release:
Non-Debug Version: 96.8K Code, 27.2K Data, 124.0K Total
Debug Version: 189.5K Code, 79.7K Data, 269.2K Total
Previous Release:
Non-Debug Version: 97.0K Code, 27.2K Data, 124.2K Total
Debug Version: 189.7K Code, 79.5K Data, 269.2K Total===============
The 20140424 ACPICA kernel-resident subsystem updates are linuxized based on the pm/linux-next branch to form this patchset.
The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All drivers/acpi configurations
All platform drivers
All ACPI drivers
4 DRM drivers that implement ACPI opregion
All buses with ACPI bindings
All cpufreq configurations
All xen configurations
All ACPI table drivers
4. allyes: kernel configuration generated by allyesconfig.
After applying this series, the divergence result is:
952 Lines, 33.5 Kbytes.
Bob Moore (10):
ACPICA: Update acpi_buffer_to_resource interface.
ACPICA: Add support for LPIT table.
ACPICA: Add support for _LPD and _PRP methods.
ACPICA: Comment updates - no functional change.
ACPICA: Back port of _PRP update.
ACPICA: Back port of improvements on exception code.
ACPICA: Remove extraneous error message for large number of GPEs.
ACPICA: Events: Update GPE handling and initialization code.
ACPICA: Comment/format update, no functional change.
ACPICA: Update version to 20140424.
David E. Box (1):
ACPICA: Update handling of PCI ID lists.
Lv Zheng (16):
ACPICA: Utilities: Cleanup obsoleted global variables.
ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER
enabled code in utglobal.c.
ACPICA: acpidump: Fix code issue in invoking fread in the loop.
ACPICA: Update global variable definitions. No functional change.
ACPICA: OSL: Move external globals from utglobal.c to acpixf.h using
ACPI_INIT_GLOBAL/ACPI_GLOBAL.
ACPICA: OSL: Add configurability for memory allocation macros.
ACPICA: OSL: Add configurability for error message functions.
ACPICA: OSL: Add configurability for debug output functions.
ACPICA: OSL: Add section to collect the divergence in acpixf.h.
ACPICA: OSL: Add configurability for generic external functions.
ACPICA: Linux header: Add support for stubbed externals.
ACPICA: acpidump: Fix truncated RSDP signature validation.
ACPICA: Tables: Fix invalid pointer accesses in
acpi_tb_parse_root_table().
ACPICA: acpidump: Add support to force using RSDT.
ACPICA: Tables: Add new mechanism to skip NULL entries in RSDT and
XSDT.
ACPICA: Tables: Remove old mechanism to validate if XSDT contains
NULL entries.
drivers/acpi/acpica/acevents.h | 5 +- drivers/acpi/acpica/acglobal.h | 141 +--- drivers/acpi/acpica/aclocal.h | 9 +- drivers/acpi/acpica/acpredef.h | 4 + drivers/acpi/acpica/evgpe.c | 13 +- drivers/acpi/acpica/evgpeblk.c | 34 +- drivers/acpi/acpica/evgpeinit.c | 12 +- drivers/acpi/acpica/evxfgpe.c | 7 +- drivers/acpi/acpica/hwpci.c | 15 +- drivers/acpi/acpica/rscreate.c | 13 +- drivers/acpi/acpica/tbfadt.c | 51 +- drivers/acpi/acpica/tbutils.c | 123 +-- drivers/acpi/acpica/utglobal.c | 26 +- drivers/acpi/acpica/utxferror.c | 2 + include/acpi/acnames.h | 1 + include/acpi/acpixf.h | 834 +++++++++++++------- include/acpi/actbl1.h | 4 +- include/acpi/actbl2.h | 71 +- include/acpi/actypes.h | 21 + include/acpi/platform/aclinux.h | 31 + .../acpi/os_specific/service_layers/oslinuxtbl.c | 102 ++- tools/power/acpi/tools/acpidump/acpidump.h | 23 +- tools/power/acpi/tools/acpidump/apmain.c | 13 +- 23 files changed, 900 insertions(+), 655 deletions(-)
Signature · 1 line
1.7.10
PATCH 1/27 ACPICA: Utilities: Cleanup obsoleted global variables.
This patch deletes global variable declarations that are no longer used by ACPICA. No functional changes. Lv Zheng.
--- drivers/acpi/acpica/acglobal.h | 7 ------- 1 file changed, 7 deletions(-)
drivers/acpi/acpica/acglobal.h +0 -7
@@ -279,7 +279,6 @@ ACPI_GLOBAL(acpi_exception_handler, acpi_gbl_exception_handler);ACPI_GLOBAL (acpi_init_handler, acpi_gbl_init_handler);ACPI_GLOBAL (acpi_table_handler, acpi_gbl_table_handler); ACPI_GLOBAL(void *, acpi_gbl_table_handler_context); -ACPI_GLOBAL(struct acpi_walk_state *, acpi_gbl_breakpoint_walk);ACPI_GLOBAL (acpi_interface_handler, acpi_gbl_interface_handler); ACPI_GLOBAL(struct acpi_sci_handler_info *, acpi_gbl_sci_handler_list);
@@ -296,7 +295,6 @@ ACPI_GLOBAL(u8, acpi_gbl_reg_methods_executed);/* Misc */ ACPI_GLOBAL (u32, acpi_gbl_original_mode); -ACPI_GLOBAL (u32, acpi_gbl_rsdp_original_location);ACPI_GLOBAL (u32, acpi_gbl_ns_lookup_count);ACPI_GLOBAL (u32, acpi_gbl_ps_find_count);ACPI_GLOBAL (u16, acpi_gbl_pm1_enable_register_save);
@@ -483,11 +481,6 @@ ACPI_GLOBAL(u16, acpi_gbl_node_type_count_misc);ACPI_GLOBAL (u32, acpi_gbl_num_nodes);ACPI_GLOBAL (u32, acpi_gbl_num_objects); -ACPI_GLOBAL (u32, acpi_gbl_size_of_parse_tree); -ACPI_GLOBAL (u32, acpi_gbl_size_of_method_trees); -ACPI_GLOBAL (u32, acpi_gbl_size_of_node_entries); -ACPI_GLOBAL (u32, acpi_gbl_size_of_acpi_objects); -#endif /* ACPI_DEBUGGER */ /*****************************************************************************
Signature · 1 line
1.7.10
PATCH 2/27 ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER enabled code in utglobal.c.
In reply to Lv ZhengThis patch deploys ACPI_DEBUGGER_EXEC usage to utglobal.c to reduce "ifdef" of ACPI_DEBUGGER. No functional changes. Lv Zheng.
--- drivers/acpi/acpica/utglobal.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/acpi/acpica/utglobal.c +1 -3
@@ -377,9 +377,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_disable_mem_tracking = FALSE;#endif -#ifdef ACPI_DEBUGGER - acpi_gbl_db_terminate_threads = FALSE; -#endif +ACPI_DEBUGGER_EXEC (acpi_gbl_db_terminate_threads = FALSE);return_ACPI_STATUS (AE_OK ); }
Signature · 1 line
1.7.10
Re: [PATCH 02/27] ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER enabled code in utglobal.c.
Quoted 14 lines · Lv Zheng
This patch deploys
ACPI_DEBUGGER_EXECusage toutglobal.cto reduce "ifdef" ofACPI_DEBUGGER. No functional changes. Lv Zheng.Signed-off-by Lv Zheng <[email protected]>Signed-off-by Bob Moore <[email protected]>--- drivers/acpi/acpica/utglobal.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)drivers/acpi/acpica/utglobal.c +0
-0
drivers/acpi/acpica/utglobal.c acpi_status acpi_ut_init_globals(void) · line 382
Quoted 9 lines
drivers/acpi/acpica/utglobal.c +1
-3@@ -377,9 +377,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_disable_mem_tracking = FALSE;#endif -#ifdef ACPI_DEBUGGER - acpi_gbl_db_terminate_threads = FALSE; -#endif +ACPI_DEBUGGER_EXEC (acpi_gbl_db_terminate_threads = FALSE);return_ACPI_STATUS (AE_OK );
Is it just me or is this incredibly ugly?
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
RE: [PATCH 02/27] ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER enabled code in utglobal.c.
Hi,
Quoted 21 lines
From: Pavel Machek [mailto:[email protected]]
Sent: Tuesday, May 06, 2014 3:54 PMQuoted 17 lines · Lv Zheng
This patch deploys
ACPI_DEBUGGER_EXECusage toutglobal.cto reduce "ifdef" ofACPI_DEBUGGER. No functional changes. Lv Zheng.Signed-off-by Lv Zheng <[email protected]>Signed-off-by Bob Moore <[email protected]>--- drivers/acpi/acpica/utglobal.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)drivers/acpi/acpica/utglobal.c +0
-0@@ -377,9 +377,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_disable_mem_tracking = FALSE;#endif
Quoted 8 lines
drivers/acpi/acpica/utglobal.c acpi_status acpi_ut_init_globals(void) · line 382
Quoted 6 lines
drivers/acpi/acpica/utglobal.c +1
-3-#ifdef ACPI_DEBUGGER - acpi_gbl_db_terminate_threads = FALSE; -#endif +ACPI_DEBUGGER_EXEC (acpi_gbl_db_terminate_threads = FALSE);return_ACPI_STATUS (AE_OK );Is it just me or is this incredibly ugly?
This patch is no-op for Linux kernel.ACPI_DEBUGGER is not enabled for Linux kernel.
This patch is here to reduce the source code differences between Linux and ACPICA.
ACPICA release is done by a set of conversion utilities, the process is known as linuxizing. The generation result of the linuxizing will require more human interventions if such differences grow bigger. Thus one of our quality insurance step is to control the divergences down to an acceptable level. I should add a document in the kernel source tree to describe the ACPICA release cycle.
Thanks and best regards
-Lv
Quoted 5 lines
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 02/27] ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER enabled code in utglobal.c.
Hi!
Quoted 33 lines
Quoted 21 lines
From: Pavel Machek [mailto:[email protected]]
Sent: Tuesday, May 06, 2014 3:54 PMQuoted 17 lines · Lv Zheng
This patch deploys
ACPI_DEBUGGER_EXECusage toutglobal.cto reduce "ifdef" ofACPI_DEBUGGER. No functional changes. Lv Zheng.Signed-off-by Lv Zheng <[email protected]>Signed-off-by Bob Moore <[email protected]>--- drivers/acpi/acpica/utglobal.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)drivers/acpi/acpica/utglobal.c +0
-0@@ -377,9 +377,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_disable_mem_tracking = FALSE;#endif Quoted 8 lines
drivers/acpi/acpica/utglobal.c acpi_status acpi_ut_init_globals(void) · line 382
Quoted 6 lines
drivers/acpi/acpica/utglobal.c +1
-3-#ifdef ACPI_DEBUGGER - acpi_gbl_db_terminate_threads = FALSE; -#endif +ACPI_DEBUGGER_EXEC (acpi_gbl_db_terminate_threads = FALSE);return_ACPI_STATUS (AE_OK );Is it just me or is this incredibly ugly?
This patch is no-op for Linux kernel.
ACPI_DEBUGGERis not enabled for Linux kernel.
Quoted 6 lines
This patch is here to reduce the source code differences between Linux and ACPICA.
ACPICA release is done by a set of conversion utilities, the process is known as linuxizing. The generation result of the linuxizing will require more human
interventions if such differences grow bigger.
You don't have to do the change to the original ACPICA release, do you?
Would it be feasible to modify your linuxizing scripts to simply delete #ifdefs that can not happen for linux?
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
RE: [PATCH 02/27] ACPICA: Utilities: Deploy ACPI_DEBUGGER_EXEC for ACPI_DEBUGGER enabled code in utglobal.c.
Hi,
Quoted 41 lines
From: Pavel Machek [mailto:[email protected]]
Sent: Tuesday, May 06, 2014 7:08 PMHi!
Quoted 35 lines
Quoted 21 lines
From: Pavel Machek [mailto:[email protected]]
Sent: Tuesday, May 06, 2014 3:54 PMQuoted 17 lines · Lv Zheng
This patch deploys
ACPI_DEBUGGER_EXECusage toutglobal.cto reduce "ifdef" ofACPI_DEBUGGER. No functional changes. Lv Zheng.Signed-off-by Lv Zheng <[email protected]>Signed-off-by Bob Moore <[email protected]>--- drivers/acpi/acpica/utglobal.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)drivers/acpi/acpica/utglobal.c +0
-0@@ -377,9 +377,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_disable_mem_tracking = FALSE;#endif Quoted 8 lines
drivers/acpi/acpica/utglobal.c acpi_status acpi_ut_init_globals(void) · line 382
Quoted 6 lines
drivers/acpi/acpica/utglobal.c +1
-3-#ifdef ACPI_DEBUGGER - acpi_gbl_db_terminate_threads = FALSE; -#endif +ACPI_DEBUGGER_EXEC (acpi_gbl_db_terminate_threads = FALSE);return_ACPI_STATUS (AE_OK );Is it just me or is this incredibly ugly?
This patch is no-op for Linux kernel.
ACPI_DEBUGGERis not enabled for Linux kernel.This patch is here to reduce the source code differences between Linux and ACPICA.
Quoted 6 lines
Quoted 3 lines
ACPICA release is done by a set of conversion utilities, the process is known as linuxizing. The generation result of the linuxizing will require more human
interventions if such differences grow bigger.You don't have to do the change to the original ACPICA release, do you?
There are many ACPI_DEBUGGER_EXEC() invocations already in the ACPICA source base, this is just a follow up to use the existing mechanism.
Quoted 3 lines
Would it be feasible to modify your linuxizing scripts to simply delete #ifdefs that can not happen for linux?
Currently there is no such mechanism.
If it is allowed and urgent, I'll try to add it. Thanks for the suggestion. This might be happen in the future, not this release cycle.
If we can talk about the future, well, IMO, there is a better way to modulize ACPICA.
For example, this code is invoked in acpi_ut_init_globals(), I do believe it should be invoked in something like acpi_db_initialize().
Then it might also be possible to make the acpi_gbl_db_terminate_threads a static global variable bound to debugger, and invisible to any other files outside of debugger. The most important benefit might be: we are able to kill many #ifdef/#endif code in this way.
This is more like Linux style. :-)
Thanks and best regards
-Lv
PATCH 3/27 ACPICA: acpidump: Fix code issue in invoking fread in the loop.
In reply to Lv ZhengThis patch fixes an issue that the while loop is not needed as fread() should return exact the bytes of expected.
The patch is tested by runing diff against the output of "-c" mode and the normal mode, and only finds the following differences:
1. table addresses: the "-c" mode will always fill 0x0000000000000000 for the address.
2. RSDP/RSDT/XSDT: there is no generation of such tables for "-c" mode. So the test result shows the fix is valid. Lv Zheng.
--- .../acpi/os_specific/service_layers/oslinuxtbl.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +6 -11
@@ -1112,7 +1112,6 @@ osl_read_table_from_file(char *filename,struct acpi_table_header *local_table =NULL ;u32 table_length;s32 count; -u32 total =0 ;acpi_status status =AE_OK ;/* Open the file */
@@ -1163,16 +1162,12 @@ osl_read_table_from_file(char *filename,fseek (table_file, file_offset,SEEK_SET ); -while (!feof (table_file) && total < table_length) { - count =fread (local_table + total,1 , table_length - total, table_file); -if (count <0 ) { -fprintf (stderr,"%4.4s: Could not read table content\n" , - header.signature); - status =AE_INVALID_TABLE_LENGTH ; - goto exit; - } - - total += count; + count =fread (local_table,1 , table_length, table_file); +if (count != table_length) { +fprintf (stderr,"%4.4s: Could not read table content\n" , + header.signature); + status =AE_INVALID_TABLE_LENGTH ; + goto exit; }/* Validate checksum */
Signature · 1 line
1.7.10
PATCH 4/27 ACPICA: Update global variable definitions. No functional change.
In reply to Lv ZhengMove all of the public globals to acpixf.h for the convenience of users. Also:
Adds #ifndef/#endif conditions arround ACPI_GLOBAL and ACPI_INIT_GLOBAL definition so that OSPMs might be able to:
1. Redefine ACPI_GLOBAL/ACPI_INIT_GLOBAL into no-op, and
2. Redefine external global variables into immediates to implement stubs for them.
Lv Zheng.
--- drivers/acpi/acpica/acglobal.h | 134 +------------------------------------ include/acpi/acpixf.h | 143 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 132 insertions(+), 145 deletions(-)
drivers/acpi/acpica/acglobal.h +2 -132
@@ -44,144 +44,14 @@#ifndef __ACGLOBAL_H__#define __ACGLOBAL_H__ -/* -* Ensure that the globals are actually defined and initialized only once. -* -* The use of these macros allows a single list of globals (here) in order -* to simplify maintenance of the code. -*/ -#ifdef DEFINE_ACPI_GLOBALS -#define ACPI_GLOBAL (type,name) \ - extern type name; \ - type name - -#define ACPI_INIT_GLOBAL (type,name,value) \ - type name=value - -#else -#define ACPI_GLOBAL (type,name) \ - extern type name - -#define ACPI_INIT_GLOBAL (type,name,value) \ - extern type name -#endif - -#ifdef DEFINE_ACPI_GLOBALS - -/* Public globals, available from outside ACPICA subsystem */ -/***************************************************************************** * -* Runtime configuration (static defaults that can be overriden at runtime) +* Globals related to the ACPI tables * ****************************************************************************/ -/* -* Enable "slack" in the AML interpreter? Default is FALSE, and the -* interpreter strictly follows the ACPI specification. Setting to TRUE -* allows the interpreter to ignore certain errors and/or bad AML constructs. -* -* Currently, these features are enabled by this flag: -* -* 1) Allow "implicit return" of last value in a control method -* 2) Allow access beyond the end of an operation region -* 3) Allow access to uninitialized locals/args (auto-init to integer 0) -* 4) Allow ANY object type to be a source operand for the Store() operator -* 5) Allow unresolved references (invalid target name) in package objects -* 6) Enable warning messages for behavior that is not ACPI spec compliant -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_enable_interpreter_slack, FALSE); - -/* -* Automatically serialize all methods that create named objects? Default -* is TRUE, meaning that all non_serialized methods are scanned once at -* table load time to determine those that create named objects. Methods -* that create named objects are marked Serialized in order to prevent -* possible run-time problems if they are entered by more than one thread. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_auto_serialize_methods, TRUE); - -/* -* Create the predefined _OSI method in the namespace? Default is TRUE -* because ACPICA is fully compatible with other ACPI implementations. -* Changing this will revert ACPICA (and machine ASL) to pre-OSI behavior. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_create_osi_method, TRUE); - -/* -* Optionally use default values for the ACPI register widths. Set this to -* TRUE to use the defaults, if an FADT contains incorrect widths/lengths. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_use_default_register_widths, TRUE); - -/* -* Optionally enable output from the AML Debug Object. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_enable_aml_debug_object, FALSE); - -/* -* Optionally copy the entire DSDT to local memory (instead of simply -* mapping it.) There are some BIOSs that corrupt or replace the original -* DSDT, creating the need for this option. Default is FALSE, do not copy -* the DSDT. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_copy_dsdt_locally, FALSE); - -/* -* Optionally ignore an XSDT if present and use the RSDT instead. -* Although the ACPI specification requires that an XSDT be used instead -* of the RSDT, the XSDT has been found to be corrupt or ill-formed on -* some machines. Default behavior is to use the XSDT if present. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_do_not_use_xsdt, 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 -* address. Although ACPICA adheres to the ACPI specification which -* requires the use of the corresponding 64-bit address if it is non-zero, -* some machines have been found to have a corrupted non-zero 64-bit -* address. Default is FALSE, do not favor the 32-bit addresses. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_use32_bit_fadt_addresses, FALSE); - -/* -* Optionally truncate I/O addresses to 16 bits. Provides compatibility -* with other ACPI implementations. NOTE: During ACPICA initialization, -* this value is set to TRUE if any Windows OSI strings have been -* requested by the BIOS. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_truncate_io_addresses, FALSE); - -/* -* Disable runtime checking and repair of values returned by control methods. -* Use only if the repair is causing a problem on a particular machine. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_disable_auto_repair, FALSE); +/* Master list of all ACPI tables that were found in the RSDT/XSDT */ -/* -* Optionally do not install any SSDTs from the RSDT/XSDT during initialization. -* This can be useful for debugging ACPI problems on some machines. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_disable_ssdt_table_install, FALSE); - -/* -* We keep track of the latest version of Windows that has been requested by -* the BIOS. -*/ -ACPI_INIT_GLOBAL (u8, acpi_gbl_osi_data,0 ); - -#endif /* DEFINE_ACPI_GLOBALS */ - -/***************************************************************************** -* -* ACPI Table globals -* -****************************************************************************/ - -/* -* Master list of all ACPI tables that were found in the RSDT/XSDT. -*/ ACPI_GLOBAL(struct acpi_table_list, acpi_gbl_root_table_list);/* DSDT information. Used to check for DSDT corruption */
include/acpi/acpixf.h +130 -13
162 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH 5/27 ACPICA: Update acpi_buffer_to_resource interface.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
1) Add standard trace mechanism.
2) Add ACPI_EXPORT_SYMBOL macro.
--- drivers/acpi/acpica/rscreate.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/acpi/acpica/rscreate.c +8 -5
@@ -72,6 +72,8 @@ acpi_buffer_to_resource(u8 *aml_buffer,void *resource;void *current_resource_ptr; +ACPI_FUNCTION_TRACE (acpi_buffer_to_resource); +/* * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag * is not required here.
@@ -85,7 +87,7 @@ acpi_buffer_to_resource(u8 *aml_buffer, status =AE_OK ; }if (ACPI_FAILURE (status)) { -return (status); +return_ACPI_STATUS (status); }/* Allocate a buffer for the converted resource */
@@ -93,7 +95,7 @@ acpi_buffer_to_resource(u8 *aml_buffer, resource =ACPI_ALLOCATE_ZEROED (list_size_needed); current_resource_ptr = resource;if (!resource) { -return (AE_NO_MEMORY ); +return_ACPI_STATUS (AE_NO_MEMORY ); }/* Perform the AML-to-Resource conversion */
@@ -110,9 +112,11 @@ acpi_buffer_to_resource(u8 *aml_buffer, *resource_ptr = resource; } -return (status); +return_ACPI_STATUS (status); } +ACPI_EXPORT_SYMBOL (acpi_buffer_to_resource) +/******************************************************************************* * * FUNCTION: acpi_rs_create_resource_list
@@ -130,10 +134,9 @@ acpi_buffer_to_resource(u8 *aml_buffer,* of device resources. * ******************************************************************************/ -acpi_status acpi_rs_create_resource_list (union acpi_operand_object *aml_buffer, -struct acpi_buffer * output_buffer) +struct acpi_buffer *output_buffer) {acpi_status status;
Signature · 1 line
1.7.10
PATCH 6/27 ACPICA: Add support for LPIT table.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Adds header, disassembler, table compiler, and template support for the Low Power Idle Table (LPIT).
Note that the disassembler and table compiler are not shipped in the kernel.
--- include/acpi/actbl2.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+)
include/acpi/actbl2.h +65 -0
@@ -70,6 +70,7 @@#define ACPI_SIG_HPET "HPET"/* High Precision Event Timer table */ #define ACPI_SIG_IBFT "IBFT"/* iSCSI Boot Firmware Table */ #define ACPI_SIG_IVRS "IVRS"/* I/O Virtualization Reporting Structure */ +#define ACPI_SIG_LPIT "LPIT"/* Low Power Idle Table */ #define ACPI_SIG_MCFG "MCFG"/* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI"/* Management Controller Host Interface table */ #define ACPI_SIG_MTMR "MTMR"/* MID Timer table */
@@ -820,6 +821,70 @@ struct acpi_ivrs_memory {/******************************************************************************* * +* LPIT - Low Power Idle Table +* +* Conforms to "ACPI Low Power Idle Table (LPIT) and _LPD Proposal (DRAFT)" +* +******************************************************************************/ + +struct acpi_table_lpit { +struct acpi_table_header header;/* Common ACPI table header */ +}; + +/* LPIT subtable header */ + +struct acpi_lpit_header { +u32 type;/* Subtable type */ +u32 length;/* Subtable length */ +u16 unique_id; +u16 reserved; +u32 flags; +}; + +/* Values for subtable Type above */ + +enum acpi_lpit_type { +ACPI_LPIT_TYPE_NATIVE_CSTATE =0x00 , +ACPI_LPIT_TYPE_SIMPLE_IO =0x01 +}; + +/* Masks for Flags field above */ + +#define ACPI_LPIT_STATE_DISABLED (1) +#define ACPI_LPIT_NO_COUNTER (1<<1) + +/* +* LPIT subtables, correspond to Type in struct acpi_lpit_header +*/ + +/* 0x00: Native C-state instruction based LPI structure */ + +struct acpi_lpit_native { +struct acpi_lpit_header header; +struct acpi_generic_address entry_trigger; +u32 residency; +u32 latency; +struct acpi_generic_address residency_counter; +u64 counter_frequency; +}; + +/* 0x01: Simple I/O based LPI structure */ + +struct acpi_lpit_io { +struct acpi_lpit_header header; +struct acpi_generic_address entry_trigger; +u32 trigger_action; +u64 trigger_value; +u64 trigger_mask; +struct acpi_generic_address minimum_idle_state; +u32 residency; +u32 latency; +struct acpi_generic_address residency_counter; +u64 counter_frequency; +}; + +/******************************************************************************* +* * MCFG - PCI Memory Mapped Configuration table and sub-table * Version 1 *
Signature · 1 line
1.7.10
PATCH 7/27 ACPICA: Add support for _LPD and _PRP methods.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
This patch currently only affects acpihelp and iASL which are not shipped in the Linux kernel.
--- drivers/acpi/acpica/acpredef.h | 4 ++++ 1 file changed, 4 insertions(+)
drivers/acpi/acpica/acpredef.h +4 -0
@@ -586,6 +586,10 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { {{"_LID" ,METHOD_0ARGS , METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, + {{"_LPD" ,METHOD_0ARGS , + METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, /* Variable-length (1 Int(rev), n Pkg (2 Int) */ +PACKAGE_INFO (ACPI_PTYPE2_REV_FIXED ,ACPI_RTYPE_INTEGER ,2 ,0 ,0 ,0 ), + {{"_MAT", METHOD_0ARGS, METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
Signature · 1 line
1.7.10
PATCH 8/27 ACPICA: Update handling of PCI ID lists.
In reply to Lv ZhengFrom: "David E. Box" <[email protected]>
More of a style cleanup. if hw_build_pci_list is to return a non-zero status, it now deletes any partial ID list that has been constructed. if it returns AE_OK, the caller is responsible for list deletion. David Box.
--- drivers/acpi/acpica/hwpci.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
drivers/acpi/acpica/hwpci.c +12 -3
@@ -140,11 +140,12 @@ acpi_hw_derive_pci_id(struct acpi_pci_id *pci_id,/* Walk the list, updating the PCI device/function/bus numbers */ status =acpi_hw_process_pci_list (pci_id, list_head); - } -/* Always delete the list */ +/* Delete the list */ + +acpi_hw_delete_pci_list (list_head); + } -acpi_hw_delete_pci_list (list_head);return_ACPI_STATUS (status); }
@@ -187,6 +188,10 @@ acpi_hw_build_pci_list(acpi_handle root_pci_device,while (1 ) { status =acpi_get_parent (current_device, &parent_device);if (ACPI_FAILURE (status)) { + +/* Must delete the list before exit */ + +acpi_hw_delete_pci_list (*return_list_head);return (status); }
@@ -199,6 +204,10 @@ acpi_hw_build_pci_list(acpi_handle root_pci_device, list_element =ACPI_ALLOCATE (sizeof (struct acpi_pci_device ));if (!list_element) { + +/* Must delete the list before exit */ + +acpi_hw_delete_pci_list (*return_list_head);return (AE_NO_MEMORY ); }
Signature · 1 line
1.7.10
PATCH 9/27 ACPICA: Comment updates - no functional change.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Change all instances of "sub-table" to "subtable" for consistency.
--- include/acpi/actbl1.h | 4 ++-- include/acpi/actbl2.h | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-)
include/acpi/actbl1.h +2 -2
@@ -675,7 +675,7 @@ enum acpi_madt_type { };/* -* MADT Sub-tables, correspond to Type in struct acpi_subtable_header +* MADT Subtables, correspond to Type in struct acpi_subtable_header */ /* 0: Processor Local APIC */
@@ -918,7 +918,7 @@ enum acpi_srat_type { };/* -* SRAT Sub-tables, correspond to Type in struct acpi_subtable_header +* SRAT Subtables, correspond to Type in struct acpi_subtable_header */ /* 0: Processor Local APIC/SAPIC Affinity */
include/acpi/actbl2.h +3 -3
@@ -457,7 +457,7 @@ struct acpi_dmar_pci_path { };/* -* DMAR Sub-tables, correspond to Type in struct acpi_dmar_header +* DMAR Subtables, correspond to Type in struct acpi_dmar_header */ /* 0: Hardware Unit Definition */
@@ -885,7 +885,7 @@ struct acpi_lpit_io {/******************************************************************************* * -* MCFG - PCI Memory Mapped Configuration table and sub-table +* MCFG - PCI Memory Mapped Configuration table and subtable * Version 1 * * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
@@ -988,7 +988,7 @@ enum acpi_slic_type { };/* -* SLIC Sub-tables, correspond to Type in struct acpi_slic_header +* SLIC Subtables, correspond to Type in struct acpi_slic_header */ /* 0: Public Key Structure */
Signature · 1 line
1.7.10
PATCH 10/27 ACPICA: OSL: Move external globals from utglobal.c to acpixf.h using ACPI_INIT_GLOBAL/ACPI_GLOBAL.
In reply to Lv ZhengOSPMs like Linux trend to include all header files but leave empty stub macros for a feature that is not configured during build.
This patch cleans up global variables that are defined in utglobal.c using ACPI_INIT_GLOBAL mechanism. In Linux, such global variables are used by the subsystems external to ACPICA.
This patch also cleans up global variables that are defined in utglobal.c using ACPI_GLOBAL mechanism. In Linux, such global variables are not used or should not be used by the subsystems external to ACPICA.
External global variables can be redefined by OSPMs using ACPI_INIT_GLOBAL/ACPI_GLOBAL macros. Thus the ACPI_GLOBAL/ACPI_INIT_GLOBAL mechanisms can be used by OSPM to implement stubs for such external globals.
This patch doesn't include code for Linux to use this new mechanism, thus no functional changes. Lv Zheng.
--- drivers/acpi/acpica/utglobal.c | 22 ---------------------- include/acpi/acpixf.h | 35 +++++++++++++++++++++++------------ 2 files changed, 23 insertions(+), 34 deletions(-)
drivers/acpi/acpica/utglobal.c +0 -22
@@ -55,28 +55,7 @@ ACPI_MODULE_NAME("utglobal")* Static global variable initialization. * ******************************************************************************/ -/* Debug output control masks */ -u32 acpi_dbg_level =ACPI_DEBUG_DEFAULT ; - -u32 acpi_dbg_layer =0 ; - -/* acpi_gbl_FADT is a local copy of the FADT, converted to a common format. */ - -struct acpi_table_fadt acpi_gbl_FADT; -u32 acpi_gbl_trace_flags; -acpi_name acpi_gbl_trace_method_name; -u8 acpi_gbl_system_awake_and_running; -u32 acpi_current_gpe_count; - -/* -* ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning -* that the ACPI hardware is no longer required. A flag in the FADT indicates -* a reduced HW machine, and that flag is duplicated here for convenience. -*/ -u8 acpi_gbl_reduced_hardware; -/* Various state name strings */ -const char *acpi_gbl_sleep_state_names[ACPI_S_STATE_COUNT ] = {"\\_S0_" ,"\\_S1_" ,
@@ -337,7 +316,6 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_acpi_hardware_present = TRUE; acpi_gbl_last_owner_id_index =0 ; acpi_gbl_next_owner_id_offset =0 ; - acpi_gbl_trace_method_name =0 ; acpi_gbl_trace_dbg_level =0 ; acpi_gbl_trace_dbg_layer =0 ; acpi_gbl_debugger_configuration =DEBUGGER_THREADING ;
include/acpi/acpixf.h +23 -12
@@ -185,22 +185,33 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_osi_data,0 );/* -* Other miscellaneous public globals +* ACPI 5.0 introduces the concept of a "reduced hardware platform", meaning +* that the ACPI hardware is no longer required. A flag in the FADT indicates +* a reduced HW machine, and that flag is duplicated here for convenience. */ -extern u32 acpi_current_gpe_count; -extern struct acpi_table_fadt acpi_gbl_FADT; -extern u8 acpi_gbl_system_awake_and_running; -extern u8 acpi_gbl_reduced_hardware;/* ACPI 5.0 */ +ACPI_INIT_GLOBAL (u8, acpi_gbl_reduced_hardware, FALSE); -/* Runtime configuration of debug print levels */ - -extern u32 acpi_dbg_level; -extern u32 acpi_dbg_layer; +/* +* This mechanism is used to trace a specified AML method. The method is +* traced each time it is executed. +*/ +ACPI_INIT_GLOBAL (u32, acpi_gbl_trace_flags,0 ); +ACPI_INIT_GLOBAL (acpi_name, acpi_gbl_trace_method_name,0 ); -/* ACPICA runtime options */ +/* +* Runtime configuration of debug output control masks. We want the debug +* switches statically initialized so they are already set when the debugger +* is entered. +*/ +ACPI_INIT_GLOBAL (u32, acpi_dbg_level,ACPI_DEBUG_DEFAULT ); +ACPI_INIT_GLOBAL (u32, acpi_dbg_layer,0 ); -extern u32 acpi_gbl_trace_flags; -extern acpi_name acpi_gbl_trace_method_name; +/* +* Globals that are publically available +*/ +ACPI_GLOBAL (u32, acpi_current_gpe_count); +ACPI_GLOBAL(struct acpi_table_fadt, acpi_gbl_FADT); +ACPI_GLOBAL (u8, acpi_gbl_system_awake_and_running);/* * Hardware-reduced prototypes. All interfaces that use these macros will
Signature · 1 line
1.7.10
PATCH 11/27 ACPICA: OSL: Add configurability for memory allocation macros.
In reply to Lv ZhengOSPMs like Linux trend to include all header files but leave empty stub macros for a feature that is not configured during build.
For macros defined without other symbols referencesd it is safe to leave them without protections.
By investigation, there are only the following internal/external symbols referenced by the ACPICA macros:
1. C library symbols, including string, ctype, stdarg APIs. Since such symbols are always accessbile in the kernel source tree, it is safe to leave macros referencing them without protected for Linux.
2. ACPICA OSL symbols, such symbols are designed to be used only by ACPICA internal APIs. And there are macros directly referencing mutex and memory allocation OSL symbols. We need to examine the external usages of such macros.
For macros referencing the mutex OSL symbols, fortunately, there is no external user directly invoking such macros.
========================================================================
!! IMPORTANT !!
========================================================================
For macros referencing memory allocation OSL symbols -
1. 'free' - ACPI_FREE
2. 'alloc' - ACPI_ALLOCATE, ACPI_ALLOCATE_ZEROED, ACPI_ALLOCATE_BUFFER, ACPI_ALLOCATE_LOCAL_BUFFER
there are external users directly invoking 'alloc' macros. And the more complicated situation is the reversals of such macros are not ACPI_FREE but acpi_os_free (or kfree) in Linux. Though we can define such macros into no-op, we in fact cannot define their reversals into no-op. This patch adds mechanism to protect ACPICA memory allocation APIs for Linux so that acpi_os_free (or kfree) invoked in Linux can have a zero address returned by 'alloc' macros to free. In this
way, acpi_os_free (or kfree) can be converted into no-op.
========================================================================
3. ACPI_OFFSET and other macros that would access structure members, we need to check if such structure members are not accessible under a specific configuration. Fortunately, currently Linux doesn't use such structure members when CONFIG_ACPI is disabled.
This patch thus only adds mechanism useful for implementing stubs for ACPICA provided macros - the configurability of memory allocation APIs.
This patch doesn't include code for Linux to use this new mechanism, thus no functional changes. Lv Zheng.
--- include/acpi/actypes.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
include/acpi/actypes.h +21 -0
@@ -329,6 +329,15 @@ typedef u32 acpi_physical_address;* ******************************************************************************/ +#ifdef ACPI_NO_MEM_ALLOCATIONS + +#define ACPI_ALLOCATE (a) NULL +#define ACPI_ALLOCATE_ZEROED (a) NULL +#define ACPI_FREE (a) +#define ACPI_MEM_TRACKING (a) + +#else /* ACPI_NO_MEM_ALLOCATIONS */ +#ifdef ACPI_DBG_TRACK_ALLOCATIONS /* * Memory allocation tracking (used by acpi_exec to detect memory leaks)
@@ -350,6 +359,8 @@ typedef u32 acpi_physical_address;#endif /* ACPI_DBG_TRACK_ALLOCATIONS */ +#endif /* ACPI_NO_MEM_ALLOCATIONS */ +/****************************************************************************** * * ACPI Specification constants (Do not change unless the specification changes)
@@ -928,9 +939,19 @@ struct acpi_object_list {* Miscellaneous common Data Structures used by the interfaces */ #define ACPI_NO_BUFFER 0 + +#ifdef ACPI_NO_MEM_ALLOCATIONS + +#define ACPI_ALLOCATE_BUFFER (acpi_size) (0) +#define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (0) + +#else /* ACPI_NO_MEM_ALLOCATIONS */ +#define ACPI_ALLOCATE_BUFFER (acpi_size) (-1)/* Let ACPICA allocate buffer */ #define ACPI_ALLOCATE_LOCAL_BUFFER (acpi_size) (-2)/* For internal use only (enables tracking) */ +#endif /* ACPI_NO_MEM_ALLOCATIONS */ +struct acpi_buffer {acpi_size length;/* Length in bytes of the buffer */ void *pointer;/* pointer to buffer */
Signature · 1 line
1.7.10
PATCH 12/27 ACPICA: OSL: Add configurability for error message functions.
In reply to Lv ZhengThis patch extends ACPI_HW_DEPENDENT_x mechanism to all error message related functions so that the OSPMs can have full control to configure them into stub functions.
This patch doesn't include code for Linux to use this new mechanism, thus no functional change. Lv Zheng.
--- drivers/acpi/acpica/utxferror.c | 2 ++ include/acpi/acpixf.h | 73 ++++++++++++++++++++++++--------------- 2 files changed, 48 insertions(+), 27 deletions(-)
drivers/acpi/acpica/utxferror.c +2 -0
@@ -53,6 +53,7 @@ ACPI_MODULE_NAME("utxferror")* This module is used for the in-kernel ACPICA as well as the ACPICA * tools/applications. */ +#ifndef ACPI_NO_ERROR_MESSAGES /* Entire module */ /******************************************************************************* * * FUNCTION: acpi_error
@@ -249,3 +250,4 @@ acpi_bios_warning(const char *module_name, } ACPI_EXPORT_SYMBOL(acpi_bios_warning) +#endif /* ACPI_NO_ERROR_MESSAGES */
include/acpi/acpixf.h +46 -27
90 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH 13/27 ACPICA: OSL: Add configurability for debug output functions.
In reply to Lv ZhengThis patch extends ACPI_HW_DEPENDENT_x mechanism to all debugging output related functions so that the OSPMs can have full control to configure them into stub functions.
This patch doesn't include code for Linux to use this new mechanism, thus no functional change. Lv Zheng.
--- include/acpi/acpixf.h | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-)
include/acpi/acpixf.h +31 -18
@@ -256,6 +256,21 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);#endif /* ACPI_NO_ERROR_MESSAGES */ /* +* Debugging-output prototypes. All interfaces that use these macros will +* be configured out of the ACPICA build if the ACPI_DEBUG_OUTPUT flag is +* not defined. +*/ +#ifdef ACPI_DEBUG_OUTPUT +#define ACPI_DBG_DEPENDENT_RETURN_VOID (prototype) \ + prototype; + +#else +#define ACPI_DBG_DEPENDENT_RETURN_VOID (prototype) \ + static ACPI_INLINE prototype {return;} + +#endif /* ACPI_DEBUG_OUTPUT */ + +/* * Initialization */ acpi_status__init
@@ -716,22 +731,20 @@ ACPI_MSG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(3)/* * Debug output */ -#ifdef ACPI_DEBUG_OUTPUT -ACPI_PRINTF_LIKE(6) -void ACPI_INTERNAL_VAR_XFACE -acpi_debug_print (u32 requested_debug_level, -u32 line_number, -const char *function_name, -const char *module_name, -u32 component_id,const char *format, ...); - -ACPI_PRINTF_LIKE(6) -void ACPI_INTERNAL_VAR_XFACE -acpi_debug_print_raw (u32 requested_debug_level, -u32 line_number, -const char *function_name, -const char *module_name, -u32 component_id,const char *format, ...); -#endif - +ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) + void ACPI_INTERNAL_VAR_XFACE + acpi_debug_print(u32 requested_debug_level, + u32 line_number, + const char *function_name, + const char *module_name, + u32 component_id, + const char *format, ...)) +ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6) + void ACPI_INTERNAL_VAR_XFACE + acpi_debug_print_raw(u32 requested_debug_level, + u32 line_number, + const char *function_name, + const char *module_name, + u32 component_id, + const char *format, ...))#endif /* __ACXFACE_H__ */
Signature · 1 line
1.7.10
PATCH 14/27 ACPICA: OSL: Add section to collect the divergence in acpixf.h.
In reply to Lv ZhengThis patch re-orders the interface prototypes defined in acpixf.h, moving those having not back ported to ACPICA into a seperate section to reduce the source code differences between Linux and ACPICA.
This can help to reduce the cost of linuxizing the follow up commits.
--- include/acpi/acpixf.h | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-)
include/acpi/acpixf.h +17 -13
@@ -338,18 +338,11 @@ acpi_status __init acpi_reallocate_root_table(void);acpi_status __init acpi_find_root_pointer (acpi_size *rsdp_address); -acpi_status acpi_unload_table_id (acpi_owner_id id); -acpi_status acpi_get_table_header (acpi_string signature,u32 instance,struct acpi_table_header *out_table_header);acpi_status -acpi_get_table_with_size (acpi_string signature, -u32 instance,struct acpi_table_header **out_table, -acpi_size *tbl_size); - -acpi_status acpi_get_table (acpi_string signature,u32 instance,struct acpi_table_header **out_table);
@@ -391,10 +384,6 @@ acpi_attach_data(acpi_handle object, acpi_object_handler handler, void *data);acpi_status acpi_detach_data (acpi_handle object,acpi_object_handler handler);acpi_status -acpi_get_data_full (acpi_handle object,acpi_object_handler handler,void **data, -void (*callback)(void *)); - -acpi_status acpi_get_data (acpi_handle object,acpi_object_handler handler,void **data); acpi_status
@@ -429,8 +418,6 @@ acpi_get_next_object(acpi_object_type type,acpi_status acpi_get_type (acpi_handle object,acpi_object_type * out_type); -acpi_status acpi_get_id (acpi_handle object,acpi_owner_id * out_type); -acpi_status acpi_get_parent (acpi_handle object,acpi_handle * out_handle);/*
@@ -747,4 +734,21 @@ ACPI_DBG_DEPENDENT_RETURN_VOID(ACPI_PRINTF_LIKE(6)const char *module_name, u32 component_id, const char *format, ...)) + +/* +* Divergences +*/ +acpi_status acpi_get_id(acpi_handle object, acpi_owner_id * out_type); + +acpi_status acpi_unload_table_id (acpi_owner_id id); + +acpi_status +acpi_get_table_with_size (acpi_string signature, +u32 instance,struct acpi_table_header **out_table, +acpi_size *tbl_size); + +acpi_status +acpi_get_data_full (acpi_handle object,acpi_object_handler handler,void **data, +void (*callback)(void *)); +#endif /* __ACXFACE_H__ */
Signature · 1 line
1.7.10
PATCH 15/27 ACPICA: OSL: Add configurability for generic external functions.
In reply to Lv ZhengOSPMs like Linux trend to include all header files but leave empty inline stub functions for a feature that is not configured during build. This patch adds wrappers mechanism to be used around ACPICA external interfaces to facilitate OSPM with such configurability.
This patch doesn't include code for Linux to use this new mechanism, thus no functional change. Lv Zheng.
--- include/acpi/acpixf.h | 483 +++++++++++++++++++++++++++++-------------------- 1 file changed, 283 insertions(+), 200 deletions(-)
include/acpi/acpixf.h +283 -200
@@ -81,6 +81,33 @@ extern u8 acpi_gbl_permanent_mmap;#endif #endif +/* ACPICA prototypes */ + +#ifndef ACPI_EXTERNAL_RETURN_STATUS +#define ACPI_EXTERNAL_RETURN_STATUS (prototype) \ + prototype; +#endif + +#ifndef ACPI_EXTERNAL_RETURN_OK +#define ACPI_EXTERNAL_RETURN_OK (prototype) \ + prototype; +#endif + +#ifndef ACPI_EXTERNAL_RETURN_VOID +#define ACPI_EXTERNAL_RETURN_VOID (prototype) \ + prototype; +#endif + +#ifndef ACPI_EXTERNAL_RETURN_UINT32 +#define ACPI_EXTERNAL_RETURN_UINT32 (prototype) \ + prototype; +#endif + +#ifndef ACPI_EXTERNAL_RETURN_PTR +#define ACPI_EXTERNAL_RETURN_PTR (prototype) \ + prototype; +#endif +/* Public globals, available from outside ACPICA subsystem */ /*****************************************************************************
@@ -220,13 +247,13 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);*/ #if (!ACPI_REDUCED_HARDWARE )#define ACPI_HW_DEPENDENT_RETURN_STATUS (prototype) \ - prototype; + ACPI_EXTERNAL_RETURN_STATUS(prototype)#define ACPI_HW_DEPENDENT_RETURN_OK (prototype) \ - prototype; + ACPI_EXTERNAL_RETURN_OK(prototype)#define ACPI_HW_DEPENDENT_RETURN_VOID (prototype) \ - prototype; + ACPI_EXTERNAL_RETURN_VOID(prototype)#else #define ACPI_HW_DEPENDENT_RETURN_STATUS (prototype) \
@@ -273,17 +300,18 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);/* * Initialization */ -acpi_status __init -acpi_initialize_tables (struct acpi_table_desc *initial_storage, -u32 initial_table_count,u8 allow_resize); - -acpi_status __init acpi_initialize_subsystem (void ); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init + 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_status __init acpi_enable_subsystem (u32 flags); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_enable_subsystem(u32 flags)) -acpi_status __init acpi_initialize_objects (u32 flags); - -acpi_status __init acpi_terminate (void ); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init + acpi_initialize_objects(u32 flags)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_terminate(void))/* * Miscellaneous global interfaces
@@ -291,145 +319,170 @@ acpi_status __init acpi_terminate(void); ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enable(void)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_disable(void)) #ifdef ACPI_FUTURE_USAGE -acpi_status acpi_subsystem_status (void ); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_subsystem_status(void)) #endif #ifdef ACPI_FUTURE_USAGE -acpi_status acpi_get_system_info (struct acpi_buffer *ret_buffer); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_system_info(struct acpi_buffer + *ret_buffer)) #endif - -acpi_status acpi_get_statistics (struct acpi_statistics *stats); - -const char *acpi_format_exception (acpi_status exception); - -acpi_status acpi_purge_cached_objects (void ); - -acpi_status acpi_install_interface (acpi_string interface_name); - -acpi_status acpi_remove_interface (acpi_string interface_name); - -acpi_status acpi_update_interfaces (u8 action); - -u32 -acpi_check_address_range (acpi_adr_space_type space_id, -acpi_physical_address address, -acpi_size length,u8 warn); - -acpi_status -acpi_decode_pld_buffer (u8 *in_buffer, -acpi_size length,struct acpi_pld_info **return_buffer); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_statistics(struct acpi_statistics *stats)) +ACPI_EXTERNAL_RETURN_PTR(const char + *acpi_format_exception(acpi_status exception)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_purge_cached_objects(void)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_interface(acpi_string interface_name)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_remove_interface(acpi_string interface_name)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_update_interfaces(u8 action)) + +ACPI_EXTERNAL_RETURN_UINT32(u32 + acpi_check_address_range(acpi_adr_space_type + space_id, + acpi_physical_address + address, acpi_size length, + u8 warn)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_decode_pld_buffer(u8 *in_buffer, + acpi_size length, + struct acpi_pld_info + **return_buffer))/* * ACPI table load/unload interfaces */ -acpi_status __init -acpi_install_table (acpi_physical_address address,u8 physical); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init + acpi_install_table(acpi_physical_address address, + u8 physical)) -acpi_status acpi_load_table (struct acpi_table_header *table); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_load_table(struct acpi_table_header *table)) -acpi_status acpi_unload_parent_table (acpi_handle object); - -acpi_status __init acpi_load_tables (void ); +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 table manipulation interfaces */ -acpi_status __init acpi_reallocate_root_table (void ); - -acpi_status __init acpi_find_root_pointer (acpi_size *rsdp_address); - -acpi_status -acpi_get_table_header (acpi_string signature, -u32 instance,struct acpi_table_header *out_table_header); - -acpi_status -acpi_get_table (acpi_string signature, -u32 instance,struct acpi_table_header **out_table); - -acpi_status -acpi_get_table_by_index (u32 table_index,struct acpi_table_header **out_table); - -acpi_status -acpi_install_table_handler (acpi_table_handler handler,void *context); - -acpi_status acpi_remove_table_handler (acpi_table_handler handler); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init + acpi_find_root_pointer(acpi_size * rsdp_address)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_table_header(acpi_string signature, + u32 instance, + struct acpi_table_header + *out_table_header)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_table(acpi_string signature, u32 instance, + struct acpi_table_header + **out_table)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_table_by_index(u32 table_index, + struct acpi_table_header + **out_table)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_table_handler(acpi_table_handler + handler, void *context)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_remove_table_handler(acpi_table_handler + handler))/* * Namespace and name interfaces */ -acpi_status -acpi_walk_namespace (acpi_object_type type, -acpi_handle start_object, -u32 max_depth, -acpi_walk_callback descending_callback, -acpi_walk_callback ascending_callback, -void *context,void **return_value); - -acpi_status -acpi_get_devices (const char *HID , -acpi_walk_callback user_function, -void *context,void **return_value); - -acpi_status -acpi_get_name (acpi_handle object, -u32 name_type,struct acpi_buffer *ret_path_ptr); - -acpi_status -acpi_get_handle (acpi_handle parent, -acpi_string pathname,acpi_handle * ret_handle); - -acpi_status -acpi_attach_data (acpi_handle object,acpi_object_handler handler,void *data); - -acpi_status acpi_detach_data (acpi_handle object,acpi_object_handler handler); - -acpi_status -acpi_get_data (acpi_handle object,acpi_object_handler handler,void **data); - -acpi_status -acpi_debug_trace (char *name,u32 debug_level,u32 debug_layer,u32 flags); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_walk_namespace(acpi_object_type type, + acpi_handle start_object, + u32 max_depth, + acpi_walk_callback + descending_callback, + acpi_walk_callback + ascending_callback, + void *context, + void **return_value)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_devices(const char *HID, + acpi_walk_callback user_function, + void *context, + void **return_value)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_name(acpi_handle object, u32 name_type, + struct acpi_buffer *ret_path_ptr)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_handle(acpi_handle parent, + acpi_string pathname, + acpi_handle * ret_handle)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_attach_data(acpi_handle object, + acpi_object_handler handler, + void *data)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_detach_data(acpi_handle object, + acpi_object_handler handler)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_data(acpi_handle object, + acpi_object_handler handler, + void **data)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_debug_trace(char *name, u32 debug_level, + u32 debug_layer, u32 flags))/* * Object manipulation and enumeration */ -acpi_status -acpi_evaluate_object (acpi_handle object, -acpi_string pathname, -struct acpi_object_list *parameter_objects, -struct acpi_buffer *return_object_buffer); - -acpi_status -acpi_evaluate_object_typed (acpi_handle object, -acpi_string pathname, -struct acpi_object_list *external_params, -struct acpi_buffer *return_buffer, -acpi_object_type return_type); - -acpi_status -acpi_get_object_info (acpi_handle object, -struct acpi_device_info **return_buffer); - -acpi_status acpi_install_method (u8 *buffer); - -acpi_status -acpi_get_next_object (acpi_object_type type, -acpi_handle parent, -acpi_handle child,acpi_handle * out_handle); - -acpi_status acpi_get_type (acpi_handle object,acpi_object_type * out_type); - -acpi_status acpi_get_parent (acpi_handle object,acpi_handle * out_handle); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_evaluate_object(acpi_handle object, + acpi_string pathname, + struct acpi_object_list + *parameter_objects, + struct acpi_buffer + *return_object_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_evaluate_object_typed(acpi_handle object, + acpi_string pathname, + struct acpi_object_list + *external_params, + struct acpi_buffer + *return_buffer, + acpi_object_type + return_type)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_object_info(acpi_handle object, + struct acpi_device_info + **return_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_install_method(u8 *buffer)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_next_object(acpi_object_type type, + acpi_handle parent, + acpi_handle child, + acpi_handle * out_handle)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_type(acpi_handle object, + acpi_object_type * out_type)) + +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_parent(acpi_handle object, + acpi_handle * out_handle))/* * Handler interfaces */ -acpi_status -acpi_install_initialization_handler (acpi_init_handler handler,u32 function); - +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_initialization_handler + (acpi_init_handler handler, u32 function)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status - acpi_install_sci_handler(acpi_sci_handler - address, -void *context)) + acpi_install_sci_handler(acpi_sci_handler + address, + void *context))ACPI_HW_DEPENDENT_RETURN_STATUS (acpi_statusacpi_remove_sci_handler (acpi_sci_handler address))
@@ -461,30 +514,42 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status u32 gpe_number, acpi_gpe_handler address)) -acpi_status acpi_install_notify_handler(acpi_handle device, u32 handler_type, -acpi_notify_handler handler, -void *context); - -acpi_status -acpi_remove_notify_handler (acpi_handle device, -u32 handler_type,acpi_notify_handler handler); - -acpi_status -acpi_install_address_space_handler (acpi_handle device, -acpi_adr_space_type space_id, -acpi_adr_space_handler handler, -acpi_adr_space_setup setup,void *context); - -acpi_status -acpi_remove_address_space_handler (acpi_handle device, -acpi_adr_space_type space_id, -acpi_adr_space_handler handler); - +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_notify_handler(acpi_handle device, + u32 handler_type, + acpi_notify_handler + handler, + void *context)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_remove_notify_handler(acpi_handle device, + u32 handler_type, + acpi_notify_handler + handler)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_address_space_handler(acpi_handle + device, + acpi_adr_space_type + space_id, + acpi_adr_space_handler + handler, + acpi_adr_space_setup + setup, + void *context)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_remove_address_space_handler(acpi_handle + device, + acpi_adr_space_type + space_id, + acpi_adr_space_handler + handler)) #ifdef ACPI_FUTURE_USAGE -acpi_status acpi_install_exception_handler (acpi_exception_handler handler); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_exception_handler + (acpi_exception_handler handler)) #endif - -acpi_status acpi_install_interface_handler (acpi_interface_handler handler); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_install_interface_handler + (acpi_interface_handler handler))/* * Global Lock interfaces
@@ -499,10 +564,14 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status/* * Interfaces to AML mutex objects */ -acpi_status -acpi_acquire_mutex (acpi_handle handle,acpi_string pathname,u16 timeout); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_acquire_mutex(acpi_handle handle, +acpi_string pathname, +u16 timeout)) -acpi_status acpi_release_mutex (acpi_handle handle,acpi_string pathname); +ACPI_EXTERNAL_RETURN_STATUS (acpi_status +acpi_release_mutex (acpi_handle handle, +acpi_string pathname))/* * Fixed Event interfaces
@@ -582,57 +651,69 @@ typedefacpi_status (*acpi_walk_resource_callback) (struct acpi_resource * resource,void *context); -acpi_status -acpi_get_vendor_resource (acpi_handle device, -char *name, -struct acpi_vendor_uuid *uuid, -struct acpi_buffer *ret_buffer); - -acpi_status -acpi_get_current_resources (acpi_handle device,struct acpi_buffer *ret_buffer); - +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_vendor_resource(acpi_handle device, + char *name, + struct acpi_vendor_uuid + *uuid, + struct acpi_buffer + *ret_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_current_resources(acpi_handle device, + struct acpi_buffer + *ret_buffer)) #ifdef ACPI_FUTURE_USAGE -acpi_status -acpi_get_possible_resources (acpi_handle device,struct acpi_buffer *ret_buffer); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_possible_resources(acpi_handle device, + struct acpi_buffer + *ret_buffer)) #endif - -acpi_status -acpi_get_event_resources (acpi_handle device_handle, -struct acpi_buffer *ret_buffer); - -acpi_status -acpi_walk_resource_buffer (struct acpi_buffer *buffer, -acpi_walk_resource_callback user_function, -void *context); - -acpi_status -acpi_walk_resources (acpi_handle device, -char *name, -acpi_walk_resource_callback user_function,void *context); - -acpi_status -acpi_set_current_resources (acpi_handle device,struct acpi_buffer *in_buffer); - -acpi_status -acpi_get_irq_routing_table (acpi_handle device,struct acpi_buffer *ret_buffer); - -acpi_status -acpi_resource_to_address64 (struct acpi_resource *resource, -struct acpi_resource_address64 *out); - -acpi_status -acpi_buffer_to_resource (u8 *aml_buffer, -u16 aml_buffer_length, -struct acpi_resource **resource_ptr); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_event_resources(acpi_handle device_handle, + struct acpi_buffer + *ret_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_walk_resource_buffer(struct acpi_buffer + *buffer, + acpi_walk_resource_callback + user_function, + void *context)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_walk_resources(acpi_handle device, char *name, + acpi_walk_resource_callback + user_function, void *context)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_set_current_resources(acpi_handle device, + struct acpi_buffer + *in_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_irq_routing_table(acpi_handle device, + struct acpi_buffer + *ret_buffer)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_resource_to_address64(struct acpi_resource + *resource, + struct + acpi_resource_address64 + *out)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_buffer_to_resource(u8 *aml_buffer, + u16 aml_buffer_length, + struct acpi_resource + **resource_ptr)) /* * Hardware (ACPI device) interfaces */ -acpi_status acpi_reset (void ); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_reset(void)) -acpi_status acpi_read (u64 *value,struct acpi_generic_address *reg); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_read(u64 *value, + struct acpi_generic_address *reg)) -acpi_status acpi_write (u64 value,struct acpi_generic_address *reg); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_write(u64 value, + struct acpi_generic_address *reg)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_read_bit_register(u32 register_id,
@@ -645,18 +726,20 @@ ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status/* * Sleep/Wake interfaces */ -acpi_status -acpi_get_sleep_type_data (u8 sleep_state,u8 *slp_typ_a,u8 *slp_typ_b); - -acpi_status acpi_enter_sleep_state_prep (u8 sleep_state); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_get_sleep_type_data(u8 sleep_state, + u8 *slp_typ_a, + u8 *slp_typ_b)) -acpi_status acpi_enter_sleep_state (u8 sleep_state); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_enter_sleep_state_prep(u8 sleep_state)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_enter_sleep_state(u8 sleep_state)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_enter_sleep_state_s4bios(void)) -acpi_status acpi_leave_sleep_state_prep(u8 sleep_state); - -acpi_status acpi_leave_sleep_state (u8 sleep_state); +ACPI_EXTERNAL_RETURN_STATUS(acpi_status + acpi_leave_sleep_state_prep(u8 sleep_state)) +ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_leave_sleep_state(u8 sleep_state)) ACPI_HW_DEPENDENT_RETURN_STATUS(acpi_status acpi_set_firmware_waking_vector(u32
Signature · 1 line
1.7.10
PATCH 16/27 ACPICA: Linux header: Add support for stubbed externals.
In reply to Lv ZhengLinux wants to include all header files but leave empty inline stub variables for a feature that is not configured during build.
This patch configures ACPICA external globals/macros/functions out and defines them into no-op when CONFIG_ACPI is not enabled. Lv Zheng.
--- include/acpi/platform/aclinux.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+)
include/acpi/platform/aclinux.h +31 -0
@@ -73,6 +73,37 @@#endif #include <asm/acpi.h> +#ifndef CONFIG_ACPI + +/* External globals for __KERNEL__, stubs is needed */ + +#define ACPI_GLOBAL (t,a) +#define ACPI_INIT_GLOBAL (t,a,b) + +/* Generating stubs for configurable ACPICA macros */ + +#define ACPI_NO_MEM_ALLOCATIONS + +/* Generating stubs for configurable ACPICA functions */ + +#define ACPI_NO_ERROR_MESSAGES +#undef ACPI_DEBUG_OUTPUT + +/* External interface for __KERNEL__, stub is needed */ + +#define ACPI_EXTERNAL_RETURN_STATUS (prototype) \ + static ACPI_INLINE prototype {return(AE_NOT_CONFIGURED);} +#define ACPI_EXTERNAL_RETURN_OK (prototype) \ + static ACPI_INLINE prototype {return(AE_OK);} +#define ACPI_EXTERNAL_RETURN_VOID (prototype) \ + static ACPI_INLINE prototype {return;} +#define ACPI_EXTERNAL_RETURN_UINT32 (prototype) \ + static ACPI_INLINE prototype {return(0);} +#define ACPI_EXTERNAL_RETURN_PTR (prototype) \ + static ACPI_INLINE prototype {return(NULL);} + +#endif /* CONFIG_ACPI */ +/* Host-dependent types and defines for in-kernel ACPICA */ #define ACPI_MACHINE_WIDTH BITS_PER_LONG
Signature · 1 line
1.7.10
PATCH 17/27 ACPICA: acpidump: Fix truncated RSDP signature validation.
In reply to Lv ZhengThis patch enforces a rule to always use ACPI_VALIDATE_RSDP_SIG for RSDP signatures passed from table header or ACPI_SIG_RSDP so that truncated string comparison can be avoided. This could help to fix the issue that "RSD " matches but "RSD PTR " doesn't match. Lv Zheng.
--- .../acpi/os_specific/service_layers/oslinuxtbl.c | 41 +++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-)
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +31 -10
@@ -996,10 +996,21 @@ osl_map_table(acpi_size address,/* If specified, signature must match */ -if (signature && !ACPI_COMPARE_NAME (signature, mapped_table->signature)) { -acpi_os_unmap_memory (mapped_table, -sizeof (struct acpi_table_header )); -return (AE_BAD_SIGNATURE ); +if (signature) { +if (ACPI_VALIDATE_RSDP_SIG (signature)) { +if (!ACPI_VALIDATE_RSDP_SIG (mapped_table->signature)) { +acpi_os_unmap_memory (mapped_table, +sizeof (struct +acpi_table_header )); +return (AE_BAD_SIGNATURE ); + } + }else +if (!ACPI_COMPARE_NAME (signature, mapped_table->signature)) + { +acpi_os_unmap_memory (mapped_table, +sizeof (struct acpi_table_header )); +return (AE_BAD_SIGNATURE ); + } }/* Map the entire table */
@@ -1135,12 +1146,22 @@ osl_read_table_from_file(char *filename,/* If signature is specified, it must match the table */ -if (signature && !ACPI_COMPARE_NAME (signature, header.signature)) { -fprintf (stderr, -"Incorrect signature: Expecting %4.4s, found %4.4s\n" , - signature, header.signature); - status =AE_BAD_SIGNATURE ; - goto exit; +if (signature) { +if (ACPI_VALIDATE_RSDP_SIG (signature)) { +if (!ACPI_VALIDATE_RSDP_SIG (header.signature)) { +fprintf (stderr, +"Incorrect RSDP signature: found %8.8s\n" , + header.signature); + status =AE_BAD_SIGNATURE ; + goto exit; + } + }else if (!ACPI_COMPARE_NAME (signature, header.signature)) { +fprintf (stderr, +"Incorrect signature: Expecting %4.4s, found %4.4s\n" , + signature, header.signature); + status =AE_BAD_SIGNATURE ; + goto exit; + } } table_length =ap_get_table_length (&header);
Signature · 1 line
1.7.10
PATCH 18/27 ACPICA: Back port of _PRP update.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
This patch is the linuxize result of the following commit:
Subject: ACPICA: Add check for _PRP/_HID dependency, with error message. _PRP requires that a _HID appears in the same scope.
The iASL changes are not in this patch as iASL currently is not shipped in the kernel.
--- include/acpi/acnames.h | 1 + 1 file changed, 1 insertion(+)
include/acpi/acnames.h +1 -0
@@ -55,6 +55,7 @@#define METHOD_NAME__HID "_HID"#define METHOD_NAME__INI "_INI"#define METHOD_NAME__PLD "_PLD" +#define METHOD_NAME__PRP "_PRP"#define METHOD_NAME__PRS "_PRS"#define METHOD_NAME__PRT "_PRT"#define METHOD_NAME__PRW "_PRW"
Signature · 1 line
1.7.10
PATCH 19/27 ACPICA: Back port of improvements on exception code.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
This is the linuxize result of the following commit:
Subject: ACPICA: Improve handling of exception code blocks. Split exception codes into three distinct blocks; for the main ASL compiler, Table compiler, and the preprocessor. This allows easy addition of new codes into each block without disturbing the others. Adds one new file, aslmessages.c
The iASL changes are not in this patch as iASL currently is not shipped in the kernel.
--- include/acpi/acpixf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/acpi/acpixf.h +1 -1
@@ -207,7 +207,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_disable_ssdt_table_install, FALSE);/* * We keep track of the latest version of Windows that has been requested by -* the BIOS. ACPI 5.0. +* the BIOS. ACPI 5.0. */ ACPI_INIT_GLOBAL (u8, acpi_gbl_osi_data,0 );
Signature · 1 line
1.7.10
PATCH 20/27 ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
In reply to Lv ZhengThe commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit: 671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.
This patch fixes this issue. Lv Zheng.
--- drivers/acpi/acpica/tbutils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/acpi/acpica/tbutils.c +5 -2
@@ -355,6 +355,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)u32 table_count;struct acpi_table_header *table;acpi_physical_address address; +acpi_physical_address rsdt_address;u32 length;u8 *table_entry;acpi_status status;
@@ -383,11 +384,14 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)* as per the ACPI specification. */ address = (acpi_physical_address ) rsdp->xsdt_physical_address; + rsdt_address = + (acpi_physical_address ) rsdp->rsdt_physical_address; table_entry_size =ACPI_XSDT_ENTRY_SIZE ; }else {/* Root table is an RSDT (32-bit physical addresses) */ address = (acpi_physical_address ) rsdp->rsdt_physical_address; + rsdt_address = address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; }
@@ -410,8 +414,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)/* Fall back to the RSDT */ - address = - (acpi_physical_address ) rsdp->rsdt_physical_address; + address = rsdt_address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; } }
Signature · 1 line
1.7.10
Re: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Quoted 8 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Quoted 7 lines
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
josh
Quoted 49 lines
--- drivers/acpi/acpica/tbutils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)drivers/acpi/acpica/tbutils.c +5
-3@@ -355,6 +355,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)u32 table_count;struct acpi_table_header *table;acpi_physical_address address; +acpi_physical_address rsdt_address;u32 length;u8 *table_entry;acpi_status status;@@ -383,11 +384,14 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)* as per the ACPI specification. */ address = (acpi_physical_address ) rsdp->xsdt_physical_address; + rsdt_address = + (acpi_physical_address ) rsdp->rsdt_physical_address; table_entry_size =ACPI_XSDT_ENTRY_SIZE ; }else {/* Root table is an RSDT (32-bit physical addresses) */ address = (acpi_physical_address ) rsdp->rsdt_physical_address; + rsdt_address = address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; }@@ -410,8 +414,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)/* Fall back to the RSDT */ - address = - (acpi_physical_address ) rsdp->rsdt_physical_address; + address = rsdt_address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; } } --1.7.10
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Quoted 17 lines · Josh Boyer
Quoted 8 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Quoted 7 lines
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.
Quoted 3 lines
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
Lv, is it safe to take this patch alone into 3.15-rc?
Rafael
Quoted 53 lines
Quoted 44 lines
--- drivers/acpi/acpica/tbutils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)drivers/acpi/acpica/tbutils.c +5
-3@@ -355,6 +355,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)u32 table_count;struct acpi_table_header *table;acpi_physical_address address; +acpi_physical_address rsdt_address;u32 length;u8 *table_entry;acpi_status status;@@ -383,11 +384,14 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)* as per the ACPI specification. */ address = (acpi_physical_address ) rsdp->xsdt_physical_address; + rsdt_address = + (acpi_physical_address ) rsdp->rsdt_physical_address; table_entry_size =ACPI_XSDT_ENTRY_SIZE ; }else {/* Root table is an RSDT (32-bit physical addresses) */ address = (acpi_physical_address ) rsdp->rsdt_physical_address; + rsdt_address = address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; }@@ -410,8 +414,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)/* Fall back to the RSDT */ - address = - (acpi_physical_address ) rsdp->rsdt_physical_address; + address = rsdt_address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; } } --1.7.10
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.
RE: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Hi, Rafael
Quoted 21 lines
From: [email protected] [mailto:[email protected]] On Behalf Of Rafael J. Wysocki
Sent: Monday, May 05, 2014 8:43 AMQuoted 17 lines · Josh Boyer
Quoted 15 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.
Quoted 5 lines
Quoted 3 lines
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
Lv, is it safe to take this patch alone into 3.15-rc?
Yes, it's safe to only take this patch to be a regression fix. I'm sorry for the regression I made in the bisected commit.
Thanks and best regards
-Lv
Quoted 65 lines
Rafael
Quoted 44 lines
Quoted 44 lines
--- drivers/acpi/acpica/tbutils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)drivers/acpi/acpica/tbutils.c +5
-3@@ -355,6 +355,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)u32 table_count;struct acpi_table_header *table;acpi_physical_address address; +acpi_physical_address rsdt_address;u32 length;u8 *table_entry;acpi_status status;@@ -383,11 +384,14 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)* as per the ACPI specification. */ address = (acpi_physical_address ) rsdp->xsdt_physical_address; + rsdt_address = + (acpi_physical_address ) rsdp->rsdt_physical_address; table_entry_size =ACPI_XSDT_ENTRY_SIZE ; }else {/* Root table is an RSDT (32-bit physical addresses) */ address = (acpi_physical_address ) rsdp->rsdt_physical_address; + rsdt_address = address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; }@@ -410,8 +414,7 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)/* Fall back to the RSDT */ - address = - (acpi_physical_address ) rsdp->rsdt_physical_address; + address = rsdt_address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; } } --1.7.10
Quoted 9 lines
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Quoted 23 lines · Lv
Hi, Rafael
Quoted 21 lines
From: [email protected] [mailto:[email protected]] On Behalf Of Rafael J. Wysocki
Sent: Monday, May 05, 2014 8:43 AMQuoted 17 lines · Josh Boyer
Quoted 15 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
Lv, is it safe to take this patch alone into 3.15-rc?
Yes, it's safe to only take this patch to be a regression fix.
FWIW, Fedora is carrying this on top of 3.14.2 already, and people with the impacted machines say it's working for them. So I agree it should be safe.
Thanks to the both of you.
josh
Re: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Quoted 30 lines · Josh Boyer
Quoted 29 lines · Lv
Hi, Rafael
Quoted 26 lines
From: [email protected] [mailto:[email protected]] On Behalf Of Rafael J. Wysocki
Sent: Monday, May 05, 2014 8:43 AMQuoted 17 lines · Josh Boyer
Quoted 8 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Quoted 7 lines
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.Quoted 3 lines
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
Lv, is it safe to take this patch alone into 3.15-rc?
Quoted 7 lines
Quoted 1 line
Yes, it's safe to only take this patch to be a regression fix.
FWIW, Fedora is carrying this on top of 3.14.2 already, and people with the impacted machines say it's working for them. So I agree it should be safe.
Thanks to the both of you.
OK, queued up for 3.15, thanks!
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.
RE: [PATCH 20/27] ACPICA: Tables: Fix invalid pointer accesses in acpi_tb_parse_root_table().
Hi,
Quoted 36 lines
From: Rafael J. Wysocki [mailto:[email protected]]
Sent: Tuesday, May 06, 2014 8:44 AMQuoted 32 lines · Josh Boyer
Quoted 30 lines · Lv
Hi, Rafael
Quoted 21 lines
From: [email protected] [mailto:[email protected]] On Behalf Of Rafael J. Wysocki
Sent: Monday, May 05, 2014 8:43 AMQuoted 17 lines · Josh Boyer
Quoted 15 lines · Lv Zheng
The commit of back porting Linux XSDT validation mechanism has introduced a regreession:
Commit:671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
There is a pointer still accessed after unmapping.This patch fixes this issue. Lv Zheng.
Signed-off-by Lv Zheng <[email protected]>Reported-and-tested-by Bruce Chiarelli <[email protected]>Reported-and-tested-by Spyros Stathopoulos <[email protected]>Signed-off-by Bob Moore <[email protected]>Cc <[email protected]> # 3.14.x: 671cc68: ACPICA: Back port and refine validation of the XSDT root table.Quoted 5 lines
Quoted 3 lines
This patch should get into 3.15-rcX soon. It fixes a known regression that prevents booting on machines with AMI firmware, and that is present in 3.14 so we need it for stable as well. Rafael?
Lv, is it safe to take this patch alone into 3.15-rc?
Yes, it's safe to only take this patch to be a regression fix.
Quoted 7 lines
Quoted 5 lines
FWIW, Fedora is carrying this on top of 3.14.2 already, and people with the impacted machines say it's working for them. So I agree it should be safe.
Thanks to the both of you.
OK, queued up for 3.15, thanks!
Actually there are 2 fixes in the same patch set for this issue:
One is a regression fix for commit 671cc68 - let me call it "Solution 1 - ill formed XSDT skipping".
https://patchwork.kernel.org/patch/4090591/
The other is a different approach to solve the old issue that is fixed by solution 1 - let me call it "Solution 2 - R/XSDT NULL entry skipping".
https://patchwork.kernel.org/patch/4090511/
https://patchwork.kernel.org/patch/4090501/
And if you want to know the whole story before making further decisions.
The commit 671cc68 is introduced to reduce the ACPICA divergences.
Lacking in platforms having such ill formed XSDT shipped, I only unit tested the commit in ACPICA development environment where AcpiOsUnmapMemory() is a no-op. Thus the buggy commit is leaked to the Linux kernel during the ACPICA release cycle.
When fixing the regression here: https://bugzilla.kernel.org/show_bug.cgi?id=73911
At first, the root cause is not addressed due to the same test incapability, thus it comes the solution 2 to solve the old issue in a different way. As the solution 1 prevents higher versioned tables to be used while solution 2 enables higher versioned tables,
I believe solution 2 is more correct than the old approach.
The solution 2 is based on ACPICA 201403 release, for kernel v3.14, a completely different stable material is generated.
In the meanwhile, the regression is root caused.
Though the regression fix may not be useful if the solution 2 is proven to be more correct, ACPICA also merged this regression fix in order to generate a stable material for Linux.
I'm not sure if patches for solution 2 also need to be merged using the short-cut path. Possibly not as the solution 2 changed old behavior of Linux, so they are not urgent stable materials.
Thanks and best regards
-Lv
Quoted 4 lines
--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
PATCH 21/27 ACPICA: acpidump: Add support to force using RSDT.
In reply to Lv ZhengThis patch adds "-x" and "-x -x" options to disable XSDT for acpidump.
The single "-x" can be used to stop using XSDT, RSDT will be forced to find static tables, note that XSDT will still be dumped. The double "-x" can stop dumping XSDT, which is useful when the XSDT address reported by RSDP is pointing to an invalid address.
It is reported there are platforms having broken XSDT shipped, acpidump will stop working while accessing such XSDT. This patch adds new option so that users can force acpidump to dump tables listed in the RSDT. Lv Zheng.
--- .../acpi/os_specific/service_layers/oslinuxtbl.c | 32 +++++++++++++++++--- tools/power/acpi/tools/acpidump/acpidump.h | 23 +++++++------- tools/power/acpi/tools/acpidump/apmain.c | 13 +++++++- 3 files changed, 50 insertions(+), 18 deletions(-)
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +27 -5
@@ -505,6 +505,28 @@ static acpi_status osl_load_rsdp(void)/****************************************************************************** * +* FUNCTION: osl_can_use_xsdt +* +* PARAMETERS: None +* +* RETURN: TRUE if XSDT is allowed to be used. +* +* DESCRIPTION: This function collects logic that can be used to determine if +* XSDT should be used instead of RSDT. +* +*****************************************************************************/ + +static u8 osl_can_use_xsdt (void ) +{ +if (gbl_revision && !acpi_gbl_do_not_use_xsdt) { +return (TRUE); + }else { +return (FALSE); + } +} + +/****************************************************************************** +* * FUNCTION: osl_table_initialize * * PARAMETERS: None
@@ -535,7 +557,7 @@ static acpi_status osl_table_initialize(void)/* Get XSDT from memory */ -if (gbl_rsdp.revision) { +if (gbl_rsdp.revision && !gbl_do_not_dump_xsdt) {if (gbl_xsdt) {free (gbl_xsdt); gbl_xsdt =NULL ;
@@ -668,7 +690,7 @@ static acpi_status osl_list_bios_tables(void)acpi_status status =AE_OK ;u32 i; -if (gbl_revision) { +if (osl_can_use_xsdt ()) { item_size =sizeof (u64); table_data =ACPI_CAST8 (gbl_xsdt) +sizeof (struct acpi_table_header );
@@ -690,7 +712,7 @@ static acpi_status osl_list_bios_tables(void)/* Search RSDT/XSDT for the requested table */ for (i =0 ; i < number_of_tables; ++i, table_data += item_size) { -if (gbl_revision) { +if (osl_can_use_xsdt ()) { table_address = (acpi_physical_address) (*ACPI_CAST64 (table_data)); }else {
@@ -809,7 +831,7 @@ osl_get_bios_table(char *signature, table_length =ap_get_table_length (mapped_table); }else {/* Case for a normal ACPI table */ -if (gbl_revision) { +if (osl_can_use_xsdt ()) { item_size =sizeof (u64); table_data = ACPI_CAST8(gbl_xsdt) +
@@ -833,7 +855,7 @@ osl_get_bios_table(char *signature,/* Search RSDT/XSDT for the requested table */ for (i =0 ; i < number_of_tables; ++i, table_data += item_size) { -if (gbl_revision) { +if (osl_can_use_xsdt ()) { table_address = (acpi_physical_address) (*ACPI_CAST64 (table_data));
tools/power/acpi/tools/acpidump/acpidump.h +11 -12
@@ -41,32 +41,34 @@* POSSIBILITY OF SUCH DAMAGES. */ -#include <acpi/acpi.h> -#include "accommon.h" -#include "actables.h" - -#include <stdio.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/stat.h> -/* * Global variables. Defined in main.c only, externed in all other files */ #ifdef _DECLARE_GLOBALS#define EXTERN #define INIT_GLOBAL (a,b) a=b +#define DEFINE_ACPI_GLOBALS 1#else #define EXTERN extern#define INIT_GLOBAL (a,b) a#endif +#include <acpi/acpi.h> +#include "accommon.h" +#include "actables.h" + +#include <stdio.h> +#include <fcntl.h> +#include <errno.h> +#include <sys/stat.h> +/* Globals */ EXTERN u8 INIT_GLOBAL(gbl_summary_mode, FALSE); EXTERN u8 INIT_GLOBAL(gbl_verbose_mode, FALSE); EXTERN u8 INIT_GLOBAL(gbl_binary_mode, FALSE); EXTERN u8 INIT_GLOBAL(gbl_dump_customized_tables, FALSE); +EXTERN u8 INIT_GLOBAL(gbl_do_not_dump_xsdt, FALSE); EXTERN FILE INIT_GLOBAL(*gbl_output_file, NULL); EXTERN char INIT_GLOBAL(*gbl_output_filename, NULL); EXTERN u64 INIT_GLOBAL(gbl_rsdp_base, 0);
@@ -74,10 +76,7 @@ EXTERN u64 INIT_GLOBAL(gbl_rsdp_base, 0);/* Globals required for use with ACPICA modules */ #ifdef _DECLARE_GLOBALS -u8 acpi_gbl_enable_interpreter_slack = FALSE;u8 acpi_gbl_integer_byte_width =8 ; -u32 acpi_dbg_level =0 ; -u32 acpi_dbg_layer =0 ;#endif /* Action table used to defer requested options */
tools/power/acpi/tools/acpidump/apmain.c +12 -1
@@ -80,7 +80,7 @@ struct ap_dump_action action_table[AP_MAX_ACTIONS];u32 current_action =0 ;#define AP_UTILITY_NAME "ACPI Binary Table Dump Utility" -#define AP_SUPPORTED_OPTIONS "?a:bcf:hn:o:r:svz" +#define AP_SUPPORTED_OPTIONS "?a:bcf:hn:o:r:svxz"/****************************************************************************** *
@@ -109,6 +109,8 @@ static void ap_display_usage(void)ACPI_OPTION ("-a <Address>" ,"Get table via a physical address" );ACPI_OPTION ("-f <BinaryFile>" ,"Get table via a binary file" );ACPI_OPTION ("-n <Signature>" ,"Get table via a name/signature" ); +ACPI_OPTION ("-x" ,"Do not use but dump XSDT" ); +ACPI_OPTION ("-x -x" ,"Do not use or dump XSDT" );printf ("\n" "Invocation without parameters dumps all available tables\n"
@@ -210,6 +212,15 @@ static int ap_do_options(int argc, char **argv) gbl_summary_mode = TRUE;continue ; +case 'x' :/* Do not use XSDT */ + +if (!acpi_gbl_do_not_use_xsdt) { + acpi_gbl_do_not_use_xsdt = TRUE; + }else { + gbl_do_not_dump_xsdt = TRUE; + } +continue ; +case 'v' :/* Revision/version */ printf (ACPI_COMMON_SIGNON (AP_UTILITY_NAME ));
Signature · 1 line
1.7.10
PATCH 22/27 ACPICA: Tables: Add new mechanism to skip NULL entries in RSDT and XSDT.
In reply to Lv ZhengIt is reported that there are buggy BIOSes in the world: AMI uses an XSDT compiler for early BIOSes, this compiler will generate XSDT with a NULL entry. The affected BIOS versions are "AMI BIOS F2-F4".
Original solution on Linux is to use an alternative heathy root table instead of the ill one. This commit is:
Commit: 671cc68dc61f029d44b43a681356078e02d8dab8
Subject: ACPICA: Back port and refine validation of the XSDT root table.
This is an example of such XSDT dumped from B85-HD3 (AMI F3 BIOS):
[000h 0000 4] Signature : "XSDT" [Extended System Description Table] [004h 0004 4] Table Length : 00000074 [008h 0008 1] Revision : 01 [009h 0009 1] Checksum : 18 [00Ah 0010 6] Oem ID : "ALASKA" [010h 0016 8] Oem Table ID : "A M I" [018h 0024 4] Oem Revision : 01072009 [01Ch 0028 4] Asl Compiler ID : "AMI " [020h 0032 4] Asl Compiler Revision : 00010013
[024h 0036 8] ACPI Table Address 0 : 00000000BA5F8180 [02Ch 0044 8] ACPI Table Address 1 : 00000000BA5F8290 [034h 0052 8] ACPI Table Address 2 : 00000000BA5F8308 [03Ch 0060 8] ACPI Table Address 3 : 00000000BA5F8848 [044h 0068 8] ACPI Table Address 4 : 00000000BA5F9320 [04Ch 0076 8] ACPI Table Address 5 : 00000000BA5F9360 [054h 0084 8] ACPI Table Address 6 : 00000000BA5F9398 [05Ch 0092 8] ACPI Table Address 7 : 00000000BA5F9708 [064h d100 8] ACPI Table Address 8 : 00000000BA5FC9A8 [06Ch 0108 8] ACPI Table Address 9 : 0000000000000000
But according to the bug report, the XSDT in fact is not broken. In the above XSDT, ACPI Table Address 1-8 contains the same value as RSDT. The differences can only be seen on the following 2 entries:
1. The first entry points to a FADT whose Revision is 5 while the first entry in RSDT points to a FADT whose Revision is 2.
The FADT dumped from the address indicated by the first entry of XSDT:
FACP @ 0x00000000BA5F8180
0000: 46 41 43 50 0C 01 00 00<05>4B 41 4C 41 53 4B 41 FACP.....KALASKA
...
The FADT dumped from the address indicated by the first entry of RSDT:
FACP @ 0x00000000BA5ED0F0
0000: 46 41 43 50 84 00 00 00<02>A7 41 4C 41 53 4B 41 FACP......ALASKA
...2. The last entry is a NULL terminator.
According to the test result, the Revision 5 FADT is accessible. Thus the original solution turns out to be a work around that is preventing the higher revision tables to be used for such platforms (they are all x86-64 platforms, and should use XSDT and higher revision FADT).
This patch offers a new solution, where a sanity check is performed before installing a table address from XSDT. If the entry is NULL, it is simply discarded.
Note that, this patch doesn't remove the original solution, so for Linux kernel, this commit is actually a no-op, but it allows acpidump to be working on such platforms. By doing so, we allow another easy revertable commit to enable this feature so that when that commit is reverted, the useful sanity check will not be affected. Lv Zheng.
--- drivers/acpi/acpica/tbutils.c | 21 ++++++++++++++------ .../acpi/os_specific/service_layers/oslinuxtbl.c | 12 +++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-)
drivers/acpi/acpica/tbutils.c +15 -6
@@ -474,12 +474,19 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)/* Get the table physical address (32-bit for RSDT, 64-bit for XSDT) */ - status = -acpi_tb_install_standard_table (acpi_tb_get_root_table_entry - (table_entry, - table_entry_size), -ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL , - FALSE, TRUE, &table_index); + address = +acpi_tb_get_root_table_entry (table_entry, table_entry_size); + +/* Skip NULL entries in RSDT/XSDT */ + +if (!address) { + goto next_table; + } + + status =acpi_tb_install_standard_table (address, +ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL , + FALSE, TRUE, + &table_index); if (ACPI_SUCCESS(status) && ACPI_COMPARE_NAME(&acpi_gbl_root_table_list.
@@ -488,6 +495,8 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)acpi_tb_parse_fadt (table_index); } +next_table: + table_entry += table_entry_size; }
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +12 -0
@@ -720,6 +720,12 @@ static acpi_status osl_list_bios_tables(void) (acpi_physical_address) (*ACPI_CAST32 (table_data)); } +/* Skip NULL entries in RSDT/XSDT */ + +if (!table_address) { +continue ; + } + status =osl_map_table (table_address,NULL , &mapped_table);if (ACPI_FAILURE (status)) {return (status);
@@ -865,6 +871,12 @@ osl_get_bios_table(char *signature, (table_data)); } +/* Skip NULL entries in RSDT/XSDT */ + +if (!table_address) { +continue ; + } + status =osl_map_table (table_address,NULL , &mapped_table);if (ACPI_FAILURE (status)) {
Signature · 1 line
1.7.10
PATCH 23/27 ACPICA: Tables: Remove old mechanism to validate if XSDT contains NULL entries.
In reply to Lv ZhengWith the NULL entry sanity check implemented, the XSDT validation is useless because:
1. If XSDT contains NULL entries, it can be bypassed by the new sanity check mechanism;
2. If RSDP contains a bad XSDT address, invoking XSDT validation will still lead to a kernel crash.
This patch deletes the old XSDT validation solution and thus enables the new NULL entry sanity check solution.
Note that if there are reports reporting regressions caused by the enabling of the new feature and disabling of the old feature, this commit should be bisected and reverted. Lv Zheng.
--- drivers/acpi/acpica/tbutils.c | 105 ----------------------------------------- 1 file changed, 105 deletions(-)
drivers/acpi/acpica/tbutils.c +0 -105
@@ -49,8 +49,6 @@ACPI_MODULE_NAME ("tbutils" ) /* Local prototypes */ -static acpi_status acpi_tb_validate_xsdt (acpi_physical_address address); -static acpi_physical_address acpi_tb_get_root_table_entry (u8 *table_entry,u32 table_entry_size);
@@ -251,87 +249,6 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)/******************************************************************************* * -* FUNCTION: acpi_tb_validate_xsdt -* -* PARAMETERS: address - Physical address of the XSDT (from RSDP) -* -* RETURN: Status. AE_OK if the table appears to be valid. -* -* DESCRIPTION: Validate an XSDT to ensure that it is of minimum size and does -* not contain any NULL entries. A problem that is seen in the -* field is that the XSDT exists, but is actually useless because -* of one or more (or all) NULL entries. -* -******************************************************************************/ - -static acpi_status acpi_tb_validate_xsdt (acpi_physical_address xsdt_address) -{ -struct acpi_table_header *table; -u8 *next_entry; -acpi_physical_address address; -u32 length; -u32 entry_count; -acpi_status status; -u32 i; - -/* Get the XSDT length */ - - table = -acpi_os_map_memory (xsdt_address,sizeof (struct acpi_table_header )); -if (!table) { -return (AE_NO_MEMORY ); - } - - length = table->length; -acpi_os_unmap_memory (table,sizeof (struct acpi_table_header )); - -/* -* Minimum XSDT length is the size of the standard ACPI header -* plus one physical address entry -*/ -if (length < (sizeof (struct acpi_table_header ) +ACPI_XSDT_ENTRY_SIZE )) { -return (AE_INVALID_TABLE_LENGTH ); - } - -/* Map the entire XSDT */ - - table =acpi_os_map_memory (xsdt_address, length); -if (!table) { -return (AE_NO_MEMORY ); - } - -/* Get the number of entries and pointer to first entry */ - - status =AE_OK ; - next_entry =ACPI_ADD_PTR (u8, table,sizeof (struct acpi_table_header )); - entry_count = (u32)((table->length -sizeof (struct acpi_table_header )) / -ACPI_XSDT_ENTRY_SIZE ); - -/* Validate each entry (physical address) within the XSDT */ - -for (i =0 ; i < entry_count; i++) { - address = -acpi_tb_get_root_table_entry (next_entry, -ACPI_XSDT_ENTRY_SIZE ); -if (!address) { - -/* Detected a NULL entry, XSDT is invalid */ - - status =AE_NULL_ENTRY ; -break ; - } - - next_entry +=ACPI_XSDT_ENTRY_SIZE ; - } - -/* Unmap table */ - -acpi_os_unmap_memory (table, length); -return (status); -} - -/******************************************************************************* -* * FUNCTION: acpi_tb_parse_root_table * * PARAMETERS: rsdp - Pointer to the RSDP
@@ -355,7 +272,6 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)u32 table_count;struct acpi_table_header *table;acpi_physical_address address; -acpi_physical_address rsdt_address;u32 length;u8 *table_entry;acpi_status status;
@@ -384,14 +300,11 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)* as per the ACPI specification. */ address = (acpi_physical_address ) rsdp->xsdt_physical_address; - rsdt_address = - (acpi_physical_address ) rsdp->rsdt_physical_address; table_entry_size =ACPI_XSDT_ENTRY_SIZE ; }else {/* Root table is an RSDT (32-bit physical addresses) */ address = (acpi_physical_address ) rsdp->rsdt_physical_address; - rsdt_address = address; table_entry_size =ACPI_RSDT_ENTRY_SIZE ; }
@@ -401,24 +314,6 @@ acpi_status __init acpi_tb_parse_root_table(acpi_physical_address rsdp_address)*/ acpi_os_unmap_memory (rsdp,sizeof (struct acpi_table_rsdp )); -/* -* If it is present and used, validate the XSDT for access/size -* and ensure that all table entries are at least non-NULL -*/ -if (table_entry_size ==ACPI_XSDT_ENTRY_SIZE ) { - status =acpi_tb_validate_xsdt (address); -if (ACPI_FAILURE (status)) { -ACPI_BIOS_WARNING ((AE_INFO , -"XSDT is invalid (%s), using RSDT" , -acpi_format_exception (status))); - -/* Fall back to the RSDT */ - - address = rsdt_address; - table_entry_size =ACPI_RSDT_ENTRY_SIZE ; - } - } -/* Map the RSDT/XSDT table header to get the full table length */ table =acpi_os_map_memory (address,sizeof (struct acpi_table_header ));
Signature · 1 line
1.7.10
PATCH 24/27 ACPICA: Remove extraneous error message for large number of GPEs.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Fixes a problem where an extraneous error message was emitted during initialization if there is a GPE block larger than 255 bits. Any GPE block larger than 120 GPEs could generate the error.
--- drivers/acpi/acpica/tbfadt.c | 51 +++++++++++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 18 deletions(-)
drivers/acpi/acpica/tbfadt.c +33 -18
@@ -52,7 +52,8 @@ ACPI_MODULE_NAME("tbfadt")static void acpi_tb_init_generic_address (struct acpi_generic_address *generic_address,u8 space_id, -u8 byte_width,u64 address,char *register_name); +u8 byte_width, +u64 address,char *register_name,u8 flags);static void acpi_tb_convert_fadt (void );
@@ -69,13 +70,14 @@ typedef struct acpi_fadt_info {u16 address32;u16 length;u8 default_length; -u8 type; +u8 flags; } acpi_fadt_info;#define ACPI_FADT_OPTIONAL 0#define ACPI_FADT_REQUIRED 1#define ACPI_FADT_SEPARATE_LENGTH 2 +#define ACPI_FADT_GPE_REGISTER 4static struct acpi_fadt_info fadt_info_table[] = { {"Pm1aEventBlock" ,
@@ -125,14 +127,14 @@ static struct acpi_fadt_info fadt_info_table[] = {ACPI_FADT_OFFSET (gpe0_block),ACPI_FADT_OFFSET (gpe0_block_length ), 0, - ACPI_FADT_SEPARATE_LENGTH}, + ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER}, {"Gpe1Block",ACPI_FADT_OFFSET (xgpe1_block ),ACPI_FADT_OFFSET (gpe1_block ),ACPI_FADT_OFFSET (gpe1_block_length ), 0, - ACPI_FADT_SEPARATE_LENGTH} + ACPI_FADT_SEPARATE_LENGTH | ACPI_FADT_GPE_REGISTER} };#define ACPI_FADT_INFO_ENTRIES \
@@ -189,19 +191,29 @@ static struct acpi_fadt_pm_info fadt_pm_info_table[] = {static void acpi_tb_init_generic_address (struct acpi_generic_address *generic_address,u8 space_id, -u8 byte_width,u64 address,char *register_name) +u8 byte_width, +u64 address,char *register_name,u8 flags) {u8 bit_width; -/* Bit width field in the GAS is only one byte long, 255 max */ - +/* +* Bit width field in the GAS is only one byte long, 255 max. +* Check for bit_width overflow in GAS. +*/ bit_width = (u8)(byte_width *8 ); - -if (byte_width >31 ) {/* (31*8)=248 */ -ACPI_ERROR ((AE_INFO , -"%s - 32-bit FADT register is too long (%u bytes, %u bits) " -"to convert to GAS struct - 255 bits max, truncating" , - register_name, byte_width, (byte_width *8 ))); +if (byte_width >31 ) {/* (31*8)=248, (32*8)=256 */ +/* +* No error for GPE blocks, because we do not use the bit_width +* for GPEs, the legacy length (byte_width) is used instead to +* allow for a large number of GPEs. +*/ +if (!(flags &ACPI_FADT_GPE_REGISTER )) { +ACPI_ERROR ((AE_INFO , +"%s - 32-bit FADT register is too long (%u bytes, %u bits) " +"to convert to GAS struct - 255 bits max, truncating" , + register_name, byte_width, + (byte_width *8 ))); + } bit_width =255 ; }
@@ -450,6 +462,7 @@ static void acpi_tb_convert_fadt(void)struct acpi_generic_address *address64;u32 address32;u8 length; +u8 flags;u32 i;/*
@@ -515,6 +528,7 @@ static void acpi_tb_convert_fadt(void) fadt_info_table[i].length); name = fadt_info_table[i].name; + flags = fadt_info_table[i].flags;/* * Expand the ACPI 1.0 32-bit addresses to the ACPI 2.0 64-bit "X"
@@ -554,7 +568,7 @@ static void acpi_tb_convert_fadt(void) [i]. length), (u64 )address32, - name); + name, flags); }else if (address64->address != (u64 )address32) {/* Address mismatch */
@@ -582,7 +596,8 @@ static void acpi_tb_convert_fadt(void) length), (u64 ) address32, - name); + name, + flags); } } }
@@ -603,7 +618,7 @@ static void acpi_tb_convert_fadt(void) address64->bit_width)); } -if (fadt_info_table[i].type &ACPI_FADT_REQUIRED ) { +if (fadt_info_table[i].flags &ACPI_FADT_REQUIRED ) {/* * Field is required (Pm1a_event, Pm1a_control). * Both the address and length must be non-zero.
@@ -617,7 +632,7 @@ static void acpi_tb_convert_fadt(void) address), length)); } - }else if (fadt_info_table[i].type &ACPI_FADT_SEPARATE_LENGTH ) { + }else if (fadt_info_table[i].flags &ACPI_FADT_SEPARATE_LENGTH ) {/* * Field is optional (Pm2_control, GPE0, GPE1) AND has its own * length field. If present, both the address and length must
@@ -726,7 +741,7 @@ static void acpi_tb_setup_fadt_registers(void) (fadt_pm_info_table[i]. register_num * pm1_register_byte_width), - "PmRegisters"); + "PmRegisters", 0); } } }
Signature · 1 line
1.7.10
PATCH 25/27 ACPICA: Events: Update GPE handling and initialization code.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
1) Eliminate most use of GAS structs, since they are not needed for GPEs.
2) Allow raw GPE numbers > 255.
--- drivers/acpi/acpica/acevents.h | 5 +++-- drivers/acpi/acpica/aclocal.h | 9 +++++---- drivers/acpi/acpica/evgpe.c | 13 +++++++------ drivers/acpi/acpica/evgpeblk.c | 34 ++++++++++++++++------------------ drivers/acpi/acpica/evgpeinit.c | 12 ++++++++---- drivers/acpi/acpica/evxfgpe.c | 7 ++++--- 6 files changed, 43 insertions(+), 37 deletions(-)
drivers/acpi/acpica/acevents.h +3 -2
@@ -104,9 +104,10 @@ acpi_status acpi_ev_finish_gpe(struct acpi_gpe_event_info *gpe_event_info);*/ acpi_status acpi_ev_create_gpe_block (struct acpi_namespace_node *gpe_device, -struct acpi_generic_address *gpe_block_address, +u64 address, +u8 space_id,u32 register_count, -u8 gpe_block_base_number, +u16 gpe_block_base_number,u32 interrupt_number,struct acpi_gpe_block_info **return_gpe_block);
drivers/acpi/acpica/aclocal.h +5 -4
@@ -450,9 +450,9 @@ struct acpi_gpe_event_info {struct acpi_gpe_register_info {struct acpi_generic_address status_address;/* Address of status reg */ struct acpi_generic_address enable_address;/* Address of enable reg */ +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 base_gpe_number;/* Base GPE number for this register */ };/*
@@ -466,11 +466,12 @@ struct acpi_gpe_block_info {struct acpi_gpe_xrupt_info *xrupt_block;/* Backpointer to interrupt block */ struct acpi_gpe_register_info *register_info;/* One per GPE register pair */ struct acpi_gpe_event_info *event_info;/* One for each GPE */ -struct acpi_generic_address block_address;/* Base address of the block */ +u64 address;/* Base address of the block */ u32 register_count;/* Number of register pairs in block */ u16 gpe_count;/* Number of individual GPEs in block */ -u8 block_base_number;/* Base GPE number for this block */ -u8 initialized;/* TRUE if this block is initialized */ +u16 block_base_number;/* Base GPE number for this block */ +u8 space_id; +u8 initialized;/* TRUE if this block is initialized */ };/* Information about GPE interrupt handlers, one per each interrupt level used for GPEs */
drivers/acpi/acpica/evgpe.c +7 -6
@@ -383,7 +383,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list)if (!(gpe_register_info->enable_for_run | gpe_register_info->enable_for_wake)) { ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS, - "Ignore disabled registers for GPE%02X-GPE%02X: " + "Ignore disabled registers for GPE %02X-%02X: " "RunEnable=%02X, WakeEnable=%02X\n", gpe_register_info-> base_gpe_number,
@@ -416,7 +416,7 @@ u32 acpi_ev_gpe_detect(struct acpi_gpe_xrupt_info * gpe_xrupt_list) } ACPI_DEBUG_PRINT((ACPI_DB_INTERRUPTS, - "Read registers for GPE%02X-GPE%02X: Status=%02X, Enable=%02X, " + "Read registers for GPE %02X-%02X: Status=%02X, Enable=%02X, " "RunEnable=%02X, WakeEnable=%02X\n", gpe_register_info->base_gpe_number, gpe_register_info->base_gpe_number +
@@ -706,7 +706,8 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, status =acpi_hw_clear_gpe (gpe_event_info);if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status, -"Unable to clear GPE%02X" , gpe_number)); +"Unable to clear GPE %02X" , + gpe_number));return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED ); } }
@@ -723,7 +724,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, status =acpi_hw_low_set_gpe (gpe_event_info,ACPI_GPE_DISABLE );if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status, -"Unable to disable GPE%02X" , gpe_number)); +"Unable to disable GPE %02X" , gpe_number));return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED ); }
@@ -764,7 +765,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device, gpe_event_info);if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO , status, -"Unable to queue handler for GPE%02X - event disabled" , +"Unable to queue handler for GPE %02X - event disabled" , gpe_number)); }break ;
@@ -776,7 +777,7 @@ acpi_ev_gpe_dispatch(struct acpi_namespace_node *gpe_device,* a GPE to be enabled if it has no handler or method. */ ACPI_ERROR ((AE_INFO , -"No handler or method for GPE%02X, disabling event" , +"No handler or method for GPE %02X, disabling event" , gpe_number));break ;
drivers/acpi/acpica/evgpeblk.c +16 -18
@@ -252,21 +252,17 @@ acpi_ev_create_gpe_info_blocks(struct acpi_gpe_block_info *gpe_block)/* Init the register_info for this GPE register (8 GPEs) */ - this_register->base_gpe_number = - (u8) (gpe_block->block_base_number + - (i *ACPI_GPE_REGISTER_WIDTH )); + this_register->base_gpe_number = (u16) + (gpe_block->block_base_number + + (i *ACPI_GPE_REGISTER_WIDTH )); - this_register->status_address.address = - gpe_block->block_address.address + i; + this_register->status_address.address = gpe_block->address + i; this_register->enable_address.address = - gpe_block->block_address.address + i + - gpe_block->register_count; + gpe_block->address + i + gpe_block->register_count; - this_register->status_address.space_id = - gpe_block->block_address.space_id; - this_register->enable_address.space_id = - gpe_block->block_address.space_id; + this_register->status_address.space_id = gpe_block->space_id; + this_register->enable_address.space_id = gpe_block->space_id; this_register->status_address.bit_width =ACPI_GPE_REGISTER_WIDTH ; this_register->enable_address.bit_width =
@@ -334,9 +330,10 @@ error_exit:acpi_status acpi_ev_create_gpe_block (struct acpi_namespace_node *gpe_device, -struct acpi_generic_address *gpe_block_address, +u64 address, +u8 space_id,u32 register_count, -u8 gpe_block_base_number, +u16 gpe_block_base_number,u32 interrupt_number,struct acpi_gpe_block_info **return_gpe_block) {
@@ -359,15 +356,14 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device,/* Initialize the new GPE block */ + gpe_block->address = address; + gpe_block->space_id = space_id; gpe_block->node = gpe_device; gpe_block->gpe_count = (u16)(register_count *ACPI_GPE_REGISTER_WIDTH ); gpe_block->initialized = FALSE; gpe_block->register_count = register_count; gpe_block->block_base_number = gpe_block_base_number; -ACPI_MEMCPY (&gpe_block->block_address, gpe_block_address, -sizeof (struct acpi_generic_address )); -/* * Create the register_info and event_info sub-structures * Note: disables and clears all GPEs in the block
@@ -408,12 +404,14 @@ acpi_ev_create_gpe_block(struct acpi_namespace_node *gpe_device, }ACPI_DEBUG_PRINT_RAW ((ACPI_DB_INIT , -" Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X\n" , +" Initialized GPE %02X to %02X [%4.4s] %u regs on interrupt 0x%X%s\n" , (u32 )gpe_block->block_base_number, (u32)(gpe_block->block_base_number + (gpe_block->gpe_count -1 )), gpe_device->name.ascii, gpe_block->register_count, - interrupt_number)); + interrupt_number, + interrupt_number == + acpi_gbl_FADT.sci_interrupt ?" (SCI)" :"" ));/* Update global count of currently available GPEs */
drivers/acpi/acpica/evgpeinit.c +8 -4
@@ -131,8 +131,10 @@ acpi_status acpi_ev_gpe_initialize(void)/* Install GPE Block 0 */ status =acpi_ev_create_gpe_block (acpi_gbl_fadt_gpe_device, - &acpi_gbl_FADT.xgpe0_block, - register_count0,0 , + acpi_gbl_FADT.xgpe0_block. + address, + acpi_gbl_FADT.xgpe0_block. + space_id, register_count0,0 , acpi_gbl_FADT.sci_interrupt, &acpi_gbl_gpe_fadt_blocks[0 ]);
@@ -169,8 +171,10 @@ acpi_status acpi_ev_gpe_initialize(void) status = acpi_ev_create_gpe_block(acpi_gbl_fadt_gpe_device, - &acpi_gbl_FADT.xgpe1_block, - register_count1, + acpi_gbl_FADT.xgpe1_block. + address, + acpi_gbl_FADT.xgpe1_block. + space_id, register_count1, acpi_gbl_FADT.gpe1_base, acpi_gbl_FADT. sci_interrupt,
drivers/acpi/acpica/evxfgpe.c +4 -3
@@ -599,9 +599,10 @@ acpi_install_gpe_block(acpi_handle gpe_device,* For user-installed GPE Block Devices, the gpe_block_base_number * is always zero */ - status = -acpi_ev_create_gpe_block (node, gpe_block_address, register_count,0 , - interrupt_number, &gpe_block); + status =acpi_ev_create_gpe_block (node, gpe_block_address->address, + gpe_block_address->space_id, + register_count,0 , interrupt_number, + &gpe_block);if (ACPI_FAILURE (status)) { goto unlock_and_exit; }
Signature · 1 line
1.7.10
PATCH 26/27 ACPICA: Comment/format update, no functional change.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Add some additional commenting the the public acpixf.h file.
--- include/acpi/acpixf.h | 73 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 19 deletions(-)
include/acpi/acpixf.h +54 -19
@@ -55,11 +55,17 @@extern u8 acpi_gbl_permanent_mmap; +/***************************************************************************** +* +* Macros used for ACPICA globals and configuration +* +****************************************************************************/ +/* -* Ensure that the globals are actually defined and initialized only once. +* Ensure that global variables are defined and initialized only once. * -* The use of these macros allows a single list of globals (here) in order -* to simplify maintenance of the code. +* The use of these macros allows for a single list of globals (here) +* in order to simplify maintenance of the code. */ #ifdef DEFINE_ACPI_GLOBALS #define ACPI_GLOBAL (type,name) \
@@ -81,8 +87,11 @@ extern u8 acpi_gbl_permanent_mmap;#endif #endif -/* ACPICA prototypes */ - +/* +* These macros configure the various ACPICA interfaces. They are +* useful for generating stub inline functions for features that are +* configured out of the current kernel or ACPICA application. +*/ #ifndef ACPI_EXTERNAL_RETURN_STATUS #define ACPI_EXTERNAL_RETURN_STATUS (prototype) \ prototype;
@@ -108,16 +117,14 @@ extern u8 acpi_gbl_permanent_mmap; prototype;#endif -/* Public globals, available from outside ACPICA subsystem */ -/***************************************************************************** * -* Runtime configuration (static defaults that can be overriden at runtime) +* Public globals and runtime configuration options * ****************************************************************************/ /* -* Enable "slack" in the AML interpreter? Default is FALSE, and the +* Enable "slack mode" of the AML interpreter? Default is FALSE, and the * interpreter strictly follows the ACPI specification. Setting to TRUE * allows the interpreter to ignore certain errors and/or bad AML constructs. *
@@ -234,16 +241,34 @@ ACPI_INIT_GLOBAL(u32, acpi_dbg_level, ACPI_DEBUG_DEFAULT);ACPI_INIT_GLOBAL (u32, acpi_dbg_layer,0 );/* -* Globals that are publically available +* Other miscellaneous globals */ -ACPI_GLOBAL (u32, acpi_current_gpe_count); ACPI_GLOBAL(struct acpi_table_fadt, acpi_gbl_FADT); +ACPI_GLOBAL (u32, acpi_current_gpe_count);ACPI_GLOBAL (u8, acpi_gbl_system_awake_and_running); +/***************************************************************************** +* +* ACPICA public interface configuration. +* +* Interfaces that are configured out of the ACPICA build are replaced +* by inlined stubs by default. +* +****************************************************************************/ +/* -* Hardware-reduced prototypes. All interfaces that use these macros will -* be configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag +* Hardware-reduced prototypes (default: Not hardware reduced). +* +* All ACPICA hardware-related interfaces that use these macros will be +* configured out of the ACPICA build if the ACPI_REDUCED_HARDWARE flag * is set to TRUE. +* +* Note: This static build option for reduced hardware is intended to +* reduce ACPICA code size if desired or necessary. However, even if this +* option is not specified, the runtime behavior of ACPICA is dependent +* on the actual FADT reduced hardware flag (HW_REDUCED_ACPI). If set, +* the flag will enable similar behavior -- ACPICA will not attempt +* to access any ACPI-relate hardware (SCI, GPEs, Fixed Events, etc.) */ #if (!ACPI_REDUCED_HARDWARE )#define ACPI_HW_DEPENDENT_RETURN_STATUS (prototype) \
@@ -268,9 +293,11 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);#endif /* !ACPI_REDUCED_HARDWARE */ /* -* Error-message prototypes. All interfaces that use these macros will -* be configured out of the ACPICA build if the ACPI_NO_ERROR_MESSAGE flag -* is defined. +* Error message prototypes (default: error messages enabled). +* +* All interfaces related to error and warning messages +* will be configured out of the ACPICA build if the +* ACPI_NO_ERROR_MESSAGE flag is defined. */ #ifndef ACPI_NO_ERROR_MESSAGES #define ACPI_MSG_DEPENDENT_RETURN_VOID (prototype) \
@@ -283,9 +310,11 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);#endif /* ACPI_NO_ERROR_MESSAGES */ /* -* Debugging-output prototypes. All interfaces that use these macros will -* be configured out of the ACPICA build if the ACPI_DEBUG_OUTPUT flag is -* not defined. +* Debugging output prototypes (default: no debug output). +* +* All interfaces related to debug output messages +* will be configured out of the ACPICA build unless the +* ACPI_DEBUG_OUTPUT flag is defined. */ #ifdef ACPI_DEBUG_OUTPUT #define ACPI_DBG_DEPENDENT_RETURN_VOID (prototype) \
@@ -297,6 +326,12 @@ ACPI_GLOBAL(u8, acpi_gbl_system_awake_and_running);#endif /* ACPI_DEBUG_OUTPUT */ +/***************************************************************************** +* +* ACPICA public interface prototypes +* +****************************************************************************/ +/* * Initialization */
Signature · 1 line
1.7.10
PATCH 27/27 ACPICA: Update version to 20140424.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
Version 20140424.
--- include/acpi/acpixf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/acpi/acpixf.h +1 -1
@@ -46,7 +46,7 @@/* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20140325 +#define ACPI_CA_VERSION 0x20140424#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
1.7.10