diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2012-02-23 22:19:00 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2012-02-23 22:19:00 -0500 |
commit | 36a66cd6fd0a70ac6848d740d9cf7a4360b5776a (patch) | |
tree | 7cc903ad9f63e9bd1065b6d722fb86f4196dceea | |
parent | 5bfa14ed9f3ca21fcecbcfbf4a848c002b740c41 (diff) |
PCI: add generic pcibios_resource_to_bus()
This replaces the generic versions of pcibios_resource_to_bus() and
pcibios_bus_to_resource() in asm-generic/pci.h with versions that use
pci_resource_to_bus() and pci_bus_to_resource().
The replacements are equivalent except that they can apply host
bridge window offsets when the arch has supplied them by using
pci_add_resource_offset().
Each arch can convert to using pci_add_resource_offset() individually by
removing its device resource fixups from pcibios_fixup_bus() and supplying
ARCH_HAS_GENERIC_PCI_OFFSETS. ARCH_HAS_GENERIC_PCI_OFFSETS can be removed
after all have converted.
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r-- | drivers/pci/probe.c | 16 | ||||
-rw-r--r-- | include/asm-generic/pci.h | 24 | ||||
-rw-r--r-- | include/linux/pci.h | 4 |
3 files changed, 21 insertions, 23 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 3539171d8a98..a677b1e995de 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -118,6 +118,22 @@ void pci_bus_to_resource(struct pci_dev *dev, struct resource *res, | |||
118 | res->end = region->end + offset; | 118 | res->end = region->end + offset; |
119 | } | 119 | } |
120 | 120 | ||
121 | #ifdef ARCH_HAS_GENERIC_PCI_OFFSETS | ||
122 | void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
123 | struct resource *res) | ||
124 | { | ||
125 | pci_resource_to_bus(dev, region, res); | ||
126 | } | ||
127 | EXPORT_SYMBOL(pcibios_resource_to_bus); | ||
128 | |||
129 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
130 | struct pci_bus_region *region) | ||
131 | { | ||
132 | pci_bus_to_resource(dev, res, region); | ||
133 | } | ||
134 | EXPORT_SYMBOL(pcibios_bus_to_resource); | ||
135 | #endif | ||
136 | |||
121 | /* | 137 | /* |
122 | * PCI Bus Class | 138 | * PCI Bus Class |
123 | */ | 139 | */ |
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h index 26373cff4546..0410346e2cf6 100644 --- a/include/asm-generic/pci.h +++ b/include/asm-generic/pci.h | |||
@@ -6,29 +6,7 @@ | |||
6 | #ifndef _ASM_GENERIC_PCI_H | 6 | #ifndef _ASM_GENERIC_PCI_H |
7 | #define _ASM_GENERIC_PCI_H | 7 | #define _ASM_GENERIC_PCI_H |
8 | 8 | ||
9 | /** | 9 | #define ARCH_HAS_GENERIC_PCI_OFFSETS |
10 | * pcibios_resource_to_bus - convert resource to PCI bus address | ||
11 | * @dev: device which owns this resource | ||
12 | * @region: converted bus-centric region (start,end) | ||
13 | * @res: resource to convert | ||
14 | * | ||
15 | * Convert a resource to a PCI device bus address or bus window. | ||
16 | */ | ||
17 | static inline void | ||
18 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
19 | struct resource *res) | ||
20 | { | ||
21 | region->start = res->start; | ||
22 | region->end = res->end; | ||
23 | } | ||
24 | |||
25 | static inline void | ||
26 | pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
27 | struct pci_bus_region *region) | ||
28 | { | ||
29 | res->start = region->start; | ||
30 | res->end = region->end; | ||
31 | } | ||
32 | 10 | ||
33 | static inline struct resource * | 11 | static inline struct resource * |
34 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) | 12 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 419f78f96375..be58a51706cc 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -648,6 +648,10 @@ void pci_fixup_cardbus(struct pci_bus *); | |||
648 | 648 | ||
649 | /* Generic PCI functions used internally */ | 649 | /* Generic PCI functions used internally */ |
650 | 650 | ||
651 | void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
652 | struct resource *res); | ||
653 | void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
654 | struct pci_bus_region *region); | ||
651 | void pcibios_scan_specific_bus(int busn); | 655 | void pcibios_scan_specific_bus(int busn); |
652 | extern struct pci_bus *pci_find_bus(int domain, int busnr); | 656 | extern struct pci_bus *pci_find_bus(int domain, int busnr); |
653 | void pci_bus_add_devices(const struct pci_bus *bus); | 657 | void pci_bus_add_devices(const struct pci_bus *bus); |