X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Ftarget.h;h=8f6a7d901abb93cd598aa7905667f4282f025175;hp=0552b8f9b2c51cb66f68282c9531db5b1177602f;hb=eaacb900dd3ce5257dcfec35a8032a873d141b6a;hpb=1c021ed0afb5f9f7d9e8cbce53a4fe985a4c2235
diff --git a/src/target/target.h b/src/target/target.h
index 0552b8f9b2..8f6a7d901a 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -25,13 +25,13 @@
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
+ * along with this program. If not, see . *
***************************************************************************/
-#ifndef TARGET_H
-#define TARGET_H
+#ifndef OPENOCD_TARGET_TARGET_H
+#define OPENOCD_TARGET_TARGET_H
+
+#include
struct reg;
struct trace;
@@ -154,7 +154,7 @@ struct target {
* upon first allocation from virtual/physical address. */
bool working_area_virt_spec; /* virtual address specified? */
uint32_t working_area_virt; /* virtual address */
- bool working_area_phys_spec; /* virtual address specified? */
+ bool working_area_phys_spec; /* physical address specified? */
uint32_t working_area_phys; /* physical address */
uint32_t working_area_size; /* size in bytes */
uint32_t backup_working_area; /* whether the content of the working area has to be preserved */
@@ -175,7 +175,7 @@ struct target {
int display; /* display async info in telnet session. Do not display
* lots of halted/resumed info when stepping in debugger. */
bool halt_issued; /* did we transition to halted state? */
- long long halt_issued_time; /* Note time when halt was issued */
+ int64_t halt_issued_time; /* Note time when halt was issued */
bool dbgbase_set; /* By default the debug base is not set */
uint32_t dbgbase; /* Really a Cortex-A specific option, but there is no
@@ -264,6 +264,8 @@ enum target_event {
TARGET_EVENT_GDB_FLASH_ERASE_END,
TARGET_EVENT_GDB_FLASH_WRITE_START,
TARGET_EVENT_GDB_FLASH_WRITE_END,
+
+ TARGET_EVENT_TRACE_CONFIG,
};
struct target_event_action {
@@ -282,10 +284,23 @@ struct target_event_callback {
struct target_event_callback *next;
};
+struct target_reset_callback {
+ struct list_head list;
+ void *priv;
+ int (*callback)(struct target *target, enum target_reset_mode reset_mode, void *priv);
+};
+
+struct target_trace_callback {
+ struct list_head list;
+ void *priv;
+ int (*callback)(struct target *target, size_t len, uint8_t *data, void *priv);
+};
+
struct target_timer_callback {
int (*callback)(void *priv);
int time_ms;
int periodic;
+ bool removed;
struct timeval when;
void *priv;
struct target_timer_callback *next;
@@ -303,6 +318,24 @@ int target_unregister_event_callback(
enum target_event event, void *priv),
void *priv);
+int target_register_reset_callback(
+ int (*callback)(struct target *target,
+ enum target_reset_mode reset_mode, void *priv),
+ void *priv);
+int target_unregister_reset_callback(
+ int (*callback)(struct target *target,
+ enum target_reset_mode reset_mode, void *priv),
+ void *priv);
+
+int target_register_trace_callback(
+ int (*callback)(struct target *target,
+ size_t len, uint8_t *data, void *priv),
+ void *priv);
+int target_unregister_trace_callback(
+ int (*callback)(struct target *target,
+ size_t len, uint8_t *data, void *priv),
+ void *priv);
+
/* Poll the status of the target, detect any error conditions and report them.
*
* Also note that this fn will clear such error conditions, so a subsequent
@@ -320,6 +353,8 @@ int target_resume(struct target *target, int current, uint32_t address,
int handle_breakpoints, int debug_execution);
int target_halt(struct target *target);
int target_call_event_callbacks(struct target *target, enum target_event event);
+int target_call_reset_callbacks(struct target *target, enum target_reset_mode reset_mode);
+int target_call_trace_callbacks(struct target *target, size_t len, uint8_t *data);
/**
* The period is very approximate, the callback can happen much more often
@@ -335,6 +370,7 @@ int target_call_timer_callbacks(void);
*/
int target_call_timer_callbacks_now(void);
+struct target *get_target_by_num(int num);
struct target *get_current_target(struct command_context *cmd_ctx);
struct target *get_target(const char *id);
@@ -543,7 +579,7 @@ int target_read_buffer(struct target *target,
int target_checksum_memory(struct target *target,
uint32_t address, uint32_t size, uint32_t *crc);
int target_blank_check_memory(struct target *target,
- uint32_t address, uint32_t size, uint32_t *blank);
+ uint32_t address, uint32_t size, uint32_t *blank, uint8_t erased_value);
int target_wait_state(struct target *target, enum target_state state, int ms);
/**
@@ -565,6 +601,12 @@ int target_gdb_fileio_end(struct target *target, int retcode, int fileio_errno,
/** Return the *name* of this targets current state */
const char *target_state_name(struct target *target);
+/** Return the *name* of a target event enumeration value */
+const char *target_event_name(enum target_event event);
+
+/** Return the *name* of a target reset reason enumeration value */
+const char *target_reset_mode_name(enum target_reset_mode reset_mode);
+
/* DANGER!!!!!
*
* if "area" passed in to target_alloc_working_area() points to a memory
@@ -590,6 +632,11 @@ int target_free_working_area(struct target *target, struct working_area *area);
void target_free_all_working_areas(struct target *target);
uint32_t target_get_working_area_avail(struct target *target);
+/**
+ * Free all the resources allocated by targets and the target layer
+ */
+void target_quit(void);
+
extern struct target *all_targets;
uint64_t target_buffer_get_u64(struct target *target, const uint8_t *buffer);
@@ -636,4 +683,4 @@ void target_handle_event(struct target *t, enum target_event e);
extern bool get_target_reset_nag(void);
-#endif /* TARGET_H */
+#endif /* OPENOCD_TARGET_TARGET_H */