ARM920 uses the new inheritance/nesting scheme
[fw/openocd] / src / target / target.h
index c971f18bd64f7a6cb744d88b679c54313de5e866..1bbf40f0cd3d3c67892f9fd40f1348c29230ca42 100644 (file)
@@ -26,6 +26,8 @@
 #ifndef TARGET_H
 #define TARGET_H
 
+#include <stddef.h>
+
 #include "breakpoints.h"
 #include "algorithm.h"
 #include "command.h"
@@ -34,6 +36,19 @@ struct reg_s;
 struct trace_s;
 struct command_context_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) );})
+
 /*
  * TARGET_UNKNOWN = 0: we don't know anything about the target yet
  * TARGET_RUNNING = 1: the target is executing user code