X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Ftarget_type.h;h=10b6f33aa1c74132cc71f9eac59279159b7800fd;hb=e6c3ab9df3293deb7e1d5484ad0d6fbf3e1cf3c8;hp=7a8ac9c4a89a0f7752c347f7a284b20ced122127;hpb=559d08c19ed838f7bb2a77ce56a5a274641111f8;p=openocd.git diff --git a/src/target/target_type.h b/src/target/target_type.h index 7a8ac9c4a8..10b6f33aa1 100644 --- a/src/target/target_type.h +++ b/src/target/target_type.h @@ -42,7 +42,7 @@ struct target_type * Name of this type of target. Do @b not access this * field directly, use target_type_name() instead. */ - char *name; + const char *name; /* poll current target status */ int (*poll)(struct target *target); @@ -112,19 +112,25 @@ struct target_type * directly, use target_read_memory() instead. */ int (*read_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); - int (*write_memory_imp)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); + int (*write_memory_imp)(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer); /** * Target memory write callback. Do @b not call this function * directly, use target_write_memory() instead. */ - int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer); + int (*write_memory)(struct target *target, uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer); + + /* Default implementation will do some fancy alignment to improve performance, target can override */ + int (*read_buffer)(struct target *target, uint32_t address, uint32_t size, uint8_t *buffer); + + /* Default implementation will do some fancy alignment to improve performance, target can override */ + int (*write_buffer)(struct target *target, uint32_t address, uint32_t size, const uint8_t *buffer); /** * Write target memory in multiples of 4 bytes, optimized for * writing large quantities of data. Do @b not call this * function directly, use target_bulk_write_memory() instead. */ - int (*bulk_write_memory)(struct target *target, uint32_t address, uint32_t count, uint8_t *buffer); + int (*bulk_write_memory)(struct target *target, uint32_t address, uint32_t count, const uint8_t *buffer); int (*checksum_memory)(struct target *target, uint32_t address, uint32_t count, uint32_t* checksum); int (*blank_check_memory)(struct target *target, uint32_t address, uint32_t count, uint32_t* blank); @@ -142,6 +148,8 @@ struct target_type * Upon GDB connection all breakpoints/watchpoints are cleared. */ int (*add_breakpoint)(struct target *target, struct breakpoint *breakpoint); + int (*add_context_breakpoint)(struct target *target, struct breakpoint *breakpoint); + int (*add_hybrid_breakpoint)(struct target *target, struct breakpoint *breakpoint); /* remove breakpoint. hw will only be updated if the target * is currently halted. @@ -163,6 +171,8 @@ struct target_type * use target_run_algorithm() instead. */ int (*run_algorithm)(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info); + int (*start_algorithm)(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, void *arch_info); + int (*wait_algorithm)(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t exit_point, int timeout_ms, void *arch_info); const struct command_registration *commands; @@ -219,7 +229,7 @@ struct target_type /* * same as read_phys_memory, except that it writes... */ - int (*write_phys_memory)(struct target *target, uint32_t phys_address, uint32_t size, uint32_t count, uint8_t *buffer); + int (*write_phys_memory)(struct target *target, uint32_t phys_address, uint32_t size, uint32_t count, const uint8_t *buffer); int (*mmu)(struct target *target, int *enabled);