diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/iomap.h | 44 | ||||
| -rw-r--r-- | include/asm-i386/io.h | 2 | ||||
| -rw-r--r-- | include/asm-ppc64/io.h | 2 |
3 files changed, 48 insertions, 0 deletions
diff --git a/include/asm-generic/iomap.h b/include/asm-generic/iomap.h new file mode 100644 index 000000000000..cbd9e7f03a2a --- /dev/null +++ b/include/asm-generic/iomap.h @@ -0,0 +1,44 @@ +#ifndef __GENERIC_IO_H +#define __GENERIC_IO_H + +#include <linux/linkage.h> + +/* + * These are the "generic" interfaces for doing new-style + * memory-mapped or PIO accesses. Architectures may do + * their own arch-optimized versions, these just act as + * wrappers around the old-style IO register access functions: + * read[bwl]/write[bwl]/in[bwl]/out[bwl] + * + * Don't include this directly, include it from <asm/io.h>. + */ + +/* + * Read/write from/to an (offsettable) iomem cookie. It might be a PIO + * access or a MMIO access, these functions don't care. The info is + * encoded in the hardware mapping set up by the mapping functions + * (or the cookie itself, depending on implementation and hw). + * + * The generic routines just encode the PIO/MMIO as part of the + * cookie, and coldly assume that the MMIO IO mappings are not + * in the low address range. Architectures for which this is not + * true can't use this generic implementation. + */ +extern unsigned int fastcall ioread8(void __iomem *); +extern unsigned int fastcall ioread16(void __iomem *); +extern unsigned int fastcall ioread32(void __iomem *); + +extern void fastcall iowrite8(u8, void __iomem *); +extern void fastcall iowrite16(u16, void __iomem *); +extern void fastcall iowrite32(u32, void __iomem *); + +/* Create a virtual mapping cookie for an IO port range */ +extern void __iomem *ioport_map(unsigned int port, unsigned int nr); +extern void ioport_unmap(void __iomem *); + +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */ +struct pci_dev; +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); +extern void pci_iounmap(struct pci_dev *dev, void __iomem *); + +#endif diff --git a/include/asm-i386/io.h b/include/asm-i386/io.h index 20a26b98ec6e..083e3b8f8c7f 100644 --- a/include/asm-i386/io.h +++ b/include/asm-i386/io.h @@ -45,6 +45,8 @@ #ifdef __KERNEL__ +#include <asm-generic/iomap.h> + #include <linux/vmalloc.h> /** diff --git a/include/asm-ppc64/io.h b/include/asm-ppc64/io.h index 33c2dfff9815..1e9cd557352e 100644 --- a/include/asm-ppc64/io.h +++ b/include/asm-ppc64/io.h @@ -18,6 +18,8 @@ #include <asm/memory.h> #include <asm/delay.h> +#include <asm-generic/iomap.h> + #define __ide_mm_insw(p, a, c) _insw_ns((volatile u16 *)(p), (a), (c)) #define __ide_mm_insl(p, a, c) _insl_ns((volatile u32 *)(p), (a), (c)) #define __ide_mm_outsw(p, a, c) _outsw_ns((volatile u16 *)(p), (a), (c)) |
