X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Fhelper%2Ftypes.h;h=03ab5f0c2edd03ef2c8afa168c1b9f8343c54691;hb=4f310aa0c962930eec7bfb22aface78f8dd91bb9;hp=50f5fe2d4c1dc6d3e2418e482137e41e5d87dac8;hpb=68785af4da7727238c86dcf8858e0b5975bc988e;p=openocd.git diff --git a/src/helper/types.h b/src/helper/types.h index 50f5fe2d4c..03ab5f0c2e 100644 --- a/src/helper/types.h +++ b/src/helper/types.h @@ -23,6 +23,7 @@ #ifndef TYPES_H #define TYPES_H +#include #ifdef HAVE_SYS_TYPES_H #include #endif @@ -33,8 +34,6 @@ #include #endif -typedef struct jtag_tap_s jtag_tap_t; - #ifdef HAVE_STDBOOL_H #include #else /* HAVE_STDBOOL_H */ @@ -60,6 +59,39 @@ typedef bool _Bool; #define stringify(s) __stringify(s) #define __stringify(s) #s + +/** + * Compute the number of elements of a variable length array. + * + * const char *strs[] = { "a", "b", "c" }; + * unsigned num_strs = ARRAY_SIZE(strs); + * + */ +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x))) + + +/** + * Cast a member of a structure out to the containing structure. + * @param ptr The pointer to the member. + * @param type The type of the container struct this is embedded in. + * @param member The name of the member within the struct. + * + * This is a mechanism which is used throughout the Linux kernel. + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + + +/** + * Rounds @c m up to the nearest multiple of @c n using division. + * @param m The value to round up to @c n. + * @param n Round @c m up to a multiple of this number. + * @returns The rounded integer value. + */ +#define DIV_ROUND_UP(m, n) (((m) + (n) - 1) / (n)) + + /* DANGER!!!! here be dragons! * * Leave these fn's as byte accesses because it is safe