intel-iommu: move DMA_32/64BIT_PFN into intel-iommu.c
[safe/jmp/linux-2.6] / drivers / pci / syscall.c
index c071790..645d7a6 100644 (file)
@@ -7,13 +7,12 @@
  * magic northbridge registers..
  */
 
-#include <linux/sched.h>
 #include <linux/errno.h>
 #include <linux/pci.h>
 #include <linux/smp_lock.h>
 #include <linux/syscalls.h>
 #include <asm/uaccess.h>
-
+#include "pci.h"
 
 asmlinkage long
 sys_pciconfig_read(unsigned long bus, unsigned long dfn,
@@ -24,34 +23,31 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn,
        u8 byte;
        u16 word;
        u32 dword;
-       long err, cfg_ret;
+       long err;
+       long cfg_ret;
 
-       err = -EPERM;
        if (!capable(CAP_SYS_ADMIN))
-               goto error;
+               return -EPERM;
 
        err = -ENODEV;
-       dev = pci_find_slot(bus, dfn);
+       dev = pci_get_bus_and_slot(bus, dfn);
        if (!dev)
                goto error;
 
-       lock_kernel();
        switch (len) {
        case 1:
-               cfg_ret = pci_read_config_byte(dev, off, &byte);
+               cfg_ret = pci_user_read_config_byte(dev, off, &byte);
                break;
        case 2:
-               cfg_ret = pci_read_config_word(dev, off, &word);
+               cfg_ret = pci_user_read_config_word(dev, off, &word);
                break;
        case 4:
-               cfg_ret = pci_read_config_dword(dev, off, &dword);
+               cfg_ret = pci_user_read_config_dword(dev, off, &dword);
                break;
        default:
                err = -EINVAL;
-               unlock_kernel();
                goto error;
        };
-       unlock_kernel();
 
        err = -EIO;
        if (cfg_ret != PCIBIOS_SUCCESSFUL)
@@ -67,7 +63,8 @@ sys_pciconfig_read(unsigned long bus, unsigned long dfn,
        case 4:
                err = put_user(dword, (unsigned int __user *)buf);
                break;
-       };
+       }
+       pci_dev_put(dev);
        return err;
 
 error:
@@ -84,7 +81,8 @@ error:
        case 4:
                put_user(-1, (unsigned int __user *)buf);
                break;
-       };
+       }
+       pci_dev_put(dev);
        return err;
 }
 
@@ -102,17 +100,16 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
        if (!capable(CAP_SYS_ADMIN))
                return -EPERM;
 
-       dev = pci_find_slot(bus, dfn);
+       dev = pci_get_bus_and_slot(bus, dfn);
        if (!dev)
                return -ENODEV;
 
-       lock_kernel();
        switch(len) {
        case 1:
                err = get_user(byte, (u8 __user *)buf);
                if (err)
                        break;
-               err = pci_write_config_byte(dev, off, byte);
+               err = pci_user_write_config_byte(dev, off, byte);
                if (err != PCIBIOS_SUCCESSFUL)
                        err = -EIO;
                break;
@@ -121,7 +118,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
                err = get_user(word, (u16 __user *)buf);
                if (err)
                        break;
-               err = pci_write_config_word(dev, off, word);
+               err = pci_user_write_config_word(dev, off, word);
                if (err != PCIBIOS_SUCCESSFUL)
                        err = -EIO;
                break;
@@ -130,7 +127,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
                err = get_user(dword, (u32 __user *)buf);
                if (err)
                        break;
-               err = pci_write_config_dword(dev, off, dword);
+               err = pci_user_write_config_dword(dev, off, dword);
                if (err != PCIBIOS_SUCCESSFUL)
                        err = -EIO;
                break;
@@ -138,8 +135,7 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
        default:
                err = -EINVAL;
                break;
-       };
-       unlock_kernel();
-
+       }
+       pci_dev_put(dev);
        return err;
 }