Commit b923650b authored by Michael S. Tsirkin's avatar Michael S. Tsirkin

lib: add NO_GENERIC_PCI_IOPORT_MAP

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: default avatarMichael S. Tsirkin <mst@redhat.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 0a962657
...@@ -15,6 +15,16 @@ struct pci_dev; ...@@ -15,6 +15,16 @@ struct pci_dev;
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ /* 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); 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 #else
static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max)
{ {
......
...@@ -19,6 +19,9 @@ config RATIONAL ...@@ -19,6 +19,9 @@ config RATIONAL
config GENERIC_FIND_FIRST_BIT config GENERIC_FIND_FIRST_BIT
bool bool
config NO_GENERIC_PCI_IOPORT_MAP
bool
config GENERIC_PCI_IOMAP config GENERIC_PCI_IOMAP
bool bool
......
...@@ -34,7 +34,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) ...@@ -34,7 +34,7 @@ void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
if (maxlen && len > maxlen) if (maxlen && len > maxlen)
len = maxlen; len = maxlen;
if (flags & IORESOURCE_IO) if (flags & IORESOURCE_IO)
return ioport_map(start, len); return __pci_ioport_map(dev, start, len);
if (flags & IORESOURCE_MEM) { if (flags & IORESOURCE_MEM) {
if (flags & IORESOURCE_CACHEABLE) if (flags & IORESOURCE_CACHEABLE)
return ioremap(start, len); return ioremap(start, len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment