OpenOCD
interface.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 /***************************************************************************
4  * Copyright (C) 2005 by Dominic Rath *
5  * Dominic.Rath@gmx.de *
6  * *
7  * Copyright (C) 2007,2008 Øyvind Harboe *
8  * oyvind.harboe@zylin.com *
9  * *
10  * Copyright (C) 2009 Zachary T Welch *
11  * zw@superlucidity.net *
12  ***************************************************************************/
13 
14 #ifndef OPENOCD_JTAG_INTERFACE_H
15 #define OPENOCD_JTAG_INTERFACE_H
16 
17 #include <jtag/jtag.h>
18 #include <jtag/swim.h>
19 #include <target/arm_tpiu_swo.h>
20 #include <transport/transport.h>
21 
22 /* @file
23  * The "Cable Helper API" is what the cable drivers can use to help
24  * implement their "Cable API". So a Cable Helper API is a set of
25  * helper functions used by cable drivers, and this is different from a
26  * Cable API. A "Cable API" is what higher level code used to talk to a
27  * cable.
28  */
29 
30 
32 void tap_set_state_impl(enum tap_state new_state);
33 
50 #define tap_set_state(new_state) \
51  do { \
52  LOG_DEBUG_IO("tap_set_state(%s)", tap_state_name(new_state)); \
53  tap_set_state_impl(new_state); \
54  } while (0)
55 
61 enum tap_state tap_get_state(void);
62 
74 void tap_set_end_state(enum tap_state new_end_state);
75 
79 int tap_set_end_state_stable(enum tap_state new_end_state);
80 
85 enum tap_state tap_get_end_state(void);
86 
100 int tap_get_tms_path(enum tap_state from, enum tap_state to);
101 
118 int tap_get_tms_path_len(enum tap_state from, enum tap_state to);
119 
120 
134 int tap_move_ndx(enum tap_state astate);
135 
140 bool tap_is_state_stable(enum tap_state astate);
141 
149 enum tap_state tap_state_transition(enum tap_state current_state, bool tms);
150 
151 static inline bool tap_is_state_next(enum tap_state from, enum tap_state to)
152 {
153  return tap_state_transition(from, false) == to
154  || tap_state_transition(from, true) == to;
155 }
156 
158 void tap_use_new_tms_table(bool use_new);
161 
162 enum tap_state jtag_debug_state_machine_(const void *tms_buf, const void *tdi_buf,
163  unsigned int tap_len, enum tap_state start_tap_state);
164 
173 static inline enum tap_state jtag_debug_state_machine(const void *tms_buf,
174  const void *tdi_buf, unsigned int tap_len, enum tap_state start_tap_state)
175 {
177  return jtag_debug_state_machine_(tms_buf, tdi_buf, tap_len, start_tap_state);
178  else
179  return start_tap_state;
180 }
181 
198  unsigned int supported;
199 #define DEBUG_CAP_TMS_SEQ (1 << 0)
200 
207  int (*execute_queue)(struct jtag_command *cmd_queue);
208 };
209 
221  const char * const name;
222 
226  unsigned int transport_ids;
227 
233 
239 
251  int (*init)(void);
252 
259  int (*quit)(void);
260 
275  int (*reset)(int srst, int trst);
276 
282  int (*speed)(int speed);
283 
294  int (*khz)(int khz, int *jtag_speed);
295 
303  int (*speed_div)(int speed, int *khz);
304 
317 
331 
346  int (*config_trace)(bool enabled, enum tpiu_pin_protocol pin_protocol,
347  uint32_t port_size, unsigned int *trace_freq,
348  unsigned int traceclkin_freq, uint16_t *prescaler);
349 
359  int (*poll_trace)(uint8_t *buf, size_t *size);
360 
363 
365  const struct swd_driver *swd_ops;
366 
367  /* DAP APIs over JTAG transport */
368  const struct dap_ops *dap_jtag_ops;
369 
370  /* DAP APIs over SWD transport */
371  const struct dap_ops *dap_swd_ops;
372 
373  /* SWIM APIs */
374  const struct swim_driver *swim_ops;
375 };
376 
377 int adapter_resets(int assert_trst, int assert_srst);
378 int adapter_assert_reset(void);
379 int adapter_deassert_reset(void);
380 int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol,
381  uint32_t port_size, unsigned int *trace_freq,
382  unsigned int traceclkin_freq, uint16_t *prescaler);
383 int adapter_poll_trace(uint8_t *buf, size_t *size);
384 
385 // Keep in alphabetic order this list of drivers
400 extern struct adapter_driver eud_adapter_driver;
402 extern struct adapter_driver ftdi_adapter_driver;
404 extern struct adapter_driver hl_adapter_driver;
430 extern struct adapter_driver xvc_adapter_driver;
431 
432 #endif /* OPENOCD_JTAG_INTERFACE_H */
tpiu_pin_protocol
Definition: arm_tpiu_swo.h:7
uint32_t size
Size of dw_spi_transaction::buffer.
Definition: dw-spi-helper.h:4
struct adapter_driver ch347_adapter_driver
Definition: ch347.c:2518
struct adapter_driver imx_gpio_adapter_driver
Definition: imx_gpio.c:425
struct adapter_driver linuxgpiod_adapter_driver
Definition: linuxgpiod.c:772
struct adapter_driver dummy_adapter_driver
Definition: dummy.c:141
struct adapter_driver stlink_dap_adapter_driver
Definition: stlink_usb.c:5185
struct adapter_driver amt_jtagaccel_adapter_driver
static bool tap_is_state_next(enum tap_state from, enum tap_state to)
Definition: interface.h:151
struct adapter_driver usb_blaster_adapter_driver
Definition: usb_blaster.c:1052
struct adapter_driver ft232r_adapter_driver
Definition: ft232r.c:892
enum tap_state tap_get_end_state(void)
For more information,.
Definition: interface.c:67
struct adapter_driver jtag_vpi_adapter_driver
Definition: jtag_vpi.c:703
int adapter_resets(int assert_trst, int assert_srst)
Definition: jtag/core.c:1828
struct adapter_driver buspirate_adapter_driver
Definition: buspirate.c:540
struct adapter_driver cmsis_dap_adapter_driver
Definition: cmsis_dap.c:2437
struct adapter_driver angie_adapter_driver
Definition: angie.c:1375
struct adapter_driver dmem_dap_adapter_driver
Definition: dmem.c:603
struct adapter_driver xlnx_axi_xvc_adapter_driver
Definition: xlnx-xvc.c:978
struct adapter_driver osbdm_adapter_driver
Definition: osbdm.c:685
void tap_use_new_tms_table(bool use_new)
Allow switching between old and new TMS tables.
Definition: interface.c:458
struct adapter_driver vdebug_adapter_driver
Definition: vdebug.c:1383
struct adapter_driver ep93xx_adapter_driver
Definition: ep93xx.c:47
bool tap_uses_new_tms_table(void)
Definition: interface.c:462
struct adapter_driver opendous_adapter_driver
Definition: opendous.c:227
int tap_get_tms_path_len(enum tap_state from, enum tap_state to)
Function int tap_get_tms_path_len returns the total number of bits that represents a TMS path transit...
Definition: interface.c:206
struct adapter_driver xlnx_pcie_xvc_adapter_driver
Definition: xlnx-xvc.c:965
struct adapter_driver ftdi_adapter_driver
Definition: ftdi.c:1614
int adapter_config_trace(bool enabled, enum tpiu_pin_protocol pin_protocol, uint32_t port_size, unsigned int *trace_freq, unsigned int traceclkin_freq, uint16_t *prescaler)
Definition: jtag/core.c:1912
int adapter_poll_trace(uint8_t *buf, size_t *size)
Definition: jtag/core.c:1927
struct adapter_driver linuxspidev_adapter_driver
Definition: linuxspidev.c:629
void tap_set_end_state(enum tap_state new_end_state)
This function sets the state of an "end state follower" which tracks the state that any cable driver ...
Definition: interface.c:48
struct adapter_driver xds110_adapter_driver
Definition: xds110.c:2004
struct adapter_driver bcm2835gpio_adapter_driver
Definition: bcm2835gpio.c:691
struct adapter_driver armjtagew_adapter_driver
Definition: arm-jtag-ew.c:484
struct adapter_driver openjtag_adapter_driver
Definition: openjtag.c:898
struct adapter_driver vsllink_adapter_driver
Definition: vsllink.c:933
struct adapter_driver kitprog_adapter_driver
Definition: kitprog.c:914
struct adapter_driver at91rm9200_adapter_driver
Definition: at91rm9200.c:187
struct adapter_driver sysfsgpio_adapter_driver
Definition: sysfsgpio.c:550
struct adapter_driver am335xgpio_adapter_driver
Definition: am335xgpio.c:497
struct adapter_driver presto_adapter_driver
Definition: presto.c:527
struct adapter_driver rshim_dap_adapter_driver
Definition: rshim.c:511
void tap_set_state_impl(enum tap_state new_state)
implementation of wrapper function tap_set_state()
Definition: interface.c:31
int adapter_deassert_reset(void)
Definition: jtag/core.c:1895
enum tap_state jtag_debug_state_machine_(const void *tms_buf, const void *tdi_buf, unsigned int tap_len, enum tap_state start_tap_state)
Definition: interface.c:385
struct adapter_driver rlink_adapter_driver
Definition: rlink.c:1655
struct adapter_driver hl_adapter_driver
struct adapter_driver xvc_adapter_driver
Definition: xvc.c:735
struct adapter_driver jlink_adapter_driver
Definition: jlink.c:2342
struct adapter_driver eud_adapter_driver
Definition: eud.c:789
struct adapter_driver gw16012_adapter_driver
Definition: gw16012.c:517
static enum tap_state jtag_debug_state_machine(const void *tms_buf, const void *tdi_buf, unsigned int tap_len, enum tap_state start_tap_state)
Prints verbose TAP state transitions for the given TMS/TDI buffers.
Definition: interface.h:173
int tap_set_end_state_stable(enum tap_state new_end_state)
Similar as tap_set_end_state(), checks new_end_state is stable.
Definition: interface.c:56
struct adapter_driver ulink_adapter_driver
Definition: ulink.c:2262
int tap_move_ndx(enum tap_state astate)
Function tap_move_ndx when given a stable state, returns an index from 0-5.
Definition: interface.c:72
struct adapter_driver esp_usb_adapter_driver
Definition: esp_usb_jtag.c:762
enum tap_state tap_get_state(void)
This function gets the state of the "state follower" which tracks the state of the TAPs connected to ...
Definition: interface.c:37
bool tap_is_state_stable(enum tap_state astate)
Function tap_is_state_stable returns true if the astate is stable.
Definition: interface.c:211
int tap_get_tms_path(enum tap_state from, enum tap_state to)
This function provides a "bit sequence" indicating what has to be done with TMS during a sequence of ...
Definition: interface.c:201
struct adapter_driver cklink_adapter_driver
Definition: cklink.c:735
int adapter_assert_reset(void)
Definition: jtag/core.c:1875
struct adapter_driver usbprog_adapter_driver
Definition: usbprog.c:593
struct adapter_driver parport_adapter_driver
Definition: parport.c:580
enum tap_state tap_state_transition(enum tap_state current_state, bool tms)
Function tap_state_transition takes a current TAP state and returns the next state according to the t...
Definition: interface.c:234
struct adapter_driver jtag_dpi_adapter_driver
Definition: jtag_dpi.c:426
struct adapter_driver remote_bitbang_adapter_driver
The JTAG interface can be implemented with a software or hardware fifo.
tap_state
Defines JTAG Test Access Port states.
Definition: jtag.h:37
#define LOG_LEVEL_IS(FOO)
Definition: log.h:112
@ LOG_LVL_DEBUG_IO
Definition: log.h:56
Represents a driver for a debugging interface.
Definition: interface.h:219
struct jtag_interface * jtag_ops
Low-level JTAG APIs.
Definition: interface.h:362
int(* config_trace)(bool enabled, enum tpiu_pin_protocol pin_protocol, uint32_t port_size, unsigned int *trace_freq, unsigned int traceclkin_freq, uint16_t *prescaler)
Configure trace parameters for the adapter.
Definition: interface.h:346
int(* speed)(int speed)
Set the interface speed.
Definition: interface.h:282
const struct swim_driver * swim_ops
Definition: interface.h:374
unsigned int transport_preferred_id
ID of transport that gets auto-selected when not specified by the user.
Definition: interface.h:232
int(* khz)(int khz, int *jtag_speed)
Returns JTAG maximum speed for KHz.
Definition: interface.h:294
const struct command_registration * commands
The interface driver may register additional commands to expose additional features not covered by th...
Definition: interface.h:238
int(* speed_div)(int speed, int *khz)
Calculate the clock frequency (in KHz) for the given speed.
Definition: interface.h:303
unsigned int transport_ids
Bitmask of transport IDs supported in C code.
Definition: interface.h:226
int(* init)(void)
Interface driver must initialize any resources and connect to a JTAG device.
Definition: interface.h:251
const struct swd_driver * swd_ops
Low-level SWD APIs.
Definition: interface.h:365
int(* reset)(int srst, int trst)
Control (assert/deassert) the signals SRST and TRST on the interface.
Definition: interface.h:275
const struct dap_ops * dap_swd_ops
Definition: interface.h:371
int(* power_dropout)(int *power_dropout)
Read and clear the power dropout flag.
Definition: interface.h:316
const struct dap_ops * dap_jtag_ops
Definition: interface.h:368
int(* poll_trace)(uint8_t *buf, size_t *size)
Poll for new trace data.
Definition: interface.h:359
int(* srst_asserted)(int *srst_asserted)
Read and clear the srst asserted detection flag.
Definition: interface.h:330
const char *const name
The name of the interface driver.
Definition: interface.h:221
int(* quit)(void)
Interface driver must tear down all resources and disconnect from the JTAG device.
Definition: interface.h:259
Transport-neutral representation of queued DAP transactions, supporting both JTAG and SWD transports.
Definition: arm_adi_v5.h:446
Represents a driver for a debugging interface.
Definition: interface.h:194
unsigned int supported
Bit vector listing capabilities exposed by this driver.
Definition: interface.h:198
int(* execute_queue)(struct jtag_command *cmd_queue)
Execute commands in the supplied queue.
Definition: interface.h:207
This file implements support for STMicroelectronics debug protocol SWIM (Single Wire Interface Module...