|
@@ -323,3 +323,79 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
|
|
*
|
|
*
|
|
* ioremap takes a PCI memory address, as specified in
|
|
* ioremap takes a PCI memory address, as specified in
|
|
* Documentation/io-mapping.txt.
|
|
* Documentation/io-mapping.txt.
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
|
|
|
+#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
|
|
|
+#define ioremap_cached(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
|
|
|
|
+#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
|
|
|
|
+#define iounmap __arm_iounmap
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * io{read,write}{8,16,32} macros
|
|
|
|
+ */
|
|
|
|
+#ifndef ioread8
|
|
|
|
+#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __iormb(); __v; })
|
|
|
|
+#define ioread16(p) ({ unsigned int __v = le16_to_cpu((__force __le16)__raw_readw(p)); __iormb(); __v; })
|
|
|
|
+#define ioread32(p) ({ unsigned int __v = le32_to_cpu((__force __le32)__raw_readl(p)); __iormb(); __v; })
|
|
|
|
+
|
|
|
|
+#define ioread16be(p) ({ unsigned int __v = be16_to_cpu((__force __be16)__raw_readw(p)); __iormb(); __v; })
|
|
|
|
+#define ioread32be(p) ({ unsigned int __v = be32_to_cpu((__force __be32)__raw_readl(p)); __iormb(); __v; })
|
|
|
|
+
|
|
|
|
+#define iowrite8(v,p) ({ __iowmb(); __raw_writeb(v, p); })
|
|
|
|
+#define iowrite16(v,p) ({ __iowmb(); __raw_writew((__force __u16)cpu_to_le16(v), p); })
|
|
|
|
+#define iowrite32(v,p) ({ __iowmb(); __raw_writel((__force __u32)cpu_to_le32(v), p); })
|
|
|
|
+
|
|
|
|
+#define iowrite16be(v,p) ({ __iowmb(); __raw_writew((__force __u16)cpu_to_be16(v), p); })
|
|
|
|
+#define iowrite32be(v,p) ({ __iowmb(); __raw_writel((__force __u32)cpu_to_be32(v), p); })
|
|
|
|
+
|
|
|
|
+#define ioread8_rep(p,d,c) __raw_readsb(p,d,c)
|
|
|
|
+#define ioread16_rep(p,d,c) __raw_readsw(p,d,c)
|
|
|
|
+#define ioread32_rep(p,d,c) __raw_readsl(p,d,c)
|
|
|
|
+
|
|
|
|
+#define iowrite8_rep(p,s,c) __raw_writesb(p,s,c)
|
|
|
|
+#define iowrite16_rep(p,s,c) __raw_writesw(p,s,c)
|
|
|
|
+#define iowrite32_rep(p,s,c) __raw_writesl(p,s,c)
|
|
|
|
+
|
|
|
|
+extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
|
|
|
|
+extern void ioport_unmap(void __iomem *addr);
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+struct pci_dev;
|
|
|
|
+
|
|
|
|
+extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * can the hardware map this into one segment or not, given no other
|
|
|
|
+ * constraints.
|
|
|
|
+ */
|
|
|
|
+#define BIOVEC_MERGEABLE(vec1, vec2) \
|
|
|
|
+ ((bvec_to_phys((vec1)) + (vec1)->bv_len) == bvec_to_phys((vec2)))
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_MMU
|
|
|
|
+#define ARCH_HAS_VALID_PHYS_ADDR_RANGE
|
|
|
|
+extern int valid_phys_addr_range(phys_addr_t addr, size_t size);
|
|
|
|
+extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size);
|
|
|
|
+extern int devmem_is_allowed(unsigned long pfn);
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Convert a physical pointer to a virtual kernel pointer for /dev/mem
|
|
|
|
+ * access
|
|
|
|
+ */
|
|
|
|
+#define xlate_dev_mem_ptr(p) __va(p)
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Convert a virtual cached pointer to an uncached pointer
|
|
|
|
+ */
|
|
|
|
+#define xlate_dev_kmem_ptr(p) p
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Register ISA memory and port locations for glibc iopl/inb/outb
|
|
|
|
+ * emulation.
|
|
|
|
+ */
|
|
|
|
+extern void register_isa_ports(unsigned int mmio, unsigned int io,
|
|
|
|
+ unsigned int io_shift);
|
|
|
|
+
|
|
|
|
+#endif /* __KERNEL__ */
|
|
|
|
+#endif /* __ASM_ARM_IO_H */
|