MIPS: fastdata bulk write fallback
[fw/openocd] / src / target / target_type.h
index 32c58abba28208deb389954041b7884220c15ebc..67041b31625a68e2a605d3e90ef09fedf2e99eed 100644 (file)
 #ifndef TARGET_TYPE_H
 #define TARGET_TYPE_H
 
-#include "types.h"
+#include <helper/types.h>
 
 struct target;
 
+/**
+ * This holds methods shared between all instances of a given target
+ * type.  For example, all Cortex-M3 targets on a scan chain share
+ * the same method table.
+ */
 struct target_type
 {
        /**
-        * Name of the target.  Do @b not access this field directly, use
-        * target_get_name() instead.
+        * Name of this type of target.  Do @b not access this
+        * field directly, use target_type_name() instead.
         */
        char *name;
 
-       /**
-        * Indicates whether this target has been examined.
-        *
-        * Do @b not access this field directly, use target_was_examined()
-        * target_set_examined(), and target_reset_examined().
-        */
-       int examined;
-
        /* poll current target status */
        int (*poll)(struct target *target);
        /* Invoked only from target_arch_state().
@@ -127,18 +124,24 @@ struct target_type
         * 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.
+        * 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 *target, struct breakpoint *breakpoint);
 
-       /* remove breakpoint. hw will only be updated if the target is currently halted.
+       /* 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 *target, struct breakpoint *breakpoint);
+
+       /* add watchpoint ... see add_breakpoint() comment above. */
        int (*add_watchpoint)(struct target *target, struct watchpoint *watchpoint);
-       /* remove watchpoint. hw will only be updated if the target is currently halted.
+
+       /* 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 *target, struct watchpoint *watchpoint);
@@ -151,7 +154,7 @@ struct target_type
         */
        int (*run_algorithm)(struct target *target, int num_mem_params, struct mem_param *mem_params, int num_reg_params, struct reg_param *reg_param, uint32_t entry_point, uint32_t exit_point, int timeout_ms, void *arch_info);
 
-       int (*register_commands)(struct command_context_s *cmd_ctx);
+       const struct command_registration *commands;
 
        /* called when target is created */
        int (*target_create)(struct target *target, Jim_Interp *interp);
@@ -165,19 +168,28 @@ struct target_type
        /* returns JIM_OK, or JIM_ERR, or JIM_CONTINUE - if option not understood */
        int (*target_jim_commands)(struct target *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.
+       /**
+        * This method is used to perform target setup that requires
+        * JTAG access.
+        *
+        * This may be called multiple times.  It is called after the
+        * scan chain is initially validated, or later after the target
+        * is enabled by a JRC.  It may also be called during some
+        * parts of the reset sequence.
         *
-        * invoked every time after the jtag chain has been validated/examined
+        * For one-time initialization tasks, use target_was_examined()
+        * and target_set_examined().  For example, probe the hardware
+        * before setting up chip-specific state, and then set that
+        * flag so you don't do that again.
         */
        int (*examine)(struct target *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 *target);
+       int (*init_target)(struct command_context *cmd_ctx, struct target *target);
 
        /* translate from virtual to physical address. Default implementation is successful
         * no-op(i.e. virtual==physical).
@@ -201,11 +213,6 @@ struct target_type
 
        int (*mmu)(struct target *target, int *enabled);
 
-       /* Read coprocessor - arm specific. Default implementation returns error. */
-       int (*mrc)(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t *value);
-
-       /* Write coprocessor. Default implementation returns error.  */
-       int (*mcr)(struct target *target, int cpnum, uint32_t op1, uint32_t op2, uint32_t CRn, uint32_t CRm, uint32_t value);
 };
 
 #endif // TARGET_TYPE_H