X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fjtag%2Fjtag.h;h=f2c887f87a2c1e8963feee6bdf94d9ddfaf0a438;hb=bb4e592b5b811cf09a5f7529ea886eb3b0ff0a17;hp=9bc3fe82027f848e3e71d519ab07749ea133410f;hpb=213368e21f892a4c6df80cbdae1a163df36c1d51;p=openocd.git diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 9bc3fe8202..f2c887f87a 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -275,8 +275,8 @@ typedef struct scan_field_s /* in_check_value/mask, in_handler_error_handler, in_handler_priv can be used by the in handler, otherwise they contain garbage */ u8* in_check_value; /* deprecated! only used from jtag_set_check_value. used to validate scan results */ u8* in_check_mask; /* deprecated! only used from jtag_set_check_value. check specified bits against check_value */ - in_handler_t in_handler; /* deprecated! DO NOT USE! process received buffer using this handler */ - void* in_handler_priv; /* additional information for the in_handler */ + in_handler_t in_handler; /* deprecated! SET TO NULL. DO NOT USE! process received buffer using this handler */ + void* in_handler_priv; /* deprecated! only used by obsolete in_handler implementations */ } scan_field_t; enum scan_type { @@ -561,6 +561,10 @@ extern int jtag_register_commands(struct command_context_s* cmd_ctx); extern void jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern int interface_jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern void jtag_add_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); +/* same as jtag_add_dr_scan but the scan is executed immediately. sets jtag_error if there + * was a failure. + */ +extern void jtag_add_dr_scan_now(int num_fields, scan_field_t* fields, tap_state_t endstate); extern int interface_jtag_add_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern void jtag_add_plain_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); extern int interface_jtag_add_plain_ir_scan(int num_fields, scan_field_t* fields, tap_state_t endstate); @@ -696,13 +700,41 @@ int interface_jtag_add_clocks(int num_cycles); */ extern int jtag_execute_queue(void); +/* same as jtag_execute_queue() but does not clear the error flag */ +extern void jtag_execute_queue_noclear(void); + +/* this flag is set when an error occurs while executing the queue. cleared + * by jtag_execute_queue() + * + * this flag can also be set from application code if some error happens + * during processing that should be reported during jtag_execute_queue(). + */ +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; +} + + + /* can be implemented by hw+sw */ extern int interface_jtag_execute_queue(void); extern int jtag_power_dropout(int* dropout); extern int jtag_srst_asserted(int* srst_asserted); /* JTAG support functions */ -extern void jtag_set_check_value(scan_field_t* field, u8* value, u8* mask, error_handler_t* in_error_handler); +struct invalidstruct +{ + +}; + +extern void jtag_set_check_value(scan_field_t* field, u8* value, u8* mask, struct invalidstruct *obsolete); extern enum scan_type jtag_scan_type(scan_command_t* cmd); extern int jtag_scan_size(scan_command_t* cmd); extern int jtag_read_buffer(u8* buffer, scan_command_t* cmd);