X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fjtag.h;h=3c6c5ce2827ec48667d457d54d92da9f9470823d;hp=9b378a11e6333d3f0848b812725ac64af86ecf14;hb=8b994145b849c40b0a195c3fb332b9770b2f9097;hpb=c7cfb3417b550fa7667d4ff682760743494e6a42 diff --git a/src/jtag/jtag.h b/src/jtag/jtag.h index 9b378a11e6..3c6c5ce282 100644 --- a/src/jtag/jtag.h +++ b/src/jtag/jtag.h @@ -2,7 +2,7 @@ * Copyright (C) 2005 by Dominic Rath * * Dominic.Rath@gmx.de * * * -* Copyright (C) 2007,2008 Øyvind Harboe * +* Copyright (C) 2007,2008 Øyvind Harboe * * oyvind.harboe@zylin.com * * * * This program is free software; you can redistribute it and/or modify * @@ -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; @@ -183,7 +185,6 @@ 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); extern jtag_tap_t* jtag_tap_by_jim_obj(Jim_Interp* interp, Jim_Obj* obj); -extern jtag_tap_t* jtag_tap_by_position(unsigned abs_position); extern jtag_tap_t* jtag_tap_next_enabled(jtag_tap_t* p); extern unsigned jtag_tap_count_enabled(void); extern unsigned jtag_tap_count(void); @@ -199,19 +200,18 @@ extern unsigned jtag_tap_count(void); * - 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; }; @@ -230,7 +230,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); @@ -383,6 +383,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 @@ -392,17 +397,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. @@ -413,7 +413,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); /** @@ -437,14 +437,14 @@ typedef int (*jtag_callback_t)(u8 *in, jtag_callback_data_t data1, jtag_callback * arguments. * * @param f The callback function to add. - * @param in Typically used to point to the data to operate on. + * @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. * */ -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); @@ -592,7 +592,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); /** @@ -613,7 +613,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 @@ -632,7 +632,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); @@ -645,9 +645,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, @@ -690,7 +690,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);