X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Ftarget.h;h=dae5f19e717ae7084787e764f14107239c6b7d3c;hb=96261e827782235709fcdfb2c1bbb93fedc977be;hp=e15a2c8ee27b4b8c3f94a64973ce57af1ffe433e;hpb=6c9b804d6187edda4f46f8458deec0b17ec76bb9;p=openocd.git diff --git a/src/target/target.h b/src/target/target.h index e15a2c8ee2..dae5f19e71 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -33,7 +33,16 @@ struct reg_s; struct command_context_s; - +/* +TARGET_UNKNOWN = 0: we don't know anything about the target yet +TARGET_RUNNING = 1: the target is executing user code +TARGET_HALTED = 2: the target is not executing code, and ready to talk to the +debugger. on an xscale it means that the debug handler is executing +TARGET_RESET = 3: the target is being held in reset (only a temporary state, +not sure how this is used with all the recent changes) +TARGET_DEBUG_RUNNING = 4: the target is running, but it is executing code on +behalf of the debugger (e.g. algorithm for flashing) +*/ enum target_state { TARGET_UNKNOWN = 0, @@ -69,7 +78,8 @@ enum target_debug_reason DBG_REASON_WATCHPOINT = 2, DBG_REASON_WPTANDBKPT = 3, DBG_REASON_SINGLESTEP = 4, - DBG_REASON_NOTHALTED = 5 + DBG_REASON_NOTHALTED = 5, + DBG_REASON_UNDEFINED = 6 }; extern char *target_debug_reason_strings[]; @@ -98,9 +108,10 @@ typedef struct target_type_s char *name; /* poll current target status */ - enum target_state (*poll)(struct target_s *target); - /* architecture specific status reply */ - int (*arch_state)(struct target_s *target, char *buf, int buf_size); + int (*poll)(struct target_s *target); + /* Invoked only from target_arch_state(). + * Issue USER() w/architecture specific status. */ + int (*arch_state)(struct target_s *target); /* target request support */ int (*target_request_data)(struct target_s *target, u32 size, u8 *buffer); @@ -147,6 +158,9 @@ typedef struct target_type_s int (*init_target)(struct command_context_s *cmd_ctx, struct target_s *target); int (*quit)(void); + int (*virt2phys)(struct target_s *target, u32 address, u32 *physical); + int (*mmu)(struct target_s *target, int *enabled); + } target_type_t; typedef struct target_s @@ -158,7 +172,11 @@ typedef struct target_s char *post_halt_script; /* script file to execute after the target halted */ char *pre_resume_script; /* script file to execute before the target resumed */ char *gdb_program_script; /* script file to execute before programming vis gdb */ - u32 working_area; /* working area (initialized RAM) */ + u32 working_area; /* working area (initialized RAM). Evaluated + upon first allocation from virtual/physical address. + */ + u32 working_area_virt; /* virtual address */ + u32 working_area_phys; /* physical address */ u32 working_area_size; /* size in bytes */ u32 backup_working_area; /* whether the content of the working area has to be preserved */ struct working_area_s *working_areas;/* list of allocated working areas */ @@ -170,6 +188,7 @@ typedef struct target_s struct watchpoint_s *watchpoints; /* list of watchpoints */ struct trace_s *trace_info; /* generic trace information */ struct debug_msg_receiver_s *dbgmsg;/* list of debug message receivers */ + u32 dbg_msg_enabled; /* debug message status */ void *arch_info; /* architecture specific information */ struct target_s *next; /* next target in list */ } target_t; @@ -204,6 +223,7 @@ 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 handle_target(void *priv); extern int target_process_reset(struct command_context_s *cmd_ctx); @@ -244,6 +264,9 @@ int target_write_u32(struct target_s *target, u32 address, u32 value); int target_write_u16(struct target_s *target, u32 address, u16 value); int target_write_u8(struct target_s *target, u32 address, u8 value); +/* Issues USER() statements with target state information */ +int target_arch_state(struct target_s *target); + #define ERROR_TARGET_INVALID (-300) #define ERROR_TARGET_INIT_FAILED (-301) #define ERROR_TARGET_TIMEOUT (-302)