96 lines · c
1/* SPDX-License-Identifier: MIT */2#ifndef __XEN_PUBLIC_XENPMU_H__3#define __XEN_PUBLIC_XENPMU_H__4 5#include "xen.h"6 7#define XENPMU_VER_MAJ 08#define XENPMU_VER_MIN 19 10/*11 * ` enum neg_errnoval12 * ` HYPERVISOR_xenpmu_op(enum xenpmu_op cmd, struct xenpmu_params *args);13 *14 * @cmd == XENPMU_* (PMU operation)15 * @args == struct xenpmu_params16 */17/* ` enum xenpmu_op { */18#define XENPMU_mode_get 0 /* Also used for getting PMU version */19#define XENPMU_mode_set 120#define XENPMU_feature_get 221#define XENPMU_feature_set 322#define XENPMU_init 423#define XENPMU_finish 524#define XENPMU_lvtpc_set 625#define XENPMU_flush 726 27/* ` } */28 29/* Parameters structure for HYPERVISOR_xenpmu_op call */30struct xen_pmu_params {31 /* IN/OUT parameters */32 struct {33 uint32_t maj;34 uint32_t min;35 } version;36 uint64_t val;37 38 /* IN parameters */39 uint32_t vcpu;40 uint32_t pad;41};42 43/* PMU modes:44 * - XENPMU_MODE_OFF: No PMU virtualization45 * - XENPMU_MODE_SELF: Guests can profile themselves46 * - XENPMU_MODE_HV: Guests can profile themselves, dom0 profiles47 * itself and Xen48 * - XENPMU_MODE_ALL: Only dom0 has access to VPMU and it profiles49 * everyone: itself, the hypervisor and the guests.50 */51#define XENPMU_MODE_OFF 052#define XENPMU_MODE_SELF (1<<0)53#define XENPMU_MODE_HV (1<<1)54#define XENPMU_MODE_ALL (1<<2)55 56/*57 * PMU features:58 * - XENPMU_FEATURE_INTEL_BTS: Intel BTS support (ignored on AMD)59 */60#define XENPMU_FEATURE_INTEL_BTS 161 62/*63 * Shared PMU data between hypervisor and PV(H) domains.64 *65 * The hypervisor fills out this structure during PMU interrupt and sends an66 * interrupt to appropriate VCPU.67 * Architecture-independent fields of xen_pmu_data are WO for the hypervisor68 * and RO for the guest but some fields in xen_pmu_arch can be writable69 * by both the hypervisor and the guest (see arch-$arch/pmu.h).70 */71struct xen_pmu_data {72 /* Interrupted VCPU */73 uint32_t vcpu_id;74 75 /*76 * Physical processor on which the interrupt occurred. On non-privileged77 * guests set to vcpu_id;78 */79 uint32_t pcpu_id;80 81 /*82 * Domain that was interrupted. On non-privileged guests set to83 * DOMID_SELF.84 * On privileged guests can be DOMID_SELF, DOMID_XEN, or, when in85 * XENPMU_MODE_ALL mode, domain ID of another domain.86 */87 domid_t domain_id;88 89 uint8_t pad[6];90 91 /* Architecture-specific information */92 struct xen_pmu_arch pmu;93};94 95#endif /* __XEN_PUBLIC_XENPMU_H__ */96