aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-arm/arch-s3c2410/io.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-arm/arch-s3c2410/io.h')
-rw-r--r--include/asm-arm/arch-s3c2410/io.h60
1 files changed, 44 insertions, 16 deletions
diff --git a/include/asm-arm/arch-s3c2410/io.h b/include/asm-arm/arch-s3c2410/io.h
index 418233a7ee6f..16fbc8afffd9 100644
--- a/include/asm-arm/arch-s3c2410/io.h
+++ b/include/asm-arm/arch-s3c2410/io.h
@@ -9,12 +9,14 @@
9 * 06-Dec-1997 RMK Created. 9 * 06-Dec-1997 RMK Created.
10 * 02-Sep-2003 BJD Modified for S3C2410 10 * 02-Sep-2003 BJD Modified for S3C2410
11 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA 11 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
12 * 12 * 13-Oct-2005 BJD Fixed problems with LDRH/STRH offset range
13 */ 13 */
14 14
15#ifndef __ASM_ARM_ARCH_IO_H 15#ifndef __ASM_ARM_ARCH_IO_H
16#define __ASM_ARM_ARCH_IO_H 16#define __ASM_ARM_ARCH_IO_H
17 17
18#include <asm/hardware.h>
19
18#define IO_SPACE_LIMIT 0xffffffff 20#define IO_SPACE_LIMIT 0xffffffff
19 21
20/* 22/*
@@ -97,7 +99,7 @@ DECLARE_IO(int,l,"")
97 else \ 99 else \
98 __asm__ __volatile__( \ 100 __asm__ __volatile__( \
99 "strb %0, [%1, #0] @ outbc" \ 101 "strb %0, [%1, #0] @ outbc" \
100 : : "r" (value), "r" ((port))); \ 102 : : "r" (value), "r" ((port))); \
101}) 103})
102 104
103#define __inbc(port) \ 105#define __inbc(port) \
@@ -110,35 +112,61 @@ DECLARE_IO(int,l,"")
110 else \ 112 else \
111 __asm__ __volatile__( \ 113 __asm__ __volatile__( \
112 "ldrb %0, [%1, #0] @ inbc" \ 114 "ldrb %0, [%1, #0] @ inbc" \
113 : "=r" (result) : "r" ((port))); \ 115 : "=r" (result) : "r" ((port))); \
114 result; \ 116 result; \
115}) 117})
116 118
117#define __outwc(value,port) \ 119#define __outwc(value,port) \
118({ \ 120({ \
119 unsigned long v = value; \ 121 unsigned long v = value; \
120 if (__PORT_PCIO((port))) \ 122 if (__PORT_PCIO((port))) { \
121 __asm__ __volatile__( \ 123 if ((port) < 256 && (port) > -256) \
122 "strh %0, [%1, %2] @ outwc" \ 124 __asm__ __volatile__( \
123 : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \ 125 "strh %0, [%1, %2] @ outwc" \
124 else \ 126 : : "r" (v), "r" (PCIO_BASE), "Jr" ((port))); \
127 else if ((port) > 0) \
128 __asm__ __volatile__( \
129 "strh %0, [%1, %2] @ outwc" \
130 : : "r" (v), \
131 "r" (PCIO_BASE + ((port) & ~0xff)), \
132 "Jr" (((port) & 0xff))); \
133 else \
134 __asm__ __volatile__( \
135 "strh %0, [%1, #0] @ outwc" \
136 : : "r" (v), \
137 "r" (PCIO_BASE + (port))); \
138 } else \
125 __asm__ __volatile__( \ 139 __asm__ __volatile__( \
126 "strh %0, [%1, #0] @ outwc" \ 140 "strh %0, [%1, #0] @ outwc" \
127 : : "r" (v), "r" ((port))); \ 141 : : "r" (v), "r" ((port))); \
128}) 142})
129 143
130#define __inwc(port) \ 144#define __inwc(port) \
131({ \ 145({ \
132 unsigned short result; \ 146 unsigned short result; \
133 if (__PORT_PCIO((port))) \ 147 if (__PORT_PCIO((port))) { \
134 __asm__ __volatile__( \ 148 if ((port) < 256 && (port) > -256 ) \
135 "ldrh %0, [%1, %2] @ inwc" \ 149 __asm__ __volatile__( \
136 : "=r" (result) : "r" (PCIO_BASE), "Jr" ((port))); \ 150 "ldrh %0, [%1, %2] @ inwc" \
137 else \ 151 : "=r" (result) \
152 : "r" (PCIO_BASE), \
153 "Jr" ((port))); \
154 else if ((port) > 0) \
155 __asm__ __volatile__( \
156 "ldrh %0, [%1, %2] @ inwc" \
157 : "=r" (result) \
158 : "r" (PCIO_BASE + ((port) & ~0xff)), \
159 "Jr" (((port) & 0xff))); \
160 else \
161 __asm__ __volatile__( \
162 "ldrh %0, [%1, #0] @ inwc" \
163 : "=r" (result) \
164 : "r" (PCIO_BASE + ((port)))); \
165 } else \
138 __asm__ __volatile__( \ 166 __asm__ __volatile__( \
139 "ldrh %0, [%1, #0] @ inwc" \ 167 "ldrh %0, [%1, #0] @ inwc" \
140 : "=r" (result) : "r" ((port))); \ 168 : "=r" (result) : "r" ((port))); \
141 result; \ 169 result; \
142}) 170})
143 171
144#define __outlc(value,port) \ 172#define __outlc(value,port) \