summaryrefslogtreecommitdiff
path: root/src/target/target.h
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-15 10:35:25 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-11-15 10:35:25 -0800
commit9ac7cdec82c19481b79f2effcefb7106dd7ade41 (patch)
tree6252be3bf24ee465b2ec9e67dd497b87ada25080 /src/target/target.h
parentf30136603e4cc8b2db0112a32f26959d5201e58c (diff)
downloadopenocd+libswd-9ac7cdec82c19481b79f2effcefb7106dd7ade41.tar.gz
openocd+libswd-9ac7cdec82c19481b79f2effcefb7106dd7ade41.tar.bz2
openocd+libswd-9ac7cdec82c19481b79f2effcefb7106dd7ade41.tar.xz
openocd+libswd-9ac7cdec82c19481b79f2effcefb7106dd7ade41.zip
target: make "examined" flag be per-target
Previously this flag was stored in "target_type", so that for example if there were two ARM7TDMI targets in a scan chain, both would claim to have been examined although only the first one actually had its examine() method called. Move this state to where it should have been in the first place, and hide a method that didn't need exposure ... the flag is write-once. Provide some doxygen. The examine() method is confusing, since it isn't separating one-time setup from the after-each-reset stuff. And the ARM7/ARM9 version is, somewhat undesirably, not leaving the debug state alone after reset ... probably more of an issue for trace setup than for watchpoints and breakpoints. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src/target/target.h')
-rw-r--r--src/target/target.h32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/target/target.h b/src/target/target.h
index 914d62fd..e4de2c7c 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -129,7 +129,16 @@ struct target
const char *cmd_name; /* tcl Name of target */
int target_number; /* DO NOT USE! field to be removed in 2010 */
struct jtag_tap *tap; /* where on the jtag chain is this */
- const char *variant; /* what varient of this chip is it? */
+ const char *variant; /* what variant of this chip is it? */
+
+ /**
+ * Indicates whether this target has been examined.
+ *
+ * Do @b not access this field directly, use target_was_examined()
+ * or target_set_examined().
+ */
+ bool examined;
+
struct target_event_action *event_action;
int reset_halt; /* attempt resetting the CPU into the halted mode? */
@@ -289,18 +298,25 @@ struct target *get_target(const char *id);
const char *target_get_name(struct target *target);
/**
- * Examine the specified @a target.
+ * Examine the specified @a target, letting it perform any
+ * initialization that requires JTAG access.
*
* This routine is a wrapper for target->type->examine.
*/
int target_examine_one(struct target *target);
-/// @returns @c true if the target has been examined.
-bool target_was_examined(struct target *target);
-/// Sets the @c examined flag for the given target.
-void target_set_examined(struct target *target);
-/// Reset the @c examined flag for the given target.
-void target_reset_examined(struct target *target);
+/// @returns @c true if target_set_examined() has been called.
+static inline bool target_was_examined(struct target *target)
+{
+ return target->examined;
+}
+
+/// Sets the @c examined flag for the given target.
+/// Use in target->type->examine() after one-time setup is done.
+static inline void target_set_examined(struct target *target)
+{
+ target->examined = true;
+}
/**
* Add the @a breakpoint for @a target.