target: enable TARGET_EVENT_EXAMINE_* events
authorSpencer Oliver <spen@spen-soft.co.uk>
Thu, 10 May 2012 21:36:23 +0000 (22:36 +0100)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 21 May 2012 16:20:07 +0000 (16:20 +0000)
Change-Id: I33efc0994b7bfe0faa2f4e8457fcc3c8e43d3571
Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk>
Reviewed-on: http://openocd.zylin.com/635
Reviewed-by: Freddie Chopin <freddie.chopin@gmail.com>
Tested-by: jenkins
Reviewed-by: Bill Traynor <wmat@alphatroop.com>
doc/openocd.texi
src/target/startup.tcl
src/target/target.c

index 8d0ce62..91c50f1 100644 (file)
@@ -4227,12 +4227,10 @@ The following target events are defined:
 @* The target has resumed (i.e.: gdb said run)
 @item @b{early-halted}
 @* Occurs early in the halt process
-@ignore
-@item @b{examine-end}
-@* Currently not used (goal: when JTAG examine completes)
 @item @b{examine-start}
-@* Currently not used (goal: when JTAG examine starts)
-@end ignore
+@* Before target examine is called.
+@item @b{examine-end}
+@* After target examine is called with no errors.
 @item @b{gdb-attach}
 @* When GDB connects. This is before any communication with the target, so this
 can be used to set up the target so it is possible to probe flash. Probing flash
@@ -4318,7 +4316,6 @@ when reset disables PLLs needed to use a fast clock.
 @* Target has resumed
 @end itemize
 
-
 @node Flash Commands
 @chapter Flash Commands
 
index 02cefb0..90f947d 100644 (file)
@@ -64,7 +64,11 @@ proc ocd_process_reset_inner { MODE } {
        # Examine all targets on enabled taps.
        foreach t $targets {
                if {[jtag tapisenabled [$t cget -chain-position]]} {
-                       $t arp_examine
+                       $t invoke-event examine-start
+                       set err [catch "$t arp_examine"]
+                       if { $err == 0 } {
+                               $t invoke-event examine-end
+                       }
                }
        }
 
@@ -152,8 +156,8 @@ proc armv4_5 params {
        arm $params
 }
 
-# Target/chain configuration scripts can either execute commands directly 
-# or define a procedure which is executed once all configuration 
+# Target/chain configuration scripts can either execute commands directly
+# or define a procedure which is executed once all configuration
 # scripts have completed.
 #
 # By default(classic) the config scripts will set up the target configuration
index ccaa6e3..7dae8a9 100644 (file)
@@ -611,9 +611,17 @@ static int jtag_enable_callback(enum jtag_event event, void *priv)
                return ERROR_OK;
 
        jtag_unregister_event_callback(jtag_enable_callback, target);
-       return target_examine_one(target);
-}
 
+       target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START);
+
+       int retval = target_examine_one(target);
+       if (retval != ERROR_OK)
+               return retval;
+
+       target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
+
+       return retval;
+}
 
 /* Targets that correctly implement init + examine, i.e.
  * no communication with target during init:
@@ -632,12 +640,18 @@ int target_examine(void)
                                        target);
                        continue;
                }
+
+               target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_START);
+
                retval = target_examine_one(target);
                if (retval != ERROR_OK)
                        return retval;
+
+               target_call_event_callbacks(target, TARGET_EVENT_EXAMINE_END);
        }
        return retval;
 }
+
 const char *target_type_name(struct target *target)
 {
        return target->type->name;