* Copyright (C) 2008 by Spencer Oliver *
* spen@spen-soft.co.uk *
* *
+ * Copyright (C) 2011 by Broadcom Corporation *
+ * Evan Hunter - ehunter@broadcom.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 *
DBG_REASON_UNDEFINED = 6
};
-enum target_endianess
+enum target_endianness
{
TARGET_ENDIAN_UNKNOWN = 0,
TARGET_BIG_ENDIAN = 1, TARGET_LITTLE_ENDIAN = 2
{
uint32_t address;
uint32_t size;
- int free;
+ bool free;
uint8_t *backup;
struct working_area **user;
struct working_area *next;
const char *cmd_name; /* tcl Name of target */
int target_number; /* DO NOT USE! field to be removed in 2010 */
struct jtag_tap *tap; /* where on the jtag chain is this */
+ int coreid; /* which device on the TAP? */
const char *variant; /* what variant of this chip is it? */
/**
uint32_t backup_working_area; /* whether the content of the working area has to be preserved */
struct working_area *working_areas;/* list of allocated working areas */
enum target_debug_reason debug_reason;/* reason why the target entered debug state */
- enum target_endianess endianness; /* target endianess */
+ enum target_endianness endianness; /* target endianness */
// also see: target_state_name()
enum target_state state; /* the current backend-state (running, halted, ...) */
struct reg_cache *reg_cache; /* the first register cache of the target (core regs) */
* 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 */
+
+ bool dbgbase_set; /* By default the debug base is not set */
+ uint32_t dbgbase; /* Really a Cortex-A specific option, but there is no
+ system in place to support target specific options
+ currently. */
+ struct rtos *rtos; /* Instance of Real Time Operating System support */
+ bool rtos_auto_detect; /* A flag that indicates that the RTOS has been specified as "auto"
+ * and must be detected when symbols are offered */
};
/** Returns the instance-specific name of the specified target. */
int (*callback)(struct target *target,
enum target_event event, 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
+ * invocation will then succeed.
+ *
+ * These error conditions can be "sticky" error conditions. E.g. writing
+ * to memory could be implemented as an open loop and if memory writes
+ * fails, then a note is made of it, the error is sticky, but the memory
+ * write loop still runs to completion. This improves performance in the
+ * normal case as there is no need to verify that every single write succeed,
+ * yet it is possible to detect error condtions.
+ */
int target_poll(struct target *target);
int target_resume(struct target *target, int current, uint32_t address,
int handle_breakpoints, int debug_execution);
* This routine is wrapper for target->type->write_memory.
*/
int target_write_memory(struct target *target,
- uint32_t address, uint32_t size, uint32_t count, uint8_t *buffer);
+ uint32_t address, uint32_t size, uint32_t count, const uint8_t *buffer);
/**
* Write @a count items of 4 bytes to the memory of @a target at
* This routine is wrapper for target->type->bulk_write_memory.
*/
int target_bulk_write_memory(struct target *target,
- uint32_t address, uint32_t count, uint8_t *buffer);
+ uint32_t address, uint32_t count, const uint8_t *buffer);
/*
* Write to target memory using the virtual address.
* peripheral registers which do not support byte operations.
*/
int target_write_buffer(struct target *target,
- uint32_t address, uint32_t size, uint8_t *buffer);
+ uint32_t address, uint32_t size, const uint8_t *buffer);
int target_read_buffer(struct target *target,
uint32_t address, uint32_t size, uint8_t *buffer);
int target_checksum_memory(struct target *target,
*/
int target_alloc_working_area(struct target *target,
uint32_t size, struct working_area **area);
+/* Same as target_alloc_working_area, except that no error is logged
+ * when ERROR_TARGET_RESOURCE_NOT_AVAILABLE is returned.
+ *
+ * This allows the calling code to *try* to allocate target memory
+ * and have a fallback to another behavior(slower?).
+ */
+int target_alloc_working_area_try(struct target *target,
+ uint32_t size, struct working_area **area);
int target_free_working_area(struct target *target, struct working_area *area);
void target_free_all_working_areas(struct target *target);
extern struct target *all_targets;
uint32_t target_buffer_get_u32(struct target *target, const uint8_t *buffer);
+uint32_t target_buffer_get_u24(struct target *target, const uint8_t *buffer);
uint16_t target_buffer_get_u16(struct target *target, const uint8_t *buffer);
void target_buffer_set_u32(struct target *target, uint8_t *buffer, uint32_t value);
+void target_buffer_set_u24(struct target *target, uint8_t *buffer, uint32_t value);
void target_buffer_set_u16(struct target *target, uint8_t *buffer, uint16_t value);
int target_read_u32(struct target *target, uint32_t address, uint32_t *value);
int target_arch_state(struct target *target);
void target_handle_event(struct target *t, enum target_event e);
-void target_all_handle_event(enum target_event e);
#define ERROR_TARGET_INVALID (-300)
#define ERROR_TARGET_INIT_FAILED (-301)