diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2006-05-27 01:48:08 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2006-05-27 02:26:49 -0400 |
commit | ae5b28a5bb1b5f5d53085a044aec69db41fd0336 (patch) | |
tree | 8b618a3ef0efc0c49de551c4c13fd146b38fa746 /drivers/char/rio | |
parent | bfa6b7bb35a9c8c8acae3056f2cb3364c52693d4 (diff) |
[PATCH] fix rio_copy_to_card() for OLDPCI case
It replaced old rio_pcicopy(). That puppy did _not_ do readb() (unlike
rio_memcpy_toio()) and current implementation is simply broken - readb(NULL)
is never a valid thing to do.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'drivers/char/rio')
-rw-r--r-- | drivers/char/rio/rio_linux.c | 2 | ||||
-rw-r--r-- | drivers/char/rio/rio_linux.h | 14 |
2 files changed, 14 insertions, 2 deletions
diff --git a/drivers/char/rio/rio_linux.c b/drivers/char/rio/rio_linux.c index 8f96b20090e8..aa43436d5d1b 100644 --- a/drivers/char/rio/rio_linux.c +++ b/drivers/char/rio/rio_linux.c | |||
@@ -335,7 +335,7 @@ int RIODelay_ni(struct Port *PortP, int njiffies) | |||
335 | 335 | ||
336 | void rio_copy_to_card(void *from, void __iomem *to, int len) | 336 | void rio_copy_to_card(void *from, void __iomem *to, int len) |
337 | { | 337 | { |
338 | rio_memcpy_toio(NULL, to, from, len); | 338 | rio_copy_toio(to, from, len); |
339 | } | 339 | } |
340 | 340 | ||
341 | int rio_minor(struct tty_struct *tty) | 341 | int rio_minor(struct tty_struct *tty) |
diff --git a/drivers/char/rio/rio_linux.h b/drivers/char/rio/rio_linux.h index 99c7447b6113..55b9c97e8477 100644 --- a/drivers/char/rio/rio_linux.h +++ b/drivers/char/rio/rio_linux.h | |||
@@ -138,12 +138,23 @@ static inline void __iomem *rio_memcpy_toio(void __iomem *dummy, void __iomem *d | |||
138 | 138 | ||
139 | while (n--) { | 139 | while (n--) { |
140 | writeb(*src++, dst++); | 140 | writeb(*src++, dst++); |
141 | (void) readb(dummy); /* WTF? */ | 141 | (void) readb(dummy); |
142 | } | 142 | } |
143 | 143 | ||
144 | return dest; | 144 | return dest; |
145 | } | 145 | } |
146 | 146 | ||
147 | static inline void __iomem *rio_copy_toio(void __iomem *dest, void *source, int n) | ||
148 | { | ||
149 | char __iomem *dst = dest; | ||
150 | char *src = source; | ||
151 | |||
152 | while (n--) | ||
153 | writeb(*src++, dst++); | ||
154 | |||
155 | return dest; | ||
156 | } | ||
157 | |||
147 | 158 | ||
148 | static inline void *rio_memcpy_fromio(void *dest, void __iomem *source, int n) | 159 | static inline void *rio_memcpy_fromio(void *dest, void __iomem *source, int n) |
149 | { | 160 | { |
@@ -158,6 +169,7 @@ static inline void *rio_memcpy_fromio(void *dest, void __iomem *source, int n) | |||
158 | 169 | ||
159 | #else | 170 | #else |
160 | #define rio_memcpy_toio(dummy,dest,source,n) memcpy_toio(dest, source, n) | 171 | #define rio_memcpy_toio(dummy,dest,source,n) memcpy_toio(dest, source, n) |
172 | #define rio_copy_toio memcpy_toio | ||
161 | #define rio_memcpy_fromio memcpy_fromio | 173 | #define rio_memcpy_fromio memcpy_fromio |
162 | #endif | 174 | #endif |
163 | 175 | ||