rename CEIL as DIV_ROUND_UP
[fw/openocd] / src / helper / types.h
index eb836c2458cb9d7f221790b48f2e02190b7cf746..8f6283b57bdd8878a8c4b5dfddfb6e45568f6f17 100644 (file)
@@ -23,6 +23,7 @@
 #ifndef TYPES_H
 #define TYPES_H
 
+#include <stddef.h>
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -33,8 +34,6 @@
 #include <inttypes.h>
 #endif
 
-typedef struct jtag_tap_s jtag_tap_t;
-
 #ifdef HAVE_STDBOOL_H
 #include <stdbool.h>
 #else  /* HAVE_STDBOOL_H */
@@ -56,6 +55,33 @@ typedef bool _Bool;
 
 #endif /* HAVE_STDBOOL_H */
 
+/// turns a macro argument into a string constant
+#define stringify(s) __stringify(s)
+#define __stringify(s) #s
+
+
+/**
+ * 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.
+ * @params m The value to round up to @c n.
+ * @params 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