xref: /openbmc/linux/arch/x86/kvm/pmu.h (revision 474a5bb944d2ad308a1360dcae72b16b8eecd250)
1*474a5bb9SWei Huang #ifndef __KVM_X86_PMU_H
2*474a5bb9SWei Huang #define __KVM_X86_PMU_H
3*474a5bb9SWei Huang 
4*474a5bb9SWei Huang #define vcpu_to_pmu(vcpu) (&(vcpu)->arch.pmu)
5*474a5bb9SWei Huang #define pmu_to_vcpu(pmu)  (container_of((pmu), struct kvm_vcpu, arch.pmu))
6*474a5bb9SWei Huang #define pmc_to_pmu(pmc)   (&(pmc)->vcpu->arch.pmu)
7*474a5bb9SWei Huang 
8*474a5bb9SWei Huang struct kvm_event_hw_type_mapping {
9*474a5bb9SWei Huang 	u8 eventsel;
10*474a5bb9SWei Huang 	u8 unit_mask;
11*474a5bb9SWei Huang 	unsigned event_type;
12*474a5bb9SWei Huang };
13*474a5bb9SWei Huang 
14*474a5bb9SWei Huang void kvm_pmu_deliver_pmi(struct kvm_vcpu *vcpu);
15*474a5bb9SWei Huang void kvm_pmu_handle_event(struct kvm_vcpu *vcpu);
16*474a5bb9SWei Huang int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned pmc, u64 *data);
17*474a5bb9SWei Huang int kvm_pmu_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx);
18*474a5bb9SWei Huang bool kvm_pmu_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr);
19*474a5bb9SWei Huang int kvm_pmu_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data);
20*474a5bb9SWei Huang int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
21*474a5bb9SWei Huang void kvm_pmu_refresh(struct kvm_vcpu *vcpu);
22*474a5bb9SWei Huang void kvm_pmu_reset(struct kvm_vcpu *vcpu);
23*474a5bb9SWei Huang void kvm_pmu_init(struct kvm_vcpu *vcpu);
24*474a5bb9SWei Huang void kvm_pmu_destroy(struct kvm_vcpu *vcpu);
25*474a5bb9SWei Huang 
26*474a5bb9SWei Huang #endif /* __KVM_X86_PMU_H */
27