* 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 <http://www.gnu.org/licenses/>. *
***************************************************************************/
-#ifndef TARGET_H
-#define TARGET_H
+#ifndef OPENOCD_TARGET_TARGET_H
+#define OPENOCD_TARGET_TARGET_H
+
+#include <helper/list.h>
struct reg;
struct trace;
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
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 {
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;
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
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
*/
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);
/** 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
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);
extern bool get_target_reset_nag(void);
-#endif /* TARGET_H */
+#endif /* OPENOCD_TARGET_TARGET_H */