From: Øyvind Harboe Date: Wed, 13 Apr 2011 19:51:42 +0000 (+0200) Subject: jtag: clarify jtag->init() and jtag->quit() definitions X-Git-Tag: v0.5.0-rc1~87 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=e984dc1f162ab2bd94629c32d640d804b0295553;p=openocd 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 --- 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);