- Fixes '+' whitespace
[fw/openocd] / src / jtag / jtag.h
index c252433117718dd76764849452237943fc298584..1564ca650c2bdab372170291e8a430337c7f0ba3 100644 (file)
@@ -62,7 +62,7 @@
  */
 typedef enum tap_state
 {
-#if BUILD_ECOSBOARD
+#if BUILD_ZY1000
        /* These are the old numbers. Leave as-is for now... */
        TAP_RESET    = 0, TAP_IDLE = 8,
        TAP_DRSELECT = 1, TAP_DRCAPTURE = 2, TAP_DRSHIFT = 3, TAP_DREXIT1 = 4,
@@ -123,21 +123,21 @@ typedef struct scan_field_s
        /// The number of bits this field specifies (up to 32)
        int num_bits;
        /// A pointer to value to be scanned into the device
-       u8* out_value;
+       uint8_t* out_value;
        /// A pointer to a 32-bit memory location for data scanned out
-       u8* in_value;
+       uint8_t* in_value;
 
        /// The value used to check the data scanned out.
-       u8* check_value;
+       uint8_t* check_value;
        /// The mask to go with check_value
-       u8* check_mask;
+       uint8_t* check_mask;
 
        /// in_value has been allocated for the queue
        int allocated;
        /// Indicates we modified the in_value.
        int modified;
        /// temporary storage for performing value checks synchronously
-       u8 intmp[4];
+       uint8_t intmp[4];
 } scan_field_t;
 
 typedef struct jtag_tap_event_action_s jtag_tap_event_action_t;
@@ -151,23 +151,25 @@ struct jtag_tap_s
        const char* tapname;
        const char* dotted_name;
        int abs_chain_position;
-       /// Is this TAP enabled?
-       int enabled;
+       /// Is this TAP disabled after JTAG reset?
+       bool disabled_after_reset;
+       /// Is this TAP currently enabled?
+       bool enabled;
        int ir_length; /**< size of instruction register */
-       u32 ir_capture_value;
-       u8* expected; /**< Capture-IR expected value */
-       u32 ir_capture_mask;
-       u8* expected_mask; /**< Capture-IR expected mask */
-       u32 idcode;
+       uint32_t ir_capture_value;
+       uint8_t* expected; /**< Capture-IR expected value */
+       uint32_t ir_capture_mask;
+       uint8_t* expected_mask; /**< Capture-IR expected mask */
+       uint32_t idcode;
        /**< device identification code */
 
        /// Array of expected identification codes */
-       u32* expected_ids;
+       uint32_t* expected_ids;
        /// Number of expected identification codes
-       u8 expected_ids_cnt;
+       uint8_t expected_ids_cnt;
 
        /// current instruction
-       u8* cur_instr;
+       uint8_t* cur_instr;
        /// Bypass register selected
        int bypass;
 
@@ -175,6 +177,10 @@ struct jtag_tap_s
 
        jtag_tap_t* next_tap;
 };
+
+void jtag_tap_init(jtag_tap_t *tap);
+void jtag_tap_free(jtag_tap_t *tap);
+
 extern jtag_tap_t* jtag_all_taps(void);
 extern const char *jtag_tap_name(const jtag_tap_t *tap);
 extern jtag_tap_t* jtag_tap_by_string(const char* dotted_name);
@@ -185,29 +191,28 @@ extern unsigned jtag_tap_count_enabled(void);
 extern unsigned jtag_tap_count(void);
 
 
-/* 
+/*
  * There are three cases when JTAG_TRST_ASSERTED callback is invoked. The
- * event is invoked *after* TRST is asserted(or queued rather). It is illegal 
- * to communicate with the JTAG interface during the callback(as there is 
+ * event is invoked *after* TRST is asserted(or queued rather). It is illegal
+ * to communicate with the JTAG interface during the callback(as there is
  * currently a queue being built).
- * 
+ *
  * - TMS reset
  * - SRST pulls TRST
  * - TRST asserted
- * 
- **/
+ *
+ * TAP activation/deactivation is currently implemented outside the core
+ * using scripted code that understands the specific router type.
+ */
 enum jtag_event {
-       JTAG_TRST_ASSERTED
-};
-
-enum jtag_tap_event {
+       JTAG_TRST_ASSERTED,
        JTAG_TAP_EVENT_ENABLE,
-       JTAG_TAP_EVENT_DISABLE
+       JTAG_TAP_EVENT_DISABLE,
 };
 
 struct jtag_tap_event_action_s
 {
-       enum jtag_tap_event      event;
+       enum jtag_event         event;
        Jim_Obj*                 body;
        jtag_tap_event_action_t* next;
 };
@@ -226,7 +231,7 @@ struct jtag_tap_event_action_s
 typedef int (*jtag_event_handler_t)(enum jtag_event event, void* priv);
 
 extern int jtag_register_event_callback(jtag_event_handler_t f, void *x);
-extern int jtag_unregister_event_callback(jtag_event_handler_t f);
+extern int jtag_unregister_event_callback(jtag_event_handler_t f, void *x);
 
 extern int jtag_call_event_callbacks(enum jtag_event event);
 
