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