intel-pt-pkt-decoder.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * intel_pt_pkt_decoder.h: Intel Processor Trace support
  4. * Copyright (c) 2013-2014, Intel Corporation.
  5. */
  6. #ifndef INCLUDE__INTEL_PT_PKT_DECODER_H__
  7. #define INCLUDE__INTEL_PT_PKT_DECODER_H__
  8. #include <stddef.h>
  9. #include <stdint.h>
  10. #define INTEL_PT_PKT_DESC_MAX 256
  11. #define INTEL_PT_NEED_MORE_BYTES -1
  12. #define INTEL_PT_BAD_PACKET -2
  13. #define INTEL_PT_PSB_STR "\002\202\002\202\002\202\002\202" \
  14. "\002\202\002\202\002\202\002\202"
  15. #define INTEL_PT_PSB_LEN 16
  16. #define INTEL_PT_PKT_MAX_SZ 16
  17. #define INTEL_PT_VMX_NR_FLAG 1
  18. enum intel_pt_pkt_type {
  19. INTEL_PT_BAD,
  20. INTEL_PT_PAD,
  21. INTEL_PT_TNT,
  22. INTEL_PT_TIP_PGD,
  23. INTEL_PT_TIP_PGE,
  24. INTEL_PT_TSC,
  25. INTEL_PT_TMA,
  26. INTEL_PT_MODE_EXEC,
  27. INTEL_PT_MODE_TSX,
  28. INTEL_PT_MTC,
  29. INTEL_PT_TIP,
  30. INTEL_PT_FUP,
  31. INTEL_PT_CYC,
  32. INTEL_PT_VMCS,
  33. INTEL_PT_PSB,
  34. INTEL_PT_PSBEND,
  35. INTEL_PT_CBR,
  36. INTEL_PT_TRACESTOP,
  37. INTEL_PT_PIP,
  38. INTEL_PT_OVF,
  39. INTEL_PT_MNT,
  40. INTEL_PT_PTWRITE,
  41. INTEL_PT_PTWRITE_IP,
  42. INTEL_PT_EXSTOP,
  43. INTEL_PT_EXSTOP_IP,
  44. INTEL_PT_MWAIT,
  45. INTEL_PT_PWRE,
  46. INTEL_PT_PWRX,
  47. INTEL_PT_BBP,
  48. INTEL_PT_BIP,
  49. INTEL_PT_BEP,
  50. INTEL_PT_BEP_IP,
  51. INTEL_PT_CFE,
  52. INTEL_PT_CFE_IP,
  53. INTEL_PT_EVD,
  54. };
  55. struct intel_pt_pkt {
  56. enum intel_pt_pkt_type type;
  57. int count;
  58. uint64_t payload;
  59. };
  60. /*
  61. * Decoding of BIP packets conflicts with single-byte TNT packets. Since BIP
  62. * packets only occur in the context of a block (i.e. between BBP and BEP), that
  63. * context must be recorded and passed to the packet decoder.
  64. */
  65. enum intel_pt_pkt_ctx {
  66. INTEL_PT_NO_CTX, /* BIP packets are invalid */
  67. INTEL_PT_BLK_4_CTX, /* 4-byte BIP packets */
  68. INTEL_PT_BLK_8_CTX, /* 8-byte BIP packets */
  69. };
  70. const char *intel_pt_pkt_name(enum intel_pt_pkt_type);
  71. int intel_pt_get_packet(const unsigned char *buf, size_t len,
  72. struct intel_pt_pkt *packet,
  73. enum intel_pt_pkt_ctx *ctx);
  74. void intel_pt_upd_pkt_ctx(const struct intel_pt_pkt *packet,
  75. enum intel_pt_pkt_ctx *ctx);
  76. int intel_pt_pkt_desc(const struct intel_pt_pkt *packet, char *buf, size_t len);
  77. #endif