Transform 'u16' to 'uint16_t'
[openocd.git] / src / target / target.h
index c319a25b2ea728a3656378918af7cba28be82e32..b2e4c61ed97b86d784d3d3ecff2f9badbe8e9a06 100644 (file)
@@ -100,149 +100,14 @@ typedef struct working_area_s
        u32 address;
        u32 size;
        int free;
-       u8 *backup;
+       uint8_t *backup;
        struct working_area_s **user;
        struct working_area_s *next;
 } working_area_t;
 
-typedef struct target_type_s
-{
-       char *name;
-
-       int examined;
-
-       /* poll current target status */
-       int (*poll)(struct target_s *target);
-       /* Invoked only from target_arch_state().
-        * Issue USER() w/architecture specific status.  */
-       int (*arch_state)(struct target_s *target);
-
-       /* target request support */
-       int (*target_request_data)(struct target_s *target, u32 size, u8 *buffer);
-
-       /* halt will log a warning, but return ERROR_OK if the target is already halted. */
-       int (*halt)(struct target_s *target);
-       int (*resume)(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution);
-       int (*step)(struct target_s *target, int current, u32 address, int handle_breakpoints);
-
-       /* target reset control. assert reset can be invoked when OpenOCD and
-        * the target is out of sync.
-        *
-        * A typical example is that the target was power cycled while OpenOCD
-        * thought the target was halted or running.
-        *
-        * assert_reset() can therefore make no assumptions whatsoever about the
-        * state of the target
-        *
-        * Before assert_reset() for the target is invoked, a TRST/tms and
-        * chain validation is executed. TRST should not be asserted
-        * during target assert unless there is no way around it due to
-        * the way reset's are configured.
-        *
-        */
-       int (*assert_reset)(struct target_s *target);
-       int (*deassert_reset)(struct target_s *target);
-       int (*soft_reset_halt_imp)(struct target_s *target);
-       int (*soft_reset_halt)(struct target_s *target);
-
-       /* target register access for gdb.
-        *
-        * Danger! this function will succeed even if the target is running
-        * and return a register list with dummy values.
-        *
-        * The reason is that GDB connection will fail without a valid register
-        * list, however it is after GDB is connected that monitor commands can
-        * be run to properly initialize the target
-        */
-       int (*get_gdb_reg_list)(struct target_s *target, struct reg_s **reg_list[], int *reg_list_size);
-
-       /* target memory access
-       * size: 1 = byte (8bit), 2 = half-word (16bit), 4 = word (32bit)
-       * count: number of items of <size>
-       */
-       int (*read_memory_imp)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-       /**
-        * Target memory read callback.  Do @b not call this function
-        * directly, use target_read_memory() instead.
-        */
-       int (*read_memory)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-       int (*write_memory_imp)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-       /**
-        * Target memory write callback.  Do @b not call this function
-        * directly, use target_write_memory() instead.
-        */
-       int (*write_memory)(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer);
-
-       /* write target memory in multiples of 4 byte, optimized for writing large quantities of data */
-       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 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 */
-       int (*run_algorithm_imp)(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info);
-       /**
-        * Target algorithm support.  Do @b not call this method directly,
-        * use target_run_algorithm() instead.
-        */
-       int (*run_algorithm)(struct target_s *target, int num_mem_params, mem_param_t *mem_params, int num_reg_params, reg_param_t *reg_param, u32 entry_point, u32 exit_point, int timeout_ms, void *arch_info);
-
-       int (*register_commands)(struct command_context_s *cmd_ctx);
-
-       /* called when target is created */
-       int (*target_create)( struct target_s *target, Jim_Interp *interp );
-
-       /* called for various config parameters */
-       /* returns JIM_CONTINUE - if option not understood */
-       /* otherwise: JIM_OK, or JIM_ERR, */
-       int (*target_jim_configure)( struct target_s *target, Jim_GetOptInfo *goi );
-
-       /* target commands specifically handled by the target */
-       /* returns JIM_OK, or JIM_ERR, or JIM_CONTINUE - if option not understood */
-       int (*target_jim_commands)( struct target_s *target, Jim_GetOptInfo *goi );
-
-       /* invoked after JTAG chain has been examined & validated. During
-        * this stage the target is examined and any additional setup is
-        * performed.
-        *
-        * invoked every time after the jtag chain has been validated/examined
-        */
-       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
-        * before the JTAG chain has been examined/verified
-        * */
-       int (*init_target)(struct command_context_s *cmd_ctx, struct target_s *target);
-       int (*quit)(void);
-
-       int (*virt2phys)(struct target_s *target, u32 address, u32 *physical);
-       int (*mmu)(struct target_s *target, int *enabled);
-
-} target_type_t;
+// target_type.h contains the full definitionof struct target_type_s
+struct target_type_s;
+typedef struct target_type_s target_type_t;
 
 /* forward decloration */
 typedef struct target_event_action_s target_event_action_t;
@@ -383,6 +248,71 @@ extern target_t* get_current_target(struct command_context_s *cmd_ctx);
 extern int get_num_by_target(target_t *query_target);
 extern target_t *get_target(const char *id);
 
