xref: /OK3568_Linux_fs/kernel/tools/perf/util/cs-etm-decoder/cs-etm-decoder.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright(C) 2015-2018 Linaro Limited.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Author: Tor Jeremiassen <tor@ti.com>
7*4882a593Smuzhiyun  * Author: Mathieu Poirier <mathieu.poirier@linaro.org>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef INCLUDE__CS_ETM_DECODER_H__
11*4882a593Smuzhiyun #define INCLUDE__CS_ETM_DECODER_H__
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/types.h>
14*4882a593Smuzhiyun #include <stdio.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun struct cs_etm_decoder;
17*4882a593Smuzhiyun struct cs_etm_packet;
18*4882a593Smuzhiyun struct cs_etm_packet_queue;
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun struct cs_etm_queue;
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun typedef u32 (*cs_etm_mem_cb_type)(struct cs_etm_queue *, u8, u64, size_t, u8 *);
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun struct cs_etmv3_trace_params {
25*4882a593Smuzhiyun 	u32 reg_ctrl;
26*4882a593Smuzhiyun 	u32 reg_trc_id;
27*4882a593Smuzhiyun 	u32 reg_ccer;
28*4882a593Smuzhiyun 	u32 reg_idr;
29*4882a593Smuzhiyun };
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun struct cs_etmv4_trace_params {
32*4882a593Smuzhiyun 	u32 reg_idr0;
33*4882a593Smuzhiyun 	u32 reg_idr1;
34*4882a593Smuzhiyun 	u32 reg_idr2;
35*4882a593Smuzhiyun 	u32 reg_idr8;
36*4882a593Smuzhiyun 	u32 reg_configr;
37*4882a593Smuzhiyun 	u32 reg_traceidr;
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun struct cs_etm_trace_params {
41*4882a593Smuzhiyun 	int protocol;
42*4882a593Smuzhiyun 	union {
43*4882a593Smuzhiyun 		struct cs_etmv3_trace_params etmv3;
44*4882a593Smuzhiyun 		struct cs_etmv4_trace_params etmv4;
45*4882a593Smuzhiyun 	};
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun struct cs_etm_decoder_params {
49*4882a593Smuzhiyun 	int operation;
50*4882a593Smuzhiyun 	void (*packet_printer)(const char *msg);
51*4882a593Smuzhiyun 	cs_etm_mem_cb_type mem_acc_cb;
52*4882a593Smuzhiyun 	u8 formatted;
53*4882a593Smuzhiyun 	u8 fsyncs;
54*4882a593Smuzhiyun 	u8 hsyncs;
55*4882a593Smuzhiyun 	u8 frame_aligned;
56*4882a593Smuzhiyun 	void *data;
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /*
60*4882a593Smuzhiyun  * The following enums are indexed starting with 1 to align with the
61*4882a593Smuzhiyun  * open source coresight trace decoder library.
62*4882a593Smuzhiyun  */
63*4882a593Smuzhiyun enum {
64*4882a593Smuzhiyun 	CS_ETM_PROTO_ETMV3 = 1,
65*4882a593Smuzhiyun 	CS_ETM_PROTO_ETMV4i,
66*4882a593Smuzhiyun 	CS_ETM_PROTO_ETMV4d,
67*4882a593Smuzhiyun 	CS_ETM_PROTO_PTM,
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun enum cs_etm_decoder_operation {
71*4882a593Smuzhiyun 	CS_ETM_OPERATION_PRINT = 1,
72*4882a593Smuzhiyun 	CS_ETM_OPERATION_DECODE,
73*4882a593Smuzhiyun 	CS_ETM_OPERATION_MAX,
74*4882a593Smuzhiyun };
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun int cs_etm_decoder__process_data_block(struct cs_etm_decoder *decoder,
77*4882a593Smuzhiyun 				       u64 indx, const u8 *buf,
78*4882a593Smuzhiyun 				       size_t len, size_t *consumed);
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun struct cs_etm_decoder *
81*4882a593Smuzhiyun cs_etm_decoder__new(int num_cpu,
82*4882a593Smuzhiyun 		    struct cs_etm_decoder_params *d_params,
83*4882a593Smuzhiyun 		    struct cs_etm_trace_params t_params[]);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun void cs_etm_decoder__free(struct cs_etm_decoder *decoder);
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun int cs_etm_decoder__add_mem_access_cb(struct cs_etm_decoder *decoder,
88*4882a593Smuzhiyun 				      u64 start, u64 end,
89*4882a593Smuzhiyun 				      cs_etm_mem_cb_type cb_func);
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun int cs_etm_decoder__get_packet(struct cs_etm_packet_queue *packet_queue,
92*4882a593Smuzhiyun 			       struct cs_etm_packet *packet);
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun int cs_etm_decoder__reset(struct cs_etm_decoder *decoder);
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun #endif /* INCLUDE__CS_ETM_DECODER_H__ */
97