Signed-off-by: Peng Sun <sironhide0n...@gmail.com>
---
 drivers/staging/slicoss/slic.h | 45 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/drivers/staging/slicoss/slic.h b/drivers/staging/slicoss/slic.h
index fe1d2ce..cfed4ef 100644
--- a/drivers/staging/slicoss/slic.h
+++ b/drivers/staging/slicoss/slic.h
@@ -539,6 +539,51 @@ static inline void slic_flush_write(struct adapter 
*adapter)
        ioread32(adapter->regs + SLIC_REG_HOSTID);
 }
 
+#define IOMEM_GET_FIELDADDR(base, member)                              \
+({                                                                     \
+       char __iomem *_base = (char __iomem *)base;                     \
+       _base += offsetof(typeof(*base), member);                       \
+       (void __iomem *)_base;                                          \
+})
+
+#define IOMEM_GET_FIELD32(base, member)                                        
\
+({                                                                     \
+       char __iomem *_base = (char __iomem *)base;                     \
+       _base += offsetof(typeof(*base), member);                       \
+       ioread32(_base);                                                \
+})
+
+#define IOMEM_SET_FIELD32(value, base, member)                         \
+({                                                                     \
+       char __iomem *_base = (char __iomem *)base;                     \
+       _base += offsetof(typeof(*base), member);                       \
+       iowrite32(value, _base);                                        \
+})
+
+#ifdef CONFIG_64BIT
+#define IOMEM_GET_FIELD64(base, member)                                        
\
+({                                                                     \
+       char __iomem *_base = (char __iomem *)base;                     \
+       _base += offsetof(typeof(*base), member);                       \
+       readq(_base);                                                   \
+})
+#else
+#define IOMEM_GET_FIELD64(base, member)                                        
\
+({                                                                     \
+       char __iomem *_base = (char __iomem *)base;                     \
+       _base += offsetof(typeof(*base), member);                       \
+       u64 val = ((u64)ioread8(_base + 7)) << 56;                      \
+       val += ((u64)ioread8(_base + 6)) << 48;                         \
+       val += ((u64)ioread8(_base + 5)) << 40;                         \
+       val += ((u64)ioread8(_base + 4)) << 32;                         \
+       val += ((u64)ioread8(_base + 3)) << 24;                         \
+       val += ((u64)ioread8(_base + 2)) << 16;                         \
+       val += ((u64)ioread8(_base + 1)) << 8;                          \
+       val += ioread8(_base);                                          \
+       le64_to_cpu(val);                                               \
+})
+#endif
+
 #define UPDATE_STATS(largestat, newstat, oldstat)                        \
 {                                                                        \
        if ((newstat) < (oldstat))                                       \
-- 
2.7.4

Reply via email to