Transform 'u8' to 'uint8_t' in src/target
[fw/openocd] / src / target / target.h
index c319a25b2ea728a3656378918af7cba28be82e32..ad1699d3a84c32b2e08d23df5b44c2eb5f6a9b30 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 u16 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, u16 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_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_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);