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