[PATCH 6/7] pci: function to retrieve alignment of p2p bars
Gavin Shan
shangw at linux.vnet.ibm.com
Fri Jun 29 16:47:49 EST 2012
The patch introduces function pci_align_boundary() to retrieve the
minimal alignment of p2p bars according to the argument.
Signed-off-by: Gavin Shan <shangw at linux.vnet.ibm.com>
---
drivers/pci/host-bridge.c | 24 ++++++++++++++++++++++++
include/linux/pci.h | 1 +
2 files changed, 25 insertions(+)
diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
index 1854a2d..dc9a95e 100644
--- a/drivers/pci/host-bridge.c
+++ b/drivers/pci/host-bridge.c
@@ -105,3 +105,27 @@ void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
}
EXPORT_SYMBOL(pcibios_bus_to_resource);
+
+resource_size_t pci_align_boundary(struct pci_bus *bus, unsigned long flags)
+{
+ resource_size_t align = 0;
+ struct pci_host_bridge *bridge = find_pci_host_bridge(bus);
+
+ flags &= (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH);
+ switch (flags) {
+ case IORESOURCE_IO:
+ align = (1 << bridge->io_align_shift);
+ break;
+ case IORESOURCE_MEM:
+ align = (1 << bridge->mem_align_shift);
+ break;
+ case (IORESOURCE_MEM | IORESOURCE_PREFETCH):
+ align = (1 << bridge->pmem_align_shift);
+ break;
+ default:
+ printk(KERN_WARNING "%s: invalid flags 0x%lx\n",
+ __func__, flags);
+ }
+
+ return align;
+}
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 2b2b38d..64523ef 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -673,6 +673,7 @@ void __pcibios_bus_to_resource(struct pci_bus *bus, struct resource *res,
struct pci_bus_region *region);
void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
struct pci_bus_region *region);
+resource_size_t pci_align_boundary(struct pci_bus *bus, unsigned long flags);
void pcibios_scan_specific_bus(int busn);
extern struct pci_bus *pci_find_bus(int domain, int busnr);
void pci_bus_add_devices(const struct pci_bus *bus);
--
1.7.9.5
More information about the Linuxppc-dev
mailing list