summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorkc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-05-18 04:44:28 +0000
committerkc8apf <kc8apf@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2009-05-18 04:44:28 +0000
commitc977616cdad17ad74742ede8703f54e370c3947d (patch)
tree353069e20f067f73c3eba780cc53c393b26947c1 /src/target
parentcafad4969c306c87954c8bd681068932dae68a41 (diff)
downloadopenocd+libswd-c977616cdad17ad74742ede8703f54e370c3947d.tar.gz
openocd+libswd-c977616cdad17ad74742ede8703f54e370c3947d.tar.bz2
openocd+libswd-c977616cdad17ad74742ede8703f54e370c3947d.tar.xz
openocd+libswd-c977616cdad17ad74742ede8703f54e370c3947d.zip
Consolidate target selection code into single get_target() that handles both names and numbers. Provided by David Brownell <david-b@pacbell.net>
git-svn-id: svn://svn.berlios.de/openocd/trunk@1804 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target')
-rw-r--r--src/target/etb.c4
-rw-r--r--src/target/etm.c5
-rw-r--r--src/target/etm_dummy.c4
-rw-r--r--src/target/image.c7
-rw-r--r--src/target/target.c55
-rw-r--r--src/target/target.h2
-rw-r--r--src/target/target/ti_dm355.cfg7
-rw-r--r--src/target/xscale.c9
8 files changed, 50 insertions, 43 deletions
diff --git a/src/target/etb.c b/src/target/etb.c
index 5f6e648e..9a265ad5 100644
--- a/src/target/etb.c
+++ b/src/target/etb.c
@@ -372,11 +372,11 @@ static int handle_etb_config_command(struct command_context_s *cmd_ctx, char *cm
return ERROR_COMMAND_SYNTAX_ERROR;
}
- target = get_target_by_num(strtoul(args[0], NULL, 0));
+ target = get_target(args[0]);
if (!target)
{
- LOG_ERROR("target number '%s' not defined", args[0]);
+ LOG_ERROR("target '%s' not defined", args[0]);
return ERROR_FAIL;
}
diff --git a/src/target/etm.c b/src/target/etm.c
index c54087a0..5b83db89 100644
--- a/src/target/etm.c
+++ b/src/target/etm.c
@@ -1205,11 +1205,10 @@ static int handle_etm_config_command(struct command_context_s *cmd_ctx, char *cm
return ERROR_COMMAND_SYNTAX_ERROR;
}
- target = get_target_by_num(strtoul(args[0], NULL, 0));
-
+ target = get_target(args[0]);
if (!target)
{
- LOG_ERROR("target number '%s' not defined", args[0]);
+ LOG_ERROR("target '%s' not defined", args[0]);
return ERROR_FAIL;
}
diff --git a/src/target/etm_dummy.c b/src/target/etm_dummy.c
index ee4c3e69..4b84fd32 100644
--- a/src/target/etm_dummy.c
+++ b/src/target/etm_dummy.c
@@ -31,11 +31,11 @@ static int handle_etm_dummy_config_command(struct command_context_s *cmd_ctx, ch
armv4_5_common_t *armv4_5;
arm7_9_common_t *arm7_9;
- target = get_target_by_num(strtoul(args[0], NULL, 0));
+ target = get_target(args[0]);
if (!target)
{
- LOG_ERROR("target number '%s' not defined", args[0]);
+ LOG_ERROR("target '%s' not defined", args[0]);
return ERROR_FAIL;
}
diff --git a/src/target/image.c b/src/target/image.c
index 71939e79..d72680d1 100644
--- a/src/target/image.c
+++ b/src/target/image.c
@@ -711,10 +711,11 @@ int image_open(image_t *image, char *url, char *type_string)
}
else if (image->type == IMAGE_MEMORY)
{
- target_t *target = get_target_by_num(strtoul(url, NULL, 0));
- if (target==NULL)
+ target_t *target = get_target(url);
+
+ if (target == NULL)
{
- LOG_ERROR("Target '%s' does not exist", url);
+ LOG_ERROR("target '%s' not defined", url);
return ERROR_FAIL;
}
diff --git a/src/target/target.c b/src/target/target.c
index 3ec28284..7571e4e3 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -320,8 +320,36 @@ void target_buffer_set_u8(target_t *target, u8 *buffer, u8 value)
*buffer = value;
}
+/* return a pointer to a configured target; id is name or number */
+target_t *get_target(const char *id)
+{
+ target_t *target;
+ char *endptr;
+ int num;
+
+ /* try as tcltarget name */
+ for (target = all_targets; target; target = target->next) {
+ if (target->cmd_name == NULL)
+ continue;
+ if (strcmp(id, target->cmd_name) == 0)
+ return target;
+ }
+
+ /* no match, try as number */
+ num = strtoul(id, &endptr, 0);
+ if (*endptr != 0)
+ return NULL;
+
+ for (target = all_targets; target; target = target->next) {
+ if (target->target_number == num)
+ return target;
+ }
+
+ return NULL;
+}
+
/* returns a pointer to the n-th configured target */
-target_t* get_target_by_num(int num)
+static target_t *get_target_by_num(int num)
{
target_t *target = all_targets;
@@ -1333,35 +1361,16 @@ int target_register_user_commands(struct command_context_s *cmd_ctx)
static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
{
- char *cp;
target_t *target = all_targets;
if (argc == 1)
{
- /* try as tcltarget name */
- for( target = all_targets ; target ; target = target->next ){
- if( target->cmd_name ){
- if( 0 == strcmp( args[0], target->cmd_name ) ){
- /* MATCH */
- goto Match;
- }
- }
- }
- /* no match, try as number */
-
- int num = strtoul(args[0], &cp, 0 );
- if( *cp != 0 ){
- /* then it was not a number */
- command_print( cmd_ctx, "Target: %s unknown, try one of:\n", args[0] );
- goto DumpTargets;
- }
-
- target = get_target_by_num( num );
- if( target == NULL ){
+ target = get_target(args[0]);
+ if (target == NULL) {
command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] );
goto DumpTargets;
}
- Match:
+
cmd_ctx->current_target = target->target_number;
return ERROR_OK;
}
diff --git a/src/target/target.h b/src/target/target.h
index 4a6dde1a..1c1e10ef 100644
--- a/src/target/target.h
+++ b/src/target/target.h
@@ -371,7 +371,7 @@ extern int target_call_timer_callbacks_now(void);
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_by_num(int num);
+extern target_t *get_target(const char *id);
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);
diff --git a/src/target/target/ti_dm355.cfg b/src/target/target/ti_dm355.cfg
index acf4b304..e4de1a58 100644
--- a/src/target/target/ti_dm355.cfg
+++ b/src/target/target/ti_dm355.cfg
@@ -56,8 +56,5 @@ arm7_9 fast_memory_access enable
arm7_9 dcc_downloads enable
# trace setup
-# FIXME we ought to be able to say "... config $_TARGETNAME ..."
-# (not "config 0") facilitating additional targets (e.g. other chips)
-etm config 0 16 normal full etb
-etb config 0 $_CHIPNAME.etb
-
+etm config $_TARGETNAME 16 normal full etb
+etb config $_TARGETNAME $_CHIPNAME.etb
diff --git a/src/target/xscale.c b/src/target/xscale.c
index abdbe866..3947da0b 100644
--- a/src/target/xscale.c
+++ b/src/target/xscale.c
@@ -3147,9 +3147,9 @@ int xscale_handle_debug_handler_command(struct command_context_s *cmd_ctx, char
return ERROR_OK;
}
- if ((target = get_target_by_num(strtoul(args[0], NULL, 0))) == NULL)
+ if ((target = get_target(args[0])) == NULL)
{
- LOG_ERROR("no target '%s' configured", args[0]);
+ LOG_ERROR("target '%s' not defined", args[0]);
return ERROR_FAIL;
}
@@ -3187,9 +3187,10 @@ int xscale_handle_cache_clean_address_command(struct command_context_s *cmd_ctx,
return ERROR_COMMAND_SYNTAX_ERROR;
}
- if ((target = get_target_by_num(strtoul(args[0], NULL, 0))) == NULL)
+ target = get_target(args[0]);
+ if (target == NULL)
{
- LOG_ERROR("no target '%s' configured", args[0]);
+ LOG_ERROR("target '%s' not defined", args[0]);
return ERROR_FAIL;
}