blob: 781bb79883bd612bb803318daff7248710f6c107 [file] [log] [blame]
/*
* intel_pt_pkt_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_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,
INTEL_PT_TMA,
INTEL_PT_MODE_EXEC,
INTEL_PT_MODE_TSX,
INTEL_PT_MTC,
INTEL_PT_TIP,
INTEL_PT_FUP,
INTEL_PT_CYC,
INTEL_PT_VMCS,
INTEL_PT_PSB,
INTEL_PT_PSBEND,
INTEL_PT_CBR,
INTEL_PT_TRACESTOP,
INTEL_PT_PIP,
INTEL_PT_OVF,
INTEL_PT_MNT,
};
struct intel_pt_pkt {
enum intel_pt_pkt_type type;
int count;
uint64_t payload;
};
const char *intel_pt_pkt_name(enum intel_pt_pkt_type);
int intel_pt_get_packet(const unsigned char *buf, size_t len,
struct intel_pt_pkt *packet);
int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf, size_t len);
#endif