OpenCSD - CoreSight Trace Decode Library  0.9.0
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)
41 
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
64 typedef uint64_t ocsd_trc_index_t;
65 #define OCSD_TRC_IDX_STR PRIu64
66 #else
67 typedef 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)
73 
74 #define OCSD_BAD_CS_SRC_ID ((uint8_t)-1)
75 
76 #define OCSD_IS_VALID_CS_SRC_ID(id) ((id > 0) && (id < 0x70))
77 
78 #define OCSD_IS_RESERVED_CS_SRC_ID(id) ((id == 0) || ((id >= 0x70) && (id <= 0x7F))
79 
85 typedef 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 */
110  /* packet processor errors - protocol issues etc */
114  /* packet decoder errors */
122  /* decode tree errors */
124  /* target memory access errors */
129  /* test errors - errors generated only by the test code, not the library */
134  /* decoder registration */
139  /* decoder config */
141  /* end marker*/
143 } ocsd_err_t;
144 
145 /* component handle types */
146 typedef unsigned int ocsd_hndl_rdr_t;
147 typedef unsigned int ocsd_hndl_err_log_t;
149 /* common invalid handle type */
150 #define OCSD_INVALID_HANDLE (unsigned int)-1
164 typedef enum _ocsd_err_severity_t {
170 
178 typedef enum _ocsd_datapath_op_t {
184 
188 typedef enum _ocsd_datapath_resp_t {
201 
203 #define OCSD_DATA_RESP_IS_FATAL(x) (x >= OCSD_RESP_FATAL_NOT_INIT)
204 
205 #define OCSD_DATA_RESP_IS_WARN(x) ((x == OCSD_RESP_WARN_CONT) || (x == OCSD_RESP_WARN_WAIT))
206 
207 #define OCSD_DATA_RESP_IS_ERR(x) ((x == OCSD_RESP_ERR_CONT) || (x == OCSD_RESP_ERR_WAIT))
208 
209 #define OCSD_DATA_RESP_IS_WARN_OR_ERR(x) (OCSD_DATA_RESP_IS_ERR(x) || OCSD_DATA_RESP_IS_WARN(x))
210 
211 #define OCSD_DATA_RESP_IS_CONT(x) (x < OCSD_RESP_WAIT)
212 
213 #define OCSD_DATA_RESP_IS_WAIT(x) ((x >= OCSD_RESP_WAIT) && (x < OCSD_RESP_FATAL_NOT_INIT))
214 
231 
232 
236 typedef enum _ocsd_dcd_tree_src_t {
240 
241 #define OCSD_DFRMTR_HAS_FSYNCS 0x01
242 #define OCSD_DFRMTR_HAS_HSYNCS 0x02
243 #define OCSD_DFRMTR_FRAME_MEM_ALIGN 0x04
244 #define OCSD_DFRMTR_PACKED_RAW_OUT 0x08
245 #define OCSD_DFRMTR_UNPACKED_RAW_OUT 0x10
246 #define OCSD_DFRMTR_RESET_ON_4X_FSYNC 0x20
247 #define OCSD_DFRMTR_VALID_MASK 0x3F
249 #define OCSD_DFRMTR_FRAME_SIZE 0x10
259 #define OCSD_CMPNAME_PREFIX_SOURCE_READER "SRDR"
260 
261 #define OCSD_CMPNAME_PREFIX_FRAMEDEFORMATTER "DFMT"
262 
263 #define OCSD_CMPNAME_PREFIX_PKTPROC "PKTP"
264 
265 #define OCSD_CMPNAME_PREFIX_PKTDEC "PDEC"
266 
273 typedef enum _ocsd_arch_version {
279 
281 typedef enum _ocsd_core_profile {
288 
290 typedef struct _ocsd_arch_profile_t {
294 
295 /* may want to use a 32 bit v-addr when running on 32 bit only ARM platforms. */
296 #ifdef USE_32BIT_V_ADDR
297 typedef uint32_t ocsd_vaddr_t;
298 #define OCSD_MAX_VA_BITSIZE 32
299 #define OCSD_VA_MASK ~0UL
300 #else
301 typedef uint64_t ocsd_vaddr_t;
302 #define OCSD_MAX_VA_BITSIZE 64
303 #define OCSD_VA_MASK ~0ULL
304 #endif
305 
307 #define OCSD_BIT_MASK(bits) (bits == OCSD_MAX_VA_BITSIZE) ? OCSD_VA_MASK : ((ocsd_vaddr_t)1 << bits) - 1
308 
317 typedef enum _ocsd_isa
318 {
326 } ocsd_isa;
327 
330 typedef enum _ocsd_sec_level
331 {
334 } ocsd_sec_level ;
335 
338 typedef enum _ocsd_ex_level
339 {
341  ocsd_EL0 = 0,
345 } ocsd_ex_level;
346 
347 
349 typedef enum _ocsd_instr_type {
356 
360 typedef enum _ocsd_instr_subtype {
366 
373 typedef struct _ocsd_instr_info {
374  /* input information */
378  uint32_t opcode;
381  /* instruction decode info */
385  uint8_t instr_size;
386  uint8_t is_conditional;
387  uint8_t is_link;
391 
392 
396 typedef struct _ocsd_pe_context {
399  uint32_t context_id;
400  uint32_t vmid;
401  struct {
402  uint32_t bits64:1;
403  uint32_t ctxt_id_valid:1;
404  uint32_t vmid_valid:1;
405  uint32_t el_valid:1;
406  };
408 
409 
418 typedef enum _ocsd_mem_space_acc_t {
427 
449 typedef 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);
450 
451 
453 typedef struct _ocsd_file_mem_region {
454  size_t file_offset;
456  size_t region_size;
458 
466 #define OCSD_OPFLG_PKTPROC_NOFWD_BAD_PKTS 0x00000001
467 #define OCSD_OPFLG_PKTPROC_NOMON_BAD_PKTS 0x00000002
468 #define OCSD_OPFLG_PKTPROC_ERR_BAD_PKTS 0x00000004
469 #define OCSD_OPFLG_PKTPROC_UNSYNC_ON_BAD_PKTS 0x00000008
472 #define OCSD_OPFLG_PKTPROC_COMMON (OCSD_OPFLG_PKTPROC_NOFWD_BAD_PKTS | \
473  OCSD_OPFLG_PKTPROC_NOMON_BAD_PKTS | \
474  OCSD_OPFLG_PKTPROC_ERR_BAD_PKTS | \
475  OCSD_OPFLG_PKTPROC_UNSYNC_ON_BAD_PKTS )
476 
484 #define OCSD_OPFLG_PKTDEC_ERROR_BAD_PKTS 0x00000001
487 #define OCSD_OPFLG_PKTDEC_COMMON (OCSD_OPFLG_PKTDEC_ERROR_BAD_PKTS)
488 
500 #define OCSD_CREATE_FLG_PACKET_PROC 0x01
501 #define OCSD_CREATE_FLG_FULL_DECODER 0x02
502 #define OCSD_CREATE_FLG_INST_ID 0x04
504 #define OCSD_BUILTIN_DCD_STM "STM"
505 #define OCSD_BUILTIN_DCD_ETMV3 "ETMV3"
506 #define OCSD_BUILTIN_DCD_ETMV4I "ETMV4I"
507 #define OCSD_BUILTIN_DCD_ETMV4D "ETMV4D"
508 #define OCSD_BUILTIN_DCD_PTM "PTM"
512 typedef enum _ocsd_trace_protocol_t {
515 /* Built in library decoders */
522 /* others to be added here */
525 /* Custom / external decoders */
536 
539 
541 #define OCSD_PROTOCOL_IS_BUILTIN(P) ((P > OCSD_PROTOCOL_UNKNOWN) && (P < OCSD_PROTOCOL_BUILTIN_END))
542 
544 #define OCSD_PROTOCOL_IS_CUSTOM(P) ((P >= OCSD_PROTOCOL_CUSTOM_0) && (P < OCSD_PROTOCOL_END ))
545 
564 typedef struct _ocsd_swt_info {
565  uint16_t swt_master_id;
566  uint16_t swt_channel_id;
567  union {
568  struct {
571  uint32_t swt_marker_packet:1;
572  uint32_t swt_has_timestamp:1;
573  uint32_t swt_marker_first:1;
574  uint32_t swt_master_err:1;
575  uint32_t swt_global_err:1;
576  uint32_t swt_trigger_event:1;
577  uint32_t swt_frequency:1;
578  uint32_t swt_id_valid:1;
579  };
580  uint32_t swt_flag_bits;
581  };
583 
585 #define SWT_ID_VALID_MASK (0x1 << 23)
586 
590 #endif // ARM_OCSD_IF_TYPES_H_INCLUDED
591 
592 /* End of File opencsd/ocsd_if_types.h */
enum _ocsd_datapath_op_t ocsd_datapath_op_t
uint32_t swt_master_err
uint32_t swt_has_timestamp
ocsd_ex_level exception_level
_ocsd_datapath_op_t
uint32_t swt_marker_packet
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)
_ocsd_datapath_resp_t
ocsd_core_profile_t profile
uint32_t ctxt_id_valid
uint32_t swt_global_err
_ocsd_mem_space_acc_t
uint64_t ocsd_vaddr_t
uint16_t swt_channel_id
struct _ocsd_arch_profile_t ocsd_arch_profile_t
enum _ocsd_datapath_resp_t ocsd_datapath_resp_t
_ocsd_instr_subtype
struct _ocsd_file_mem_region ocsd_file_mem_region_t
enum _ocsd_ex_level ocsd_ex_level
ocsd_vaddr_t instr_addr
enum _ocsd_instr_type ocsd_instr_type
uint32_t swt_trigger_event
struct _ocsd_instr_info ocsd_instr_info
enum _ocsd_dcd_tree_src_t ocsd_dcd_tree_src_t
uint32_t swt_payload_pkt_bitsize
enum _ocsd_err_t ocsd_err_t
_ocsd_instr_type
_ocsd_arch_version
_ocsd_ex_level
ocsd_instr_subtype sub_type
uint8_t thumb_it_conditions
struct _ocsd_pe_context ocsd_pe_context
enum _ocsd_core_profile ocsd_core_profile_t
ocsd_arch_profile_t pe_type
ocsd_vaddr_t start_address
enum _ocsd_isa ocsd_isa
unsigned int ocsd_hndl_err_log_t
uint32_t swt_marker_first
uint32_t swt_id_valid
enum _ocsd_sec_level ocsd_sec_level
_rcdtl_rawframe_elem_t
enum _ocsd_mem_space_acc_t ocsd_mem_space_acc_t
ocsd_arch_version_t arch
uint32_t swt_payload_num_packets
enum _rcdtl_rawframe_elem_t ocsd_rawframe_elem_t
uint8_t is_conditional
uint8_t dsb_dmb_waypoints
ocsd_vaddr_t branch_addr
ocsd_sec_level security_level
_ocsd_core_profile
uint32_t ocsd_trc_index_t
Definition: ocsd_if_types.h:67
ocsd_instr_type type
_ocsd_err_t
Definition: ocsd_if_types.h:85
uint32_t swt_frequency
_ocsd_sec_level
_ocsd_isa
enum _ocsd_trace_protocol_t ocsd_trace_protocol_t
uint16_t swt_master_id
_ocsd_dcd_tree_src_t
enum _ocsd_instr_subtype ocsd_instr_subtype
struct _ocsd_swt_info ocsd_swt_info_t
enum _ocsd_arch_version ocsd_arch_version_t
unsigned int ocsd_hndl_rdr_t
enum _ocsd_err_severity_t ocsd_err_severity_t
uint32_t swt_flag_bits