ACPICA: New OSI interfaces
Subsystems (2)
cover ACPICA: New OSI interfaces
Hi, all
http://www.acpica.org/bugzilla/show_bug.cgi?id=836
This patch series is to implement new OSI interfaces to dynamically install/remove _OSI entries.
Thanks for any comment.
Lin Ming
Quoted 9 lines · Lin Ming
Hi, all
http://www.acpica.org/bugzilla/show_bug.cgi?id=836
This patch series is to implement new OSI interfaces to dynamically install/remove
_OSIentries.Thanks for any comment.
Lin Ming
Below is the updated version.
The ACPICA part change has been merged into ACPICA git repository.
Please have a look at the Linux OSL _OSI code change, say drivers/acpi/osl.c.
Thanks.
Subject: [PATCH] ACPICA/ACPI: Add new host interfaces for _OSI support
Adds install/remove interfaces so that the host can dynamically alter the global _OSI table. Also adds support for _OSI handlers. Additional support: new debugger command (osi), and test support in the acpiexec utility. Adds new file, utilities/utosi.c. ACPICA bugzilla 836.
The Linux OSL _OSI code is also changed.acpi_osi_setup can't call acpi_install/remove_interface because ACPICA is not initialized yet at this early time.
So we just save the osi string in acpi_osi_setup and will handle it later in a new function acpi_osi_setup_late.
http://www.acpica.org/bugzilla/show_bug.cgi?id=836
--- drivers/acpi/acpica/Makefile | 3 +- drivers/acpi/acpica/acdebug.h | 2 + drivers/acpi/acpica/acglobal.h | 6 + drivers/acpi/acpica/aclocal.h | 5 + drivers/acpi/acpica/acutils.h | 17 ++- drivers/acpi/acpica/uteval.c | 147 ---------------- drivers/acpi/acpica/utglobal.c | 2 + drivers/acpi/acpica/utinit.c | 4 + drivers/acpi/acpica/utmutex.c | 8 + drivers/acpi/acpica/utosi.c | 379 ++++++++++++++++++++++++++++++++++++++++ drivers/acpi/acpica/utxface.c | 125 +++++++++++++- drivers/acpi/osl.c | 88 +++++----- include/acpi/acpiosxf.h | 3 - include/acpi/acpixf.h | 6 + include/acpi/actypes.h | 3 + 15 files changed, 602 insertions(+), 196 deletions(-)
drivers/acpi/acpica/Makefile +2 -1
@@ -44,4 +44,5 @@ acpi-y += tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o acpi-y += utalloc.o utdebug.o uteval.o utinit.o utmisc.o utxface.o \ utcopy.o utdelete.o utglobal.o utmath.o utobject.o \ - utstate.o utmutex.o utobject.o utresrc.o utlock.o utids.o + utstate.o utmutex.o utobject.o utresrc.o utlock.o utids.o \ + utosi.o
drivers/acpi/acpica/acdebug.h +2 -0
@@ -105,6 +105,8 @@ void acpi_db_set_method_data(char *type_arg, char *index_arg, char *value_arg);acpi_status acpi_db_display_objects (char *obj_type_arg,char *display_count_arg); +void acpi_db_display_interfaces (char *action_arg,char *interface_name_arg); +acpi_status acpi_db_find_name_in_namespace (char *name_arg);void acpi_db_set_scope (char *name);
drivers/acpi/acpica/acglobal.h +6 -0
@@ -187,6 +187,10 @@ ACPI_EXTERN u8 acpi_gbl_integer_bit_width; ACPI_EXTERN u8 acpi_gbl_integer_byte_width; ACPI_EXTERN u8 acpi_gbl_integer_nybble_width; +/* Mutex for _OSI support */ + +ACPI_EXTERN acpi_mutex acpi_gbl_osi_mutex; +/* Reader/Writer lock is used for namespace walk and dynamic table unload */ ACPI_EXTERN struct acpi_rw_lock acpi_gbl_namespace_rw_lock;
@@ -255,6 +259,7 @@ ACPI_EXTERN acpi_init_handler acpi_gbl_init_handler; ACPI_EXTERN acpi_tbl_handler acpi_gbl_table_handler; ACPI_EXTERN void *acpi_gbl_table_handler_context; ACPI_EXTERN struct acpi_walk_state *acpi_gbl_breakpoint_walk; +ACPI_EXTERN acpi_interface_handler acpi_gbl_interface_handler;/* Owner ID support */
@@ -275,6 +280,7 @@ ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present; ACPI_EXTERN u8 acpi_gbl_events_initialized; ACPI_EXTERN u8 acpi_gbl_system_awake_and_running; ACPI_EXTERN u8 acpi_gbl_osi_data; +ACPI_EXTERN struct acpi_interface_info *acpi_gbl_supported_interfaces;#ifndef DEFINE_ACPI_GLOBALS
drivers/acpi/acpica/aclocal.h +5 -0
@@ -913,9 +913,14 @@ struct acpi_bit_register_info {struct acpi_interface_info {char *name; +struct acpi_interface_info *next; +u8 flags;u8 value; }; +#define ACPI_OSI_INVALID 0x01 +#define ACPI_OSI_DYNAMIC 0x02 +struct acpi_port_info {char *name;u16 start;
drivers/acpi/acpica/acutils.h +15 -2
@@ -312,8 +312,6 @@ void acpi_ut_delete_internal_object_list(union acpi_operand_object **obj_list);/* * uteval - object evaluation */ -acpi_status acpi_ut_osi_implementation (struct acpi_walk_state *walk_state); - acpi_status acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node, char *path,
@@ -395,6 +393,21 @@ acpi_status acpi_ut_get_object_size(union acpi_operand_object *obj, acpi_size * obj_length);/* +* utosi - Support for the _OSI predefined control method +*/ +acpi_status acpi_ut_initialize_interfaces (void ); + +void acpi_ut_interface_terminate (void ); + +acpi_status acpi_ut_install_interface (acpi_string interface_name); + +acpi_status acpi_ut_remove_interface (acpi_string interface_name); + +struct acpi_interface_info *acpi_ut_get_interface (acpi_string interface_name); + +acpi_status acpi_ut_osi_implementation (struct acpi_walk_state *walk_state); + +/* * utstate - Generic state creation/cache routines */ void
drivers/acpi/acpica/uteval.c +0 -147
153 lines not on this page · raw message
drivers/acpi/acpica/utglobal.c +2 -0
@@ -774,6 +774,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_exception_handler =NULL ; acpi_gbl_init_handler =NULL ; acpi_gbl_table_handler =NULL ; + acpi_gbl_interface_handler =NULL ;/* Global Lock support */
@@ -800,6 +801,7 @@ acpi_status acpi_ut_init_globals(void) acpi_gbl_debugger_configuration =DEBUGGER_THREADING ; acpi_gbl_db_output_flags =ACPI_DB_CONSOLE_OUTPUT ; acpi_gbl_osi_data =0 ; + acpi_gbl_osi_mutex =NULL ;/* Hardware oriented */
drivers/acpi/acpica/utinit.c +4 -0
@@ -117,6 +117,10 @@ void acpi_ut_subsystem_shutdown(void)/* Close the acpi_event Handling */ acpi_ev_terminate (); + +/* Delete any dynamic _OSI interfaces */ + +acpi_ut_interface_terminate ();#endif /* Close the Namespace */
drivers/acpi/acpica/utmutex.c +8 -0
@@ -86,6 +86,12 @@ acpi_status acpi_ut_mutex_initialize(void)spin_lock_init (acpi_gbl_gpe_lock);spin_lock_init (acpi_gbl_hardware_lock); +/* Mutex for _OSI support */ + status =acpi_os_create_mutex (&acpi_gbl_osi_mutex); +if (ACPI_FAILURE (status)) { +return_ACPI_STATUS (status); + } +/* Create the reader/writer lock for namespace access */ status =acpi_ut_create_rw_lock (&acpi_gbl_namespace_rw_lock);
@@ -117,6 +123,8 @@ void acpi_ut_mutex_terminate(void)acpi_ut_delete_mutex (i); } +acpi_os_delete_mutex (acpi_gbl_osi_mutex); +/* Delete the spinlocks */ acpi_os_delete_lock (acpi_gbl_gpe_lock);
drivers/acpi/acpica/utosi.c new file +379 -0
379 lines not on this page · raw message
drivers/acpi/acpica/utxface.c +124 -1
140 lines not on this page · raw message
drivers/acpi/osl.c +46 -42
130 lines not on this page · raw message
include/acpi/acpiosxf.h +0 -3
@@ -239,9 +239,6 @@ acpi_os_derive_pci_id(acpi_handle device,/* * Miscellaneous */ -acpi_status acpi_os_validate_interface (char *interface); -acpi_status acpi_osi_invalidate (char * interface); -acpi_status acpi_os_validate_address (u8 space_id,acpi_physical_address address,acpi_size length,char *name);
include/acpi/acpixf.h +6 -0
@@ -105,6 +105,10 @@ const char *acpi_format_exception(acpi_status exception);acpi_status acpi_purge_cached_objects (void ); +acpi_status acpi_install_interface (acpi_string interface_name); + +acpi_status acpi_remove_interface (acpi_string interface_name); +/* * ACPI Memory management */
@@ -263,6 +267,8 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,acpi_status acpi_install_exception_handler (acpi_exception_handler handler);#endif +acpi_status acpi_install_interface_handler (acpi_interface_handler handler); +/* * Event interfaces */
include/acpi/actypes.h +3 -0
@@ -950,6 +950,9 @@ acpi_status(*acpi_walk_callback) (acpi_handle object,u32 nesting_level, void *context, void **return_value); +typedef +u32 (*acpi_interface_handler ) (acpi_string interface_name,u32 supported); +/* Interrupt handler return values */ #define ACPI_INTERRUPT_NOT_HANDLED 0x00