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