From 9a7baa6c15344dee34d5a9dd0308dc43fc29c488 Mon Sep 17 00:00:00 2001 From: Alexander Duyck Date: Wed, 4 May 2011 11:41:46 -0700 Subject: Add support for __be64 and bitops, centralize several needed macros This change is meant to add support for __be64 values and bitops to ethtool. In addition the patch pulls the SIOCETHTOOL define and the ARRAY_SIZE define into ethtool-util.h for later use by the rxclass files. These changes will be needed in order to support network flow classifier rule configuration. Signed-off-by: Alexander Duyck Signed-off-by: Ben Hutchings --- ethtool-bitops.h | 25 +++++++++++++++++++++++++ ethtool-util.h | 16 ++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 ethtool-bitops.h diff --git a/ethtool-bitops.h b/ethtool-bitops.h new file mode 100644 index 0000000..b1eb426 --- /dev/null +++ b/ethtool-bitops.h @@ -0,0 +1,25 @@ +#ifndef ETHTOOL_BITOPS_H__ +#define ETHTOOL_BITOPS_H__ + +#define BITS_PER_BYTE 8 +#define BITS_PER_LONG (BITS_PER_BYTE * sizeof(long)) +#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) +#define BITS_TO_LONGS(nr) DIV_ROUND_UP(nr, BITS_PER_LONG) + +static inline void set_bit(int nr, unsigned long *addr) +{ + addr[nr / BITS_PER_LONG] |= 1UL << (nr % BITS_PER_LONG); +} + +static inline void clear_bit(int nr, unsigned long *addr) +{ + addr[nr / BITS_PER_LONG] &= ~(1UL << (nr % BITS_PER_LONG)); +} + +static inline int test_bit(unsigned int nr, const unsigned long *addr) +{ + return !!((1UL << (nr % BITS_PER_LONG)) & + (((unsigned long *)addr)[nr / BITS_PER_LONG])); +} + +#endif diff --git a/ethtool-util.h b/ethtool-util.h index 6a4f3f4..d8b621c 100644 --- a/ethtool-util.h +++ b/ethtool-util.h @@ -15,6 +15,7 @@ #ifndef HAVE_BE_TYPES typedef __uint16_t __be16; typedef __uint32_t __be32; +typedef unsigned long long __be64; #endif typedef unsigned long long u64; @@ -28,11 +29,15 @@ typedef __int32_t s32; #if __BYTE_ORDER == __BIG_ENDIAN static inline u16 cpu_to_be16(u16 value) { - return value; + return value; } static inline u32 cpu_to_be32(u32 value) { - return value; + return value; +} +static inline u64 cpu_to_be64(u64 value) +{ + return value; } #else static inline u16 cpu_to_be16(u16 value) @@ -43,8 +48,15 @@ static inline u32 cpu_to_be32(u32 value) { return cpu_to_be16(value >> 16) | (cpu_to_be16(value) << 16); } +static inline u64 cpu_to_be64(u64 value) +{ + return cpu_to_be32(value >> 32) | ((u64)cpu_to_be32(value) << 32); +} #endif +#define ntohll cpu_to_be64 +#define htonll cpu_to_be64 + #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #endif -- cgit v1.2.1