int pci_user_read_config_##size                                                \
        (struct pci_dev *dev, int pos, type *val)                       \
 {                                                                      \
-       int ret = 0;                                                    \
+       int ret = PCIBIOS_SUCCESSFUL;                                   \
        u32 data = -1;                                                  \
        if (PCI_##size##_BAD)                                           \
                return -EINVAL;                                         \
                                        pos, sizeof(type), &data);      \
        raw_spin_unlock_irq(&pci_lock);                         \
        *val = (type)data;                                              \
-       if (ret > 0)                                                    \
-               ret = -EINVAL;                                          \
-       return ret;                                                     \
+       return pcibios_err_to_errno(ret);                               \
 }                                                                      \
 EXPORT_SYMBOL_GPL(pci_user_read_config_##size);
 
 int pci_user_write_config_##size                                       \
        (struct pci_dev *dev, int pos, type val)                        \
 {                                                                      \
-       int ret = -EIO;                                                 \
+       int ret = PCIBIOS_SUCCESSFUL;                                   \
        if (PCI_##size##_BAD)                                           \
                return -EINVAL;                                         \
        raw_spin_lock_irq(&pci_lock);                           \
        ret = dev->bus->ops->write(dev->bus, dev->devfn,                \
                                        pos, sizeof(type), val);        \
        raw_spin_unlock_irq(&pci_lock);                         \
-       if (ret > 0)                                                    \
-               ret = -EINVAL;                                          \
-       return ret;                                                     \
+       return pcibios_err_to_errno(ret);                               \
 }                                                                      \
 EXPORT_SYMBOL_GPL(pci_user_write_config_##size);
 
 
        case PCIBIOS_FUNC_NOT_SUPPORTED:
                return -ENOENT;
        case PCIBIOS_BAD_VENDOR_ID:
-               return -EINVAL;
+               return -ENOTTY;
        case PCIBIOS_DEVICE_NOT_FOUND:
                return -ENODEV;
        case PCIBIOS_BAD_REGISTER_NUMBER:
                return -ENOSPC;
        }
 
-       return -ENOTTY;
+       return -ERANGE;
 }
 
 /* Low-level architecture-dependent routines */