diff options
Diffstat (limited to 'arch/blackfin/include')
-rw-r--r-- | arch/blackfin/include/asm/io.h | 95 |
1 files changed, 51 insertions, 44 deletions
diff --git a/arch/blackfin/include/asm/io.h b/arch/blackfin/include/asm/io.h index d1f5029189a7..29e55b9d88bc 100644 --- a/arch/blackfin/include/asm/io.h +++ b/arch/blackfin/include/asm/io.h | |||
@@ -31,12 +31,14 @@ static inline unsigned char readb(const volatile void __iomem *addr) | |||
31 | unsigned int val; | 31 | unsigned int val; |
32 | int tmp; | 32 | int tmp; |
33 | 33 | ||
34 | __asm__ __volatile__ ("cli %1;\n\t" | 34 | __asm__ __volatile__ ( |
35 | "NOP; NOP; SSYNC;\n\t" | 35 | "cli %1;" |
36 | "%0 = b [%2] (z);\n\t" | 36 | "NOP; NOP; SSYNC;" |
37 | "sti %1;\n\t" | 37 | "%0 = b [%2] (z);" |
38 | : "=d"(val), "=d"(tmp): "a"(addr) | 38 | "sti %1;" |
39 | ); | 39 | : "=d"(val), "=d"(tmp) |
40 | : "a"(addr) | ||
41 | ); | ||
40 | 42 | ||
41 | return (unsigned char) val; | 43 | return (unsigned char) val; |
42 | } | 44 | } |
@@ -46,12 +48,14 @@ static inline unsigned short readw(const volatile void __iomem *addr) | |||
46 | unsigned int val; | 48 | unsigned int val; |
47 | int tmp; | 49 | int tmp; |
48 | 50 | ||
49 | __asm__ __volatile__ ("cli %1;\n\t" | 51 | __asm__ __volatile__ ( |
50 | "NOP; NOP; SSYNC;\n\t" | 52 | "cli %1;" |
51 | "%0 = w [%2] (z);\n\t" | 53 | "NOP; NOP; SSYNC;" |
52 | "sti %1;\n\t" | 54 | "%0 = w [%2] (z);" |
53 | : "=d"(val), "=d"(tmp): "a"(addr) | 55 | "sti %1;" |
54 | ); | 56 | : "=d"(val), "=d"(tmp) |
57 | : "a"(addr) | ||
58 | ); | ||
55 | 59 | ||
56 | return (unsigned short) val; | 60 | return (unsigned short) val; |
57 | } | 61 | } |
@@ -61,20 +65,23 @@ static inline unsigned int readl(const volatile void __iomem *addr) | |||
61 | unsigned int val; | 65 | unsigned int val; |
62 | int tmp; | 66 | int tmp; |
63 | 67 | ||
64 | __asm__ __volatile__ ("cli %1;\n\t" | 68 | __asm__ __volatile__ ( |
65 | "NOP; NOP; SSYNC;\n\t" | 69 | "cli %1;" |
66 | "%0 = [%2];\n\t" | 70 | "NOP; NOP; SSYNC;" |
67 | "sti %1;\n\t" | 71 | "%0 = [%2];" |
68 | : "=d"(val), "=d"(tmp): "a"(addr) | 72 | "sti %1;" |
69 | ); | 73 | : "=d"(val), "=d"(tmp) |
74 | : "a"(addr) | ||
75 | ); | ||
76 | |||
70 | return val; | 77 | return val; |
71 | } | 78 | } |
72 | 79 | ||
73 | #endif /* __ASSEMBLY__ */ | 80 | #endif /* __ASSEMBLY__ */ |
74 | 81 | ||
75 | #define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b)) | 82 | #define writeb(b, addr) (void)((*(volatile unsigned char *) (addr)) = (b)) |
76 | #define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b)) | 83 | #define writew(b, addr) (void)((*(volatile unsigned short *) (addr)) = (b)) |
77 | #define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) | 84 | #define writel(b, addr) (void)((*(volatile unsigned int *) (addr)) = (b)) |
78 | 85 | ||
79 | #define __raw_readb readb | 86 | #define __raw_readb readb |
80 | #define __raw_readw readw | 87 | #define __raw_readw readw |
@@ -82,9 +89,9 @@ static inline unsigned int readl(const volatile void __iomem *addr) | |||
82 | #define __raw_writeb writeb | 89 | #define __raw_writeb writeb |
83 | #define __raw_writew writew | 90 | #define __raw_writew writew |
84 | #define __raw_writel writel | 91 | #define __raw_writel writel |
85 | #define memset_io(a,b,c) memset((void *)(a),(b),(c)) | 92 | #define memset_io(a, b, c) memset((void *)(a), (b), (c)) |
86 | #define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c)) | 93 | #define memcpy_fromio(a, b, c) memcpy((a), (void *)(b), (c)) |
87 | #define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c)) | 94 | #define memcpy_toio(a, b, c) memcpy((void *)(a), (b), (c)) |
88 | 95 | ||
89 | /* Convert "I/O port addresses" to actual addresses. i.e. ugly casts. */ | 96 | /* Convert "I/O port addresses" to actual addresses. i.e. ugly casts. */ |
90 | #define __io(port) ((void *)(unsigned long)(port)) | 97 | #define __io(port) ((void *)(unsigned long)(port)) |
@@ -92,30 +99,30 @@ static inline unsigned int readl(const volatile void __iomem *addr) | |||
92 | #define inb(port) readb(__io(port)) | 99 | #define inb(port) readb(__io(port)) |
93 | #define inw(port) readw(__io(port)) | 100 | #define inw(port) readw(__io(port)) |
94 | #define inl(port) readl(__io(port)) | 101 | #define inl(port) readl(__io(port)) |
95 | #define outb(x,port) writeb(x,__io(port)) | 102 | #define outb(x, port) writeb(x, __io(port)) |
96 | #define outw(x,port) writew(x,__io(port)) | 103 | #define outw(x, port) writew(x, __io(port)) |
97 | #define outl(x,port) writel(x,__io(port)) | 104 | #define outl(x, port) writel(x, __io(port)) |
98 | 105 | ||
99 | #define inb_p(port) inb(__io(port)) | 106 | #define inb_p(port) inb(__io(port)) |
100 | #define inw_p(port) inw(__io(port)) | 107 | #define inw_p(port) inw(__io(port)) |
101 | #define inl_p(port) inl(__io(port)) | 108 | #define inl_p(port) inl(__io(port)) |
102 | #define outb_p(x,port) outb(x,__io(port)) | 109 | #define outb_p(x, port) outb(x, __io(port)) |
103 | #define outw_p(x,port) outw(x,__io(port)) | 110 | #define outw_p(x, port) outw(x, __io(port)) |
104 | #define outl_p(x,port) outl(x,__io(port)) | 111 | #define outl_p(x, port) outl(x, __io(port)) |
105 | 112 | ||
106 | #define ioread8_rep(a,d,c) readsb(a,d,c) | 113 | #define ioread8_rep(a, d, c) readsb(a, d, c) |
107 | #define ioread16_rep(a,d,c) readsw(a,d,c) | 114 | #define ioread16_rep(a, d, c) readsw(a, d, c) |
108 | #define ioread32_rep(a,d,c) readsl(a,d,c) | 115 | #define ioread32_rep(a, d, c) readsl(a, d, c) |
109 | #define iowrite8_rep(a,s,c) writesb(a,s,c) | 116 | #define iowrite8_rep(a, s, c) writesb(a, s, c) |
110 | #define iowrite16_rep(a,s,c) writesw(a,s,c) | 117 | #define iowrite16_rep(a, s, c) writesw(a, s, c) |
111 | #define iowrite32_rep(a,s,c) writesl(a,s,c) | 118 | #define iowrite32_rep(a, s, c) writesl(a, s, c) |
112 | 119 | ||
113 | #define ioread8(X) readb(X) | 120 | #define ioread8(x) readb(x) |
114 | #define ioread16(X) readw(X) | 121 | #define ioread16(x) readw(x) |
115 | #define ioread32(X) readl(X) | 122 | #define ioread32(x) readl(x) |
116 | #define iowrite8(val,X) writeb(val,X) | 123 | #define iowrite8(val, x) writeb(val, x) |
117 | #define iowrite16(val,X) writew(val,X) | 124 | #define iowrite16(val, x) writew(val, x) |
118 | #define iowrite32(val,X) writel(val,X) | 125 | #define iowrite32(val, x) writel(val, x) |
119 | 126 | ||
120 | #define mmiowb() wmb() | 127 | #define mmiowb() wmb() |
121 | 128 | ||