@@ -235,7 +240,7 @@ extern int jtag_call_event_callbacks(enum jtag_event event);
 int jtag_get_speed(void);
 /**
  * Given a @a speed setting, use the interface @c speed_div callback to
- * adjust the setting.  
+ * adjust the setting.
  * @param speed The speed setting to convert back to readable KHz.
  * @returns ERROR_OK if the interface has not been initialized or on success;
  *     otherwise, the error code produced by the @c speed_div callback.
@@ -379,6 +384,11 @@ extern void jtag_add_dr_scan_check(int num_fields, scan_field_t* fields, tap_sta
  */
 extern void jtag_add_plain_dr_scan(int num_fields, const scan_field_t* fields, tap_state_t endstate);
 
+/**
+ * Defines the type of data passed to the jtag_callback_t interface.
+ * The underlying type must allow storing an @c int or pointer type.
+ */
+typedef intptr_t jtag_callback_data_t;
 
 /**
  * Defines a simple JTAG callback that can allow conversions on data
@@ -388,17 +398,12 @@ extern void jtag_add_plain_dr_scan(int num_fields, const scan_field_t* fields, t
  * For conversion types or checks that can fail, use the more complete
  * variant: jtag_callback_t.
  */
-typedef void (*jtag_callback1_t)(u8 *in);
+typedef void (*jtag_callback1_t)(jtag_callback_data_t data0);
 
 /// A simpler version of jtag_add_callback4().
-extern void jtag_add_callback(jtag_callback1_t, u8 *in);
+extern void jtag_add_callback(jtag_callback1_t, jtag_callback_data_t data0);
 
 
-/**
- * Defines the type of data passed to the jtag_callback_t interface.
- * The underlying type must allow storing an @c int or pointer type.
- */
-typedef intptr_t jtag_callback_data_t;
 
 /**
  * Defines the interface of the JTAG callback mechanism.
@@ -409,7 +414,7 @@ typedef intptr_t jtag_callback_data_t;
  * @param data3 An integer big enough to use as an @c int or a pointer.
  * @returns an error code
  */
-typedef int (*jtag_callback_t)(u8 *in, 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);
 
 
 /**
@@ -440,7 +445,7 @@ typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback
  * @param data3 An integer big enough to use as an @c int or a pointer.
  *
  */
-extern void jtag_add_callback4(jtag_callback_t f, u8 *in,
+extern 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);
 
@@ -507,7 +512,7 @@ extern void jtag_add_pathmove(int num_states, const tap_state_t* path);
  * @param goal_state The final TAP state.
  * @return ERROR_OK on success, or an error code on failure.
  *
- * Moves from the current state to the goal \a state. 
+ * Moves from the current state to the goal \a state.
  *
  * This needs to be handled according to the xsvf spec, see the XSTATE
  * command description.  From the XSVF spec, pertaining to XSTATE:
@@ -588,7 +593,7 @@ extern tap_state_t jtag_set_end_state(tap_state_t state);
  *
  **/
 extern tap_state_t jtag_get_end_state(void);
-extern void jtag_add_sleep(u32 us);
+extern void jtag_add_sleep(uint32_t us);
 
 
 /**
@@ -609,7 +614,7 @@ void jtag_add_clocks(int num_cycles);
  * matter if the operation was executed *before* jtag_execute_queue(),
  * jtag_execute_queue() will still return an error code.
  *
- * All jtag_add_xxx() calls that have in_handler!=NULL will have been
+ * All jtag_add_xxx() calls that have in_handler != NULL will have been
  * executed when this fn returns, but if what has been queued only
  * clocks data out, without reading anything back, then JTAG could
  * be running *after* jtag_execute_queue() returns. The API does
@@ -628,7 +633,7 @@ extern void jtag_execute_queue_noclear(void);
 int jtag_get_flush_queue_count(void);
 
 
-/* can be implemented by hw+sw */
+/* can be implemented by hw + sw */
 extern int jtag_power_dropout(int* dropout);
 extern int jtag_srst_asserted(int* srst_asserted);
 
@@ -641,9 +646,9 @@ extern int jtag_srst_asserted(int* srst_asserted);
  * @param mask Pointer to scan mask; may be NULL.
  * @returns Nothing, but calls jtag_set_error() on any error.
  */
-extern void jtag_check_value_mask(scan_field_t *field, u8 *value, u8 *mask);
+extern void jtag_check_value_mask(scan_field_t *field, uint8_t *value, uint8_t *mask);
 
-extern void jtag_sleep(u32 us);
+extern void jtag_sleep(uint32_t us);
 
 /*
  * The JTAG subsystem defines a number of error codes,
@@ -686,7 +691,7 @@ extern void jtag_sleep(u32 us);
  * clocking data back in. Patches gladly accepted!
  */
 extern void jtag_add_dr_out(jtag_tap_t* tap,
-               int num_fields, const int* num_bits, const u32* value,
+               int num_fields, const int* num_bits, const uint32_t* value,
                tap_state_t end_state);