From 74df79d4d86b503118ec904f72549ac3e9a8e469 Mon Sep 17 00:00:00 2001
From: zwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Sun, 31 May 2009 12:38:28 +0000
Subject: [PATCH] Final step in isolating target_type_s structure: - Move
 definition of 'struct target_type_s' into new 'target_type.h' file. - Forward
 delclaration remains in target.h, with comment pointing to new file. -
 Replaces #define with #include in source files.

git-svn-id: svn://svn.berlios.de/openocd/trunk@1971 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/target/Makefile.am      |   1 +
 src/target/arm11.c          |   2 +-
 src/target/arm720t.c        |   2 +-
 src/target/arm7tdmi.c       |   2 +-
 src/target/arm920t.c        |   2 +-
 src/target/arm926ejs.c      |   2 +-
 src/target/arm966e.c        |   2 +-
 src/target/arm9tdmi.c       |   2 +-
 src/target/avrt.c           |   2 +-
 src/target/cortex_a8.c      |   2 +-
 src/target/cortex_m3.c      |   2 +-
 src/target/feroceon.c       |   2 +-
 src/target/mips_m4k.c       |   2 +-
 src/target/target.c         |   3 +-
 src/target/target.h         | 158 +---------------------------------
 src/target/target_request.c |   2 +-
 src/target/target_type.h    | 163 ++++++++++++++++++++++++++++++++++++
 src/target/xscale.c         |   2 +-
 18 files changed, 180 insertions(+), 173 deletions(-)
 create mode 100644 src/target/target_type.h

diff --git a/src/target/Makefile.am b/src/target/Makefile.am
index 132ac50b3..f28561de1 100644
--- a/src/target/Makefile.am
+++ b/src/target/Makefile.am
@@ -55,6 +55,7 @@ libtarget_la_SOURCES = \
 
 noinst_HEADERS = \
 	target.h \
+	target_type.h \
 	trace.h \
 	register.h \
 	armv4_5.h \
diff --git a/src/target/arm11.c b/src/target/arm11.c
index e9ba1f678..e4f53f1a7 100644
--- a/src/target/arm11.c
+++ b/src/target/arm11.c
@@ -26,8 +26,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm11.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm720t.c b/src/target/arm720t.c
index 668f2f5e4..f99ba61be 100644
--- a/src/target/arm720t.c
+++ b/src/target/arm720t.c
@@ -21,9 +21,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm720t.h"
 #include "time_support.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c
index 4c86f4a78..69910f4c8 100644
--- a/src/target/arm7tdmi.c
+++ b/src/target/arm7tdmi.c
@@ -27,8 +27,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm7tdmi.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm920t.c b/src/target/arm920t.c
index 21fc46af7..15f6378f3 100644
--- a/src/target/arm920t.c
+++ b/src/target/arm920t.c
@@ -21,9 +21,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm920t.h"
 #include "time_support.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm926ejs.c b/src/target/arm926ejs.c
index b643a213d..5996d089c 100644
--- a/src/target/arm926ejs.c
+++ b/src/target/arm926ejs.c
@@ -21,9 +21,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm926ejs.h"
 #include "time_support.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm966e.c b/src/target/arm966e.c
index 7f39d3a76..425cf6673 100644
--- a/src/target/arm966e.c
+++ b/src/target/arm966e.c
@@ -24,8 +24,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm966e.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/arm9tdmi.c b/src/target/arm9tdmi.c
index 2edeea546..eb743b127 100644
--- a/src/target/arm9tdmi.c
+++ b/src/target/arm9tdmi.c
@@ -27,8 +27,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm9tdmi.h"
+#include "target_type.h"
 
 
 #if 0
diff --git a/src/target/avrt.c b/src/target/avrt.c
index db6c101d6..a0b271139 100644
--- a/src/target/avrt.c
+++ b/src/target/avrt.c
@@ -21,9 +21,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "avrt.h"
 #include "target.h"
+#include "target_type.h"
 
 
 #define AVR_JTAG_INS_LEN	4
