]> git.sur5r.net Git - openocd/blobdiff - src/target/target.h
retired fast_memory_access. It's always fast now.
[openocd] / src / target / target.h
index 6ce8fee9fccca1ca51f6566e9e2b10cece11d39f..8f53d8923f2b8cfef2d1670d2bb3cfc79df807b0 100644 (file)
@@ -54,14 +54,6 @@ enum target_state
 
 extern char *target_state_strings[];
 
-enum daemon_startup_mode
-{
-       DAEMON_ATTACH,          /* simply attach to the target */
-       DAEMON_RESET,           /* reset target (behaviour defined by reset_mode */
-};
-
-extern enum daemon_startup_mode startup_mode;
-
 enum target_reset_mode
 {
        RESET_RUN = 0,          /* reset and let target run */
@@ -106,6 +98,8 @@ typedef struct working_area_s
 typedef struct target_type_s
 {
        char *name;
+       
+       int examined;
 
        /* poll current target status */
        int (*poll)(struct target_s *target);
@@ -130,6 +124,11 @@ typedef struct target_type_s
         * assert_reset() can therefore make no assumptions whatsoever about the
         * state of the target 
         * 
+        * Before assert_reset() for the target is invoked, a TRST/tms and
+        * chain validation is executed. TRST should not be asserted
+        * during target assert unless there is no way around it due to
+        * the way reset's are configured.
+        * 
         */
        int (*assert_reset)(struct target_s *target);
        int (*deassert_reset)(struct target_s *target);
@@ -171,6 +170,18 @@ typedef struct target_type_s
        
        int (*register_commands)(struct command_context_s *cmd_ctx);
        int (*target_command)(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct target_s *target);
+       /* invoked after JTAG chain has been examined & validated. During
+        * this stage the target is examined and any additional setup is
+        * performed.
+        * 
+        * invoked every time after the jtag chain has been validated/examined
+        */
+       int (*examine)(struct command_context_s *cmd_ctx, struct target_s *target);
+       /* Set up structures for target.
+        *  
+        * It is illegal to talk to the target at this stage as this fn is invoked
+        * before the JTAG chain has been examined/verified
+     */
        int (*init_target)(struct command_context_s *cmd_ctx, struct target_s *target);
        int (*quit)(void);
        
@@ -239,12 +250,15 @@ typedef struct target_timer_callback_s
 extern int target_register_commands(struct command_context_s *cmd_ctx);
 extern int target_register_user_commands(struct command_context_s *cmd_ctx);
 extern int target_init(struct command_context_s *cmd_ctx);
-extern int target_init_reset(struct command_context_s *cmd_ctx);
+extern int target_examine(struct command_context_s *cmd_ctx);
 extern int handle_target(void *priv);
 extern int target_process_reset(struct command_context_s *cmd_ctx);
 
 extern int target_register_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv);
 extern int target_unregister_event_callback(int (*callback)(struct target_s *target, enum target_event event, void *priv), void *priv);
+extern int target_poll(target_t *target);
+extern int target_resume(target_t *target, int current, u32 address, int handle_breakpoints, int debug_execution);
+extern int target_halt(target_t *target);
 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