]> git.sur5r.net Git - openocd/blobdiff - src/jtag/jtag.h
Author: Raúl Sánchez Siles <rsanchezs@infoglobal.es>
[openocd] / src / jtag / jtag.h
index 5700591049d187b7477d3eb3c0a529f85b2fe671..e2b613615f04ca25931634099cc12ceb44491f47 100644 (file)
@@ -287,7 +287,7 @@ enum scan_type {
 
 typedef struct scan_command_s
 {
-       int           ir_scan;      /* instruction/not data scan */
+       bool          ir_scan;      /* instruction/not data scan */
        int           num_fields;   /* number of fields in *fields array */
        scan_field_t* fields;       /* pointer to an array of data scan fields */
        tap_state_t   end_state;    /* TAP state in which JTAG commands should finish */
@@ -561,9 +561,9 @@ 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);
 /* same as jtag_add_ir_scan except no verify is performed */
-extern void jtag_add_ir_scan_noverify(int num_fields, scan_field_t *fields, tap_state_t state);
-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);
+extern void jtag_add_ir_scan_noverify(int num_fields, const scan_field_t *fields, tap_state_t state);
+extern int  interface_jtag_add_ir_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
+extern void jtag_add_dr_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
 
 /* set in_value to point to 32 bits of memory to scan into. This function
  * is a way to handle the case of synchronous and asynchronous
@@ -587,11 +587,11 @@ static __inline__ void jtag_alloc_in_value32(scan_field_t *field)
 
 /* This version of jtag_add_dr_scan() uses the check_value/mask fields */
 extern void jtag_add_dr_scan_check(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);
-extern void jtag_add_plain_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate);
-extern int  interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t* fields, tap_state_t endstate);
+extern int  interface_jtag_add_dr_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
+extern void jtag_add_plain_ir_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
+extern int  interface_jtag_add_plain_ir_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
+extern void jtag_add_plain_dr_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
+extern int  interface_jtag_add_plain_dr_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
 
 
 /* Simplest/typical callback - do some conversion on the data clocked in.
@@ -705,8 +705,8 @@ extern int  interface_jtag_add_tlr(void);
  * a partial implementation of pathmove would have little practical
  * application.
  */
-extern void jtag_add_pathmove(int num_states, tap_state_t* path);
-extern int  interface_jtag_add_pathmove(int num_states, tap_state_t* path);
+extern void jtag_add_pathmove(int num_states, const tap_state_t* path);
+extern int  interface_jtag_add_pathmove(int num_states, const tap_state_t* path);
 
 /* go to TAP_IDLE, if we're not already there and cycle
  * precisely num_cycles in the TAP_IDLE after which move
@@ -824,10 +824,10 @@ struct invalidstruct
 /* execute jtag queue and check value and use mask if mask is != NULL. invokes
  * jtag_set_error() with any error. */
 extern void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask);
-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);
-extern int            jtag_build_buffer(scan_command_t* cmd, u8** buffer);
+extern enum scan_type jtag_scan_type(const scan_command_t* cmd);
+extern int            jtag_scan_size(const scan_command_t* cmd);
+extern int            jtag_read_buffer(u8* buffer, const scan_command_t* cmd);
+extern int            jtag_build_buffer(const scan_command_t* cmd, u8** buffer);
 
 extern void           jtag_sleep(u32 us);
 extern int            jtag_call_event_callbacks(enum jtag_event event);
@@ -856,8 +856,15 @@ void jtag_tap_handle_event(jtag_tap_t* tap, enum jtag_tap_event e);
 #define MINIDRIVER(a) notused ## a
 #else
 #define MINIDRIVER(a) a
+extern void interface_jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int* num_bits, const u32* value,
+               tap_state_t end_state);
 
-/* jtag_add_dr_out() is a faster version of jtag_add_dr_scan()
+#endif
+
+/* jtag_add_dr_out() is a version of jtag_add_dr_scan() which
+ * only scans data out. It operates on 32 bit integers instead
+ * of 8 bit, which makes it a better impedance match with
+ * the calling code which often operate on 32 bit integers.
  *
  * Current or end_state can not be TAP_RESET. end_state can be TAP_INVALID
  *
@@ -872,13 +879,13 @@ void jtag_tap_handle_event(jtag_tap_t* tap, enum jtag_tap_event e);
  * return an error. There is no way to determine if there was a failure
  * during this function call.
  *
- * Note that this jtag_add_dr_out can be defined as an inline function.
+ * This is an inline fn to speed up embedded hosts. Also note that
+ * interface_jtag_add_dr_out() can be a *small* inline function for
+ * embedded hosts.
+ *
+ * There is no jtag_add_dr_outin() version of this fn that also allows
+ * clocking data back in. Patches gladly accepted!
  */
-extern void interface_jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int* num_bits, const u32* value,
-               tap_state_t end_state);
-
-#endif
-
 static __inline__ void jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int* num_bits, const u32* value,
                tap_state_t end_state)
 {