]> err.no Git - linux-2.6/blobdiff - drivers/pci/pci-acpi.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6] / drivers / pci / pci-acpi.c
index bb7456c1dbac54755db25a939904169bd37d4d04..c8062494009f8fdb692adbbe15bb741a870064cd 100644 (file)
@@ -36,6 +36,7 @@ acpi_query_osc (
        struct acpi_buffer      output = {ACPI_ALLOCATE_BUFFER, NULL};
        union acpi_object       *out_obj;
        u32                     osc_dw0;
+       acpi_status *ret_status = (acpi_status *)retval;
 
        
        /* Setting up input parameters */
@@ -54,8 +55,7 @@ acpi_query_osc (
 
        status = acpi_evaluate_object(handle, "_OSC", &input, &output);
        if (ACPI_FAILURE (status)) {
-               printk(KERN_DEBUG  
-                       "Evaluate _OSC Set fails. Status = 0x%04x\n", status);
+               *ret_status = status;
                return status;
        }
        out_obj = output.pointer;
@@ -90,6 +90,7 @@ acpi_query_osc (
 
 query_osc_out:
        kfree(output.pointer);
+       *ret_status = status;
        return status;
 }
 
@@ -121,11 +122,9 @@ acpi_run_osc (
        in_params[3].buffer.pointer     = (u8 *)context;
 
        status = acpi_evaluate_object(handle, "_OSC", &input, &output);
-       if (ACPI_FAILURE (status)) {
-               printk(KERN_DEBUG  
-                       "Evaluate _OSC Set fails. Status = 0x%04x\n", status);
+       if (ACPI_FAILURE (status))
                return status;
-       }
+
        out_obj = output.pointer;
        if (out_obj->type != ACPI_TYPE_BUFFER) {
                printk(KERN_DEBUG  
@@ -166,6 +165,7 @@ run_osc_out:
 acpi_status pci_osc_support_set(u32 flags)
 {
        u32 temp;
+       acpi_status retval;
 
        if (!(flags & OSC_SUPPORT_MASKS)) {
                return AE_TYPE;
@@ -179,9 +179,13 @@ acpi_status pci_osc_support_set(u32 flags)
        acpi_get_devices ( PCI_ROOT_HID_STRING,
                        acpi_query_osc,
                        ctrlset_buf,
-                       NULL );
+                       (void **) &retval );
        ctrlset_buf[OSC_QUERY_TYPE] = !OSC_QUERY_ENABLE;
        ctrlset_buf[OSC_CONTROL_TYPE] = temp;
+       if (ACPI_FAILURE(retval)) {
+               /* no osc support at all */
+               ctrlset_buf[OSC_SUPPORT_TYPE] = 0;
+       }
        return AE_OK;
 }
 EXPORT_SYMBOL(pci_osc_support_set);
@@ -309,6 +313,10 @@ static int __init acpi_pci_init(void)
 {
        int ret;
 
+       if (acpi_gbl_FADT.boot_flags & BAF_MSI_NOT_SUPPORTED) {
+               printk(KERN_INFO"ACPI FADT declares the system doesn't support MSI, so disable it\n");
+               pci_no_msi();
+       }
        ret = register_acpi_bus_type(&acpi_pci_bus);
        if (ret)
                return 0;