diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2011-04-13 21:51:42 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2011-04-19 12:43:16 +0200 |
commit | e984dc1f162ab2bd94629c32d640d804b0295553 (patch) | |
tree | 6466a60faec99169df7eab2bcc1b0acd38646041 /src | |
parent | b69119668ed8d9633280f8b596fe9af60f51644b (diff) | |
download | openocd+libswd-e984dc1f162ab2bd94629c32d640d804b0295553.tar.gz openocd+libswd-e984dc1f162ab2bd94629c32d640d804b0295553.tar.bz2 openocd+libswd-e984dc1f162ab2bd94629c32d640d804b0295553.tar.xz openocd+libswd-e984dc1f162ab2bd94629c32d640d804b0295553.zip |
jtag: clarify jtag->init() and jtag->quit() definitions
only set jtag global pointer if jtag->init() succeeds. Less code,
more clear what the rules are.
Fix nit that error value from init() was not propagated unmodified.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/core.c | 13 | ||||
-rw-r--r-- | src/jtag/interface.h | 9 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c index 68c12570..4c5d37a7 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -1368,12 +1368,13 @@ int adapter_init(struct command_context *cmd_ctx) return ERROR_JTAG_INVALID_INTERFACE; } - jtag = jtag_interface; - if (jtag_interface->init() != ERROR_OK) + int retval; + retval = jtag_interface->init(); + if (retval != ERROR_OK) { - jtag = NULL; - return ERROR_JTAG_INIT_FAILED; + return retval; } + jtag = jtag_interface; /* LEGACY SUPPORT ... adapter drivers must declare what * transports they allow. Until they all do so, assume @@ -1383,7 +1384,7 @@ int adapter_init(struct command_context *cmd_ctx) LOG_ERROR("Adapter driver '%s' did not declare " "which transports it allows; assuming " "JTAG-only", jtag->name); - int retval = allow_transports(cmd_ctx, jtag_only); + retval = allow_transports(cmd_ctx, jtag_only); if (retval != ERROR_OK) return retval; } @@ -1391,7 +1392,7 @@ int adapter_init(struct command_context *cmd_ctx) int requested_khz = jtag_get_speed_khz(); int actual_khz = requested_khz; int jtag_speed_var; - int retval = jtag_get_speed(&jtag_speed_var); + retval = jtag_get_speed(&jtag_speed_var); if (retval != ERROR_OK) return retval; retval = jtag_get_speed_readable(&actual_khz); diff --git a/src/jtag/interface.h b/src/jtag/interface.h index 958af8f5..1059436e 100644 --- a/src/jtag/interface.h +++ b/src/jtag/interface.h @@ -231,8 +231,14 @@ struct jtag_interface { const struct command_registration *commands; /** - * Interface driver must initalize any resources and connect to a + * Interface driver must initialize any resources and connect to a * JTAG device. + * + * quit() is invoked if and only if init() succeeds. quit() is always + * invoked if init() succeeds. Same as malloc() + free(). Always + * invoke free() if malloc() succeeds and do not invoke free() + * otherwise. + * * @returns ERROR_OK on success, or an error code on failure. */ int (*init)(void); @@ -240,6 +246,7 @@ struct jtag_interface { /** * Interface driver must tear down all resources and disconnect from * the JTAG device. + * * @returns ERROR_OK on success, or an error code on failure. */ int (*quit)(void); |