11162b070SVineet Gupta /* 21162b070SVineet Gupta * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 31162b070SVineet Gupta * 41162b070SVineet Gupta * This program is free software; you can redistribute it and/or modify 51162b070SVineet Gupta * it under the terms of the GNU General Public License version 2 as 61162b070SVineet Gupta * published by the Free Software Foundation. 71162b070SVineet Gupta */ 81162b070SVineet Gupta 91162b070SVineet Gupta #ifndef _ASM_ARC_IO_H 101162b070SVineet Gupta #define _ASM_ARC_IO_H 111162b070SVineet Gupta 121162b070SVineet Gupta #include <linux/types.h> 131162b070SVineet Gupta #include <asm/byteorder.h> 141162b070SVineet Gupta #include <asm/page.h> 151162b070SVineet Gupta 161162b070SVineet Gupta #define PCI_IOBASE ((void __iomem *)0) 171162b070SVineet Gupta 181162b070SVineet Gupta extern void __iomem *ioremap(unsigned long physaddr, unsigned long size); 19*4368902bSGilad Ben-Yossef extern void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size, 20*4368902bSGilad Ben-Yossef unsigned long flags); 211162b070SVineet Gupta extern void iounmap(const void __iomem *addr); 221162b070SVineet Gupta 231162b070SVineet Gupta #define ioremap_nocache(phy, sz) ioremap(phy, sz) 241162b070SVineet Gupta #define ioremap_wc(phy, sz) ioremap(phy, sz) 251162b070SVineet Gupta 261162b070SVineet Gupta /* Change struct page to physical address */ 271162b070SVineet Gupta #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) 281162b070SVineet Gupta 291162b070SVineet Gupta #define __raw_readb __raw_readb 301162b070SVineet Gupta static inline u8 __raw_readb(const volatile void __iomem *addr) 311162b070SVineet Gupta { 321162b070SVineet Gupta u8 b; 331162b070SVineet Gupta 341162b070SVineet Gupta __asm__ __volatile__( 351162b070SVineet Gupta " ldb%U1 %0, %1 \n" 361162b070SVineet Gupta : "=r" (b) 371162b070SVineet Gupta : "m" (*(volatile u8 __force *)addr) 381162b070SVineet Gupta : "memory"); 391162b070SVineet Gupta 401162b070SVineet Gupta return b; 411162b070SVineet Gupta } 421162b070SVineet Gupta 431162b070SVineet Gupta #define __raw_readw __raw_readw 441162b070SVineet Gupta static inline u16 __raw_readw(const volatile void __iomem *addr) 451162b070SVineet Gupta { 461162b070SVineet Gupta u16 s; 471162b070SVineet Gupta 481162b070SVineet Gupta __asm__ __volatile__( 491162b070SVineet Gupta " ldw%U1 %0, %1 \n" 501162b070SVineet Gupta : "=r" (s) 511162b070SVineet Gupta : "m" (*(volatile u16 __force *)addr) 521162b070SVineet Gupta : "memory"); 531162b070SVineet Gupta 541162b070SVineet Gupta return s; 551162b070SVineet Gupta } 561162b070SVineet Gupta 571162b070SVineet Gupta #define __raw_readl __raw_readl 581162b070SVineet Gupta static inline u32 __raw_readl(const volatile void __iomem *addr) 591162b070SVineet Gupta { 601162b070SVineet Gupta u32 w; 611162b070SVineet Gupta 621162b070SVineet Gupta __asm__ __volatile__( 631162b070SVineet Gupta " ld%U1 %0, %1 \n" 641162b070SVineet Gupta : "=r" (w) 651162b070SVineet Gupta : "m" (*(volatile u32 __force *)addr) 661162b070SVineet Gupta : "memory"); 671162b070SVineet Gupta 681162b070SVineet Gupta return w; 691162b070SVineet Gupta } 701162b070SVineet Gupta 711162b070SVineet Gupta #define __raw_writeb __raw_writeb 721162b070SVineet Gupta static inline void __raw_writeb(u8 b, volatile void __iomem *addr) 731162b070SVineet Gupta { 741162b070SVineet Gupta __asm__ __volatile__( 751162b070SVineet Gupta " stb%U1 %0, %1 \n" 761162b070SVineet Gupta : 771162b070SVineet Gupta : "r" (b), "m" (*(volatile u8 __force *)addr) 781162b070SVineet Gupta : "memory"); 791162b070SVineet Gupta } 801162b070SVineet Gupta 811162b070SVineet Gupta #define __raw_writew __raw_writew 821162b070SVineet Gupta static inline void __raw_writew(u16 s, volatile void __iomem *addr) 831162b070SVineet Gupta { 841162b070SVineet Gupta __asm__ __volatile__( 851162b070SVineet Gupta " stw%U1 %0, %1 \n" 861162b070SVineet Gupta : 871162b070SVineet Gupta : "r" (s), "m" (*(volatile u16 __force *)addr) 881162b070SVineet Gupta : "memory"); 891162b070SVineet Gupta 901162b070SVineet Gupta } 911162b070SVineet Gupta 921162b070SVineet Gupta #define __raw_writel __raw_writel 931162b070SVineet Gupta static inline void __raw_writel(u32 w, volatile void __iomem *addr) 941162b070SVineet Gupta { 951162b070SVineet Gupta __asm__ __volatile__( 961162b070SVineet Gupta " st%U1 %0, %1 \n" 971162b070SVineet Gupta : 981162b070SVineet Gupta : "r" (w), "m" (*(volatile u32 __force *)addr) 991162b070SVineet Gupta : "memory"); 1001162b070SVineet Gupta 1011162b070SVineet Gupta } 1021162b070SVineet Gupta 1031162b070SVineet Gupta #include <asm-generic/io.h> 1041162b070SVineet Gupta 1051162b070SVineet Gupta #endif /* _ASM_ARC_IO_H */ 106