Pavel Chromy's on chip flash loader
[openocd.git] / src / target / target.h
index 6ce8fee9fccca1ca51f6566e9e2b10cece11d39f..dd70170dd62f4dc49e44d4e6bcfb55d2bb793a28 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,9 +124,15 @@ 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);
+       int (*soft_reset_halt_imp)(struct target_s *target);
        int (*soft_reset_halt)(struct target_s *target);
        
        /* target register access for gdb.
@@ -150,7 +150,9 @@ typedef struct target_type_s
        * size: 1 = byte (8bit), 2 = half-word (16bit), 4 = word (32bit)
        * count: number of items of <size>
        */
+       int (*read_memory_imp)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
        int (*read_memory)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
+       int (*write_memory_imp)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
        int (*write_memory)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
        
        /* write target memory in multiples of 4 byte, optimized for writing large quantities of data */
@@ -167,10 +169,23 @@ typedef struct target_type_s
        int (*remove_watchpoint)(struct target_s *target, watchpoint_t *watchpoint);
 
        /* target algorithm support */
+       int (*run_algorithm_imp)(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info);
        int (*run_algorithm)(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info);
        
        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 +254,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 
@@ -313,5 +331,6 @@ int target_arch_state(struct target_s *target);
 #define ERROR_TARGET_DATA_ABORT        (-307)
 #define ERROR_TARGET_RESOURCE_NOT_AVAILABLE    (-308)
 #define ERROR_TARGET_TRANSLATION_FAULT (-309)
+#define ERROR_TARGET_NOT_RUNNING (-310)
 
 #endif /* TARGET_H */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)