summaryrefslogtreecommitdiff
path: root/src/target/target.h
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-08-24 18:20:49 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-08-24 18:20:49 +0000
commit8d73c2a9b0c00c870694a57f7cfbc23e354855ac (patch)
tree075eb1d11d8349fa8daa20ee2401b71666fa070f /src/target/target.h
parent6abf942baba746df2c7195abe01a9b05cec13b1e (diff)
downloadopenocd+libswd-8d73c2a9b0c00c870694a57f7cfbc23e354855ac.tar.gz
openocd+libswd-8d73c2a9b0c00c870694a57f7cfbc23e354855ac.tar.bz2
openocd+libswd-8d73c2a9b0c00c870694a57f7cfbc23e354855ac.tar.xz
openocd+libswd-8d73c2a9b0c00c870694a57f7cfbc23e354855ac.zip
duan ellis target tcl work in progress
converts a number of 'simple string lookup tables' into NVP tables. These NVP tables will be used by various commands coming in the next patch. git-svn-id: svn://svn.berlios.de/openocd/trunk@962 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target/target.h')
-rw-r--r--src/target/target.h96
1 files changed, 82 insertions, 14 deletions
diff --git a/src/target/target.h b/src/target/target.h
index 621640a9..968d7ab8 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -55,15 +55,25 @@ enum target_state
TARGET_DEBUG_RUNNING = 4,
};
-extern char *target_state_strings[];
+extern const Jim_Nvp nvp_target_state[];
+
+enum nvp_assert {
+ NVP_DEASSERT,
+ NVP_ASSERT,
+};
+
+extern const Jim_Nvp nvp_assert[];
enum target_reset_mode
{
- RESET_RUN = 0, /* reset and let target run */
- RESET_HALT = 1, /* reset and halt target out of reset */
- RESET_INIT = 2, /* reset and halt target out of reset, then run init script */
+ RESET_UNKNOWN = 0,
+ RESET_RUN = 1, /* reset and let target run */
+ RESET_HALT = 2, /* reset and halt target out of reset */
+ RESET_INIT = 3, /* reset and halt target out of reset, then run init script */
};
+extern const Jim_Nvp nvp_reset_mode[];
+
enum target_debug_reason
{
DBG_REASON_DBGRQ = 0,
@@ -75,14 +85,15 @@ enum target_debug_reason
DBG_REASON_UNDEFINED = 6
};
-extern char *target_debug_reason_strings[];
+extern const Jim_Nvp nvp_target_debug_reason[];
enum target_endianess
{
- TARGET_BIG_ENDIAN = 0, TARGET_LITTLE_ENDIAN = 1
+ TARGET_ENDIAN_UNKNOWN=0,
+ TARGET_BIG_ENDIAN = 1, TARGET_LITTLE_ENDIAN = 2
};
-extern char *target_endianess_strings[];
+extern const Jim_Nvp nvp_target_endian[];
struct target_s;
@@ -190,6 +201,19 @@ typedef struct target_type_s
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_jim_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 );
+
+ /* old init function */
int (*target_command)(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct target_s *target);
/* invoked after JTAG chain has been examined & validated. During
* this stage the target is examined and any additional setup is
@@ -211,9 +235,19 @@ typedef struct target_type_s
} target_type_t;
+// forward decloration
+typedef struct target_event_action_s target_event_action_t;
+
typedef struct target_s
{
target_type_t *type; /* target type definition (name, access functions) */
+ const char *cmd_name; /* tcl Name of target */
+ int target_number; /* generaly, target index but may not be in order */
+ int chain_position; /* where on the jtag chain is this */
+ const char *variant; /* what varient of this chip is it? */
+ enum target_reset_mode reset_mode; /* how should this target be reset */
+ target_event_action_t *event_action;
+
int reset_halt; /* attempt resetting the CPU into the halted mode? */
u32 working_area; /* working area (initialized RAM). Evaluated
upon first allocation from virtual/physical address. */
@@ -237,14 +271,36 @@ typedef struct target_s
enum target_event
{
- TARGET_EVENT_HALTED, /* target entered debug state from normal execution or reset */
- TARGET_EVENT_RESUMED, /* target resumed to normal execution */
- TARGET_EVENT_RESET, /* target entered reset */
- TARGET_EVENT_DEBUG_HALTED, /* target entered debug state, but was executing on behalf of the debugger */
- TARGET_EVENT_DEBUG_RESUMED, /* target resumed to execute on behalf of the debugger */
- TARGET_EVENT_GDB_PROGRAM /* target about to be be programmed by gdb */
+ TARGET_EVENT_HALTED, /* target entered debug state from normal execution or reset */
+ TARGET_EVENT_RESUMED, /* target resumed to normal execution */
+ TARGET_EVENT_RESUME_START,
+ TARGET_EVENT_RESUME_END,
+
+ TARGET_EVENT_RESET_START,
+ TARGET_EVENT_RESET, /* target entered reset */
+ TARGET_EVENT_RESET_INIT,
+ TARGET_EVENT_RESET_END,
+
+ TARGET_EVENT_DEBUG_HALTED, /* target entered debug state, but was executing on behalf of the debugger */
+ TARGET_EVENT_DEBUG_RESUMED, /* target resumed to execute on behalf of the debugger */
+
+ TARGET_EVENT_GDB_ATTACH,
+ TARGET_EVENT_GDB_DETACH,
+
+ TARGET_EVENT_GDB_FLASH_ERASE_START,
+ TARGET_EVENT_GDB_FLASH_ERASE_END,
+ TARGET_EVENT_GDB_FLASH_WRITE_START,
+ TARGET_EVENT_GDB_FLASH_WRITE_END,
};
+extern const Jim_Nvp nvp_target_event[];
+
+struct target_event_action_s {
+ enum target_event event;
+ Jim_Obj *body;
+ target_event_action_t *next;
+ };
+
typedef struct target_event_callback_s
{
int (*callback)(struct target_s *target, enum target_event event, void *priv);
@@ -314,15 +370,17 @@ extern int target_free_working_area_restore(struct target_s *target, working_are
extern int target_free_all_working_areas(struct target_s *target);
extern int target_free_all_working_areas_restore(struct target_s *target, int restore);
-extern target_t *targets;
+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, u8 *buffer);
extern u16 target_buffer_get_u16(target_t *target, u8 *buffer);
+extern u8 target_buffer_get_u8 (target_t *target, 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);
int target_read_u32(struct target_s *target, u32 address, u32 *value);
int target_read_u16(struct target_s *target, u32 address, u16 *value);
@@ -336,6 +394,7 @@ int target_arch_state(struct target_s *target);
int target_invoke_script(struct command_context_s *cmd_ctx, target_t *target, char *name);
+
#define ERROR_TARGET_INVALID (-300)
#define ERROR_TARGET_INIT_FAILED (-301)
#define ERROR_TARGET_TIMEOUT (-302)
@@ -346,5 +405,14 @@ int target_invoke_script(struct command_context_s *cmd_ctx, target_t *target, ch
#define ERROR_TARGET_RESOURCE_NOT_AVAILABLE (-308)
#define ERROR_TARGET_TRANSLATION_FAULT (-309)
#define ERROR_TARGET_NOT_RUNNING (-310)
+#define ERROR_TARGET_NOT_EXAMINED (-311)
#endif /* TARGET_H */
+
+
+/*
+ * Local Variables: ***
+ * c-basic-offset: 4 ***
+ * tab-width: 4 ***
+ * End: ***
+ */