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