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) */
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);
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);