diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-22 11:49:00 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-22 12:36:32 +0200 |
commit | 8b82171f75df84c1eb51e4824852079cb601df80 (patch) | |
tree | 95870162d2c7ecaa7fac86656d6c82812d4a2100 /src | |
parent | f44eeba16f3e9bebfbc78fd0841124d8b2556246 (diff) | |
download | openocd+libswd-8b82171f75df84c1eb51e4824852079cb601df80.tar.gz openocd+libswd-8b82171f75df84c1eb51e4824852079cb601df80.tar.bz2 openocd+libswd-8b82171f75df84c1eb51e4824852079cb601df80.tar.xz openocd+libswd-8b82171f75df84c1eb51e4824852079cb601df80.zip |
target: mwX on target object now supporst phys argument
$_TARGETNAME mww phys 0x10 0xdeadbeef
=> write 0xdeadbeef to physical address 0x10
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/target/target.c | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/src/target/target.c b/src/target/target.c index 7513346a..d6efe5b2 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -3950,19 +3950,30 @@ static int jim_target_mw(Jim_Interp *interp, int argc, Jim_Obj *const *argv) Jim_GetOptInfo goi; Jim_GetOpt_Setup(&goi, interp, argc - 1, argv + 1); - /* danger! goi.argc will be modified below! */ - argc = goi.argc; - - if (argc != 2 && argc != 3) + if (goi.argc < 2 || goi.argc > 4) { Jim_SetResult_sprintf(goi.interp, - "usage: %s <address> <data> [<count>]", cmd_name); + "usage: %s [phys] <address> <data> [<count>]", cmd_name); return JIM_ERR; } + target_write_fn fn; + fn = target_write_memory_fast; + + int e; + if (strcmp(Jim_GetString(argv[1], NULL), "phys") == 0) + { + /* consume it */ + struct Jim_Obj *obj; + e = Jim_GetOpt_Obj(&goi, &obj); + if (e != JIM_OK) + return e; + + fn = target_write_phys_memory; + } jim_wide a; - int e = Jim_GetOpt_Wide(&goi, &a); + e = Jim_GetOpt_Wide(&goi, &a); if (e != JIM_OK) return e; @@ -3972,13 +3983,19 @@ static int jim_target_mw(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return e; jim_wide c = 1; - if (argc == 3) + if (goi.argc == 1) { e = Jim_GetOpt_Wide(&goi, &c); if (e != JIM_OK) return e; } + /* all args must be consumed */ + if (goi.argc != 0) + { + return JIM_ERR; + } + struct target *target = Jim_CmdPrivData(goi.interp); unsigned data_size; if (strcasecmp(cmd_name, "mww") == 0) { @@ -3994,7 +4011,7 @@ static int jim_target_mw(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return JIM_ERR; } - return (target_fill_mem(target, a, target_write_memory_fast, data_size, b, c) == ERROR_OK) ? JIM_OK : JIM_ERR; + return (target_fill_mem(target, a, fn, data_size, b, c) == ERROR_OK) ? JIM_OK : JIM_ERR; } static int jim_target_md(Jim_Interp *interp, int argc, Jim_Obj *const *argv) |