diff options
| author | Andy Grover <agrover@groveronline.com> | 2003-05-11 20:44:55 -0700 |
|---|---|---|
| committer | Andy Grover <agrover@groveronline.com> | 2003-05-11 20:44:55 -0700 |
| commit | 209a0fa00a05a21311e8d512c561dfe1e6ed873a (patch) | |
| tree | e9b93c4ed0d83e6907be5f95af1797f920584cbc /include/acpi | |
| parent | ab1bfa5cee11efebda5377fa72a9de4c015b9e0a (diff) | |
ACPI: Interpreter update to 20030509
Changed the subsystem initialization sequence to hold off installation of
address space handlers until the hardware has been initialized and the
system has entered ACPI mode. This is because the installation of space
handlers can cause _REG methods to be run. Previously, the _REG methods
could potentially be run before ACPI mode was enabled.
Fixed some memory leak issues related to address space handler and notify
handler installation. There were some problems with the reference count
mechanism caused by the fact that the handler objects are shared across
several namespace objects.
Fixed a reported problem where reference counts within the namespace were
not properly updated when named objects created by method execution were
deleted.
Fixed a reported problem where multiple SSDTs caused a deletion issue
during subsystem termination. Restructured the table data structures
to simplify the linked lists and the related code.
Fixed a problem where the table ID associated with secondary tables (SSDTs)
was not being propagated into the namespace objects created by those
tables. This would only present a problem for tables that are unloaded
at run-time, however.
Updated AcpiOsReadable and AcpiOsWritable to use the ACPI_SIZE type as
the length parameter (instead of UINT32).
Solved a long-standing problem where an ALREADY_EXISTS error appears on
various systems. This problem could happen when there are multiple
PCI_Config operation regions under a single PCI root bus. This doesnt
happen very frequently, but there are some systems that do this in the
ASL.
Fixed a reported problem where the internal DeleteNode function was
incorrectly handling the case where a namespace node was the first in
the parents child list, and had additional peers (not the only child,
but first in the list of children.)
Diffstat (limited to 'include/acpi')
| -rw-r--r-- | include/acpi/acconfig.h | 2 | ||||
| -rw-r--r-- | include/acpi/acevents.h | 2 | ||||
| -rw-r--r-- | include/acpi/acexcep.h | 6 | ||||
| -rw-r--r-- | include/acpi/acglobal.h | 18 | ||||
| -rw-r--r-- | include/acpi/aclocal.h | 19 | ||||
| -rw-r--r-- | include/acpi/acnamesp.h | 5 | ||||
| -rw-r--r-- | include/acpi/acobject.h | 12 | ||||
| -rw-r--r-- | include/acpi/acpiosxf.h | 4 | ||||
| -rw-r--r-- | include/acpi/actables.h | 10 | ||||
| -rw-r--r-- | include/acpi/actypes.h | 4 |
10 files changed, 43 insertions, 39 deletions
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h index 15f9684deaaf..e2bd8e6214d2 100644 --- a/include/acpi/acconfig.h +++ b/include/acpi/acconfig.h @@ -64,7 +64,7 @@ /* Version string */ -#define ACPI_CA_VERSION 0x20030424 +#define ACPI_CA_VERSION 0x20030509 /* Maximum objects in the various object caches */ diff --git a/include/acpi/acevents.h b/include/acpi/acevents.h index f23360115e83..38664422c555 100644 --- a/include/acpi/acevents.h +++ b/include/acpi/acevents.h @@ -165,7 +165,7 @@ acpi_ev_address_space_dispatch ( void *value); acpi_status -acpi_ev_addr_handler_helper ( +acpi_ev_install_handler ( acpi_handle obj_handle, u32 level, void *context, diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h index cc0bb192980c..d225bdd2b9b9 100644 --- a/include/acpi/acexcep.h +++ b/include/acpi/acexcep.h @@ -94,8 +94,9 @@ #define AE_NO_GLOBAL_LOCK (acpi_status) (0x001A | AE_CODE_ENVIRONMENTAL) #define AE_LOGICAL_ADDRESS (acpi_status) (0x001B | AE_CODE_ENVIRONMENTAL) #define AE_ABORT_METHOD (acpi_status) (0x001C | AE_CODE_ENVIRONMENTAL) +#define AE_SAME_HANDLER (acpi_status) (0x001D | AE_CODE_ENVIRONMENTAL) -#define AE_CODE_ENV_MAX 0x001C +#define AE_CODE_ENV_MAX 0x001D /* * Programmer exceptions @@ -219,7 +220,8 @@ char const *acpi_gbl_exception_names_env[] = "AE_NO_HARDWARE_RESPONSE", "AE_NO_GLOBAL_LOCK", "AE_LOGICAL_ADDRESS", - "AE_ABORT_METHOD" + "AE_ABORT_METHOD", + "AE_SAME_HANDLER" }; char const *acpi_gbl_exception_names_pgm[] = diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h index 59a3643156d7..254d11a7ac5e 100644 --- a/include/acpi/acglobal.h +++ b/include/acpi/acglobal.h @@ -117,15 +117,15 @@ ACPI_EXTERN struct acpi_generic_address acpi_gbl_xpm1b_enable; /* * ACPI Table info arrays */ -extern struct acpi_table_desc acpi_gbl_acpi_tables[NUM_ACPI_TABLES]; -extern struct acpi_table_support acpi_gbl_acpi_table_data[NUM_ACPI_TABLES]; +extern struct acpi_table_list acpi_gbl_table_lists[NUM_ACPI_TABLE_TYPES]; +extern struct acpi_table_support acpi_gbl_table_data[NUM_ACPI_TABLE_TYPES]; /* * Predefined mutex objects. This array contains the * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs. * (The table maps local handles to the real OS handles) */ -ACPI_EXTERN struct acpi_mutex_info acpi_gbl_acpi_mutex_info [NUM_MTX]; +ACPI_EXTERN struct acpi_mutex_info acpi_gbl_mutex_info[NUM_MUTEX]; /***************************************************************************** @@ -136,8 +136,8 @@ ACPI_EXTERN struct acpi_mutex_info acpi_gbl_acpi_mutex_info [NUM_MT ACPI_EXTERN struct acpi_memory_list acpi_gbl_memory_lists[ACPI_NUM_MEM_LISTS]; -ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_drv_notify; -ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_sys_notify; +ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_device_notify; +ACPI_EXTERN struct acpi_object_notify_handler acpi_gbl_system_notify; ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler; ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk; ACPI_EXTERN acpi_handle acpi_gbl_global_lock_semaphore; @@ -202,7 +202,7 @@ ACPI_EXTERN u32 acpi_gbl_deepest_nesting; ****************************************************************************/ -ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list; +ACPI_EXTERN struct acpi_thread_state *acpi_gbl_current_walk_list; /* Control method single step flag */ @@ -215,7 +215,7 @@ ACPI_EXTERN u8 acpi_gbl_cm_single_step; * ****************************************************************************/ -ACPI_EXTERN union acpi_parse_object *acpi_gbl_parsed_namespace_root; +ACPI_EXTERN union acpi_parse_object *acpi_gbl_parsed_namespace_root; /***************************************************************************** * @@ -236,8 +236,8 @@ ACPI_EXTERN u8 acpi_gbl_sleep_type_b; extern struct acpi_fixed_event_info acpi_gbl_fixed_event_info[ACPI_NUM_FIXED_EVENTS]; ACPI_EXTERN struct acpi_fixed_event_handler acpi_gbl_fixed_event_handlers[ACPI_NUM_FIXED_EVENTS]; -ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head; -ACPI_EXTERN struct acpi_gpe_block_info *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS]; +ACPI_EXTERN struct acpi_gpe_xrupt_info *acpi_gbl_gpe_xrupt_list_head; +ACPI_EXTERN struct acpi_gpe_block_info *acpi_gbl_gpe_fadt_blocks[ACPI_MAX_GPE_BLOCKS]; ACPI_EXTERN acpi_handle acpi_gbl_gpe_lock; diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index fffbddc8f532..63eddd3290ab 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h @@ -87,8 +87,8 @@ typedef u32 acpi_mutex_handle; #define ACPI_MTX_DEBUG_CMD_COMPLETE 11 #define ACPI_MTX_DEBUG_CMD_READY 12 -#define MAX_MTX 12 -#define NUM_MTX MAX_MTX+1 +#define MAX_MUTEX 12 +#define NUM_MUTEX MAX_MUTEX+1 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) @@ -140,12 +140,8 @@ struct acpi_mutex_info typedef u16 acpi_owner_id; #define ACPI_OWNER_TYPE_TABLE 0x0 #define ACPI_OWNER_TYPE_METHOD 0x1 -#define ACPI_FIRST_METHOD_ID 0x0000 -#define ACPI_FIRST_TABLE_ID 0x8000 - -/* TBD: [Restructure] get rid of the need for this! */ - -#define TABLE_ID_DSDT (acpi_owner_id) 0x8000 +#define ACPI_FIRST_METHOD_ID 0x0001 +#define ACPI_FIRST_TABLE_ID 0xF000 /* Field access granularities */ @@ -232,13 +228,18 @@ struct acpi_table_desc u64 physical_address; u32 aml_length; acpi_size length; - u32 count; acpi_owner_id table_id; u8 type; u8 allocation; u8 loaded_into_namespace; }; +struct acpi_table_list +{ + struct acpi_table_desc *next; + u32 count; +}; + struct acpi_find_context { diff --git a/include/acpi/acnamesp.h b/include/acpi/acnamesp.h index e809068247ff..f6e52a783791 100644 --- a/include/acpi/acnamesp.h +++ b/include/acpi/acnamesp.h @@ -201,6 +201,11 @@ acpi_ns_compare_names ( char *name1, char *name2); +void +acpi_ns_remove_reference ( + struct acpi_namespace_node *node); + + /* * Namespace modification - nsmodify */ diff --git a/include/acpi/acobject.h b/include/acpi/acobject.h index e121f26094d3..be30364c5218 100644 --- a/include/acpi/acobject.h +++ b/include/acpi/acobject.h @@ -112,9 +112,9 @@ * Common fields for objects that support ASL notifications */ #define ACPI_COMMON_NOTIFY_INFO \ - union acpi_operand_object *sys_handler; /* Handler for system notifies */\ - union acpi_operand_object *drv_handler; /* Handler for driver notifies */\ - union acpi_operand_object *addr_handler; /* Handler for Address space */ + union acpi_operand_object *system_notify; /* Handler for system notifies */\ + union acpi_operand_object *device_notify; /* Handler for driver notifies */\ + union acpi_operand_object *address_space; /* Handler for Address space */ /****************************************************************************** @@ -214,7 +214,7 @@ struct acpi_object_region ACPI_OBJECT_COMMON_HEADER u8 space_id; - union acpi_operand_object *addr_handler; /* Handler for system notifies */ + union acpi_operand_object *address_space; /* Handler for region access */ struct acpi_namespace_node *node; /* containing object */ union acpi_operand_object *next; u32 length; @@ -446,8 +446,8 @@ union acpi_operand_object struct acpi_object_buffer_field buffer_field; struct acpi_object_bank_field bank_field; struct acpi_object_index_field index_field; - struct acpi_object_notify_handler notify_handler; - struct acpi_object_addr_handler addr_handler; + struct acpi_object_notify_handler notify; + struct acpi_object_addr_handler address_space; struct acpi_object_reference reference; struct acpi_object_extra extra; struct acpi_object_data data; diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index 928b5f49030a..bb6df66442bc 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h @@ -290,12 +290,12 @@ acpi_os_derive_pci_id( u8 acpi_os_readable ( void *pointer, - u32 length); + acpi_size length); u8 acpi_os_writable ( void *pointer, - u32 length); + acpi_size length); u32 acpi_os_get_timer ( diff --git a/include/acpi/actables.h b/include/acpi/actables.h index 32fe58c16dd7..305c2a9adf4f 100644 --- a/include/acpi/actables.h +++ b/include/acpi/actables.h @@ -157,7 +157,7 @@ acpi_tb_match_signature ( acpi_status acpi_tb_recognize_table ( struct acpi_table_desc *table_info, - u8 search_type); + u8 search_type); acpi_status acpi_tb_init_table_descriptor ( @@ -170,11 +170,11 @@ acpi_tb_init_table_descriptor ( */ void -acpi_tb_delete_acpi_tables ( +acpi_tb_delete_all_tables ( void); void -acpi_tb_delete_acpi_table ( +acpi_tb_delete_tables_by_type ( acpi_table_type type); void @@ -185,10 +185,6 @@ struct acpi_table_desc * acpi_tb_uninstall_table ( struct acpi_table_desc *table_desc); -void -acpi_tb_free_acpi_tables_of_type ( - struct acpi_table_desc *table_info); - /* * tbrsd - RSDP, RSDT utilities diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 7ffa0b226c31..1d536c0cbcde 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h @@ -407,7 +407,7 @@ typedef u32 acpi_table_type; #define ACPI_TABLE_SSDT (acpi_table_type) 5 #define ACPI_TABLE_XSDT (acpi_table_type) 6 #define ACPI_TABLE_MAX 6 -#define NUM_ACPI_TABLES (ACPI_TABLE_MAX+1) +#define NUM_ACPI_TABLE_TYPES (ACPI_TABLE_MAX+1) /* @@ -747,7 +747,7 @@ struct acpi_system_info u32 debug_level; u32 debug_layer; u32 num_table_types; - struct acpi_table_info table_info [NUM_ACPI_TABLES]; + struct acpi_table_info table_info [NUM_ACPI_TABLE_TYPES]; }; |
