X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Ftarget.h;h=29de1e98043ad97daa80e6c67286583754534b2f;hb=5c0e8efa051f4e266add8b3685020970fe394a4c;hp=dc6d8ce14927153a6a5772adacfa2df1a65e9efc;hpb=ef139a3a5e41fbcbabdf4be0ecbbb5591448ad2e;p=openocd.git diff --git a/src/target/target.h b/src/target/target.h index dc6d8ce149..29de1e9804 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -23,6 +23,7 @@ #include "register.h" #include "breakpoints.h" #include "algorithm.h" +#include "trace.h" #include "command.h" #include "types.h" @@ -50,6 +51,8 @@ enum daemon_startup_mode 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 */ @@ -99,6 +102,9 @@ typedef struct target_type_s /* architecture specific status reply */ int (*arch_state)(struct target_s *target, char *buf, int buf_size); + /* target request support */ + int (*target_request_data)(struct target_s *target, u32 size, u8 *buffer); + /* target execution control */ int (*halt)(struct target_s *target); int (*resume)(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution); @@ -108,6 +114,7 @@ typedef struct target_type_s int (*assert_reset)(struct target_s *target); int (*deassert_reset)(struct target_s *target); int (*soft_reset_halt)(struct target_s *target); + int (*prepare_reset_halt)(struct target_s *target); /* target register access for gdb */ int (*get_gdb_reg_list)(struct target_s *target, struct reg_s **reg_list[], int *reg_list_size); @@ -122,12 +129,14 @@ typedef struct target_type_s /* write target memory in multiples of 4 byte, optimized for writing large quantities of data */ int (*bulk_write_memory)(struct target_s *target, u32 address, u32 count, u8 *buffer); + int (*checksum_memory)(struct target_s *target, u32 address, u32 count, u32* checksum); + /* target break-/watchpoint control * rw: 0 = write, 1 = read, 2 = access */ - int (*add_breakpoint)(struct target_s *target, u32 address, u32 length, enum breakpoint_type type); + int (*add_breakpoint)(struct target_s *target, breakpoint_t *breakpoint); int (*remove_breakpoint)(struct target_s *target, breakpoint_t *breakpoint); - int (*add_watchpoint)(struct target_s *target, u32 address, u32 length, enum watchpoint_rw rw); + int (*add_watchpoint)(struct target_s *target, watchpoint_t *watchpoint); int (*remove_watchpoint)(struct target_s *target, watchpoint_t *watchpoint); /* target algorithm support */ @@ -138,6 +147,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 @@ -148,16 +160,24 @@ typedef struct target_s char *reset_script; /* script file to initialize the target after a reset */ char *post_halt_script; /* script file to execute after the target halted */ char *pre_resume_script; /* script file to execute before the target resumed */ - u32 working_area; /* working area (initialized RAM) */ + char *gdb_program_script; /* script file to execute before programming vis gdb */ + 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 */ - enum target_debug_reason debug_reason; /* reason why the target entered debug state */ + enum target_debug_reason debug_reason;/* reason why the target entered debug state */ enum target_endianess endianness; /* target endianess */ enum target_state state; /* the current backend-state (running, halted, ...) */ struct reg_cache_s *reg_cache; /* the first register cache of the target (core regs) */ struct breakpoint_s *breakpoints; /* list of breakpoints */ 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; @@ -169,6 +189,7 @@ enum target_event TARGET_EVENT_RESET, /* target entered reset */ TARGET_EVENT_DEBUG_HALTED, /* target entered debug state, but was executing on behalf of the debugger */ TARGET_EVENT_DEBUG_RESUMED, /* target resumed to execute on behalf of the debugger */ + TARGET_EVENT_GDB_PROGRAM /* target about to be be programmed by gdb */ }; typedef struct target_event_callback_s @@ -191,7 +212,9 @@ 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); 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); @@ -207,6 +230,7 @@ extern target_t* get_target_by_num(int num); extern int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer); extern int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffer); +extern int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32* crc); extern int target_alloc_working_area(struct target_s *target, u32 size, working_area_t **area); extern int target_free_working_area(struct target_s *target, working_area_t *area); @@ -222,6 +246,13 @@ extern u16 target_buffer_get_u16(target_t *target, u8 *buffer); extern void target_buffer_set_u32(target_t *target, u8 *buffer, u32 value); extern void target_buffer_set_u16(target_t *target, u8 *buffer, u16 value); +int target_read_u32(struct target_s *target, u32 address, u32 *value); +int target_read_u16(struct target_s *target, u32 address, u16 *value); +int target_read_u8(struct target_s *target, u32 address, u8 *value); +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); + #define ERROR_TARGET_INVALID (-300) #define ERROR_TARGET_INIT_FAILED (-301) #define ERROR_TARGET_TIMEOUT (-302)