ACPICA: 20150410 Release
Subsystems (3)
cover ACPICA: 20150410 Release
The 20150410 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 + default + COFNIG_ACPI=y
2. i386 + allyes + CONFIG_ACPI=y
3. i386 + default + COFNIG_ACPI=n
4. i386 + allyes + CONFIG_ACPI=n
5. x86_64 + default + COFNIG_ACPI=y
6. x86_64 + allyes + CONFIG_ACPI=y
7. x86_64 + default + COFNIG_ACPI=n
8. x86_64 + allyes + CONFIG_ACPI=n
Boot tests are performed as follows:
1. i386 + default + COFNIG_ACPI=y
2. x86_64 + default + COFNIG_ACPI=y
Where:
1. i386: machine named as "Dell Inspiron Mini 1010"
2. x86_64: machine named as "HP Compaq 8200 Elite SFF PC"
3. default: kernel configuration with following items enabled:
All hardware drivers related to the machines of i386/x86_64 All drivers/acpi configurations
All platform drivers
The divergences checking result:
Before applying (20150204 Release):
517 lines
After applying (20150410 Release):
531 lines
Bob Moore (15):
ACPICA: Casting changes around acpi_physical_address/acpi_size.
ACPICA: Fix a sscanf format string.
ACPICA: Update Resource descriptor dump module.
ACPICA: Update AML Debugger global variables.
ACPICA: iASL/Disassembler: Add option to assume table contains valid
AML.
ACPICA: iASL: Enhancement for constant folding.
ACPICA: Add infrastructure for External() opcode.
ACPICA: Add "Windows 2015" string to _OSI support.
ACPICA: Permanently set _REV to the value '2'.
ACPICA: Remove unused internal AML opcode.
ACPICA: Add "//" before ascii output of buffers.
ACPICA: Update for SLIC ACPI table.
ACPICA: iASL: Add support for MSDM ACPI table.
ACPICA: Disassembler: Some cleanup of the table dump module.
ACPICA: Update version to 20150410.
Lv Zheng (13):
ACPICA: Linuxize: Reduce divergences for 20150410 release.
ACPICA: Tables: Change acpi_find_root_pointer() to use
acpi_physical_address.
ACPICA: Unix: Cleanup to use ACPI_TO_INTEGER() to calc page offset.
ACPICA: Executer: Cleanup to remove an unnecessary conversion.
ACPICA: Utilities: Cleanup to enforce
ACPI_PHYSADDR_TO_PTR()/ACPI_PTR_TO_PHYSADDR().
ACPICA: Utilities: Cleanup to convert physical address printing
formats.
ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx
helpers.
ACPICA: Utilities: split IO address types from data type models.
ACPICA: Events: Add support to return both enable/status register
values for GPE and fixed event.
ACPICA: Tables: Move an iasl specific table function to iasl source
file.
ACPICA: Utilities: Correct conditional compilation definitions.
ACPICA: Resources: Correct conditional compilation definitions.
ACPICA: Fix a couple issues with the local printf module.
Octavian Purdila (1):
ACPICA: Tables: Don't release ACPI_MTX_TABLES in
acpi_tb_install_standard_table().
Rasmus Villemoes (1):
ACPICA: Applications: Remove use of __DATE__ macro.
Rickard Strandqvist (1):
ACPICA: Utilities: Remove unused acpi_ut_create_pkg_state_and_push().
drivers/acpi/acpica/acapps.h | 8 +- drivers/acpi/acpica/acglobal.h | 5 +- drivers/acpi/acpica/aclocal.h | 2 +- drivers/acpi/acpica/acmacros.h | 13 +- drivers/acpi/acpica/acopcode.h | 2 + drivers/acpi/acpica/acresrc.h | 6 +- drivers/acpi/acpica/acstruct.h | 5 - drivers/acpi/acpica/actables.h | 9 +- drivers/acpi/acpica/acutils.h | 22 +- drivers/acpi/acpica/amlcode.h | 2 +- drivers/acpi/acpica/dsopcode.c | 7 +- drivers/acpi/acpica/dsutils.c | 11 + drivers/acpi/acpica/evregion.c | 2 +- drivers/acpi/acpica/evxfevnt.c | 5 +- drivers/acpi/acpica/exdump.c | 4 +- drivers/acpi/acpica/exfldio.c | 10 +- drivers/acpi/acpica/exoparg3.c | 13 +- drivers/acpi/acpica/exregion.c | 17 +- drivers/acpi/acpica/hwgpe.c | 13 +- drivers/acpi/acpica/hwvalid.c | 16 +- drivers/acpi/acpica/nsdump.c | 12 +- drivers/acpi/acpica/psopcode.c | 8 +- drivers/acpi/acpica/psopinfo.c | 2 +- drivers/acpi/acpica/rsdump.c | 227 ++++++++++---------- drivers/acpi/acpica/tbdata.c | 35 ++- drivers/acpi/acpica/tbinstal.c | 67 ++---- drivers/acpi/acpica/tbprint.c | 19 +- drivers/acpi/acpica/tbxfroot.c | 7 +- drivers/acpi/acpica/utaddress.c | 34 ++- drivers/acpi/acpica/utbuffer.c | 8 + drivers/acpi/acpica/utglobal.c | 13 +- drivers/acpi/acpica/utmisc.c | 2 + drivers/acpi/acpica/utosi.c | 1 + drivers/acpi/acpica/utprint.c | 13 +- drivers/acpi/acpica/utstate.c | 34 --- drivers/acpi/acpica/utuuid.c | 2 + include/acpi/acpixf.h | 14 +- include/acpi/actbl2.h | 70 ++---- include/acpi/actypes.h | 46 +++- include/acpi/platform/acenv.h | 1 + .../acpi/os_specific/service_layers/oslinuxtbl.c | 2 +- .../acpi/os_specific/service_layers/osunixmap.c | 2 +- 42 files changed, 384 insertions(+), 407 deletions(-)
Signature · 1 line
1.7.10
PATCH 1/31 ACPICA: Linuxize: Reduce divergences for 20150410 release.
This patch reduces source code differences between the Linux kernel and the ACPICA upstream so that the linuxized ACPICA 20150410 release can be applied with reduced human intervention.
--- drivers/acpi/acpica/acresrc.h | 2 +- drivers/acpi/acpica/acutils.h | 2 -- drivers/acpi/acpica/exregion.c | 2 +- drivers/acpi/acpica/rsdump.c | 2 +- drivers/acpi/acpica/tbxfroot.c | 2 +- 5 files changed, 4 insertions(+), 6 deletions(-)
drivers/acpi/acpica/acresrc.h +1 -1
@@ -303,7 +303,7 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length,*/ void acpi_rs_dump_resource_list (struct acpi_resource *resource); -void acpi_rs_dump_irq_list (u8 * route_table); +void acpi_rs_dump_irq_list (u8 *route_table);/* * Resource conversion tables
drivers/acpi/acpica/acutils.h +0 -2
@@ -539,13 +539,11 @@ acpi_ut_create_update_state_and_push(union acpi_operand_object *object,u16 action, union acpi_generic_state **state_list); -#ifdef ACPI_FUTURE_USAGE acpi_status acpi_ut_create_pkg_state_and_push (void *internal_object,void *external_object,u16 index,union acpi_generic_state **state_list); -#endif /* ACPI_FUTURE_USAGE */ union acpi_generic_state *acpi_ut_create_control_state (void );
drivers/acpi/acpica/exregion.c +1 -1
@@ -182,7 +182,7 @@ acpi_ex_system_memory_space_handler(u32 function,ACPI_ERROR ((AE_INFO ,"Could not map memory at 0x%8.8X%8.8X, size %u" ,ACPI_FORMAT_NATIVE_UINT (address), - (u32 ) map_length)); + (u32 )map_length)); mem_info->mapped_length =0 ;return_ACPI_STATUS (AE_NO_MEMORY ); }
drivers/acpi/acpica/rsdump.c +1 -1
@@ -438,7 +438,7 @@ void acpi_rs_dump_resource_list(struct acpi_resource *resource_list)* ******************************************************************************/ -void acpi_rs_dump_irq_list (u8 * route_table) +void acpi_rs_dump_irq_list (u8 *route_table) {struct acpi_pci_routing_table *prt_element;u8 count;
drivers/acpi/acpica/tbxfroot.c +1 -1
@@ -142,7 +142,7 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)* ******************************************************************************/ -acpi_status __init acpi_find_root_pointer (acpi_size *table_address) +acpi_status __init acpi_find_root_pointer (acpi_size * table_address) {u8 *table_ptr;u8 *mem_rover;
Signature · 1 line
1.7.10
PATCH 2/31 ACPICA: Tables: Change acpi_find_root_pointer() to use acpi_physical_address.
In reply to Lv ZhengACPICA commit 7d9fd64397d7c38899d3dc497525f6e6b044e0e3
OSPMs like Linux expect an acpi_physical_address returning value fromacpi_find_root_pointer(). This triggers warnings if sizeof (acpi_size) doesn't
equal to sizeof (acpi_physical_address):
drivers/acpi/osl.c:275:3: warning: passing argument 1 of 'acpi_find_root_pointer' from incompatible pointer type [enabled by default] In file included from include/acpi/acpi.h:64:0,
from include/linux/acpi.h:36,
from drivers/acpi/osl.c:41: include/acpi/acpixf.h:433:1: note: expected 'acpi_size *' but argument is of type 'acpi_physical_address *'
This patch corrects acpi_find_root_pointer().
--- drivers/acpi/acpica/tbxfroot.c | 7 ++++--- include/acpi/acpixf.h | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-)
drivers/acpi/acpica/tbxfroot.c +4 -3
@@ -142,7 +142,7 @@ acpi_status acpi_tb_validate_rsdp(struct acpi_table_rsdp * rsdp)* ******************************************************************************/ -acpi_status __init acpi_find_root_pointer (acpi_size * table_address) +acpi_status __init acpi_find_root_pointer (acpi_physical_address * table_address) {u8 *table_ptr;u8 *mem_rover;
@@ -200,7 +200,8 @@ acpi_status __init acpi_find_root_pointer(acpi_size * table_address) physical_address += (u32 )ACPI_PTR_DIFF (mem_rover, table_ptr); - *table_address = physical_address; + *table_address = + (acpi_physical_address ) physical_address;return_ACPI_STATUS (AE_OK ); } }
@@ -233,7 +234,7 @@ acpi_status __init acpi_find_root_pointer(acpi_size * table_address) (ACPI_HI_RSDP_WINDOW_BASE +ACPI_PTR_DIFF (mem_rover, table_ptr)); - *table_address = physical_address; + *table_address = (acpi_physical_address ) physical_address;return_ACPI_STATUS (AE_OK ); }
include/acpi/acpixf.h +6 -6
@@ -431,13 +431,13 @@ ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_load_tables(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init acpi_reallocate_root_table(void)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status __init - acpi_find_root_pointer(acpi_size * rsdp_address)) - + acpi_find_root_pointer(acpi_physical_address * + rsdp_address)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status - acpi_get_table_header(acpi_string signature, - u32 instance, - struct acpi_table_header - *out_table_header)) + acpi_get_table_header(acpi_string signature, + u32 instance, + struct acpi_table_header + *out_table_header)) ACPI_EXTERNAL_RETURN_STATUS(acpi_status acpi_get_table(acpi_string signature, u32 instance, struct acpi_table_header
Signature · 1 line
1.7.10
PATCH 3/31 ACPICA: Unix: Cleanup to use ACPI_TO_INTEGER() to calc page offset.
In reply to Lv ZhengACPICA commit 9e2d8180f4d5e61949b17513bae8aff6412f62dd
The offset calculation needn't convert a pointer to a special integer type. So this patch uses ACPI_TO_INTEGER() instead.
This patch only affects acpidump tool.
--- tools/power/acpi/os_specific/service_layers/osunixmap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/power/acpi/os_specific/service_layers/osunixmap.c +1 -1
@@ -146,6 +146,6 @@ void acpi_os_unmap_memory(void *where, acpi_size length)acpi_size page_size; page_size =acpi_os_get_page_size (); - offset = (acpi_physical_address ) where % page_size; + offset =ACPI_TO_INTEGER (where) % page_size;munmap ((u8 *)where - offset, (length + offset)); }
Signature · 1 line
1.7.10
PATCH 4/31 ACPICA: Executer: Cleanup to remove an unnecessary conversion.
In reply to Lv ZhengACPICA commit c327986430b7eb170c17d0f45735fe71bb62a810
The conversion converts an acpi_physical_address to acpi_physical_address, this patch thus removes such useless conversion.
--- drivers/acpi/acpica/exregion.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/acpi/acpica/exregion.c +2 -1
@@ -177,7 +177,8 @@ acpi_ex_system_memory_space_handler(u32 function,/* Create a new mapping starting at the address given */ - mem_info->mapped_logical_address =acpi_os_map_memory ((acpi_physical_address ) address, map_length); + mem_info->mapped_logical_address = +acpi_os_map_memory (address, map_length);if (!mem_info->mapped_logical_address) { ACPI_ERROR((AE_INFO, "Could not map memory at 0x%8.8X%8.8X, size %u",
Signature · 1 line
1.7.10
PATCH 5/31 ACPICA: Utilities: Cleanup to enforce ACPI_PHYSADDR_TO_PTR()/ACPI_PTR_TO_PHYSADDR().
In reply to Lv ZhengACPICA commit 154f6d074dd38d6ebc0467ad454454e6c5c9ecdf
There are code pieces converting pointers using "(acpi_physical_address) x" or "ACPI_CAST_PTR (t, x)" formats, this patch cleans up them.
Known issues:
1. Cleanup of "(ACPI_PHYSICAL_ADDRRESS) x" for a table field For the conversions around the table fields, it is better to fix it with alignment also fixed. So this patch doesn't modify such code. There should be no functional problem by leaving them unchanged.
--- drivers/acpi/acpica/dsopcode.c | 3 +-- drivers/acpi/acpica/tbdata.c | 9 +++++---- drivers/acpi/acpica/tbinstal.c | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-)
drivers/acpi/acpica/dsopcode.c +1 -2
@@ -539,8 +539,7 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,return_ACPI_STATUS (AE_NOT_EXIST ); } - obj_desc->region.address = - (acpi_physical_address )ACPI_TO_INTEGER (table); + obj_desc->region.address =ACPI_PTR_TO_PHYSADDR (table); obj_desc->region.length = table->length; ACPI_DEBUG_PRINT((ACPI_DB_EXEC, "RgnObj %p Addr %8.8X%8.8X Len %X\n",
drivers/acpi/acpica/tbdata.c +5 -4
@@ -113,9 +113,9 @@ acpi_tb_acquire_table(struct acpi_table_desc *table_desc,case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL :case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL : - table = - ACPI_CAST_PTR(struct acpi_table_header, - table_desc->address); + table = ACPI_CAST_PTR(struct acpi_table_header, +ACPI_PHYSADDR_TO_PTR (table_desc-> + address));break ;default :
@@ -214,7 +214,8 @@ acpi_tb_acquire_temp_table(struct acpi_table_desc *table_desc,case ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL :case ACPI_TABLE_ORIGIN_EXTERNAL_VIRTUAL : - table_header = ACPI_CAST_PTR(struct acpi_table_header, address); + table_header = ACPI_CAST_PTR(struct acpi_table_header, +ACPI_PHYSADDR_TO_PTR (address));if (!table_header) {return (AE_NO_MEMORY ); }
drivers/acpi/acpica/tbinstal.c +5 -5
@@ -188,7 +188,7 @@ acpi_tb_install_fixed_table(acpi_physical_address address, ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL);if (ACPI_FAILURE (status)) {ACPI_ERROR ((AE_INFO ,"Could not acquire table length at %p" , -ACPI_CAST_PTR (void, address))); +ACPI_PHYSADDR_TO_PTR (address)));return_ACPI_STATUS (status); }
@@ -247,7 +247,7 @@ acpi_tb_install_standard_table(acpi_physical_address address, status =acpi_tb_acquire_temp_table (&new_table_desc, address, flags);if (ACPI_FAILURE (status)) {ACPI_ERROR ((AE_INFO ,"Could not acquire table length at %p" , -ACPI_CAST_PTR (void, address))); +ACPI_PHYSADDR_TO_PTR (address)));return_ACPI_STATUS (status); }
@@ -259,8 +259,8 @@ acpi_tb_install_standard_table(acpi_physical_address address, acpi_gbl_disable_ssdt_table_install && ACPI_COMPARE_NAME(&new_table_desc.signature, ACPI_SIG_SSDT)) {ACPI_INFO ((AE_INFO ,"Ignoring installation of %4.4s at %p" , - new_table_desc.signature.ascii,ACPI_CAST_PTR (void, - address))); + new_table_desc.signature.ascii, +ACPI_PHYSADDR_TO_PTR (address))); goto release_and_exit; }
@@ -517,7 +517,7 @@ void acpi_tb_uninstall_table(struct acpi_table_desc *table_desc)if ((table_desc->flags &ACPI_TABLE_ORIGIN_MASK ) ==ACPI_TABLE_ORIGIN_INTERNAL_VIRTUAL ) { -ACPI_FREE (ACPI_CAST_PTR (void, table_desc->address)); +ACPI_FREE (ACPI_PHYSADDR_TO_PTR (table_desc->address)); } table_desc->address =ACPI_PTR_TO_PHYSADDR (NULL );
Signature · 1 line
1.7.10
PATCH 6/31 ACPICA: Utilities: Cleanup to convert physical address printing formats.
In reply to Lv ZhengACPICA commit 7f06739db43a85083a70371c14141008f20b2198
For physical addresses, since the address may exceed 32-bit address range after calculation, we should use %8.8X%8.8X (see ACPI_FORMAT_UINT64()) to convert the %p formats.
This is a preparation to switch acpi_physical_address to 64-bit on 32-bit kernel builds.
--- drivers/acpi/acpica/exfldio.c | 10 ++++------ drivers/acpi/acpica/hwvalid.c | 16 ++++++++-------- drivers/acpi/acpica/nsdump.c | 7 +++---- drivers/acpi/acpica/tbinstal.c | 15 +++++++++------ drivers/acpi/acpica/utaddress.c | 34 +++++++++++++++------------------- 5 files changed, 39 insertions(+), 43 deletions(-)
drivers/acpi/acpica/exfldio.c +4 -6
@@ -263,17 +263,15 @@ acpi_ex_access_region(union acpi_operand_object *obj_desc, }ACPI_DEBUG_PRINT_RAW ((ACPI_DB_BFIELD , -" Region [%s:%X], Width %X, ByteBase %X, Offset %X at %p\n" , +" Region [%s:%X], Width %X, ByteBase %X, Offset %X at %8.8X%8.8X\n" ,acpi_ut_get_region_name (rgn_desc->region. space_id), rgn_desc->region.space_id, obj_desc->common_field.access_byte_width, obj_desc->common_field.base_byte_offset, - field_datum_byte_offset,ACPI_CAST_PTR (void, - (rgn_desc-> - region. - address + - region_offset)))); + field_datum_byte_offset, +ACPI_FORMAT_UINT64 (rgn_desc->region.address + + region_offset)));/* Invoke the appropriate address_space/op_region handler */
drivers/acpi/acpica/hwvalid.c +8 -8
@@ -142,17 +142,17 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width) byte_width =ACPI_DIV_8 (bit_width); last_address = address + byte_width -1 ; -ACPI_DEBUG_PRINT ((ACPI_DB_IO ,"Address %p LastAddress %p Length %X" , -ACPI_CAST_PTR (void, address),ACPI_CAST_PTR (void, - last_address), - byte_width)); +ACPI_DEBUG_PRINT ((ACPI_DB_IO , +"Address %8.8X%8.8X LastAddress %8.8X%8.8X Length %X" , +ACPI_FORMAT_UINT64 (address), +ACPI_FORMAT_UINT64 (last_address), byte_width));/* Maximum 16-bit address in I/O space */ if (last_address >ACPI_UINT16_MAX ) {ACPI_ERROR ((AE_INFO , -"Illegal I/O port address/length above 64K: %p/0x%X" , -ACPI_CAST_PTR (void, address), byte_width)); +"Illegal I/O port address/length above 64K: %8.8X%8.8X/0x%X" , +ACPI_FORMAT_UINT64 (address), byte_width));return_ACPI_STATUS (AE_LIMIT ); }
@@ -181,8 +181,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)if (acpi_gbl_osi_data >= port_info->osi_dependency) {ACPI_DEBUG_PRINT ((ACPI_DB_IO , -"Denied AML access to port 0x%p/%X (%s 0x%.4X-0x%.4X)" , -ACPI_CAST_PTR (void, address), +"Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)" , +ACPI_FORMAT_UINT64 (address), byte_width, port_info->name, port_info->start, port_info->end));
drivers/acpi/acpica/nsdump.c +3 -4
@@ -271,12 +271,11 @@ acpi_ns_dump_one_object(acpi_handle obj_handle,switch (type) {case ACPI_TYPE_PROCESSOR : -acpi_os_printf ("ID %02X Len %02X Addr %p\n" , +acpi_os_printf ("ID %02X Len %02X Addr %8.8X%8.8X\n" , obj_desc->processor.proc_id, obj_desc->processor.length, -ACPI_CAST_PTR (void, - obj_desc->processor. - address)); +ACPI_FORMAT_UINT64 (obj_desc->processor. + address));break ;case ACPI_TYPE_DEVICE :
drivers/acpi/acpica/tbinstal.c +9 -6
@@ -187,8 +187,9 @@ acpi_tb_install_fixed_table(acpi_physical_address address, status =acpi_tb_acquire_temp_table (&new_table_desc, address,ACPI_TABLE_ORIGIN_INTERNAL_PHYSICAL );if (ACPI_FAILURE (status)) { -ACPI_ERROR ((AE_INFO ,"Could not acquire table length at %p" , -ACPI_PHYSADDR_TO_PTR (address))); +ACPI_ERROR ((AE_INFO , +"Could not acquire table length at %8.8X%8.8X" , +ACPI_FORMAT_UINT64 (address)));return_ACPI_STATUS (status); }
@@ -246,8 +247,9 @@ acpi_tb_install_standard_table(acpi_physical_address address, status =acpi_tb_acquire_temp_table (&new_table_desc, address, flags);if (ACPI_FAILURE (status)) { -ACPI_ERROR ((AE_INFO ,"Could not acquire table length at %p" , -ACPI_PHYSADDR_TO_PTR (address))); +ACPI_ERROR ((AE_INFO , +"Could not acquire table length at %8.8X%8.8X" , +ACPI_FORMAT_UINT64 (address)));return_ACPI_STATUS (status); }
@@ -258,9 +260,10 @@ acpi_tb_install_standard_table(acpi_physical_address address,if (!reload && acpi_gbl_disable_ssdt_table_install &&ACPI_COMPARE_NAME (&new_table_desc.signature,ACPI_SIG_SSDT )) { -ACPI_INFO ((AE_INFO ,"Ignoring installation of %4.4s at %p" , +ACPI_INFO ((AE_INFO , +"Ignoring installation of %4.4s at %8.8X%8.8X" , new_table_desc.signature.ascii, -ACPI_PHYSADDR_TO_PTR (address))); +ACPI_FORMAT_UINT64 (address))); goto release_and_exit; }
drivers/acpi/acpica/utaddress.c +15 -19
@@ -107,10 +107,10 @@ acpi_ut_add_address_range(acpi_adr_space_type space_id, acpi_gbl_address_range_list[space_id] = range_info;ACPI_DEBUG_PRINT ((ACPI_DB_NAMES , -"\nAdded [%4.4s] address range: 0x%p-0x%p\n" , +"\nAdded [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n" ,acpi_ut_get_node_name (range_info->region_node), -ACPI_CAST_PTR (void, address), -ACPI_CAST_PTR (void, range_info->end_address))); +ACPI_FORMAT_UINT64 (address), +ACPI_FORMAT_UINT64 (range_info->end_address))); (void )acpi_ut_release_mutex (ACPI_MTX_NAMESPACE );return_ACPI_STATUS (AE_OK );
@@ -160,15 +160,13 @@ acpi_ut_remove_address_range(acpi_adr_space_type space_id, }ACPI_DEBUG_PRINT ((ACPI_DB_NAMES , -"\nRemoved [%4.4s] address range: 0x%p-0x%p\n" , +"\nRemoved [%4.4s] address range: 0x%8.8X%8.8X-0x%8.8X%8.8X\n" ,acpi_ut_get_node_name (range_info-> region_node), -ACPI_CAST_PTR (void, - range_info-> - start_address), -ACPI_CAST_PTR (void, - range_info-> - end_address))); +ACPI_FORMAT_UINT64 (range_info-> + start_address), +ACPI_FORMAT_UINT64 (range_info-> + end_address)));ACPI_FREE (range_info); return_VOID;
@@ -245,16 +243,14 @@ acpi_ut_check_address_range(acpi_adr_space_type space_id, region_node);ACPI_WARNING ((AE_INFO , -"%s range 0x%p-0x%p conflicts with OpRegion 0x%p-0x%p (%s)" , +"%s range 0x%8.8X%8.8X-0x%8.8X%8.8X conflicts with OpRegion 0x%8.8X%8.8X-0x%8.8X%8.8X (%s)" ,acpi_ut_get_region_name (space_id), -ACPI_CAST_PTR (void, address), -ACPI_CAST_PTR (void, end_address), -ACPI_CAST_PTR (void, - range_info-> - start_address), -ACPI_CAST_PTR (void, - range_info-> - end_address), +ACPI_FORMAT_UINT64 (address), +ACPI_FORMAT_UINT64 (end_address), +ACPI_FORMAT_UINT64 (range_info-> + start_address), +ACPI_FORMAT_UINT64 (range_info-> + end_address), pathname));ACPI_FREE (pathname); }
Signature · 1 line
1.7.10
PATCH 7/31 ACPICA: Utilities: Cleanup to remove useless ACPI_PRINTF/FORMAT_xxx helpers.
In reply to Lv ZhengACPICA commit b60612373a4ef63b64a57c124576d7ddb6d8efb6
For physical addresses, since the address may exceed 32-bit address range after calculation, we should use 0x%8.8X%8.8X instead of ACPI_PRINTF_UINT and ACPI_FORMAT_UINT64() instead of ACPI_FORMAT_NATIVE_UINT()/ACPI_FORMAT_TO_UINT().
This patch also removes above replaced macros as there are no users.
This is a preparation to switch acpi_physical_address to 64-bit on 32-bit kernel builds.
--- drivers/acpi/acpica/acmacros.h | 13 +------------ drivers/acpi/acpica/dsopcode.c | 4 ++-- drivers/acpi/acpica/evregion.c | 2 +- drivers/acpi/acpica/exdump.c | 4 ++-- drivers/acpi/acpica/exregion.c | 8 +++----- drivers/acpi/acpica/nsdump.c | 5 +++-- drivers/acpi/acpica/tbdata.c | 6 +++--- drivers/acpi/acpica/tbinstal.c | 8 ++++---- drivers/acpi/acpica/tbprint.c | 19 ++++++------------- 9 files changed, 25 insertions(+), 44 deletions(-)
drivers/acpi/acpica/acmacros.h +1 -12
@@ -63,23 +63,12 @@#define ACPI_SET64 (ptr, val) (*ACPI_CAST64 (ptr) = (u64) (val))/* -* printf() format helpers. These macros are workarounds for the difficulties +* printf() format helper. This macros is a workaround for the difficulties * with emitting 64-bit integers and 64-bit pointers with the same code * for both 32-bit and 64-bit hosts. */ #define ACPI_FORMAT_UINT64 (i) ACPI_HIDWORD(i), ACPI_LODWORD(i) -#if ACPI_MACHINE_WIDTH ==64 -#define ACPI_FORMAT_NATIVE_UINT (i) ACPI_FORMAT_UINT64(i) -#define ACPI_FORMAT_TO_UINT (i) ACPI_FORMAT_UINT64(i) -#define ACPI_PRINTF_UINT "0x%8.8X%8.8X" - -#else -#define ACPI_FORMAT_NATIVE_UINT (i) 0, (u32) (i) -#define ACPI_FORMAT_TO_UINT (i) (u32) (i) -#define ACPI_PRINTF_UINT "0x%8.8X" -#endif -/* * Macros for moving data around to/from buffers that are possibly unaligned. * If the hardware supports the transfer of unaligned data, just do the store.
drivers/acpi/acpica/dsopcode.c +2 -2
@@ -446,7 +446,7 @@ acpi_ds_eval_region_operands(struct acpi_walk_state *walk_state,ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"RgnObj %p Addr %8.8X%8.8X Len %X\n" , obj_desc, -ACPI_FORMAT_NATIVE_UINT (obj_desc->region.address), +ACPI_FORMAT_UINT64 (obj_desc->region.address), obj_desc->region.length));/* Now the address and length are valid for this opregion */
@@ -544,7 +544,7 @@ acpi_ds_eval_table_region_operands(struct acpi_walk_state *walk_state,ACPI_DEBUG_PRINT ((ACPI_DB_EXEC ,"RgnObj %p Addr %8.8X%8.8X Len %X\n" , obj_desc, -ACPI_FORMAT_NATIVE_UINT (obj_desc->region.address), +ACPI_FORMAT_UINT64 (obj_desc->region.address), obj_desc->region.length));/* Now the address and length are valid for this opregion */
drivers/acpi/acpica/evregion.c +1 -1
@@ -272,7 +272,7 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj,ACPI_DEBUG_PRINT ((ACPI_DB_OPREGION ,"Handler %p (@%p) Address %8.8X%8.8X [%s]\n" , ®ion_obj->region.handler->address_space, handler, -ACPI_FORMAT_NATIVE_UINT (address), +ACPI_FORMAT_UINT64 (address),acpi_ut_get_region_name (region_obj->region. space_id)));
drivers/acpi/acpica/exdump.c +2 -2
@@ -767,8 +767,8 @@ void acpi_ex_dump_operand(union acpi_operand_object *obj_desc, u32 depth)acpi_os_printf ("\n" ); }else {acpi_os_printf (" base %8.8X%8.8X Length %X\n" , -ACPI_FORMAT_NATIVE_UINT (obj_desc->region. - address), +ACPI_FORMAT_UINT64 (obj_desc->region. + address), obj_desc->region.length); }break ;
drivers/acpi/acpica/exregion.c +3 -5
@@ -182,7 +182,7 @@ acpi_ex_system_memory_space_handler(u32 function,if (!mem_info->mapped_logical_address) {ACPI_ERROR ((AE_INFO ,"Could not map memory at 0x%8.8X%8.8X, size %u" , -ACPI_FORMAT_NATIVE_UINT (address), +ACPI_FORMAT_UINT64 (address), (u32 )map_length)); mem_info->mapped_length =0 ;return_ACPI_STATUS (AE_NO_MEMORY );
@@ -203,8 +203,7 @@ acpi_ex_system_memory_space_handler(u32 function,ACPI_DEBUG_PRINT ((ACPI_DB_INFO ,"System-Memory (width %u) R/W %u Address=%8.8X%8.8X\n" , - bit_width, function, -ACPI_FORMAT_NATIVE_UINT (address))); + bit_width, function,ACPI_FORMAT_UINT64 (address)));/* * Perform the memory read or write
@@ -319,8 +318,7 @@ acpi_ex_system_io_space_handler(u32 function,ACPI_DEBUG_PRINT ((ACPI_DB_INFO ,"System-IO (width %u) R/W %u Address=%8.8X%8.8X\n" , - bit_width, function, -ACPI_FORMAT_NATIVE_UINT (address))); + bit_width, function,ACPI_FORMAT_UINT64 (address)));/* Decode the function parameter */
drivers/acpi/acpica/nsdump.c +3 -2
@@ -346,8 +346,9 @@ acpi_ns_dump_one_object(acpi_handle obj_handle, space_id));if (obj_desc->region.flags &AOPOBJ_DATA_VALID ) {acpi_os_printf (" Addr %8.8X%8.8X Len %.4X\n" , -ACPI_FORMAT_NATIVE_UINT - (obj_desc->region.address), +ACPI_FORMAT_UINT64 (obj_desc-> + region. + address), obj_desc->region.length); }else { acpi_os_printf
drivers/acpi/acpica/tbdata.c +3 -3
@@ -399,14 +399,14 @@ acpi_tb_verify_temp_table(struct acpi_table_desc * table_desc, char *signature) table_desc->length);if (ACPI_FAILURE (status)) {ACPI_EXCEPTION ((AE_INFO ,AE_NO_MEMORY , -"%4.4s " ACPI_PRINTF_UINT +"%4.4s 0x%8.8X%8.8X" " Attempted table install failed" ,acpi_ut_valid_acpi_name (table_desc-> signature. ascii) ? table_desc->signature.ascii :"????" , -ACPI_FORMAT_TO_UINT (table_desc-> - address))); +ACPI_FORMAT_UINT64 (table_desc-> + address))); goto invalidate_and_exit; } }
drivers/acpi/acpica/tbinstal.c +4 -4
@@ -432,11 +432,11 @@ finish_override:return ; } -ACPI_INFO ((AE_INFO ,"%4.4s " ACPI_PRINTF_UINT -" %s table override, new table: " ACPI_PRINTF_UINT , +ACPI_INFO ((AE_INFO ,"%4.4s 0x%8.8X%8.8X" +" %s table override, new table: 0x%8.8X%8.8X" , old_table_desc->signature.ascii, -ACPI_FORMAT_TO_UINT (old_table_desc->address), - override_type,ACPI_FORMAT_TO_UINT (new_table_desc.address))); +ACPI_FORMAT_UINT64 (old_table_desc->address), + override_type,ACPI_FORMAT_UINT64 (new_table_desc.address)));/* We can now uninstall the original table */
drivers/acpi/acpica/tbprint.c +6 -13
@@ -127,18 +127,12 @@ acpi_tb_print_table_header(acpi_physical_address address, {struct acpi_table_header local_header; -/* -* The reason that we use ACPI_PRINTF_UINT and ACPI_FORMAT_TO_UINT is to -* support both 32-bit and 64-bit hosts/addresses in a consistent manner. -* The %p specifier does not emit uniform output on all hosts. On some, -* leading zeros are not supported. -*/ if (ACPI_COMPARE_NAME (header->signature,ACPI_SIG_FACS )) {/* FACS only has signature and length fields */ -ACPI_INFO ((AE_INFO ,"%-4.4s " ACPI_PRINTF_UINT " %06X" , - header->signature,ACPI_FORMAT_TO_UINT (address), +ACPI_INFO ((AE_INFO ,"%-4.4s 0x%8.8X%8.8X %06X" , + header->signature,ACPI_FORMAT_UINT64 (address), header->length)); }else if (ACPI_VALIDATE_RSDP_SIG (header->signature)) {
@@ -149,9 +143,8 @@ acpi_tb_print_table_header(acpi_physical_address address, header)->oem_id, ACPI_OEM_ID_SIZE);acpi_tb_fix_string (local_header.oem_id,ACPI_OEM_ID_SIZE ); - ACPI_INFO((AE_INFO, - "RSDP " ACPI_PRINTF_UINT " %06X (v%.2d %-6.6s)", - ACPI_FORMAT_TO_UINT(address), + ACPI_INFO((AE_INFO, "RSDP 0x%8.8X%8.8X %06X (v%.2d %-6.6s)", + ACPI_FORMAT_UINT64(address), (ACPI_CAST_PTR(struct acpi_table_rsdp, header)-> revision > 0) ? ACPI_CAST_PTR(struct acpi_table_rsdp,
@@ -165,9 +158,9 @@ acpi_tb_print_table_header(acpi_physical_address address,acpi_tb_cleanup_table_header (&local_header, header); ACPI_INFO((AE_INFO, - "%-4.4s " ACPI_PRINTF_UINT + "%-4.4s 0x%8.8X%8.8X" " %06X (v%.2d %-6.6s %-8.8s %08X %-4.4s %08X)", - local_header.signature, ACPI_FORMAT_TO_UINT(address), + local_header.signature, ACPI_FORMAT_UINT64(address), local_header.length, local_header.revision, local_header.oem_id, local_header.oem_table_id, local_header.oem_revision,
Signature · 1 line
1.7.10
PATCH 8/31 ACPICA: Utilities: split IO address types from data type models.
In reply to Lv ZhengACPICA commit aacf863cfffd46338e268b7415f7435cae93b451
It is reported that on a physically 64-bit addressed machine, 32-bit kernel can trigger crashes in accessing the memory regions that are beyond the 32-bit boundary. The region field's start address should still be 32-bit compliant, but after a calculation (adding some offsets), it may exceed the 32-bit boundary. This case is rare and buggy, but there are real BIOSes leaked with such issues (see References below).
This patch fixes this gap by always defining IO addresses as 64-bit, and allows OSPMs to optimize it for a real 32-bit machine to reduce the size of the internal objects.
Internal acpi_physical_address usages in the structures that can be fixed by this change include:
1. struct acpi_object_region:
acpi_physical_address address;
2. struct acpi_address_range:
acpi_physical_address start_address;
acpi_physical_address end_address;
3. struct acpi_mem_space_context;
acpi_physical_address address;
4. struct acpi_table_desc
acpi_physical_address address;See known issues 1 for other usages.
Note that acpi_io_address which is used for ACPI_PROCESSOR may also suffer from same problem, so this patch changes it accordingly.
For iasl, it will enforce acpi_physical_address as 32-bit to generate 32-bit OSPM compatible tables on 32-bit platforms, we need to define ACPI_32BIT_PHYSICAL_ADDRESS for it in acenv.h.
Known issues:
1. Cleanup of mapped virtual address
In struct acpi_mem_space_context, acpi_physical_address is used as a virtual address:
acpi_physical_address mapped_physical_address;
It is better to introduce acpi_virtual_address or use acpi_size instead. This patch doesn't make such a change. Because this should be done along with a change to acpi_os_map_memory()/acpi_os_unmap_memory(). There should be no functional problem to leave this unchanged except that only this structure is enlarged unexpectedly.
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=87971
Reference: https://bugzilla.kernel.org/show_bug.cgi?id=79501
--- include/acpi/actypes.h | 20 ++++++++++++++++++++ include/acpi/platform/acenv.h | 1 + 2 files changed, 21 insertions(+)
include/acpi/actypes.h +20 -0
@@ -199,9 +199,29 @@ typedef int s32;typedef s32 acpi_native_int ;typedef u32 acpi_size ; + +#ifdef ACPI_32BIT_PHYSICAL_ADDRESS + +/* +* OSPMs can define this to shrink the size of the structures for 32-bit +* none PAE environment. ASL compiler may always define this to generate +* 32-bit OSPM compliant tables. +*/ typedef u32 acpi_io_address ;typedef u32 acpi_physical_address ; +#else /* ACPI_32BIT_PHYSICAL_ADDRESS */ + +/* +* It is reported that, after some calculations, the physical addresses can +* wrap over the 32-bit boundary on 32-bit PAE environment. +* https://bugzilla.kernel.org/show_bug.cgi?id=87971 +*/ +typedef u64 acpi_io_address ; +typedef u64 acpi_physical_address ; + +#endif /* ACPI_32BIT_PHYSICAL_ADDRESS */ +#define ACPI_MAX_PTR ACPI_UINT32_MAX#define ACPI_SIZE_MAX ACPI_UINT32_MAX
include/acpi/platform/acenv.h +1 -0
@@ -76,6 +76,7 @@#define ACPI_LARGE_NAMESPACE_NODE #define ACPI_DATA_TABLE_DISASSEMBLY #define ACPI_SINGLE_THREADED +#define ACPI_32BIT_PHYSICAL_ADDRESS #endif /* acpi_exec configuration. Multithreaded with full AML debugger */
Signature · 1 line
1.7.10
PATCH 9/31 ACPICA: Tables: Don't release ACPI_MTX_TABLES in acpi_tb_install_standard_table().
In reply to Lv ZhengFrom: Octavian Purdila <[email protected]>
ACPICA commit c70434d4da13e65b6163c79a5aa16b40193631c7
ACPI_MTX_TABLES is acquired and released by the callers of acpi_tb_install_standard_table() so releasing it in the function itself is causing the following error in Linux kernel if the table is reloaded:
ACPI Error: Mutex [0x2] is not acquired, cannot release (20141107/utmutex-321)
Call Trace: [<ffffffff81b0bd48>] dump_stack+0x4f/0x7b [<ffffffff81546bf5>] acpi_ut_release_mutex+0x47/0x67 [<ffffffff81544357>] acpi_load_table+0x73/0xcb
--- drivers/acpi/acpica/tbinstal.c | 1 - 1 file changed, 1 deletion(-)
drivers/acpi/acpica/tbinstal.c +0 -1
@@ -349,7 +349,6 @@ acpi_tb_install_standard_table(acpi_physical_address address,*/ acpi_tb_uninstall_table (&new_table_desc); *table_index = i; - (void )acpi_ut_release_mutex (ACPI_MTX_TABLES );return_ACPI_STATUS (AE_OK ); } }
Signature · 1 line
1.7.10
PATCH 10/31 ACPICA: Events: Add support to return both enable/status register values for GPE and fixed event.
In reply to Lv ZhengACPICA commit e25d791e4b3d5b9f4ead298269610cb05f89749a
There is a facility in Linux, developers can obtain GPE and fixed event status via /sys/firmware/interrupts/. This is implemented using acpi_get_event_status() and acpi_get_gpe_status(). Recently while debugging some GPE race issues, it is found that the facility is lacking in the ability to obtain real hardware register values, the confusing information makes debugging difficult.
This patch modifies acpi_get_gpe_status() to return EN register values to fix this gap. Then flags returned from acpi_get_event_status() and acpi_get_gpe_status() are also cleaned up to reflect this change.
The old ACPI_EVENT_FLAG_SET is carefully kept to avoid regressions. It can be deleted after we can make sure all its references are removed from OSPM code. Lv Zheng.
--- drivers/acpi/acpica/evxfevnt.c | 5 +++-- drivers/acpi/acpica/hwgpe.c | 13 ++++++++++++- include/acpi/actypes.h | 25 ++++++++++++++----------- 3 files changed, 29 insertions(+), 14 deletions(-)
drivers/acpi/acpica/evxfevnt.c +3 -2
@@ -356,7 +356,8 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status) }if (in_byte) { - local_event_status |=ACPI_EVENT_FLAG_ENABLED ; + local_event_status |= + (ACPI_EVENT_FLAG_ENABLED |ACPI_EVENT_FLAG_ENABLE_SET ); }/* Fixed event currently active? */
@@ -369,7 +370,7 @@ acpi_status acpi_get_event_status(u32 event, acpi_event_status * event_status) }if (in_byte) { - local_event_status |=ACPI_EVENT_FLAG_SET ; + local_event_status |=ACPI_EVENT_FLAG_STATUS_SET ; } (*event_status) = local_event_status;
drivers/acpi/acpica/hwgpe.c +12 -1
@@ -250,6 +250,17 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info, local_event_status |=ACPI_EVENT_FLAG_WAKE_ENABLED ; } +/* GPE currently enabled (enable bit == 1)? */ + + status =acpi_hw_read (&in_byte, &gpe_register_info->enable_address); +if (ACPI_FAILURE (status)) { +return (status); + } + +if (register_bit & in_byte) { + local_event_status |=ACPI_EVENT_FLAG_ENABLE_SET ; + } +/* GPE currently active (status bit == 1)? */ status =acpi_hw_read (&in_byte, &gpe_register_info->status_address);
@@ -258,7 +269,7 @@ acpi_hw_get_gpe_status(struct acpi_gpe_event_info * gpe_event_info, }if (register_bit & in_byte) { - local_event_status |=ACPI_EVENT_FLAG_SET ; + local_event_status |=ACPI_EVENT_FLAG_STATUS_SET ; }/* Set return value */
include/acpi/actypes.h +14 -11
@@ -733,23 +733,26 @@ typedef u32 acpi_event_type;* The encoding of acpi_event_status is illustrated below. * Note that a set bit (1) indicates the property is TRUE * (e.g. if bit 0 is set then the event is enabled). -* +-------------+-+-+-+-+ -* | Bits 31:4 |3|2|1|0| -* +-------------+-+-+-+-+ -* | | | | | -* | | | | +- Enabled? -* | | | +--- Enabled for wake? -* | | +----- Set? -* | +------- Has a handler? -* +------------- <Reserved> +* +-------------+-+-+-+-+-+ +* | Bits 31:5 |4|3|2|1|0| +* +-------------+-+-+-+-+-+ +* | | | | | | +* | | | | | +- Enabled? +* | | | | +--- Enabled for wake? +* | | | +----- Status bit set? +* | | +------- Enable bit set? +* | +--------- Has a handler? +* +--------------- <Reserved> */ typedef u32 acpi_event_status ;#define ACPI_EVENT_FLAG_DISABLED (acpi_event_status) 0x00#define ACPI_EVENT_FLAG_ENABLED (acpi_event_status) 0x01#define ACPI_EVENT_FLAG_WAKE_ENABLED (acpi_event_status) 0x02 -#define ACPI_EVENT_FLAG_SET (acpi_event_status) 0x04 -#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x08 +#define ACPI_EVENT_FLAG_STATUS_SET (acpi_event_status) 0x04 +#define ACPI_EVENT_FLAG_ENABLE_SET (acpi_event_status) 0x08 +#define ACPI_EVENT_FLAG_HAS_HANDLER (acpi_event_status) 0x10 +#define ACPI_EVENT_FLAG_SET ACPI_EVENT_FLAG_STATUS_SET/* Actions for acpi_set_gpe, acpi_gpe_wakeup, acpi_hw_low_set_gpe */
Signature · 1 line
1.7.10
PATCH 11/31 ACPICA: Applications: Remove use of __DATE__ macro.
In reply to Lv ZhengFrom: Rasmus Villemoes <[email protected]>
ACPICA commit 3d9fb6d1f216a78ad098d3ad23f1304376c2f4ef
The macro __DATE__ and friends is not allowed in the Linux kernel. Also, including the build time in output doesn't seem to provide any value.
--- drivers/acpi/acpica/acapps.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/acpi/acpica/acapps.h +4 -4
@@ -64,15 +64,15 @@/* Macros for signons and file headers */ #define ACPI_COMMON_SIGNON (utility_name) \ - "\n%s\n%s version %8.8X%s [%s]\n%s\n\n", \ + "\n%s\n%s version %8.8X%s\n%s\n\n", \ ACPICA_NAME, \ - utility_name, ((u32) ACPI_CA_VERSION), ACPI_WIDTH, __DATE__, \ + utility_name, ((u32) ACPI_CA_VERSION), ACPI_WIDTH, \ ACPICA_COPYRIGHT#define ACPI_COMMON_HEADER (utility_name, prefix) \ - "%s%s\n%s%s version %8.8X%s [%s]\n%s%s\n%s\n", \ + "%s%s\n%s%s version %8.8X%s\n%s%s\n%s\n", \ prefix, ACPICA_NAME, \ - prefix, utility_name, ((u32) ACPI_CA_VERSION), ACPI_WIDTH, __DATE__, \ + prefix, utility_name, ((u32) ACPI_CA_VERSION), ACPI_WIDTH, \ prefix, ACPICA_COPYRIGHT, \ prefix
Signature · 1 line
1.7.10
PATCH 12/31 ACPICA: Utilities: Remove unused acpi_ut_create_pkg_state_and_push().
In reply to Lv ZhengFrom: Rickard Strandqvist <[email protected]>
ACPICA commit 2a9ebd974aee41391f4b0edcd4f0cc5ee23ec2f8
Remove the function acpi_ut_create_pkg_state_and_push() that is not used anywhere. This was partially found by using a static code analysis program called cppcheck.
--- drivers/acpi/acpica/acutils.h | 6 ------ drivers/acpi/acpica/utstate.c | 34 ---------------------------------- 2 files changed, 40 deletions(-)
drivers/acpi/acpica/acutils.h +0 -6
@@ -539,12 +539,6 @@ acpi_ut_create_update_state_and_push(union acpi_operand_object *object,u16 action, union acpi_generic_state **state_list); -acpi_status -acpi_ut_create_pkg_state_and_push (void *internal_object, -void *external_object, -u16 index, -union acpi_generic_state **state_list); -union acpi_generic_state *acpi_ut_create_control_state (void );void acpi_ut_delete_generic_state (union acpi_generic_state *state);
drivers/acpi/acpica/utstate.c +0 -34
@@ -49,39 +49,6 @@ ACPI_MODULE_NAME("utstate")/******************************************************************************* * -* FUNCTION: acpi_ut_create_pkg_state_and_push -* -* PARAMETERS: object - Object to be added to the new state -* action - Increment/Decrement -* state_list - List the state will be added to -* -* RETURN: Status -* -* DESCRIPTION: Create a new state and push it -* -******************************************************************************/ -acpi_status -acpi_ut_create_pkg_state_and_push (void *internal_object, -void *external_object, -u16 index, -union acpi_generic_state **state_list) -{ -union acpi_generic_state *state; - -ACPI_FUNCTION_ENTRY (); - - state = -acpi_ut_create_pkg_state (internal_object, external_object, index); -if (!state) { -return (AE_NO_MEMORY ); - } - -acpi_ut_push_generic_state (state_list, state); -return (AE_OK ); -} - -/******************************************************************************* -* * FUNCTION: acpi_ut_push_generic_state * * PARAMETERS: list_head - Head of the state stack
@@ -92,7 +59,6 @@ acpi_ut_create_pkg_state_and_push(void *internal_object,* DESCRIPTION: Push a state object onto a state stack * ******************************************************************************/ -void acpi_ut_push_generic_state (union acpi_generic_state **list_head,union acpi_generic_state *state)
Signature · 1 line
1.7.10
PATCH 13/31 ACPICA: Tables: Move an iasl specific table function to iasl source file.
In reply to Lv ZhengACPICA commit 6eb364d790dd103bd4990f808e0095a421c437cb
acpi_tb_store_table() implements a logic that is only correct to iasl. So it won't be used by any other utilities except iasl. This function is complained by the kernel users as an unused function. The best choice to stop releasing it to the Linux kernel should be moving it to adisasm.c.
ACPI table manager can use both struct acpi_table_desc (direct referencing) and table index (indirect referencing) as the descriptor to the table, so acpi_tb_get_next_root_index() is extended to return both of them to allow maximum usability from the callers. NOTE that indirect referencing is a design result to meet the boot stage static allocation requirement for the table descriptors.
This is a linuxized acpi_tb_store_table() removing result, there should be no functional changes introduced to the Linux kernel by this patch except the additonal kernel unused argument for acpi_tb_get_next_root_index() (renamed to acpi_tb_get_next_root_index()). This argument is used in the ACPICA upstream.
--- drivers/acpi/acpica/actables.h | 9 +++------ drivers/acpi/acpica/tbdata.c | 20 ++++++++++++++++---- drivers/acpi/acpica/tbinstal.c | 39 +-------------------------------------- 3 files changed, 20 insertions(+), 48 deletions(-)
drivers/acpi/acpica/actables.h +3 -6
@@ -58,7 +58,9 @@ u8 *acpi_tb_scan_memory_for_rsdp(u8 *start_address, u32 length);/* * tbdata - table data structure management */ -acpi_status acpi_tb_get_next_root_index (u32 *table_index); +acpi_status +acpi_tb_get_next_table_descriptor (u32 *table_index, +struct acpi_table_desc **table_desc); void acpi_tb_init_table_descriptor(struct acpi_table_desc *table_desc,
@@ -119,11 +121,6 @@ acpi_tb_install_standard_table(acpi_physical_address address,u8 flags, u8 reload, u8 override, u32 *table_index); -acpi_status -acpi_tb_store_table (acpi_physical_address address, -struct acpi_table_header *table, -u32 length,u8 flags,u32 *table_index); -void acpi_tb_uninstall_table (struct acpi_table_desc *table_desc);void acpi_tb_terminate (void );
drivers/acpi/acpica/tbdata.c +16 -4
@@ -484,19 +484,23 @@ acpi_status acpi_tb_resize_root_table_list(void)/******************************************************************************* * -* FUNCTION: acpi_tb_get_next_root_index +* FUNCTION: acpi_tb_get_next_table_descriptor * * PARAMETERS: table_index - Where table index is returned +* table_desc - Where table descriptor is returned * -* RETURN: Status and table index. +* RETURN: Status and table index/descriptor. * * DESCRIPTION: Allocate a new ACPI table entry to the global table list * ******************************************************************************/ -acpi_status acpi_tb_get_next_root_index (u32 *table_index) +acpi_status +acpi_tb_get_next_table_descriptor (u32 *table_index, +struct acpi_table_desc **table_desc) {acpi_status status; +u32 i;/* Ensure that there is room for the table in the Root Table List */
@@ -508,8 +512,16 @@ acpi_status acpi_tb_get_next_root_index(u32 *table_index) } } - *table_index = acpi_gbl_root_table_list.current_table_count; + i = acpi_gbl_root_table_list.current_table_count; acpi_gbl_root_table_list.current_table_count++; + +if (table_index) { + *table_index = i; + } +if (table_desc) { + *table_desc = &acpi_gbl_root_table_list.tables[i]; + } +return (AE_OK ); }
drivers/acpi/acpica/tbinstal.c +1 -38
@@ -356,7 +356,7 @@ acpi_tb_install_standard_table(acpi_physical_address address,/* Add the table to the global root table list */ - status =acpi_tb_get_next_root_index (&i); + status =acpi_tb_get_next_table_descriptor (&i,NULL );if (ACPI_FAILURE (status)) { goto release_and_exit; }
@@ -457,43 +457,6 @@ finish_override:/******************************************************************************* * -* FUNCTION: acpi_tb_store_table -* -* PARAMETERS: address - Table address -* table - Table header -* length - Table length -* flags - Install flags -* table_index - Where the table index is returned -* -* RETURN: Status and table index. -* -* DESCRIPTION: Add an ACPI table to the global table list -* -******************************************************************************/ - -acpi_status -acpi_tb_store_table (acpi_physical_address address, -struct acpi_table_header * table, -u32 length,u8 flags,u32 *table_index) -{ -acpi_status status; -struct acpi_table_desc *table_desc; - - status =acpi_tb_get_next_root_index (table_index); -if (ACPI_FAILURE (status)) { -return (status); - } - -/* Initialize added table */ - - table_desc = &acpi_gbl_root_table_list.tables[*table_index]; -acpi_tb_init_table_descriptor (table_desc, address, flags, table); - table_desc->pointer = table; -return (AE_OK ); -} - -/******************************************************************************* -* * FUNCTION: acpi_tb_uninstall_table * * PARAMETERS: table_desc - Table descriptor
Signature · 1 line
1.7.10
PATCH 14/31 ACPICA: Utilities: Correct conditional compilation definitions.
In reply to Lv ZhengACPICA commit 9a5982afbebc56289c4834b5f6dac87e0f04af14
Some conditional compilation definitions are wrong across header and source files. This patch corrects them for the utilities component.
--- drivers/acpi/acpica/acutils.h | 14 ++++++++++++-- drivers/acpi/acpica/utmisc.c | 2 ++ drivers/acpi/acpica/utuuid.c | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-)
drivers/acpi/acpica/acutils.h +12 -2
@@ -502,6 +502,9 @@ const union acpi_predefined_info *acpi_ut_get_next_predefined_method(const unionconst union acpi_predefined_info *acpi_ut_match_predefined_method (char *name); +void acpi_ut_get_expected_return_types (char *buffer,u32 expected_btypes); + +#if (definedACPI_ASL_COMPILER || definedACPI_HELP_APP )const union acpi_predefined_info *acpi_ut_match_resource_name (char *name);void
@@ -509,9 +512,8 @@ acpi_ut_display_predefined_method(char *buffer,const union acpi_predefined_info *this_name, u8 multi_line); -void acpi_ut_get_expected_return_types (char *buffer,u32 expected_btypes); -u32 acpi_ut_get_resource_bit_width (char *buffer,u16 types); +#endif /* * utstate - Generic state creation/cache routines
@@ -562,7 +564,9 @@ const struct acpi_exception_info *acpi_ut_validate_exception(acpi_statusu8 acpi_ut_is_pci_root_bridge (char *id); +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP )u8 acpi_ut_is_aml_table (struct acpi_table_header *table); +#endif acpi_status acpi_ut_walk_package_tree(union acpi_operand_object *source_object,
@@ -621,15 +625,19 @@ acpi_ut_get_resource_end_tag(union acpi_operand_object *obj_desc, u8 **end_tag);*/ void acpi_ut_strupr (char *src_string); +#ifdef ACPI_ASL_COMPILER void acpi_ut_strlwr (char *src_string);int acpi_ut_stricmp (char *string1,char *string2); +#endif acpi_status acpi_ut_strtoul64 (char *string,u32 base,u64 *ret_integer);void acpi_ut_print_string (char *string,u16 max_length); +#if definedACPI_ASL_COMPILER || definedACPI_EXEC_APP void ut_convert_backslashes (char *pathname); +#endif u8 acpi_ut_valid_acpi_name (char *name);
@@ -777,6 +785,8 @@ int acpi_ut_file_printf(ACPI_FILE file, const char *format, ...);/* * utuuid -- UUID support functions */ +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP || definedACPI_HELP_APP )void acpi_ut_convert_string_to_uuid (char *in_string,u8 *uuid_buffer); +#endif #endif /* _ACUTILS_H */
drivers/acpi/acpica/utmisc.c +2 -0
@@ -75,6 +75,7 @@ u8 acpi_ut_is_pci_root_bridge(char *id)return (FALSE); } +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP )/******************************************************************************* * * FUNCTION: acpi_ut_is_aml_table
@@ -102,6 +103,7 @@ u8 acpi_ut_is_aml_table(struct acpi_table_header *table) return (FALSE); } +#endif /******************************************************************************* *
drivers/acpi/acpica/utuuid.c +2 -0
@@ -47,6 +47,7 @@#define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME("utuuid") +#if (definedACPI_ASL_COMPILER || definedACPI_EXEC_APP || definedACPI_HELP_APP )/* * UUID support functions. *
@@ -94,3 +95,4 @@ void acpi_ut_convert_string_to_uuid(char *in_string, u8 *uuid_buffer) 1]); } } +#endif
Signature · 1 line
1.7.10
PATCH 15/31 ACPICA: Resources: Correct conditional compilation definitions.
In reply to Lv ZhengACPICA commit f92a08512b0b35dce4a7fc6a73216674a3c2541b
Some conditional compilation definitions are wrong across header and source files. This patch corrects them for the resources component.
NOTE that a further patch in this patchset cleans up all ACPI_EXEC_APP, converting them into ACPI_DEBUGGER, including part of this change.
--- drivers/acpi/acpica/acresrc.h | 2 ++ drivers/acpi/acpica/rsdump.c | 2 ++ 2 files changed, 4 insertions(+)
drivers/acpi/acpica/acresrc.h +2 -0
@@ -301,9 +301,11 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length,/* * rsdump */ +#ifdef ACPI_EXEC_APP void acpi_rs_dump_resource_list (struct acpi_resource *resource);void acpi_rs_dump_irq_list (u8 *route_table); +#endif /* * Resource conversion tables
drivers/acpi/acpica/rsdump.c +2 -0
@@ -355,6 +355,7 @@ static void acpi_rs_dump_address_common(union acpi_resource_data *resource)acpi_rs_dump_descriptor (resource, acpi_rs_dump_general_flags); } +#ifdef ACPI_EXEC_APP /******************************************************************************* * * FUNCTION: acpi_rs_dump_resource_list
@@ -464,6 +465,7 @@ void acpi_rs_dump_irq_list(u8 *route_table) prt_element, prt_element->length); } } +#endif /******************************************************************************* *
Signature · 1 line
1.7.10
PATCH 16/31 ACPICA: Casting changes around acpi_physical_address/acpi_size.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 46dc081e570b1363af1e368980201cbb65c4100f
Update for some recent changes, detected by MSVC and FreeBSD builds.
--- drivers/acpi/acpica/exregion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/acpi/acpica/exregion.c +2 -2
@@ -165,8 +165,8 @@ acpi_ex_system_memory_space_handler(u32 function,* one page, which is similar to the original code that used a 4k * maximum window. */ - page_boundary_map_length = -ACPI_ROUND_UP (address,ACPI_DEFAULT_PAGE_SIZE ) - address; + page_boundary_map_length = (acpi_size) + (ACPI_ROUND_UP (address,ACPI_DEFAULT_PAGE_SIZE ) - address);if (page_boundary_map_length ==0 ) { page_boundary_map_length =ACPI_DEFAULT_PAGE_SIZE ; }
Signature · 1 line
1.7.10
PATCH 17/31 ACPICA: Fix a sscanf format string.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 84f3569db7accc576ace2dae81d101467254fe9d
Was using %d instead of properly using %u.
This patch only affects acpidump tool.
--- tools/power/acpi/os_specific/service_layers/oslinuxtbl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/power/acpi/os_specific/service_layers/oslinuxtbl.c +1 -1
@@ -1156,7 +1156,7 @@ osl_table_name_from_file(char *filename, char *signature, u32 *instance)/* Extract instance number */ if (isdigit ((int )filename[ACPI_NAME_SIZE ])) { -sscanf (&filename[ACPI_NAME_SIZE ],"%d" , instance); +sscanf (&filename[ACPI_NAME_SIZE ],"%u" , instance); }else if (strlen (filename) !=ACPI_NAME_SIZE ) {return (AE_BAD_SIGNATURE ); }else {
Signature · 1 line
1.7.10
PATCH 18/31 ACPICA: Update Resource descriptor dump module.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 184f3cc4d162a6b6b2005eacd8be2fe55f19a245
- Change global #ifdef to check for ACPI_DEBUGGER only.
- Cleanup some long lines and misaligned code.
--- drivers/acpi/acpica/acresrc.h | 4 +- drivers/acpi/acpica/rsdump.c | 229 +++++++++++++++++++++-------------------- 2 files changed, 117 insertions(+), 116 deletions(-)
drivers/acpi/acpica/acresrc.h +2 -2
@@ -299,9 +299,9 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length, union aml_resource *aml);/* -* rsdump +* rsdump - Debugger support */ -#ifdef ACPI_EXEC_APP +#ifdef ACPI_DEBUGGER void acpi_rs_dump_resource_list (struct acpi_resource *resource);void acpi_rs_dump_irq_list (u8 *route_table);
drivers/acpi/acpica/rsdump.c +115 -114
252 lines not on this page · raw message
Signature · 1 line
1.7.10
PATCH 19/31 ACPICA: Update AML Debugger global variables.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit f65d0e5b880860a6da0c336b7c48139d1469f5b4
- Remove unused variables
- Update to use standard naming/capitalization convention.
Linux kernel is not affected by this patch.
--- drivers/acpi/acpica/acglobal.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/acpi/acpica/acglobal.h +1 -3
@@ -321,9 +321,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_db_terminate_threads, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_abort_method, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_method_executing, FALSE); -ACPI_GLOBAL (u8, acpi_gbl_db_opt_tables); -ACPI_GLOBAL (u8, acpi_gbl_db_opt_stats); -ACPI_GLOBAL (u8, acpi_gbl_db_opt_ini_methods); +ACPI_GLOBAL (u8, acpi_gbl_db_opt_no_ini_methods);ACPI_GLOBAL (u8, acpi_gbl_db_opt_no_region_support);ACPI_GLOBAL (u8, acpi_gbl_db_output_to_file); ACPI_GLOBAL(char *, acpi_gbl_db_buffer);
Signature · 1 line
1.7.10
PATCH 20/31 ACPICA: iASL/Disassembler: Add option to assume table contains valid AML.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit f5d2ff3fa05341d9fe27250fcb2e14c7f871432c
For dynamically loaded tables that have unknown ACPI signatures, this option (-df) forces the disassembler to treat the table as if it contains valid AML code (like a DSDT or SSDT). Otherwise, the disassembler will treat the table as an unkown data table and simply do a hex dump of the table.
Linux kernel is not affected by this patch.
--- drivers/acpi/acpica/acglobal.h | 1 + 1 file changed, 1 insertion(+)
drivers/acpi/acpica/acglobal.h +1 -0
@@ -306,6 +306,7 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_db_output_flags, ACPI_DB_CONSOLE_OUTPUT);ACPI_INIT_GLOBAL (u8, acpi_gbl_no_resource_disassembly, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_ignore_noop_operator, FALSE);ACPI_INIT_GLOBAL (u8, acpi_gbl_cstyle_disassembly, TRUE); +ACPI_INIT_GLOBAL (u8, acpi_gbl_force_aml_disassembly, FALSE);ACPI_GLOBAL (u8, acpi_gbl_db_opt_disasm);ACPI_GLOBAL (u8, acpi_gbl_db_opt_verbose);
Signature · 1 line
1.7.10
PATCH 21/31 ACPICA: iASL: Enhancement for constant folding.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 4f9e950d41cd6f6c704d5d6cf518647620d65e99
Add support to fold expressions with a target operand -- these are folded and converted to a Store operator:
Add (4, 3, INT1) --> Store (7, INT1)
Also supports ASL+ constructs:
INT1 = 4 + 3 --> Store (7, INT1)
Linux kernel is not affected by this patch.
--- drivers/acpi/acpica/acstruct.h | 5 ----- 1 file changed, 5 deletions(-)
drivers/acpi/acpica/acstruct.h +0 -5
@@ -68,11 +68,6 @@#define ACPI_WALK_METHOD 0x01#define ACPI_WALK_METHOD_RESTART 0x02 -/* Flags for iASL compiler only */ - -#define ACPI_WALK_CONST_REQUIRED 0x10 -#define ACPI_WALK_CONST_OPTIONAL 0x20 -struct acpi_walk_state {struct acpi_walk_state *next;/* Next walk_state in list */ u8 descriptor_type;/* To differentiate various internal objs */
Signature · 1 line
1.7.10
PATCH 22/31 ACPICA: Add infrastructure for External() opcode.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit d115fe2ffdab449d6107d58580c5afd0a81d65fe
This change adds the basic low-level infrastructure for the External AML opcode. The interpreter will simply ignore this op, as the op is intended for use by the disassembler only.
Note that External() opcode is useful for disassembler, interpreter can simply ignore it and still return exceptions for unknown control methods so the kernel part only includes the grammar definition of External() opcode in order to ignore it but doesn't interpret it.
--- drivers/acpi/acpica/aclocal.h | 2 +- drivers/acpi/acpica/acopcode.h | 2 ++ drivers/acpi/acpica/amlcode.h | 1 + drivers/acpi/acpica/dsutils.c | 11 +++++++++++ drivers/acpi/acpica/exoparg3.c | 13 ++++++++++++- drivers/acpi/acpica/psopcode.c | 8 +++++++- drivers/acpi/acpica/psopinfo.c | 2 +- 7 files changed, 35 insertions(+), 4 deletions(-)
drivers/acpi/acpica/aclocal.h +1 -1
@@ -53,7 +53,7 @@ typedef u32 acpi_mutex_handle;/* Total number of aml opcodes defined */ -#define AML_NUM_OPCODES 0x81 +#define AML_NUM_OPCODES 0x82/* Forward declarations */
drivers/acpi/acpica/acopcode.h +2 -0
@@ -111,6 +111,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_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)
@@ -243,6 +244,7 @@#define ARGI_DWORD_OP ARGI_INVALID_OPCODE#define ARGI_ELSE_OP ARGI_INVALID_OPCODE#define ARGI_EVENT_OP ARGI_INVALID_OPCODE +#define ARGI_EXTERNAL_OP ARGI_LIST3 (ARGI_STRING, ARGI_INTEGER, ARGI_INTEGER)#define ARGI_FATAL_OP ARGI_LIST3 (ARGI_INTEGER, ARGI_INTEGER, ARGI_INTEGER)#define ARGI_FIELD_OP ARGI_INVALID_OPCODE#define ARGI_FIND_SET_LEFT_BIT_OP ARGI_LIST2 (ARGI_INTEGER, ARGI_TARGETREF)
drivers/acpi/acpica/amlcode.h +1 -0
@@ -65,6 +65,7 @@#define AML_PACKAGE_OP (u16) 0x12#define AML_VAR_PACKAGE_OP (u16) 0x13/* ACPI 2.0 */ #define AML_METHOD_OP (u16) 0x14 +#define AML_EXTERNAL_OP (u16) 0x15/* ACPI 6.0 */ #define AML_DUAL_NAME_PREFIX (u16) 0x2e#define AML_MULTI_NAME_PREFIX_OP (u16) 0x2f#define AML_NAME_CHAR_SUBSEQ (u16) 0x30
drivers/acpi/acpica/dsutils.c +11 -0
@@ -564,6 +564,17 @@ acpi_ds_create_operand(struct acpi_walk_state *walk_state, acpi_operand_object, acpi_gbl_root_node); status =AE_OK ; + }else if (parent_op->common.aml_opcode == +AML_EXTERNAL_OP ) { + +/* TBD: May only be temporary */ + + obj_desc = +acpi_ut_create_string_object ((acpi_size ) name_length); + +ACPI_STRNCPY (obj_desc->string.pointer, + name_string, name_length); + status =AE_OK ; }else {/* * We just plain didn't find it -- which is a
drivers/acpi/acpica/exoparg3.c +12 -1
@@ -114,7 +114,18 @@ acpi_status acpi_ex_opcode_3A_0T_0R(struct acpi_walk_state *walk_state)/* Might return while OS is shutting down, just continue */ ACPI_FREE (fatal); -break ; + goto cleanup; + +case AML_EXTERNAL_OP : +/* +* If the interpreter sees this opcode, just ignore it. The External +* op is intended for use by disassemblers in order to properly +* disassemble control method invocations. The opcode or group of +* opcodes should be surrounded by an "if (0)" clause to ensure that +* AML interpreters never see the opcode. +*/ + status =AE_OK ; + goto cleanup;default :
drivers/acpi/acpica/psopcode.c +7 -1
@@ -646,7 +646,13 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = { AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS),/* 80 */ ACPI_OP ("-ExtAccessField-" ,ARGP_CONNECTFIELD_OP ,ARGI_CONNECTFIELD_OP ,ACPI_TYPE_ANY , -AML_CLASS_INTERNAL ,AML_TYPE_BOGUS ,0 ) +AML_CLASS_INTERNAL ,AML_TYPE_BOGUS ,0 ), + +/* 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 ) /*! [End] no source code translation !*/ };
drivers/acpi/acpica/psopinfo.c +1 -1
@@ -210,7 +210,7 @@ const u8 acpi_gbl_short_op_index[256] = {/* 8 9 A B C D E F */ /* 0x00 */ 0x00 ,0x01 , _UNK, _UNK, _UNK, _UNK,0x02 , _UNK,/* 0x08 */ 0x03 , _UNK,0x04 ,0x05 ,0x06 ,0x07 ,0x6E , _UNK, -/* 0x10 */ 0x08 ,0x09 ,0x0a ,0x6F ,0x0b , _UNK, _UNK, _UNK, +/* 0x10 */ 0x08 ,0x09 ,0x0a ,0x6F ,0x0b ,0x81 , _UNK, _UNK,/* 0x18 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,/* 0x20 */ _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, /* 0x28 */ _UNK, _UNK, _UNK, _UNK, _UNK, 0x63, _PFX, _PFX,
Signature · 1 line
1.7.10
PATCH 23/31 ACPICA: Add "Windows 2015" string to _OSI support.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit b293f602a67da478ae0bec129e68bd99787d9908
This change adds this string for Windows 10.
--- drivers/acpi/acpica/utosi.c | 1 + include/acpi/actypes.h | 1 + 2 files changed, 2 insertions(+)
drivers/acpi/acpica/utosi.c +1 -0
@@ -100,6 +100,7 @@ static struct acpi_interface_info acpi_default_supported_interfaces[] = { {"Windows 2009", NULL, 0, ACPI_OSI_WIN_7}, /* Windows 7 and Server 2008 R2 - Added 09/2009 */ {"Windows 2012", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8 and Server 2012 - Added 08/2012 */ {"Windows 2013", NULL, 0, ACPI_OSI_WIN_8}, /* Windows 8.1 and Server 2012 R2 - Added 01/2014 */ + {"Windows 2015", NULL, 0, ACPI_OSI_WIN_10}, /* Windows 10 - Added 03/2015 */ /* Feature Group Strings */
include/acpi/actypes.h +1 -0
@@ -1274,6 +1274,7 @@ struct acpi_memory_list {#define ACPI_OSI_WIN_VISTA_SP2 0x0A#define ACPI_OSI_WIN_7 0x0B#define ACPI_OSI_WIN_8 0x0C +#define ACPI_OSI_WIN_10 0x0D/* Definitions of file IO */
Signature · 1 line
1.7.10
PATCH 24/31 ACPICA: Permanently set _REV to the value '2'.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 7af00219681ab35ebe57d64a9189fd04a5a026d8
Windows uses a value of 2, and has no plans to ever change this. So, _REV is essentially useless for its primary purpose.
Worse, some BIOS vendors have used the difference in _REV values between Windows and ACPICA to indicate which one is running.
It has been decided by the ACPI community to deprecate this method, and return 1 for ACPI 1.0 (32-bit integers) and 2 for ACPI 2.0 and greater (both 32-bit and 64-bit integers.
ACPICA is changed to reflect this.
--- drivers/acpi/acpica/utglobal.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
drivers/acpi/acpica/utglobal.c +10 -3
@@ -102,12 +102,19 @@ const struct acpi_predefined_names acpi_gbl_pre_defined_names[] = { {"_SB_", ACPI_TYPE_DEVICE, NULL}, {"_SI_", ACPI_TYPE_LOCAL_SCOPE, NULL}, {"_TZ_", ACPI_TYPE_DEVICE, NULL}, - {"_REV", ACPI_TYPE_INTEGER, (char *)ACPI_CA_SUPPORT_LEVEL}, +/* +* March, 2015: +* The _REV object is in the process of being deprecated, because +* other ACPI implementations permanently return 2. Thus, it +* has little or no value. Return 2 for compatibility with +* other ACPI implementations. +*/ + {"_REV", ACPI_TYPE_INTEGER, ACPI_CAST_PTR(char, 2)}, {"_OS_", ACPI_TYPE_STRING, ACPI_OS_NAME}, - {"_GL_", ACPI_TYPE_MUTEX, (char *)1}, + {"_GL_", ACPI_TYPE_MUTEX, ACPI_CAST_PTR(char, 1)}, #if !defined (ACPI_NO_METHOD_EXECUTION) || defined (ACPI_CONSTANT_EVAL_ONLY) - {"_OSI", ACPI_TYPE_METHOD, (char *)1}, + {"_OSI", ACPI_TYPE_METHOD, ACPI_CAST_PTR(char, 1)}, #endif/* Table terminator */
Signature · 1 line
1.7.10
PATCH 25/31 ACPICA: Remove unused internal AML opcode.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 3ec867764b079a98d8097d705c9f7b68270c04ec
This patch removes unused AML_INT_STATICSTRING_OP. Lv Zheng.
--- drivers/acpi/acpica/amlcode.h | 1 - 1 file changed, 1 deletion(-)
drivers/acpi/acpica/amlcode.h +0 -1
@@ -207,7 +207,6 @@#define AML_INT_RESERVEDFIELD_OP (u16) 0x0031#define AML_INT_ACCESSFIELD_OP (u16) 0x0032#define AML_INT_BYTELIST_OP (u16) 0x0033 -#define AML_INT_STATICSTRING_OP (u16) 0x0034#define AML_INT_METHODCALL_OP (u16) 0x0035#define AML_INT_RETURN_VALUE_OP (u16) 0x0036#define AML_INT_EVAL_SUBTREE_OP (u16) 0x0037
Signature · 1 line
1.7.10
PATCH 26/31 ACPICA: Add "//" before ascii output of buffers.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 657dc227672709895df3192fa5ea59a649b9a76f
Updates the dump buffer utility to comment out the ascii part of buffer dump. Prevents some tools from getting confused.
--- drivers/acpi/acpica/utbuffer.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/acpi/acpica/utbuffer.c +8 -0
@@ -150,6 +150,14 @@ void acpi_ut_dump_buffer(u8 *buffer, u32 count, u32 display, u32 base_offset)return ; } +/* +* Add comment characters so rest of line is ignored when +* compiled +*/ +if (j ==0 ) { +acpi_os_printf ("// " ); + } + buf_char = buffer[(acpi_size ) i + j];if (ACPI_IS_PRINT (buf_char)) {acpi_os_printf ("%c" , buf_char);
Signature · 1 line
1.7.10
PATCH 27/31 ACPICA: Update for SLIC ACPI table.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit c73195e13d6ad53dd7f03f86cea03c7dec72ffd3
Update to latest table definition, which contains major changes.
SLIC table is not used in the Linux kernel.
--- include/acpi/actbl2.h | 52 +++---------------------------------------------- 1 file changed, 3 insertions(+), 49 deletions(-)
include/acpi/actbl2.h +3 -49
@@ -959,10 +959,10 @@ struct acpi_mtmr_entry {/******************************************************************************* * * SLIC - Software Licensing Description Table -* Version 1 * -* Conforms to "OEM Activation 2.0 for Windows Vista Operating Systems", -* Copyright 2006 +* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", +* November 29, 2011 +* Copyright 2011 Microsoft * ******************************************************************************/
@@ -972,52 +972,6 @@ struct acpi_table_slic {struct acpi_table_header header;/* Common ACPI table header */ }; -/* Common SLIC subtable header */ - -struct acpi_slic_header { -u32 type; -u32 length; -}; - -/* Values for Type field above */ - -enum acpi_slic_type { -ACPI_SLIC_TYPE_PUBLIC_KEY =0 , -ACPI_SLIC_TYPE_WINDOWS_MARKER =1 , -ACPI_SLIC_TYPE_RESERVED =2 /* 2 and greater are reserved */ -}; - -/* -* SLIC Subtables, correspond to Type in struct acpi_slic_header -*/ - -/* 0: Public Key Structure */ - -struct acpi_slic_key { -struct acpi_slic_header header; -u8 key_type; -u8 version; -u16 reserved; -u32 algorithm; -char magic[4 ]; -u32 bit_length; -u32 exponent; -u8 modulus[128 ]; -}; - -/* 1: Windows Marker Structure */ - -struct acpi_slic_marker { -struct acpi_slic_header header; -u32 version; -char oem_id[ACPI_OEM_ID_SIZE ];/* ASCII OEM identification */ -char oem_table_id[ACPI_OEM_TABLE_ID_SIZE ];/* ASCII OEM table identification */ -char windows_flag[8 ]; -u32 slic_version; -u8 reserved[16 ]; -u8 signature[128 ]; -}; -/******************************************************************************* * * SPCR - Serial Port Console Redirection table
Signature · 1 line
1.7.10
PATCH 28/31 ACPICA: iASL: Add support for MSDM ACPI table.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit a2c590ce9bff850e3abf4fd430cede860a3cb1fa
This is the Microsoft Data Management table.
MSDM table is not used in the Linux kernel.
--- include/acpi/actbl2.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
include/acpi/actbl2.h +17 -2
@@ -73,6 +73,7 @@#define ACPI_SIG_LPIT "LPIT"/* Low Power Idle Table */ #define ACPI_SIG_MCFG "MCFG"/* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCHI "MCHI"/* Management Controller Host Interface table */ +#define ACPI_SIG_MSDM "MSDM"/* Microsoft Data Management Table */ #define ACPI_SIG_MTMR "MTMR"/* MID Timer table */ #define ACPI_SIG_SLIC "SLIC"/* Software Licensing Description Table */ #define ACPI_SIG_SPCR "SPCR"/* Serial Port Console Redirection table */
@@ -935,6 +936,21 @@ struct acpi_table_mchi {/******************************************************************************* * +* MSDM - Microsoft Data Management table +* +* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", +* November 29, 2011. Copyright 2011 Microsoft +* +******************************************************************************/ + +/* Basic MSDM table is only the common ACPI header */ + +struct acpi_table_msdm { +struct acpi_table_header header;/* Common ACPI table header */ +}; + +/******************************************************************************* +* * MTMR - MID Timer Table * Version 1 *
@@ -961,8 +977,7 @@ struct acpi_mtmr_entry {* SLIC - Software Licensing Description Table * * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", -* November 29, 2011 -* Copyright 2011 Microsoft +* November 29, 2011. Copyright 2011 Microsoft * ******************************************************************************/
Signature · 1 line
1.7.10
PATCH 29/31 ACPICA: Disassembler: Some cleanup of the table dump module.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 330e3b7ec96fbd2e0677b786c09d86be36dd5673
Cleanup of LPIT table output (Dean Nelson)
Split some long lines.
--- include/acpi/actbl2.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
include/acpi/actbl2.h +2 -1
@@ -846,7 +846,8 @@ struct acpi_lpit_header {enum acpi_lpit_type {ACPI_LPIT_TYPE_NATIVE_CSTATE =0x00 , -ACPI_LPIT_TYPE_SIMPLE_IO =0x01 +ACPI_LPIT_TYPE_SIMPLE_IO =0x01 , +ACPI_LPIT_TYPE_RESERVED =0x02 /* 2 and above are reserved */ };/* Masks for Flags field above */
Signature · 1 line
1.7.10
PATCH 30/31 ACPICA: Fix a couple issues with the local printf module.
In reply to Lv ZhengACPICA commit 6853da4c0a99b49d62d6c58d22956cd6ff5759a9
The following commit has fixed local printf issue in width.prec:
Commit: 3589b8b8af6bdc3aafe520d76a73b77d965006b6
Subject: ACPICA: Utilities: Fix local printf issue.
But this commit only resets width/precision/quialifier to fix the reported issue and doesn't fix other states issues. So now we still can see breakage in format types and integer bases.
This patch resets format type/base states for local printf to fix this issue. Lv Zheng.
Linux kernel is not affected by this patch as acpi_ut_vsnprintf() hasn't been enabled in the kernel.
--- drivers/acpi/acpica/utprint.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
drivers/acpi/acpica/utprint.c +8 -5
@@ -357,11 +357,11 @@ intacpi_ut_vsnprintf (char *string, acpi_size size, const char *format, va_list args) { -u8 base =10 ; -u8 type =0 ; -s32 width =-1 ; -s32 precision =-1 ; -char qualifier =0 ; +u8 base; +u8 type; +s32 width; +s32 precision; +char qualifier;u64 number;char *pos;char *end;
@@ -380,6 +380,9 @@ acpi_ut_vsnprintf(char *string,continue ; } + type =0 ; + base =10 ; +/* Process sign */ do {
Signature · 1 line
1.7.10
PATCH 31/31 ACPICA: Update version to 20150410.
In reply to Lv ZhengFrom: Bob Moore <[email protected]>
ACPICA commit 06198cfd96ef271f554a50f1830a5975468c39ac ACPICA commit 8a3c1df1edb5f9fc5c940500c598c0107d30df71
Version 20150410.
--- 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 0x20150204 +#define ACPI_CA_VERSION 0x20150410#include <acpi/acconfig.h> #include <acpi/actypes.h>
Signature · 1 line
1.7.10