acpiphp: Execute ACPI _REG method for hotadded devices
[safe/jmp/linux-2.6] / drivers / pci / hotplug / acpiphp_glue.c
index cb2fd01..b5dad9f 100644 (file)
@@ -749,6 +749,24 @@ static int acpiphp_bus_trim(acpi_handle handle)
        return retval;
 }
 
+static void acpiphp_set_acpi_region(struct acpiphp_slot *slot)
+{
+       struct acpiphp_func *func;
+       union acpi_object params[2];
+       struct acpi_object_list arg_list;
+
+       list_for_each_entry(func, &slot->funcs, sibling) {
+               arg_list.count = 2;
+               arg_list.pointer = params;
+               params[0].type = ACPI_TYPE_INTEGER;
+               params[0].integer.value = ACPI_ADR_SPACE_PCI_CONFIG;
+               params[1].type = ACPI_TYPE_INTEGER;
+               params[1].integer.value = 1;
+               /* _REG is optional, we don't care about if there is failure */
+               acpi_evaluate_object(func->handle, "_REG", &arg_list, NULL);
+       }
+}
+
 /**
  * enable_device - enable, configure a slot
  * @slot: slot to be enabled
@@ -805,6 +823,7 @@ static int __ref enable_device(struct acpiphp_slot *slot)
        pci_bus_assign_resources(bus);
        acpiphp_sanitize_bus(bus);
        acpiphp_set_hpp_values(bus);
+       acpiphp_set_acpi_region(slot);
        pci_enable_bridges(bus);
        pci_bus_add_devices(bus);