OpenCSD - CoreSight Trace Decode Library 1.3.3
ocsd_if_types.h
Go to the documentation of this file.
1
8/*
9 * Redistribution and use in source and binary forms, with or without modification,
10 * are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of the copyright holder nor the names of its contributors
20 * may be used to endorse or promote products derived from this software without
21 * specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26 * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35#ifndef ARM_OCSD_IF_TYPES_H_INCLUDED
36#define ARM_OCSD_IF_TYPES_H_INCLUDED
37
38#include <stdint.h>
39#include <stddef.h>
40#if defined(_MSC_VER) && (_MSC_VER < 1900)
42#define __PRI64_PREFIX "ll"
43#define PRIX64 __PRI64_PREFIX "X"
44#define PRIu64 __PRI64_PREFIX "u"
45#define PRIu32 "u"
46#else
47#include <inttypes.h>
48#endif
49
50
63#ifdef ENABLE_LARGE_TRACE_SOURCES
64typedef uint64_t ocsd_trc_index_t;
65#define OCSD_TRC_IDX_STR PRIu64
66#else
67typedef uint32_t ocsd_trc_index_t;
68#define OCSD_TRC_IDX_STR PRIu32
69#endif
70
72#define OCSD_BAD_TRC_INDEX ((ocsd_trc_index_t)-1)
74#define OCSD_BAD_CS_SRC_ID ((uint8_t)-1)
76#define OCSD_IS_VALID_CS_SRC_ID(id) ((id > 0) && (id < 0x70))
78#define OCSD_IS_RESERVED_CS_SRC_ID(id) ((id == 0) || ((id >= 0x70) && (id <= 0x7F))
85typedef enum _ocsd_err_t {
86
87 /* general return errors */
88 OCSD_OK = 0,
98 /* attachment point errors */
102 /* source reader errors */
106 /* data path errors */
108 /* frame deformatter errors */
111 /* packet processor errors - protocol issues etc */
115 /* packet decoder errors */
123 /* decode tree errors */
125 /* target memory access errors */
131 /* test errors - errors generated only by the test code, not the library */
136 /* decoder registration */
141 /* decoder config */
143 /* end marker*/
146
147/* component handle types */
148typedef unsigned int ocsd_hndl_rdr_t;
149typedef unsigned int ocsd_hndl_err_log_t;
151/* common invalid handle type */
152#define OCSD_INVALID_HANDLE (unsigned int)-1
172
186
203
205#define OCSD_DATA_RESP_IS_FATAL(x) (x >= OCSD_RESP_FATAL_NOT_INIT)
207#define OCSD_DATA_RESP_IS_WARN(x) ((x == OCSD_RESP_WARN_CONT) || (x == OCSD_RESP_WARN_WAIT))
209#define OCSD_DATA_RESP_IS_ERR(x) ((x == OCSD_RESP_ERR_CONT) || (x == OCSD_RESP_ERR_WAIT))
211#define OCSD_DATA_RESP_IS_WARN_OR_ERR(x) (OCSD_DATA_RESP_IS_ERR(x) || OCSD_DATA_RESP_IS_WARN(x))
213#define OCSD_DATA_RESP_IS_CONT(x) (x < OCSD_RESP_WAIT)
215#define OCSD_DATA_RESP_IS_WAIT(x) ((x >= OCSD_RESP_WAIT) && (x < OCSD_RESP_FATAL_NOT_INIT))
216
233
234
242
243#define OCSD_DFRMTR_HAS_FSYNCS 0x01
244#define OCSD_DFRMTR_HAS_HSYNCS 0x02
245#define OCSD_DFRMTR_FRAME_MEM_ALIGN 0x04
246#define OCSD_DFRMTR_PACKED_RAW_OUT 0x08
247#define OCSD_DFRMTR_UNPACKED_RAW_OUT 0x10
248#define OCSD_DFRMTR_RESET_ON_4X_FSYNC 0x20
249#define OCSD_DFRMTR_VALID_MASK 0x3F
251#define OCSD_DFRMTR_FRAME_SIZE 0x10
261#define OCSD_CMPNAME_PREFIX_SOURCE_READER "SRDR"
263#define OCSD_CMPNAME_PREFIX_FRAMEDEFORMATTER "DFMT"
265#define OCSD_CMPNAME_PREFIX_PKTPROC "PKTP"
267#define OCSD_CMPNAME_PREFIX_PKTDEC "PDEC"
268
275typedef enum _ocsd_arch_version {
276 ARCH_UNKNOWN = 0x0000,
277 ARCH_CUSTOM = 0x0001,
278 ARCH_V7 = 0x0700,
279 ARCH_V8 = 0x0800,
280 ARCH_V8r3 = 0x0803,
281 ARCH_AA64 = 0x0864,
284
285// macros for arch version comparisons.
286#define OCSD_IS_V8_ARCH(arch) ((arch >= ARCH_V8) && (arch <= ARCH_V8_max))
287#define OCSD_IS_ARCH_MINVER(arch, min_arch) (arch >= min_arch)
288
290typedef enum _ocsd_core_profile {
297
299typedef struct _ocsd_arch_profile_t {
303
304/* may want to use a 32 bit v-addr when running on 32 bit only ARM platforms. */
305#ifdef USE_32BIT_V_ADDR
306typedef uint32_t ocsd_vaddr_t;
307#define OCSD_MAX_VA_BITSIZE 32
308#define OCSD_VA_MASK ~0UL
309#else
310typedef uint64_t ocsd_vaddr_t;
311#define OCSD_MAX_VA_BITSIZE 64
312#define OCSD_VA_MASK ~0ULL
313#endif
314
316#define OCSD_BIT_MASK(bits) (bits == OCSD_MAX_VA_BITSIZE) ? OCSD_VA_MASK : ((ocsd_vaddr_t)1 << bits) - 1
317
326typedef enum _ocsd_isa
327{
336
339typedef enum _ocsd_sec_level
340{
346
349typedef enum _ocsd_ex_level
350{
357
358
360typedef enum _ocsd_instr_type {
369
380
387typedef struct _ocsd_instr_info {
388 /* input information */
392 uint32_t opcode;
396 /* instruction decode info */
400 uint8_t instr_size;
402 uint8_t is_link;
406
407
411typedef struct _ocsd_pe_context {
414 uint32_t context_id;
415 uint32_t vmid;
416 struct {
417 uint32_t bits64:1;
418 uint32_t ctxt_id_valid:1;
419 uint32_t vmid_valid:1;
420 uint32_t el_valid:1;
421 };
423
424
443
465typedef uint32_t (* Fn_MemAcc_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint32_t reqBytes, uint8_t *byteBuffer);
466
489typedef uint32_t (* Fn_MemAccID_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint8_t trcID, const uint32_t reqBytes, uint8_t *byteBuffer);
490
491
493typedef struct _ocsd_file_mem_region {
494 size_t file_offset;
496 size_t region_size;
498
507#define OCSD_OPFLG_PKTPROC_NOFWD_BAD_PKTS 0x00000010
508#define OCSD_OPFLG_PKTPROC_NOMON_BAD_PKTS 0x00000020
509#define OCSD_OPFLG_PKTPROC_ERR_BAD_PKTS 0x00000040
510#define OCSD_OPFLG_PKTPROC_UNSYNC_ON_BAD_PKTS 0x00000080
513#define OCSD_OPFLG_PKTPROC_COMMON (OCSD_OPFLG_PKTPROC_NOFWD_BAD_PKTS | \
514 OCSD_OPFLG_PKTPROC_NOMON_BAD_PKTS | \
515 OCSD_OPFLG_PKTPROC_ERR_BAD_PKTS | \
516 OCSD_OPFLG_PKTPROC_UNSYNC_ON_BAD_PKTS )
517
519#define OCSD_OPFLG_COMP_MODE_MASK 0xFFFF0000
520
529#define OCSD_OPFLG_PKTDEC_ERROR_BAD_PKTS 0x00000100
530#define OCSD_OPFLG_PKTDEC_HALT_BAD_PKTS 0x00000200
533#define OCSD_OPFLG_PKTDEC_COMMON (OCSD_OPFLG_PKTDEC_ERROR_BAD_PKTS | OCSD_OPFLG_PKTDEC_HALT_BAD_PKTS)
534
547#define OCSD_CREATE_FLG_PACKET_PROC 0x01
548#define OCSD_CREATE_FLG_FULL_DECODER 0x02
549#define OCSD_CREATE_FLG_INST_ID 0x04
551#define OCSD_BUILTIN_DCD_STM "STM"
552#define OCSD_BUILTIN_DCD_ETMV3 "ETMV3"
553#define OCSD_BUILTIN_DCD_ETMV4I "ETMV4I"
554#define OCSD_BUILTIN_DCD_ETMV4D "ETMV4D"
555#define OCSD_BUILTIN_DCD_PTM "PTM"
556#define OCSD_BUILTIN_DCD_ETE "ETE"
563/* Built in library decoders */
571/* others to be added here */
574/* Custom / external decoders */
585
588
590#define OCSD_PROTOCOL_IS_BUILTIN(P) ((P > OCSD_PROTOCOL_UNKNOWN) && (P < OCSD_PROTOCOL_BUILTIN_END))
591
593#define OCSD_PROTOCOL_IS_CUSTOM(P) ((P >= OCSD_PROTOCOL_CUSTOM_0) && (P < OCSD_PROTOCOL_END ))
594
613typedef struct _ocsd_swt_info {
616 union {
617 struct {
620 uint32_t swt_marker_packet:1;
621 uint32_t swt_has_timestamp:1;
622 uint32_t swt_marker_first:1;
623 uint32_t swt_master_err:1;
624 uint32_t swt_global_err:1;
625 uint32_t swt_trigger_event:1;
626 uint32_t swt_frequency:1;
627 uint32_t swt_id_valid:1;
628 };
630 };
632
634#define SWT_ID_VALID_MASK (0x1 << 23)
635
647typedef struct _ocsd_demux_stats {
648 uint64_t valid_id_bytes;
649 uint64_t no_id_bytes;
652 uint64_t frame_bytes;
654
671typedef struct _ocsd_decode_stats {
672 uint32_t version;
673 uint16_t revision;
674 /* single channel block */
675 uint64_t channel_total;
682
683#define OCSD_STATS_REVISION 0x1
684
689#endif // ARM_OCSD_IF_TYPES_H_INCLUDED
690
691/* End of File opencsd/ocsd_if_types.h */
_ocsd_dcd_tree_src_t
_ocsd_err_t
Definition: ocsd_if_types.h:85
enum _ocsd_dcd_tree_src_t ocsd_dcd_tree_src_t
enum _ocsd_sec_level ocsd_sec_level
_ocsd_isa
struct _ocsd_swt_info ocsd_swt_info_t
enum _ocsd_instr_subtype ocsd_instr_subtype
_rcdtl_rawframe_elem_t
_ocsd_mem_space_acc_t
struct _ocsd_file_mem_region ocsd_file_mem_region_t
enum _ocsd_core_profile ocsd_core_profile_t
_ocsd_datapath_resp_t
_ocsd_core_profile
_ocsd_ex_level
enum _ocsd_instr_type ocsd_instr_type
uint32_t ocsd_trc_index_t
Definition: ocsd_if_types.h:67
uint32_t(* Fn_MemAccID_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint8_t trcID, const uint32_t reqBytes, uint8_t *byteBuffer)
enum _ocsd_trace_protocol_t ocsd_trace_protocol_t
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
_ocsd_instr_subtype
struct _ocsd_pe_context ocsd_pe_context
struct _ocsd_decode_stats ocsd_decode_stats_t
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
enum _ocsd_ex_level ocsd_ex_level
_ocsd_trace_protocol_t
unsigned int ocsd_hndl_rdr_t
enum _rcdtl_rawframe_elem_t ocsd_rawframe_elem_t
uint32_t(* Fn_MemAcc_CB)(const void *p_context, const ocsd_vaddr_t address, const ocsd_mem_space_acc_t mem_space, const uint32_t reqBytes, uint8_t *byteBuffer)
struct _ocsd_arch_profile_t ocsd_arch_profile_t
_ocsd_instr_type
_ocsd_sec_level
enum _ocsd_arch_version ocsd_arch_version_t
struct _ocsd_demux_stats ocsd_demux_stats_t
_ocsd_datapath_op_t
enum _ocsd_datapath_op_t ocsd_datapath_op_t
_ocsd_arch_version
unsigned int ocsd_hndl_err_log_t
enum _ocsd_err_severity_t ocsd_err_severity_t
struct _ocsd_instr_info ocsd_instr_info
enum _ocsd_err_t ocsd_err_t
enum _ocsd_isa ocsd_isa
uint64_t ocsd_vaddr_t
_ocsd_err_severity_t
@ OCSD_TRC_SRC_SINGLE
@ OCSD_TRC_SRC_FRAME_FORMATTED
@ OCSD_ERR_TEST_SNAPSHOT_PARSE_INFO
@ OCSD_ERR_DCDT_NO_FORMATTER
@ OCSD_ERR_DATA_DECODE_FATAL
@ OCSD_ERR_DCDREG_TOOMANY
@ OCSD_ERR_MEM_NACC
@ OCSD_ERR_RDR_NO_DECODER
@ OCSD_ERR_RDR_INVALID_INIT
@ OCSD_ERR_MEM_ACC_RANGE_INVALID
@ OCSD_ERR_FAIL
Definition: ocsd_if_types.h:89
@ OCSD_ERR_NO_PROTOCOL
Definition: ocsd_if_types.h:97
@ OCSD_ERR_DFMTR_NOTCONTTRACE
@ OCSD_ERR_MEM_ACC_FILE_DIFF_RANGE
@ OCSD_ERR_BAD_HANDLE
Definition: ocsd_if_types.h:93
@ OCSD_ERR_BAD_DECODE_PKT
@ OCSD_ERR_INVALID_ID
Definition: ocsd_if_types.h:92
@ OCSD_ERR_TEST_SNAPSHOT_READ
@ OCSD_ERR_LAST
@ OCSD_ERR_DCD_INTERFACE_UNUSED
@ OCSD_ERR_DCDREG_TYPE_UNKNOWN
@ OCSD_ERR_ATTACH_TOO_MANY
Definition: ocsd_if_types.h:99
@ OCSD_ERR_MEM_ACC_BAD_LEN
@ OCSD_ERR_UNSUPP_DECODE_PKT
@ OCSD_ERR_COMMIT_PKT_OVERRUN
@ OCSD_OK
Definition: ocsd_if_types.h:88
@ OCSD_ERR_FILE_ERROR
Definition: ocsd_if_types.h:96
@ OCSD_ERR_ATTACH_COMP_NOT_FOUND
@ OCSD_ERR_MEM_ACC_FILE_NOT_FOUND
@ OCSD_ERR_ATTACH_INVALID_PARAM
@ OCSD_ERR_UNSUPPORTED_ISA
@ OCSD_ERR_INVALID_PARAM_VAL
Definition: ocsd_if_types.h:94
@ OCSD_ERR_NOT_INIT
Definition: ocsd_if_types.h:91
@ OCSD_ERR_BAD_PACKET_SEQ
@ OCSD_ERR_RDR_FILE_NOT_FOUND
@ OCSD_ERR_DFMTR_BAD_FHSYNC
@ OCSD_ERR_DCDREG_NAME_REPEAT
@ OCSD_ERR_INVALID_PARAM_TYPE
Definition: ocsd_if_types.h:95
@ OCSD_ERR_MEM_ACC_OVERLAP
@ OCSD_ERR_INVALID_PCKT_HDR
@ OCSD_ERR_PKT_INTERP_FAIL
@ OCSD_ERR_MEM
Definition: ocsd_if_types.h:90
@ OCSD_ERR_RET_STACK_OVERFLOW
@ OCSD_ERR_TEST_SS_TO_DECODER
@ OCSD_ERR_DCDREG_NAME_UNKNOWN
@ OCSD_ERR_TEST_SNAPSHOT_PARSE
@ OCSD_ERR_HW_CFG_UNSUPP
@ ocsd_isa_arm
@ ocsd_isa_jazelle
@ ocsd_isa_aarch64
@ ocsd_isa_tee
@ ocsd_isa_custom
@ ocsd_isa_unknown
@ ocsd_isa_thumb2
@ OCSD_FRM_PACKED
@ OCSD_FRM_FSYNC
@ OCSD_FRM_NONE
@ OCSD_FRM_ID_DATA
@ OCSD_FRM_HSYNC
@ OCSD_MEM_SPACE_EL1N
@ OCSD_MEM_SPACE_EL2S
@ OCSD_MEM_SPACE_S
@ OCSD_MEM_SPACE_EL2
@ OCSD_MEM_SPACE_ANY
@ OCSD_MEM_SPACE_N
@ OCSD_MEM_SPACE_EL1S
@ OCSD_MEM_SPACE_EL3
@ OCSD_RESP_WARN_CONT
@ OCSD_RESP_ERR_WAIT
@ OCSD_RESP_WARN_WAIT
@ OCSD_RESP_CONT
@ OCSD_RESP_FATAL_SYS_ERR
@ OCSD_RESP_FATAL_INVALID_DATA
@ OCSD_RESP_ERR_CONT
@ OCSD_RESP_FATAL_NOT_INIT
@ OCSD_RESP_FATAL_INVALID_PARAM
@ OCSD_RESP_FATAL_INVALID_OP
@ OCSD_RESP_WAIT
@ profile_CortexA
@ profile_Custom
@ profile_Unknown
@ profile_CortexR
@ profile_CortexM
@ ocsd_EL1
@ ocsd_EL0
@ ocsd_EL_unknown
@ ocsd_EL2
@ ocsd_EL3
@ OCSD_S_INSTR_V7_IMPLIED_RET
@ OCSD_S_INSTR_NONE
@ OCSD_S_INSTR_V8_ERET
@ OCSD_S_INSTR_BR_LINK
@ OCSD_S_INSTR_V8_RET
@ OCSD_PROTOCOL_STM
@ OCSD_PROTOCOL_CUSTOM_1
@ OCSD_PROTOCOL_BUILTIN_END
@ OCSD_PROTOCOL_CUSTOM_0
@ OCSD_PROTOCOL_ETMV4I
@ OCSD_PROTOCOL_UNKNOWN
@ OCSD_PROTOCOL_END
@ OCSD_PROTOCOL_CUSTOM_2
@ OCSD_PROTOCOL_ETMV3
@ OCSD_PROTOCOL_CUSTOM_4
@ OCSD_PROTOCOL_CUSTOM_7
@ OCSD_PROTOCOL_CUSTOM_8
@ OCSD_PROTOCOL_CUSTOM_3
@ OCSD_PROTOCOL_CUSTOM_9
@ OCSD_PROTOCOL_CUSTOM_5
@ OCSD_PROTOCOL_CUSTOM_6
@ OCSD_PROTOCOL_ETE
@ OCSD_PROTOCOL_PTM
@ OCSD_PROTOCOL_ETMV4D
@ OCSD_INSTR_TSTART
@ OCSD_INSTR_DSB_DMB
@ OCSD_INSTR_WFI_WFE
@ OCSD_INSTR_OTHER
@ OCSD_INSTR_BR
@ OCSD_INSTR_BR_INDIRECT
@ OCSD_INSTR_ISB
@ ocsd_sec_root
@ ocsd_sec_nonsecure
@ ocsd_sec_secure
@ ocsd_sec_realm
@ OCSD_OP_EOT
@ OCSD_OP_FLUSH
@ OCSD_OP_DATA
@ OCSD_OP_RESET
@ ARCH_V7
@ ARCH_AA64
@ ARCH_CUSTOM
@ ARCH_V8r3
@ ARCH_V8_max
@ ARCH_V8
@ ARCH_UNKNOWN
@ OCSD_ERR_SEV_ERROR
@ OCSD_ERR_SEV_WARN
@ OCSD_ERR_SEV_INFO
@ OCSD_ERR_SEV_NONE
ocsd_arch_version_t arch
ocsd_core_profile_t profile
uint32_t bad_header_errs
uint32_t bad_sequence_errs
uint64_t channel_unsynced
ocsd_demux_stats_t demux
uint64_t valid_id_bytes
uint64_t reserved_id_bytes
uint64_t unknown_id_bytes
ocsd_vaddr_t start_address
uint8_t dsb_dmb_waypoints
ocsd_instr_type type
uint8_t thumb_it_conditions
ocsd_instr_subtype sub_type
uint8_t wfi_wfe_branch
uint8_t is_conditional
ocsd_arch_profile_t pe_type
ocsd_vaddr_t instr_addr
ocsd_vaddr_t branch_addr
ocsd_sec_level security_level
ocsd_ex_level exception_level
uint32_t ctxt_id_valid
uint32_t swt_payload_num_packets
uint32_t swt_has_timestamp
uint16_t swt_channel_id
uint32_t swt_marker_packet
uint32_t swt_master_err
uint32_t swt_flag_bits
uint32_t swt_id_valid
uint32_t swt_frequency
uint32_t swt_payload_pkt_bitsize
uint32_t swt_marker_first
uint16_t swt_master_id
uint32_t swt_trigger_event
uint32_t swt_global_err