Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>

+14 -1
+10
include/asm-generic/pci_iomap.h
··· 15 15 #ifdef CONFIG_PCI 16 16 /* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ 17 17 extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); 18 + /* Create a virtual mapping cookie for a port on a given PCI device. 19 + * Do not call this directly, it exists to make it easier for architectures 20 + * to override */ 21 + #ifdef CONFIG_NO_GENERIC_PCI_IOPORT_MAP 22 + extern void __iomem *__pci_ioport_map(struct pci_dev *dev, unsigned long port, 23 + unsigned int nr); 24 + #else 25 + #define __pci_ioport_map(dev, port, nr) ioport_map((port), (nr)) 26 + #endif 27 + 18 28 #else 19 29 static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) 20 30 {
+3
lib/Kconfig
··· 19 19 config GENERIC_FIND_FIRST_BIT 20 20 bool 21 21 22 + config NO_GENERIC_PCI_IOPORT_MAP 23 + bool 24 + 22 25 config GENERIC_PCI_IOMAP 23 26 bool 24 27
+1 -1
lib/pci_iomap.c
··· 34 34 if (maxlen && len > maxlen) 35 35 len = maxlen; 36 36 if (flags & IORESOURCE_IO) 37 - return ioport_map(start, len); 37 + return __pci_ioport_map(dev, start, len); 38 38 if (flags & IORESOURCE_MEM) { 39 39 if (flags & IORESOURCE_CACHEABLE) 40 40 return ioremap(start, len);