]> git.sur5r.net Git - openocd/blobdiff - src/target/target.h
Edgar Grimberg sharpened the str912 target script.
[openocd] / src / target / target.h
index dae5f19e717ae7084787e764f14107239c6b7d3c..fa83949b3b77652cbcd03e14e52ad1d4a7d44c49 100644 (file)
@@ -116,7 +116,7 @@ typedef struct target_type_s
        /* target request support */
        int (*target_request_data)(struct target_s *target, u32 size, u8 *buffer);
 
-       /* target execution control */
+       /* halt will log a warning, but return ERROR_OK if the target is already halted. */
        int (*halt)(struct target_s *target);
        int (*resume)(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution);
        int (*step)(struct target_s *target, int current, u32 address, int handle_breakpoints);
@@ -127,7 +127,15 @@ typedef struct target_type_s
        int (*soft_reset_halt)(struct target_s *target);
        int (*prepare_reset_halt)(struct target_s *target);
        
-       /* target register access for gdb */
+       /* target register access for gdb.
+        * 
+        * Danger! this function will succeed even if the target is running
+        * and return a register list with dummy values.
+        * 
+        * The reason is that GDB connection will fail without a valid register
+        * list, however it is after GDB is connected that monitor commands can
+        * be run to properly initialize the target
+        */
        int (*get_gdb_reg_list)(struct target_s *target, struct reg_s **reg_list[], int *reg_list_size);
        
        /* target memory access 
@@ -231,9 +239,16 @@ extern int target_register_event_callback(int (*callback)(struct target_s *targe
 extern int target_unregister_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv);
 extern int target_call_event_callbacks(target_t *target, enum target_event event);
 
+/* The period is very approximate, the callback can happen much more often 
+ * or much more rarely than specified
+ */
 extern int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int periodic, void *priv);
 extern int target_unregister_timer_callback(int (*callback)(void *priv), void *priv);
 extern int target_call_timer_callbacks();
+/* invoke this to ensure that e.g. polling timer callbacks happen before
+ * a syncrhonous command completes.
+ */
+extern int target_call_timer_callbacks_now();
 
 extern target_t* get_current_target(struct command_context_s *cmd_ctx);
 extern int get_num_by_target(target_t *query_target);
@@ -270,7 +285,6 @@ int target_arch_state(struct target_s *target);
 #define ERROR_TARGET_INVALID   (-300)
 #define ERROR_TARGET_INIT_FAILED (-301)
 #define ERROR_TARGET_TIMEOUT   (-302)
-#define ERROR_TARGET_ALREADY_HALTED (-303)
 #define ERROR_TARGET_NOT_HALTED (-304)
 #define ERROR_TARGET_FAILURE   (-305)
 #define ERROR_TARGET_UNALIGNED_ACCESS  (-306)