brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · e2ee73d Raw
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