ACPICA 20170728 Release
Subsystems (2)
cover ACPICA 20170728 Release
The 20170728 ACPICA kernel-resident subsystem updates are linuxized based on the linux-pm/linux-next branch.
The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + allyes
2. i386 + allno
3. i386 + default + ACPI_DEBUGGER=y
4. i386 + default + ACPI_DEBUGGER=n + ACPI_DEBUG=y
5. i386 + default + ACPI_DEBUG=n + ACPI=y
6. i386 + default + ACPI=n
7. x86_64 + allyes
8. x86_64 + allno
9. x86_64 + default + ACPI_DEBUGGER=y
10.x86_64 + default + ACPI_DEBUGGER=n + ACPI_DEBUG=y 11.x86_64 + default + ACPI_DEBUG=n + ACPI=y
12.x86_64 + default + ACPI=n
Boot tests are performed as follows:
1. x86_64 + default + ACPI_DEBUGGER=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "Microsoft Surface Pro 3"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All "drivers/acpi" configurations
All "drivers/platform" drivers
All other drivers that link the APIs provided by ACPICA subsystem
The divergences checking result:
Before applying (20170629 Release):
390 lines
After applying (20170728 Release):
390 lines
Bob Moore (8):
ACPICA: Namespace: Update/fix an error message
ACPICA: Add a comment, no functional change
ACPICA: Interpreter: Update handling for Alias operator
ACPICA: Debugger: Improve support for Alias objects
ACPICA: Implement deferred resolution of reference package elements
ACPICA: Ensure all instances of AE_AML_INTERNAL have error messages
ACPICA: Resources: Allow _DMA method in walk resources
ACPICA: Update version to 20170728
Erik Schmauss (1):
ACPICA: Revert "Update resource descriptor handling"
James Morse (1):
ACPICA: iASL: Add support for the SDEI table
Lv Zheng (4):
ACPICA: Divergences: reduce access size definitions
ACPICA: CLib: Add short multiply/shift support
ACPICA: acpidump: Add DSDT/FACS instance support for Linux and EFI
ACPICA: EFI/EDK2: Cleanup to enable /WX for MSVC builds
Shao Ming (1):
ACPICA: EFI/EDK2: Sort acpi.h inclusion order
drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/acdispat.h | 13 + drivers/acpi/acpica/aclocal.h | 2 +- drivers/acpi/acpica/acobject.h | 3 +- drivers/acpi/acpica/acutils.h | 9 +- drivers/acpi/acpica/dbdisply.c | 37 +- drivers/acpi/acpica/dsfield.c | 2 + drivers/acpi/acpica/dsobject.c | 398 +++-------------- drivers/acpi/acpica/dsopcode.c | 9 + drivers/acpi/acpica/dspkginit.c | 496 +++++++++++++++++++++ drivers/acpi/acpica/excreate.c | 61 +-- drivers/acpi/acpica/exdump.c | 34 +- drivers/acpi/acpica/exmisc.c | 9 + drivers/acpi/acpica/exoparg2.c | 3 + drivers/acpi/acpica/hwregs.c | 2 +- drivers/acpi/acpica/nsaccess.c | 22 +- drivers/acpi/acpica/nsarguments.c | 21 +- drivers/acpi/acpica/nsinit.c | 14 + drivers/acpi/acpica/nsnames.c | 9 +- drivers/acpi/acpica/nsprepkg.c | 2 + drivers/acpi/acpica/psloop.c | 14 + drivers/acpi/acpica/rsxface.c | 7 +- drivers/acpi/acpica/uthex.c | 4 +- drivers/acpi/acpica/utmath.c | 222 ++++++++- drivers/acpi/acpica/utmisc.c | 10 +- drivers/acpi/acpica/utobject.c | 5 + drivers/acpi/acpica/utprint.c | 8 +- drivers/acpi/acpica/utresrc.c | 21 +- drivers/acpi/acpica/utstate.c | 2 +- drivers/acpi/acpica/utstrtoul64.c | 9 +- drivers/acpi/acpica/uttrack.c | 9 +- drivers/acpi/spcr.c | 9 +- include/acpi/acnames.h | 1 + include/acpi/acpi.h | 4 +- include/acpi/acpixf.h | 2 +- include/acpi/acrestyp.h | 7 - include/acpi/actbl2.h | 14 + include/acpi/actypes.h | 8 + include/acpi/platform/acgcc.h | 4 + include/acpi/platform/aclinux.h | 2 + .../acpi/os_specific/service_layers/oslinuxtbl.c | 105 +++-- tools/power/acpi/tools/acpidump/apfiles.c | 2 +- tools/power/acpi/tools/acpidump/apmain.c | 2 +- 43 files changed, 1127 insertions(+), 491 deletions(-) create mode 100644 drivers/acpi/acpica/dspkginit.c
Signature · 1 line
2.7.4
PATCH 1/15 ACPICA: Divergences: reduce access size definitions
ACPICA commit cf27b3c98883d2a15d932016792fcb8272ace96d
The following commit introduces definition of access width to ACPICA.
Commit: 2bece49394872d36bbc5767fd643deac05920c55
Subject: ACPI: SPCR: Use access width to determine mmio usage
Actually the access bit width can be calculated via access width. It would be better to define a macro calculating bit width rather than defining fixed values. This patch thus cleans up the definitions to reduce divergences.
--- drivers/acpi/acpica/hwregs.c | 2 +- drivers/acpi/spcr.c | 9 +++++---- include/acpi/acrestyp.h | 7 ------- include/acpi/actypes.h | 7 +++++++ 4 files changed, 13 insertions(+), 12 deletions(-)
drivers/acpi/acpica/hwregs.c +1 -1
@@ -107,7 +107,7 @@ acpi_hw_get_access_bit_width(u64 address, ACPI_IS_ALIGNED(reg->bit_width, 8)) { access_bit_width = reg->bit_width; } else if (reg->access_width) { - access_bit_width = (1 << (reg->access_width + 2)); + access_bit_width = ACPI_ACCESS_BIT_WIDTH(reg->access_width); } else { access_bit_width = ACPI_ROUND_UP_POWER_OF_TWO_8(reg->bit_offset +
drivers/acpi/spcr.c +5 -4
@@ -95,16 +95,17 @@ int __init parse_spcr(bool earlycon) }if (table->serial_port.space_id ==ACPI_ADR_SPACE_SYSTEM_MEMORY ) { -switch (table->serial_port.access_width) { +switch (ACPI_ACCESS_BIT_WIDTH (( + table->serial_port.access_width))) {default :pr_err ("Unexpected SPCR Access Width. Defaulting to byte size\n" ); -case ACPI_ACCESS_SIZE_BYTE : +case 8 : iotype ="mmio" ;break ; -case ACPI_ACCESS_SIZE_WORD : +case 16 : iotype ="mmio16" ;break ; -case ACPI_ACCESS_SIZE_DWORD : +case 32 : iotype ="mmio32" ;break ; }
include/acpi/acrestyp.h +0 -7
@@ -377,13 +377,6 @@ struct acpi_resource_generic_register {u64 address; }; -/* Generic Address Space Access Sizes */ -#define ACPI_ACCESS_SIZE_UNDEFINED 0 -#define ACPI_ACCESS_SIZE_BYTE 1 -#define ACPI_ACCESS_SIZE_WORD 2 -#define ACPI_ACCESS_SIZE_DWORD 3 -#define ACPI_ACCESS_SIZE_QWORD 4 -struct acpi_resource_gpio {u8 revision_id;u8 connection_type;
include/acpi/actypes.h +7 -0
@@ -554,6 +554,13 @@ typedef u64 acpi_integer;#define ACPI_VALIDATE_RSDP_SIG (a) (!strncmp (ACPI_CAST_PTR (char, (a)), ACPI_SIG_RSDP, 8))#define ACPI_MAKE_RSDP_SIG (dest) (memcpy (ACPI_CAST_PTR (char, (dest)), ACPI_SIG_RSDP, 8)) +/* +* Algorithm to obtain access bit width. +* Can be used with access_width of struct acpi_generic_address and access_size of +* struct acpi_resource_generic_register. +*/ +#define ACPI_ACCESS_BIT_WIDTH (size) (1 << ((size) + 2)) +/******************************************************************************* * * Miscellaneous constants
Signature · 1 line
2.7.4
PATCH 2/15 ACPICA: iASL: Add support for the SDEI table
In reply to Lv ZhengFrom: James Morse <[email protected]>
ACPICA commit 5ad4f0b7bf9e7ba175bd320cf7950f3b38799ff3
ACPI 6.2 adds support for the Software Delegated Exception Interface, which is described by "Software Delegated Exception Interface (SDEI)" ARM DEN0054A.
Add the necessary types in the ACPICA header files and support for compiling/decompiling the table.
--- include/acpi/actbl2.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
include/acpi/actbl2.h +14 -0
@@ -76,6 +76,7 @@#define ACPI_SIG_MCHI "MCHI"/* Management Controller Host Interface table */ #define ACPI_SIG_MSDM "MSDM"/* Microsoft Data Management Table */ #define ACPI_SIG_MTMR "MTMR"/* MID Timer table */ +#define ACPI_SIG_SDEI "SDEI"/* Software Delegated Exception Interface Table */ #define ACPI_SIG_SLIC "SLIC"/* Software Licensing Description Table */ #define ACPI_SIG_SPCR "SPCR"/* Serial Port Console Redirection table */ #define ACPI_SIG_SPMI "SPMI"/* Server Platform Management Interface table */
@@ -1134,6 +1135,19 @@ struct acpi_mtmr_entry {/******************************************************************************* * +* SDEI - Software Delegated Exception Interface Descriptor Table +* +* Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, +* May 8th, 2017. Copyright 2017 ARM Ltd. +* +******************************************************************************/ + +struct acpi_table_sdei { +struct acpi_table_header header;/* Common ACPI table header */ +}; + +/******************************************************************************* +* * SLIC - Software Licensing Description Table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
Signature · 1 line
2.7.4
PATCH 3/15 ACPICA: Namespace: Update/fix an error message
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 8b7fa979ef81469e70f501f582466a265d6f595b
Was emitting an internal namestring without converting it to the external format.
--- drivers/acpi/acpica/nsaccess.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
drivers/acpi/acpica/nsaccess.c +16 -6
@@ -292,6 +292,7 @@ acpi_ns_lookup(union acpi_generic_state *scope_info, {acpi_status status;char *path = pathname; +char *external_path;struct acpi_namespace_node *prefix_node;struct acpi_namespace_node *current_node =NULL ;struct acpi_namespace_node *this_node =NULL ;
@@ -427,13 +428,22 @@ acpi_ns_lookup(union acpi_generic_state *scope_info, num_carats++; this_node = this_node->parent;if (!this_node) { +/* +* Current scope has no parent scope. Externalize +* the internal path for error message. +*/ + status = +acpi_ns_externalize_name + (ACPI_UINT32_MAX , pathname,NULL , + &external_path); +if (ACPI_SUCCESS (status)) { +ACPI_ERROR ((AE_INFO , +"%s: Path has too many parent prefixes (^)" , + external_path)); + +ACPI_FREE (external_path); + } -/* Current scope has no parent scope */ - -ACPI_ERROR ((AE_INFO , -"%s: Path has too many parent prefixes (^) " -"- reached beyond root node" , - pathname));return_ACPI_STATUS (AE_NOT_FOUND ); } }
Signature · 1 line
2.7.4
PATCH 4/15 ACPICA: Add a comment, no functional change
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit d586c29a026a6172c1113df4d75fd6d764196e77
Describe 2nd byte of the end_tag resource descriptor.
--- drivers/acpi/acpica/utresrc.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/acpi/acpica/utresrc.c +7 -0
@@ -239,6 +239,13 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG ); } +/* +* Don't attempt to perform any validation on the 2nd byte. +* Although all known ASL compilers insert a zero for the 2nd +* byte, it can also be a checksum (as per the ACPI spec), +* and this is occasionally seen in the field. July 2017. +*/ +/* Return the pointer to the end_tag if requested */ if (!user_function) {
Signature · 1 line
2.7.4
PATCH 5/15 ACPICA: EFI/EDK2: Sort acpi.h inclusion order
In reply to Lv ZhengFrom: Shao Ming <[email protected]>
ACPICA commit 43ff22215f0fcd8ca80abec5712a07d2cc9a801d
acpi.h inclusion order need to be changed to build EDK-II ports of acpidump on Windows as va_list is used before it's definition in that environment. As we only need to ensure order of acenv.h/acenvex.h to be pre/post ACPICA type definitions, inclusion order is changed to make MSVC builds happy. Lv Zheng.
--- include/acpi/acpi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
include/acpi/acpi.h +2 -2
@@ -58,10 +58,10 @@#include <acpi/actypes.h> /* ACPICA data types and structures */ #include <acpi/acexcep.h> /* ACPICA exceptions */ #include <acpi/actbl.h> /* ACPI table definitions */ -#include <acpi/acoutput.h> /* Error output and Debug macros */ #include <acpi/acrestyp.h> /* Resource Descriptor structs */ +#include <acpi/platform/acenvex.h> /* Extra environment-specific items */ +#include <acpi/acoutput.h> /* Error output and Debug macros */ #include <acpi/acpiosxf.h> /* OSL interfaces (ACPICA-to-OS) */ #include <acpi/acpixf.h> /* ACPI core subsystem external interfaces */ -#include <acpi/platform/acenvex.h> /* Extra environment-specific items */ #endif /* __ACPI_H__ */
Signature · 1 line
2.7.4
PATCH 6/15 ACPICA: CLib: Add short multiply/shift support
In reply to Lv ZhengACPICA commit 01b8f5a2350b9cc329cd8402ac8faec36fc501f5
In order to build ACPICA EFI tools with EDK-II on Windows, 64-bit multiply/shift supports are also required to be implemented. Otherwise, MSVC complains:
acpidump.lib(utstrtoul64.obj) : error LNK2001: unresolved external symbol __allmul acpidump.lib(uthex.obj) : error LNK2001: unresolved external symbol __aullshr
Note:
1. This patch also splits _EDK2_EFI from _GNU_EFI as they might have different math64 supports.
2. Support of gcc math64 is not included in this patch.
3. Support of EDK2 arch independent math64 is done via linking to base_lib.
This patch fixes this issue. Reported by Shao Ming, fixed by Lv Zheng.
For Linux kernel, this patch is a functional no-op.
--- drivers/acpi/acpica/acutils.h | 7 + drivers/acpi/acpica/uthex.c | 4 +- drivers/acpi/acpica/utmath.c | 222 ++++++++++++++++++++++++++++-- drivers/acpi/acpica/utprint.c | 2 +- drivers/acpi/acpica/utstrtoul64.c | 9 +- include/acpi/actypes.h | 1 + include/acpi/platform/acgcc.h | 4 + include/acpi/platform/aclinux.h | 2 + tools/power/acpi/tools/acpidump/apfiles.c | 2 +- tools/power/acpi/tools/acpidump/apmain.c | 2 +- 10 files changed, 237 insertions(+), 18 deletions(-)
drivers/acpi/acpica/acutils.h +7 -0
@@ -538,6 +538,13 @@ acpi_status acpi_ut_short_divide(u64 in_dividend, u32 divisor, u64 *out_quotient, u32 *out_remainder); +acpi_status +acpi_ut_short_multiply (u64 in_multiplicand,u32 multiplier,u64 *outproduct); + +acpi_status acpi_ut_short_shift_left (u64 operand,u32 count,u64 *out_result); + +acpi_status acpi_ut_short_shift_right (u64 operand,u32 count,u64 *out_result); +/* * utmisc */
drivers/acpi/acpica/uthex.c +3 -1
@@ -69,8 +69,10 @@ static const char acpi_gbl_hex_to_ascii[] = {char acpi_ut_hex_to_ascii_char (u64 integer,u32 position) { +u64 index; -return (acpi_gbl_hex_to_ascii[(integer >> position) &0xF ]); +acpi_ut_short_shift_right (integer, position, &index); +return (acpi_gbl_hex_to_ascii[index &0xF ]); }/*******************************************************************************
drivers/acpi/acpica/utmath.c +213 -9
246 lines not on this page · raw message
drivers/acpi/acpica/utprint.c +1 -1
@@ -176,7 +176,7 @@ const char *acpi_ut_scan_number(const char *string, u64 *number_ptr)u64 number =0 ;while (isdigit ((int )*string)) { - number *=10 ; +acpi_ut_short_multiply (number,10 , &number); number += *(string++) -'0' ; }
drivers/acpi/acpica/utstrtoul64.c +4 -5
@@ -276,8 +276,8 @@ static u64 acpi_ut_strtoul_base10(char *string, u32 flags)/* Convert and insert (add) the decimal digit */ - next_value = - (return_value *10 ) + (ascii_digit -ACPI_ASCII_ZERO ); +acpi_ut_short_multiply (return_value,10 , &next_value); + next_value += (ascii_digit -ACPI_ASCII_ZERO );/* Check for overflow (32 or 64 bit) - return current converted value */
@@ -335,9 +335,8 @@ static u64 acpi_ut_strtoul_base16(char *string, u32 flags)/* Convert and insert the hex digit */ - return_value = - (return_value <<4 ) | -acpi_ut_ascii_char_to_hex (ascii_digit); +acpi_ut_short_shift_left (return_value,4 , &return_value); + return_value |=acpi_ut_ascii_char_to_hex (ascii_digit); string++; valid_digits++;
include/acpi/actypes.h +1 -0
@@ -166,6 +166,7 @@ typedef u64 acpi_physical_address;#define ACPI_SIZE_MAX ACPI_UINT64_MAX#define ACPI_USE_NATIVE_DIVIDE /* Has native 64-bit integer support */ +#define ACPI_USE_NATIVE_MATH64 /* Has native 64-bit integer support */ /* * In the case of the Itanium Processor Family (IPF), the hardware does not
include/acpi/platform/acgcc.h +4 -0
@@ -84,4 +84,8 @@ typedef __builtin_va_list va_list;#define COMPILER_VA_MACRO 1 +/* GCC supports native multiply/shift on 32-bit platforms */ + +#define ACPI_USE_NATIVE_MATH64 +#endif /* __ACGCC_H__ */
include/acpi/platform/aclinux.h +2 -0
@@ -128,6 +128,7 @@/* Host-dependent types and defines for in-kernel ACPICA */ #define ACPI_MACHINE_WIDTH BITS_PER_LONG +#define ACPI_USE_NATIVE_MATH64 #define ACPI_EXPORT_SYMBOL (symbol) EXPORT_SYMBOL(symbol);#define strtoul simple_strtoul
@@ -216,6 +217,7 @@#define COMPILER_DEPENDENT_INT64 long long#define COMPILER_DEPENDENT_UINT64 unsigned long long#define ACPI_USE_NATIVE_DIVIDE +#define ACPI_USE_NATIVE_MATH64 #endif #ifndef __cdecl
tools/power/acpi/tools/acpidump/apfiles.c +1 -1
@@ -61,7 +61,7 @@ static int ap_is_existing_file(char *pathname);static int ap_is_existing_file (char *pathname) { -#ifndef _GNU_EFI +#if !defined(_GNU_EFI) && !defined(_EDK2_EFI)struct stat stat_info;if (!stat (pathname, &stat_info)) {
tools/power/acpi/tools/acpidump/apmain.c +1 -1
@@ -300,7 +300,7 @@ static int ap_do_options(int argc, char **argv)* ******************************************************************************/ -#ifndef _GNU_EFI +#if !defined(_GNU_EFI) && !defined(_EDK2_EFI) int ACPI_SYSTEM_XFACE main(int argc, char *argv[])#else int ACPI_SYSTEM_XFACE acpi_main(int argc, char *argv[])
Signature · 1 line
2.7.4
PATCH 7/15 ACPICA: acpidump: Add DSDT/FACS instance support for Linux and EFI
In reply to Lv ZhengACPICA commit 343fc31840d40c06001f3b170ee5bcdfd3c7f3e0
ACPI spec allows to configure different 32-bit/64-bit table addresses for DSDT and FACS. And for FACS, it's meaningful to dump both of them as they are used to support different suspend protocols.
While:
1. on Linux, only 1 instance is supported for DSDT/FACS; and
2. on EFI, the code in osl_get_table() is buggy with special table instances, causing endless file dump for such tables (reported by Shao Ming in link #2).
This patch adds DSDT/FACS instance support for Linux/EFI acpidump. Fixed by Lv Zheng.
--- .../acpi/os_specific/service_layers/oslinuxtbl.c | 105 ++++++++++++++------- 1 file changed, 73 insertions(+), 32 deletions(-)
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +73 -32
@@ -759,7 +759,7 @@ static acpi_status osl_list_bios_tables(void)/* Skip NULL entries in RSDT/XSDT */ -if (!table_address) { +if (table_address ==0 ) {continue ; }
@@ -808,7 +808,8 @@ osl_get_bios_table(char *signature,u8 number_of_tables;u8 item_size;u32 current_instance =0 ; -acpi_physical_address table_address =0 ; +acpi_physical_address table_address; +acpi_physical_address first_table_address =0 ;u32 table_length =0 ;acpi_status status =AE_OK ;u32 i;
@@ -820,9 +821,10 @@ osl_get_bios_table(char *signature, ACPI_COMPARE_NAME(signature, ACPI_SIG_XSDT) || ACPI_COMPARE_NAME(signature, ACPI_SIG_DSDT) || ACPI_COMPARE_NAME(signature, ACPI_SIG_FACS)) { -if (instance >0 ) { -return (AE_LIMIT ); - } + +find_next_instance: + + table_address =0 ;/* * Get the appropriate address, either 32-bit or 64-bit. Be very
@@ -830,41 +832,66 @@ osl_get_bios_table(char *signature,* Note: The 64-bit addresses have priority. */ if (ACPI_COMPARE_NAME (signature,ACPI_SIG_DSDT )) { -if ((gbl_fadt->header.length >=MIN_FADT_FOR_XDSDT ) && - gbl_fadt->Xdsdt) { - table_address = - (acpi_physical_address )gbl_fadt->Xdsdt; - }else -if ((gbl_fadt->header.length >=MIN_FADT_FOR_DSDT ) - && gbl_fadt->dsdt) { - table_address = - (acpi_physical_address )gbl_fadt->dsdt; +if (current_instance <2 ) { +if ((gbl_fadt->header.length >= +MIN_FADT_FOR_XDSDT ) && gbl_fadt->Xdsdt + && current_instance ==0 ) { + table_address = + (acpi_physical_address )gbl_fadt-> + Xdsdt; + }else +if ((gbl_fadt->header.length >= +MIN_FADT_FOR_DSDT ) + && gbl_fadt->dsdt != + first_table_address) { + table_address = + (acpi_physical_address )gbl_fadt-> + dsdt; + } } }else if (ACPI_COMPARE_NAME (signature,ACPI_SIG_FACS )) { -if ((gbl_fadt->header.length >=MIN_FADT_FOR_XFACS ) && - gbl_fadt->Xfacs) { - table_address = - (acpi_physical_address )gbl_fadt->Xfacs; - }else -if ((gbl_fadt->header.length >=MIN_FADT_FOR_FACS ) - && gbl_fadt->facs) { - table_address = - (acpi_physical_address )gbl_fadt->facs; +if (current_instance <2 ) { +if ((gbl_fadt->header.length >= +MIN_FADT_FOR_XFACS ) && gbl_fadt->Xfacs + && current_instance ==0 ) { + table_address = + (acpi_physical_address )gbl_fadt-> + Xfacs; + }else +if ((gbl_fadt->header.length >= +MIN_FADT_FOR_FACS ) + && gbl_fadt->facs != + first_table_address) { + table_address = + (acpi_physical_address )gbl_fadt-> + facs; + } } }else if (ACPI_COMPARE_NAME (signature,ACPI_SIG_XSDT )) {if (!gbl_revision) {return (AE_BAD_SIGNATURE ); } - table_address = - (acpi_physical_address )gbl_rsdp. - xsdt_physical_address; +if (current_instance ==0 ) { + table_address = + (acpi_physical_address )gbl_rsdp. + xsdt_physical_address; + } }else if (ACPI_COMPARE_NAME (signature,ACPI_SIG_RSDT )) { - table_address = - (acpi_physical_address )gbl_rsdp. - rsdt_physical_address; +if (current_instance ==0 ) { + table_address = + (acpi_physical_address )gbl_rsdp. + rsdt_physical_address; + } }else { - table_address = (acpi_physical_address )gbl_rsdp_address; - signature =ACPI_SIG_RSDP ; +if (current_instance ==0 ) { + table_address = + (acpi_physical_address )gbl_rsdp_address; + signature =ACPI_SIG_RSDP ; + } + } + +if (table_address ==0 ) { + goto exit_find_table; }/* Now we can get the requested special table */
@@ -875,6 +902,18 @@ osl_get_bios_table(char *signature, } table_length =ap_get_table_length (mapped_table); +if (first_table_address ==0 ) { + first_table_address = table_address; + } + +/* Match table instance */ + +if (current_instance != instance) { +osl_unmap_table (mapped_table); + mapped_table =NULL ; + current_instance++; + goto find_next_instance; + } }else {/* Case for a normal ACPI table */ if (osl_can_use_xsdt ()) {
@@ -913,7 +952,7 @@ osl_get_bios_table(char *signature,/* Skip NULL entries in RSDT/XSDT */ -if (!table_address) { +if (table_address ==0 ) {continue ; }
@@ -946,6 +985,8 @@ osl_get_bios_table(char *signature, } } +exit_find_table: +if (!mapped_table) {return (AE_LIMIT ); }
Signature · 1 line
2.7.4
PATCH 8/15 ACPICA: EFI/EDK2: Cleanup to enable /WX for MSVC builds
In reply to Lv ZhengACPICA commit a7c6d65a5dab20b1e191c197e09af337fc54b341
/WX turns warning into fatal erros for MSVC builds. We need /WX- during EDK2 porting to allow agile development.
Now it is time to enable /WX and some explicit type conversion cleanups are required for enabling /WX. Lv Zheng.
--- drivers/acpi/acpica/utprint.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/acpi/acpica/utprint.c +3 -3
@@ -286,7 +286,7 @@ static char *acpi_ut_format_number(char *string,/* Generate full string in reverse order */ pos =acpi_ut_put_number (reversed_string, number, base, upper); - i =ACPI_PTR_DIFF (pos, reversed_string); + i = (s32 )ACPI_PTR_DIFF (pos, reversed_string);/* Printing 100 using %2d gives "100", not "00" */
@@ -475,7 +475,7 @@ int vsnprintf(char *string, acpi_size size, const char *format, va_list args)if (!s) { s ="<NULL>" ; } - length =acpi_ut_bound_string_length (s, precision); + length = (s32 )acpi_ut_bound_string_length (s, precision);if (!(type &ACPI_FORMAT_LEFT )) {while (length < width--) { pos =
@@ -579,7 +579,7 @@ int vsnprintf(char *string, acpi_size size, const char *format, va_list args) } } -return (ACPI_PTR_DIFF (pos, string)); +return ((int )ACPI_PTR_DIFF (pos, string)); }/*******************************************************************************
Signature · 1 line
2.7.4
PATCH 9/15 ACPICA: Interpreter: Update handling for Alias operator
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 719d0bdd48e3e8e7a62a86c04922b9f41da6def0
Provide common creation code for the Alias operator. All objects are now handled the same, with the only exception being the Method() operator. It has a special internal Alias type.
--- drivers/acpi/acpica/excreate.c | 61 ++++++++++-------------------------------- 1 file changed, 14 insertions(+), 47 deletions(-)
drivers/acpi/acpica/excreate.c +14 -47
@@ -88,72 +88,39 @@ acpi_status acpi_ex_create_alias(struct acpi_walk_state *walk_state) }/* Ensure that the target node is valid */ +if (!target_node) {return_ACPI_STATUS (AE_NULL_OBJECT ); } -/* -* For objects that can never change (i.e., the NS node will -* permanently point to the same object), we can simply attach -* the object to the new NS node. For other objects (such as -* Integers, buffers, etc.), we have to point the Alias node -* to the original Node. -*/ -switch (target_node->type) { - -/* For these types, the sub-object can change dynamically via a Store */ - -case ACPI_TYPE_INTEGER : -case ACPI_TYPE_STRING : -case ACPI_TYPE_BUFFER : -case ACPI_TYPE_PACKAGE : -case ACPI_TYPE_BUFFER_FIELD : -/* -* These types open a new scope, so we need the NS node in order to access -* any children. -*/ -case ACPI_TYPE_DEVICE : -case ACPI_TYPE_POWER : -case ACPI_TYPE_PROCESSOR : -case ACPI_TYPE_THERMAL : -case ACPI_TYPE_LOCAL_SCOPE : -/* -* The new alias has the type ALIAS and points to the original -* NS node, not the object itself. -*/ - alias_node->type =ACPI_TYPE_LOCAL_ALIAS ; - alias_node->object = - ACPI_CAST_PTR(union acpi_operand_object, target_node); -break ; +/* Construct the alias object (a namespace node) */ +switch (target_node->type) {case ACPI_TYPE_METHOD :/* -* Control method aliases need to be differentiated +* Control method aliases need to be differentiated with +* a special type */ alias_node->type =ACPI_TYPE_LOCAL_METHOD_ALIAS ; - alias_node->object = - ACPI_CAST_PTR(union acpi_operand_object, target_node);break ;default : - -/* Attach the original source object to the new Alias Node */ -/* -* The new alias assumes the type of the target, and it points -* to the same object. The reference count of the object has an -* additional reference to prevent deletion out from under either the -* target node or the alias Node +* All other object types. +* +* The new alias has the type ALIAS and points to the original +* NS node, not the object itself. */ - status =acpi_ns_attach_object (alias_node, -acpi_ns_get_attached_object - (target_node), - target_node->type); + alias_node->type =ACPI_TYPE_LOCAL_ALIAS ; + alias_node->object = + ACPI_CAST_PTR(union acpi_operand_object, target_node);break ; }/* Since both operands are Nodes, we don't need to delete them */ + alias_node->object = + ACPI_CAST_PTR(union acpi_operand_object, target_node);return_ACPI_STATUS (status); }
Signature · 1 line
2.7.4
PATCH 10/15 ACPICA: Debugger: Improve support for Alias objects
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 916993dbcd45b46e01f6c9b8337a01513f5d8dcc
Properly resolve alias objects for display.
General cleanup of related output.
--- drivers/acpi/acpica/dbdisply.c | 37 ++++++++++++++++++++++++++++++++----- drivers/acpi/acpica/exdump.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 58 insertions(+), 13 deletions(-)
drivers/acpi/acpica/dbdisply.c +32 -5
@@ -310,7 +310,7 @@ void acpi_db_decode_and_display_object(char *target, char *output_type) }else { -acpi_os_printf ("Object (%p) Pathname: %s\n" , +acpi_os_printf ("Object %p: Namespace Node - Pathname: %s\n" , node, (char *)ret_buf.pointer); }
@@ -326,7 +326,7 @@ void acpi_db_decode_and_display_object(char *target, char *output_type) obj_desc =acpi_ns_get_attached_object (node);if (obj_desc) { -acpi_os_printf ("\nAttached Object (%p):\n" , obj_desc); +acpi_os_printf ("\nAttached Object %p:" , obj_desc);if (!acpi_os_readable (obj_desc,sizeof (union acpi_operand_object ))) { acpi_os_printf
@@ -335,9 +335,36 @@ void acpi_db_decode_and_display_object(char *target, char *output_type)return ; } -acpi_ut_debug_dump_buffer ((void *)obj_desc, -sizeof (union acpi_operand_object ), - display,ACPI_UINT32_MAX ); +if (ACPI_GET_DESCRIPTOR_TYPE (((struct acpi_namespace_node *) + obj_desc)) == +ACPI_DESC_TYPE_NAMED ) { +acpi_os_printf (" Namespace Node - " ); + status = +acpi_get_name ((struct acpi_namespace_node *) + obj_desc, +ACPI_FULL_PATHNAME_NO_TRAILING , + &ret_buf); +if (ACPI_FAILURE (status)) { +acpi_os_printf + ("Could not convert name to pathname\n" ); + }else { +acpi_os_printf ("Pathname: %s" , + (char *)ret_buf.pointer); + } + +acpi_os_printf ("\n" ); +acpi_ut_debug_dump_buffer ((void *)obj_desc, +sizeof (struct +acpi_namespace_node ), + display,ACPI_UINT32_MAX ); + }else { +acpi_os_printf ("\n" ); +acpi_ut_debug_dump_buffer ((void *)obj_desc, +sizeof (union +acpi_operand_object ), + display,ACPI_UINT32_MAX ); + } +acpi_ex_dump_object_descriptor (obj_desc,1 ); } }
drivers/acpi/acpica/exdump.c +26 -8
@@ -102,7 +102,7 @@ static struct acpi_exdump_info acpi_ex_dump_package[6] = { {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_package), NULL}, {ACPI_EXD_NODE, ACPI_EXD_OFFSET(package.node), "Parent Node"}, {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(package.flags), "Flags"}, - {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(package.count), "Elements"}, + {ACPI_EXD_UINT32, ACPI_EXD_OFFSET(package.count), "Element Count"}, {ACPI_EXD_POINTER, ACPI_EXD_OFFSET(package.elements), "Element List"}, {ACPI_EXD_PACKAGE, 0, NULL} };
@@ -384,6 +384,10 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc, count = info->offset;while (count) { +if (!obj_desc) { +return ; + } + target =ACPI_ADD_PTR (u8, obj_desc, info->offset); name = info->name;
@@ -469,9 +473,9 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc, start = *ACPI_CAST_PTR(void *, target); next = start; -acpi_os_printf ("%20s : %p" , name, next); +acpi_os_printf ("%20s : %p " , name, next);if (next) { -acpi_os_printf ("(%s %2.2X)" , +acpi_os_printf ("%s (Type %2.2X)" ,acpi_ut_get_object_type_name (next), next->common.type);
@@ -493,6 +497,8 @@ acpi_ex_dump_object(union acpi_operand_object *obj_desc,break ; } } + }else { +acpi_os_printf ("- No attached objects" ); }acpi_os_printf ("\n" );
@@ -1129,7 +1135,9 @@ acpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,default : -acpi_os_printf ("[Unknown Type] %X\n" , obj_desc->common.type); +acpi_os_printf ("[%s] Type: %2.2X\n" , +acpi_ut_get_type_name (obj_desc->common.type), + obj_desc->common.type);break ; } }
@@ -1167,11 +1175,17 @@ acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags)acpi_ex_dump_namespace_node ((struct acpi_namespace_node *) obj_desc, flags); -acpi_os_printf ("\nAttached Object (%p):\n" , - ((struct acpi_namespace_node *)obj_desc)-> - object); - obj_desc = ((struct acpi_namespace_node *)obj_desc)->object; +if (!obj_desc) { + return_VOID; + } + +acpi_os_printf ("\nAttached Object %p" , obj_desc); +if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) ==ACPI_DESC_TYPE_NAMED ) { +acpi_os_printf (" - Namespace Node" ); + } + +acpi_os_printf (":\n" ); goto dump_object; }
@@ -1191,6 +1205,10 @@ acpi_ex_dump_object_descriptor(union acpi_operand_object *obj_desc, u32 flags) dump_object: +if (!obj_desc) { + return_VOID; + } +/* Common Fields */ acpi_ex_dump_object (obj_desc, acpi_ex_dump_common);
Signature · 1 line
2.7.4
PATCH 11/15 ACPICA: Implement deferred resolution of reference package elements
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 0c08790c56fdf0dc081ae869495a09d8c4230854
This change defers the resolution of package elements that are named references until after the entire namespace has been loaded from the definition block. This allows such references to be in fact forward references for both module level code and control methods.
--- drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/acdispat.h | 13 + drivers/acpi/acpica/aclocal.h | 2 +- drivers/acpi/acpica/acobject.h | 3 +- drivers/acpi/acpica/acutils.h | 2 +- drivers/acpi/acpica/dsobject.c | 398 +++++------------------------- drivers/acpi/acpica/dsopcode.c | 9 + drivers/acpi/acpica/dspkginit.c | 496 ++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/nsarguments.c | 21 +- drivers/acpi/acpica/nsinit.c | 14 ++ drivers/acpi/acpica/nsnames.c | 9 +- drivers/acpi/acpica/psloop.c | 14 ++ drivers/acpi/acpica/utmisc.c | 8 +- drivers/acpi/acpica/utobject.c | 5 + drivers/acpi/acpica/utstate.c | 2 +- drivers/acpi/acpica/uttrack.c | 9 +- 16 files changed, 661 insertions(+), 345 deletions(-) create mode 100644 drivers/acpi/acpica/dspkginit.c
drivers/acpi/acpica/Makefile +1 -0
@@ -18,6 +18,7 @@ acpi-y := \ dsmthdat.o \ dsobject.o \ dsopcode.o \ + dspkginit.o \ dsutils.o \ dswexec.o \ dswload.o \
drivers/acpi/acpica/acdispat.h +13 -0
@@ -237,6 +237,11 @@ acpi_ds_initialize_objects(u32 table_index,* dsobject - Parser/Interpreter interface - object initialization and conversion */ acpi_status +acpi_ds_build_internal_object (struct acpi_walk_state *walk_state, +union acpi_parse_object *op, +union acpi_operand_object **obj_desc_ptr); + +acpi_status acpi_ds_build_internal_buffer_obj(struct acpi_walk_state *walk_state, union acpi_parse_object *op, u32 buffer_length,
@@ -259,6 +264,14 @@ acpi_ds_create_node(struct acpi_walk_state *walk_state, union acpi_parse_object *op);/* +* dspkginit - Package object initialization +*/ +acpi_status +acpi_ds_init_package_element (u8 object_type, +union acpi_operand_object *source_object, +union acpi_generic_state *state,void *context); + +/* * dsutils - Parser/Interpreter interface utility routines */ void acpi_ds_clear_implicit_return (struct acpi_walk_state *walk_state);
drivers/acpi/acpica/aclocal.h +1 -1
@@ -605,7 +605,7 @@ struct acpi_update_state {* Pkg state - used to traverse nested package structures */ struct acpi_pkg_state { - ACPI_STATE_COMMON u16 index; + ACPI_STATE_COMMON u32 index;union acpi_operand_object *source_object;union acpi_operand_object *dest_object;struct acpi_walk_state *walk_state;
drivers/acpi/acpica/acobject.h +2 -1
@@ -339,11 +339,12 @@ struct acpi_object_addr_handler {struct acpi_object_reference { ACPI_OBJECT_COMMON_HEADER u8 class; /* Reference Class */u8 target_type;/* Used for Index Op */ -u8 reserved; +u8 resolved;/* Reference has been resolved to a value */ void *object;/* name_op=>HANDLE to obj, index_op=>union acpi_operand_object */ struct acpi_namespace_node *node;/* ref_of or Namepath */ union acpi_operand_object **where;/* Target of Index */ u8 *index_pointer;/* Used for Buffers and Strings */ +u8 *aml;/* Used for deferred resolution of the ref */ u32 value;/* Used for Local/Arg/Index/ddb_handle */ };
drivers/acpi/acpica/acutils.h +1 -1
@@ -516,7 +516,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_objectunion acpi_generic_state *acpi_ut_create_pkg_state (void *internal_object,void *external_object, -u16 index); +u32 index); acpi_status acpi_ut_create_update_state_and_push(union acpi_operand_object *object,
drivers/acpi/acpica/dsobject.c +67 -331
461 lines not on this page · raw message
drivers/acpi/acpica/dsopcode.c +9 -0
@@ -599,6 +599,15 @@ acpi_ds_eval_data_object_operands(struct acpi_walk_state *walk_state,*/ walk_state->operand_index = walk_state->num_operands; +/* Ignore if child is not valid */ + +if (!op->common.value.arg) { +ACPI_ERROR ((AE_INFO , +"Dispatch: Missing child while executing TermArg for %X" , + op->common.aml_opcode)); +return_ACPI_STATUS (AE_OK ); + } + status =acpi_ds_create_operand (walk_state, op->common.value.arg,1 );if (ACPI_FAILURE (status)) {return_ACPI_STATUS (status);
drivers/acpi/acpica/dspkginit.c new file +496 -0
496 lines not on this page · raw message
drivers/acpi/acpica/nsarguments.c +17 -4
@@ -69,9 +69,14 @@ void acpi_ns_check_argument_types(struct acpi_evaluate_info *info)u8 user_arg_type;u32 i; -/* If not a predefined name, cannot typecheck args */ - -if (!info->predefined) { +/* +* If not a predefined name, cannot typecheck args, because +* we have no idea what argument types are expected. +* Also, ignore typecheck if warnings/errors if this method +* has already been evaluated at least once -- in order +* to suppress repetitive messages. +*/ +if (!info->predefined || (info->node->flags &ANOBJ_EVALUATED )) {return ; }
@@ -93,6 +98,10 @@ void acpi_ns_check_argument_types(struct acpi_evaluate_info *info)acpi_ut_get_type_name (user_arg_type), acpi_ut_get_type_name(arg_type))); + +/* Prevent any additional typechecking for this method */ + + info->node->flags |=ANOBJ_EVALUATED ; } } }
@@ -121,7 +130,7 @@ acpi_ns_check_acpi_compliance(char *pathname,u32 aml_param_count;u32 required_param_count; -if (!predefined) { +if (!predefined || (node->flags &ANOBJ_EVALUATED )) {return ; }
@@ -215,6 +224,10 @@ acpi_ns_check_argument_count(char *pathname,u32 aml_param_count;u32 required_param_count; +if (node->flags &ANOBJ_EVALUATED ) { +return ; + } +if (!predefined) {/* * Not a predefined name. Check the incoming user argument count
drivers/acpi/acpica/nsinit.c +14 -0
@@ -396,6 +396,20 @@ acpi_ns_init_one_object(acpi_handle obj_handle, info->package_init++; status =acpi_ds_get_package_arguments (obj_desc); +if (ACPI_FAILURE (status)) { +break ; + } + +/* +* Resolve all named references in package objects (and all +* sub-packages). This action has been deferred until the entire +* namespace has been loaded, in order to support external and +* forward references from individual package elements (05/2017). +*/ + status =acpi_ut_walk_package_tree (obj_desc,NULL , + acpi_ds_init_package_element, +NULL ); + obj_desc->package.flags |=AOPOBJ_DATA_VALID ;break ;default :
drivers/acpi/acpica/nsnames.c +8 -1
@@ -89,7 +89,14 @@ acpi_size acpi_ns_get_pathname_length(struct acpi_namespace_node *node) {acpi_size size; -ACPI_FUNCTION_ENTRY (); +/* Validate the Node */ + +if (ACPI_GET_DESCRIPTOR_TYPE (node) !=ACPI_DESC_TYPE_NAMED ) { +ACPI_ERROR ((AE_INFO , +"Invalid/cached reference target node: %p, descriptor type %d" , + node,ACPI_GET_DESCRIPTOR_TYPE (node))); +return (0 ); + } size =acpi_ns_build_normalized_path (node,NULL ,0 , FALSE);return (size);
drivers/acpi/acpica/psloop.c +14 -0
@@ -164,6 +164,11 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state,INCREMENT_ARG_LIST (walk_state->arg_types); } +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"Final argument count: %u pass %u\n" , + walk_state->arg_count, + walk_state->pass_number)); +/* * Handle executable code at "module-level". This refers to * executable opcodes that appear outside of any control method.
@@ -277,6 +282,11 @@ acpi_ps_get_arguments(struct acpi_walk_state *walk_state, AML_NAME_OP) && (walk_state->pass_number <= ACPI_IMODE_LOAD_PASS2)) { +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"Setup Package/Buffer: Pass %u, AML Ptr: %p\n" , + walk_state->pass_number, + aml_op_start)); +/* * Skip parsing of Buffers and Packages because we don't have * enough info in the first pass to parse them correctly.
@@ -570,6 +580,10 @@ acpi_status acpi_ps_parse_loop(struct acpi_walk_state *walk_state)/* Check for arguments that need to be processed */ +ACPI_DEBUG_PRINT ((ACPI_DB_PARSE , +"Parseloop: argument count: %u\n" , + walk_state->arg_count)); +if (walk_state->arg_count) {/* * There are arguments (complex ones), push Op and
drivers/acpi/acpica/utmisc.c +5 -3
@@ -224,7 +224,7 @@ acpi_ut_create_update_state_and_push(union acpi_operand_object *object,* * RETURN: Status * -* DESCRIPTION: Walk through a package +* DESCRIPTION: Walk through a package, including subpackages * ******************************************************************************/
@@ -236,8 +236,8 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object,acpi_status status =AE_OK ;union acpi_generic_state *state_list =NULL ;union acpi_generic_state *state; -u32 this_index;union acpi_operand_object *this_source_obj; +u32 this_index;ACPI_FUNCTION_TRACE (ut_walk_package_tree);
@@ -251,8 +251,10 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object,/* Get one element of the package */ this_index = state->pkg.index; - this_source_obj = (union acpi_operand_object *) + this_source_obj = state->pkg.source_object->package.elements[this_index]; + state->pkg.this_target_obj = + &state->pkg.source_object->package.elements[this_index];/* * Check for:
drivers/acpi/acpica/utobject.c +5 -0
@@ -483,6 +483,11 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object,/* A namespace node should never get here */ +ACPI_ERROR ((AE_INFO , +"Received a namespace node [%4.4s] " +"where an operand object is required" , + ACPI_CAST_PTR(struct acpi_namespace_node, + internal_object)->name.ascii));return_ACPI_STATUS (AE_AML_INTERNAL ); }
drivers/acpi/acpica/utstate.c +1 -1
@@ -226,7 +226,7 @@ union acpi_generic_state *acpi_ut_create_update_state(union acpi_operand_objectunion acpi_generic_state *acpi_ut_create_pkg_state (void *internal_object,void *external_object, -u16 index) +u32 index) {union acpi_generic_state *state;
drivers/acpi/acpica/uttrack.c +7 -2
@@ -591,6 +591,10 @@ void acpi_ut_dump_allocations(u32 component, const char *module) return_VOID; } +if (!acpi_gbl_global_list) { + goto exit; + } + element = acpi_gbl_global_list->list_head;while (element) { if ((element->component & component) &&
@@ -602,7 +606,7 @@ void acpi_ut_dump_allocations(u32 component, const char *module)if (element->size <sizeof (struct acpi_common_descriptor )) { -acpi_os_printf ("%p Length 0x%04X %9.9s-%u " +acpi_os_printf ("%p Length 0x%04X %9.9s-%4.4u " "[Not a Descriptor - too small]\n" , descriptor, element->size, element->module, element->line);
@@ -612,7 +616,7 @@ void acpi_ut_dump_allocations(u32 component, const char *module)if (ACPI_GET_DESCRIPTOR_TYPE (descriptor) !=ACPI_DESC_TYPE_CACHED ) {acpi_os_printf - ("%p Length 0x%04X %9.9s-%u [%s] " , + ("%p Length 0x%04X %9.9s-%4.4u [%s] " , descriptor, element->size, element->module, element->line, acpi_ut_get_descriptor_name
@@ -705,6 +709,7 @@ void acpi_ut_dump_allocations(u32 component, const char *module) element = element->next; } +exit: (void )acpi_ut_release_mutex (ACPI_MTX_MEMORY );/* Print summary */
Signature · 1 line
2.7.4
PATCH 12/15 ACPICA: Ensure all instances of AE_AML_INTERNAL have error messages
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ea9152daaec30760fa4c25285998f58233ec0db5
This exception is only meaningful with an associated error message.
--- drivers/acpi/acpica/dsfield.c | 2 ++ drivers/acpi/acpica/exmisc.c | 9 +++++++++ drivers/acpi/acpica/exoparg2.c | 3 +++ drivers/acpi/acpica/nsprepkg.c | 2 ++ drivers/acpi/acpica/utmisc.c | 2 ++ 5 files changed, 18 insertions(+)
drivers/acpi/acpica/dsfield.c +2 -0
@@ -184,6 +184,7 @@ acpi_ds_create_buffer_field(union acpi_parse_object *op,/* Execute flag should always be set when this function is entered */ if (!(walk_state->parse_flags &ACPI_PARSE_EXECUTE )) { +ACPI_ERROR ((AE_INFO ,"Parse execute mode is not set" ));return_ACPI_STATUS (AE_AML_INTERNAL ); }
@@ -556,6 +557,7 @@ acpi_ds_init_field_objects(union acpi_parse_object *op,return_ACPI_STATUS (AE_OK ); } +ACPI_ERROR ((AE_INFO ,"Parse deferred mode is not set" ));return_ACPI_STATUS (AE_AML_INTERNAL ); }
drivers/acpi/acpica/exmisc.c +9 -0
@@ -265,6 +265,8 @@ acpi_ex_do_logical_numeric_op(u16 opcode,default : +ACPI_ERROR ((AE_INFO , +"Invalid numeric logical opcode: %X" , opcode)); status =AE_AML_INTERNAL ;break ; }
@@ -345,6 +347,9 @@ acpi_ex_do_logical_op(u16 opcode,default : +ACPI_ERROR ((AE_INFO , +"Invalid object type for logical operator: %X" , + operand0->common.type)); status =AE_AML_INTERNAL ;break ; }
@@ -388,6 +393,8 @@ acpi_ex_do_logical_op(u16 opcode,default : +ACPI_ERROR ((AE_INFO , +"Invalid comparison opcode: %X" , opcode)); status =AE_AML_INTERNAL ;break ; }
@@ -456,6 +463,8 @@ acpi_ex_do_logical_op(u16 opcode,default : +ACPI_ERROR ((AE_INFO , +"Invalid comparison opcode: %X" , opcode)); status =AE_AML_INTERNAL ;break ; }
drivers/acpi/acpica/exoparg2.c +3 -0
@@ -414,6 +414,9 @@ acpi_status acpi_ex_opcode_2A_1T_1R(struct acpi_walk_state *walk_state)default : +ACPI_ERROR ((AE_INFO , +"Invalid object type: %X" , + (operand[0 ])->common.type)); status =AE_AML_INTERNAL ; goto cleanup; }
drivers/acpi/acpica/nsprepkg.c +2 -0
@@ -614,6 +614,8 @@ acpi_ns_check_package_list(struct acpi_evaluate_info *info,default :/* Should not get here, type was validated by caller */ +ACPI_ERROR ((AE_INFO ,"Invalid Package type: %X" , + package->ret_info.type));return (AE_AML_INTERNAL ); }
drivers/acpi/acpica/utmisc.c +2 -0
@@ -341,6 +341,8 @@ acpi_ut_walk_package_tree(union acpi_operand_object *source_object,/* We should never get here */ +ACPI_ERROR ((AE_INFO ,"State list did not terminate correctly" )); +return_ACPI_STATUS (AE_AML_INTERNAL ); }
Signature · 1 line
2.7.4
PATCH 13/15 ACPICA: Resources: Allow _DMA method in walk resources
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit af661c00afac7aa481a961fa48c6540a99ad64a6
The _DMA object contains a resource template, this change adds support for the walk resources function so that ACPI devices containing a _DMA object can actually parse it to detect DMA ranges for the respective bus.
--- drivers/acpi/acpica/rsxface.c | 7 ++++--- include/acpi/acnames.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-)
drivers/acpi/acpica/rsxface.c +4 -3
@@ -615,7 +615,7 @@ ACPI_EXPORT_SYMBOL(acpi_walk_resource_buffer)* device we are querying * name - Method name of the resources we want. * (METHOD_NAME__CRS, METHOD_NAME__PRS, or -* METHOD_NAME__AEI) +* METHOD_NAME__AEI or METHOD_NAME__DMA) * user_function - Called for each resource * context - Passed to user_function *
@@ -641,11 +641,12 @@ acpi_walk_resources(acpi_handle device_handle,if (!device_handle || !user_function || !name || (!ACPI_COMPARE_NAME (name,METHOD_NAME__CRS ) && !ACPI_COMPARE_NAME (name,METHOD_NAME__PRS ) && - !ACPI_COMPARE_NAME (name,METHOD_NAME__AEI ))) { + !ACPI_COMPARE_NAME (name,METHOD_NAME__AEI ) && + !ACPI_COMPARE_NAME (name,METHOD_NAME__DMA ))) {return_ACPI_STATUS (AE_BAD_PARAMETER ); } -/* Get the _CRS/_PRS/_AEI resource list */ +/* Get the _CRS/_PRS/_AEI/_DMA resource list */ buffer.length =ACPI_ALLOCATE_LOCAL_BUFFER ; status =acpi_rs_get_method_data (device_handle, name, &buffer);
include/acpi/acnames.h +1 -0
@@ -54,6 +54,7 @@#define METHOD_NAME__CLS "_CLS"#define METHOD_NAME__CRS "_CRS"#define METHOD_NAME__DDN "_DDN" +#define METHOD_NAME__DMA "_DMA"#define METHOD_NAME__HID "_HID"#define METHOD_NAME__INI "_INI"#define METHOD_NAME__PLD "_PLD"
Signature · 1 line
2.7.4
PATCH 14/15 ACPICA: Revert "Update resource descriptor handling"
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit f3300640c63df138d133740b54e2c0a1befa4086
This reverts commit c8eac10178b387f9eb1935694e509d4518da77bb.
--- drivers/acpi/acpica/utresrc.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-)
drivers/acpi/acpica/utresrc.c +5 -9
@@ -184,11 +184,9 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state,ACPI_FUNCTION_TRACE (ut_walk_aml_resources); -/* -* The absolute minimum resource template is one end_tag descriptor. -* However, we will treat a lone end_tag as just a simple buffer. -*/ -if (aml_length <=sizeof (struct aml_resource_end_tag )) { +/* The absolute minimum resource template is one end_tag descriptor */ + +if (aml_length <sizeof (struct aml_resource_end_tag )) {return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG ); }
@@ -252,10 +250,8 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state, *context = aml; } -/* -* Normal exit. Note: We allow the buffer to be larger than -* the resource template, as long as the END_TAG exists. -*/ +/* Normal exit */ +return_ACPI_STATUS (AE_OK ); }
Signature · 1 line
2.7.4
PATCH 15/15 ACPICA: Update version to 20170728
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 50f61636543a55d143c792a4814da7700a7fafc2
Version 20170728.
--- 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 0x20170629 +#define ACPI_CA_VERSION 0x20170728#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
2.7.4
Quoted 50 lines · CEST Lv Zheng
The 20170728 ACPICA kernel-resident subsystem updates are linuxized based on the linux-pm/linux-next branch.
The patchset has passed the following build/boot tests. Build tests are performed as follows:
1. i386 + allyes
2. i386 + allno
3. i386 + default + ACPI_DEBUGGER=y
4. i386 + default + ACPI_DEBUGGER=n + ACPI_DEBUG=y
5. i386 + default + ACPI_DEBUG=n + ACPI=y
6. i386 + default + ACPI=n
7.x86_64+ allyes
8.x86_64+ allno
9.x86_64+ default + ACPI_DEBUGGER=y
10.x86_64 + default + ACPI_DEBUGGER=n + ACPI_DEBUG=y 11.x86_64 + default + ACPI_DEBUG=n + ACPI=y
12.x86_64 + default + ACPI=n
Boot tests are performed as follows:
1.x86_64+ default + ACPI_DEBUGGER=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2.x86_64: machine named as "Microsoft Surface Pro 3"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All "drivers/acpi" configurations
All "drivers/platform" drivers
All other drivers that link the APIs provided by ACPICA subsystemThe divergences checking result:
Before applying (20170629 Release):
390 lines
After applying (20170728 Release):
390 linesBob Moore (8):
ACPICA: Namespace: Update/fix an error message
ACPICA: Add a comment, no functional change
ACPICA: Interpreter: Update handling for Alias operator
ACPICA: Debugger: Improve support for Alias objects
ACPICA: Implement deferred resolution of reference package elements
ACPICA: Ensure all instances ofAE_AML_INTERNALhave error messages
ACPICA: Resources: Allow_DMAmethod in walk resources
ACPICA: Update version to 20170728Erik Schmauss (1):
ACPICA: Revert "Update resource descriptor handling"James Morse (1):
ACPICA: iASL: Add support for the SDEI table
Quoted 8 lines
Lv Zheng (4):
ACPICA: Divergences: reduce access size definitions
ACPICA: CLib: Add short multiply/shift support
ACPICA: acpidump: Add DSDT/FACS instance support for Linux and EFI
ACPICA: EFI/EDK2: Cleanup to enable /WX for MSVC buildsShao Ming (1):
ACPICA: EFI/EDK2: Sortacpi.hinclusion order
All applied, thanks!