Zach Welch <zw@superlucidity.net> reorder enum tap_state
[fw/openocd] / src / jtag / jtag.h
index 9c4acd70505aeb9ff3bbe13a1ca5be3b5387c4a0..f33e050113f2c79d7d82062d28eb5b8b0d3e01d4 100644 (file)
 #include "command.h"
 
 
-#if 0
-#define _DEBUG_JTAG_IO_
+#ifdef _DEBUG_JTAG_IO_
+#define DEBUG_JTAG_IO(expr ...)                LOG_DEBUG(expr)
+#else
+#define DEBUG_JTAG_IO(expr ...)
 #endif
 
 #ifndef DEBUG_JTAG_IOZ
 #endif
 
 
-/* 16 Tap States, from page 21 of ASSET InterTech, Inc.'s svf.pdf
+/*
+ * Tap states from ARM7TDMI-S Technical reference manual.
+ * Also, validated against several other ARM core technical manuals.
+ *
+ * N.B. tap_get_tms_path() was changed to reflect this corrected
+ * numbering and ordering of the TAP states.
  */
-enum tap_state {
-       TAP_RESET    = 0, TAP_IDLE = 8,
-       TAP_DRSELECT = 1, TAP_DRCAPTURE = 2, TAP_DRSHIFT = 3, TAP_DREXIT1 = 4,
-       TAP_DRPAUSE  = 5, TAP_DREXIT2 = 6, TAP_DRUPDATE = 7,
-       TAP_IRSELECT = 9, TAP_IRCAPTURE = 10, TAP_IRSHIFT = 11, TAP_IREXIT1 = 12,
-       TAP_IRPAUSE  = 13, TAP_IREXIT2 = 14, TAP_IRUPDATE = 15
-};
-
-typedef enum tap_state tap_state_t;
-
-typedef unsigned               BOOL;
-#define TRUE                   1
-#define FALSE          0
-
+typedef enum tap_state
+{
+       TAP_DREXIT2 = 0x0,
+       TAP_DREXIT1 = 0x1,
+       TAP_DRSHIFT = 0x2,
+       TAP_DRPAUSE = 0x3,
+       TAP_IRSELECT = 0x4,
+       TAP_DRUPDATE = 0x5,
+       TAP_DRCAPTURE = 0x6,
+       TAP_DRSELECT = 0x7,
+       TAP_IREXIT2 = 0x8,
+       TAP_IREXIT1 = 0x9,
+       TAP_IRSHIFT = 0xa,
+       TAP_IRPAUSE = 0xb,
+       TAP_IDLE = 0xc,
+       TAP_IRUPDATE = 0xd,
+       TAP_IRCAPTURE = 0xe,
+       TAP_RESET = 0x0f,
+
+       TAP_NUM_STATES = 0x10,
+
+       TAP_INVALID = -1,
+} tap_state_t;
 typedef struct tap_transition_s
 {
        tap_state_t high;
@@ -154,9 +171,9 @@ int tap_move_ndx(tap_state_t astate);
 
 /**
  * Function tap_is_state_stable
- * returns TRUE if the \a astate is stable.
+ * returns true if the \a astate is stable.
  */
-BOOL tap_is_state_stable(tap_state_t astate);
+bool tap_is_state_stable(tap_state_t astate);
 
 /**
  * Function tap_state_transition
@@ -165,7 +182,7 @@ BOOL tap_is_state_stable(tap_state_t astate);
  * @param tms is either zero or non-zero, just like a real TMS line in a jtag interface.
  * @return tap_state_t - the next state a TAP would enter.
  */
-tap_state_t tap_state_transition(tap_state_t current_state, BOOL tms);
+tap_state_t tap_state_transition(tap_state_t current_state, bool tms);
 
 /**
  * Function tap_state_name
@@ -647,7 +664,7 @@ void jtag_tap_handle_event(jtag_tap_t* tap, enum jtag_tap_event e);
 
 /* jtag_add_dr_out() is a faster version of jtag_add_dr_scan()
  *
- * Current or end_state can not be TAP_RESET. end_state can be -1
+ * Current or end_state can not be TAP_RESET. end_state can be TAP_INVALID
  *
  * num_bits[i] is the number of bits to clock out from value[i] LSB first.
  *
@@ -670,7 +687,7 @@ extern void interface_jtag_add_dr_out(jtag_tap_t* tap, int num_fields, const int
 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)
 {
-       if (end_state != -1)
+       if (end_state != TAP_INVALID)
                cmd_queue_end_state = end_state;
        cmd_queue_cur_state = cmd_queue_end_state;
        interface_jtag_add_dr_out(tap, num_fields, num_bits, value, cmd_queue_end_state);