[openib-general] [PATCH] amso1100: use standard byteorder macros
Christoph Hellwig
hch at lst.de
Thu Aug 11 08:03:26 PDT 2005
Signed-off-by: Christoph Hellwig <hch at lst.de>
Index: cc_byteorder.h
===================================================================
--- cc_byteorder.h (revision 3058)
+++ cc_byteorder.h (working copy)
@@ -1,113 +1,30 @@
#ifndef _CC_BYTEORDER_H_
#define _CC_BYTEORDER_H_
+#include <asm/byteorder.h>
#include "cc_types.h"
-static inline const u64 cc_arch_swap64(u64 x)
-{
- union {
- struct { u32 a,b; } s;
- u64 u;
- } v;
-
- v.u = x;
-
- asm("bswap %0\n\t"
- "bswap %1\n\t"
- "xchgl %0,%1\n"
- : "=r" (v.s.a), "=r" (v.s.b)
- : "0" (v.s.a), "1" (v.s.b));
-
- return v.u;
-}
-
-static inline const u32 cc_arch_swap32(u32 x)
-{
- asm("bswap %0" : "=r" (x) : "0" (x));
- return x;
-}
-
-#define cc_swap16(x) \
-({ \
- u16 __x = (x); \
- ((u16)( \
- (((u16)(__x) & (u16)0x00ffU) << 8) | \
- (((u16)(__x) & (u16)0xff00U) >> 8) )); \
-})
-
-#define cc_swap32(x) \
-({ \
- u32 __x = (x); \
- ((u32)( \
- (((u32)(__x) & (u32)0x000000ffUL) << 24) | \
- (((u32)(__x) & (u32)0x0000ff00UL) << 8) | \
- (((u32)(__x) & (u32)0x00ff0000UL) >> 8) | \
- (((u32)(__x) & (u32)0xff000000UL) >> 24) )); \
-})
-
-#define cc_swap64(x) \
-({ \
- u64 __x = (x); \
- ((u64)( \
- (u64)(((u64)(__x) & (u64)0x00000000000000ffULL) << 56) | \
- (u64)(((u64)(__x) & (u64)0x000000000000ff00ULL) << 40) | \
- (u64)(((u64)(__x) & (u64)0x0000000000ff0000ULL) << 24) | \
- (u64)(((u64)(__x) & (u64)0x00000000ff000000ULL) << 8) | \
- (u64)(((u64)(__x) & (u64)0x000000ff00000000ULL) >> 8) | \
- (u64)(((u64)(__x) & (u64)0x0000ff0000000000ULL) >> 24) | \
- (u64)(((u64)(__x) & (u64)0x00ff000000000000ULL) >> 40) | \
- (u64)(((u64)(__x) & (u64)0xff00000000000000ULL) >> 56) )); \
-})
-
-/* This section defines what it means to swap a word into the byte
- order of the current CPU. For example, x86-32 and x86-64 are
- little-endian platforms, so swapping a big-endian number to the
- cpu means the bytes need to be rearranged. However, swapping a
- little-endian number to the cpu means that nothing should be done.
-*/
-
-#define X86_32
-#if defined(X86_32) || defined (X86_64)
-
-#define cc_be64_to_cpu(x) (__builtin_constant_p((u64)(x)) ? cc_swap64(x) : cc_arch_swap64(x))
-#define cc_be32_to_cpu(x) (__builtin_constant_p((u32)(x)) ? cc_swap32(x) : cc_arch_swap32(x))
-#define cc_be16_to_cpu(x) cc_swap16(x)
-#define cc_cpu_to_be64(x) cc_be64_to_cpu(x)
-#define cc_cpu_to_be32(x) cc_be32_to_cpu(x)
-#define cc_cpu_to_be16(x) cc_be16_to_cpu(x)
-
-#define cc_le64_to_cpu(x) ((u64)(x))
-#define cc_le32_to_cpu(x) ((u32)(x))
-#define cc_le16_to_cpu(x) ((u16)(x))
-#define cc_cpu_to_le64(x) ((u64)(x))
-#define cc_cpu_to_le32(x) ((u32)(x))
-#define cc_cpu_to_le16(x) ((u16)(x))
-
-#else
-#error Byte swapping functions not defined for this platform
-#endif
-
/* Here we define the adapter-to-cpu and cpu-to-adapter byte order functions
based on whether the adapter is big-endian or little-endian.
*/
#if defined(WR_BYTE_ORDER_BIG_ENDIAN)
-#define wr64_to_cpu cc_be64_to_cpu
-#define wr32_to_cpu cc_be32_to_cpu
-#define wr16_to_cpu cc_be16_to_cpu
-#define cpu_to_wr64 cc_cpu_to_be64
-#define cpu_to_wr32 cc_cpu_to_be32
-#define cpu_to_wr16 cc_cpu_to_be16
+#define wr64_to_cpu be64_to_cpu
+#define wr32_to_cpu be32_to_cpu
+#define wr16_to_cpu be16_to_cpu
+#define cpu_to_wr64 cpu_to_be64
+#define cpu_to_wr32 cpu_to_be32
+#define cpu_to_wr16 cpu_to_be16
#elif defined (WR_BYTE_ORDER_LITTLE_ENDIAN)
-#define wr64_to_cpu cc_le64_to_cpu
-#define wr32_to_cpu cc_le32_to_cpu
-#define wr16_to_cpu cc_le16_to_cpu
-#define cpu_to_wr64 cc_cpu_to_le64
-#define cpu_to_wr32 cc_cpu_to_le32
-#define cpu_to_wr16 cc_cpu_to_le16
+#define wr64_to_cpu le64_to_cpu
+#define wr32_to_cpu le32_to_cpu
+#define wr16_to_cpu le16_to_cpu
+#define cpu_to_wr64 cpu_to_le64
+#define cpu_to_wr32 cpu_to_le32
+#define cpu_to_wr16 cpu_to_le16
#else
#error Work request (WR) byte order is not defined.
More information about the general
mailing list