openocd: src/target: replace the GPL-2.0-or-later license tag
[fw/openocd] / src / target / esirisc_trace.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /***************************************************************************
4  *   Copyright (C) 2018 by Square, Inc.                                    *
5  *   Steven Stallion <stallion@squareup.com>                               *
6  ***************************************************************************/
7
8 #ifndef OPENOCD_TARGET_ESIRISC_TRACE_H
9 #define OPENOCD_TARGET_ESIRISC_TRACE_H
10
11 #include <helper/command.h>
12 #include <helper/types.h>
13 #include <target/target.h>
14
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,
20 };
21
22 enum esirisc_trace_format {
23         ESIRISC_TRACE_FORMAT_FULL,
24         ESIRISC_TRACE_FORMAT_BRANCH,
25         ESIRISC_TRACE_FORMAT_ICACHE,
26 };
27
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,
33 };
34
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,
46 };
47
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,
59 };
60
61 struct esirisc_trace {
62         target_addr_t buffer_start;
63         target_addr_t buffer_end;
64         bool buffer_wrap;
65         bool flow_control;
66
67         enum esirisc_trace_format format;
68         int pc_bits;
69
70         enum esirisc_trace_trigger start_trigger;
71         uint32_t start_data;
72         uint32_t start_mask;
73
74         enum esirisc_trace_trigger stop_trigger;
75         uint32_t stop_data;
76         uint32_t stop_mask;
77
78         enum esirisc_trace_delay delay;
79         uint32_t delay_cycles;
80 };
81
82 extern const struct command_registration esirisc_trace_command_handlers[];
83
84 static inline uint32_t esirisc_trace_buffer_size(struct esirisc_trace *trace_info)
85 {
86         return trace_info->buffer_end - trace_info->buffer_start;
87 }
88
89 static inline bool esirisc_trace_is_fifo(struct esirisc_trace *trace_info)
90 {
91         return trace_info->buffer_start == trace_info->buffer_end;
92 }
93
94 #endif /* OPENOCD_TARGET_ESIRISC_TRACE_H */