perfmon_default_smpl.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. /*
  3. * Copyright (C) 2002-2003 Hewlett-Packard Co
  4. * Stephane Eranian <eranian@hpl.hp.com>
  5. *
  6. * This file implements the default sampling buffer format
  7. * for Linux/ia64 perfmon subsystem.
  8. */
  9. #ifndef __PERFMON_DEFAULT_SMPL_H__
  10. #define __PERFMON_DEFAULT_SMPL_H__ 1
  11. #define PFM_DEFAULT_SMPL_UUID { \
  12. 0x4d, 0x72, 0xbe, 0xc0, 0x06, 0x64, 0x41, 0x43, 0x82, 0xb4, 0xd3, 0xfd, 0x27, 0x24, 0x3c, 0x97}
  13. /*
  14. * format specific parameters (passed at context creation)
  15. */
  16. typedef struct {
  17. unsigned long buf_size; /* size of the buffer in bytes */
  18. unsigned int flags; /* buffer specific flags */
  19. unsigned int res1; /* for future use */
  20. unsigned long reserved[2]; /* for future use */
  21. } pfm_default_smpl_arg_t;
  22. /*
  23. * combined context+format specific structure. Can be passed
  24. * to PFM_CONTEXT_CREATE
  25. */
  26. typedef struct {
  27. pfarg_context_t ctx_arg;
  28. pfm_default_smpl_arg_t buf_arg;
  29. } pfm_default_smpl_ctx_arg_t;
  30. /*
  31. * This header is at the beginning of the sampling buffer returned to the user.
  32. * It is directly followed by the first record.
  33. */
  34. typedef struct {
  35. unsigned long hdr_count; /* how many valid entries */
  36. unsigned long hdr_cur_offs; /* current offset from top of buffer */
  37. unsigned long hdr_reserved2; /* reserved for future use */
  38. unsigned long hdr_overflows; /* how many times the buffer overflowed */
  39. unsigned long hdr_buf_size; /* how many bytes in the buffer */
  40. unsigned int hdr_version; /* contains perfmon version (smpl format diffs) */
  41. unsigned int hdr_reserved1; /* for future use */
  42. unsigned long hdr_reserved[10]; /* for future use */
  43. } pfm_default_smpl_hdr_t;
  44. /*
  45. * Entry header in the sampling buffer. The header is directly followed
  46. * with the values of the PMD registers of interest saved in increasing
  47. * index order: PMD4, PMD5, and so on. How many PMDs are present depends
  48. * on how the session was programmed.
  49. *
  50. * In the case where multiple counters overflow at the same time, multiple
  51. * entries are written consecutively.
  52. *
  53. * last_reset_value member indicates the initial value of the overflowed PMD.
  54. */
  55. typedef struct {
  56. int pid; /* thread id (for NPTL, this is gettid()) */
  57. unsigned char reserved1[3]; /* reserved for future use */
  58. unsigned char ovfl_pmd; /* index of overflowed PMD */
  59. unsigned long last_reset_val; /* initial value of overflowed PMD */
  60. unsigned long ip; /* where did the overflow interrupt happened */
  61. unsigned long tstamp; /* ar.itc when entering perfmon intr. handler */
  62. unsigned short cpu; /* cpu on which the overflow occurred */
  63. unsigned short set; /* event set active when overflow occurred */
  64. int tgid; /* thread group id (for NPTL, this is getpid()) */
  65. } pfm_default_smpl_entry_t;
  66. #define PFM_DEFAULT_MAX_PMDS 64 /* how many pmds supported by data structures (sizeof(unsigned long) */
  67. #define PFM_DEFAULT_MAX_ENTRY_SIZE (sizeof(pfm_default_smpl_entry_t)+(sizeof(unsigned long)*PFM_DEFAULT_MAX_PMDS))
  68. #define PFM_DEFAULT_SMPL_MIN_BUF_SIZE (sizeof(pfm_default_smpl_hdr_t)+PFM_DEFAULT_MAX_ENTRY_SIZE)
  69. #define PFM_DEFAULT_SMPL_VERSION_MAJ 2U
  70. #define PFM_DEFAULT_SMPL_VERSION_MIN 0U
  71. #define PFM_DEFAULT_SMPL_VERSION (((PFM_DEFAULT_SMPL_VERSION_MAJ&0xffff)<<16)|(PFM_DEFAULT_SMPL_VERSION_MIN & 0xffff))
  72. #endif /* __PERFMON_DEFAULT_SMPL_H__ */