Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: #ifndef __GENERIC_IO_H 2: #define __GENERIC_IO_H 3: 4: #include <linux/linkage.h> 5: #include <asm/byteorder.h> 6: 7: /* 8: * These are the "generic" interfaces for doing new-style 9: * memory-mapped or PIO accesses. Architectures may do 10: * their own arch-optimized versions, these just act as 11: * wrappers around the old-style IO register access functions: 12: * read[bwl]/write[bwl]/in[bwl]/out[bwl] 13: * 14: * Don't include this directly, include it from <asm/io.h>. 15: */ 16: 17: /* 18: * Read/write from/to an (offsettable) iomem cookie. It might be a PIO 19: * access or a MMIO access, these functions don't care. The info is 20: * encoded in the hardware mapping set up by the mapping functions 21: * (or the cookie itself, depending on implementation and hw). 22: * 23: * The generic routines just encode the PIO/MMIO as part of the 24: * cookie, and coldly assume that the MMIO IO mappings are not 25: * in the low address range. Architectures for which this is not 26: * true can't use this generic implementation. 27: */ 28: extern unsigned int ioread8(void __iomem *); 29: extern unsigned int ioread16(void __iomem *); 30: extern unsigned int ioread16be(void __iomem *); 31: extern unsigned int ioread32(void __iomem *); 32: extern unsigned int ioread32be(void __iomem *); 33: 34: extern void iowrite8(u8, void __iomem *); 35: extern void iowrite16(u16, void __iomem *); 36: extern void iowrite16be(u16, void __iomem *); 37: extern void iowrite32(u32, void __iomem *); 38: extern void iowrite32be(u32, void __iomem *); 39: 40: /* 41: * "string" versions of the above. Note that they 42: * use native byte ordering for the accesses (on 43: * the assumption that IO and memory agree on a 44: * byte order, and CPU byteorder is irrelevant). 45: * 46: * They do _not_ update the port address. If you 47: * want MMIO that copies stuff laid out in MMIO 48: * memory across multiple ports, use "memcpy_toio()" 49: * and friends. 50: */ 51: extern void ioread8_rep(void __iomem *port, void *buf, unsigned long count); 52: extern void ioread16_rep(void __iomem *port, void *buf, unsigned long count); 53: extern void ioread32_rep(void __iomem *port, void *buf, unsigned long count); 54: 55: extern void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count); 56: extern void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count); 57: extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count); 58: 59: #ifdef CONFIG_HAS_IOPORT 60: /* Create a virtual mapping cookie for an IO port range */ 61: extern void __iomem *ioport_map(unsigned long port, unsigned int nr); 62: extern void ioport_unmap(void __iomem *); 63: #endif 64: 65: #ifndef ARCH_HAS_IOREMAP_WC 66: #define ioremap_wc ioremap_nocache 67: #endif 68: 69: #ifdef CONFIG_PCI 70: /* Destroy a virtual mapping cookie for a PCI BAR (memory or IO) */ 71: struct pci_dev; 72: extern void pci_iounmap(struct pci_dev *dev, void __iomem *); 73: #elif defined(CONFIG_GENERIC_IOMAP) 74: struct pci_dev; 75: static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) 76: { } 77: #endif 78: 79: #include <asm-generic/pci_iomap.h> 80: 81: #endif 82: