ARMv7-M: make DAP commands verify target is an ARMv7-M
[openocd.git] / src / jtag / jtag.h
index d4fafa3bde1df95bc30582a32b4e8fee10fa4511..055575407a273c4a8581c49900143a5ae0a5e347 100644 (file)
@@ -23,8 +23,8 @@
 #ifndef JTAG_H
 #define JTAG_H
 
-#include "binarybuffer.h"
-#include "log.h"
+#include <helper/binarybuffer.h>
+#include <helper/log.h>
 
 #ifdef _DEBUG_JTAG_IO_
 #define DEBUG_JTAG_IO(expr ...) \
@@ -156,6 +156,9 @@ struct jtag_tap {
        /// Number of expected identification codes
        uint8_t expected_ids_cnt;
 
+       /// Flag saying whether to ignore version field in expected_ids[]
+       bool ignore_version;
+
        /// current instruction
        uint8_t* cur_instr;
        /// Bypass register selected
@@ -209,9 +212,14 @@ enum jtag_event {
 
 struct jtag_tap_event_action
 {
-       enum jtag_event         event;
-       Jim_Obj*                 body;
-       struct jtag_tap_event_action* next;
+       /// The event for which this action will be triggered.
+       enum jtag_event event;
+       /// The interpreter to use for evaluating the @c body.
+       Jim_Interp *interp;
+       /// Contains a script to 'eval' when the @c event is triggered.
+       Jim_Obj *body;
+       // next action in linked list
+       struct jtag_tap_event_action *next;
 };
 
 /**
@@ -412,24 +420,9 @@ typedef void (*jtag_callback1_t)(jtag_callback_data_t data0);
 void jtag_add_callback(jtag_callback1_t, jtag_callback_data_t data0);
 
 
-
-/**
- * Defines the interface of the JTAG callback mechanism.
- *
- * @param in the pointer to the data clocked in
- * @param data1 An integer big enough to use as an @c int or a pointer.
- * @param data2 An integer big enough to use as an @c int or a pointer.
- * @param data3 An integer big enough to use as an @c int or a pointer.
- * @returns an error code
- */
-typedef int (*jtag_callback_t)(jtag_callback_data_t data0,
-                               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.
+ * Defines the interface of the JTAG callback mechanism.  Such
+ * callbacks can be executed once the queue has been flushed.
  *
  * The JTAG queue can be executed synchronously or asynchronously.
  * Typically for USB, the queue is executed asynchronously.  For
@@ -443,23 +436,21 @@ typedef int (*jtag_callback_t)(jtag_callback_data_t data0,
  *
  * If the execution of the queue fails before the callbacks, then --
  * depending on driver implementation -- the callbacks may or may not be
- * invoked.  @todo Can we make this behavior consistent?
+ * invoked.
  *
- * The strange name is due to C's lack of overloading using function
- * arguments.
+ * @todo Make that behavior consistent.
  *
- * @param f The callback function to add.
  * @param data0 Typically used to point to the data to operate on.
  * Frequently this will be the data clocked in during a shift operation.
  * @param data1 An integer big enough to use as an @c int or a pointer.
  * @param data2 An integer big enough to use as an @c int or a pointer.
  * @param data3 An integer big enough to use as an @c int or a pointer.
- *
+ * @returns an error code
  */
-void jtag_add_callback4(jtag_callback_t f, jtag_callback_data_t data0,
-               jtag_callback_data_t data1, jtag_callback_data_t data2,
-               jtag_callback_data_t data3);
-
+typedef int (*jtag_callback_t)(jtag_callback_data_t data0,
+                               jtag_callback_data_t data1,
+                               jtag_callback_data_t data2,
+                               jtag_callback_data_t data3);
 
 /**
  * Run a TAP_RESET reset where the end state is TAP_RESET,
@@ -534,8 +525,8 @@ int jtag_add_statemove(tap_state_t goal_state);
  * to @a endstate (unless it is also TAP_IDLE).
  *
  * @param num_cycles Number of cycles in TAP_IDLE state.  This argument
- *     may be 0, in which case this routine will navigate to @a endstate
- *     via TAP_IDLE.
+ *     may be 0, in which case this routine will navigate to @a endstate
+ *     via TAP_IDLE.
  * @param endstate The final state.
  */
 void jtag_add_runtest(int num_cycles, tap_state_t endstate);
@@ -572,23 +563,22 @@ void jtag_add_reset(int req_tlr_or_trst, int srst);
  * Set a global variable to \a state if \a state != TAP_INVALID.
  *
  * Return the value of the global variable.
- *
- **/
+ */
 tap_state_t jtag_set_end_state(tap_state_t state);
+
 /**
  * Function jtag_get_end_state
  *
  * Return the value of the global variable for end state
- *
- **/
+ */
 tap_state_t jtag_get_end_state(void);
-void jtag_add_sleep(uint32_t us);
 
+void jtag_add_sleep(uint32_t us);
 
 /**
- * Function jtag_add_stable_clocks
+ * Function jtag_add_clocks
  * first checks that the state in which the clocks are to be issued is
- * stable, then queues up clock_count clocks for transmission.
+ * stable, then queues up num_cycles clocks for transmission.
  */
 void jtag_add_clocks(int num_cycles);
 
@@ -683,9 +673,6 @@ void jtag_sleep(uint32_t us);
  * There is no jtag_add_dr_outin() version of this fn that also allows
  * clocking data back in. Patches gladly accepted!
  */
-void jtag_add_dr_out(struct jtag_tap* tap,
-               int num_fields, const int* num_bits, const uint32_t* value,
-               tap_state_t end_state);
 
 
 /**
@@ -720,4 +707,9 @@ bool jtag_poll_get_enabled(void);
  */
 void jtag_poll_set_enabled(bool value);
 
+
+/* The minidriver may have inline versions of some of the low
+ * level APIs that are used in inner loops. */
+#include <jtag/minidriver.h>
+
 #endif /* JTAG_H */

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)