diff options
Diffstat (limited to 'src/vppinfra/clib.h')
-rw-r--r-- | src/vppinfra/clib.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/vppinfra/clib.h b/src/vppinfra/clib.h index 8aec1f16beb..ecd70980996 100644 --- a/src/vppinfra/clib.h +++ b/src/vppinfra/clib.h @@ -38,6 +38,7 @@ #ifndef included_clib_h #define included_clib_h +#include <stddef.h> #include <vppinfra/config.h> /* Standalone means to not assume we are running on a Unix box. */ @@ -62,8 +63,8 @@ #define ARRAY_LEN(x) (sizeof (x)/sizeof (x[0])) #define _STRUCT_FIELD(t,f) (((t *) 0)->f) -#define STRUCT_OFFSET_OF(t,f) ((uword) & _STRUCT_FIELD (t, f)) -#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * (uword) & _STRUCT_FIELD (t, f)) +#define STRUCT_OFFSET_OF(t,f) offsetof(t, f) +#define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * STRUCT_OFFSET_OF (t, f)) #define STRUCT_SIZE_OF(t,f) (sizeof (_STRUCT_FIELD (t, f))) #define STRUCT_BITS_OF(t,f) (BITS (_STRUCT_FIELD (t, f))) #define STRUCT_ARRAY_LEN(t,f) ARRAY_LEN (_STRUCT_FIELD (t, f)) @@ -238,6 +239,12 @@ is_pow2 (uword x) } always_inline uword +round_down_pow2 (uword x, uword pow2) +{ + return (x) & ~(pow2 - 1); +} + +always_inline uword round_pow2 (uword x, uword pow2) { return (x + pow2 - 1) & ~(pow2 - 1); |