]> git.sur5r.net Git - openocd/blobdiff - src/jtag/jtag.h
Correctedout buffer size and missing jlink_tap_init() call.
[openocd] / src / jtag / jtag.h
index a14edb481bd331bba8eaa832a8925704ba716bfb..434320b49546b5e119f7911b697b971366b39d0a 100644 (file)
 #define DEBUG_JTAG_IOZ 64
 #endif
 
+/*-----<Macros>--------------------------------------------------*/
+
+/** When given an array, compute its DIMension, i.e. number of elements in the array */
+#define DIM(x)                                 (sizeof(x)/sizeof((x)[0]))
+
+/** Calculate the number of bytes required to hold @a n TAP scan bits */
+#define TAP_SCAN_BYTES(n)              CEIL(n, 8)
+
+/*-----</Macros>-------------------------------------------------*/
+
+
 
 /*
  * Tap states from ARM7TDMI-S Technical reference manual.
@@ -206,6 +217,25 @@ tap_state_t tap_state_transition(tap_state_t current_state, bool tms);
  */
 const char* tap_state_name(tap_state_t state);
 
+#ifdef _DEBUG_JTAG_IO_
+/**
+ * @brief Prints verbose TAP state transitions for the given TMS/TDI buffers.
+ * @param tms_buf must points to a buffer containing the TMS bitstream.
+ * @param tdi_buf must points to a buffer containing the TDI bitstream.
+ * @param tap_len must specify the length of the TMS/TDI bitstreams.
+ * @param start_tap_state must specify the current TAP state.
+ * @returns the final TAP state; pass as @a start_tap_state in following call.
+ */
+tap_state_t jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf,
+               unsigned tap_len, tap_state_t start_tap_state);
+#else
+static inline tap_state_t jtag_debug_state_machine(const void *tms_buf,
+               const void *tdi_buf, unsigned tap_len, tap_state_t start_tap_state)
+{
+       return start_tap_state;
+}
+#endif // _DEBUG_JTAG_IO_
+
 /*-----</Cable Helper API>------------------------------------------*/
 
 
@@ -217,9 +247,6 @@ typedef void* error_handler_t;  /* Later on we can delete error_handler_t, but k
 struct scan_field_s;
 typedef int (*in_handler_t)(u8* in_value, void* priv, struct scan_field_s* field);
 
-/// @brief calculates number of bytes required to hold @a n TAP scan bits
-#define TAP_SCAN_BYTES(n)              (((n) / 8) + !!((n) % 8))
-
 typedef struct scan_field_s
 {
        jtag_tap_t* tap;                /* tap pointer this instruction refers to */