target/xtensa: virtualize XDM registers
[openocd.git] / src / target / esirisc_trace.h
blob9c08d96b49056bba5fc98ccbc9af942628023bd2
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2018 by Square, Inc. *
5 * Steven Stallion <stallion@squareup.com> *
6 ***************************************************************************/
8 #ifndef OPENOCD_TARGET_ESIRISC_TRACE_H
9 #define OPENOCD_TARGET_ESIRISC_TRACE_H
11 #include <helper/command.h>
12 #include <helper/types.h>
13 #include <target/target.h>
15 enum esirisc_trace_delay {
16 ESIRISC_TRACE_DELAY_NONE,
17 ESIRISC_TRACE_DELAY_START,
18 ESIRISC_TRACE_DELAY_STOP,
19 ESIRISC_TRACE_DELAY_BOTH,
22 enum esirisc_trace_format {
23 ESIRISC_TRACE_FORMAT_FULL,
24 ESIRISC_TRACE_FORMAT_BRANCH,
25 ESIRISC_TRACE_FORMAT_ICACHE,
28 enum esirisc_trace_id {
29 ESIRISC_TRACE_ID_EXECUTE,
30 ESIRISC_TRACE_ID_STALL,
31 ESIRISC_TRACE_ID_BRANCH,
32 ESIRISC_TRACE_ID_EXTENDED,
35 enum esirisc_trace_ext_id {
36 ESIRISC_TRACE_EXT_ID_EXCEPTION = 1,
37 ESIRISC_TRACE_EXT_ID_ERET,
38 ESIRISC_TRACE_EXT_ID_STOP,
39 ESIRISC_TRACE_EXT_ID_WAIT,
40 ESIRISC_TRACE_EXT_ID_MULTICYCLE,
41 ESIRISC_TRACE_EXT_ID_COUNT,
42 ESIRISC_TRACE_EXT_ID_PC,
43 ESIRISC_TRACE_EXT_ID_INDIRECT,
44 ESIRISC_TRACE_EXT_ID_END,
45 ESIRISC_TRACE_EXT_ID_END_PC,
48 enum esirisc_trace_trigger {
49 ESIRISC_TRACE_TRIGGER_NONE,
50 ESIRISC_TRACE_TRIGGER_PC,
51 ESIRISC_TRACE_TRIGGER_LOAD,
52 ESIRISC_TRACE_TRIGGER_STORE,
53 ESIRISC_TRACE_TRIGGER_EXCEPTION,
54 ESIRISC_TRACE_TRIGGER_ERET,
55 ESIRISC_TRACE_TRIGGER_WAIT,
56 ESIRISC_TRACE_TRIGGER_STOP,
57 ESIRISC_TRACE_TRIGGER_HIGH,
58 ESIRISC_TRACE_TRIGGER_LOW,
61 struct esirisc_trace {
62 target_addr_t buffer_start;
63 target_addr_t buffer_end;
64 bool buffer_wrap;
65 bool flow_control;
67 enum esirisc_trace_format format;
68 int pc_bits;
70 enum esirisc_trace_trigger start_trigger;
71 uint32_t start_data;
72 uint32_t start_mask;
74 enum esirisc_trace_trigger stop_trigger;
75 uint32_t stop_data;
76 uint32_t stop_mask;
78 enum esirisc_trace_delay delay;
79 uint32_t delay_cycles;
82 extern const struct command_registration esirisc_trace_command_handlers[];
84 static inline uint32_t esirisc_trace_buffer_size(struct esirisc_trace *trace_info)
86 return trace_info->buffer_end - trace_info->buffer_start;
89 static inline bool esirisc_trace_is_fifo(struct esirisc_trace *trace_info)
91 return trace_info->buffer_start == trace_info->buffer_end;
94 #endif /* OPENOCD_TARGET_ESIRISC_TRACE_H */