added jtag_alloc_in_value32 - not used in this commit.
[openocd.git] / src / jtag / jtag.h
index 2ad2024058c5f0c891e76fa7358d1b4f64f9bebe..84290ca7e189c0fc7288b4fb60618b209116d4db 100644 (file)
@@ -269,6 +269,15 @@ typedef struct scan_field_s
        int         num_bits;           /* number of bits this field specifies (up to 32) */
        u8*         out_value;          /* value to be scanned into the device */
        u8*         in_value;           /* pointer to a 32-bit memory location to take data scanned out */
+
+       u8*         check_value;        /* Used together with jtag_add_dr_scan_check() to check data clocked
+                                          in */
+       u8*         check_mask;         /* mask to go with check_value */
+
+       /* internal work space */
+       int                     allocated;                      /* in_value has been allocated for the queue */
+       int                     modified;                       /* did we modify the in_value? */
+       u8                      intmp[4];                       /* temporary storage for checking synchronously */
 } scan_field_t;
 
 enum scan_type {
@@ -555,10 +564,29 @@ extern void jtag_add_ir_scan(int num_fields, scan_field_t* fields, tap_state_t e
 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);
-/* same as jtag_add_dr_scan but the scan is executed immediately. sets jtag_error if there
- * was a failure.
+
+/* 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
+ * JTAG queues.
+ *
+ * In the event of an asynchronous queue execution the queue buffer
+ * allocation method is used, for the synchronous case the temporary 32 bits come
+ * from the input field itself.
  */
-extern void jtag_add_dr_scan_now(int num_fields, scan_field_t* fields, tap_state_t endstate);
+
+#ifndef HAVE_JTAG_MINIDRIVER_H
+extern void jtag_alloc_in_value32(scan_field_t *field);
+#else
+static __inline__ void jtag_alloc_in_value32(scan_field_t *field)
+{
+       field->in_value=field->intmp;
+}
+#endif
+
+
+
+/* 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);
@@ -573,7 +601,7 @@ extern int  interface_jtag_add_plain_dr_scan(int num_fields, scan_field_t* field
 typedef void (*jtag_callback1_t)(u8 *in);
 
 #ifndef HAVE_JTAG_MINIDRIVER_H
-/* A simpler version of jtag_add_callback3 */
+/* A simpler version of jtag_add_callback4 */
 extern void jtag_add_callback(jtag_callback1_t, u8 *in);
 #else
 /* implemented by minidriver */
@@ -581,14 +609,14 @@ extern void jtag_add_callback(jtag_callback1_t, u8 *in);
 
 /* This type can store an integer safely by a normal cast on 64 and
  * 32 bit systems. */
-typedef void *jtag_callback_data_t;
+typedef intptr_t jtag_callback_data_t;
 
 /* The generic callback mechanism.
  *
  * The callback is invoked with three arguments. The first argument is
  * the pointer to the data clocked in.
  */
-typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2);
+typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3);
 
 
 /* This callback can be executed immediately the queue has been flushed. Note that
@@ -623,7 +651,7 @@ typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback
  * callbacks may or may not be invoked depending on driver implementation.
  */
 #ifndef HAVE_JTAG_MINIDRIVER_H
-extern void jtag_add_callback3(jtag_callback_t, u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2);
+extern void jtag_add_callback4(jtag_callback_t, u8 *in, jtag_callback_data_t data1, jtag_callback_data_t data2, jtag_callback_data_t data3);
 #else
 /* implemented by minidriver */
 #endif

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)