diff options
Diffstat (limited to 'tools/perf/util/intel-pt-decoder/intel-pt-decoder.h')
| -rw-r--r-- | tools/perf/util/intel-pt-decoder/intel-pt-decoder.h | 109 | 
1 files changed, 109 insertions, 0 deletions
| diff --git a/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h new file mode 100644 index 000000000000..02c38fec1c37 --- /dev/null +++ b/tools/perf/util/intel-pt-decoder/intel-pt-decoder.h @@ -0,0 +1,109 @@ +/* + * intel_pt_decoder.h: Intel Processor Trace support + * Copyright (c) 2013-2014, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for + * more details. + * + */ + +#ifndef INCLUDE__INTEL_PT_DECODER_H__ +#define INCLUDE__INTEL_PT_DECODER_H__ + +#include <stdint.h> +#include <stddef.h> +#include <stdbool.h> + +#include "intel-pt-insn-decoder.h" + +#define INTEL_PT_IN_TX		(1 << 0) +#define INTEL_PT_ABORT_TX	(1 << 1) +#define INTEL_PT_ASYNC		(1 << 2) + +enum intel_pt_sample_type { +	INTEL_PT_BRANCH		= 1 << 0, +	INTEL_PT_INSTRUCTION	= 1 << 1, +	INTEL_PT_TRANSACTION	= 1 << 2, +}; + +enum intel_pt_period_type { +	INTEL_PT_PERIOD_NONE, +	INTEL_PT_PERIOD_INSTRUCTIONS, +	INTEL_PT_PERIOD_TICKS, +	INTEL_PT_PERIOD_MTC, +}; + +enum { +	INTEL_PT_ERR_NOMEM = 1, +	INTEL_PT_ERR_INTERN, +	INTEL_PT_ERR_BADPKT, +	INTEL_PT_ERR_NODATA, +	INTEL_PT_ERR_NOINSN, +	INTEL_PT_ERR_MISMAT, +	INTEL_PT_ERR_OVR, +	INTEL_PT_ERR_LOST, +	INTEL_PT_ERR_UNK, +	INTEL_PT_ERR_NELOOP, +	INTEL_PT_ERR_MAX, +}; + +struct intel_pt_state { +	enum intel_pt_sample_type type; +	int err; +	uint64_t from_ip; +	uint64_t to_ip; +	uint64_t cr3; +	uint64_t tot_insn_cnt; +	uint64_t timestamp; +	uint64_t est_timestamp; +	uint64_t trace_nr; +	uint32_t flags; +	enum intel_pt_insn_op insn_op; +	int insn_len; +}; + +struct intel_pt_insn; + +struct intel_pt_buffer { +	const unsigned char *buf; +	size_t len; +	bool consecutive; +	uint64_t ref_timestamp; +	uint64_t trace_nr; +}; + +struct intel_pt_params { +	int (*get_trace)(struct intel_pt_buffer *buffer, void *data); +	int (*walk_insn)(struct intel_pt_insn *intel_pt_insn, +			 uint64_t *insn_cnt_ptr, uint64_t *ip, uint64_t to_ip, +			 uint64_t max_insn_cnt, void *data); +	void *data; +	bool return_compression; +	uint64_t period; +	enum intel_pt_period_type period_type; +	unsigned max_non_turbo_ratio; +	unsigned int mtc_period; +	uint32_t tsc_ctc_ratio_n; +	uint32_t tsc_ctc_ratio_d; +}; + +struct intel_pt_decoder; + +struct intel_pt_decoder *intel_pt_decoder_new(struct intel_pt_params *params); +void intel_pt_decoder_free(struct intel_pt_decoder *decoder); + +const struct intel_pt_state *intel_pt_decode(struct intel_pt_decoder *decoder); + +unsigned char *intel_pt_find_overlap(unsigned char *buf_a, size_t len_a, +				     unsigned char *buf_b, size_t len_b, +				     bool have_tsc); + +int intel_pt__strerror(int code, char *buf, size_t buflen); + +#endif |