On Monday 30 January 2012, Michael S. Tsirkin wrote: > --- a/include/asm-generic/pci_iomap.h > +++ b/include/asm-generic/pci_iomap.h > @@ -15,6 +15,11 @@ 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. */ > +extern void __iomem *__pci_ioport_map(struct pci_dev *dev, unsigned long port, > + unsigned int nr); > #else > static inline void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max) > { > index 4b0fdc2..1dfda29 100644 > --- a/lib/pci_iomap.c > +++ b/lib/pci_iomap.c > @@ -9,6 +9,16 @@ > #include <linux/export.h> > > #ifdef CONFIG_PCI > +#ifndef CONFIG_NO_GENERIC_PCI_IOPORT_MAP > +/* Architectures can override ioport mapping while > + * still using the rest of the generic infrastructure. */ > +void __iomem *__pci_ioport_map(struct pci_dev *dev, > + unsigned long port, > + unsigned int nr) > +{ > + return ioport_map(port, nr); > +} > +#endif > /** > * pci_iomap - create a virtual mapping cookie for a PCI BAR > * @dev: PCI device that owns the BAR This looks correct, but it would be nicer to express this with an inline function and keeping the new #ifdef to the header file, like +/* + * 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 +static inline void __iomem *__pci_ioport_map(struct pci_dev *dev, + unsigned long port, unsigned int nr) +{ + return ioport_map(port, nr); +} +#endif Arnd