Some drivers need these for compile-testing. On most architectures
they come from asm-generic/io.h, but not on sparc64, which has its
own definitions.

Copy the generic implementation here.

Signed-off-by: Boris Brezillon <[email protected]>
---
Note that I tried to instead include asm-generic/io.h + a bunch a
#define xxx xxx to prevent asm-generic/io.h from redefining things
already implemented by the driver, but I faced prototypes mismatch
between asm-generic/io.h and asm-generic/iomap.h ('void __iomem *' vs
'const volatile void __iomem *') which I didn't expect because
asm-generic/io.h includes asm-generic/iomap.h when CONFIG_GENERIC_IOMAP
is defined.

Making prototypes consistent that should be doable, but it involves
checking that the prototype modification is not breaking other users.
Since that's not the problem I was initially trying to fix (my goal is
to make 2 NAND drivers using readsl to compile correctly on all archs
when enabled through COMPILE_TEST=y), I just ended copying the
reads{b,w,l,q}/writes{b,w,l,q} definitions in
arch/alpha/include/asm/io.h.

Let me know if that's a problem.
---
 arch/alpha/include/asm/io.h | 98 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

diff --git a/arch/alpha/include/asm/io.h b/arch/alpha/include/asm/io.h
index 4c533fc94d62..0b9cf320f39f 100644
--- a/arch/alpha/include/asm/io.h
+++ b/arch/alpha/include/asm/io.h
@@ -267,6 +267,104 @@ extern void               __raw_writew(u16 b, volatile 
void __iomem *addr);
 extern void            __raw_writel(u32 b, volatile void __iomem *addr);
 extern void            __raw_writeq(u64 b, volatile void __iomem *addr);
 
+static inline void readsb(const volatile void __iomem *addr, void *buffer,
+                         unsigned int count)
+{
+       if (count) {
+               u8 *buf = buffer;
+
+               do {
+                       u8 x = __raw_readb(addr);
+                       *buf++ = x;
+               } while (--count);
+       }
+}
+
+static inline void readsw(const volatile void __iomem *addr, void *buffer,
+                         unsigned int count)
+{
+       if (count) {
+               u16 *buf = buffer;
+
+               do {
+                       u16 x = __raw_readw(addr);
+                       *buf++ = x;
+               } while (--count);
+       }
+}
+
+static inline void readsl(const volatile void __iomem *addr, void *buffer,
+                         unsigned int count)
+{
+       if (count) {
+               u32 *buf = buffer;
+
+               do {
+                       u32 x = __raw_readl(addr);
+                       *buf++ = x;
+               } while (--count);
+       }
+}
+
+static inline void readsq(const volatile void __iomem *addr, void *buffer,
+                         unsigned int count)
+{
+       if (count) {
+               u64 *buf = buffer;
+
+               do {
+                       u64 x = __raw_readq(addr);
+                       *buf++ = x;
+               } while (--count);
+       }
+}
+static inline void writesb(volatile void __iomem *addr, const void *buffer,
+                          unsigned int count)
+{
+       if (count) {
+               const u8 *buf = buffer;
+
+               do {
+                       __raw_writeb(*buf++, addr);
+               } while (--count);
+       }
+}
+
+static inline void writesw(volatile void __iomem *addr, const void *buffer,
+                          unsigned int count)
+{
+       if (count) {
+               const u16 *buf = buffer;
+
+               do {
+                       __raw_writew(*buf++, addr);
+               } while (--count);
+       }
+}
+static inline void writesl(volatile void __iomem *addr, const void *buffer,
+                          unsigned int count)
+{
+       if (count) {
+               const u32 *buf = buffer;
+
+               do {
+                       __raw_writel(*buf++, addr);
+               } while (--count);
+       }
+}
+
+static inline void writesq(volatile void __iomem *addr, const void *buffer,
+                          unsigned int count)
+{
+       if (count) {
+               const u64 *buf = buffer;
+
+               do {
+                       __raw_writeq(*buf++, addr);
+               } while (--count);
+       }
+}
+
 /*
  * Mapping from port numbers to __iomem space is pretty easy.
  */
-- 
2.14.1

--
To unsubscribe from this list: send the line "unsubscribe linux-alpha" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to