X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Ftarget.h;h=621640a9eca7bc0f9ba04ef609e9a27bfc406bbc;hb=6e4680fc26bff1940e7109bb0d1a2bae1ef631c6;hp=fd09df79240fb56a198ae990feeef7274f542ad6;hpb=e18e23e1b6c7cdfd4294e1f05aeee2b841d3cca2;p=fw%2Fopenocd diff --git a/src/target/target.h b/src/target/target.h index fd09df792..621640a9e 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -2,6 +2,9 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * + * Copyright (C) 2007,2008 Øyvind Harboe * + * oyvind.harboe@zylin.com * + * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * @@ -59,8 +62,6 @@ enum target_reset_mode RESET_RUN = 0, /* reset and let target run */ RESET_HALT = 1, /* reset and halt target out of reset */ RESET_INIT = 2, /* reset and halt target out of reset, then run init script */ - RESET_RUN_AND_HALT = 3, /* reset and let target run, halt after n milliseconds */ - RESET_RUN_AND_INIT = 4, /* reset and let target run, halt after n milliseconds, then run init script */ }; enum target_debug_reason @@ -159,13 +160,29 @@ typedef struct target_type_s 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); + int (*blank_check_memory)(struct target_s *target, u32 address, u32 count, u32* blank); - /* target break-/watchpoint control - * rw: 0 = write, 1 = read, 2 = access - */ + /* + * target break-/watchpoint control + * rw: 0 = write, 1 = read, 2 = access + * + * Target must be halted while this is invoked as this + * will actually set up breakpoints on target. + * + * The breakpoint hardware will be set up upon adding the first breakpoint. + * + * Upon GDB connection all breakpoints/watchpoints are cleared. + */ int (*add_breakpoint)(struct target_s *target, breakpoint_t *breakpoint); + + /* remove breakpoint. hw will only be updated if the target is currently halted. + * However, this method can be invoked on unresponsive targets. + */ int (*remove_breakpoint)(struct target_s *target, breakpoint_t *breakpoint); int (*add_watchpoint)(struct target_s *target, watchpoint_t *watchpoint); + /* remove watchpoint. hw will only be updated if the target is currently halted. + * However, this method can be invoked on unresponsive targets. + */ int (*remove_watchpoint)(struct target_s *target, watchpoint_t *watchpoint); /* target algorithm support */ @@ -180,7 +197,7 @@ typedef struct target_type_s * * invoked every time after the jtag chain has been validated/examined */ - int (*examine)(struct command_context_s *cmd_ctx, struct target_s *target); + int (*examine)(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 @@ -197,15 +214,9 @@ typedef struct target_type_s typedef struct target_s { target_type_t *type; /* target type definition (name, access functions) */ - enum target_reset_mode reset_mode; /* what to do after a reset */ - int run_and_halt_time; /* how long the target should run after a run_and_halt reset */ - 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 */ - char *gdb_program_script; /* script file to execute before programming vis gdb */ + int reset_halt; /* attempt resetting the CPU into the halted mode? */ u32 working_area; /* working area (initialized RAM). Evaluated - upon first allocation from virtual/physical address. - */ + 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 */ @@ -254,9 +265,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_examine(struct command_context_s *cmd_ctx); +extern int target_examine(void); extern int handle_target(void *priv); -extern int target_process_reset(struct command_context_s *cmd_ctx); +extern int target_process_reset(struct command_context_s *cmd_ctx, enum target_reset_mode reset_mode); 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); @@ -270,11 +281,11 @@ extern int target_call_event_callbacks(target_t *target, enum target_event event */ extern int target_register_timer_callback(int (*callback)(void *priv), int time_ms, int periodic, void *priv); extern int target_unregister_timer_callback(int (*callback)(void *priv), void *priv); -extern int target_call_timer_callbacks(); +extern int target_call_timer_callbacks(void); /* invoke this to ensure that e.g. polling timer callbacks happen before * a syncrhonous command completes. */ -extern int target_call_timer_callbacks_now(); +extern int target_call_timer_callbacks_now(void); extern target_t* get_current_target(struct command_context_s *cmd_ctx); extern int get_num_by_target(target_t *query_target); @@ -283,6 +294,8 @@ 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_blank_check_memory(struct target_s *target, u32 address, u32 size, u32* blank); +extern int target_wait_state(target_t *target, enum target_state state, int ms); /* DANGER!!!!! * @@ -301,7 +314,6 @@ extern int target_free_working_area_restore(struct target_s *target, working_are extern int target_free_all_working_areas(struct target_s *target); extern int target_free_all_working_areas_restore(struct target_s *target, int restore); - extern target_t *targets; extern target_event_callback_t *target_event_callbacks; @@ -322,6 +334,8 @@ 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); +int target_invoke_script(struct command_context_s *cmd_ctx, target_t *target, char *name); + #define ERROR_TARGET_INVALID (-300) #define ERROR_TARGET_INIT_FAILED (-301) #define ERROR_TARGET_TIMEOUT (-302) @@ -331,5 +345,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 */