ACPICA 20170531 Release
Subsystems (6)
cover ACPICA 20170531 Release
The 20170531 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 (20170303 Release):
369 lines
After applying (20170531 Release):
369 lines
Bob Moore (26):
ACPICA: Add new notify value for memory attributes update
ACPICA: Added two new UUID values
ACPICA: Utilities: Make a notify value reserved
ACPICA: Update Status field for BGRT table
ACPICA: Add new notify value for HEST table
ACPICA: Add new flags to HEST subtables
ACPICA: Add support for new HEST subtable
ACPICA: Add support for new SRAT subtable
ACPICA: Add header support for TPM2 table changes
ACPICA: Fix a type value overlap in the AML support file
ACPICA: Update error message for field beyond buffer case
ACPICA: Debugger/acpiexec: Cleanup error messages
ACPICA: Disassembler: Abort on an invalid/unknown AML opcode
ACPICA: Export the public mutex interfaces
ACPICA: Remove extraneous status check
ACPICA: Update resource descriptor handling
ACPICA: Split resource descriptor decode strings to a new file
ACPICA: Comment update: spelling/format. No functional change
ACPICA: Fix for Device/Thermal objects with ObjectType and DerefOf
ACPICA: Update two error messages to emit control method name
ACPICA: Improvements for debug output only
ACPICA: Unix application OSL: Correctly handle control-c (EINTR)
ACPICA: Simplify output for the ACPI Debug Object
ACPICA: acpiexec: enhance local signal handler
ACPICA: Update a couple of debug output messages
ACPICA: Update version to 20170531
Cao Jin (1):
ACPICA: Update comments, no functional change
David E. Box (2):
ACPICA: disassembler: improve Switch support
ACPICA: Add support for new PCCT subtables
Erik Schmauss (11):
ACPICA: Change path's type from u8* to char*
ACPICA: Add support for _LSI as a predefined method
ACPICA: Add support for _LSR as a predefined method
ACPICA: Add support for _LSW as a predefined method
ACPICA: Add support for _HMA as a predefined method
ACPICA: Explicitly cast 1 to u32
ACPICA: Changing External to a named object
ACPICA: Changed Gbl_disasm_flag to acpi_gbl_disasm_flag
ACPICA: Disassembler: prevent external op's from opening a new scope
ACPICA: Disassembler: add external op to namespace on first pass
ACPICA: Disassembler: allow conflicting external declarations to be
emitted.
Janosch Hildebrand (1):
ACPICA: Tables: Fix defined values for MADT PCAT_COMPAT flag
Lv Zheng (6):
ACPICA: Tables: Add WSMT support
ACPICA: Tables: Add HMAT table definitions
ACPICA: Tables: Add PPTT table definitions
ACPICA: OSL: Add support to exclude stdarg.h
ACPICA: Events: Add runtime stub support for event APIs
ACPICA: Dispatcher: Remove unnecessary call to debugger
Mika Westerberg (6):
ACPICA: ACPI 6.2: Add support for PinFunction() resource
ACPICA: ACPI 6.2: Add support for PinConfig() resource
ACPICA: ACPI 6.2: Add support for PinGroup() resource
ACPICA: ACPI 6.2: Add support for PinGroupFunction() resource
ACPICA: ACPI 6.2: Add support for PinGroupConfig() resource
ACPICA: Core: Always set GPIO VendorOffset
drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/acapps.h | 4 +- drivers/acpi/acpica/acglobal.h | 3 + drivers/acpi/acpica/aclocal.h | 15 +- drivers/acpi/acpica/acopcode.h | 2 +- drivers/acpi/acpica/acpredef.h | 16 + drivers/acpi/acpica/acresrc.h | 15 +- drivers/acpi/acpica/acutils.h | 1 + drivers/acpi/acpica/amlcode.h | 61 ++-- drivers/acpi/acpica/amlresrc.h | 104 ++++++ drivers/acpi/acpica/dbexec.c | 12 + drivers/acpi/acpica/dbobject.c | 6 +- drivers/acpi/acpica/dbxface.c | 2 +- drivers/acpi/acpica/dsargs.c | 5 +- drivers/acpi/acpica/dsdebug.c | 1 + drivers/acpi/acpica/dsmethod.c | 12 +- drivers/acpi/acpica/dsopcode.c | 11 +- drivers/acpi/acpica/dsutils.c | 9 - drivers/acpi/acpica/dswexec.c | 4 +- drivers/acpi/acpica/dswload.c | 42 ++- drivers/acpi/acpica/dswload2.c | 16 + drivers/acpi/acpica/evxfevnt.c | 18 + drivers/acpi/acpica/exdebug.c | 4 +- drivers/acpi/acpica/exdump.c | 30 +- drivers/acpi/acpica/exoparg1.c | 25 +- drivers/acpi/acpica/exresolv.c | 23 +- drivers/acpi/acpica/nsaccess.c | 27 ++ drivers/acpi/acpica/nsnames.c | 3 - drivers/acpi/acpica/nsutils.c | 2 +- drivers/acpi/acpica/nsxfeval.c | 39 ++- drivers/acpi/acpica/psobject.c | 14 + drivers/acpi/acpica/psopcode.c | 8 +- drivers/acpi/acpica/psparse.c | 14 +- drivers/acpi/acpica/rscalc.c | 139 ++++++++ drivers/acpi/acpica/rsdump.c | 48 +++ drivers/acpi/acpica/rsdumpinfo.c | 114 +++++++ drivers/acpi/acpica/rsinfo.c | 28 +- drivers/acpi/acpica/rsmisc.c | 4 +- drivers/acpi/acpica/rsserial.c | 373 +++++++++++++++++++++ drivers/acpi/acpica/tbfadt.c | 4 +- drivers/acpi/acpica/tbutils.c | 6 +- drivers/acpi/acpica/utdecode.c | 8 +- drivers/acpi/acpica/utownerid.c | 12 +- drivers/acpi/acpica/utresdecode.c | 315 +++++++++++++++++ drivers/acpi/acpica/utresrc.c | 273 ++------------- drivers/acpi/acpica/utxfmutex.c | 5 +- drivers/char/tpm/tpm_crb.c | 4 +- drivers/mailbox/pcc.c | 10 +- include/acpi/acpixf.h | 2 +- include/acpi/acrestyp.h | 92 ++++- include/acpi/actbl1.h | 238 ++++++++++++- include/acpi/actbl2.h | 59 +++- include/acpi/actbl3.h | 82 ++++- include/acpi/actypes.h | 67 ++-- include/acpi/acuuid.h | 5 + include/acpi/platform/acgcc.h | 10 + include/acpi/platform/acintel.h | 2 + .../acpi/os_specific/service_layers/osunixxf.c | 10 +- 58 files changed, 2025 insertions(+), 434 deletions(-) create mode 100644 drivers/acpi/acpica/utresdecode.c
Signature · 1 line
2.7.4
PATCH 1/53 ACPICA: Change path's type from u8* to char*
From: Erik Schmauss <[email protected]>
ACPICA commit 51e73c1d35dd21cfe39277b3c71decd3268f669c
All instances using a named parseOp's path field has a type cast from u8* to char*. Changing path's type from u8* to char* eliminates type casting and retains the previous behavior.
--- drivers/acpi/acpica/aclocal.h | 2 +- drivers/acpi/acpica/dswload.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/aclocal.h +1 -1
@@ -859,7 +859,7 @@ ACPI_PARSE_COMMON};* and bytelists. */ struct acpi_parse_obj_named { - ACPI_PARSE_COMMON u8 *path; + ACPI_PARSE_COMMON char *path;u8 *data;/* AML body or bytelist data */ u32 length;/* AML length */ u32 name;/* 4-byte name or zero if no name */
drivers/acpi/acpica/dswload.c +1 -1
@@ -397,7 +397,7 @@ acpi_ds_load1_begin_op(struct acpi_walk_state *walk_state,/* Initialize the op */ #if (defined (ACPI_NO_METHOD_EXECUTION ) || defined (ACPI_CONSTANT_EVAL_ONLY )) - op->named.path =ACPI_CAST_PTR (u8, path); + op->named.path = path;#endif if (node) {
Signature · 1 line
2.7.4
PATCH 2/53 ACPICA: Tables: Add WSMT support
In reply to Lv ZhengACPICA commit 4f12387029c6a561e7792f53caf2e7f1f0ab2bbe
This patch adds WSMT support, the table can be found at Line [#1]. The support includes table structure definitions (ACPICA tables) and assembly/disassembly (iasl) support. Lv Zheng.
--- include/acpi/actbl2.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
include/acpi/actbl2.h +22 -0
@@ -87,6 +87,7 @@#define ACPI_SIG_WDAT "WDAT"/* Watchdog Action Table */ #define ACPI_SIG_WDDT "WDDT"/* Watchdog Timer Description Table */ #define ACPI_SIG_WDRT "WDRT"/* Watchdog Resource Table */ +#define ACPI_SIG_WSMT "WSMT"/* Windows SMM Security Migrations Table */ #define ACPI_SIG_XXXX "XXXX"/* Intermediate AML header for ASL/ASL+ converter */ #ifdef ACPI_UNDEFINED_TABLES
@@ -1498,6 +1499,27 @@ struct acpi_table_wdrt {u8 units; }; +/******************************************************************************* +* +* WSMT - Windows SMM Security Migrations Table +* Version 1 +* +* Conforms to "Windows SMM Security Migrations Table", +* Version 1.0, April 18, 2016 +* +******************************************************************************/ + +struct acpi_table_wsmt { +struct acpi_table_header header;/* Common ACPI table header */ +u32 protection_flags; +}; + +/* Flags for protection_flags field above */ + +#define ACPI_WSMT_FIXED_COMM_BUFFERS (1) +#define ACPI_WSMT_COMM_BUFFER_NESTED_PTR_PROTECTION (2) +#define ACPI_WSMT_SYSTEM_RESOURCE_PROTECTION (4) +/* Reset to default packing */ #pragma pack()
Signature · 1 line
2.7.4
PATCH 3/53 ACPICA: Tables: Add HMAT table definitions
In reply to Lv ZhengACPICA commit 3dae756631c8c2baddfa19f43a379aee42b28312
This patch adds unified HMAT table structure definitions so that ACPICA users can develop HMAT related OS features based on the ACPICA standard structures. Lv Zheng.
--- include/acpi/actbl1.h | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+)
include/acpi/actbl1.h +117 -0
@@ -65,6 +65,7 @@#define ACPI_SIG_ECDT "ECDT"/* Embedded Controller Boot Resources Table */ #define ACPI_SIG_EINJ "EINJ"/* Error Injection table */ #define ACPI_SIG_ERST "ERST"/* Error Record Serialization Table */ +#define ACPI_SIG_HMAT "HMAT"/* Heterogeneous Memory Attributes Table */ #define ACPI_SIG_HEST "HEST"/* Hardware Error Source Table */ #define ACPI_SIG_MADT "APIC"/* Multiple APIC Description Table */ #define ACPI_SIG_MSCT "MSCT"/* Maximum System Characteristics Table */
@@ -688,6 +689,122 @@ struct acpi_hest_generic_data_v300 {/******************************************************************************* * +* HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2) +* Version 1 +* +******************************************************************************/ + +struct acpi_table_hmat { +struct acpi_table_header header;/* Common ACPI table header */ +u32 reserved; +}; + +/* Values for HMAT structure types */ + +enum acpi_hmat_type { +ACPI_HMAT_TYPE_ADDRESS_RANGE =0 ,/* Memory subystem address range */ +ACPI_HMAT_TYPE_LOCALITY =1 ,/* System locality latency and bandwidth information */ +ACPI_HMAT_TYPE_CACHE =2 ,/* Memory side cache information */ +ACPI_HMAT_TYPE_RESERVED =3 /* 3 and greater are reserved */ +}; + +struct acpi_hmat_structure { +u16 type; +u16 reserved; +u32 length; +}; + +/* +* HMAT Structures, correspond to Type in struct acpi_hmat_structure +*/ + +/* 0: Memory subystem address range */ + +struct acpi_hmat_address_range { +struct acpi_hmat_structure header; +u16 flags; +u16 reserved1; +u32 processor_PD;/* Processor proximity domain */ +u32 memory_PD;/* Memory proximity domain */ +u32 reserved2; +u64 physical_address_base;/* Physical address range base */ +u64 physical_address_length;/* Physical address range length */ +}; + +/* Masks for Flags field above */ + +#define ACPI_HMAT_PROCESSOR_PD_VALID (1)/* 1: processor_PD field is valid */ +#define ACPI_HMAT_MEMORY_PD_VALID (1<<1)/* 1: memory_PD field is valid */ +#define ACPI_HMAT_RESERVATION_HINT (1<<2)/* 1: Reservation hint */ + +/* 1: System locality latency and bandwidth information */ + +struct acpi_hmat_locality { +struct acpi_hmat_structure header; +u8 flags; +u8 data_type; +u16 reserved1; +u32 number_of_initiator_Pds; +u32 number_of_target_Pds; +u32 reserved2; +u64 entry_base_unit; +}; + +/* Masks for Flags field above */ + +#define ACPI_HMAT_MEMORY_HIERARCHY (0x0F) + +/* Values for Memory Hierarchy flag */ + +#define ACPI_HMAT_MEMORY 0 +#define ACPI_HMAT_LAST_LEVEL_CACHE 1 +#define ACPI_HMAT_1ST_LEVEL_CACHE 2 +#define ACPI_HMAT_2ND_LEVEL_CACHE 3 +#define ACPI_HMAT_3RD_LEVEL_CACHE 4 + +/* Values for data_type field above */ + +#define ACPI_HMAT_ACCESS_LATENCY 0 +#define ACPI_HMAT_READ_LATENCY 1 +#define ACPI_HMAT_WRITE_LATENCY 2 +#define ACPI_HMAT_ACCESS_BANDWIDTH 3 +#define ACPI_HMAT_READ_BANDWIDTH 4 +#define ACPI_HMAT_WRITE_BANDWIDTH 5 + +/* 2: Memory side cache information */ + +struct acpi_hmat_cache { +struct acpi_hmat_structure header; +u32 memory_PD; +u32 reserved1; +u64 cache_size; +u32 cache_attributes; +u16 reserved2; +u16 number_of_SMBIOShandles; +}; + +/* Masks for cache_attributes field above */ + +#define ACPI_HMAT_TOTAL_CACHE_LEVEL (0x0000000F) +#define ACPI_HMAT_CACHE_LEVEL (0x000000F0) +#define ACPI_HMAT_CACHE_ASSOCIATIVITY (0x00000F00) +#define ACPI_HMAT_WRITE_POLICY (0x0000F000) +#define ACPI_HMAT_CACHE_LINE_SIZE (0xFFFF0000) + +/* Values for cache associativity flag */ + +#define ACPI_HMAT_CA_NONE (0) +#define ACPI_HMAT_CA_DIRECT_MAPPED (1) +#define ACPI_HMAT_CA_COMPLEX_CACHE_INDEXING (2) + +/* Values for write policy flag */ + +#define ACPI_HMAT_CP_NONE (0) +#define ACPI_HMAT_CP_WB (1) +#define ACPI_HMAT_CP_WT (2) + +/******************************************************************************* +* * MADT - Multiple APIC Description Table * Version 3 *
Signature · 1 line
2.7.4
PATCH 4/53 ACPICA: Add new notify value for memory attributes update
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit d37e878292bc9c7835b74e90d1c4c79e96ce6652
For ACPI 6.2
--- drivers/acpi/acpica/utdecode.c | 4 +++- include/acpi/actypes.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-)
drivers/acpi/acpica/utdecode.c +3 -1
@@ -462,7 +462,9 @@ static const char *acpi_gbl_generic_notify[ACPI_GENERIC_NOTIFY_MAX + 1] = {/* 0B */ "System Locality Update" ,/* 0C */ "Shutdown Request" ,/* Reserved in ACPI 6.0 */ -/* 0D */ "System Resource Affinity Update" +/* 0D */ "System Resource Affinity Update" , +/* 0E */ "Heterogeneous Memory Attributes Update" +/* ACPI 6.2 */ }; static const char *acpi_gbl_device_notify[5] = {
include/acpi/actypes.h +2 -1
@@ -629,8 +629,9 @@ typedef u64 acpi_integer;#define ACPI_NOTIFY_LOCALITY_UPDATE (u8) 0x0B#define ACPI_NOTIFY_SHUTDOWN_REQUEST (u8) 0x0C#define ACPI_NOTIFY_AFFINITY_UPDATE (u8) 0x0D +#define ACPI_NOTIFY_MEMORY_UPDATE (u8) 0x0E -#define ACPI_GENERIC_NOTIFY_MAX 0x0D +#define ACPI_GENERIC_NOTIFY_MAX 0x0E#define ACPI_SPECIFIC_NOTIFY_MAX 0x84/*
Signature · 1 line
2.7.4
PATCH 5/53 ACPICA: Added two new UUID values
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit a0168a7aca421d195e1c2b609279fa4a967dd3ac
Processor Properties. ACPI 6.2
--- include/acpi/acuuid.h | 5 +++++ 1 file changed, 5 insertions(+)
include/acpi/acuuid.h +5 -0
@@ -78,6 +78,11 @@#define UUID_PERSISTENT_VIRTUAL_DISK "5cea02c9-4d07-69d3-269f-4496fbe096f9"#define UUID_PERSISTENT_VIRTUAL_CD "08018188-42cd-bb48-100f-5387d53ded3d" +/* Processor Properties (ACPI 6.2) */ + +#define UUID_CACHE_PROPERTIES "6DC63E77-257E-4E78-A973-A21F2796898D" +#define UUID_PHYSICAL_PROPERTY "DDE4D59A-AA42-4349-B407-EA40F57D9FB7" +/* Miscellaneous */ #define UUID_PLATFORM_CAPABILITIES "0811b06e-4a27-44f9-8d60-3cbbc22e7b48"
Signature · 1 line
2.7.4
PATCH 6/53 ACPICA: Utilities: Make a notify value reserved
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 54eb9be35414847da7e2903c8d410fa806b44fb5
0x0C (Graceful shutdown) is now reverted to reserved. 0x81 takes the place of this value.
--- drivers/acpi/acpica/utdecode.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/utdecode.c +2 -2
@@ -460,8 +460,8 @@ static const char *acpi_gbl_generic_notify[ACPI_GENERIC_NOTIFY_MAX + 1] = {/* 09 */ "Device PLD Check" ,/* 0A */ "Reserved" ,/* 0B */ "System Locality Update" , -/* 0C */ "Shutdown Request" , -/* Reserved in ACPI 6.0 */ +/* 0C */ "Reserved (was previously Shutdown Request)" , +/* Reserved in ACPI 6.0 */ /* 0D */ "System Resource Affinity Update" ,/* 0E */ "Heterogeneous Memory Attributes Update" /* ACPI 6.2 */
Signature · 1 line
2.7.4
PATCH 7/53 ACPICA: Update Status field for BGRT table
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit dbc6a3d5ff22df730cc81802af0422bb64b19347
Orientation flags added. ACPI 6.2
--- include/acpi/actbl3.h | 5 +++++ 1 file changed, 5 insertions(+)
include/acpi/actbl3.h +5 -0
@@ -116,6 +116,11 @@ struct acpi_table_bgrt {u32 image_offset_y; }; +/* Flags for Status field above */ + +#define ACPI_BGRT_DISPLAYED (1) +#define ACPI_BGRT_ORIENTATION_OFFSET (3 << 1) +/******************************************************************************* * * DRTM - Dynamic Root of Trust for Measurement table
Signature · 1 line
2.7.4
PATCH 8/53 ACPICA: Tables: Fix defined values for MADT PCAT_COMPAT flag
In reply to Lv ZhengFrom: Janosch Hildebrand <[email protected]>
ACPICA commit c0292548a43bdc5d83d5be2953b663e60b6f12b4
fixes #224
--- include/acpi/actbl1.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
include/acpi/actbl1.h +2 -2
@@ -822,8 +822,8 @@ struct acpi_table_madt {/* Values for PCATCompat flag */ -#define ACPI_MADT_DUAL_PIC 0 -#define ACPI_MADT_MULTIPLE_APIC 1 +#define ACPI_MADT_DUAL_PIC 1 +#define ACPI_MADT_MULTIPLE_APIC 0/* Values for MADT subtable type in struct acpi_subtable_header */
Signature · 1 line
2.7.4
PATCH 9/53 ACPICA: Add support for _LSI as a predefined method
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit f2f3813fb6b6a6ec1f406f05061c0e9270e86146
--- drivers/acpi/acpica/acpredef.h | 4 ++++ 1 file changed, 4 insertions(+)
drivers/acpi/acpica/acpredef.h +4 -0
@@ -626,6 +626,10 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { ACPI_RTYPE_INTEGER | ACPI_RTYPE_BUFFER | ACPI_RTYPE_STRING, 10, 0), + {{"_LSI" ,METHOD_0ARGS , + METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, + PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0, 0, 0), + {{"_MAT" ,METHOD_0ARGS , METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
Signature · 1 line
2.7.4
PATCH 10/53 ACPICA: Add support for _LSR as a predefined method
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 89020347ada3f0ff5499a804178d574359e4730f
--- drivers/acpi/acpica/acpredef.h | 5 +++++ 1 file changed, 5 insertions(+)
drivers/acpi/acpica/acpredef.h +5 -0
@@ -630,6 +630,11 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 3, 0, 0, 0), + {{"_LSR" ,METHOD_2ARGS (ACPI_TYPE_INTEGER ,ACPI_TYPE_INTEGER ), + METHOD_RETURNS(ACPI_RTYPE_PACKAGE)}}, + PACKAGE_INFO(ACPI_PTYPE1_FIXED, ACPI_RTYPE_INTEGER, 1, + ACPI_RTYPE_BUFFER, 1, 0), + {{"_MAT" ,METHOD_0ARGS , METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
Signature · 1 line
2.7.4
PATCH 11/53 ACPICA: Add support for _LSW as a predefined method
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 8e425bdd9fa27264c217a3a449eb3c2da3769542
--- drivers/acpi/acpica/acpredef.h | 4 ++++ 1 file changed, 4 insertions(+)
drivers/acpi/acpica/acpredef.h +4 -0
@@ -635,6 +635,10 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = {PACKAGE_INFO (ACPI_PTYPE1_FIXED ,ACPI_RTYPE_INTEGER ,1 ,ACPI_RTYPE_BUFFER ,1 ,0 ), + {{"_LSW", +METHOD_3ARGS (ACPI_TYPE_INTEGER ,ACPI_TYPE_INTEGER ,ACPI_TYPE_BUFFER ), + METHOD_RETURNS(ACPI_RTYPE_INTEGER)}}, + {{"_MAT", METHOD_0ARGS, METHOD_RETURNS(ACPI_RTYPE_BUFFER)}},
Signature · 1 line
2.7.4
PATCH 12/53 ACPICA: Add support for _HMA as a predefined method
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 223a647c72243359231865a64c1be04d208dcdbd
--- drivers/acpi/acpica/acpredef.h | 3 +++ 1 file changed, 3 insertions(+)
drivers/acpi/acpica/acpredef.h +3 -0
@@ -581,6 +581,9 @@ const union acpi_predefined_info acpi_gbl_predefined_methods[] = { {{"_HID" ,METHOD_0ARGS , METHOD_RETURNS(ACPI_RTYPE_INTEGER | ACPI_RTYPE_STRING)}}, + {{"_HMA" ,METHOD_0ARGS , + METHOD_RETURNS(ACPI_RTYPE_BUFFER)}}, + {{"_HOT" ,METHOD_0ARGS , METHOD_RETURNS(ACPI_RTYPE_INTEGER)}},
Signature · 1 line
2.7.4
PATCH 13/53 ACPICA: Add new notify value for HEST table
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 35e06462f3186e1e6e9cb4fe97dfb43d4b3718a2
"Software Delegated Exception" - ACPI 6.2
--- include/acpi/actbl1.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/acpi/actbl1.h +2 -1
@@ -514,7 +514,8 @@ enum acpi_hest_notify_types {ACPI_HEST_NOTIFY_SEA =8 ,/* ACPI 6.1 */ ACPI_HEST_NOTIFY_SEI =9 ,/* ACPI 6.1 */ ACPI_HEST_NOTIFY_GSIV =10 ,/* ACPI 6.1 */ - ACPI_HEST_NOTIFY_RESERVED = 11 /* 11 and greater are reserved */ +ACPI_HEST_NOTIFY_SOFTWARE_DELEGATED =11 ,/* ACPI 6.2 */ + ACPI_HEST_NOTIFY_RESERVED = 12 /* 12 and greater are reserved */ };/* Values for config_write_enable bitfield above */
Signature · 1 line
2.7.4
PATCH 14/53 ACPICA: Tables: Add PPTT table definitions
In reply to Lv ZhengACPICA commit c27465d07fd008ba71c1f687b2715267701bc8ad
This patch adds PPTT (Processor Properties Topology Table, defined in ACPI spec 6.2) support in ACPICA core, including table definitions expressed in C structures and macros. Lv Zheng.
--- include/acpi/actbl1.h | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+)
include/acpi/actbl1.h +80 -0
@@ -69,6 +69,7 @@#define ACPI_SIG_HEST "HEST"/* Hardware Error Source Table */ #define ACPI_SIG_MADT "APIC"/* Multiple APIC Description Table */ #define ACPI_SIG_MSCT "MSCT"/* Maximum System Characteristics Table */ +#define ACPI_SIG_PPTT "PPTT"/* Processor Properties Topology Table */ #define ACPI_SIG_SBST "SBST"/* Smart Battery Specification Table */ #define ACPI_SIG_SLIT "SLIT"/* System Locality Distance Information Table */ #define ACPI_SIG_SRAT "SRAT"/* System Resource Affinity Table */
@@ -1265,6 +1266,85 @@ struct acpi_nfit_flush_address {/******************************************************************************* * +* PPTT - Processor Properties Topology Table (ACPI 6.2) +* Version 1 +* +******************************************************************************/ + +struct acpi_table_pptt { +struct acpi_table_header header;/* Common ACPI table header */ +}; + +/* Values for Type field above */ + +enum acpi_pptt_type { +ACPI_PPTT_TYPE_PROCESSOR =0 , +ACPI_PPTT_TYPE_CACHE =1 , +ACPI_PPTT_TYPE_ID =2 , +ACPI_PPTT_TYPE_RESERVED =3 +}; + +/* 0: Processor Hierarchy Node Structure */ + +struct acpi_pptt_processor { +struct acpi_subtable_header header; +u16 reserved; +u32 flags; +u32 parent; +u32 acpi_processor_id; +u32 number_of_priv_resources; +}; + +/* Flags */ + +#define ACPI_PPTT_PHYSICAL_PACKAGE (1)/* Physical package */ +#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (2)/* ACPI Processor ID valid */ + +/* 1: Cache Type Structure */ + +struct acpi_pptt_cache { +struct acpi_subtable_header header; +u16 reserved; +u32 flags; +u32 next_level_of_cache; +u32 size; +u32 number_of_sets; +u8 associativity; +u8 attributes; +u16 line_size; +}; + +/* Flags */ + +#define ACPI_PPTT_SIZE_PROPERTY_VALID (1)/* Physical property valid */ +#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1)/* Number of sets valid */ +#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2)/* Associativity valid */ +#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3)/* Allocation type valid */ +#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4)/* Cache type valid */ +#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5)/* Write policy valid */ +#define ACPI_PPTT_LINE_SIZE_VALID (1<<6)/* Line size valid */ + +/* Masks for Attributes */ + +#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03)/* Allocation type */ +#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C)/* Cache type */ +#define ACPI_PPTT_MASK_WRITE_POLICY (0x10)/* Write policy */ + +/* 2: ID Structure */ + +struct acpi_pptt_id { +struct acpi_subtable_header header; +u16 reserved; +u32 vendor_id; +u64 level1_id; +u64 level2_id; +u16 major_rev; +u16 minor_rev; +u16 spin_rev; +}; + +/******************************************************************************* +* * SBST - Smart Battery Specification Table * Version 1 *
Signature · 1 line
2.7.4
PATCH 15/53 ACPICA: Add new flags to HEST subtables
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit c2c3807adb8a67e6462b731dc64be35d8b8317f8
Add GHES_ASSIST flag for ACPI 6.2
Add missing GLOBAL flag for AER structures
--- include/acpi/actbl1.h | 1 + 1 file changed, 1 insertion(+)
include/acpi/actbl1.h +1 -0
@@ -478,6 +478,7 @@ struct acpi_hest_aer_common {#define ACPI_HEST_FIRMWARE_FIRST (1)#define ACPI_HEST_GLOBAL (1<<1) +#define ACPI_HEST_GHES_ASSIST (1<<2)/* * Macros to access the bus/segment numbers in Bus field above:
Signature · 1 line
2.7.4
PATCH 16/53 ACPICA: Add support for new HEST subtable
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit a1f1056c9e44fd3de8cad3bde89cda5cbb2df466
IA-32 Deferred Machine Check (ACPI 6.2)
--- include/acpi/actbl1.h | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-)
include/acpi/actbl1.h +18 -3
@@ -432,7 +432,8 @@ enum acpi_hest_types {ACPI_HEST_TYPE_AER_BRIDGE =8 ,ACPI_HEST_TYPE_GENERIC_ERROR =9 ,ACPI_HEST_TYPE_GENERIC_ERROR_V2 =10 , - ACPI_HEST_TYPE_RESERVED = 11 /* 11 and greater are reserved */ +ACPI_HEST_TYPE_IA32_DEFERRED_CHECK =11 , + ACPI_HEST_TYPE_RESERVED = 12 /* 12 and greater are reserved */ };/*
@@ -538,7 +539,7 @@ enum acpi_hest_notify_types {struct acpi_hest_ia_machine_check {struct acpi_hest_header header;u16 reserved1; -u8 flags; +u8 flags;/* See flags ACPI_HEST_GLOBAL, etc. above */ u8 enabled;u32 records_to_preallocate;u32 max_sections_per_record;
@@ -553,7 +554,7 @@ struct acpi_hest_ia_machine_check {struct acpi_hest_ia_corrected {struct acpi_hest_header header;u16 reserved1; -u8 flags; +u8 flags;/* See flags ACPI_HEST_GLOBAL, etc. above */ u8 enabled;u32 records_to_preallocate;u32 max_sections_per_record;
@@ -690,6 +691,20 @@ struct acpi_hest_generic_data_v300 {#define ACPI_HEST_GEN_VALID_FRU_STRING (1<<1)#define ACPI_HEST_GEN_VALID_TIMESTAMP (1<<2) +/* 11: IA32 Deferred Machine Check Exception (ACPI 6.2) */ + +struct acpi_hest_ia_deferred_check { +struct acpi_hest_header header; +u16 reserved1; +u8 flags;/* See flags ACPI_HEST_GLOBAL, etc. above */ +u8 enabled; +u32 records_to_preallocate; +u32 max_sections_per_record; +struct acpi_hest_notify notify; +u8 num_hardware_banks; +u8 reserved2[3 ]; +}; +/******************************************************************************* * * HMAT - Heterogeneous Memory Attributes Table (ACPI 6.2)
Signature · 1 line
2.7.4
PATCH 17/53 ACPICA: Add support for new SRAT subtable
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 5bc67f63918da249bfe279ee461d152bb3e6f55b
GIC ITS Affinity (ACPI 6.2)
--- include/acpi/actbl1.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
include/acpi/actbl1.h +11 -1
@@ -1406,7 +1406,8 @@ enum acpi_srat_type {ACPI_SRAT_TYPE_MEMORY_AFFINITY =1 ,ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY =2 ,ACPI_SRAT_TYPE_GICC_AFFINITY =3 , - ACPI_SRAT_TYPE_RESERVED = 4 /* 4 and greater are reserved */ +ACPI_SRAT_TYPE_GIC_ITS_AFFINITY =4 ,/* ACPI 6.2 */ + ACPI_SRAT_TYPE_RESERVED = 5 /* 5 and greater are reserved */ };/*
@@ -1478,6 +1479,15 @@ struct acpi_srat_gicc_affinity {#define ACPI_SRAT_GICC_ENABLED (1)/* 00: Use affinity structure */ +/* 4: GCC ITS Affinity (ACPI 6.2) */ + +struct acpi_srat_gic_its_affinity { +struct acpi_subtable_header header; +u32 proximity_domain; +u16 reserved; +u32 its_id; +}; +/* Reset to default packing */ #pragma pack()
Signature · 1 line
2.7.4
PATCH 18/53 ACPICA: disassembler: improve Switch support
In reply to Lv ZhengFrom: "David E. Box" <[email protected]>
ACPICA commit 3c36625deffdfb034378b1793e2ead9c8fdd767e
Changes the resource descriptor parse tree walk to a general preprocessing walk and calls the Switch conversion code from here. Move Switch code to new dmswitch.c file. Also improves algorithm to handle multiple levels of Switch statements and perform legacy disassembly for older or otherwise non-spec compliant Switch implementations.
--- drivers/acpi/acpica/acapps.h | 4 ++-- drivers/acpi/acpica/acglobal.h | 1 + drivers/acpi/acpica/aclocal.h | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-)
drivers/acpi/acpica/acapps.h +2 -2
@@ -158,8 +158,8 @@ acpi_dm_finish_namespace_load(union acpi_parse_object *parse_tree_root, acpi_owner_id owner_id);void -acpi_dm_convert_resource_indexes (union acpi_parse_object *parse_tree_root, -struct acpi_namespace_node *namespace_root); +acpi_dm_convert_parse_objects (union acpi_parse_object *parse_tree_root, +struct acpi_namespace_node *namespace_root);/* * adfile
drivers/acpi/acpica/acglobal.h +1 -0
@@ -315,6 +315,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_force_aml_disassembly, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_dm_opt_verbose, TRUE);ACPI_INIT_GLOBAL (u8, acpi_gbl_dm_emit_external_opcodes, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_do_disassembler_optimizations, TRUE); +ACPI_INIT_GLOBAL (ACPI_PARSE_OBJECT_LIST , *acpi_gbl_temp_list_head,NULL );ACPI_GLOBAL (u8, acpi_gbl_dm_opt_disasm);ACPI_GLOBAL (u8, acpi_gbl_dm_opt_listing);
drivers/acpi/acpica/aclocal.h +5 -0
@@ -1182,6 +1182,11 @@ struct acpi_external_file {struct acpi_external_file *next; }; +struct acpi_parse_object_list { +union acpi_parse_object *op; +struct acpi_parse_object_list *next; +}; +/***************************************************************************** * * Debugger
Signature · 1 line
2.7.4
PATCH 19/53 ACPICA: Add header support for TPM2 table changes
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit b922ecaf9053dae3b8933664e951ed1ee8f86f07
Update to new version of the TCG/ACPI spec. Does not include table compiler or disassembler support.
--- drivers/char/tpm/tpm_crb.c | 4 ++-- include/acpi/actbl2.h | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-)
drivers/char/tpm/tpm_crb.c +2 -2
@@ -564,12 +564,12 @@ static int crb_acpi_add(struct acpi_device *device) sm == ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD) priv->flags |= CRB_FL_ACPI_START; -if (sm ==ACPI_TPM2_COMMAND_BUFFER_WITH_SMC ) { +if (sm ==ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC ) {if (buf->header.length < (sizeof (*buf) +sizeof (*crb_smc))) {dev_err (dev,FW_BUG "TPM2 ACPI table has wrong size %u for start method type %d\n" , buf->header.length, -ACPI_TPM2_COMMAND_BUFFER_WITH_SMC ); +ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC );return -EINVAL ; } crb_smc = ACPI_ADD_PTR(struct tpm2_crb_smc, buf, sizeof(*buf));
include/acpi/actbl2.h +34 -3
@@ -1221,7 +1221,8 @@ enum acpi_spmi_interface_types {* Version 2 * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", -* December 19, 2014 +* Version 1.2, Revision 8 +* February 27, 2017 * * NOTE: There are two versions of the table with the same signature -- * the client version and the server version. The common platform_class
@@ -1284,7 +1285,8 @@ struct acpi_table_tcpa_server {* Version 4 * * Conforms to "TCG ACPI Specification, Family 1.2 and 2.0", -* December 19, 2014 +* Version 1.2, Revision 8 +* February 27, 2017 * ******************************************************************************/
@@ -1305,7 +1307,36 @@ struct acpi_table_tpm2 {#define ACPI_TPM2_MEMORY_MAPPED 6#define ACPI_TPM2_COMMAND_BUFFER 7#define ACPI_TPM2_COMMAND_BUFFER_WITH_START_METHOD 8 -#define ACPI_TPM2_COMMAND_BUFFER_WITH_SMC 11 +#define ACPI_TPM2_COMMAND_BUFFER_WITH_ARM_SMC 11/* V1.2 Rev 8 */ + +/* Trailer appears after any start_method subtables */ + +struct acpi_tpm2_trailer { +u32 minimum_log_length;/* Minimum length for the event log area */ +u64 log_address;/* Address of the event log area */ +}; + +/* +* Subtables (start_method-specific) +*/ + +/* 11: Start Method for ARM SMC (V1.2 Rev 8) */ + +struct acpi_tpm2_arm_smc { +u32 global_interrupt; +u8 interrupt_flags; +u8 operation_flags; +u16 reserved; +u32 function_id; +}; + +/* Values for interrupt_flags above */ + +#define ACPI_TPM2_INTERRUPT_SUPPORT (1) + +/* Values for operation_flags above */ + +#define ACPI_TPM2_IDLE_SUPPORT (1)/******************************************************************************* *
Signature · 1 line
2.7.4
PATCH 20/53 ACPICA: Add support for new PCCT subtables
In reply to Lv ZhengFrom: "David E. Box" <[email protected]>
ACPICA commit e7b817e3c405a4fb9ae9ee7ae4992b8c1f20d284
Extended PCC Subspaces (types 3 and 4)
--- drivers/mailbox/pcc.c | 10 +++---- include/acpi/actbl3.h | 77 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 77 insertions(+), 10 deletions(-)
drivers/mailbox/pcc.c +5 -5
@@ -203,7 +203,7 @@ static irqreturn_t pcc_mbox_irq(int irq, void *p)struct acpi_pcct_hw_reduced_type2 *pcct2_ss = chan->con_priv;u32 id = chan - pcc_mbox_channels; - doorbell_ack = &pcct2_ss->doorbell_ack_register; + doorbell_ack = &pcct2_ss->platform_ack_register; doorbell_ack_preserve = pcct2_ss->ack_preserve_mask; doorbell_ack_write = pcct2_ss->ack_write_mask;
@@ -416,11 +416,11 @@ static int parse_pcc_subspace(struct acpi_subtable_header *header,static int pcc_parse_subspace_irq (int id,struct acpi_pcct_hw_reduced *pcct_ss) { - pcc_doorbell_irq[id] =pcc_map_interrupt (pcct_ss->doorbell_interrupt, + pcc_doorbell_irq[id] =pcc_map_interrupt (pcct_ss->platform_interrupt, (u32 )pcct_ss->flags);if (pcc_doorbell_irq[id] <=0 ) {pr_err ("PCC GSI %d not registered\n" , - pcct_ss->doorbell_interrupt); + pcct_ss->platform_interrupt);return -EINVAL ; }
@@ -429,8 +429,8 @@ static int pcc_parse_subspace_irq(int id,struct acpi_pcct_hw_reduced_type2 *pcct2_ss = (void *)pcct_ss; pcc_doorbell_ack_vaddr[id] =acpi_os_ioremap ( - pcct2_ss->doorbell_ack_register.address, - pcct2_ss->doorbell_ack_register.bit_width /8 ); + pcct2_ss->platform_ack_register.address, + pcct2_ss->platform_ack_register.bit_width /8 );if (!pcc_doorbell_ack_vaddr[id]) {pr_err ("Failed to ioremap PCC ACK register\n" );return -ENOMEM ;
include/acpi/actbl3.h +72 -5
117 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH 21/53 ACPICA: ACPI 6.2: Add support for PinFunction() resource
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit 6bbc6357f7061f1243601adde0ea45f7a89274e0
ACPI 6.2 introduced a new resource that is used to describe how certain pins are muxed for a device. The ASL syntax of this new resource looks like below:
PinFunction(Shared, PinConfig, FunctionNumber, ResourceSource,
ResourceSourceIndex, ResourceUsage, DescriptorName, VendorData) {Pin List}
Which is pretty similar to GpioIo()/GpioInt() resources.
Teach ACPICA about this new resource.
--- drivers/acpi/acpica/aclocal.h | 1 + drivers/acpi/acpica/acresrc.h | 2 ++ drivers/acpi/acpica/amlresrc.h | 22 ++++++++++++ drivers/acpi/acpica/rscalc.c | 34 ++++++++++++++++++ drivers/acpi/acpica/rsdumpinfo.c | 23 ++++++++++++ drivers/acpi/acpica/rsinfo.c | 6 +++- drivers/acpi/acpica/rsserial.c | 76 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 4 +-- include/acpi/acrestyp.h | 16 ++++++++- 9 files changed, 180 insertions(+), 4 deletions(-)
drivers/acpi/acpica/aclocal.h +1 -0
@@ -1142,6 +1142,7 @@ struct acpi_port_info {#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B#define ACPI_RESOURCE_NAME_GPIO 0x8C +#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E
drivers/acpi/acpica/acresrc.h +2 -0
@@ -329,6 +329,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[]; +extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];/* These resources require separate get/set tables */
@@ -372,6 +373,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];extern struct acpi_rsdump_info acpi_rs_dump_gpio[]; +extern struct acpi_rsdump_info acpi_rs_dump_pin_function[];extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
drivers/acpi/acpica/amlresrc.h +22 -0
@@ -65,6 +65,7 @@#define ACPI_RESTAG_DRIVESTRENGTH "_DRS"#define ACPI_RESTAG_ENDIANNESS "_END"#define ACPI_RESTAG_FLOWCONTROL "_FLC" +#define ACPI_RESTAG_FUNCTION "_FUN"#define ACPI_RESTAG_GRANULARITY "_GRA"#define ACPI_RESTAG_INTERRUPT "_INT"#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_"/* active_lo(1), active_hi(0) */
@@ -404,6 +405,26 @@ struct aml_resource_uart_serialbus {#define AML_RESOURCE_UART_TYPE_REVISION 1/* ACPI 5.0 */ #define AML_RESOURCE_UART_MIN_DATA_LEN 10 +struct aml_resource_pin_function { + AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id; +u16 flags; +u8 pin_config; +u16 function_number; +u16 pin_table_offset; +u8 res_source_index; +u16 res_source_offset; +u16 vendor_offset; +u16 vendor_length; +/* +* Optional fields follow immediately: +* 1) PIN list (Words) +* 2) Resource Source String +* 3) Vendor Data bytes +*/ +}; + +#define AML_RESOURCE_PIN_FUNCTION_REVISION 1/* ACPI 6.2 */ +/* restore default alignment */ #pragma pack()
@@ -446,6 +467,7 @@ union aml_resource {struct aml_resource_spi_serialbus spi_serial_bus;struct aml_resource_uart_serialbus uart_serial_bus;struct aml_resource_common_serialbus common_serial_bus; +struct aml_resource_pin_function pin_function;/* Utility overlays */
drivers/acpi/acpica/rscalc.c +34 -0
@@ -340,6 +340,22 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,break ; +case ACPI_RESOURCE_TYPE_PIN_FUNCTION : + + total_size = (acpi_rs_length)(total_size + + (resource->data. + pin_function. + pin_table_length *2 ) + + resource->data. + pin_function. + resource_source. + string_length + + resource->data. + pin_function. + vendor_length); + +break ; +case ACPI_RESOURCE_TYPE_SERIAL_BUS : total_size =
@@ -537,6 +553,24 @@ acpi_rs_get_list_length(u8 *aml_buffer, }break ; +case ACPI_RESOURCE_NAME_PIN_FUNCTION : + +/* Vendor data is optional */ + +if (aml_resource->pin_function.vendor_length) { + extra_struct_bytes += + aml_resource->pin_function.vendor_offset - + aml_resource->pin_function. + pin_table_offset + + aml_resource->pin_function.vendor_length; + }else { + extra_struct_bytes += + aml_resource->large_header.resource_length + +sizeof (struct aml_resource_large_header ) - + aml_resource->pin_function.pin_table_offset; + } +break ; +case ACPI_RESOURCE_NAME_SERIAL_BUS : minimum_aml_resource_length =
drivers/acpi/acpica/rsdumpinfo.c +23 -0
@@ -314,6 +314,29 @@ struct acpi_rsdump_info acpi_rs_dump_gpio[16] = { NULL}, }; +struct acpi_rsdump_info acpi_rs_dump_pin_function[10 ] = { + {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_pin_function), +"PinFunction" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_function.revision_id), +"RevisionId" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_function.pin_config),"PinConfig" , + acpi_gbl_ppc_decode}, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_function.sharable),"Sharing" , + acpi_gbl_shr_decode}, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_function.function_number), +"FunctionNumber" ,NULL }, + {ACPI_RSD_SOURCE ,ACPI_RSD_OFFSET (pin_function.resource_source), +"ResourceSource" ,NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_function.pin_table_length), +"PinTableLength" ,NULL }, + {ACPI_RSD_WORDLIST ,ACPI_RSD_OFFSET (pin_function.pin_table),"PinTable" , +NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_function.vendor_length), +"VendorLength" ,NULL }, + {ACPI_RSD_SHORTLISTX ,ACPI_RSD_OFFSET (pin_function.vendor_data), +"VendorData" ,NULL }, +}; +struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4 ] = { {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_fixed_dma),"FixedDma" ,NULL },
drivers/acpi/acpica/rsinfo.c +5 -1
@@ -80,6 +80,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = { acpi_rs_convert_gpio,/* 0x11, ACPI_RESOURCE_TYPE_GPIO */ acpi_rs_convert_fixed_dma,/* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL ,/* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */ + acpi_rs_convert_pin_function, /* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */ };/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -119,7 +120,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = { acpi_rs_convert_address64,/* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */ acpi_rs_convert_ext_address64,/* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */ acpi_rs_convert_gpio,/* 0x0C, ACPI_RESOURCE_NAME_GPIO */ -NULL ,/* 0x0D, Reserved */ + acpi_rs_convert_pin_function,/* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ NULL, /* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ };
@@ -157,6 +158,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = { acpi_rs_dump_gpio,/* ACPI_RESOURCE_TYPE_GPIO */ acpi_rs_dump_fixed_dma,/* ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL ,/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ + acpi_rs_dump_pin_function, /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ }; struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -193,6 +195,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {sizeof (struct aml_resource_gpio ),/* ACPI_RESOURCE_TYPE_GPIO */ sizeof (struct aml_resource_fixed_dma ),/* ACPI_RESOURCE_TYPE_FIXED_DMA */ sizeof (struct aml_resource_common_serialbus ),/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ + sizeof(struct aml_resource_pin_function), /* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ }; const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -230,6 +233,7 @@ const u8 acpi_gbl_resource_struct_sizes[] = { ACPI_RS_SIZE(struct acpi_resource_address64),ACPI_RS_SIZE (struct acpi_resource_extended_address64 ),ACPI_RS_SIZE (struct acpi_resource_gpio ), +ACPI_RS_SIZE (struct acpi_resource_pin_function ), ACPI_RS_SIZE(struct acpi_resource_common_serialbus) };
drivers/acpi/acpica/rsserial.c +76 -0
82 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +2 -2
@@ -332,7 +332,7 @@ const u8 acpi_gbl_resource_aml_sizes[] = { ACPI_AML_SIZE_LARGE(struct aml_resource_address64),ACPI_AML_SIZE_LARGE (struct aml_resource_extended_address64 ),ACPI_AML_SIZE_LARGE (struct aml_resource_gpio ), - 0, +ACPI_AML_SIZE_LARGE (struct aml_resource_pin_function ), ACPI_AML_SIZE_LARGE(struct aml_resource_common_serialbus), };
@@ -384,7 +384,7 @@ static const u8 acpi_gbl_resource_types[] = {ACPI_VARIABLE_LENGTH ,/* 0A Qword* address */ ACPI_FIXED_LENGTH ,/* 0B Extended* address */ ACPI_VARIABLE_LENGTH ,/* 0C Gpio* */ -0 , +ACPI_VARIABLE_LENGTH ,/* 0D pin_function */ ACPI_VARIABLE_LENGTH /* 0E *serial_bus */ };
include/acpi/acrestyp.h +15 -1
@@ -534,6 +534,18 @@ struct acpi_resource_uart_serialbus {#define ACPI_UART_CLEAR_TO_SEND (1<<6)#define ACPI_UART_REQUEST_TO_SEND (1<<7) +struct acpi_resource_pin_function { +u8 revision_id; +u8 pin_config; +u8 sharable;/* For values, see Interrupt Attributes above */ +u16 function_number; +u16 pin_table_length; +u16 vendor_length; +struct acpi_resource_source resource_source; +u16 *pin_table; +u8 *vendor_data; +}; +/* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0
@@ -556,7 +568,8 @@ struct acpi_resource_uart_serialbus {#define ACPI_RESOURCE_TYPE_GPIO 17/* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_FIXED_DMA 18/* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_SERIAL_BUS 19/* ACPI 5.0 */ -#define ACPI_RESOURCE_TYPE_MAX 19 +#define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20/* ACPI 6.2 */ +#define ACPI_RESOURCE_TYPE_MAX 20/* Master union for resource descriptors */
@@ -584,6 +597,7 @@ union acpi_resource_data {struct acpi_resource_spi_serialbus spi_serial_bus;struct acpi_resource_uart_serialbus uart_serial_bus;struct acpi_resource_common_serialbus common_serial_bus; +struct acpi_resource_pin_function pin_function;/* Common fields */
Signature · 1 line
2.7.4
PATCH 22/53 ACPICA: ACPI 6.2: Add support for PinConfig() resource
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit a06fdba686cefccd5dd5b93b52fa0f1e3f984906
ACPI 6.2 introduced a new resource that is used to specify fine-grained configuration of a pin or set of pins used by a device. The ASL syntax of this new resource looks like:
PinConfig (Shared/Exclusive, PinConfigType, PinConfigValue,
ResourceSource, ResourceSourceIndex, ResourceUsage, DescriptorName, Vendordata) {Pin List}
PinConfigType is an integer with following accepted values:
0x00 (Default) - No configuration is applied to the pin 0x01 (Bias Pull-up) - Pin is pulled up using certain size resistor 0x02 (Bias Pull-down) - Pin is pulled down using certain size resistor 0x03 (Bias Default) - Set to default biasing
0x04 (Bias Disable) - All bias settings will be disabled 0x05 (Bias High Impedance) - Configure the pin as hi_z 0x06 (Bias Bus Hold) - Configure the pin in a weak latch state where
it drives the last value on a tristate bus
0x07 (Drive Open Drain) - Configure the pin into open drain state 0x08 (Drive Open Source) - Configure the pin into open source state 0x09 (Drive Push Pull) - Configure the pin into push-pull state 0x0a (Drive Strength) - How much the pin can supply current 0x0b (Slew Rate) - Configure slew rate of the pin
0x0c (Input Debounce) - Enable input debouncer for the pin 0x0d (Input Schmitt Trigger) - Enable schmitt trigger for the pin 0x0e - 0x7f - Reserved
0x80 - 0xff - Vendor defined types
The PinConfigValue depends on the type and is expressed as units suitable for that type (for example bias uses Ohms).
--- drivers/acpi/acpica/aclocal.h | 3 +- drivers/acpi/acpica/acresrc.h | 2 ++ drivers/acpi/acpica/acutils.h | 1 + drivers/acpi/acpica/amlresrc.h | 23 ++++++++++++ drivers/acpi/acpica/rscalc.c | 31 ++++++++++++++++ drivers/acpi/acpica/rsdumpinfo.c | 25 +++++++++++++ drivers/acpi/acpica/rsinfo.c | 7 +++- drivers/acpi/acpica/rsserial.c | 78 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 23 +++++++++++- include/acpi/acrestyp.h | 34 +++++++++++++++++- 10 files changed, 223 insertions(+), 4 deletions(-)
drivers/acpi/acpica/aclocal.h +2 -1
@@ -1144,7 +1144,8 @@ struct acpi_port_info {#define ACPI_RESOURCE_NAME_GPIO 0x8C#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E -#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8E +#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8F/***************************************************************************** *
drivers/acpi/acpica/acresrc.h +2 -0
@@ -330,6 +330,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[]; +extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];/* These resources require separate get/set tables */
@@ -380,6 +381,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_general_flags[]; +extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];#endif #endif /* __ACRESRC_H__ */
drivers/acpi/acpica/acutils.h +1 -0
@@ -85,6 +85,7 @@ extern const char *acpi_gbl_bpb_decode[];extern const char *acpi_gbl_sb_decode[];extern const char *acpi_gbl_fc_decode[];extern const char *acpi_gbl_pt_decode[]; +extern const char *acpi_gbl_ptyp_decode[];#endif /*
drivers/acpi/acpica/amlresrc.h +23 -0
@@ -85,6 +85,8 @@#define ACPI_RESTAG_PHASE "_PHA"#define ACPI_RESTAG_PIN "_PIN"#define ACPI_RESTAG_PINCONFIG "_PPI" +#define ACPI_RESTAG_PINCONFIG_TYPE "_TYP" +#define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"#define ACPI_RESTAG_POLARITY "_POL"#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
@@ -425,6 +427,26 @@ struct aml_resource_pin_function {#define AML_RESOURCE_PIN_FUNCTION_REVISION 1/* ACPI 6.2 */ +struct aml_resource_pin_config { + AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id; +u16 flags; +u8 pin_config_type; +u32 pin_config_value; +u16 pin_table_offset; +u8 res_source_index; +u16 res_source_offset; +u16 vendor_offset; +u16 vendor_length; +/* +* Optional fields follow immediately: +* 1) PIN list (Words) +* 2) Resource Source String +* 3) Vendor Data bytes +*/ +}; + +#define AML_RESOURCE_PIN_CONFIG_REVISION 1/* ACPI 6.2 */ +/* restore default alignment */ #pragma pack()
@@ -468,6 +490,7 @@ union aml_resource {struct aml_resource_uart_serialbus uart_serial_bus;struct aml_resource_common_serialbus common_serial_bus;struct aml_resource_pin_function pin_function; +struct aml_resource_pin_config pin_config;/* Utility overlays */
drivers/acpi/acpica/rscalc.c +31 -0
@@ -375,6 +375,20 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,break ; +case ACPI_RESOURCE_TYPE_PIN_CONFIG : + + total_size = (acpi_rs_length)(total_size + + (resource->data. + pin_config. + pin_table_length *2 ) + + resource->data.pin_config. + resource_source. + string_length + + resource->data.pin_config. + vendor_length); + +break ; +default :break ;
@@ -581,6 +595,23 @@ acpi_rs_get_list_length(u8 *aml_buffer, minimum_aml_resource_length;break ; +case ACPI_RESOURCE_NAME_PIN_CONFIG : + +/* Vendor data is optional */ + +if (aml_resource->pin_config.vendor_length) { + extra_struct_bytes += + aml_resource->pin_config.vendor_offset - + aml_resource->pin_config.pin_table_offset + + aml_resource->pin_config.vendor_length; + }else { + extra_struct_bytes += + aml_resource->large_header.resource_length + +sizeof (struct aml_resource_large_header ) - + aml_resource->pin_config.pin_table_offset; + } +break ; +default :break ;
drivers/acpi/acpica/rsdumpinfo.c +25 -0
@@ -337,6 +337,31 @@ struct acpi_rsdump_info acpi_rs_dump_pin_function[10] = { "VendorData", NULL}, }; +struct acpi_rsdump_info acpi_rs_dump_pin_config[11 ] = { + {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_pin_config), +"PinConfig" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_config.revision_id),"RevisionId" , +NULL }, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_config.producer_consumer), +"ProducerConsumer" , acpi_gbl_consume_decode}, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_config.sharable),"Sharing" , + acpi_gbl_shr_decode}, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_config.pin_config_type), +"PinConfigType" ,NULL }, + {ACPI_RSD_UINT32 ,ACPI_RSD_OFFSET (pin_config.pin_config_value), +"PinConfigValue" ,NULL }, + {ACPI_RSD_SOURCE ,ACPI_RSD_OFFSET (pin_config.resource_source), +"ResourceSource" ,NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_config.pin_table_length), +"PinTableLength" ,NULL }, + {ACPI_RSD_WORDLIST ,ACPI_RSD_OFFSET (pin_config.pin_table),"PinTable" , +NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_config.vendor_length), +"VendorLength" ,NULL }, + {ACPI_RSD_SHORTLISTX ,ACPI_RSD_OFFSET (pin_config.vendor_data), +"VendorData" ,NULL }, +}; +struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4 ] = { {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_fixed_dma),"FixedDma" ,NULL },
drivers/acpi/acpica/rsinfo.c +6 -1
@@ -81,6 +81,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = { acpi_rs_convert_fixed_dma,/* 0x12, ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL ,/* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */ acpi_rs_convert_pin_function,/* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */ + acpi_rs_convert_pin_config, /* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */ };/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -122,6 +123,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = { acpi_rs_convert_gpio,/* 0x0C, ACPI_RESOURCE_NAME_GPIO */ acpi_rs_convert_pin_function,/* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ NULL ,/* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ + acpi_rs_convert_pin_config, /* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ };/* Subtype table for serial_bus -- I2C, SPI, and UART */
@@ -159,6 +161,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = { acpi_rs_dump_fixed_dma,/* ACPI_RESOURCE_TYPE_FIXED_DMA */ NULL ,/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ acpi_rs_dump_pin_function,/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ + acpi_rs_dump_pin_config, /* ACPI_RESOURCE_TYPE_PIN_CONFIG */ }; struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -196,6 +199,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {sizeof (struct aml_resource_fixed_dma ),/* ACPI_RESOURCE_TYPE_FIXED_DMA */ sizeof (struct aml_resource_common_serialbus ),/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ sizeof (struct aml_resource_pin_function ),/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ + sizeof(struct aml_resource_pin_config), /* ACPI_RESOURCE_TYPE_PIN_CONFIG */ }; const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -234,7 +238,8 @@ const u8 acpi_gbl_resource_struct_sizes[] = { ACPI_RS_SIZE(struct acpi_resource_extended_address64),ACPI_RS_SIZE (struct acpi_resource_gpio ),ACPI_RS_SIZE (struct acpi_resource_pin_function ), -ACPI_RS_SIZE (struct acpi_resource_common_serialbus ) +ACPI_RS_SIZE (struct acpi_resource_common_serialbus ), + ACPI_RS_SIZE(struct acpi_resource_pin_config), };const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
drivers/acpi/acpica/rsserial.c +78 -0
81 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +22 -1
@@ -291,6 +291,25 @@ const char *acpi_gbl_pt_decode[] = {"/* UNKNOWN parity keyword */" }; +/* pin_config type */ + +const char *acpi_gbl_ptyp_decode[] = { +"Default" , +"Bias Pull-up" , +"Bias Pull-down" , +"Bias Default" , +"Bias Disable" , +"Bias High Impedance" , +"Bias Bus Hold" , +"Drive Open Drain" , +"Drive Open Source" , +"Drive Push Pull" , +"Drive Strength" , +"Slew Rate" , +"Input Debounce" , +"Input Schmitt Trigger" , +}; +#endif /*
@@ -334,6 +353,7 @@ const u8 acpi_gbl_resource_aml_sizes[] = { ACPI_AML_SIZE_LARGE(struct aml_resource_gpio),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_function ),ACPI_AML_SIZE_LARGE (struct aml_resource_common_serialbus ), + ACPI_AML_SIZE_LARGE(struct aml_resource_pin_config), };const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
@@ -385,7 +405,8 @@ static const u8 acpi_gbl_resource_types[] = {ACPI_FIXED_LENGTH ,/* 0B Extended* address */ ACPI_VARIABLE_LENGTH ,/* 0C Gpio* */ ACPI_VARIABLE_LENGTH ,/* 0D pin_function */ - ACPI_VARIABLE_LENGTH /* 0E *serial_bus */ +ACPI_VARIABLE_LENGTH ,/* 0E *serial_bus */ + ACPI_VARIABLE_LENGTH, /* 0F pin_config */ };/*******************************************************************************
include/acpi/acrestyp.h +33 -1
@@ -546,6 +546,36 @@ struct acpi_resource_pin_function {u8 *vendor_data; }; +struct acpi_resource_pin_config { +u8 revision_id; +u8 producer_consumer;/* For values, see Producer/Consumer above */ +u8 sharable;/* For values, see Interrupt Attributes above */ +u8 pin_config_type; +u32 pin_config_value; +u16 pin_table_length; +u16 vendor_length; +struct acpi_resource_source resource_source; +u16 *pin_table; +u8 *vendor_data; +}; + +/* Values for pin_config_type field above */ + +#define ACPI_PIN_CONFIG_DEFAULT 0 +#define ACPI_PIN_CONFIG_BIAS_PULL_UP 1 +#define ACPI_PIN_CONFIG_BIAS_PULL_DOWN 2 +#define ACPI_PIN_CONFIG_BIAS_DEFAULT 3 +#define ACPI_PIN_CONFIG_BIAS_DISABLE 4 +#define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE 5 +#define ACPI_PIN_CONFIG_BIAS_BUS_HOLD 6 +#define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN 7 +#define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE 8 +#define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL 9 +#define ACPI_PIN_CONFIG_DRIVE_STRENGTH 10 +#define ACPI_PIN_CONFIG_SLEW_RATE 11 +#define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12 +#define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13 +/* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0
@@ -569,7 +599,8 @@ struct acpi_resource_pin_function {#define ACPI_RESOURCE_TYPE_FIXED_DMA 18/* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_SERIAL_BUS 19/* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20/* ACPI 6.2 */ -#define ACPI_RESOURCE_TYPE_MAX 20 +#define ACPI_RESOURCE_TYPE_PIN_CONFIG 21/* ACPI 6.2 */ +#define ACPI_RESOURCE_TYPE_MAX 21/* Master union for resource descriptors */
@@ -598,6 +629,7 @@ union acpi_resource_data {struct acpi_resource_uart_serialbus uart_serial_bus;struct acpi_resource_common_serialbus common_serial_bus;struct acpi_resource_pin_function pin_function; +struct acpi_resource_pin_config pin_config;/* Common fields */
Signature · 1 line
2.7.4
PATCH 23/53 ACPICA: ACPI 6.2: Add support for PinGroup() resource
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit 7d928e3174fb19d7dc0066b03c30bea07c001563
ACPI 6.2 introduced a new resource that is used to declare set of pins belonging to a GPIO controller. This resource is referenced by new PinGroupFunction() and PinGroupConfig() resources using ResourceSource and ResourceLabel fields.
The PinGroup() resource looks like this:
PinGroup (ResourceLabel, ResourceUsage, DescriptorName,
VendorData) {Pin List}This resource should be listed in _CRS under the GPIO/pincontroller device providing these pins.
--- drivers/acpi/acpica/aclocal.h | 3 +- drivers/acpi/acpica/acresrc.h | 6 +++- drivers/acpi/acpica/amlresrc.h | 18 ++++++++++++ drivers/acpi/acpica/rscalc.c | 22 ++++++++++++++ drivers/acpi/acpica/rsdump.c | 38 ++++++++++++++++++++++++ drivers/acpi/acpica/rsdumpinfo.c | 19 ++++++++++++ drivers/acpi/acpica/rsinfo.c | 5 ++++ drivers/acpi/acpica/rsserial.c | 62 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 2 ++ include/acpi/acrestyp.h | 19 +++++++++++- 10 files changed, 191 insertions(+), 3 deletions(-)
drivers/acpi/acpica/aclocal.h +2 -1
@@ -1145,7 +1145,8 @@ struct acpi_port_info {#define ACPI_RESOURCE_NAME_PIN_FUNCTION 0x8D#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F -#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8F +#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90 +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x90/***************************************************************************** *
drivers/acpi/acpica/acresrc.h +5 -1
@@ -148,7 +148,9 @@ typedef enum {ACPI_RSD_UINT16 ,ACPI_RSD_UINT32 ,ACPI_RSD_UINT64 , - ACPI_RSD_WORDLIST +ACPI_RSD_WORDLIST , +ACPI_RSD_LABEL , + } ACPI_RSDUMP_OPCODES;/* restore default alignment */
@@ -331,6 +333,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[]; +extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[];/* These resources require separate get/set tables */
@@ -382,6 +385,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];extern struct acpi_rsdump_info acpi_rs_dump_pin_config[]; +extern struct acpi_rsdump_info acpi_rs_dump_pin_group[];#endif #endif /* __ACRESRC_H__ */
drivers/acpi/acpica/amlresrc.h +18 -0
@@ -447,6 +447,23 @@ struct aml_resource_pin_config {#define AML_RESOURCE_PIN_CONFIG_REVISION 1/* ACPI 6.2 */ +struct aml_resource_pin_group { + AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id; +u16 flags; +u16 pin_table_offset; +u16 label_offset; +u16 vendor_offset; +u16 vendor_length; +/* +* Optional fields follow immediately: +* 1) PIN list (Words) +* 2) Resource Label String +* 3) Vendor Data bytes +*/ +}; + +#define AML_RESOURCE_PIN_GROUP_REVISION 1/* ACPI 6.2 */ +/* restore default alignment */ #pragma pack()
@@ -491,6 +508,7 @@ union aml_resource {struct aml_resource_common_serialbus common_serial_bus;struct aml_resource_pin_function pin_function;struct aml_resource_pin_config pin_config; +struct aml_resource_pin_group pin_group;/* Utility overlays */
drivers/acpi/acpica/rscalc.c +22 -0
@@ -389,6 +389,19 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,break ; +case ACPI_RESOURCE_TYPE_PIN_GROUP : + + total_size = (acpi_rs_length)(total_size + + (resource->data.pin_group. + pin_table_length *2 ) + + resource->data.pin_group. + resource_label. + string_length + + resource->data.pin_group. + vendor_length); + +break ; +default :break ;
@@ -612,6 +625,15 @@ acpi_rs_get_list_length(u8 *aml_buffer, }break ; +case ACPI_RESOURCE_NAME_PIN_GROUP : + + extra_struct_bytes += + aml_resource->pin_group.vendor_offset - + aml_resource->pin_group.pin_table_offset + + aml_resource->pin_group.vendor_length; + +break ; +default :break ;
drivers/acpi/acpica/rsdump.c +38 -0
@@ -75,6 +75,10 @@ static void acpi_rs_dump_short_byte_list(u8 length, u8 *data);static void acpi_rs_dump_resource_source (struct acpi_resource_source *resource_source); +static void +acpi_rs_dump_resource_label (char *title, +struct acpi_resource_label *resource_label); +static void acpi_rs_dump_address_common (union acpi_resource_data *resource); static void
@@ -371,6 +375,16 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) target));break ; +case ACPI_RSD_LABEL : +/* +* resource_label +*/ +acpi_rs_dump_resource_label ("Resource Label" , + ACPI_CAST_PTR(struct + acpi_resource_label, + target)); +break ; +default : acpi_os_printf("**** Invalid table opcode [%X] ****\n",
@@ -414,6 +428,30 @@ acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source)/******************************************************************************* * +* FUNCTION: acpi_rs_dump_resource_label +* +* PARAMETERS: title - Title of the dumped resource field +* resource_label - Pointer to a Resource Label struct +* +* RETURN: None +* +* DESCRIPTION: Common routine for dumping the resource_label +* +******************************************************************************/ + +static void +acpi_rs_dump_resource_label (char *title, +struct acpi_resource_label *resource_label) +{ +ACPI_FUNCTION_ENTRY (); + +acpi_rs_out_string (title, + resource_label->string_ptr ? + resource_label->string_ptr :"[Not Specified]" ); +} + +/******************************************************************************* +* * FUNCTION: acpi_rs_dump_address_common * * PARAMETERS: resource - Pointer to an internal resource descriptor
drivers/acpi/acpica/rsdumpinfo.c +19 -0
@@ -362,6 +362,25 @@ struct acpi_rsdump_info acpi_rs_dump_pin_config[11] = { "VendorData", NULL}, }; +struct acpi_rsdump_info acpi_rs_dump_pin_group[8 ] = { + {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_pin_group), +"PinGroup" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_group.revision_id),"RevisionId" , +NULL }, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_group.producer_consumer), +"ProducerConsumer" , acpi_gbl_consume_decode}, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_group.pin_table_length), +"PinTableLength" ,NULL }, + {ACPI_RSD_WORDLIST ,ACPI_RSD_OFFSET (pin_group.pin_table),"PinTable" , +NULL }, + {ACPI_RSD_LABEL ,ACPI_RSD_OFFSET (pin_group.resource_label), +"ResourceLabel" ,NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_group.vendor_length), +"VendorLength" ,NULL }, + {ACPI_RSD_SHORTLISTX ,ACPI_RSD_OFFSET (pin_group.vendor_data), +"VendorData" ,NULL }, +}; +struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4 ] = { {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_fixed_dma),"FixedDma" ,NULL },
drivers/acpi/acpica/rsinfo.c +5 -0
@@ -82,6 +82,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = {NULL ,/* 0x13, ACPI_RESOURCE_TYPE_SERIAL_BUS - Use subtype table below */ acpi_rs_convert_pin_function,/* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */ acpi_rs_convert_pin_config,/* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */ + acpi_rs_convert_pin_group, /* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */ };/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -124,6 +125,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = { acpi_rs_convert_pin_function,/* 0x0D, ACPI_RESOURCE_NAME_PIN_FUNCTION */ NULL ,/* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ acpi_rs_convert_pin_config,/* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ + acpi_rs_convert_pin_group, /* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ };/* Subtype table for serial_bus -- I2C, SPI, and UART */
@@ -162,6 +164,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = {NULL ,/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ acpi_rs_dump_pin_function,/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ acpi_rs_dump_pin_config,/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ + acpi_rs_dump_pin_group, /* ACPI_RESOURCE_TYPE_PIN_GROUP */ }; struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -200,6 +203,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {sizeof (struct aml_resource_common_serialbus ),/* ACPI_RESOURCE_TYPE_SERIAL_BUS */ sizeof (struct aml_resource_pin_function ),/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ sizeof (struct aml_resource_pin_config ),/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ + sizeof(struct aml_resource_pin_group), /* ACPI_RESOURCE_TYPE_PIN_GROUP */ }; const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -240,6 +244,7 @@ const u8 acpi_gbl_resource_struct_sizes[] = { ACPI_RS_SIZE(struct acpi_resource_pin_function),ACPI_RS_SIZE (struct acpi_resource_common_serialbus ),ACPI_RS_SIZE (struct acpi_resource_pin_config ), + ACPI_RS_SIZE(struct acpi_resource_pin_group), };const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
drivers/acpi/acpica/rsserial.c +62 -0
65 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +2 -0
@@ -354,6 +354,7 @@ const u8 acpi_gbl_resource_aml_sizes[] = { ACPI_AML_SIZE_LARGE(struct aml_resource_pin_function),ACPI_AML_SIZE_LARGE (struct aml_resource_common_serialbus ),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_config ), + ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group), };const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
@@ -407,6 +408,7 @@ static const u8 acpi_gbl_resource_types[] = {ACPI_VARIABLE_LENGTH ,/* 0D pin_function */ ACPI_VARIABLE_LENGTH ,/* 0E *serial_bus */ ACPI_VARIABLE_LENGTH ,/* 0F pin_config */ + ACPI_VARIABLE_LENGTH, /* 10 pin_group */ };/*******************************************************************************
include/acpi/acrestyp.h +18 -1
@@ -289,6 +289,11 @@ union acpi_resource_attribute {u8 type_specific; }; +struct acpi_resource_label { +u16 string_length; +char *string_ptr; +}; +struct acpi_resource_source {u8 index;u16 string_length;
@@ -576,6 +581,16 @@ struct acpi_resource_pin_config {#define ACPI_PIN_CONFIG_INPUT_DEBOUNCE 12#define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER 13 +struct acpi_resource_pin_group { +u8 revision_id; +u8 producer_consumer;/* For values, see Producer/Consumer above */ +u16 pin_table_length; +u16 vendor_length; +u16 *pin_table; +struct acpi_resource_label resource_label; +u8 *vendor_data; +}; +/* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0
@@ -600,7 +615,8 @@ struct acpi_resource_pin_config {#define ACPI_RESOURCE_TYPE_SERIAL_BUS 19/* ACPI 5.0 */ #define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20/* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_CONFIG 21/* ACPI 6.2 */ -#define ACPI_RESOURCE_TYPE_MAX 21 +#define ACPI_RESOURCE_TYPE_PIN_GROUP 22/* ACPI 6.2 */ +#define ACPI_RESOURCE_TYPE_MAX 22/* Master union for resource descriptors */
@@ -630,6 +646,7 @@ union acpi_resource_data {struct acpi_resource_common_serialbus common_serial_bus;struct acpi_resource_pin_function pin_function;struct acpi_resource_pin_config pin_config; +struct acpi_resource_pin_group pin_group;/* Common fields */
Signature · 1 line
2.7.4
PATCH 24/53 ACPICA: ACPI 6.2: Add support for PinGroupFunction() resource
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit bd9a745749eac7137cd23085e6bdeb322de14ea2
PinGroupFunction() is a new resource introduced with ACPI 6.2. It is used with PinGroup() to configure specific mode for a set of pins exposed by a GPIO controller.
The format of the resource is:
PinGroupFunction (Shared/Exclusive, FunctionNumber, ResourceSource,
ResourceSourceIndex, ResourceSourceLabel, ResourceUsage, DescriptorName, VendorData)
The resource_source and ResourceSourceLabel fields are used to specify the PinGroup() resource referenced by PinGroupFunction().
Device (GPIO)
{
Name (_CRS, ResourceTemplate () {
PinGroup ("group1") {2, 3}
PinGroup ("group2") {4, 5}
...
})
}
Device (I2C)
{
Name (_CRS, ResourceTemplate () {
PinGroupFunction (Exclusive, 6, "^GPIO", 0, "mygroup2")
})
}In the above example the PinGroupFunction() references the second PinGroup() resource (using label "mygroup2" and configures pins 4 and 5 into mode 6.
--- drivers/acpi/acpica/aclocal.h | 3 +- drivers/acpi/acpica/acresrc.h | 3 ++ drivers/acpi/acpica/amlresrc.h | 20 +++++++++++ drivers/acpi/acpica/rscalc.c | 26 ++++++++++++++ drivers/acpi/acpica/rsdump.c | 10 ++++++ drivers/acpi/acpica/rsdumpinfo.c | 23 ++++++++++++ drivers/acpi/acpica/rsinfo.c | 5 +++ drivers/acpi/acpica/rsserial.c | 77 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 2 ++ include/acpi/acrestyp.h | 15 +++++++- 10 files changed, 182 insertions(+), 2 deletions(-)
drivers/acpi/acpica/aclocal.h +2 -1
@@ -1146,7 +1146,8 @@ struct acpi_port_info {#define ACPI_RESOURCE_NAME_SERIAL_BUS 0x8E#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90 -#define ACPI_RESOURCE_NAME_LARGE_MAX 0x90 +#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91 +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x91/***************************************************************************** *
drivers/acpi/acpica/acresrc.h +3 -0
@@ -150,6 +150,7 @@ typedef enum {ACPI_RSD_UINT64 ,ACPI_RSD_WORDLIST ,ACPI_RSD_LABEL , +ACPI_RSD_SOURCE_LABEL , } ACPI_RSDUMP_OPCODES;
@@ -334,6 +335,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[]; +extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[];/* These resources require separate get/set tables */
@@ -386,6 +388,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];extern struct acpi_rsdump_info acpi_rs_dump_pin_group[]; +extern struct acpi_rsdump_info acpi_rs_dump_pin_group_function[];#endif #endif /* __ACRESRC_H__ */
drivers/acpi/acpica/amlresrc.h +20 -0
@@ -464,6 +464,25 @@ struct aml_resource_pin_group {#define AML_RESOURCE_PIN_GROUP_REVISION 1/* ACPI 6.2 */ +struct aml_resource_pin_group_function { + AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id; +u16 flags; +u16 function_number; +u8 res_source_index; +u16 res_source_offset; +u16 res_source_label_offset; +u16 vendor_offset; +u16 vendor_length; +/* +* Optional fields follow immediately: +* 1) Resource Source String +* 2) Resource Source Label String +* 3) Vendor Data bytes +*/ +}; + +#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1/* ACPI 6.2 */ +/* restore default alignment */ #pragma pack()
@@ -509,6 +528,7 @@ union aml_resource {struct aml_resource_pin_function pin_function;struct aml_resource_pin_config pin_config;struct aml_resource_pin_group pin_group; +struct aml_resource_pin_group_function pin_group_function;/* Utility overlays */
drivers/acpi/acpica/rscalc.c +26 -0
@@ -402,6 +402,23 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,break ; +case ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION : + + total_size = (acpi_rs_length)(total_size + + resource->data. + pin_group_function. + resource_source. + string_length + + resource->data. + pin_group_function. + resource_source_label. + string_length + + resource->data. + pin_group_function. + vendor_length); + +break ; +default :break ;
@@ -634,6 +651,15 @@ acpi_rs_get_list_length(u8 *aml_buffer,break ; +case ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION : + + extra_struct_bytes += + aml_resource->pin_group_function.vendor_offset - + aml_resource->pin_group_function.res_source_offset + + aml_resource->pin_group_function.vendor_length; + +break ; +default :break ;
drivers/acpi/acpica/rsdump.c +10 -0
@@ -385,6 +385,16 @@ acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) target));break ; +case ACPI_RSD_SOURCE_LABEL : +/* +* resource_source_label +*/ +acpi_rs_dump_resource_label ("Resource Source Label" , + ACPI_CAST_PTR(struct + acpi_resource_label, + target)); +break ; +default : acpi_os_printf("**** Invalid table opcode [%X] ****\n",
drivers/acpi/acpica/rsdumpinfo.c +23 -0
@@ -381,6 +381,29 @@ struct acpi_rsdump_info acpi_rs_dump_pin_group[8] = { "VendorData", NULL}, }; +struct acpi_rsdump_info acpi_rs_dump_pin_group_function[9 ] = { + {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_pin_group_function), +"PinGroupFunction" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_group_function.revision_id), +"RevisionId" ,NULL }, + {ACPI_RSD_1BITFLAG , +ACPI_RSD_OFFSET (pin_group_function.producer_consumer), +"ProducerConsumer" , acpi_gbl_consume_decode}, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_group_function.sharable), +"Sharing" , acpi_gbl_shr_decode}, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_group_function.function_number), +"FunctionNumber" ,NULL }, + {ACPI_RSD_SOURCE_LABEL , +ACPI_RSD_OFFSET (pin_group_function.resource_source_label), +"ResourceSourceLabel" ,NULL }, + {ACPI_RSD_SOURCE ,ACPI_RSD_OFFSET (pin_group_function.resource_source), +"ResourceSource" ,NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_group_function.vendor_length), +"VendorLength" ,NULL }, + {ACPI_RSD_SHORTLISTX ,ACPI_RSD_OFFSET (pin_group_function.vendor_data), +"VendorData" ,NULL }, +}; +struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4 ] = { {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_fixed_dma),"FixedDma" ,NULL },
drivers/acpi/acpica/rsinfo.c +5 -0
@@ -83,6 +83,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = { acpi_rs_convert_pin_function,/* 0x14, ACPI_RESOURCE_TYPE_PIN_FUNCTION */ acpi_rs_convert_pin_config,/* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */ acpi_rs_convert_pin_group,/* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */ + acpi_rs_convert_pin_group_function, /* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ };/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -126,6 +127,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = {NULL ,/* 0x0E, ACPI_RESOURCE_NAME_SERIAL_BUS - Use subtype table below */ acpi_rs_convert_pin_config,/* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ acpi_rs_convert_pin_group,/* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ + acpi_rs_convert_pin_group_function, /* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */ };/* Subtype table for serial_bus -- I2C, SPI, and UART */
@@ -165,6 +167,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = { acpi_rs_dump_pin_function,/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ acpi_rs_dump_pin_config,/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ acpi_rs_dump_pin_group,/* ACPI_RESOURCE_TYPE_PIN_GROUP */ + acpi_rs_dump_pin_group_function, /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ }; struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -204,6 +207,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {sizeof (struct aml_resource_pin_function ),/* ACPI_RESOURCE_TYPE_PIN_FUNCTION */ sizeof (struct aml_resource_pin_config ),/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ sizeof (struct aml_resource_pin_group ),/* ACPI_RESOURCE_TYPE_PIN_GROUP */ + sizeof(struct aml_resource_pin_group_function), /* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ }; const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -245,6 +249,7 @@ const u8 acpi_gbl_resource_struct_sizes[] = { ACPI_RS_SIZE(struct acpi_resource_common_serialbus),ACPI_RS_SIZE (struct acpi_resource_pin_config ),ACPI_RS_SIZE (struct acpi_resource_pin_group ), + ACPI_RS_SIZE(struct acpi_resource_pin_group_function), };const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
drivers/acpi/acpica/rsserial.c +77 -0
80 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +2 -0
@@ -355,6 +355,7 @@ const u8 acpi_gbl_resource_aml_sizes[] = { ACPI_AML_SIZE_LARGE(struct aml_resource_common_serialbus),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_config ),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_group ), + ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_function), };const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
@@ -409,6 +410,7 @@ static const u8 acpi_gbl_resource_types[] = {ACPI_VARIABLE_LENGTH ,/* 0E *serial_bus */ ACPI_VARIABLE_LENGTH ,/* 0F pin_config */ ACPI_VARIABLE_LENGTH ,/* 10 pin_group */ + ACPI_VARIABLE_LENGTH, /* 11 pin_group_function */ };/*******************************************************************************
include/acpi/acrestyp.h +14 -1
@@ -591,6 +591,17 @@ struct acpi_resource_pin_group {u8 *vendor_data; }; +struct acpi_resource_pin_group_function { +u8 revision_id; +u8 producer_consumer;/* For values, see Producer/Consumer above */ +u8 sharable;/* For values, see Interrupt Attributes above */ +u16 function_number; +u16 vendor_length; +struct acpi_resource_source resource_source; +struct acpi_resource_label resource_source_label; +u8 *vendor_data; +}; +/* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0
@@ -616,7 +627,8 @@ struct acpi_resource_pin_group {#define ACPI_RESOURCE_TYPE_PIN_FUNCTION 20/* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_CONFIG 21/* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP 22/* ACPI 6.2 */ -#define ACPI_RESOURCE_TYPE_MAX 22 +#define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23/* ACPI 6.2 */ +#define ACPI_RESOURCE_TYPE_MAX 23/* Master union for resource descriptors */
@@ -647,6 +659,7 @@ union acpi_resource_data {struct acpi_resource_pin_function pin_function;struct acpi_resource_pin_config pin_config;struct acpi_resource_pin_group pin_group; +struct acpi_resource_pin_group_function pin_group_function;/* Common fields */
Signature · 1 line
2.7.4
PATCH 25/53 ACPICA: ACPI 6.2: Add support for PinGroupConfig() resource
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit 08b83591c0db751769d61fa889f4f50f575aeffb
PinGroupConfig() is analogous to PinGroupFunction() but instead of mode (muxing), it is used to apply specific fine-grained configuration to a set of referenced pins.
The format of this new resource is:
PinGroupConfig (Shared/Exclusive, PinConfigType, PinConfigValue,
ResourceSource, ResourceSourceIndex, ResourceSourceLabel, ResourceUsage, DescriptorName, VendorData)
The PinConfigType/PinConfigValue are the same used by PinConfig() resource.
Here also the combination of ResourceSource and ResourceSourceLabel is used to specify the PinGroup() this resource refers to.
--- drivers/acpi/acpica/aclocal.h | 3 +- drivers/acpi/acpica/acresrc.h | 2 + drivers/acpi/acpica/amlresrc.h | 21 +++++++++++ drivers/acpi/acpica/rscalc.c | 26 +++++++++++++ drivers/acpi/acpica/rsdumpinfo.c | 24 ++++++++++++ drivers/acpi/acpica/rsinfo.c | 5 +++ drivers/acpi/acpica/rsserial.c | 80 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 2 + include/acpi/acrestyp.h | 16 +++++++- 9 files changed, 177 insertions(+), 2 deletions(-)
drivers/acpi/acpica/aclocal.h +2 -1
@@ -1147,7 +1147,8 @@ struct acpi_port_info {#define ACPI_RESOURCE_NAME_PIN_CONFIG 0x8F#define ACPI_RESOURCE_NAME_PIN_GROUP 0x90#define ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION 0x91 -#define ACPI_RESOURCE_NAME_LARGE_MAX 0x91 +#define ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG 0x92 +#define ACPI_RESOURCE_NAME_LARGE_MAX 0x92/***************************************************************************** *
drivers/acpi/acpica/acresrc.h +2 -0
@@ -336,6 +336,7 @@ extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[];extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[]; +extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[];/* These resources require separate get/set tables */
@@ -389,6 +390,7 @@ extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];extern struct acpi_rsdump_info acpi_rs_dump_pin_group[];extern struct acpi_rsdump_info acpi_rs_dump_pin_group_function[]; +extern struct acpi_rsdump_info acpi_rs_dump_pin_group_config[];#endif #endif /* __ACRESRC_H__ */
drivers/acpi/acpica/amlresrc.h +21 -0
@@ -483,6 +483,26 @@ struct aml_resource_pin_group_function {#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1/* ACPI 6.2 */ +struct aml_resource_pin_group_config { + AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id; +u16 flags; +u8 pin_config_type; +u32 pin_config_value; +u8 res_source_index; +u16 res_source_offset; +u16 res_source_label_offset; +u16 vendor_offset; +u16 vendor_length; +/* +* Optional fields follow immediately: +* 1) Resource Source String +* 2) Resource Source Label String +* 3) Vendor Data bytes +*/ +}; + +#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1/* ACPI 6.2 */ +/* restore default alignment */ #pragma pack()
@@ -529,6 +549,7 @@ union aml_resource {struct aml_resource_pin_config pin_config;struct aml_resource_pin_group pin_group;struct aml_resource_pin_group_function pin_group_function; +struct aml_resource_pin_group_config pin_group_config;/* Utility overlays */
drivers/acpi/acpica/rscalc.c +26 -0
@@ -419,6 +419,23 @@ acpi_rs_get_aml_length(struct acpi_resource *resource,break ; +case ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG : + + total_size = (acpi_rs_length)(total_size + + resource->data. + pin_group_config. + resource_source. + string_length + + resource->data. + pin_group_config. + resource_source_label. + string_length + + resource->data. + pin_group_config. + vendor_length); + +break ; +default :break ;
@@ -660,6 +677,15 @@ acpi_rs_get_list_length(u8 *aml_buffer,break ; +case ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG : + + extra_struct_bytes += + aml_resource->pin_group_config.vendor_offset - + aml_resource->pin_group_config.res_source_offset + + aml_resource->pin_group_config.vendor_length; + +break ; +default :break ;
drivers/acpi/acpica/rsdumpinfo.c +24 -0
@@ -404,6 +404,30 @@ struct acpi_rsdump_info acpi_rs_dump_pin_group_function[9] = { "VendorData", NULL}, }; +struct acpi_rsdump_info acpi_rs_dump_pin_group_config[10 ] = { + {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_pin_group_config), +"PinGroupConfig" ,NULL }, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_group_config.revision_id), +"RevisionId" ,NULL }, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_group_config.producer_consumer), +"ProducerConsumer" , acpi_gbl_consume_decode}, + {ACPI_RSD_1BITFLAG ,ACPI_RSD_OFFSET (pin_group_config.sharable), +"Sharing" , acpi_gbl_shr_decode}, + {ACPI_RSD_UINT8 ,ACPI_RSD_OFFSET (pin_group_config.pin_config_type), +"PinConfigType" ,NULL }, + {ACPI_RSD_UINT32 ,ACPI_RSD_OFFSET (pin_group_config.pin_config_value), +"PinConfigValue" ,NULL }, + {ACPI_RSD_SOURCE_LABEL , +ACPI_RSD_OFFSET (pin_group_config.resource_source_label), +"ResourceSourceLabel" ,NULL }, + {ACPI_RSD_SOURCE ,ACPI_RSD_OFFSET (pin_group_config.resource_source), +"ResourceSource" ,NULL }, + {ACPI_RSD_UINT16 ,ACPI_RSD_OFFSET (pin_group_config.vendor_length), +"VendorLength" ,NULL }, + {ACPI_RSD_SHORTLISTX ,ACPI_RSD_OFFSET (pin_group_config.vendor_data), +"VendorData" ,NULL }, +}; +struct acpi_rsdump_info acpi_rs_dump_fixed_dma[4 ] = { {ACPI_RSD_TITLE ,ACPI_RSD_TABLE_SIZE (acpi_rs_dump_fixed_dma),"FixedDma" ,NULL },
drivers/acpi/acpica/rsinfo.c +5 -0
@@ -84,6 +84,7 @@ struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = { acpi_rs_convert_pin_config,/* 0x15, ACPI_RESOURCE_TYPE_PIN_CONFIG */ acpi_rs_convert_pin_group,/* 0x16, ACPI_RESOURCE_TYPE_PIN_GROUP */ acpi_rs_convert_pin_group_function,/* 0x17, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ + acpi_rs_convert_pin_group_config, /* 0x18, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ };/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */
@@ -128,6 +129,7 @@ struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = { acpi_rs_convert_pin_config,/* 0x0F, ACPI_RESOURCE_NAME_PIN_CONFIG */ acpi_rs_convert_pin_group,/* 0x10, ACPI_RESOURCE_NAME_PIN_GROUP */ acpi_rs_convert_pin_group_function,/* 0x11, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION */ + acpi_rs_convert_pin_group_config, /* 0x12, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG */ };/* Subtype table for serial_bus -- I2C, SPI, and UART */
@@ -168,6 +170,7 @@ struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = { acpi_rs_dump_pin_config,/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ acpi_rs_dump_pin_group,/* ACPI_RESOURCE_TYPE_PIN_GROUP */ acpi_rs_dump_pin_group_function,/* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ + acpi_rs_dump_pin_group_config, /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ }; struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[] = {
@@ -208,6 +211,7 @@ const u8 acpi_gbl_aml_resource_sizes[] = {sizeof (struct aml_resource_pin_config ),/* ACPI_RESOURCE_TYPE_PIN_CONFIG */ sizeof (struct aml_resource_pin_group ),/* ACPI_RESOURCE_TYPE_PIN_GROUP */ sizeof (struct aml_resource_pin_group_function ),/* ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION */ + sizeof(struct aml_resource_pin_group_config), /* ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG */ }; const u8 acpi_gbl_resource_struct_sizes[] = {
@@ -250,6 +254,7 @@ const u8 acpi_gbl_resource_struct_sizes[] = { ACPI_RS_SIZE(struct acpi_resource_pin_config),ACPI_RS_SIZE (struct acpi_resource_pin_group ),ACPI_RS_SIZE (struct acpi_resource_pin_group_function ), + ACPI_RS_SIZE(struct acpi_resource_pin_group_config), };const u8 acpi_gbl_aml_resource_serial_bus_sizes[] = {
drivers/acpi/acpica/rsserial.c +80 -0
83 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +2 -0
@@ -356,6 +356,7 @@ const u8 acpi_gbl_resource_aml_sizes[] = { ACPI_AML_SIZE_LARGE(struct aml_resource_pin_config),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_group ),ACPI_AML_SIZE_LARGE (struct aml_resource_pin_group_function ), + ACPI_AML_SIZE_LARGE(struct aml_resource_pin_group_config), };const u8 acpi_gbl_resource_aml_serial_bus_sizes[] = {
@@ -411,6 +412,7 @@ static const u8 acpi_gbl_resource_types[] = {ACPI_VARIABLE_LENGTH ,/* 0F pin_config */ ACPI_VARIABLE_LENGTH ,/* 10 pin_group */ ACPI_VARIABLE_LENGTH ,/* 11 pin_group_function */ + ACPI_VARIABLE_LENGTH, /* 12 pin_group_config */ };/*******************************************************************************
include/acpi/acrestyp.h +15 -1
@@ -602,6 +602,18 @@ struct acpi_resource_pin_group_function {u8 *vendor_data; }; +struct acpi_resource_pin_group_config { +u8 revision_id; +u8 producer_consumer;/* For values, see Producer/Consumer above */ +u8 sharable;/* For values, see Interrupt Attributes above */ +u8 pin_config_type;/* For values, see pin_config_type above */ +u32 pin_config_value; +u16 vendor_length; +struct acpi_resource_source resource_source; +struct acpi_resource_label resource_source_label; +u8 *vendor_data; +}; +/* ACPI_RESOURCE_TYPEs */ #define ACPI_RESOURCE_TYPE_IRQ 0
@@ -628,7 +640,8 @@ struct acpi_resource_pin_group_function {#define ACPI_RESOURCE_TYPE_PIN_CONFIG 21/* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP 22/* ACPI 6.2 */ #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION 23/* ACPI 6.2 */ -#define ACPI_RESOURCE_TYPE_MAX 23 +#define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG 24/* ACPI 6.2 */ +#define ACPI_RESOURCE_TYPE_MAX 24/* Master union for resource descriptors */
@@ -660,6 +673,7 @@ union acpi_resource_data {struct acpi_resource_pin_config pin_config;struct acpi_resource_pin_group pin_group;struct acpi_resource_pin_group_function pin_group_function; +struct acpi_resource_pin_group_config pin_group_config;/* Common fields */
Signature · 1 line
2.7.4
PATCH 26/53 ACPICA: Fix a type value overlap in the AML support file
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 7cb6e66982178bbc96a6f1f7969da95e9da753fa
An AML opcode type field was overlapped with values used for the top-level dispatch. Did not cause an actual problem, but fixed anyway.
--- drivers/acpi/acpica/amlcode.h | 61 +++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 28 deletions(-)
drivers/acpi/acpica/amlcode.h +33 -28
@@ -313,6 +313,11 @@* #A is the number of required arguments * #T is the number of target operands * #R indicates whether there is a return value +* +* These types are used for the top-level dispatch of the AML +* opcode. They group similar operators that can share common +* front-end code before dispatch to the final code that implements +* the operator. */ /*
@@ -353,42 +358,42 @@* The opcode Type is used in a dispatch table, do not change * or add anything new without updating the table. */ -#define AML_TYPE_EXEC_0A_0T_1R 0x00 -#define AML_TYPE_EXEC_1A_0T_0R 0x01/* Monadic1 */ -#define AML_TYPE_EXEC_1A_0T_1R 0x02/* Monadic2 */ -#define AML_TYPE_EXEC_1A_1T_0R 0x03 -#define AML_TYPE_EXEC_1A_1T_1R 0x04/* monadic2_r */ -#define AML_TYPE_EXEC_2A_0T_0R 0x05/* Dyadic1 */ -#define AML_TYPE_EXEC_2A_0T_1R 0x06/* Dyadic2 */ -#define AML_TYPE_EXEC_2A_1T_1R 0x07/* dyadic2_r */ -#define AML_TYPE_EXEC_2A_2T_1R 0x08 -#define AML_TYPE_EXEC_3A_0T_0R 0x09 -#define AML_TYPE_EXEC_3A_1T_1R 0x0A -#define AML_TYPE_EXEC_6A_0T_1R 0x0B +#define AML_TYPE_EXEC_0A_0T_1R 0x00/* 0 Args, 0 Target, 1 ret_val */ +#define AML_TYPE_EXEC_1A_0T_0R 0x01/* 1 Args, 0 Target, 0 ret_val */ +#define AML_TYPE_EXEC_1A_0T_1R 0x02/* 1 Args, 0 Target, 1 ret_val */ +#define AML_TYPE_EXEC_1A_1T_0R 0x03/* 1 Args, 1 Target, 0 ret_val */ +#define AML_TYPE_EXEC_1A_1T_1R 0x04/* 1 Args, 1 Target, 1 ret_val */ +#define AML_TYPE_EXEC_2A_0T_0R 0x05/* 2 Args, 0 Target, 0 ret_val */ +#define AML_TYPE_EXEC_2A_0T_1R 0x06/* 2 Args, 0 Target, 1 ret_val */ +#define AML_TYPE_EXEC_2A_1T_1R 0x07/* 2 Args, 1 Target, 1 ret_val */ +#define AML_TYPE_EXEC_2A_2T_1R 0x08/* 2 Args, 2 Target, 1 ret_val */ +#define AML_TYPE_EXEC_3A_0T_0R 0x09/* 3 Args, 0 Target, 0 ret_val */ +#define AML_TYPE_EXEC_3A_1T_1R 0x0A/* 3 Args, 1 Target, 1 ret_val */ +#define AML_TYPE_EXEC_6A_0T_1R 0x0B/* 6 Args, 0 Target, 1 ret_val */ /* End of types used in dispatch table */ -#define AML_TYPE_LITERAL 0x0B -#define AML_TYPE_CONSTANT 0x0C -#define AML_TYPE_METHOD_ARGUMENT 0x0D -#define AML_TYPE_LOCAL_VARIABLE 0x0E -#define AML_TYPE_DATA_TERM 0x0F +#define AML_TYPE_LITERAL 0x0C +#define AML_TYPE_CONSTANT 0x0D +#define AML_TYPE_METHOD_ARGUMENT 0x0E +#define AML_TYPE_LOCAL_VARIABLE 0x0F +#define AML_TYPE_DATA_TERM 0x10/* Generic for an op that returns a value */ -#define AML_TYPE_METHOD_CALL 0x10 +#define AML_TYPE_METHOD_CALL 0x11/* Miscellaneous types */ -#define AML_TYPE_CREATE_FIELD 0x11 -#define AML_TYPE_CREATE_OBJECT 0x12 -#define AML_TYPE_CONTROL 0x13 -#define AML_TYPE_NAMED_NO_OBJ 0x14 -#define AML_TYPE_NAMED_FIELD 0x15 -#define AML_TYPE_NAMED_SIMPLE 0x16 -#define AML_TYPE_NAMED_COMPLEX 0x17 -#define AML_TYPE_RETURN 0x18 -#define AML_TYPE_UNDEFINED 0x19 -#define AML_TYPE_BOGUS 0x1A +#define AML_TYPE_CREATE_FIELD 0x12 +#define AML_TYPE_CREATE_OBJECT 0x13 +#define AML_TYPE_CONTROL 0x14 +#define AML_TYPE_NAMED_NO_OBJ 0x15 +#define AML_TYPE_NAMED_FIELD 0x16 +#define AML_TYPE_NAMED_SIMPLE 0x17 +#define AML_TYPE_NAMED_COMPLEX 0x18 +#define AML_TYPE_RETURN 0x19 +#define AML_TYPE_UNDEFINED 0x1A +#define AML_TYPE_BOGUS 0x1B/* AML Package Length encodings */
Signature · 1 line
2.7.4
PATCH 27/53 ACPICA: Core: Always set GPIO VendorOffset
In reply to Lv ZhengFrom: Mika Westerberg <[email protected]>
ACPICA commit 51a92f414de7af1f7f7524de3f61daf5413cac9f
Acpiexec gives this warning when resources containing GPIOs are extracted using Resource command:
**** Data mismatch in descriptor [00] type 8C, Offset 00000000 **** Mismatch at byte offset 13: is 00, should be 25
**** Data mismatch in descriptor [01] type 8C, Offset 00000025 **** Mismatch at byte offset 13: is 00, should be 25
This happens because we do not set VendorOffset when doing resource to AML conversion. Fix this by always setting VendorOffset.
--- drivers/acpi/acpica/rsmisc.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/acpi/acpica/rsmisc.c +1 -3
@@ -596,9 +596,7 @@ acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,/* Set vendor offset only if there is vendor data */ -if (resource->data.gpio.vendor_length) { -ACPI_SET16 (target, aml_length); - } +ACPI_SET16 (target, aml_length);acpi_rs_set_resource_length (aml_length, aml);break ;
Signature · 1 line
2.7.4
PATCH 28/53 ACPICA: OSL: Add support to exclude stdarg.h
In reply to Lv ZhengACPICA commit e2df7455a9a4301b03668e4c9c02c7a564cc841c
Some hosts may choose not to include stdarg.h, implementing a configurability in acgcc.h, allowing OSen like Solaris to exclude stdarg.h. This patch also fixes acintel.h accordingly without providing builtin support as Intel compiler is similar as GCC. Reported by Dana Myers, fixed by Lv Zheng.
--- include/acpi/platform/acgcc.h | 10 ++++++++++ include/acpi/platform/acintel.h | 2 ++ 2 files changed, 12 insertions(+)
include/acpi/platform/acgcc.h +10 -0
@@ -48,7 +48,17 @@* Use compiler specific <stdarg.h> is a good practice for even when * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined. */ +#ifndef va_arg +#ifdef ACPI_USE_BUILTIN_STDARG +typedef __builtin_va_list va_list ; +#define va_start (v, l) __builtin_va_start(v, l) +#define va_end (v) __builtin_va_end(v) +#define va_arg (v, l) __builtin_va_arg(v, l) +#define va_copy (d, s) __builtin_va_copy(d, s) +#else #include <stdarg.h> +#endif +#endif #define ACPI_INLINE __inline__
include/acpi/platform/acintel.h +2 -0
@@ -48,7 +48,9 @@* Use compiler specific <stdarg.h> is a good practice for even when * -nostdinc is specified (i.e., ACPI_USE_STANDARD_HEADERS undefined. */ +#ifndef va_arg#include <stdarg.h> +#endif /* Configuration specific to Intel 64-bit C compiler */
Signature · 1 line
2.7.4
PATCH 29/53 ACPICA: Events: Add runtime stub support for event APIs
In reply to Lv ZhengACPICA commit 99bc3beca92c6574ea1d69de42e54f872e6373ce
It is reported that on Linux, RTC driver complains wrong errors on hardware reduced platform:
[ 4.085420] ACPI Warning: Could not enable fixed event - real_time_clock (4) (20160422/evxface-654)
This patch fixes this by correctly adding runtime reduced hardware check. Reported by Chandan Tagore, fixed by Lv Zheng.
--- drivers/acpi/acpica/evxfevnt.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
drivers/acpi/acpica/evxfevnt.c +18 -0
@@ -180,6 +180,12 @@ acpi_status acpi_enable_event(u32 event, u32 flags)ACPI_FUNCTION_TRACE (acpi_enable_event); +/* If Hardware Reduced flag is set, there are no fixed events */ + +if (acpi_gbl_reduced_hardware) { +return_ACPI_STATUS (AE_OK ); + } +/* Decode the Fixed Event */ if (event >ACPI_EVENT_MAX ) {
@@ -237,6 +243,12 @@ acpi_status acpi_disable_event(u32 event, u32 flags)ACPI_FUNCTION_TRACE (acpi_disable_event); +/* If Hardware Reduced flag is set, there are no fixed events */ + +if (acpi_gbl_reduced_hardware) { +return_ACPI_STATUS (AE_OK ); + } +/* Decode the Fixed Event */ if (event >ACPI_EVENT_MAX ) {
@@ -290,6 +302,12 @@ acpi_status acpi_clear_event(u32 event)ACPI_FUNCTION_TRACE (acpi_clear_event); +/* If Hardware Reduced flag is set, there are no fixed events */ + +if (acpi_gbl_reduced_hardware) { +return_ACPI_STATUS (AE_OK ); + } +/* Decode the Fixed Event */ if (event >ACPI_EVENT_MAX ) {
Signature · 1 line
2.7.4
PATCH 30/53 ACPICA: Update error message for field beyond buffer case
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 7a6b9c0b31cfb1606a6348404fee670b2d18743c
Improve/clarify the problem of a field definition beyond the limit of the target buffer.
--- drivers/acpi/acpica/dsopcode.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-)
drivers/acpi/acpica/dsopcode.c +5 -6
@@ -227,13 +227,12 @@ acpi_ds_init_buffer_field(u16 aml_opcode,/* Entire field must fit within the current length of the buffer */ -if ((bit_offset + bit_count) > (8 * (u32 ) buffer_desc->buffer.length)) { +if ((bit_offset + bit_count) > (8 * (u32 )buffer_desc->buffer.length)) {ACPI_ERROR ((AE_INFO , -"Field [%4.4s] at %u exceeds Buffer [%4.4s] size %u (bits)" , -acpi_ut_get_node_name (result_desc), - bit_offset + bit_count, -acpi_ut_get_node_name (buffer_desc->buffer.node), -8 * (u32 ) buffer_desc->buffer.length)); +"Field [%4.4s] at bit offset/length %u/%u " +"exceeds size of target Buffer (%u bits)" , +acpi_ut_get_node_name (result_desc), bit_offset, + bit_count,8 * (u32 )buffer_desc->buffer.length)); status =AE_AML_BUFFER_LIMIT ; goto cleanup; }
Signature · 1 line
2.7.4
PATCH 31/53 ACPICA: Explicitly cast 1 to u32
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 4091360d6526c8d4f1e6bccb6b1c3123bda9ac33
The runtime errors caused when acpica tools are compiled with -fsanitize=shift imply that these 1s are stored in integers. This cast insures that 1 is stored in unsigned integers.
--- drivers/acpi/acpica/utownerid.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
drivers/acpi/acpica/utownerid.c +9 -3
@@ -104,13 +104,19 @@ acpi_status acpi_ut_allocate_owner_id(acpi_owner_id *owner_id)break ; } -if (!(acpi_gbl_owner_id_mask[j] & (1 << k))) { +/* +* Note: the u32 cast ensures that 1 is stored as a unsigned +* integer. Omitting the cast may result in 1 being stored as an +* int. Some compilers or runtime error detection may flag this as +* an error. +*/ +if (!(acpi_gbl_owner_id_mask[j] & ((u32 )1 << k))) {/* * Found a free ID. The actual ID is the bit index plus one, * making zero an invalid Owner ID. Save this as the last ID * allocated and update the global ID mask. */ - acpi_gbl_owner_id_mask[j] |= (1 << k); + acpi_gbl_owner_id_mask[j] |= ((u32 )1 << k); acpi_gbl_last_owner_id_index = (u8 )j; acpi_gbl_next_owner_id_offset = (u8)(k +1 );
@@ -201,7 +207,7 @@ void acpi_ut_release_owner_id(acpi_owner_id *owner_id_ptr)/* Decode ID to index/offset pair */ index =ACPI_DIV_32 (owner_id); - bit =1 <<ACPI_MOD_32 (owner_id); + bit = (u32 )1 <<ACPI_MOD_32 (owner_id);/* Free the owner ID only if it is valid */
Signature · 1 line
2.7.4
PATCH 32/53 ACPICA: Debugger/acpiexec: Cleanup error messages
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 0d792c25d3bcaa857920ec009b732ec7c8942cfa
Clarify some of the error messages when a method failure happens.
--- drivers/acpi/acpica/dbobject.c | 6 +++--- drivers/acpi/acpica/dsdebug.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-)
drivers/acpi/acpica/dbobject.c +3 -3
@@ -448,7 +448,7 @@ void acpi_db_decode_locals(struct acpi_walk_state *walk_state)if (display_locals) {acpi_os_printf - ("\nInitialized Local Variables for method [%4.4s]:\n" , + ("\nInitialized Local Variables for Method [%4.4s]:\n" ,acpi_ut_get_node_name (node));for (i =0 ; i <ACPI_METHOD_NUM_LOCALS ; i++) {
@@ -461,7 +461,7 @@ void acpi_db_decode_locals(struct acpi_walk_state *walk_state) } }else {acpi_os_printf - ("No Local Variables are initialized for method [%4.4s]\n" , + ("No Local Variables are initialized for Method [%4.4s]\n" ,acpi_ut_get_node_name (node)); } }
@@ -515,7 +515,7 @@ void acpi_db_decode_arguments(struct acpi_walk_state *walk_state)acpi_os_printf ("Initialized Arguments for Method [%4.4s]: " "(%X arguments defined for method invocation)\n" ,acpi_ut_get_node_name (node), - obj_desc->method.param_count); + node->object->method.param_count);for (i =0 ; i <ACPI_METHOD_NUM_ARGS ; i++) { obj_desc = walk_state->arguments[i].object;
drivers/acpi/acpica/dsdebug.c +1 -0
@@ -196,6 +196,7 @@ acpi_ds_dump_method_stack(acpi_status status, op->common.next =NULL ;#ifdef ACPI_DISASSEMBLER +acpi_os_printf ("Failed at " );acpi_dm_disassemble (next_walk_state, op,ACPI_UINT32_MAX );#endif
Signature · 1 line
2.7.4
PATCH 33/53 ACPICA: Dispatcher: Remove unnecessary call to debugger
In reply to Lv ZhengACPICA commit eaa455accf165fee2df26410e271aab162264f6c
UBSAN reports an index out of range use in dsutils.c.
acpi_db_display_argument_object(
walk_state->operands[walk_state->num_operands - 1],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
walk_state);
This call was simply wrong, generated redundant debugger messages, and resulted in a -1 index into the operand stack. Linux kernel bug #120351 (link #1) and #194845 (link #2).
Originally fixed by Navin P.S. (link #1, comment 8), refined by Lv Zheng (link #3).
--- drivers/acpi/acpica/dsutils.c | 9 --------- 1 file changed, 9 deletions(-)
drivers/acpi/acpica/dsutils.c +0 -9
@@ -633,15 +633,6 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state,if ((op_info->flags &AML_HAS_RETVAL ) || (arg->common.flags &ACPI_PARSEOP_IN_STACK )) { -ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH , -"Argument previously created, already stacked\n" )); - -acpi_db_display_argument_object (walk_state-> - operands[walk_state-> - num_operands - -1 ], - walk_state); -/* * Use value that was already previously returned * by the evaluation of this argument
Signature · 1 line
2.7.4
PATCH 34/53 ACPICA: Disassembler: Abort on an invalid/unknown AML opcode
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ed0389cb11a61e63c568ac1f67948fc6a7bd1aeb
An invalid opcode indicates something seriously wrong with the input AML file. The AML parser is immediately confused and lost, causing the resulting parse tree to be ill-formed. The actual disassembly can then cause numerous unrelated errors and faults.
This change aborts the disassembly upon discovery of such an opcode during the AML parse phase.
--- drivers/acpi/acpica/psobject.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
drivers/acpi/acpica/psobject.c +14 -0
@@ -122,6 +122,9 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state) (u32)(aml_offset + sizeof(struct acpi_table_header))); +ACPI_ERROR ((AE_INFO , +"Aborting disassembly, AML byte code is corrupt" )); +/* Dump the context surrounding the invalid opcode */ acpi_ut_dump_buffer(((u8 *)walk_state->parser_state.
@@ -130,6 +133,14 @@ static acpi_status acpi_ps_get_aml_opcode(struct acpi_walk_state *walk_state)sizeof (struct acpi_table_header ) - 16));acpi_os_printf (" */\n" ); + +/* +* Just abort the disassembly, cannot continue because the +* parser is essentially lost. The disassembler can then +* randomly fail because an ill-constructed parse tree +* can result. +*/ +return_ACPI_STATUS (AE_AML_BAD_OPCODE );#endif }
@@ -331,6 +342,9 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,if (status ==AE_CTRL_PARSE_CONTINUE ) {return_ACPI_STATUS (AE_CTRL_PARSE_CONTINUE ); } +if (ACPI_FAILURE (status)) { +return_ACPI_STATUS (status); + }/* Create Op structure and append to parent's argument list */
Signature · 1 line
2.7.4
PATCH 35/53 ACPICA: Export the public mutex interfaces
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ff09dcf9eb69fe9318034c60c377436030e7feea
These interfaces are intended to be used by device drivers.
--- drivers/acpi/acpica/utxfmutex.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/acpi/acpica/utxfmutex.c +4 -1
@@ -151,6 +151,8 @@ acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout)return (status); } +ACPI_EXPORT_SYMBOL (acpi_acquire_mutex) +/******************************************************************************* * * FUNCTION: acpi_release_mutex
@@ -167,7 +169,6 @@ acpi_acquire_mutex(acpi_handle handle, acpi_string pathname, u16 timeout)* not both. * ******************************************************************************/ -acpi_status acpi_release_mutex (acpi_handle handle,acpi_string pathname) {acpi_status status;
@@ -185,3 +186,5 @@ acpi_status acpi_release_mutex(acpi_handle handle, acpi_string pathname)acpi_os_release_mutex (mutex_obj->mutex.os_mutex);return (AE_OK ); } + +ACPI_EXPORT_SYMBOL (acpi_release_mutex)
Signature · 1 line
2.7.4
PATCH 36/53 ACPICA: Remove extraneous status check
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit a83f7212df71d4276d0057fa31bfdc9809660560
Removed an unnecessary status check after call tons_build_normalized_path.
--- drivers/acpi/acpica/nsnames.c | 3 --- 1 file changed, 3 deletions(-)
drivers/acpi/acpica/nsnames.c +0 -3
@@ -190,9 +190,6 @@ acpi_ns_handle_to_pathname(acpi_handle target_handle, (void )acpi_ns_build_normalized_path (node, buffer->pointer, required_size, no_trailing); -if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); - }ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"%s [%X]\n" , (char *)buffer->pointer, (u32 ) required_size));
Signature · 1 line
2.7.4
PATCH 37/53 ACPICA: Update resource descriptor handling
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit c8eac10178b387f9eb1935694e509d4518da77bb
This change restores the change introduced by commit 23b5bbe and adds a comment concerning resource descriptor buffers that extend beyond the END_TAG descriptor.
--- drivers/acpi/acpica/utresrc.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/acpi/acpica/utresrc.c +9 -5
@@ -448,9 +448,11 @@ 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 */ - -if (aml_length <sizeof (struct aml_resource_end_tag )) { +/* +* 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 )) {return_ACPI_STATUS (AE_AML_NO_RESOURCE_END_TAG ); }
@@ -516,8 +518,10 @@ acpi_ut_walk_aml_resources(struct acpi_walk_state *walk_state, *context = aml; } -/* Normal exit */ - +/* +* Normal exit. Note: We allow the buffer to be larger than +* the resource template, as long as the END_TAG exists. +*/ return_ACPI_STATUS (AE_OK ); }
Signature · 1 line
2.7.4
PATCH 38/53 ACPICA: Split resource descriptor decode strings to a new file
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 00906ae0aff4c6b76abc232ef99700e7d7c0e325
There are enough of these strings to justify a separate file. Also, these strings are only used for the disassembler and the debugger. Thus, this change improves ACPICA modularity.
--- drivers/acpi/acpica/Makefile | 1 + drivers/acpi/acpica/utresdecode.c | 315 ++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utresrc.c | 264 -------------------------------- 3 files changed, 316 insertions(+), 264 deletions(-) create mode 100644 drivers/acpi/acpica/utresdecode.c
drivers/acpi/acpica/Makefile +1 -0
@@ -172,6 +172,7 @@ acpi-y += \ utosi.o \ utownerid.o \ utpredef.o \ + utresdecode.o \ utresrc.o \ utstate.o \ utstring.o \
drivers/acpi/acpica/utresdecode.c new file +315 -0
315 lines not on this page · raw message
drivers/acpi/acpica/utresrc.c +0 -264
270 lines not on this page · raw message
Signature · 1 line
2.7.4
PATCH 39/53 ACPICA: Update comments, no functional change
In reply to Lv ZhengFrom: Cao Jin <[email protected]>
ACPICA commit 45eb6384fb47f4fdc5759f63c47a9b6799924972
--- drivers/acpi/acpica/tbfadt.c | 4 ++-- drivers/acpi/acpica/tbutils.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/acpi/acpica/tbfadt.c +2 -2
@@ -449,8 +449,8 @@ void acpi_tb_create_local_fadt(struct acpi_table_header *table, u32 length)* The 64-bit X fields are optional extensions to the original 32-bit FADT * V1.0 fields. Even if they are present in the FADT, they are optional and * are unused if the BIOS sets them to zero. Therefore, we must copy/expand -* 32-bit V1.0 fields to the 64-bit X fields if the the 64-bit X field is -* originally zero. +* 32-bit V1.0 fields to the 64-bit X fields if the 64-bit X field is originally +* zero. * * For ACPI 1.0 FADTs (that contain no 64-bit addresses), all 32-bit address * fields are expanded to the corresponding 64-bit X fields in the internal
drivers/acpi/acpica/tbutils.c +3 -3
@@ -141,9 +141,9 @@ void acpi_tb_check_dsdt_header(void)* * FUNCTION: acpi_tb_copy_dsdt * -* PARAMETERS: table_desc - Installed table to copy +* PARAMETERS: table_index - Index of installed table to copy * -* RETURN: None +* RETURN: The copied DSDT * * DESCRIPTION: Implements a subsystem option to copy the DSDT to local memory. * Some very bad BIOSs are known to either corrupt the DSDT or
@@ -239,7 +239,7 @@ acpi_tb_get_root_table_entry(u8 *table_entry, u32 table_entry_size)* * FUNCTION: acpi_tb_parse_root_table * -* PARAMETERS: rsdp - Pointer to the RSDP +* PARAMETERS: rsdp_address - Pointer to the RSDP * * RETURN: Status *
Signature · 1 line
2.7.4
PATCH 40/53 ACPICA: Comment update: spelling/format. No functional change
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit d9861dae21b41d48745496bac2665f14e4e28c08
Fix some spelling errors and reformat some long lines.
--- include/acpi/actypes.h | 64 +++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 30 deletions(-)
include/acpi/actypes.h +34 -30
@@ -47,9 +47,9 @@/* acpisrc:struct_defs -- for acpisrc conversion */ /* -* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent header -* and must be either 32 or 64. 16-bit ACPICA is no longer supported, as of -* 12/2006. +* ACPI_MACHINE_WIDTH must be specified in an OS- or compiler-dependent +* header and must be either 32 or 64. 16-bit ACPICA is no longer +* supported, as of 12/2006. */ #ifndef ACPI_MACHINE_WIDTH #error ACPI_MACHINE_WIDTH not defined
@@ -87,9 +87,9 @@* s64 64-bit (8 byte) signed value * * COMPILER_DEPENDENT_UINT64/s64 - These types are defined in the -* compiler-dependent header(s) and were introduced because there is no common -* 64-bit integer type across the various compilation models, as shown in -* the table below. +* compiler-dependent header(s) and were introduced because there is no +* common 64-bit integer type across the various compilation models, as +* shown in the table below. * * Datatype LP64 ILP64 LLP64 ILP32 LP32 16bit * char 8 8 8 8 8 8
@@ -106,10 +106,10 @@* 2) These types represent the native word size of the target mode of the * processor, and may be 16-bit, 32-bit, or 64-bit as required. They are * usually used for memory allocation, efficient loop counters, and array -* indexes. The types are similar to the size_t type in the C library and are -* required because there is no C type that consistently represents the native -* data width. acpi_size is needed because there is no guarantee that a -* kernel-level C library is present. +* indexes. The types are similar to the size_t type in the C library and +* are required because there is no C type that consistently represents the +* native data width. acpi_size is needed because there is no guarantee +* that a kernel-level C library is present. * * acpi_size 16/32/64-bit unsigned value * acpi_native_int 16/32/64-bit signed value
@@ -169,9 +169,10 @@ typedef u64 acpi_physical_address;/* * In the case of the Itanium Processor Family (IPF), the hardware does not -* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag -* to indicate that special precautions must be taken to avoid alignment faults. -* (IA64 or ia64 is currently used by existing compilers to indicate IPF.) +* support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED +* flag to indicate that special precautions must be taken to avoid alignment +* faults. (IA64 or ia64 is currently used by existing compilers to indicate +* IPF.) * * Note: EM64T and other X86-64 processors support misaligned transfers, * so there is no need to define this flag.
@@ -309,8 +310,8 @@ typedef u64 acpi_physical_address;#endif /* -* Some compilers complain about unused variables. Sometimes we don't want to -* use all the variables (for example, _acpi_module_name). This allows us +* Some compilers complain about unused variables. Sometimes we don't want +* to use all the variables (for example, _acpi_module_name). This allows us * to tell the compiler in a per-variable manner that a variable * is unused */
@@ -319,8 +320,9 @@ typedef u64 acpi_physical_address;#endif /* -* All ACPICA external functions that are available to the rest of the kernel -* are tagged with thes macros which can be defined as appropriate for the host. +* All ACPICA external functions that are available to the rest of the +* kernel are tagged with these macros which can be defined as appropriate +* for the host. * * Notes: * ACPI_EXPORT_SYMBOL_INIT is used for initialization and termination
@@ -383,7 +385,8 @@ typedef u64 acpi_physical_address;/****************************************************************************** * -* ACPI Specification constants (Do not change unless the specification changes) +* ACPI Specification constants (Do not change unless the specification +* changes) * *****************************************************************************/
@@ -484,10 +487,10 @@ typedef u8 acpi_owner_id;#define ACPI_DO_NOT_WAIT 0/* -* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are 32 bits. -* In ACPI version 2 (2000) and later, integers are 64 bits. Note that this -* pertains to the ACPI integer type only, not to other integers used in the -* implementation of the ACPICA subsystem. +* Obsolete: Acpi integer width. In ACPI version 1 (1996), integers are +* 32 bits. In ACPI version 2 (2000) and later, integers are max 64 bits. +* Note that this pertains to the ACPI integer type only, not to other +* integers used in the implementation of the ACPICA subsystem. * * 01/2010: This type is obsolete and has been removed from the entire ACPICA * code base. It remains here for compatibility with device drivers that use
@@ -668,10 +671,11 @@ typedef u32 acpi_object_type;/* * These are object types that do not map directly to the ACPI -* object_type() operator. They are used for various internal purposes only. -* If new predefined ACPI_TYPEs are added (via the ACPI specification), these -* internal types must move upwards. (There is code that depends on these -* values being contiguous with the external types above.) +* object_type() operator. They are used for various internal purposes +* only. If new predefined ACPI_TYPEs are added (via the ACPI +* specification), these internal types must move upwards. (There +* is code that depends on these values being contiguous with the +* external types above.) */ #define ACPI_TYPE_LOCAL_REGION_FIELD 0x11#define ACPI_TYPE_LOCAL_BANK_FIELD 0x12
@@ -771,7 +775,7 @@ typedef u32 acpi_event_status;* | | | | +-- Type of dispatch:to method, handler, notify, or none * | | | +----- Interrupt type: edge or level triggered * | | +------- Is a Wake GPE -* | +--------- Is GPE masked by the software GPE masking machanism +* | +--------- Is GPE masked by the software GPE masking mechanism * +------------ <Reserved> */ #define ACPI_GPE_DISPATCH_NONE (u8) 0x00
@@ -909,8 +913,8 @@ struct acpi_sleep_functions {*/ /* -* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package element -* or an unresolved named reference. +* Note: Type == ACPI_TYPE_ANY (0) is used to indicate a NULL package +* element or an unresolved named reference. */ union acpi_object {acpi_object_type type;/* See definition of acpi_ns_type for values */
@@ -1167,7 +1171,7 @@ struct acpi_pnp_device_id_list {/* * Structure returned from acpi_get_object_info. -* Optimized for both 32- and 64-bit builds +* Optimized for both 32-bit and 64-bit builds. */ struct acpi_device_info {u32 info_size;/* Size of info, including ID strings */
Signature · 1 line
2.7.4
PATCH 41/53 ACPICA: Fix for Device/Thermal objects with ObjectType and DerefOf
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 89565151aa4db7b546d4935b187bf2c4a86885ee
These types must be special cased because the namespace node does not contain a subobject as do all other types.
--- drivers/acpi/acpica/exoparg1.c | 25 +++++++++++++++++++------ drivers/acpi/acpica/exresolv.c | 23 ++++++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-)
drivers/acpi/acpica/exoparg1.c +19 -6
@@ -921,13 +921,26 @@ acpi_status acpi_ex_opcode_1A_0T_1R(struct acpi_walk_state *walk_state)* This is a deref_of (object_reference) * Get the actual object from the Node (This is the dereference). * This case may only happen when a local_x or arg_x is -* dereferenced above. +* dereferenced above, or for references to device and +* thermal objects. */ - return_desc =acpi_ns_get_attached_object ((struct -acpi_namespace_node - *) - operand[0 ]); -acpi_ut_add_reference (return_desc); +switch (((struct acpi_namespace_node *)operand[0 ])-> + type) { +case ACPI_TYPE_DEVICE : +case ACPI_TYPE_THERMAL : + +/* These types have no node subobject, return the NS node */ + + return_desc = operand[0 ]; +break ; + +default : +/* For most types, get the object attached to the node */ + + return_desc =acpi_ns_get_attached_object ((struct acpi_namespace_node *)operand[0 ]); +acpi_ut_add_reference (return_desc); +break ; + } }else {/* * This must be a reference object produced by either the
drivers/acpi/acpica/exresolv.c +18 -5
@@ -368,11 +368,24 @@ acpi_ex_resolve_multiple(struct acpi_walk_state *walk_state, *)obj_desc); } -if (!obj_desc) { -ACPI_ERROR ((AE_INFO , -"[%4.4s] Node is unresolved or uninitialized" , -acpi_ut_get_node_name (node))); -return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE ); +switch (type) { +case ACPI_TYPE_DEVICE : +case ACPI_TYPE_THERMAL : + +/* These types have no attached subobject */ +break ; + +default : + +/* All other types require a subobject */ + +if (!obj_desc) { +ACPI_ERROR ((AE_INFO , +"[%4.4s] Node is unresolved or uninitialized" , +acpi_ut_get_node_name (node))); +return_ACPI_STATUS (AE_AML_UNINITIALIZED_NODE ); + } +break ; }break ;
Signature · 1 line
2.7.4
PATCH 42/53 ACPICA: Update two error messages to emit control method name
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 73f7fab1376d5dbfda24cf51c1bb04df0d31b48e
Intention is to improve debugging by clarifying which method has caused the error, in acpi_evaluate_object_typed.
--- drivers/acpi/acpica/nsxfeval.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-)
drivers/acpi/acpica/nsxfeval.c +29 -10
@@ -85,6 +85,8 @@ acpi_evaluate_object_typed(acpi_handle handle, {acpi_status status;u8 free_buffer_on_error = FALSE; +acpi_handle target_handle; +char *full_pathname;ACPI_FUNCTION_TRACE (acpi_evaluate_object_typed);
@@ -98,38 +100,51 @@ acpi_evaluate_object_typed(acpi_handle handle, free_buffer_on_error = TRUE; } + status =acpi_get_handle (handle, pathname, &target_handle); +if (ACPI_FAILURE (status)) { +return_ACPI_STATUS (status); + } + + full_pathname =acpi_ns_get_external_pathname (target_handle); +if (!full_pathname) { +return_ACPI_STATUS (AE_NO_MEMORY ); + } +/* Evaluate the object */ - status =acpi_evaluate_object (handle, pathname, - external_params, return_buffer); + status =acpi_evaluate_object (target_handle,NULL , external_params, + return_buffer);if (ACPI_FAILURE (status)) { -return_ACPI_STATUS (status); + goto exit; } -/* Type ANY means "don't care" */ +/* Type ANY means "don't care about return value type" */ if (return_type ==ACPI_TYPE_ANY ) { -return_ACPI_STATUS (AE_OK ); + goto exit; }if (return_buffer->length ==0 ) {/* Error because caller specifically asked for a return value */ -ACPI_ERROR ((AE_INFO ,"No return value" )); -return_ACPI_STATUS (AE_NULL_OBJECT ); +ACPI_ERROR ((AE_INFO ,"%s did not return any object" , + full_pathname)); + status =AE_NULL_OBJECT ; + goto exit; }/* Examine the object type returned from evaluate_object */ if (((union acpi_object *)return_buffer->pointer)->type == return_type) { -return_ACPI_STATUS (AE_OK ); + goto exit; }/* Return object type does not match requested type */ ACPI_ERROR ((AE_INFO , -"Incorrect return type [%s] requested [%s]" , +"Incorrect return type from %s - received [%s], requested [%s]" , + full_pathname,acpi_ut_get_type_name (((union acpi_object *)return_buffer-> pointer)->type),acpi_ut_get_type_name (return_type)));
@@ -147,7 +162,11 @@ acpi_evaluate_object_typed(acpi_handle handle, } return_buffer->length =0 ; -return_ACPI_STATUS (AE_TYPE ); + status =AE_TYPE ; + +exit: +ACPI_FREE (full_pathname); +return_ACPI_STATUS (status); }ACPI_EXPORT_SYMBOL (acpi_evaluate_object_typed)
Signature · 1 line
2.7.4
PATCH 43/53 ACPICA: Changing External to a named object
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 0d5dd42fd7d5129835b6d92250378a962eb73cb3
This is done so that the aml parser will build the parse tree of External Op as a named object. This is done to streamline creation of external op parse nodes and facilitate namespace resolution of externals.
--- drivers/acpi/acpica/acopcode.h | 2 +- drivers/acpi/acpica/psopcode.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-)
drivers/acpi/acpica/acopcode.h +1 -1
@@ -112,7 +112,7 @@#define ARGP_DWORD_OP ARGP_LIST1 (ARGP_DWORDDATA)#define ARGP_ELSE_OP ARGP_LIST2 (ARGP_PKGLENGTH, ARGP_TERMLIST)#define ARGP_EVENT_OP ARGP_LIST1 (ARGP_NAME) -#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_BYTEDATA) +#define ARGP_EXTERNAL_OP ARGP_LIST3 (ARGP_NAME, ARGP_BYTEDATA, ARGP_BYTEDATA)#define ARGP_FATAL_OP ARGP_LIST3 (ARGP_BYTEDATA, ARGP_DWORDDATA, ARGP_TERMARG)#define ARGP_FIELD_OP ARGP_LIST4 (ARGP_PKGLENGTH, ARGP_NAMESTRING, ARGP_BYTEDATA, ARGP_FIELDLIST)#define ARGP_FIND_SET_LEFT_BIT_OP ARGP_LIST2 (ARGP_TERMARG, ARGP_TARGET)
drivers/acpi/acpica/psopcode.c +5 -3
@@ -650,9 +650,11 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {/* ACPI 6.0 opcodes */ -/* 81 */ ACPI_OP ("External" ,ARGP_EXTERNAL_OP ,ARGI_EXTERNAL_OP , -ACPI_TYPE_ANY ,AML_CLASS_EXECUTE ,/* ? */ -AML_TYPE_EXEC_3A_0T_0R ,AML_FLAGS_EXEC_3A_0T_0R ), +/* 81 */ ACPI_OP ("External" ,ARGP_EXTERNAL_OP ,ARGI_EXTERNAL_OP , +ACPI_TYPE_ANY ,AML_CLASS_NAMED_OBJECT , +AML_TYPE_NAMED_SIMPLE , +AML_HAS_ARGS |AML_NSOBJECT |AML_NSOPCODE | +AML_NSNODE |AML_NAMED ),/* 82 */ ACPI_OP ("Comment" ,ARGP_COMMENT_OP ,ARGI_COMMENT_OP ,ACPI_TYPE_STRING ,AML_CLASS_ARGUMENT ,AML_TYPE_LITERAL ,AML_CONSTANT )
Signature · 1 line
2.7.4
PATCH 44/53 ACPICA: Changed Gbl_disasm_flag to acpi_gbl_disasm_flag
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 0e0a87111f280c197661689979b2c48443b0326c
This is a name change as well as a change in the scope of this flag. This is done so that it can be referenced in the dispatcher.
--- drivers/acpi/acpica/acglobal.h | 2 ++ 1 file changed, 2 insertions(+)
drivers/acpi/acpica/acglobal.h +2 -0
@@ -369,6 +369,8 @@ ACPI_GLOBAL(const char, *acpi_gbl_pld_vertical_position_list[]); ACPI_GLOBAL(const char, *acpi_gbl_pld_horizontal_position_list[]); ACPI_GLOBAL(const char, *acpi_gbl_pld_shape_list[]); +ACPI_INIT_GLOBAL (u8, acpi_gbl_disasm_flag, FALSE); +#endif /*
Signature · 1 line
2.7.4
PATCH 45/53 ACPICA: Disassembler: prevent external op's from opening a new scope
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit c512c2bfcce65b8e8f37d549ac2fa4a1e0182e46
Since Externals could be of ACPI_TYPE_METHOD, there is a possibility that the acpi_ns_lookup may cause a new scope to be opened. Therefore, disable opening the scope for all acpi_ns_lookup invocations that deal with externals.
--- drivers/acpi/acpica/dswload2.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/acpi/acpica/dswload2.c +10 -0
@@ -310,6 +310,16 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state, flags |=ACPI_NS_TEMPORARY ; } } +#ifdef ACPI_ASL_COMPILER + +/* +* Do not open a scope. This could be an external method +* and open a scope. +*/ +if (walk_state->opcode ==AML_EXTERNAL_OP ) { + flags |=ACPI_NS_DONT_OPEN_SCOPE ; + } +#endif /* Add new entry or lookup existing entry */
Signature · 1 line
2.7.4
PATCH 46/53 ACPICA: Disassembler: add external op to namespace on first pass
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 117be4819588df3b7146f6f01723639b1d61e775
By doing so, external control method resolutions can be resolved like normal control methods. This eliminates the need to reparse the aml all over again for external control methods that were encoded within the aml with the 0x15 bytecode.
--- drivers/acpi/acpica/dswload.c | 40 +++++++++++++++++++++++++++++++++++++++- drivers/acpi/acpica/dswload2.c | 10 ++++++++-- 2 files changed, 47 insertions(+), 3 deletions(-)
drivers/acpi/acpica/dswload.c +39 -1
@@ -434,6 +434,10 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)acpi_object_type object_type;acpi_status status =AE_OK ; +#ifdef ACPI_ASL_COMPILER +u8 param_count; +#endif +ACPI_FUNCTION_TRACE (ds_load1_end_op); op = walk_state->op;
@@ -514,6 +518,38 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state) } } } +#ifdef ACPI_ASL_COMPILER +/* +* For external opcode, get the object type from the argument and +* get the parameter count from the argument's next. +*/ +if (acpi_gbl_disasm_flag && + op->common.node && op->common.aml_opcode ==AML_EXTERNAL_OP ) { +/* +* Note, if this external is not a method +* Op->Common.Value.Arg->Common.Next->Common.Value.Integer == 0 +* Therefore, param_count will be 0. +*/ + param_count = + (u8 )op->common.value.arg->common.next->common.value.integer; + object_type = (u8 )op->common.value.arg->common.value.integer; + op->common.node->flags |=ANOBJ_IS_EXTERNAL ; + op->common.node->type = (u8 )object_type; + +acpi_dm_create_subobject_for_external ((u8 )object_type, + &op->common.node, + param_count); + +/* +* Add the external to the external list because we may be +* emitting code based off of the items within the external list. +*/ +acpi_dm_add_op_to_external_list (op, op->named.path, + (u8 )object_type, param_count, +ACPI_EXT_ORIGIN_FROM_OPCODE | +ACPI_EXT_RESOLVED_REFERENCE ); + } +#endif /* * If we are executing a method, do not create any namespace objects
@@ -563,7 +599,9 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)/* Pop the scope stack (only if loading a table) */ -if (!walk_state->method_node &&acpi_ns_opens_scope (object_type)) { +if (!walk_state->method_node && + op->common.aml_opcode !=AML_EXTERNAL_OP && +acpi_ns_opens_scope (object_type)) {ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH ,"(%s): Popping scope for Op %p\n" ,acpi_ut_get_type_name (object_type), op));
drivers/acpi/acpica/dswload2.c +8 -2
@@ -313,8 +313,14 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,#ifdef ACPI_ASL_COMPILER /* -* Do not open a scope. This could be an external method -* and open a scope. +* Do not open a scope for AML_EXTERNAL_OP +* acpi_ns_lookup can open a new scope based on the object type +* of this op. AML_EXTERNAL_OP is a declaration rather than a +* definition. In the case that this external is a method object, +* acpi_ns_lookup will open a new scope. However, an AML_EXTERNAL_OP +* associated with the ACPI_TYPE_METHOD is a declaration, rather than +* a definition. Flags is set to avoid opening a scope for any +* AML_EXTERNAL_OP. */ if (walk_state->opcode ==AML_EXTERNAL_OP ) { flags |=ACPI_NS_DONT_OPEN_SCOPE ;
Signature · 1 line
2.7.4
PATCH 47/53 ACPICA: Disassembler: allow conflicting external declarations to be emitted.
In reply to Lv ZhengFrom: Erik Schmauss <[email protected]>
ACPICA commit 0ed9f2e2ccc112439eaa355b5952a05d6fdb7814
An external declaration is a conflicting declaration when a name has been declared as an external and a named object within the same file.
--- drivers/acpi/acpica/aclocal.h | 1 + drivers/acpi/acpica/nsaccess.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+)
drivers/acpi/acpica/aclocal.h +1 -0
@@ -1181,6 +1181,7 @@ struct acpi_external_list {#define ACPI_EXT_INTERNAL_PATH_ALLOCATED 0x04/* Deallocate internal path on completion */ #define ACPI_EXT_EXTERNAL_EMITTED 0x08/* External() statement has been emitted */ #define ACPI_EXT_ORIGIN_FROM_OPCODE 0x10/* External came from a External() opcode */ +#define ACPI_EXT_CONFLICTING_DECLARATION 0x20/* External has a conflicting declaration within AML */ struct acpi_external_file {char *path;
drivers/acpi/acpica/nsaccess.c +27 -0
@@ -47,6 +47,10 @@#include "acnamesp.h" #include "acdispat.h" +#ifdef ACPI_ASL_COMPILER +#include "acdisasm.h" +#endif +#define _COMPONENT ACPI_NAMESPACEACPI_MODULE_NAME ("nsaccess" )
@@ -580,6 +584,29 @@ acpi_ns_lookup(union acpi_generic_state *scope_info, (char *)¤t_node->name, current_node)); } +#ifdef ACPI_ASL_COMPILER +/* +* If this ACPI name already exists within the namespace as an +* external declaration, then mark the external as a conflicting +* declaration and proceed to process the current node as if it did +* not exist in the namespace. If this node is not processed as +* normal, then it could cause improper namespace resolution +* by failing to open a new scope. +*/ +if (acpi_gbl_disasm_flag && + (status ==AE_ALREADY_EXISTS ) && + ((this_node->flags &ANOBJ_IS_EXTERNAL ) || + (walk_state + && walk_state->opcode ==AML_EXTERNAL_OP ))) { + this_node->flags &= ~ANOBJ_IS_EXTERNAL ; + this_node->type = (u8 )this_search_type; +if (walk_state->opcode !=AML_EXTERNAL_OP ) { +acpi_dm_mark_external_conflict + (this_node); + } +break ; + } +#endif *return_node = this_node;return_ACPI_STATUS (status);
Signature · 1 line
2.7.4
PATCH 48/53 ACPICA: Improvements for debug output only
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit c3f798b7b0e4f2403d3ce0cc1107ab0932efe1e3
Changes to debug print and debug function tracing.
--- drivers/acpi/acpica/dsargs.c | 5 +++-- drivers/acpi/acpica/dswexec.c | 4 ++-- drivers/acpi/acpica/exdump.c | 30 ++++++++++++++++++++---------- 3 files changed, 25 insertions(+), 14 deletions(-)
drivers/acpi/acpica/dsargs.c +3 -2
@@ -82,7 +82,7 @@ acpi_ds_execute_arguments(struct acpi_namespace_node *node,union acpi_parse_object *op;struct acpi_walk_state *walk_state; -ACPI_FUNCTION_TRACE (ds_execute_arguments); +ACPI_FUNCTION_TRACE_PTR (ds_execute_arguments, aml_start);/* Allocate a new parser op to be the root of the parsed tree */
@@ -338,7 +338,8 @@ acpi_status acpi_ds_get_package_arguments(union acpi_operand_object *obj_desc)return_ACPI_STATUS (AE_AML_INTERNAL ); } -ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"Package Arg Init\n" )); +ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"Package Argument Init, AML Ptr: %p\n" , + obj_desc->package.aml_start));/* Execute the AML code for the term_arg arguments */
drivers/acpi/acpica/dswexec.c +2 -2
@@ -576,8 +576,8 @@ acpi_status acpi_ds_exec_end_op(struct acpi_walk_state *walk_state)case AML_TYPE_CREATE_OBJECT :ACPI_DEBUG_PRINT ((ACPI_DB_EXEC , -"Executing CreateObject (Buffer/Package) Op=%p\n" , - op)); +"Executing CreateObject (Buffer/Package) Op=%p AMLPtr=%p\n" , + op, op->named.data));switch (op->common.parent->common.aml_opcode) {case AML_NAME_OP :
drivers/acpi/acpica/exdump.c +20 -10
@@ -645,10 +645,12 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)/* obj_desc is a valid object */ if (depth >0 ) { -ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"%*s[%u] %p " , - depth," " , depth, obj_desc)); +ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"%*s[%u] %p Refs=%u " , + depth," " , depth, obj_desc, + obj_desc->common.reference_count)); }else { -ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"%p " , obj_desc)); +ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"%p Refs=%u " , + obj_desc, obj_desc->common.reference_count)); }/* Decode object type */
@@ -690,8 +692,11 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)case ACPI_REFCLASS_NAME : -acpi_os_printf ("- [%4.4s]\n" , - obj_desc->reference.node->name.ascii); +acpi_ut_repair_name (obj_desc->reference.node->name. + ascii); +acpi_os_printf ("- [%4.4s] (Node %p)\n" , + obj_desc->reference.node->name.ascii, + obj_desc->reference.node);break ;case ACPI_REFCLASS_ARG :
@@ -999,9 +1004,15 @@ static void acpi_ex_dump_reference_obj(union acpi_operand_object *obj_desc) status =acpi_ns_handle_to_pathname (obj_desc->reference.node, &ret_buf, TRUE);if (ACPI_FAILURE (status)) { -acpi_os_printf (" Could not convert name to pathname\n" ); +acpi_os_printf + (" Could not convert name to pathname: %s\n" , +acpi_format_exception (status)); }else { -acpi_os_printf ("%s\n" , (char *)ret_buf.pointer); +acpi_os_printf ("%s: %s\n" , +acpi_ut_get_type_name (obj_desc-> + reference.node-> + type), + (char *)ret_buf.pointer);ACPI_FREE (ret_buf.pointer); } }else if (obj_desc->reference.object) {
@@ -1111,9 +1122,8 @@ acpi_ex_dump_package_obj(union acpi_operand_object *obj_desc,case ACPI_TYPE_LOCAL_REFERENCE : -acpi_os_printf ("[Object Reference] Type [%s] %2.2X" , -acpi_ut_get_reference_name (obj_desc), - obj_desc->reference.class); +acpi_os_printf ("[Object Reference] Class [%s]" , +acpi_ut_get_reference_name (obj_desc));acpi_ex_dump_reference_obj (obj_desc);break ;
Signature · 1 line
2.7.4
PATCH 49/53 ACPICA: Unix application OSL: Correctly handle control-c (EINTR)
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit dfbb87c3a96cfd007375f34a96e6f4a8ee477f97
Handle EINTR from a sem_wait operation. Ignore a control-c.
--- tools/power/acpi/os_specific/service_layers/osunixxf.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
tools/power/acpi/os_specific/service_layers/osunixxf.c +7 -3
@@ -750,9 +750,9 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout) {acpi_status status =AE_OK ;sem_t *sem = (sem_t *) handle; +int ret_val;#ifndef ACPI_USE_ALTERNATE_TIMEOUT struct timespec time; -int ret_val;#endif if (!sem) {
@@ -778,7 +778,10 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)case ACPI_WAIT_FOREVER : -if (sem_wait (sem)) { +while (((ret_val =sem_wait (sem)) ==-1 ) && (errno ==EINTR )) { +continue ;/* Restart if interrupted */ + } +if (ret_val !=0 ) { status = (AE_TIME ); }break ;
@@ -831,7 +834,8 @@ acpi_os_wait_semaphore(acpi_handle handle, u32 units, u16 msec_timeout)while (((ret_val =sem_timedwait (sem, &time)) ==-1 ) && (errno ==EINTR )) { -continue ; +continue ;/* Restart if interrupted */ + }if (ret_val !=0 ) {
Signature · 1 line
2.7.4
PATCH 50/53 ACPICA: Simplify output for the ACPI Debug Object
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ea08cda9859d9f758f4832400b2d559847c2d52a
Cleanup the output, change [Acpi Debug] to Acpi Debug:
--- drivers/acpi/acpica/exdebug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/exdebug.c +2 -2
@@ -117,10 +117,10 @@ acpi_ex_do_debug_object(union acpi_operand_object *source_desc, timer = ((u32 )acpi_os_get_timer () /10 ); timer &=0x03FFFFFF ; -acpi_os_printf ("[ACPI Debug T=0x%8.8X] %*s" , timer, +acpi_os_printf ("ACPI Debug: T=0x%8.8X %*s" , timer, level," " ); }else { -acpi_os_printf ("[ACPI Debug] %*s" , level," " ); +acpi_os_printf ("ACPI Debug: %*s" , level," " ); } }
Signature · 1 line
2.7.4
PATCH 51/53 ACPICA: acpiexec: enhance local signal handler
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit ffef4ae9a1b6032ebadeab2c2b806f0e585f0006
Add support for SIGSEGV
Improve/cleanup SIGINT handling
--- drivers/acpi/acpica/dbexec.c | 12 ++++++++++++ drivers/acpi/acpica/dsmethod.c | 12 ++++++++---- drivers/acpi/acpica/psparse.c | 14 +++++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-)
drivers/acpi/acpica/dbexec.c +12 -0
@@ -181,6 +181,18 @@ acpi_db_execute_method(struct acpi_db_method_info *info, acpi_gbl_method_executing = FALSE;if (ACPI_FAILURE (status)) { +if ((status ==AE_ABORT_METHOD ) || acpi_gbl_abort_method) { + +/* Clear the abort and fall back to the debugger prompt */ + +ACPI_EXCEPTION ((AE_INFO , status, +"Aborting top-level method" )); + + acpi_gbl_abort_method = FALSE; + status =AE_OK ; + goto cleanup; + } +ACPI_EXCEPTION ((AE_INFO , status,"while executing %s from debugger" , info->pathname));
drivers/acpi/acpica/dsmethod.c +8 -4
@@ -212,6 +212,7 @@ acpi_status acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state) { u32 aml_offset; +acpi_name name =0 ;ACPI_FUNCTION_ENTRY ();
@@ -237,10 +238,13 @@ acpi_ds_method_error(acpi_status status, struct acpi_walk_state *walk_state) walk_state->parser_state. aml_start); - status =acpi_gbl_exception_handler (status, - walk_state->method_node ? - walk_state->method_node-> - name.integer :0 , +if (walk_state->method_node) { + name = walk_state->method_node->name.integer; + }else if (walk_state->deferred_node) { + name = walk_state->deferred_node->name.integer; + } + + status =acpi_gbl_exception_handler (status, name, walk_state->opcode, aml_offset,NULL );acpi_ex_enter_interpreter ();
drivers/acpi/acpica/psparse.c +11 -3
@@ -56,6 +56,7 @@#include "acdispat.h" #include "amlcode.h" #include "acinterp.h" +#include "acnamesp.h" #define _COMPONENT ACPI_PARSERACPI_MODULE_NAME ("psparse" )
@@ -538,9 +539,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)/* Either the method parse or actual execution failed */ acpi_ex_exit_interpreter (); -ACPI_ERROR_METHOD ("Method parse/execution failed" , - walk_state->method_node,NULL , - status); +if (status ==AE_ABORT_METHOD ) { +acpi_ns_print_node_pathname (walk_state-> + method_node, +"Method aborted:" ); +acpi_os_printf ("\n" ); + }else { +ACPI_ERROR_METHOD + ("Method parse/execution failed" , + walk_state->method_node,NULL , status); + }acpi_ex_enter_interpreter ();/* Check for possible multi-thread reentrancy problem */
Signature · 1 line
2.7.4
PATCH 52/53 ACPICA: Update a couple of debug output messages
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 809c1766598c7f3decaeeba2c6ed603c538d0270
Cleanup output.
--- drivers/acpi/acpica/dbxface.c | 2 +- drivers/acpi/acpica/nsutils.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/dbxface.c +1 -1
@@ -244,7 +244,7 @@ acpi_db_single_step(struct acpi_walk_state *walk_state,if ((acpi_gbl_db_output_to_file) || (acpi_dbg_level &ACPI_LV_PARSE )) {acpi_os_printf - ("\n[AmlDebug] Next AML Opcode to execute:\n" ); + ("\nAML Debug: Next AML Opcode to execute:\n" ); }/*
drivers/acpi/acpica/nsutils.c +1 -1
@@ -89,7 +89,7 @@ acpi_ns_print_node_pathname(struct acpi_namespace_node *node,acpi_os_printf ("%s " , message); } -acpi_os_printf ("[%s] (Node %p)" , (char *)buffer.pointer, node); +acpi_os_printf ("%s" , (char *)buffer.pointer);ACPI_FREE (buffer.pointer); } }
Signature · 1 line
2.7.4
PATCH 53/53 ACPICA: Update version to 20170531
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit fde696a3f0aed66ff7439744bbcd23bc165deb88
Version 20170531.
--- 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 0x20170303 +#define ACPI_CA_VERSION 0x20170531#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
2.7.4