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  unsigned int response_size;
43 
44  /* DP/AP register r/w operation counters used for checking the packet size
45  * that would result from the queue run */
46  unsigned int write_count;
47  unsigned int read_count;
48 
49  /* We can use DAP_TransferBlock only if all SWD operations in the packet
50  * are either all writes or all reads and use the same DP/AP register.
51  * The following variables keep track of it */
52  uint8_t common_swd_cmd;
54 
55  /* Pending requests are organized as a FIFO - circular buffer */
57  unsigned int packet_count;
60 
61  uint16_t caps;
62 
63  uint32_t swo_buf_sz;
65 };
66 
67 /* Read mode */
71 };
72 
74  const char *name;
75  int (*open)(struct cmsis_dap *dap, const uint16_t vids[], const uint16_t pids[], const char *serial);
76  void (*close)(struct cmsis_dap *dap);
77  int (*read)(struct cmsis_dap *dap, int transfer_timeout_ms,
78  enum cmsis_dap_blocking blocking);
79  int (*write)(struct cmsis_dap *dap, int len, int timeout_ms);
80  int (*packet_buffer_alloc)(struct cmsis_dap *dap, unsigned int pkt_sz);
81  void (*packet_buffer_free)(struct cmsis_dap *dap);
82  void (*cancel_all)(struct cmsis_dap *dap);
83 };
84 
85 extern const struct cmsis_dap_backend cmsis_dap_hid_backend;
86 extern const struct cmsis_dap_backend cmsis_dap_usb_backend;
87 extern const struct cmsis_dap_backend cmsis_dap_tcp_backend;
90 
91 #define REPORT_ID_SIZE 1
92 
93 #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:68
@ CMSIS_DAP_NON_BLOCKING
Definition: cmsis_dap.h:69
@ CMSIS_DAP_BLOCKING
Definition: cmsis_dap.h:70
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:77
void(* cancel_all)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:82
const char * name
Definition: cmsis_dap.h:74
int(* packet_buffer_alloc)(struct cmsis_dap *dap, unsigned int pkt_sz)
Definition: cmsis_dap.h:80
void(* close)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:76
int(* open)(struct cmsis_dap *dap, const uint16_t vids[], const uint16_t pids[], const char *serial)
Definition: cmsis_dap.h:75
void(* packet_buffer_free)(struct cmsis_dap *dap)
Definition: cmsis_dap.h:81
int(* write)(struct cmsis_dap *dap, int len, int timeout_ms)
Definition: cmsis_dap.h:79
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:56
unsigned int pending_fifo_put_idx
Definition: cmsis_dap.h:58
uint16_t caps
Definition: cmsis_dap.h:61
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:47
unsigned int pending_fifo_block_count
Definition: cmsis_dap.h:59
unsigned int response_size
Definition: cmsis_dap.h:42
bool trace_enabled
Definition: cmsis_dap.h:64
uint8_t * response
Definition: cmsis_dap.h:41
bool swd_cmds_differ
Definition: cmsis_dap.h:53
uint8_t common_swd_cmd
Definition: cmsis_dap.h:52
uint8_t * command
Definition: cmsis_dap.h:40
unsigned int packet_count
Definition: cmsis_dap.h:57
uint8_t * packet_buffer
Definition: cmsis_dap.h:39
unsigned int write_count
Definition: cmsis_dap.h:46
const struct cmsis_dap_backend * backend
Definition: cmsis_dap.h:35
unsigned int pending_fifo_get_idx
Definition: cmsis_dap.h:58
uint32_t swo_buf_sz
Definition: cmsis_dap.h:63
struct pending_transfer_result * transfers
Definition: cmsis_dap.h:28
unsigned int transfer_count
Definition: cmsis_dap.h:29