| /* |
| * SPDX-License-Identifier: GPL-2.0 |
| * |
| * Copyright(C) 2015-2018 Linaro Limited. |
| * |
| * Author: Tor Jeremiassen <tor@ti.com> |
| * Author: Mathieu Poirier <mathieu.poirier@linaro.org> |
| */ |
| |
| #ifndef INCLUDE__CS_ETM_DECODER_H__ |
| #define INCLUDE__CS_ETM_DECODER_H__ |
| |
| #include <linux/types.h> |
| #include <stdio.h> |
| |
| struct cs_etm_decoder; |
| struct cs_etm_packet; |
| struct cs_etm_packet_queue; |
| |
| struct cs_etm_queue; |
| |
| typedef u32 (*cs_etm_mem_cb_type)(struct cs_etm_queue *, u8, u64, size_t, u8 *); |
| |
| struct cs_etmv3_trace_params { |
| u32 reg_ctrl; |
| u32 reg_trc_id; |
| u32 reg_ccer; |
| u32 reg_idr; |
| }; |
| |
| struct cs_etmv4_trace_params { |
| u32 reg_idr0; |
| u32 reg_idr1; |
| u32 reg_idr2; |
| u32 reg_idr8; |
| u32 reg_configr; |
| u32 reg_traceidr; |
| }; |
| |
| struct cs_ete_trace_params { |
| u32 reg_idr0; |
| u32 reg_idr1; |
| u32 reg_idr2; |
| u32 reg_idr8; |
| u32 reg_configr; |
| u32 reg_traceidr; |
| u32 reg_devarch; |
| }; |
| |
| struct cs_etm_trace_params { |
| int protocol; |
| union { |
| struct cs_etmv3_trace_params etmv3; |
| struct cs_etmv4_trace_params etmv4; |
| struct cs_ete_trace_params ete; |
| }; |
| }; |
| |
| struct cs_etm_decoder_params { |
| int operation; |
| void (*packet_printer)(const char *msg); |
| cs_etm_mem_cb_type mem_acc_cb; |
| u8 formatted; |
| u8 fsyncs; |
| u8 hsyncs; |
| u8 frame_aligned; |
| void *data; |
| }; |
| |
| /* |
| * The following enums are indexed starting with 1 to align with the |
| * open source coresight trace decoder library. |
| */ |
| enum { |
| CS_ETM_PROTO_ETMV3 = 1, |
| CS_ETM_PROTO_ETMV4i, |
| CS_ETM_PROTO_ETMV4d, |
| CS_ETM_PROTO_PTM, |
| CS_ETM_PROTO_ETE |
| }; |
| |
| enum cs_etm_decoder_operation { |
| CS_ETM_OPERATION_PRINT = 1, |
| CS_ETM_OPERATION_DECODE, |
| CS_ETM_OPERATION_MAX, |
| }; |
| |
| int cs_etm_decoder__process_data_block(struct cs_etm_decoder *decoder, |
| u64 indx, const u8 *buf, |
| size_t len, size_t *consumed); |
| |
| struct cs_etm_decoder * |
| cs_etm_decoder__new(int num_cpu, |
| struct cs_etm_decoder_params *d_params, |
| struct cs_etm_trace_params t_params[]); |
| |
| void cs_etm_decoder__free(struct cs_etm_decoder *decoder); |
| |
| int cs_etm_decoder__add_mem_access_cb(struct cs_etm_decoder *decoder, |
| u64 start, u64 end, |
| cs_etm_mem_cb_type cb_func); |
| |
| int cs_etm_decoder__get_packet(struct cs_etm_packet_queue *packet_queue, |
| struct cs_etm_packet *packet); |
| |
| int cs_etm_decoder__reset(struct cs_etm_decoder *decoder); |
| const char *cs_etm_decoder__get_name(struct cs_etm_decoder *decoder); |
| |
| #endif /* INCLUDE__CS_ETM_DECODER_H__ */ |