OpenOCD
cmsis_dap.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #ifndef OPENOCD_JTAG_DRIVERS_CMSIS_DAP_H
4 #define OPENOCD_JTAG_DRIVERS_CMSIS_DAP_H
5 
6 #include <stdint.h>
7 
8 /* Define a short timeout in milliseconds that the driver uses to flush the
9  * pipeline. The driver expects this timeout to occur, so the backend may want
10  * to handle it differently than a normal (unexpected) timeout.
11  */
12 #define CMSIS_DAP_TIMEOUT_SHORT_MS 10
13 
14 struct cmsis_dap_backend;
16 
18  uint8_t cmd;
19  uint32_t data;
20  void *buffer;
21 };
22 
23 /* Up to MIN(packet_count, MAX_PENDING_REQUESTS) requests may be issued
24  * until the first response arrives */
25 #define MAX_PENDING_REQUESTS 4
26 
29  unsigned int transfer_count;
30  uint8_t command;
31 };
32 
33 struct cmsis_dap {
35  const struct cmsis_dap_backend *backend;
36  unsigned int packet_size;
37  unsigned int packet_usable_size;
38  unsigned int packet_buffer_size;
39  uint8_t *packet_buffer;
40  uint8_t *command;
41  uint8_t *response;
42 
43  /* DP/AP register r/w operation counters used for checking the packet size
44  * that would result from the queue run */
45  unsigned int write_count;
46  unsigned int read_count;
47 
48  /* We can use DAP_TransferBlock only if all SWD operations in the packet
49  * are either all writes or all reads and use the same DP/AP register.
50  * The following variables keep track of it */
51  uint8_t common_swd_cmd;
53 
54  /* Pending requests are organized as a FIFO - circular buffer */
56  unsigned int packet_count;
59 
60  uint16_t caps;
61 
62  uint32_t swo_buf_sz;
64 };
65 
66 /* Read mode */
70 };
71 
73  const char *name;
74  int (*open)(struct cmsis_dap *dap, const uint16_t vids[], const uint16_t pids[], const char *serial);
75  void (*close)(struct cmsis_dap *dap);
76  int (*read)(struct cmsis_dap *dap, int transfer_timeout_ms,
77  enum cmsis_dap_blocking blocking);
78  int (*write)(struct cmsis_dap *dap, int len, int timeout_ms);
79  int (*packet_buffer_alloc)(struct cmsis_dap *dap, unsigned int pkt_sz);
80  void (*packet_buffer_free)(struct cmsis_dap *dap);
81  void (*cancel_all)(struct cmsis_dap *dap);
82 };
83 
84 extern const struct cmsis_dap_backend cmsis_dap_hid_backend;
85 extern const struct cmsis_dap_backend cmsis_dap_usb_backend;
86 extern const struct cmsis_dap_backend cmsis_dap_tcp_backend;
89 
90 #define REPORT_ID_SIZE 1
91 
92 #endif
char * serial
Definition: adapter.c:49
#define MAX_PENDING_REQUESTS
Definition: cmsis_dap.h:25
const struct cmsis_dap_backend cmsis_dap_usb_backend
Definition: cmsis_dap.c:45
const struct command_registration cmsis_dap_usb_subcommand_handlers[]
const struct cmsis_dap_backend cmsis_dap_hid_backend
Definition: cmsis_dap.c:51
const struct command_registration cmsis_dap_tcp_subcommand_handlers[]
cmsis_dap_blocking
Definition: cmsis_dap.h:67
@ CMSIS_DAP_NON_BLOCKING
Definition: cmsis_dap.h:68
@ CMSIS_DAP_BLOCKING
Definition: cmsis_dap.h:69
const struct cmsis_dap_backend cmsis_dap_tcp_backend
Definition: cmsis_dap.c:57
int(* read)(struct cmsis_dap *dap, int transfer_timeout_ms, enum cmsis_dap_blocking blocking)
Definition: cmsis_dap.h:76
void(* cancel_all)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:81
const char * name
Definition: cmsis_dap.h:73
int(* packet_buffer_alloc)(struct cmsis_dap *dap, unsigned int pkt_sz)
Definition: cmsis_dap.h:79
void(* close)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:75
int(* open)(struct cmsis_dap *dap, const uint16_t vids[], const uint16_t pids[], const char *serial)
Definition: cmsis_dap.h:74
void(* packet_buffer_free)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:80
int(* write)(struct cmsis_dap *dap, int len, int timeout_ms)
Definition: cmsis_dap.h:78
unsigned int packet_buffer_size
Definition: cmsis_dap.h:38
unsigned int packet_usable_size
Definition: cmsis_dap.h:37
struct pending_request_block pending_fifo[MAX_PENDING_REQUESTS]
Definition: cmsis_dap.h:55
unsigned int pending_fifo_put_idx
Definition: cmsis_dap.h:57
uint16_t caps
Definition: cmsis_dap.h:60
unsigned int packet_size
Definition: cmsis_dap.h:36
struct cmsis_dap_backend_data * bdata
Definition: cmsis_dap.h:34
unsigned int read_count
Definition: cmsis_dap.h:46
unsigned int pending_fifo_block_count
Definition: cmsis_dap.h:58
bool trace_enabled
Definition: cmsis_dap.h:63
uint8_t * response
Definition: cmsis_dap.h:41
bool swd_cmds_differ
Definition: cmsis_dap.h:52
uint8_t common_swd_cmd
Definition: cmsis_dap.h:51
uint8_t * command
Definition: cmsis_dap.h:40
unsigned int packet_count
Definition: cmsis_dap.h:56
uint8_t * packet_buffer
Definition: cmsis_dap.h:39
unsigned int write_count
Definition: cmsis_dap.h:45
const struct cmsis_dap_backend * backend
Definition: cmsis_dap.h:35
unsigned int pending_fifo_get_idx
Definition: cmsis_dap.h:57
uint32_t swo_buf_sz
Definition: cmsis_dap.h:62
struct pending_transfer_result * transfers
Definition: cmsis_dap.h:28
unsigned int transfer_count
Definition: cmsis_dap.h:29