Merge ../linus
[linux-drm-fsl-dcu.git] / arch / i386 / pci / direct.c
index 0659ced01185201bc4a6d323217a284cb153cc3a..431c9a51b1578bbaf39de3bcefc95d2087a73a38 100644 (file)
@@ -19,7 +19,7 @@ int pci_conf1_read(unsigned int seg, unsigned int bus,
 {
        unsigned long flags;
 
-       if (!value || (bus > 255) || (devfn > 255) || (reg > 255)) {
+       if ((bus > 255) || (devfn > 255) || (reg > 255)) {
                *value = -1;
                return -EINVAL;
        }
@@ -94,8 +94,10 @@ static int pci_conf2_read(unsigned int seg, unsigned int bus,
        unsigned long flags;
        int dev, fn;
 
-       if (!value || (bus > 255) || (devfn > 255) || (reg > 255))
+       if ((bus > 255) || (devfn > 255) || (reg > 255)) {
+               *value = -1;
                return -EINVAL;
+       }
 
        dev = PCI_SLOT(devfn);
        fn = PCI_FUNC(devfn);
@@ -252,7 +254,18 @@ static int __init pci_check_type2(void)
        return works;
 }
 
-void __init pci_direct_init(void)
+void __init pci_direct_init(int type)
+{
+       if (type == 0)
+               return;
+       printk(KERN_INFO "PCI: Using configuration type %d\n", type);
+       if (type == 1)
+               raw_pci_ops = &pci_direct_conf1;
+       else
+               raw_pci_ops = &pci_direct_conf2;
+}
+
+int __init pci_direct_probe(void)
 {
        struct resource *region, *region2;
 
@@ -262,19 +275,16 @@ void __init pci_direct_init(void)
        if (!region)
                goto type2;
 
-       if (pci_check_type1()) {
-               printk(KERN_INFO "PCI: Using configuration type 1\n");
-               raw_pci_ops = &pci_direct_conf1;
-               return;
-       }
+       if (pci_check_type1())
+               return 1;
        release_resource(region);
 
  type2:
        if ((pci_probe & PCI_PROBE_CONF2) == 0)
-               return;
+               return 0;
        region = request_region(0xCF8, 4, "PCI conf2");
        if (!region)
-               return;
+               return 0;
        region2 = request_region(0xC000, 0x1000, "PCI conf2");
        if (!region2)
                goto fail2;
@@ -282,10 +292,11 @@ void __init pci_direct_init(void)
        if (pci_check_type2()) {
                printk(KERN_INFO "PCI: Using configuration type 2\n");
                raw_pci_ops = &pci_direct_conf2;
-               return;
+               return 2;
        }
 
        release_resource(region2);
  fail2:
        release_resource(region);
+       return 0;
 }