2018-01-17 20:52:13 +03:00
/*
* 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 ;
2019-05-24 20:34:58 +03:00
struct cs_etm_packet ;
struct cs_etm_packet_queue ;
2018-01-17 20:52:13 +03:00
struct cs_etm_queue ;
2019-05-24 20:35:04 +03:00
typedef u32 ( * cs_etm_mem_cb_type ) ( struct cs_etm_queue * , u8 , u64 , size_t , u8 * ) ;
2018-01-17 20:52:13 +03:00
2018-12-04 23:39:02 +03:00
struct cs_etmv3_trace_params {
u32 reg_ctrl ;
u32 reg_trc_id ;
u32 reg_ccer ;
u32 reg_idr ;
} ;
2018-01-17 20:52:13 +03:00
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_etm_trace_params {
int protocol ;
union {
2018-12-04 23:39:02 +03:00
struct cs_etmv3_trace_params etmv3 ;
2018-01-17 20:52:13 +03:00
struct cs_etmv4_trace_params etmv4 ;
} ;
} ;
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 ,
2018-12-04 23:39:04 +03:00
CS_ETM_PROTO_PTM ,
2018-01-17 20:52:13 +03:00
} ;
2019-02-12 20:16:09 +03:00
enum cs_etm_decoder_operation {
2018-01-17 20:52:13 +03:00
CS_ETM_OPERATION_PRINT = 1 ,
CS_ETM_OPERATION_DECODE ,
2019-02-12 20:16:09 +03:00
CS_ETM_OPERATION_MAX ,
2018-01-17 20:52:13 +03:00
} ;
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 ) ;
2018-01-17 20:52:15 +03:00
int cs_etm_decoder__add_mem_access_cb ( struct cs_etm_decoder * decoder ,
u64 start , u64 end ,
cs_etm_mem_cb_type cb_func ) ;
2019-05-24 20:34:58 +03:00
int cs_etm_decoder__get_packet ( struct cs_etm_packet_queue * packet_queue ,
2018-01-17 20:52:15 +03:00
struct cs_etm_packet * packet ) ;
int cs_etm_decoder__reset ( struct cs_etm_decoder * decoder ) ;
2018-01-17 20:52:13 +03:00
# endif /* INCLUDE__CS_ETM_DECODER_H__ */