First step in hiding target_type_s from public interface:
[fw/openocd] / src / target / target.c
index 71eb9d2b104f4c67348f4daea369df7cb9c333ba..d06c317e830d349fe7dc56398fe2e245b6cb4e96 100644 (file)
@@ -33,6 +33,8 @@
 #include "config.h"
 #endif
 
+#define DEFINE_TARGET_TYPE_S
+
 #include "target.h"
 #include "target_request.h"
 #include "time_support.h"
@@ -384,7 +386,7 @@ target_t* get_current_target(command_context_t *cmd_ctx)
 int target_poll(struct target_s *target)
 {
        /* We can't poll until after examine */
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                /* Fail silently lest we pollute the log */
                return ERROR_FAIL;
@@ -395,7 +397,7 @@ int target_poll(struct target_s *target)
 int target_halt(struct target_s *target)
 {
        /* We can't poll until after examine */
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -408,7 +410,7 @@ int target_resume(struct target_s *target, int current, u32 address, int handle_
        int retval;
 
        /* We can't poll until after examine */
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -463,10 +465,15 @@ static int default_mmu(struct target_s *target, int *enabled)
 
 static int default_examine(struct target_s *target)
 {
-       target->type->examined = 1;
+       target_set_examined(target);
        return ERROR_OK;
 }
 
+int target_examine_one(struct target_s *target)
+{
+       return target->type->examine(target);
+}
+
 /* Targets that correctly implement init+examine, i.e.
  * no communication with target during init:
  *
@@ -478,16 +485,20 @@ int target_examine(void)
        target_t *target = all_targets;
        while (target)
        {
-               if ((retval = target->type->examine(target))!=ERROR_OK)
+               if ((retval = target_examine_one(target)) != ERROR_OK)
                        return retval;
                target = target->next;
        }
        return retval;
 }
+const char *target_get_name(struct target_s *target)
+{
+       return target->type->name;
+}
 
 static int target_write_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer)
 {
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -497,7 +508,7 @@ static int target_write_memory_imp(struct target_s *target, u32 address, u32 siz
 
 static int target_read_memory_imp(struct target_s *target, u32 address, u32 size, u32 count, u8 *buffer)
 {
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -507,7 +518,7 @@ static int target_read_memory_imp(struct target_s *target, u32 address, u32 size
 
 static int target_soft_reset_halt_imp(struct target_s *target)
 {
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -517,7 +528,7 @@ static int target_soft_reset_halt_imp(struct target_s *target)
 
 static int target_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)
 {
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -536,6 +547,45 @@ int target_write_memory(struct target_s *target,
 {
        return target->type->write_memory(target, address, size, count, buffer);
 }
+int target_bulk_write_memory(struct target_s *target,
+               u32 address, u32 count, u8 *buffer)
+{
+       return target->type->bulk_write_memory(target, address, count, buffer);
+}
+
+int target_add_breakpoint(struct target_s *target,
+               struct breakpoint_s *breakpoint)
+{
+       return target->type->add_breakpoint(target, breakpoint);
+}
+int target_remove_breakpoint(struct target_s *target,
+               struct breakpoint_s *breakpoint)
+{
+       return target->type->remove_breakpoint(target, breakpoint);
+}
+
+int target_add_watchpoint(struct target_s *target,
+               struct watchpoint_s *watchpoint)
+{
+       return target->type->add_watchpoint(target, watchpoint);
+}
+int target_remove_watchpoint(struct target_s *target,
+               struct watchpoint_s *watchpoint)
+{
+       return target->type->remove_watchpoint(target, watchpoint);
+}
+
+int target_get_gdb_reg_list(struct target_s *target,
+               struct reg_s **reg_list[], int *reg_list_size)
+{
+       return target->type->get_gdb_reg_list(target, reg_list, reg_list_size);
+}
+int target_step(struct target_s *target,
+               int current, u32 address, int handle_breakpoints)
+{
+       return target->type->step(target, current, address, handle_breakpoints);
+}
+
 
 int target_run_algorithm(struct target_s *target,
                int num_mem_params, mem_param_t *mem_params,
@@ -548,6 +598,22 @@ int target_run_algorithm(struct target_s *target,
                        entry_point, exit_point, timeout_ms, arch_info);
 }
 
+/// @returns @c true if the target has been examined.
+bool target_was_examined(struct target_s *target)
+{
+       return target->type->examined;
+}
+/// Sets the @c examined flag for the given target.
+void target_set_examined(struct target_s *target)
+{
+       target->type->examined = true;
+}
+// Reset the @c examined flag for the given target.
+void target_reset_examined(struct target_s *target)
+{
+       target->type->examined = false;
+}
+
 
 int target_init(struct command_context_s *cmd_ctx)
 {
@@ -556,7 +622,7 @@ int target_init(struct command_context_s *cmd_ctx)
 
        while (target)
        {
-               target->type->examined = 0;
+               target_reset_examined(target);
                if (target->type->examine == NULL)
                {
                        target->type->examine = default_examine;
@@ -564,7 +630,7 @@ int target_init(struct command_context_s *cmd_ctx)
 
                if ((retval = target->type->init_target(cmd_ctx, target)) != ERROR_OK)
                {
-                       LOG_ERROR("target '%s' init failed", target->type->name);
+                       LOG_ERROR("target '%s' init failed", target_get_name(target));
                        return retval;
                }
 
@@ -1003,7 +1069,7 @@ int target_write_buffer(struct target_s *target, u32 address, u32 size, u8 *buff
        int retval;
        LOG_DEBUG("writing buffer of %i byte at 0x%8.8x", size, address);
 
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1082,7 +1148,7 @@ int target_read_buffer(struct target_s *target, u32 address, u32 size, u8 *buffe
        int retval;
        LOG_DEBUG("reading buffer of %i byte at 0x%8.8x", size, address);
 
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1149,7 +1215,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
        int retval;
        u32 i;
        u32 checksum = 0;
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1191,7 +1257,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
 int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u32* blank)
 {
        int retval;
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1208,7 +1274,7 @@ int target_blank_check_memory(struct target_s *target, u32 address, u32 size, u3
 int target_read_u32(struct target_s *target, u32 address, u32 *value)
 {
        u8 value_buf[4];
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1233,7 +1299,7 @@ int target_read_u32(struct target_s *target, u32 address, u32 *value)
 int target_read_u16(struct target_s *target, u32 address, u16 *value)
 {
        u8 value_buf[2];
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1258,7 +1324,7 @@ 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 retval = target_read_memory(target, address, 1, 1, value);
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1281,7 +1347,7 @@ int target_write_u32(struct target_s *target, u32 address, u32 value)
 {
        int retval;
        u8 value_buf[4];
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1302,7 +1368,7 @@ int target_write_u16(struct target_s *target, u32 address, u16 value)
 {
        int retval;
        u8 value_buf[2];
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1322,7 +1388,7 @@ 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 retval;
-       if (!target->type->examined)
+       if (!target_was_examined(target))
        {
                LOG_ERROR("Target not examined yet");
                return ERROR_FAIL;
@@ -1417,7 +1483,7 @@ DumpTargets:
                command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %10d %14s %s",
                                          target->target_number,
                                          target->cmd_name,
-                                         target->type->name,
+                                         target_get_name(target),
                                          Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name,
                                          target->tap->abs_chain_position,
                                          target->tap->dotted_name,
@@ -3097,7 +3163,7 @@ void target_handle_event( target_t *target, enum target_event e )
                        LOG_DEBUG( "target: (%d) %s (%s) event: %d (%s) action: %s\n",
                                           target->target_number,
                                           target->cmd_name,
-                                          target->type->name,
+                                          target_get_name(target),
                                           e,
                                           Jim_Nvp_value2name_simple( nvp_target_event, e )->name,
                                           Jim_GetString( teap->body, NULL ) );
@@ -3186,7 +3252,7 @@ static int target_configure( Jim_GetOptInfo *goi, target_t *target )
                                        return JIM_ERR;
                                }
                        }
-                       Jim_SetResultString( goi->interp, target->type->name, -1 );
+                       Jim_SetResultString( goi->interp, target_get_name(target), -1 );
                        /* loop for more */
                        break;
                case TCFG_EVENT:
@@ -3682,7 +3748,7 @@ static int tcl_target_func( Jim_Interp *interp, int argc, Jim_Obj *const *argv )
                        Jim_WrongNumArgs( goi.interp, 2, argv, "[no parameters]");
                        return JIM_ERR;
                }
-               if( !(target->type->examined) ){
+               if( !(target_was_examined(target)) ){
                        e = ERROR_TARGET_NOT_EXAMINED;
                } else {
                        e = target->type->poll( target );