From: Len Brown Date: Tue, 26 Oct 2010 18:50:56 +0000 (-0400) Subject: Merge branch 'acpi-mmio' into release X-Git-Tag: v2.6.37-rc1~100^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1bd64d42abdd4f9d44f77011a31f0292112f4c3b;p=profile%2Fivi%2Fkernel-adaptation-intel-automotive.git Merge branch 'acpi-mmio' into release Conflicts: drivers/acpi/osl.c Signed-off-by: Len Brown --- 1bd64d42abdd4f9d44f77011a31f0292112f4c3b diff --cc drivers/acpi/osl.c index d3bed219,885e222..0c2e445 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@@ -95,10 -95,23 +95,25 @@@ struct acpi_res_list static LIST_HEAD(resource_list_head); static DEFINE_SPINLOCK(acpi_res_lock); + /* + * This list of permanent mappings is for memory that may be accessed from + * interrupt context, where we can't do the ioremap(). + */ + struct acpi_ioremap { + struct list_head list; + void __iomem *virt; + acpi_physical_address phys; + acpi_size size; + struct kref ref; + }; + + static LIST_HEAD(acpi_ioremaps); + static DEFINE_SPINLOCK(acpi_ioremap_lock); + #define OSI_STRING_LENGTH_MAX 64 /* arbitrary */ -static char osi_additional_string[OSI_STRING_LENGTH_MAX]; +static char osi_setup_string[OSI_STRING_LENGTH_MAX]; + +static void __init acpi_osi_setup_late(void); /* * The story of _OSI(Linux) @@@ -1400,5 -1607,44 +1543,46 @@@ acpi_os_validate_address } return AE_OK; } - #endif + + acpi_status __init acpi_os_initialize(void) + { + acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1a_event_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xpm1b_event_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe0_block); + acpi_os_map_generic_address(&acpi_gbl_FADT.xgpe1_block); + + return AE_OK; + } + + acpi_status acpi_os_initialize1(void) + { + kacpid_wq = create_workqueue("kacpid"); + kacpi_notify_wq = create_workqueue("kacpi_notify"); + kacpi_hotplug_wq = create_workqueue("kacpi_hotplug"); + BUG_ON(!kacpid_wq); + BUG_ON(!kacpi_notify_wq); + BUG_ON(!kacpi_hotplug_wq); ++ acpi_install_interface_handler(acpi_osi_handler); ++ acpi_osi_setup_late(); + return AE_OK; + } + + acpi_status acpi_os_terminate(void) + { + if (acpi_irq_handler) { + acpi_os_remove_interrupt_handler(acpi_irq_irq, + acpi_irq_handler); + } + + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe1_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xgpe0_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1b_event_block); + acpi_os_unmap_generic_address(&acpi_gbl_FADT.xpm1a_event_block); + + destroy_workqueue(kacpid_wq); + destroy_workqueue(kacpi_notify_wq); + destroy_workqueue(kacpi_hotplug_wq); + + return AE_OK; + }