xref: /openbmc/linux/include/xen/interface/xenpmu.h (revision 5f141548)
15f141548SBoris Ostrovsky #ifndef __XEN_PUBLIC_XENPMU_H__
25f141548SBoris Ostrovsky #define __XEN_PUBLIC_XENPMU_H__
35f141548SBoris Ostrovsky 
45f141548SBoris Ostrovsky #include "xen.h"
55f141548SBoris Ostrovsky 
65f141548SBoris Ostrovsky #define XENPMU_VER_MAJ    0
75f141548SBoris Ostrovsky #define XENPMU_VER_MIN    1
85f141548SBoris Ostrovsky 
95f141548SBoris Ostrovsky /*
105f141548SBoris Ostrovsky  * ` enum neg_errnoval
115f141548SBoris Ostrovsky  * ` HYPERVISOR_xenpmu_op(enum xenpmu_op cmd, struct xenpmu_params *args);
125f141548SBoris Ostrovsky  *
135f141548SBoris Ostrovsky  * @cmd  == XENPMU_* (PMU operation)
145f141548SBoris Ostrovsky  * @args == struct xenpmu_params
155f141548SBoris Ostrovsky  */
165f141548SBoris Ostrovsky /* ` enum xenpmu_op { */
175f141548SBoris Ostrovsky #define XENPMU_mode_get        0 /* Also used for getting PMU version */
185f141548SBoris Ostrovsky #define XENPMU_mode_set        1
195f141548SBoris Ostrovsky #define XENPMU_feature_get     2
205f141548SBoris Ostrovsky #define XENPMU_feature_set     3
215f141548SBoris Ostrovsky #define XENPMU_init            4
225f141548SBoris Ostrovsky #define XENPMU_finish          5
235f141548SBoris Ostrovsky 
245f141548SBoris Ostrovsky /* ` } */
255f141548SBoris Ostrovsky 
265f141548SBoris Ostrovsky /* Parameters structure for HYPERVISOR_xenpmu_op call */
275f141548SBoris Ostrovsky struct xen_pmu_params {
285f141548SBoris Ostrovsky 	/* IN/OUT parameters */
295f141548SBoris Ostrovsky 	struct {
305f141548SBoris Ostrovsky 		uint32_t maj;
315f141548SBoris Ostrovsky 		uint32_t min;
325f141548SBoris Ostrovsky 	} version;
335f141548SBoris Ostrovsky 	uint64_t val;
345f141548SBoris Ostrovsky 
355f141548SBoris Ostrovsky 	/* IN parameters */
365f141548SBoris Ostrovsky 	uint32_t vcpu;
375f141548SBoris Ostrovsky 	uint32_t pad;
385f141548SBoris Ostrovsky };
395f141548SBoris Ostrovsky 
405f141548SBoris Ostrovsky /* PMU modes:
415f141548SBoris Ostrovsky  * - XENPMU_MODE_OFF:   No PMU virtualization
425f141548SBoris Ostrovsky  * - XENPMU_MODE_SELF:  Guests can profile themselves
435f141548SBoris Ostrovsky  * - XENPMU_MODE_HV:    Guests can profile themselves, dom0 profiles
445f141548SBoris Ostrovsky  *                      itself and Xen
455f141548SBoris Ostrovsky  * - XENPMU_MODE_ALL:   Only dom0 has access to VPMU and it profiles
465f141548SBoris Ostrovsky  *                      everyone: itself, the hypervisor and the guests.
475f141548SBoris Ostrovsky  */
485f141548SBoris Ostrovsky #define XENPMU_MODE_OFF           0
495f141548SBoris Ostrovsky #define XENPMU_MODE_SELF          (1<<0)
505f141548SBoris Ostrovsky #define XENPMU_MODE_HV            (1<<1)
515f141548SBoris Ostrovsky #define XENPMU_MODE_ALL           (1<<2)
525f141548SBoris Ostrovsky 
535f141548SBoris Ostrovsky /*
545f141548SBoris Ostrovsky  * PMU features:
555f141548SBoris Ostrovsky  * - XENPMU_FEATURE_INTEL_BTS: Intel BTS support (ignored on AMD)
565f141548SBoris Ostrovsky  */
575f141548SBoris Ostrovsky #define XENPMU_FEATURE_INTEL_BTS  1
585f141548SBoris Ostrovsky 
595f141548SBoris Ostrovsky #endif /* __XEN_PUBLIC_XENPMU_H__ */
60