2019-05-29 17:18:02 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2015-07-17 19:33:37 +03:00
/*
* intel_pt_pkt_decoder . h : Intel Processor Trace support
* Copyright ( c ) 2013 - 2014 , Intel Corporation .
*/
# ifndef INCLUDE__INTEL_PT_PKT_DECODER_H__
# define INCLUDE__INTEL_PT_PKT_DECODER_H__
# include <stddef.h>
# include <stdint.h>
# define INTEL_PT_PKT_DESC_MAX 256
# define INTEL_PT_NEED_MORE_BYTES -1
# define INTEL_PT_BAD_PACKET -2
# define INTEL_PT_PSB_STR "\002\202\002\202\002\202\002\202" \
" \002 \202 \002 \202 \002 \202 \002 \202 "
# define INTEL_PT_PSB_LEN 16
# define INTEL_PT_PKT_MAX_SZ 16
enum intel_pt_pkt_type {
INTEL_PT_BAD ,
INTEL_PT_PAD ,
INTEL_PT_TNT ,
INTEL_PT_TIP_PGD ,
INTEL_PT_TIP_PGE ,
INTEL_PT_TSC ,
2015-07-17 19:33:53 +03:00
INTEL_PT_TMA ,
2015-07-17 19:33:37 +03:00
INTEL_PT_MODE_EXEC ,
INTEL_PT_MODE_TSX ,
2015-07-17 19:33:53 +03:00
INTEL_PT_MTC ,
2015-07-17 19:33:37 +03:00
INTEL_PT_TIP ,
INTEL_PT_FUP ,
2015-07-17 19:33:53 +03:00
INTEL_PT_CYC ,
INTEL_PT_VMCS ,
2015-07-17 19:33:37 +03:00
INTEL_PT_PSB ,
INTEL_PT_PSBEND ,
INTEL_PT_CBR ,
2015-07-17 19:33:53 +03:00
INTEL_PT_TRACESTOP ,
2015-07-17 19:33:37 +03:00
INTEL_PT_PIP ,
INTEL_PT_OVF ,
2015-07-17 19:33:53 +03:00
INTEL_PT_MNT ,
2017-05-26 11:17:14 +03:00
INTEL_PT_PTWRITE ,
INTEL_PT_PTWRITE_IP ,
INTEL_PT_EXSTOP ,
INTEL_PT_EXSTOP_IP ,
INTEL_PT_MWAIT ,
INTEL_PT_PWRE ,
INTEL_PT_PWRX ,
2019-06-10 10:27:53 +03:00
INTEL_PT_BBP ,
INTEL_PT_BIP ,
INTEL_PT_BEP ,
INTEL_PT_BEP_IP ,
2015-07-17 19:33:37 +03:00
} ;
struct intel_pt_pkt {
enum intel_pt_pkt_type type ;
int count ;
uint64_t payload ;
} ;
2019-06-10 10:27:53 +03:00
/*
* Decoding of BIP packets conflicts with single - byte TNT packets . Since BIP
* packets only occur in the context of a block ( i . e . between BBP and BEP ) , that
* context must be recorded and passed to the packet decoder .
*/
enum intel_pt_pkt_ctx {
INTEL_PT_NO_CTX , /* BIP packets are invalid */
INTEL_PT_BLK_4_CTX , /* 4-byte BIP packets */
INTEL_PT_BLK_8_CTX , /* 8-byte BIP packets */
} ;
2015-07-17 19:33:37 +03:00
const char * intel_pt_pkt_name ( enum intel_pt_pkt_type ) ;
int intel_pt_get_packet ( const unsigned char * buf , size_t len ,
2019-06-10 10:27:53 +03:00
struct intel_pt_pkt * packet ,
enum intel_pt_pkt_ctx * ctx ) ;
void intel_pt_upd_pkt_ctx ( const struct intel_pt_pkt * packet ,
enum intel_pt_pkt_ctx * ctx ) ;
2015-07-17 19:33:37 +03:00
int intel_pt_pkt_desc ( const struct intel_pt_pkt * packet , char * buf , size_t len ) ;
# endif