diff options
author | Alex Williamson <alex.williamson@redhat.com> | 2012-06-11 01:27:33 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-06-12 11:21:42 -0400 |
commit | a6961651408afa9387d6df43c4a1dc4fd35dcb1b (patch) | |
tree | 3ee93b9316123567ebfc65804cb8cc1be95be1e2 | |
parent | c63587d7f5b9db84e71daf5962dc0394eb657da2 (diff) |
PCI: create common pcibios_err_to_errno
For returning errors out to non-PCI code. Re-name xen's version.
Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r-- | drivers/xen/xen-pciback/conf_space.c | 6 | ||||
-rw-r--r-- | include/linux/pci.h | 26 |
2 files changed, 29 insertions, 3 deletions
diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c index 30d7be026c1..46ae0f9f02a 100644 --- a/drivers/xen/xen-pciback/conf_space.c +++ b/drivers/xen/xen-pciback/conf_space.c | |||
@@ -124,7 +124,7 @@ static inline u32 merge_value(u32 val, u32 new_val, u32 new_val_mask, | |||
124 | return val; | 124 | return val; |
125 | } | 125 | } |
126 | 126 | ||
127 | static int pcibios_err_to_errno(int err) | 127 | static int xen_pcibios_err_to_errno(int err) |
128 | { | 128 | { |
129 | switch (err) { | 129 | switch (err) { |
130 | case PCIBIOS_SUCCESSFUL: | 130 | case PCIBIOS_SUCCESSFUL: |
@@ -202,7 +202,7 @@ out: | |||
202 | pci_name(dev), size, offset, value); | 202 | pci_name(dev), size, offset, value); |
203 | 203 | ||
204 | *ret_val = value; | 204 | *ret_val = value; |
205 | return pcibios_err_to_errno(err); | 205 | return xen_pcibios_err_to_errno(err); |
206 | } | 206 | } |
207 | 207 | ||
208 | int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value) | 208 | int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value) |
@@ -290,7 +290,7 @@ int xen_pcibk_config_write(struct pci_dev *dev, int offset, int size, u32 value) | |||
290 | } | 290 | } |
291 | } | 291 | } |
292 | 292 | ||
293 | return pcibios_err_to_errno(err); | 293 | return xen_pcibios_err_to_errno(err); |
294 | } | 294 | } |
295 | 295 | ||
296 | void xen_pcibk_config_free_dyn_fields(struct pci_dev *dev) | 296 | void xen_pcibk_config_free_dyn_fields(struct pci_dev *dev) |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 9d04599c6bd..a691f62bcf8 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -474,6 +474,32 @@ static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) { return false; | |||
474 | #define PCIBIOS_SET_FAILED 0x88 | 474 | #define PCIBIOS_SET_FAILED 0x88 |
475 | #define PCIBIOS_BUFFER_TOO_SMALL 0x89 | 475 | #define PCIBIOS_BUFFER_TOO_SMALL 0x89 |
476 | 476 | ||
477 | /* | ||
478 | * Translate above to generic errno for passing back through non-pci. | ||
479 | */ | ||
480 | static inline int pcibios_err_to_errno(int err) | ||
481 | { | ||
482 | if (err <= PCIBIOS_SUCCESSFUL) | ||
483 | return err; /* Assume already errno */ | ||
484 | |||
485 | switch (err) { | ||
486 | case PCIBIOS_FUNC_NOT_SUPPORTED: | ||
487 | return -ENOENT; | ||
488 | case PCIBIOS_BAD_VENDOR_ID: | ||
489 | return -EINVAL; | ||
490 | case PCIBIOS_DEVICE_NOT_FOUND: | ||
491 | return -ENODEV; | ||
492 | case PCIBIOS_BAD_REGISTER_NUMBER: | ||
493 | return -EFAULT; | ||
494 | case PCIBIOS_SET_FAILED: | ||
495 | return -EIO; | ||
496 | case PCIBIOS_BUFFER_TOO_SMALL: | ||
497 | return -ENOSPC; | ||
498 | } | ||
499 | |||
500 | return -ENOTTY; | ||
501 | } | ||
502 | |||
477 | /* Low-level architecture-dependent routines */ | 503 | /* Low-level architecture-dependent routines */ |
478 | 504 | ||
479 | struct pci_ops { | 505 | struct pci_ops { |