[openib-general] RE: [PATCH] amso1100: use standard byteorder macros
Tom Tucker
tom at ammasso.com
Thu Aug 11 16:09:54 PDT 2005
Christoph:
This is great stuff, but would be even better if we just
globally replaced thinks like "cpu_to_wr64" with "cpu_to_be64" and
removed the cc_byteorder.h file altogether?
What do you think?
> -----Original Message-----
> From: Christoph Hellwig [mailto:hch at lst.de]
> Sent: Thursday, August 11, 2005 10:03 AM
> To: Tom Tucker
> Cc: openib-general at openib.org
> Subject: [PATCH] amso1100: use standard byteorder macros
>
> 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