Merge branch 'acpi-mmio' into release
authorLen Brown <len.brown@intel.com>
Tue, 26 Oct 2010 18:50:56 +0000 (14:50 -0400)
committerLen Brown <len.brown@intel.com>
Tue, 26 Oct 2010 18:50:56 +0000 (14:50 -0400)
Conflicts:
drivers/acpi/osl.c

Signed-off-by: Len Brown <len.brown@intel.com>
1  2 
drivers/acpi/osl.c

index d3bed219c442355e1df9035a92ebd6e23521b160,885e222bcabd228d1e9b7aac359551d1cdfb55f0..0c2e445410ab2871b08d3749f4f054a39177fc64
@@@ -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;
+ }