diff --git a/src/target/cortex_a8.c b/src/target/cortex_a8.c
index 9d62b0152..025eb45f8 100644
--- a/src/target/cortex_a8.c
+++ b/src/target/cortex_a8.c
@@ -33,9 +33,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "cortex_a8.h"
 #include "target_request.h"
+#include "target_type.h"
 
 
 /* cli handling */
diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c
index fe14cd9e5..33bfd6ab0 100644
--- a/src/target/cortex_m3.c
+++ b/src/target/cortex_m3.c
@@ -31,9 +31,9 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "cortex_m3.h"
 #include "target_request.h"
+#include "target_type.h"
 
 
 /* cli handling */
diff --git a/src/target/feroceon.c b/src/target/feroceon.c
index 38cd0b064..a6b020220 100644
--- a/src/target/feroceon.c
+++ b/src/target/feroceon.c
@@ -49,8 +49,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "arm926ejs.h"
+#include "target_type.h"
 
 
 int feroceon_examine(struct target_s *target);
diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c
index fb4729665..7af40c12b 100644
--- a/src/target/mips_m4k.c
+++ b/src/target/mips_m4k.c
@@ -23,10 +23,10 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "mips32.h"
 #include "mips_m4k.h"
 #include "mips32_dmaacc.h"
+#include "target_type.h"
 
 
 /* cli handling */
diff --git a/src/target/target.c b/src/target/target.c
index d06c317e8..ece03a3a7 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -33,9 +33,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
-
 #include "target.h"
+#include "target_type.h"
 #include "target_request.h"
 #include "time_support.h"
 #include "register.h"
diff --git a/src/target/target.h b/src/target/target.h
index dc871bf20..41b6f4dd4 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -105,164 +105,8 @@ typedef struct working_area_s
 	struct working_area_s *next;
 } working_area_t;
 
-#ifdef DEFINE_TARGET_TYPE_S
-struct target_type_s
-{
-	/**
-	 * Name of the target.  Do @b not access this field directly, use
-	 * target_get_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_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.  Do @b not call this function
-	 * directly, use target_get_gdb_reg_list() instead.
-	 *
-	 * 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 bytes, optimized for
-	 * writing large quantities of data.  Do @b not call this
-	 * function directly, use target_bulk_write_memory() instead.
-	 */
-	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);
-
-};
-#else
+// target_type.h contains the full definitionof struct target_type_s
 struct target_type_s;
-#endif // DEFINE_TARGET_TYPE_S
 typedef struct target_type_s target_type_t;
 
 /* forward decloration */
diff --git a/src/target/target_request.c b/src/target/target_request.c
index 30c0c7610..202701fac 100644
--- a/src/target/target_request.c
+++ b/src/target/target_request.c
@@ -27,8 +27,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "target_request.h"
+#include "target_type.h"
 #include "binarybuffer.h"
 #include "trace.h"
 #include "log.h"
diff --git a/src/target/target_type.h b/src/target/target_type.h
new file mode 100644
index 000000000..6936bb72d
--- /dev/null
+++ b/src/target/target_type.h
@@ -0,0 +1,163 @@
+#ifndef TARGET_TYPE_H
+#define TARGET_TYPE_H
+
+#include "types.h"
+
+struct target_s;
+
+struct target_type_s
+{
+	/**
+	 * Name of the target.  Do @b not access this field directly, use
+	 * target_get_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_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.  Do @b not call this function
+	 * directly, use target_get_gdb_reg_list() instead.
+	 *
+	 * 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 bytes, optimized for
+	 * writing large quantities of data.  Do @b not call this
+	 * function directly, use target_bulk_write_memory() instead.
+	 */
+	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);
+
+};
+
+#endif // TARGET_TYPE_H
diff --git a/src/target/xscale.c b/src/target/xscale.c
index a375608d1..7838e50e6 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -24,8 +24,8 @@
 #include "config.h"
 #endif
 
-#define DEFINE_TARGET_TYPE_S
 #include "xscale.h"
+#include "target_type.h"
 #include "arm7_9_common.h"
 #include "arm_simulator.h"
 #include "arm_disassembler.h"
-- 
GitLab