Merge tag 'arc-3.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc
[sfrench/cifs-2.6.git] / arch / arc / include / asm / io.h
1 /*
2  * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8
9 #ifndef _ASM_ARC_IO_H
10 #define _ASM_ARC_IO_H
11
12 #include <linux/types.h>
13 #include <asm/byteorder.h>
14 #include <asm/page.h>
15
16 #define PCI_IOBASE ((void __iomem *)0)
17
18 extern void __iomem *ioremap(unsigned long physaddr, unsigned long size);
19 extern void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,
20                                   unsigned long flags);
21 extern void iounmap(const void __iomem *addr);
22
23 #define ioremap_nocache(phy, sz)        ioremap(phy, sz)
24 #define ioremap_wc(phy, sz)             ioremap(phy, sz)
25
26 /* Change struct page to physical address */
27 #define page_to_phys(page)              (page_to_pfn(page) << PAGE_SHIFT)
28
29 #define __raw_readb __raw_readb
30 static inline u8 __raw_readb(const volatile void __iomem *addr)
31 {
32         u8 b;
33
34         __asm__ __volatile__(
35         "       ldb%U1 %0, %1   \n"
36         : "=r" (b)
37         : "m" (*(volatile u8 __force *)addr)
38         : "memory");
39
40         return b;
41 }
42
43 #define __raw_readw __raw_readw
44 static inline u16 __raw_readw(const volatile void __iomem *addr)
45 {
46         u16 s;
47
48         __asm__ __volatile__(
49         "       ldw%U1 %0, %1   \n"
50         : "=r" (s)
51         : "m" (*(volatile u16 __force *)addr)
52         : "memory");
53
54         return s;
55 }
56
57 #define __raw_readl __raw_readl
58 static inline u32 __raw_readl(const volatile void __iomem *addr)
59 {
60         u32 w;
61
62         __asm__ __volatile__(
63         "       ld%U1 %0, %1    \n"
64         : "=r" (w)
65         : "m" (*(volatile u32 __force *)addr)
66         : "memory");
67
68         return w;
69 }
70
71 #define __raw_writeb __raw_writeb
72 static inline void __raw_writeb(u8 b, volatile void __iomem *addr)
73 {
74         __asm__ __volatile__(
75         "       stb%U1 %0, %1   \n"
76         :
77         : "r" (b), "m" (*(volatile u8 __force *)addr)
78         : "memory");
79 }
80
81 #define __raw_writew __raw_writew
82 static inline void __raw_writew(u16 s, volatile void __iomem *addr)
83 {
84         __asm__ __volatile__(
85         "       stw%U1 %0, %1   \n"
86         :
87         : "r" (s), "m" (*(volatile u16 __force *)addr)
88         : "memory");
89
90 }
91
92 #define __raw_writel __raw_writel
93 static inline void __raw_writel(u32 w, volatile void __iomem *addr)
94 {
95         __asm__ __volatile__(
96         "       st%U1 %0, %1    \n"
97         :
98         : "r" (w), "m" (*(volatile u32 __force *)addr)
99         : "memory");
100
101 }
102
103 #define readb_relaxed readb
104 #define readw_relaxed readw
105 #define readl_relaxed readl
106
107 #include <asm-generic/io.h>
108
109 #endif /* _ASM_ARC_IO_H */