From 5ac8036b7fdaa32d44fb756f46f60d8de33e3a50 Mon Sep 17 00:00:00 2001 From: oharboe Date: Mon, 1 Sep 2008 07:24:14 +0000 Subject: [PATCH] Removed target->reset_mode, no longer used git-svn-id: svn://svn.berlios.de/openocd/trunk@976 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- doc/README_TARGET_COMMAND.txt | 427 ++++++++++++++++++++++++++++++++++ src/target/target.c | 164 ++++++------- src/target/target.h | 1 - 3 files changed, 496 insertions(+), 96 deletions(-) create mode 100644 doc/README_TARGET_COMMAND.txt diff --git a/doc/README_TARGET_COMMAND.txt b/doc/README_TARGET_COMMAND.txt new file mode 100644 index 00000000..b02e4881 --- /dev/null +++ b/doc/README_TARGET_COMMAND.txt @@ -0,0 +1,427 @@ +To be incorporated in openocd.texi... + + +== +Current as of Aug 30, 2008 - Duane Ellis +== + +=================================================== +Overview - History + + Pre "tcl" - many commands in openocd where implimented as C + functions. Post "tcl" (Jim-Tcl to be more exact, June 2008 ...) TCL + became a bigger part of OpenOCD. + +One of the biggest changes is the introduction of 'target specific' +commands. When every you create a target, a special command name is +created specifically for that target. + + For example - in Tcl/Tk - if you create a button (or any other + screen object) you can specify various "button configuration + parameters". One of those parameters is the "object cmd/name" + [ In TK - this is refered to as the object path ]. Later you + can use that 'path' as a command to modify the button, for + example to make it "grey", or change the color. + +In effect, the "path" function is an 'object oriented command' + +The TCL change in OpenOCD follows the same principle, you create a +target, and a specific "targetname" command is created. + +There are two methods of creating a target. + + (1) Depricated: Using the old syntax Target names are autogenerated + as: "target0", "target1" etc.. + + (2) Using the new syntax, you can specify the name of the target. + +As most users will have a single JTAG target, and by default the +command name will probably default to "target0", thus for reasons of +simplicity the instructions below use the name 'target0' + +Overview - History *END* +================================================== + +OpenOCD has the following 'target' or 'target-like' commands. + +(1) targets -(plural) lists all known targets and a little bit of + information about each target, most importantly the target + *COMMAND*NAME* (it also lists the target number) + +(2) target -(singular) used to create, configure list, etc the targets + +(3) target0 - the command object for the first target. + Unless you specified another name. + +=================================================== + +The "targets" (plural, 1 above) command has 2 functions. + +With a parameter, you can change the current command line target. + + NOTE: "with a parameter" is really only useful with 'multiple + jtag targets' not something you normally encounter (ie: If you + had 2 arm chips - sharing the same JTAG chain) + + # using a target name.. + (gdb) mon targets target0 + # or a target by number. + (gdb) mon targets 3 + +Or - plain, without any parameter lists targets, for example: + + (gdb) mon targets + CmdName Type Endian ChainPos State + -- ---------- ---------- ---------- -------- ---------- + 0: target0 arm7tdmi little 0 halted + +This shows: + (a) in this example, a single target + (b) target number 0 (1st column) + (c) the 'object name' is target0 (the default name) + (d) it is an arm7tdmi + (e) little endian + (f) The position in the JTAG chain + (g) and is currently halted. + +==================================================== + +The "target" (singular, 2 above) command has the following options: + + target create CMDNAME TYPE ... config options ... + argv[0] = 'target' + argv[1] = 'create' + argv[2] = the 'object command' + (normally, target0, see (3) above) + argv[3] = the target type, ie: arm7tdmi + argv[4..N] = configuration parameters + + target types + Lists all supported target types. + ie: arm7tdmi, xscale, fericon, cortex-m3 + + The result TCL List of all known target types (and is human + readable) + + target names + + Returns a TCL list of all known target commands (and is + human readable) + + Example: + foreach t [target names] { + puts [format "Target: %s\n" $t] + } + + + target current + + Returns the TCL command name of the current target. + + Example: + set ct [target current] + set t [$ct cget -type] + + puts "Current target name is: $ct, and is a: $t" + + + target number + + Returns the TCL command name of the specified target. + For example + + set thename [target number $x] + puts [format "Target %d is: %s\n" $x $thename] + + For instance, assuming the defaults + + target number 0 + + Would return 'target0' (or whatever you called it) + + target count + + Returns the larget+1 target number. + For example: + + set c [target count] + for { set x 0 } { $x < $c } { incr x } { + # Assuming you have this function.. + print_target_details $x + } + +==================================================== + +"target0" - (#3 above) the "Target Object" command. + + Once a target is 'created' a command object by that targets name is + created, for example + + target create BiGRed arm7tdmi -endian little -chain-position 3 + +Would create a [case sensative] "command" BiGRed + +If you use the old [deprecated] syntax, the name is automatically +generated and is in the form: + + target0, target1, target2, target3, .... etc. + +==================================================== + +** Target CREATE, CONFIGURE and CGET options ** + +The commands: + + target create CMDNAME TYPE [configure-options] + CMDNAME configure [configure-options] + CMDNAME cget [configure-options] + +In the 'create' case, one is creating the target and can specify any +number of configuration parameters. + +In the 'CMDNAME cget' case, the goal is to query the target for a +specific configuration option. + +In the 'CMDNAME configure' case, one can change the setting. +[Not all things can, or should be changed] + +In the above, the "default" name target0 is 'target0' + +Example: + + From the (gdb) prompt, one can type this: + + (gdb) mon target0 configure -endian big + + And change target0 to 'big-endian'. This is a contrived example, + specifically for this document - don't expect changing endian + 'mid-operation' to work you should set the endian at creation. + +Known options [30/august/2008] are: + +[Manditory 'create' Options] + -type arm7tdmi|arm720|etc ... + -chain-position NUMBER + -endian ENDIAN + +Optional + + -event EVENTNAME "tcl-action" + -reset RESETACTION + -work-area-virt ADDR + -work-area-phys ADDR + -work-area-size ADDR + -work-area-backup BOOLEAN + +[Hint: To get a list of avaialable options, try this] + + (gdb) mon target0 cget -BLAHBLAHBLAH + + the abov causes an error - and a helpful list of valid options. + +================================================== +** Example Target Configure Query ** + +One can query any of the above options at run time, for example: + + (gdb) mon target0 cget -OPTION [param] + +Example TCL script + + # For all targets... + set c [target count] + for { set x 0 } { $x < $c } { incr x ] { + set n [target number $x] + set t [$n cget -type] + set e [$n cget -endian] + puts [format "%d: %s, %s, endian: %s\n" $x $n $t $n] + } + +Might produce: + 0: pic32chip, mips_m4k, endain: little + 1: arm7, arm7tdmi, endian: big + 2: blackfin, bf534, endian: little + +Notice the above example is not target0, target1, target2 Why? Because +in this contrived multi-target example - more human understandable +target names might be helpful. + +For example these two are the same: + + (gdb) mon blackfin configure -event FOO {puts "Hi mom"} + +or: + (gdb) mon [target number 2] configure -event FOO {puts "Hi mom"} + +In the second case, we use [] to get the command name of target #2, in +this contrived example - it is "blackfin" + +==================================================== +** TWO Important Configure Options Are: ** + +Two important configuration options are: + + "-event" and "-reset" + +The "-reset" option specifies what should happen when the chip is +reset, for example should it 'halt', 're-init', or what. + +The "-event" option less you specifiy a TCL command to occur when a +specific event occurs. + +==================================================== +** Target Events * Overview ** + +At various points in time - certian 'target' events happen. You can +create a custom event action to occur at that time. + +For example - after reset, the PLLs and CLOCKs may need to be +reconfigured, or perhaps the SDRAM needs to be re-initialized + +Often the easiest way to do that is to create a simple script file +containing the series of (mww [poke memory]) commands you would type +by hand, to reconfigure the target clocks. You could specify the +"event action" like this: + + (gdb) mon target0 configure -event reset-init "script cfg.clocks" + +In the above example, when the event "reset-init" occurs, the +"action-string" will be evaluated as if you typed it at the console + +Option1 - + + The simple approach (above) is to create a script file with + lots of "mww" (memory write word) commands to configure your + targets clocks and/or external memory. + +Option2 - + + You can instead create a fancy Tcl procedure and invoke that + procedure instead of sourcing a file. + + [Infact, "script" is a TCL procedure that loads a file] + +================================================== + +** Target Events * Details ** + +There are many events one could use, to get a current list of events +type the following invalid command, you'll get a helpful "runtime +error" message, see below: [list valid as of 30/august/2008] + + (gdb) mon target0 cget -event FAFA + +Runtime error, file "../../../openocd23/src/helper/command.c", line 433: + -event: Unknown: FAFA, try one of: old-pre_reset, + old-gdb_program_config, old-post_reset, halted, + resumed, resume-start, resume-end, reset-start, + reset-assert-pre, reset-assert-post, + reset-deassert-pre, reset-deassert-post, + reset-halt-pre, reset-halt-post, reset-wait-pre, + reset-wait-post, reset-init, reset-end, + examine-start, examine-end, debug-halted, + debug-resumed, gdb-attach, gdb-detach, + gdb-flash-write-start, gdb-flash-write-end, + gdb-flash-erase-start, gdb-flash-erase-end, + resume-start, resume-ok, or resume-end + +NOTE: + + The event-names "old-*" are deprecated and exist only to help old + scripts continue to function, and the old "target_script" command + to work. Please do not rely on them. + +These are some other important names. + + gdb-flash-erase-start + gdb-flash-erase-end + gdb-flash-write-start + gdb-flash-write-end + + These occur when GDB/OpenOCD attempts to erase & program the FLASH + chip via GDB. + + For example - some PCBs may have a simple GPIO pin that acts like + a "flash write protect" you might need to write a script that + disables "write protect" + +================================================== + +** How to get a list of current event actions ** + +To get a list of current 'event actions', type the following command: + + (gdb) mon target0 eventlist + + Event actions for target (0) target0 + + Event | Body + ------------------------- | ---------------------------------------- + old-post_reset | script event/sam7x256_reset.script + ***END*** + +Here is a simple example for all targets: + + (gdb) mon foreach x [target names] { $x eventlist } + +The above uses some TCL tricks: + + (a) foreach VARIABLE LIST BODY + + (b) to generate the list, we use [target names] + + (c) the BODY, contains $x - the loop variable + and expands to the target specific name + +==================================================== + +Recalling the earlier discussion - the "object command" there are +other things you can do besides "configure" the target. + +Note: Many of these commands exist as "global" commands, and they also +exist as target specific commands. + +For example, the "mww" (memory write word) operates on the current target +if you have more then 1 target, you must switch + +In contrast to the normal commands, these commands operate on the +specific target. For example, the command "mww" writes data to the +*current* command line target. + +Often, you have only a single target - but if you have multiple +targets (ie: a PIC32 and an at91sam7 - your reset-init scripts might +get a bit more complicated, ie: you must specify which of the two +chips you want to write to. Writing 'pic32' clock configuration to an +at91sam7 does not work) + +The commands are: [as of 30/august/2008] + + TNAME mww ADDRESS VALUE + TNAME mwh ADDRESS VALUE + TNAME mwb ADDRESS VALUE + Write(poke): 32, 16, 8bit values to memory. + + TNAME mdw ADDRESS VALUE + TNAME mdh ADDRESS VALUE + TNAME mdb ADDRESS VALUE + Human 'hexdump' with ascii 32, 16, 8bit values + + TNAME mem2array [see mem2array command] + TNAME array2mem [see array2mem command] + + TNAME curstate + Returns the current state of the target. + + + TNAME examine + See 'advanced target reset' + TNAME poll + See 'advanced target reset' + TNAME reset assert + See 'advanced target reset' + TNAME reset deassert + See 'advanced target reset' + TNAME halt + See 'advanced target reset' + TNAME waitstate STATENAME + See 'advanced target reset' diff --git a/src/target/target.c b/src/target/target.c index 08a0505f..ee65147c 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -160,7 +160,7 @@ const Jim_Nvp nvp_target_event[] = { { .value = TARGET_EVENT_OLD_gdb_program_config , .name = "old-gdb_program_config" }, { .value = TARGET_EVENT_OLD_post_reset , .name = "old-post_reset" }, { .value = TARGET_EVENT_OLD_pre_resume , .name = "old-pre_resume" }, - + { .value = TARGET_EVENT_HALTED, .name = "halted" }, { .value = TARGET_EVENT_RESUMED, .name = "resumed" }, @@ -188,7 +188,7 @@ const Jim_Nvp nvp_target_event[] = { { .value = TARGET_EVENT_EXAMINE_START, .name = "examine-start" }, { .value = TARGET_EVENT_EXAMINE_START, .name = "examine-end" }, - + { .value = TARGET_EVENT_DEBUG_HALTED, .name = "debug-halted" }, { .value = TARGET_EVENT_DEBUG_RESUMED, .name = "debug-resumed" }, @@ -342,7 +342,7 @@ target_t* get_target_by_num(int num) while (target){ if( target->target_number == num ){ return target; - } + } target = target->next; } @@ -758,8 +758,8 @@ int target_call_event_callbacks(target_t *target, enum target_event event) target_event_callback_t *callback = target_event_callbacks; target_event_callback_t *next_callback; - LOG_DEBUG("target event %i (%s)", - event, + LOG_DEBUG("target event %i (%s)", + event, Jim_Nvp_value2name_simple( nvp_target_event, event )->name ); target_handle_event( target, event ); @@ -1000,7 +1000,7 @@ int target_arch_state(struct target_s *target) return ERROR_OK; } - LOG_USER("target state: %s", + LOG_USER("target state: %s", Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name); if (target->state!=TARGET_HALTED) @@ -1394,18 +1394,18 @@ int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char ** 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 ){ command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] ); @@ -1422,11 +1422,11 @@ int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd, char ** while (target) { /* XX: abcdefghij abcdefghij abcdefghij abcdefghij */ - command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %8d %s", + command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %8d %s", target->target_number, target->cmd_name, - target->type->name, - Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name, + target->type->name, + Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name, target->chain_position, Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); target = target->next; @@ -1689,14 +1689,14 @@ int target_wait_state(target_t *target, enum target_state state, int ms) if (once) { once=0; - LOG_DEBUG("waiting for target %s...", + LOG_DEBUG("waiting for target %s...", Jim_Nvp_value2name_simple(nvp_target_state,state)->name); } gettimeofday(&now, NULL); if ((now.tv_sec > timeout.tv_sec) || ((now.tv_sec == timeout.tv_sec) && (now.tv_usec >= timeout.tv_usec))) { - LOG_ERROR("timed out while waiting for target %s", + LOG_ERROR("timed out while waiting for target %s", Jim_Nvp_value2name_simple(nvp_target_state,state)->name); return ERROR_FAIL; } @@ -2801,7 +2801,7 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv) { command_context_t *context; target_t *target; - + context = Jim_GetAssocData(interp, "context"); if (context == NULL){ LOG_ERROR("array2mem: no command context"); @@ -2812,10 +2812,10 @@ static int jim_array2mem(Jim_Interp *interp, int argc, Jim_Obj *const *argv) LOG_ERROR("array2mem: no current target"); return JIM_ERR; } - + return target_array2mem( interp,target, argc, argv ); } - + static int target_array2mem(Jim_Interp *interp, target_t *target, int argc, Jim_Obj *const *argv) { @@ -2955,7 +2955,7 @@ target_all_handle_event( enum target_event e ) target_t *target; - LOG_DEBUG( "**all*targets: event: %d, %s", + LOG_DEBUG( "**all*targets: event: %d, %s", e, Jim_Nvp_value2name_simple( nvp_target_event, e )->name ); @@ -2990,7 +2990,7 @@ target_handle_event( target_t *target, enum target_event e ) teap = teap->next; } if( !done ){ - LOG_DEBUG( "event: %d %s - no action", + LOG_DEBUG( "event: %d %s - no action", e, Jim_Nvp_value2name_simple( nvp_target_event, e )->name ); } @@ -2998,7 +2998,7 @@ target_handle_event( target_t *target, enum target_event e ) enum target_cfg_param { TCFG_TYPE, - TCFG_EVENT, + TCFG_EVENT, TCFG_RESET, TCFG_WORK_AREA_VIRT, TCFG_WORK_AREA_PHYS, @@ -3021,10 +3021,10 @@ static Jim_Nvp nvp_config_opts[] = { { .name = "-endian" , .value = TCFG_ENDIAN }, { .name = "-variant", .value = TCFG_VARIANT }, { .name = "-chain-position", .value = TCFG_CHAIN_POSITION }, - + { .name = NULL, .value = -1 } }; - + static int target_configure( Jim_GetOptInfo *goi, @@ -3093,7 +3093,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc == 0 ){ Jim_WrongNumArgs( goi->interp, goi->argc, goi->argv, "-event ?event-name? ?EVENT-BODY?"); return JIM_ERR; - } + } } else { if( goi->argc != 0 ){ Jim_WrongNumArgs(goi->interp, goi->argc, goi->argv, "-event ?event-name?"); @@ -3101,10 +3101,10 @@ target_configure( Jim_GetOptInfo *goi, } } - - { + + { target_event_action_t *teap; - + teap = target->event_action; /* replace existing? */ while( teap ){ @@ -3113,7 +3113,7 @@ target_configure( Jim_GetOptInfo *goi, } teap = teap->next; } - + if( goi->isconfigure ){ if( teap == NULL ){ /* create new */ @@ -3126,7 +3126,7 @@ target_configure( Jim_GetOptInfo *goi, } teap->body = Jim_DuplicateObj( goi->interp, o ); /* - * FIXME: + * FIXME: * Tcl/TK - "tk events" have a nice feature. * See the "BIND" command. * We should support that here. @@ -3153,32 +3153,6 @@ target_configure( Jim_GetOptInfo *goi, /* loop for more */ break; - case TCFG_RESET: - if( goi->isconfigure ){ - e = Jim_GetOpt_Nvp( goi, nvp_reset_modes, &n ); - if( e != JIM_OK ){ - Jim_GetOpt_NvpUnknown( goi, nvp_reset_modes, 1 ); - return e; - } - if( n->value == RESET_UNKNOWN ){ - Jim_SetResultString( interp, "'unknown' is not a valid selection",-1); - return JIM_ERR; - } - target->reset_mode = n->value; - } else { - if( goi->argc != 0 ){ - goto no_params; - } - } - n = Jim_Nvp_value2name_simple( nvp_reset_modes, target->reset_mode ); - if( n->name == NULL ){ - target->reset_mode = RESET_HALT; - n = Jim_Nvp_value2name_simple( nvp_reset_modes, target->reset_mode ); - } - Jim_SetResultString( goi->interp, n->name, -1 ); - /* loop for more */ - break; - case TCFG_WORK_AREA_VIRT: if( goi->isconfigure ){ target_free_all_working_areas(target); @@ -3191,11 +3165,11 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_virt ) ); /* loop for more */ break; - + case TCFG_WORK_AREA_PHYS: if( goi->isconfigure ){ target_free_all_working_areas(target); @@ -3208,7 +3182,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_phys ) ); /* loop for more */ break; @@ -3225,7 +3199,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_size ) ); /* loop for more */ break; @@ -3243,7 +3217,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->working_area_size ) ); /* loop for more e*/ break; @@ -3265,7 +3239,7 @@ target_configure( Jim_GetOptInfo *goi, if( n->name == NULL ){ target->endianness = TARGET_LITTLE_ENDIAN; n = Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness ); - } + } Jim_SetResultString( goi->interp, n->name, -1 ); /* loop for more */ break; @@ -3287,7 +3261,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResultString( goi->interp, target->variant,-1 ); /* loop for more */ break; @@ -3304,7 +3278,7 @@ target_configure( Jim_GetOptInfo *goi, if( goi->argc != 0 ){ goto no_params; } - } + } Jim_SetResult( interp, Jim_NewIntObj( goi->interp, target->chain_position ) ); /* loop for more e*/ break; @@ -3318,7 +3292,7 @@ target_configure( Jim_GetOptInfo *goi, /** this is the 'tcl' handler for the target specific command */ static int tcl_target_func( Jim_Interp *interp, - int argc, + int argc, Jim_Obj *const *argv ) { Jim_GetOptInfo goi; @@ -3334,12 +3308,12 @@ tcl_target_func( Jim_Interp *interp, enum { TS_CMD_CONFIGURE, TS_CMD_CGET, - + TS_CMD_MWW, TS_CMD_MWH, TS_CMD_MWB, TS_CMD_MDW, TS_CMD_MDH, TS_CMD_MDB, TS_CMD_MRW, TS_CMD_MRH, TS_CMD_MRB, TS_CMD_MEM2ARRAY, TS_CMD_ARRAY2MEM, - TS_CMD_EXAMINE, + TS_CMD_EXAMINE, TS_CMD_POLL, TS_CMD_RESET, TS_CMD_HALT, @@ -3347,7 +3321,7 @@ tcl_target_func( Jim_Interp *interp, TS_CMD_EVENTLIST, TS_CMD_CURSTATE, }; - + static const Jim_Nvp target_options[] = { { .name = "configure", .value = TS_CMD_CONFIGURE }, { .name = "cget", .value = TS_CMD_CGET }, @@ -3412,7 +3386,7 @@ tcl_target_func( Jim_Interp *interp, * argv[2] = data * argv[3] = optional count. */ - + if( (goi.argc == 3) || (goi.argc == 4) ){ /* all is well */ } else { @@ -3420,7 +3394,7 @@ tcl_target_func( Jim_Interp *interp, Jim_SetResult_sprintf( goi.interp, "expected: %s ADDR DATA [COUNT]", n->name ); return JIM_ERR; } - + e = Jim_GetOpt_Wide( &goi, &a ); if( e != JIM_OK ){ goto mwx_error; @@ -3438,7 +3412,7 @@ tcl_target_func( Jim_Interp *interp, } else { c = 1; } - + switch( n->value ){ case TS_CMD_MWW: target_buffer_set_u32( target, target_buf, b ); @@ -3515,7 +3489,7 @@ tcl_target_func( Jim_Interp *interp, Jim_SetResult_sprintf( interp, "error reading target @ 0x%08lx", (int)(a) ); return JIM_ERR; } - + Jim_fprintf( interp, interp->cookie_stdout, "0x%08x ", (int)(a) ); switch( b ){ case 4: @@ -3549,7 +3523,7 @@ tcl_target_func( Jim_Interp *interp, } /* ascii-ify the bytes */ for( x = 0 ; x < y ; x++ ){ - if( (target_buf[x] >= 0x20) && + if( (target_buf[x] >= 0x20) && (target_buf[x] <= 0x7e) ){ /* good */ } else { @@ -3633,7 +3607,7 @@ tcl_target_func( Jim_Interp *interp, target->type->halt( target ); return JIM_OK; case TS_CMD_WAITSTATE: - // params: statename timeoutmsecs + // params: statename timeoutmsecs if( goi.argc != 2 ){ Jim_SetResult_sprintf( goi.interp, "%s STATENAME TIMEOUTMSECS", n->name ); return JIM_ERR; @@ -3650,7 +3624,7 @@ tcl_target_func( Jim_Interp *interp, e = target_wait_state( target, n->value, a ); if( e == ERROR_OK ){ Jim_SetResult_sprintf( goi.interp, - "target: %s wait %s fails %d", + "target: %s wait %s fails %d", target->cmd_name, n->name, target_strerror_safe(e) ); @@ -3666,12 +3640,12 @@ tcl_target_func( Jim_Interp *interp, target_event_action_t *teap; teap = target->event_action; command_print( cmd_ctx, "Event actions for target (%d) %s\n", - target->target_number, + target->target_number, target->cmd_name ); command_print( cmd_ctx, "%-25s | Body", "Event"); command_print( cmd_ctx, "------------------------- | ----------------------------------------"); while( teap ){ - command_print( cmd_ctx, + command_print( cmd_ctx, "%-25s | %s", Jim_Nvp_value2name_simple( nvp_target_event, teap->event )->name, Jim_GetString( teap->body, NULL ) ); @@ -3685,7 +3659,7 @@ tcl_target_func( Jim_Interp *interp, Jim_WrongNumArgs( goi.interp, 0, argv, "[no parameters]"); return JIM_ERR; } - Jim_SetResultString( goi.interp, + Jim_SetResultString( goi.interp, Jim_Nvp_value2name_simple(nvp_target_state,target->state)->name,-1); return JIM_OK; } @@ -3695,8 +3669,8 @@ tcl_target_func( Jim_Interp *interp, static int target_create( Jim_GetOptInfo *goi ) -{ - +{ + Jim_Obj *new_cmd; Jim_Cmd *cmd; const char *cp; @@ -3721,7 +3695,7 @@ target_create( Jim_GetOptInfo *goi ) Jim_SetResult_sprintf(goi->interp, "Command/target: %s Exists", cp); return JIM_ERR; } - + /* TYPE */ e = Jim_GetOpt_String( goi, &cp2, NULL ); cp = cp2; @@ -3736,12 +3710,12 @@ target_create( Jim_GetOptInfo *goi ) Jim_SetResult_sprintf( goi->interp, "Unknown target type %s, try one of ", cp ); for( x = 0 ; target_types[x] ; x++ ){ if( target_types[x+1] ){ - Jim_AppendStrings( goi->interp, + Jim_AppendStrings( goi->interp, Jim_GetResult(goi->interp), target_types[x]->name, ", ", NULL); } else { - Jim_AppendStrings( goi->interp, + Jim_AppendStrings( goi->interp, Jim_GetResult(goi->interp), " or ", target_types[x]->name,NULL ); @@ -3750,7 +3724,7 @@ target_create( Jim_GetOptInfo *goi ) return JIM_ERR; } - + /* Create it */ target = calloc(1,sizeof(target_t)); /* set target number */ @@ -3760,7 +3734,7 @@ target_create( Jim_GetOptInfo *goi ) target->type = (target_type_t*)calloc(1,sizeof(target_type_t)); memcpy( target->type, target_types[x], sizeof(target_type_t)); - + /* will be set by "-endian" */ target->endianness = TARGET_ENDIAN_UNKNOWN; @@ -3768,7 +3742,7 @@ target_create( Jim_GetOptInfo *goi ) target->working_area_size = 0x0; target->working_areas = NULL; target->backup_working_area = 0; - + target->state = TARGET_UNKNOWN; target->debug_reason = DBG_REASON_UNDEFINED; target->reg_cache = NULL; @@ -3776,7 +3750,7 @@ target_create( Jim_GetOptInfo *goi ) target->watchpoints = NULL; target->next = NULL; target->arch_info = NULL; - + /* initialize trace information */ target->trace_info = malloc(sizeof(trace_t)); target->trace_info->num_trace_points = 0; @@ -3786,7 +3760,7 @@ target_create( Jim_GetOptInfo *goi ) target->trace_info->trace_history = NULL; target->trace_info->trace_history_pos = 0; target->trace_info->trace_history_overflowed = 0; - + target->dbgmsg = NULL; target->dbg_msg_enabled = 0; @@ -3858,9 +3832,9 @@ jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) TG_CMD_COUNT, }; const char *target_cmds[] = { - "create", "types", "names", "current", "number", + "create", "types", "names", "current", "number", "count", - NULL // terminate + NULL // terminate }; LOG_DEBUG("Target command params:"); @@ -3887,9 +3861,9 @@ jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) /* YES IT IS OLD SYNTAX */ Jim_Obj *new_argv[10]; int new_argc; - - /* target_old_syntax - * + + /* target_old_syntax + * * argv[0] typename (above) * argv[1] endian * argv[2] reset method, deprecated/ignored @@ -3936,14 +3910,14 @@ jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) * argv[8] = -variant * argv[9] = "somestring" */ - + /* don't let these be released */ for( x = 0 ; x < new_argc ; x++ ){ Jim_IncrRefCount( new_argv[x]); } /* call our self */ LOG_DEBUG("Target OLD SYNTAX - converted to new syntax"); - + r = jim_target( goi.interp, new_argc, new_argv ); /* release? these items */ @@ -3995,7 +3969,7 @@ jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) Jim_NewStringObj( goi.interp, target->cmd_name, -1 ) ); target = target->next; } - return JIM_OK; + return JIM_OK; case TG_CMD_CREATE: if( goi.argc < 3 ){ Jim_WrongNumArgs( goi.interp, goi.argc, goi.argv, "?name ... config options ..."); @@ -4027,7 +4001,7 @@ jim_target( Jim_Interp *interp, int argc, Jim_Obj *const *argv ) Jim_WrongNumArgs( goi.interp, 0, goi.argv, ""); return JIM_ERR; } - Jim_SetResult( goi.interp, + Jim_SetResult( goi.interp, Jim_NewIntObj( goi.interp, max_target_number())); return JIM_OK; } diff --git a/src/target/target.h b/src/target/target.h index c6f6bedd..f6f5177e 100644 --- a/src/target/target.h +++ b/src/target/target.h @@ -244,7 +244,6 @@ typedef struct target_s 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? */ -- 2.39.5