File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/iomap.h

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: