X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ftarget%2Ftarget.h;h=1900351eb829c718f7f0762a6423a65da22ec4a0;hb=89d0e422c9698dd9a1fcbd7d4b6c8490633b0029;hp=dc6d8ce14927153a6a5772adacfa2df1a65e9efc;hpb=ef139a3a5e41fbcbabdf4be0ecbbb5591448ad2e;p=openocd diff --git a/src/target/target.h b/src/target/target.h index dc6d8ce1..1900351e 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 */ @@ -152,12 +161,14 @@ typedef struct target_s 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 */ void *arch_info; /* architecture specific information */ struct target_s *next; /* next target in list */ } target_t; @@ -192,6 +203,7 @@ 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 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 +219,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 +235,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)