11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ASM_M32R_IO_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ASM_M32R_IO_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/string.h>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/compiler.h>
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/page.h>  /* __va */
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __KERNEL__
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_SPACE_LIMIT  0xFFFFFFFF
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	virt_to_phys	-	map virtual addresses to physical
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	@address: address to remap
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	The returned physical address is the physical (CPU) mapping for
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	the memory address given. It is only valid to use this function on
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	addresses directly mapped or allocated via kmalloc.
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	This function does not give bus mappings for DMA transfers. In
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	almost all conceivable cases a device driver should not be using
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	this function
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned long virt_to_phys(volatile void * address)
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return __pa(address);
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	phys_to_virt	-	map physical address to virtual
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	@address: address to remap
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	The returned virtual address is a current CPU mapping for
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	the memory address given. It is only valid to use this function on
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	addresses that have a kernel mapping
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	This function does not handle bus mappings for DMA transfers. In
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	almost all conceivable cases a device driver should not be using
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	this function
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void *phys_to_virt(unsigned long address)
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return __va(address);
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void __iomem *
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds__ioremap(unsigned long offset, unsigned long size, unsigned long flags);
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	ioremap		-	map bus memory into CPU space
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	@offset:	bus address of the memory
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	@size:		size of the resource to map
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	ioremap performs a platform specific sequence of operations to
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	make bus memory CPU accessible via the readb/readw/readl/writeb/
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	writew/writel functions and the other mmio helpers. The returned
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	address is not guaranteed to be usable directly as a virtual
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *	address.
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6324558a0f7a00fccd19a6e6502956463f056ce90eAl Virostatic inline void __iomem *ioremap(unsigned long offset, unsigned long size)
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return __ioremap(offset, size, 0);
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void iounmap(volatile void __iomem *addr);
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ioremap_nocache(off,size) ioremap(off,size)
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IO bus memory addresses are also 1:1 with the physical address
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define page_to_bus	page_to_phys
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define virt_to_bus	virt_to_phys
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned char _inb(unsigned long);
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned short _inw(unsigned long);
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned long _inl(unsigned long);
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned char _inb_p(unsigned long);
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned short _inw_p(unsigned long);
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned long _inl_p(unsigned long);
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outb(unsigned char, unsigned long);
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outw(unsigned short, unsigned long);
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outl(unsigned long, unsigned long);
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outb_p(unsigned char, unsigned long);
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outw_p(unsigned short, unsigned long);
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outl_p(unsigned long, unsigned long);
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _insb(unsigned int, void *, unsigned long);
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _insw(unsigned int, void *, unsigned long);
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _insl(unsigned int, void *, unsigned long);
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outsb(unsigned int, const void *, unsigned long);
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outsw(unsigned int, const void *, unsigned long);
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void _outsl(unsigned int, const void *, unsigned long);
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned char _readb(unsigned long addr)
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return *(volatile unsigned char __force *)addr;
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned short _readw(unsigned long addr)
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return *(volatile unsigned short __force *)addr;
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned long _readl(unsigned long addr)
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return *(volatile unsigned long __force *)addr;
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void _writeb(unsigned char b, unsigned long addr)
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	*(volatile unsigned char __force *)addr = b;
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void _writew(unsigned short w, unsigned long addr)
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	*(volatile unsigned short __force *)addr = w;
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void _writel(unsigned long l, unsigned long addr)
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	*(volatile unsigned long __force *)addr = l;
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inb     _inb
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inw     _inw
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inl     _inl
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outb    _outb
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outw    _outw
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outl    _outl
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inb_p   _inb_p
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inw_p   _inw_p
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define inl_p   _inl_p
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outb_p  _outb_p
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outw_p  _outw_p
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outl_p  _outl_p
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define insb    _insb
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define insw    _insw
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define insl    _insl
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outsb   _outsb
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outsw   _outsw
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define outsl   _outsl
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readb(addr)   _readb((unsigned long)(addr))
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readw(addr)   _readw((unsigned long)(addr))
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readl(addr)   _readl((unsigned long)(addr))
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_readb readb
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_readw readw
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_readl readl
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readb_relaxed readb
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readw_relaxed readw
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define readl_relaxed readl
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define writeb(val, addr)  _writeb((val), (unsigned long)(addr))
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define writew(val, addr)  _writew((val), (unsigned long)(addr))
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define writel(val, addr)  _writel((val), (unsigned long)(addr))
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_writeb writeb
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_writew writew
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __raw_writel writel
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
165d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define ioread8 read
166d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define ioread16 readw
167d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define ioread32 readl
168d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define iowrite8 writeb
169d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define iowrite16 writew
170d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata#define iowrite32 writel
171d2c5821c5de08175096f17166984d5e738cad024Hirokazu Takata
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define mmiowb()
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define flush_write_buffers() do { } while (0)  /* M32R_FIXME */
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmemset_io(volatile void __iomem *addr, unsigned char val, int count)
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	memset((void __force *) addr, val, count);
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmemcpy_fromio(void *dst, volatile void __iomem *src, int count)
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	memcpy(dst, (void __force *) src, count);
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmemcpy_toio(volatile void __iomem *dst, const void *src, int count)
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	memcpy((void __force *) dst, src, count);
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Convert a physical pointer to a virtual kernel pointer for /dev/mem
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * access
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define xlate_dev_mem_ptr(p)	__va(p)
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Convert a virtual cached pointer to an uncached pointer
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define xlate_dev_kmem_ptr(p)	p
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif  /* __KERNEL__ */
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif  /* _ASM_M32R_IO_H */
208