[PATCH 34/56] microblaze_v2: io.h IO operations

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: monstr
Date: Sunday, May 4, 2008 - 4:41 am

From: Michal Simek <monstr@monstr.eu>


Signed-off-by: Michal Simek <monstr@monstr.eu>
---
 include/asm-microblaze/io.h |  210 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 210 insertions(+), 0 deletions(-)
 create mode 100644 include/asm-microblaze/io.h

diff --git a/include/asm-microblaze/io.h b/include/asm-microblaze/io.h
new file mode 100644
index 0000000..d2c492f
--- /dev/null
+++ b/include/asm-microblaze/io.h
@@ -0,0 +1,210 @@
+/*
+ * include/asm-microblaze/io.h
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2006 Atmark Techno, Inc.
+ */
+
+#ifndef _ASM_MICROBLAZE_IO_H
+#define _ASM_MICROBLAZE_IO_H
+
+#include <asm/byteorder.h>
+#include <asm/page.h>
+
+static inline unsigned char __raw_readb(const volatile void *addr)
+{
+	return *(volatile unsigned char __force *)addr;
+}
+static inline unsigned short __raw_readw(const volatile void *addr)
+{
+	return *(volatile unsigned short __force *)addr;
+}
+static inline unsigned int __raw_readl(const volatile void *addr)
+{
+	return *(volatile unsigned int __force *)addr;
+}
+static inline unsigned long __raw_readq(const volatile void *addr)
+{
+	return *(volatile unsigned long __force *)addr;
+}
+static inline void __raw_writeb(unsigned char v, volatile void *addr)
+{
+	*(volatile unsigned char __force *)addr = v;
+}
+static inline void __raw_writew(unsigned short v, volatile void *addr)
+{
+	*(volatile unsigned short __force *)addr = v;
+}
+static inline void __raw_writel(unsigned int v, volatile void *addr)
+{
+	*(volatile unsigned int __force *)addr = v;
+}
+static inline void __raw_writeq(unsigned long v, volatile void *addr)
+{
+	*(volatile unsigned long __force *)addr = v;
+}
+
+/*
+ * read (readb, readw, readl, readq) and write (writeb, writew,
+ * writel, writeq) accessors are for PCI and thus littel endian.
+ * Linux 2.4 for Microblaze had this wrong.
+ */
+static inline unsigned char readb(const volatile void *addr)
+{
+	return *(volatile unsigned char __force *)addr;
+}
+static inline unsigned short readw(const volatile void *addr)
+{
+	return le16_to_cpu(*(volatile unsigned short __force *)addr);
+}
+static inline unsigned int readl(const volatile void *addr)
+{
+	return le32_to_cpu(*(volatile unsigned int __force *)addr);
+}
+static inline void writeb(unsigned char v, volatile void *addr)
+{
+	*(volatile unsigned char __force *)addr = v;
+}
+static inline void writew(unsigned short v, volatile void *addr)
+{
+	*(volatile unsigned short __force *)addr = cpu_to_le16(v);
+}
+static inline void writel(unsigned int v, volatile void __iomem *addr)
+{
+	*(volatile unsigned int __force *)addr = cpu_to_le32(v);
+}
+
+/* ioread and iowrite variants. thease are for now same as __raw_
+ * variants of accessors. we might check for endianess in the feature
+ */
+#define ioread8(addr)		__raw_readb((u8 *)(addr))
+#define ioread16(addr)		__raw_readw((u16 *)(addr))
+#define ioread32(addr)		__raw_readl((u32 *)(addr))
+#define iowrite8(v, addr)	__raw_writeb((u8)(v), (u8 *)(addr))
+#define iowrite16(v, addr)	__raw_writew((u16)(v), (u16 *)(addr))
+#define iowrite32(v, addr)	__raw_writel((u32)(v), (u32 *)(addr))
+
+/* These are the definitions for the x86 IO instructions
+ * inb/inw/inl/outb/outw/outl, the "string" versions
+ * insb/insw/insl/outsb/outsw/outsl, and the "pausing" versions
+ * inb_p/inw_p/...
+ * The macros don't do byte-swapping.
+ */
+#define inb(port)		readb((u8 *)((port)))
+#define outb(val, port)		writeb((val), (u8 *)((unsigned long)(port)))
+#define inw(port)		readw((u16 *)((port)))
+#define outw(val, port)		writew((val), (u16 *)((unsigned long)(port)))
+#define inl(port)		readl((u32 *)((port)))
+#define outl(val, port)		writel((val), (u32 *)((unsigned long)(port)))
+
+#define inb_p(port)		inb((port))
+#define outb_p(val, port)	outb((val), (port))
+#define inw_p(port)		inw((port))
+#define outw_p(val, port)	outw((val), (port))
+#define inl_p(port)		inl((port))
+#define outl_p(val, port)	outl((val), (port))
+
+#define memset_io(a, b, c)	memset((void *)(a), (b), (c))
+#define memcpy_fromio(a, b, c)	memcpy((a), (void *)(b), (c))
+#define memcpy_toio(a, b, c)	memcpy((void *)(a), (b), (c))
+
+/**
+ *	virt_to_phys	-	map virtual addresses to physical
+ *	@address: address to remap
+ *
+ *	The returned physical address is the physical (CPU) mapping for
+ *	the memory address given. It is only valid to use this function on
+ *	addresses directly mapped or allocated via kmalloc.
+ *
+ *	This function does not give bus mappings for DMA transfers. In
+ *	almost all conceivable cases a device driver should not be using
+ *	this function
+ */
+static inline unsigned long __iomem virt_to_phys(volatile void *address)
+{
+	return __pa((unsigned long)address);
+}
+
+#define virt_to_bus virt_to_phys
+
+/**
+ *	phys_to_virt	-	map physical address to virtual
+ *	@address: address to remap
+ *
+ *	The returned virtual address is a current CPU mapping for
+ *	the memory address given. It is only valid to use this function on
+ *	addresses that have a kernel mapping
+ *
+ *	This function does not handle bus mappings for DMA transfers. In
+ *	almost all conceivable cases a device driver should not be using
+ *	this function
+ */
+static inline void *phys_to_virt(unsigned long address)
+{
+	return (void *)__va(address);
+}
+
+#define bus_to_virt(a) phys_to_virt(a)
+
+static inline void *__ioremap(unsigned long address, unsigned long size,
+			unsigned long flags)
+{
+	return (void *)address;
+}
+
+
+#define IO_SPACE_LIMIT ~(0UL)
+
+#define ioremap(physaddr, size)	((void *)(unsigned long)(physaddr))
+#define iounmap(addr)		((void)0)
+#define ioremap_nocache(physaddr, size)	ioremap(physaddr, size)
+
+/*
+ * 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
+
+/*
+ * Big Endian
+ */
+#define out_be32(a, v) __raw_writel((v), (a))
+#define out_be16(a, v) __raw_writew((v), (a))
+
+#define in_be32(a) __raw_readl(a)
+#define in_be16(a) __raw_readw(a)
+
+/*
+ * Little endian
+ */
+
+#define out_le32(a, v) __raw_writel(__cpu_to_le32(v), (a));
+#define out_le16(a, v) __raw_writew(__cpu_to_le16(v), (a))
+
+#define in_le32(a) __le32_to_cpu(__raw_readl(a))
+#define in_le16(a) __le16_to_cpu(__raw_readw(a))
+
+/* Byte ops */
+#define out_8(a, v) __raw_writeb((v), (a))
+#define in_8(a) __raw_readb(a)
+
+/* FIXME */
+static inline void __iomem *ioport_map(unsigned long port, unsigned int len)
+{
+	return (void __iomem *) (port);
+}
+
+static inline void ioport_unmap(void __iomem *addr)
+{
+	/* Nothing to do */
+}
+
+#endif /* _ASM_MICROBLAZE_IO_H */
-- 
1.5.4.GIT

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Microblaze patches V2, monstr, (Sun May 4, 4:40 am)
[PATCH 01/56] microblaze_v2: Kconfig patches, monstr, (Sun May 4, 4:40 am)
[PATCH 03/56] microblaze_v2: Cpuinfo handling, monstr, (Sun May 4, 4:40 am)
[PATCH 07/56] microblaze_v2: Signal support, monstr, (Sun May 4, 4:40 am)
[PATCH 09/56] microblaze_v2: cache support, monstr, (Sun May 4, 4:40 am)
[PATCH 12/56] microblaze_v2: lmb support, monstr, (Sun May 4, 4:41 am)
[PATCH 14/56] microblaze_v2: defconfig file, monstr, (Sun May 4, 4:41 am)
[PATCH 17/56] microblaze_v2: checksum support, monstr, (Sun May 4, 4:41 am)
[PATCH 19/56] microblaze_v2: uaccess files, monstr, (Sun May 4, 4:41 am)
[PATCH 20/56] microblaze_v2: heartbeat file, monstr, (Sun May 4, 4:41 am)
[PATCH 22/56] microblaze_v2: asm-offsets, monstr, (Sun May 4, 4:41 am)
[PATCH 24/56] microblaze_v2: time support, monstr, (Sun May 4, 4:41 am)
[PATCH 25/56] microblaze_v2: ptrace support, monstr, (Sun May 4, 4:41 am)
[PATCH 26/56] microblaze_v2: traps support, monstr, (Sun May 4, 4:41 am)
[PATCH 33/56] microblaze_v2: ioctl support, monstr, (Sun May 4, 4:41 am)
[PATCH 34/56] microblaze_v2: io.h IO operations, monstr, (Sun May 4, 4:41 am)
[PATCH 36/56] microblaze_v2: dma support, monstr, (Sun May 4, 4:41 am)
[PATCH 37/56] microblaze_v2: headers for irq, monstr, (Sun May 4, 4:41 am)
[PATCH 42/56] microblaze_v2: stats headers, monstr, (Sun May 4, 4:41 am)
[PATCH 48/56] microblaze_v2: pool.h socket.h, monstr, (Sun May 4, 4:41 am)
[PATCH 51/56] microblaze_v2: Kbuild file, monstr, (Sun May 4, 4:41 am)
[PATCH 52/56] microblaze_v2: pci headers, monstr, (Sun May 4, 4:41 am)
[PATCH 53/56] microblaze_v2: IPC headers, monstr, (Sun May 4, 4:41 am)
[PATCH 54/56] microblaze_v2: entry.S, monstr, (Sun May 4, 4:41 am)
[PATCH 55/56] microblaze_v2: sys_microblaze.c, monstr, (Sun May 4, 4:41 am)
Re: [PATCH 07/56] microblaze_v2: Signal support, Arnd Bergmann, (Sun May 4, 12:52 pm)
Re: [PATCH 17/56] microblaze_v2: checksum support, Arnd Bergmann, (Sun May 4, 12:59 pm)
Re: [PATCH 30/56] microblaze_v2: includes SHM*, msgbuf, Arnd Bergmann, (Sun May 4, 2:10 pm)
Re: [PATCH 01/56] microblaze_v2: Kconfig patches, Grant Likely, (Sun May 4, 2:24 pm)
Re: [PATCH 32/56] microblaze_v2: definitions of types, Arnd Bergmann, (Sun May 4, 2:28 pm)
Re: [PATCH 33/56] microblaze_v2: ioctl support, Arnd Bergmann, (Sun May 4, 2:34 pm)
Re: [PATCH 42/56] microblaze_v2: stats headers, Arnd Bergmann, (Sun May 4, 3:31 pm)
Re: [PATCH 48/56] microblaze_v2: pool.h socket.h, Arnd Bergmann, (Sun May 4, 3:39 pm)
Re: [PATCH 52/56] microblaze_v2: pci headers, Arnd Bergmann, (Sun May 4, 3:45 pm)
Re: [PATCH 01/56] microblaze_v2: Kconfig patches, John Williams, (Sun May 4, 6:42 pm)
Re: [PATCH 03/56] microblaze_v2: Cpuinfo handling, John Williams, (Sun May 4, 6:52 pm)
Re: [PATCH 09/56] microblaze_v2: cache support, John Williams, (Sun May 4, 7:09 pm)
Re: [PATCH 12/56] microblaze_v2: lmb support, John Williams, (Sun May 4, 7:11 pm)
Re: [PATCH 24/56] microblaze_v2: time support, John Williams, (Sun May 4, 7:19 pm)
Re: [PATCH 36/56] microblaze_v2: dma support, John Williams, (Sun May 4, 7:25 pm)
Re: Microblaze patches V2, John Williams, (Sun May 4, 7:30 pm)
Re: [PATCH 01/56] microblaze_v2: Kconfig patches, Michal Simek, (Sun May 4, 11:36 pm)
Re: [PATCH 36/56] microblaze_v2: dma support, Geert Uytterhoeven, (Sun May 4, 11:45 pm)
Re: [PATCH 01/56] microblaze_v2: Kconfig patches, Michal Simek, (Sun May 4, 11:46 pm)
Re: Microblaze patches V2, Michal Simek, (Mon May 5, 12:02 am)
Re: [PATCH 43/56] microblaze_v2: termbits.h termios.h, Arnd Bergmann, (Mon May 5, 2:50 am)
Re: [PATCH 17/56] microblaze_v2: checksum support, Michal Simek, (Mon May 5, 7:05 am)
Re: [PATCH 33/56] microblaze_v2: ioctl support, Michal Simek, (Mon May 5, 7:06 am)
Re: [PATCH 52/56] microblaze_v2: pci headers, Michal Simek, (Mon May 5, 7:08 am)
Re: [PATCH 01/56] microblaze_v2: Kconfig patches, Michal Simek, (Mon May 5, 7:16 am)
Re: [PATCH 03/56] microblaze_v2: Cpuinfo handling, Michal Simek, (Mon May 5, 7:19 am)
Re: [PATCH 24/56] microblaze_v2: time support, Michal Simek, (Mon May 5, 7:22 am)
Re: [PATCH 04/56] microblaze_v2: Open firmware files, Grant Likely, (Mon May 5, 7:24 am)
Re: [PATCH 18/56] microblaze_v2: early_printk support, Grant Likely, (Mon May 5, 7:36 am)
RE: [PATCH 10/56] microblaze_v2: Generic dts file for plat ..., Stephen Neuendorffer, (Mon May 5, 10:25 am)
RE: [microblaze-uclinux] [PATCH 09/56] microblaze_v2: cach ..., Stephen Neuendorffer, (Mon May 5, 10:37 am)
Re: [PATCH 18/56] microblaze_v2: early_printk support, Michal Simek, (Mon May 5, 1:10 pm)
Re: [PATCH 12/56] microblaze_v2: lmb support, Segher Boessenkool, (Mon May 5, 2:32 pm)
RE: [PATCH 07/56] microblaze_v2: Signal support, Stephen Neuendorffer, (Mon May 5, 2:32 pm)
RE: [PATCH 04/56] microblaze_v2: Open firmware files, Stephen Neuendorffer, (Mon May 5, 2:56 pm)
RE: [PATCH 09/56] microblaze_v2: cache support, Stephen Neuendorffer, (Mon May 5, 3:37 pm)
Re: [PATCH 18/56] microblaze_v2: early_printk support, John Williams, (Mon May 5, 4:22 pm)
RE: [PATCH 10/56] microblaze_v2: Generic dts file for plat ..., Stephen Neuendorffer, (Mon May 5, 4:32 pm)
RE: [PATCH 07/56] microblaze_v2: Signal support, John Williams, (Mon May 5, 4:33 pm)
RE: [PATCH 07/56] microblaze_v2: Signal support, Stephen Neuendorffer, (Mon May 5, 5:13 pm)
RE: [PATCH 10/56] microblaze_v2: Generic dts file for plat ..., Stephen Neuendorffer, (Mon May 5, 5:17 pm)
RE: [PATCH 07/56] microblaze_v2: Signal support, John Williams, (Mon May 5, 5:25 pm)
Re: [PATCH 24/56] microblaze_v2: time support, John Williams, (Mon May 5, 5:30 pm)
RE: [PATCH 07/56] microblaze_v2: Signal support, Stephen Neuendorffer, (Mon May 5, 5:33 pm)
Re: [PATCH 04/56] microblaze_v2: Open firmware files, Michal Simek, (Tue May 6, 12:27 am)
Re: [PATCH 18/56] microblaze_v2: early_printk support, Michal Simek, (Tue May 6, 1:14 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Michal Simek, (Tue May 6, 2:16 am)
Re: [PATCH 07/56] microblaze_v2: Signal support, Michal Simek, (Tue May 6, 2:41 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Geert Uytterhoeven, (Tue May 6, 2:48 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Michal Simek, (Tue May 6, 2:53 am)
Re: [PATCH 24/56] microblaze_v2: time support, Michal Simek, (Tue May 6, 2:56 am)
Re: [PATCH 24/56] microblaze_v2: time support, Michal Simek, (Tue May 6, 3:02 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Geert Uytterhoeven, (Tue May 6, 4:17 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Arnd Bergmann, (Tue May 6, 4:24 am)
Re: [PATCH 24/56] microblaze_v2: time support, Arnd Bergmann, (Tue May 6, 4:38 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Michal Simek, (Tue May 6, 6:20 am)
Re: [PATCH 24/56] microblaze_v2: time support, Michal Simek, (Tue May 6, 6:26 am)
Re: [PATCH 24/56] microblaze_v2: time support, Grant Likely, (Tue May 6, 7:28 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Arnd Bergmann, (Tue May 6, 8:36 am)
RE: [PATCH 24/56] microblaze_v2: time support, Stephen Neuendorffer, (Tue May 6, 9:36 am)
Re: [PATCH 46/56] microblaze_v2: headers files entry.h cur ..., Geert Uytterhoeven, (Tue May 6, 1:57 pm)
Re: [PATCH 24/56] microblaze_v2: time support, John Williams, (Tue May 6, 3:50 pm)
Re: [PATCH 36/56] microblaze_v2: dma support, Michal Simek, (Tue May 6, 11:24 pm)
Re: [PATCH 36/56] microblaze_v2: dma support, Geert Uytterhoeven, (Wed May 7, 12:17 am)
Re: [PATCH 24/56] microblaze_v2: time support, Thomas Gleixner, (Wed May 7, 12:22 am)
Re: [PATCH 37/56] microblaze_v2: headers for irq, Thomas Gleixner, (Wed May 7, 12:26 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Arnd Bergmann, (Wed May 7, 2:21 am)
RE: [microblaze-uclinux] [PATCH 04/56] microblaze_v2: Open ..., Stephen Neuendorffer, (Wed May 7, 9:04 am)
Re: [PATCH 36/56] microblaze_v2: dma support, Michal Simek, (Wed May 7, 11:43 am)
RE: [microblaze-uclinux] [PATCH 04/56] microblaze_v2: Open ..., Stephen Neuendorffer, (Wed May 7, 1:14 pm)
Re: [PATCH 37/56] microblaze_v2: headers for irq, Michal Simek, (Sun May 11, 6:56 am)