diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jtag/core.c | 33 | ||||
-rw-r--r-- | src/jtag/jtag.h | 33 |
2 files changed, 37 insertions, 29 deletions
diff --git a/src/jtag/core.c b/src/jtag/core.c index 0a587487..85b2a32e 100644 --- a/src/jtag/core.c +++ b/src/jtag/core.c @@ -46,10 +46,17 @@ static int jtag_flush_queue_count; static void jtag_add_scan_check(void (*jtag_add_scan)(int in_num_fields, const scan_field_t *in_fields, tap_state_t state), int in_num_fields, scan_field_t *in_fields, tap_state_t state); -/* note that this is not marked as static as it must be available from outside core.c for those - that implement the jtag_xxx() minidriver layer -*/ -int jtag_error=ERROR_OK; +/** + * The jtag_error variable is set when an error occurs while executing + * the queue. Application code may set this using jtag_set_error(), + * when an error occurs during processing that should be reported during + * jtag_execute_queue(). + * + * Tts value may be checked with jtag_get_error() and cleared with + * jtag_error_clear(). This value is returned (and cleared) by + * jtag_execute_queue(). + */ +static int jtag_error = ERROR_OK; char* jtag_event_strings[] = { @@ -101,6 +108,24 @@ struct jtag_interface_s *jtag = NULL; jtag_interface_t *jtag_interface = NULL; int jtag_speed = 0; +void jtag_set_error(int error) +{ + if ((error == ERROR_OK) || (jtag_error != ERROR_OK)) + return; + jtag_error = error; +} +int jtag_get_error(void) +{ + return jtag_error; +} +int jtag_error_clear(void) +{ + int temp = jtag_error; + jtag_error = ERROR_OK; + return temp; +} + + jtag_tap_t *jtag_all_taps(void) { return __jtag_all_taps; diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 515f2969..d7698ac7 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -578,36 +578,19 @@ extern int jtag_execute_queue(void); extern void jtag_execute_queue_noclear(void); /** - * The jtag_error variable is set when an error occurs while executing - * the queue. - * - * This flag can also be set from application code, if an error happens - * during processing that should be reported during jtag_execute_queue(). - * - * It is cleared by jtag_execute_queue(). + * Set the current JTAG core execution error, unless one was set + * by a previous call previously. Driver or application code must + * use jtag_error_clear to reset jtag_error once this routine has been + * called with a non-zero error code. */ -extern int jtag_error; - -static __inline__ void jtag_set_error(int error) -{ - if ((error==ERROR_OK)||(jtag_error!=ERROR_OK)) - { - /* keep first error */ - return; - } - jtag_error=error; -} - +void jtag_set_error(int error); +/// @returns The current value of jtag_error +int jtag_get_error(void); /** * Resets jtag_error to ERROR_OK, returning its previous value. * @returns The previous value of @c jtag_error. */ -static inline int jtag_error_clear(void) -{ - int temp = jtag_error; - jtag_error = ERROR_OK; - return temp; -} +int jtag_error_clear(void); /* can be implemented by hw+sw */ extern int jtag_power_dropout(int* dropout); |