lib: add NO_GENERIC_PCI_IOPORT_MAP
authorMichael S. Tsirkin <mst@redhat.com>
Sun, 29 Jan 2012 22:20:48 +0000 (00:20 +0200)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 31 Jan 2012 21:19:47 +0000 (23:19 +0200)
Some architectures need to override the way
IO port mapping is done on PCI devices.
Supply a generic macro that calls
ioport_map, and make it possible for architectures
to override.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
include/asm-generic/pci_iomap.h
lib/Kconfig
lib/pci_iomap.c

index 8de4b73e19e25b8c72099bfdd90f55e5821a2e61..e58fcf891370e73996a7fe09b510a7b61d7a9fb8 100644 (file)
@@ -15,6 +15,16 @@ struct pci_dev;
 #ifdef CONFIG_PCI
 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
 extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
+/* Create a virtual mapping cookie for a port on a given PCI device.
+ * Do not call this directly, it exists to make it easier for architectures
+ * to override */
+#ifdef CONFIG_NO_GENERIC_PCI_IOPORT_MAP
+extern void __iomem *__pci_ioport_map(struct pci_dev *dev, unsigned long port,
+                                     unsigned int nr);
+#else
+#define __pci_ioport_map(dev, port, nr) ioport_map((port), (nr))
+#endif
+
 #else
 static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
 {
index 169eb7c598e54d42a78018ac2b1338811674afd5..1df13883481c57bf7c93ad0d5e3d7871b81dd4c2 100644 (file)
@@ -19,6 +19,9 @@ config RATIONAL
 config GENERIC_FIND_FIRST_BIT
        bool
 
+config NO_GENERIC_PCI_IOPORT_MAP
+       bool
+
 config GENERIC_PCI_IOMAP
        bool
 
index 4b0fdc22e688d3869c9e62005af933f8dcdd096a..0d83ea8a9605429aa5e79262bef539e51bfec456 100644 (file)
@@ -34,7 +34,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
        if (maxlen && len > maxlen)
                len = maxlen;
        if (flags & IORESOURCE_IO)
-               return ioport_map(start, len);
+               return __pci_ioport_map(dev, start, len);
        if (flags & IORESOURCE_MEM) {
                if (flags & IORESOURCE_CACHEABLE)
                        return ioremap(start, len);