+/**
+ * Get the target name.
+ *
+ * This routine is a wrapper for the target->type->name field.
+ */
+extern const char *target_get_name(struct target_s *target);
+
+/**
+ * Examine the specified @a target.
+ *
+ * This routine is a wrapper for target->type->examine.
+ */
+extern int target_examine_one(struct target_s *target);
+/// @returns @c true if the target has been examined.
+extern bool target_was_examined(struct target_s *target);
+/// Sets the @c examined flag for the given target.
+extern void target_set_examined(struct target_s *target);
+/// Reset the @c examined flag for the given target.
+extern void target_reset_examined(struct target_s *target);
+
+
+/**
+ * Add the @a breakpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->add_breakpoint.
+ */
+extern int target_add_breakpoint(struct target_s *target,
+               struct breakpoint_s *breakpoint);
+/**
+ * Remove the @a breakpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->remove_breakpoint.
+ */
+extern int target_remove_breakpoint(struct target_s *target,
+               struct breakpoint_s *breakpoint);
+/**
+ * Add the @a watchpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->add_watchpoint.
+ */
+extern int target_add_watchpoint(struct target_s *target,
+               struct watchpoint_s *watchpoint);
+/**
+ * Remove the @a watchpoint for @a target.
+ *
+ * This routine is a wrapper for target->type->remove_watchpoint.
+ */
+extern int target_remove_watchpoint(struct target_s *target,
+               struct watchpoint_s *watchpoint);
+
+/**
+ * Obtain the registers for GDB.
+ *
+ * This routine is a wrapper for target->type->get_gdb_reg_list.
+ */
+extern int target_get_gdb_reg_list(struct target_s *target,
+               struct reg_s **reg_list[], int *reg_list_size);
+
+/**
+ * Step the target.
+ *
+ * This routine is a wrapper for target->type->step.
+ */
+int target_step(struct target_s *target,
+               int current, u32 address, int handle_breakpoints);
 /**
  * Run an algorithm on the @a target given.
  *
@@ -395,24 +325,34 @@ extern int target_run_algorithm(struct target_s *target,
                int timeout_ms, void *arch_info);
 
 /**
- * Read @count items of @a size bytes from the memory of @a target at
+ * Read @count items of @a size bytes from the memory of @a target at
  * the @a address given.
  *
  * This routine is a wrapper for target->type->read_memory.
  */
 extern int target_read_memory(struct target_s *target,
-               u32 address, u32 size, u32 count, u8 *buffer);
+               u32 address, u32 size, u32 count, uint8_t *buffer);
 /**
- * Write @count items of @a size bytes to the memory of @a target at
+ * Write @count items of @a size bytes to the memory of @a target at
  * the @a address given.
  *
  * This routine is wrapper for target->type->write_memory.
  */
 extern int target_write_memory(struct target_s *target,
-               u32 address, u32 size, u32 count, u8 *buffer);
+               u32 address, u32 size, u32 count, uint8_t *buffer);
+
+/**
+ * Write @a count items of 4 bytes to the memory of @a target at
+ * the @a address given.  Because it operates only on whole words,
+ * this should be faster than target_write_memory().
+ *
+ * This routine is wrapper for target->type->bulk_write_memory.
+ */
+extern int target_bulk_write_memory(struct target_s *target,
+               u32 address, u32 count, uint8_t *buffer);
 
-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_write_buffer(struct target_s *target, u32 address, u32 size, uint8_t *buffer);
+extern int target_read_buffer(struct target_s *target, u32 address, u32 size, uint8_t *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);
@@ -439,19 +379,19 @@ extern target_t *all_targets;
 extern target_event_callback_t *target_event_callbacks;
 extern target_timer_callback_t *target_timer_callbacks;
 
-extern u32 target_buffer_get_u32(target_t *target, const u8 *buffer);
-extern u16 target_buffer_get_u16(target_t *target, const u8 *buffer);
-extern u8  target_buffer_get_u8 (target_t *target, const u8 *buffer);
-extern void target_buffer_set_u32(target_t *target, u8 *buffer, u32 value);
-extern void target_buffer_set_u16(target_t *target, u8 *buffer, u16 value);
-extern void target_buffer_set_u8 (target_t *target, u8 *buffer, u8  value);
+extern u32 target_buffer_get_u32(target_t *target, const uint8_t *buffer);
+extern uint16_t target_buffer_get_u16(target_t *target, const uint8_t *buffer);
+extern uint8_t  target_buffer_get_u8 (target_t *target, const uint8_t *buffer);
+extern void target_buffer_set_u32(target_t *target, uint8_t *buffer, u32 value);
+extern void target_buffer_set_u16(target_t *target, uint8_t *buffer, uint16_t value);
+extern void target_buffer_set_u8 (target_t *target, uint8_t *buffer, uint8_t  value);
 
 int target_read_u32(struct target_s *target, u32 address, u32 *value);
-int target_read_u16(struct target_s *target, u32 address, u16 *value);
-int target_read_u8(struct target_s *target, u32 address, u8 *value);
+int target_read_u16(struct target_s *target, u32 address, uint16_t *value);
+int target_read_u8(struct target_s *target, u32 address, uint8_t *value);
 int target_write_u32(struct target_s *target, u32 address, u32 value);
-int target_write_u16(struct target_s *target, u32 address, u16 value);
-int target_write_u8(struct target_s *target, u32 address, u8 value);
+int target_write_u16(struct target_s *target, u32 address, uint16_t value);
+int target_write_u8(struct target_s *target, u32 address, uint8_t value);
 
 /* Issues USER() statements with target state information */
 int target_arch_state(struct target_s *target);

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)