Commit | Line | Data |
---|---|---|
0c176fa8 MG |
1 | #ifndef _IO_H |
2 | #define __IO_H | |
3 | /* | |
4 | * Low-level I/O routines. | |
5 | * | |
6 | * Copied from <file:include/asm-powerpc/io.h> (which has no copyright) | |
7 | */ | |
8 | static inline int in_8(const volatile unsigned char *addr) | |
9 | { | |
10 | int ret; | |
11 | ||
12 | __asm__ __volatile__("lbz%U1%X1 %0,%1; twi 0,%0,0; isync" | |
13 | : "=r" (ret) : "m" (*addr)); | |
14 | return ret; | |
15 | } | |
16 | ||
17 | static inline void out_8(volatile unsigned char *addr, int val) | |
18 | { | |
19 | __asm__ __volatile__("stb%U0%X0 %1,%0; sync" | |
20 | : "=m" (*addr) : "r" (val)); | |
21 | } | |
22 | ||
23 | static inline unsigned in_le32(const volatile unsigned *addr) | |
24 | { | |
25 | unsigned ret; | |
26 | ||
27 | __asm__ __volatile__("lwbrx %0,0,%1; twi 0,%0,0; isync" | |
28 | : "=r" (ret) : "r" (addr), "m" (*addr)); | |
29 | return ret; | |
30 | } | |
31 | ||
32 | static inline unsigned in_be32(const volatile unsigned *addr) | |
33 | { | |
34 | unsigned ret; | |
35 | ||
36 | __asm__ __volatile__("lwz%U1%X1 %0,%1; twi 0,%0,0; isync" | |
37 | : "=r" (ret) : "m" (*addr)); | |
38 | return ret; | |
39 | } | |
40 | ||
41 | static inline void out_le32(volatile unsigned *addr, int val) | |
42 | { | |
43 | __asm__ __volatile__("stwbrx %1,0,%2; sync" : "=m" (*addr) | |
44 | : "r" (val), "r" (addr)); | |
45 | } | |
46 | ||
47 | static inline void out_be32(volatile unsigned *addr, int val) | |
48 | { | |
49 | __asm__ __volatile__("stw%U0%X0 %1,%0; sync" | |
50 | : "=m" (*addr) : "r" (val)); | |
51 | } | |
52 | ||
53 | #endif /* _IO_H */ |