File Index
Files and directories
Sign in
FILE

x86_ops.h

File preview with syntax highlighting.

linux-6.19.14/arch/x86/kvm/vmx/x86_ops.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2#ifndef __KVM_X86_VMX_X86_OPS_H
  3#define __KVM_X86_VMX_X86_OPS_H
  4
  5#include <linux/kvm_host.h>
  6
  7#include "x86.h"
  8
  9__init int vmx_hardware_setup(void);
 10
 11extern struct kvm_x86_ops vt_x86_ops __initdata;
 12extern struct kvm_x86_init_ops vt_init_ops __initdata;
 13
 14void vmx_hardware_unsetup(void);
 15int vmx_check_processor_compat(void);
 16int vmx_enable_virtualization_cpu(void);
 17void vmx_disable_virtualization_cpu(void);
 18void vmx_emergency_disable_virtualization_cpu(void);
 19int vmx_vm_init(struct kvm *kvm);
 20void vmx_vm_destroy(struct kvm *kvm);
 21int vmx_vcpu_precreate(struct kvm *kvm);
 22int vmx_vcpu_create(struct kvm_vcpu *vcpu);
 23int vmx_vcpu_pre_run(struct kvm_vcpu *vcpu);
 24fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu, u64 run_flags);
 25void vmx_vcpu_free(struct kvm_vcpu *vcpu);
 26void vmx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event);
 27void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
 28void vmx_vcpu_put(struct kvm_vcpu *vcpu);
 29int vmx_handle_exit(struct kvm_vcpu *vcpu, fastpath_t exit_fastpath);
 30void vmx_handle_exit_irqoff(struct kvm_vcpu *vcpu);
 31int vmx_skip_emulated_instruction(struct kvm_vcpu *vcpu);
 32void vmx_update_emulated_instruction(struct kvm_vcpu *vcpu);
 33int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
 34#ifdef CONFIG_KVM_SMM
 35int vmx_smi_allowed(struct kvm_vcpu *vcpu, bool for_injection);
 36int vmx_enter_smm(struct kvm_vcpu *vcpu, union kvm_smram *smram);
 37int vmx_leave_smm(struct kvm_vcpu *vcpu, const union kvm_smram *smram);
 38void vmx_enable_smi_window(struct kvm_vcpu *vcpu);
 39#endif
 40int vmx_check_emulate_instruction(struct kvm_vcpu *vcpu, int emul_type,
 41				  void *insn, int insn_len);
 42int vmx_check_intercept(struct kvm_vcpu *vcpu,
 43			struct x86_instruction_info *info,
 44			enum x86_intercept_stage stage,
 45			struct x86_exception *exception);
 46bool vmx_apic_init_signal_blocked(struct kvm_vcpu *vcpu);
 47void vmx_migrate_timers(struct kvm_vcpu *vcpu);
 48void vmx_set_virtual_apic_mode(struct kvm_vcpu *vcpu);
 49void vmx_hwapic_isr_update(struct kvm_vcpu *vcpu, int max_isr);
 50int vmx_sync_pir_to_irr(struct kvm_vcpu *vcpu);
 51void vmx_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
 52			   int trig_mode, int vector);
 53void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu);
 54bool vmx_has_emulated_msr(struct kvm *kvm, u32 index);
 55void vmx_recalc_intercepts(struct kvm_vcpu *vcpu);
 56void vmx_prepare_switch_to_guest(struct kvm_vcpu *vcpu);
 57void vmx_update_exception_bitmap(struct kvm_vcpu *vcpu);
 58int vmx_get_feature_msr(u32 msr, u64 *data);
 59int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
 60#define vmx_complete_emulated_msr kvm_complete_insn_gp
 61u64 vmx_get_segment_base(struct kvm_vcpu *vcpu, int seg);
 62void vmx_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);
 63void vmx_set_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);
 64int vmx_get_cpl(struct kvm_vcpu *vcpu);
 65void vmx_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l);
 66bool vmx_is_valid_cr0(struct kvm_vcpu *vcpu, unsigned long cr0);
 67void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0);
 68void vmx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level);
 69void vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4);
 70bool vmx_is_valid_cr4(struct kvm_vcpu *vcpu, unsigned long cr4);
 71int vmx_set_efer(struct kvm_vcpu *vcpu, u64 efer);
 72void vmx_get_idt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 73void vmx_set_idt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 74void vmx_get_gdt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 75void vmx_set_gdt(struct kvm_vcpu *vcpu, struct desc_ptr *dt);
 76void vmx_set_dr7(struct kvm_vcpu *vcpu, unsigned long val);
 77void vmx_sync_dirty_debug_regs(struct kvm_vcpu *vcpu);
 78void vmx_cache_reg(struct kvm_vcpu *vcpu, enum kvm_reg reg);
 79unsigned long vmx_get_rflags(struct kvm_vcpu *vcpu);
 80void vmx_set_rflags(struct kvm_vcpu *vcpu, unsigned long rflags);
 81bool vmx_get_if_flag(struct kvm_vcpu *vcpu);
 82void vmx_flush_tlb_all(struct kvm_vcpu *vcpu);
 83void vmx_flush_tlb_current(struct kvm_vcpu *vcpu);
 84void vmx_flush_tlb_gva(struct kvm_vcpu *vcpu, gva_t addr);
 85void vmx_flush_tlb_guest(struct kvm_vcpu *vcpu);
 86void vmx_set_interrupt_shadow(struct kvm_vcpu *vcpu, int mask);
 87u32 vmx_get_interrupt_shadow(struct kvm_vcpu *vcpu);
 88void vmx_patch_hypercall(struct kvm_vcpu *vcpu, unsigned char *hypercall);
 89void vmx_inject_irq(struct kvm_vcpu *vcpu, bool reinjected);
 90void vmx_inject_nmi(struct kvm_vcpu *vcpu);
 91void vmx_inject_exception(struct kvm_vcpu *vcpu);
 92void vmx_cancel_injection(struct kvm_vcpu *vcpu);
 93int vmx_interrupt_allowed(struct kvm_vcpu *vcpu, bool for_injection);
 94int vmx_nmi_allowed(struct kvm_vcpu *vcpu, bool for_injection);
 95bool vmx_get_nmi_mask(struct kvm_vcpu *vcpu);
 96void vmx_set_nmi_mask(struct kvm_vcpu *vcpu, bool masked);
 97void vmx_enable_nmi_window(struct kvm_vcpu *vcpu);
 98void vmx_enable_irq_window(struct kvm_vcpu *vcpu);
 99void vmx_update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr);
100void vmx_set_apic_access_page_addr(struct kvm_vcpu *vcpu);
101void vmx_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu);
102void vmx_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap);
103int vmx_set_tss_addr(struct kvm *kvm, unsigned int addr);
104int vmx_set_identity_map_addr(struct kvm *kvm, u64 ident_addr);
105u8 vmx_get_mt_mask(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio);
106
107void vmx_get_exit_info(struct kvm_vcpu *vcpu, u32 *reason,
108		       u64 *info1, u64 *info2, u32 *intr_info, u32 *error_code);
109void vmx_get_entry_info(struct kvm_vcpu *vcpu, u32 *intr_info, u32 *error_code);
110
111u64 vmx_get_l2_tsc_offset(struct kvm_vcpu *vcpu);
112u64 vmx_get_l2_tsc_multiplier(struct kvm_vcpu *vcpu);
113void vmx_write_tsc_offset(struct kvm_vcpu *vcpu);
114void vmx_write_tsc_multiplier(struct kvm_vcpu *vcpu);
115void vmx_update_cpu_dirty_logging(struct kvm_vcpu *vcpu);
116#ifdef CONFIG_X86_64
117int vmx_set_hv_timer(struct kvm_vcpu *vcpu, u64 guest_deadline_tsc,
118		     bool *expired);
119void vmx_cancel_hv_timer(struct kvm_vcpu *vcpu);
120#endif
121void vmx_setup_mce(struct kvm_vcpu *vcpu);
122
123#ifdef CONFIG_KVM_INTEL_TDX
124void tdx_disable_virtualization_cpu(void);
125int tdx_vm_init(struct kvm *kvm);
126void tdx_mmu_release_hkid(struct kvm *kvm);
127void tdx_vm_destroy(struct kvm *kvm);
128int tdx_vm_ioctl(struct kvm *kvm, void __user *argp);
129
130int tdx_vcpu_create(struct kvm_vcpu *vcpu);
131void tdx_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event);
132void tdx_vcpu_free(struct kvm_vcpu *vcpu);
133void tdx_vcpu_load(struct kvm_vcpu *vcpu, int cpu);
134int tdx_vcpu_pre_run(struct kvm_vcpu *vcpu);
135fastpath_t tdx_vcpu_run(struct kvm_vcpu *vcpu, u64 run_flags);
136void tdx_prepare_switch_to_guest(struct kvm_vcpu *vcpu);
137void tdx_vcpu_put(struct kvm_vcpu *vcpu);
138int tdx_handle_exit(struct kvm_vcpu *vcpu,
139		enum exit_fastpath_completion fastpath);
140
141void tdx_deliver_interrupt(struct kvm_lapic *apic, int delivery_mode,
142			   int trig_mode, int vector);
143void tdx_inject_nmi(struct kvm_vcpu *vcpu);
144void tdx_get_exit_info(struct kvm_vcpu *vcpu, u32 *reason,
145		u64 *info1, u64 *info2, u32 *intr_info, u32 *error_code);
146bool tdx_has_emulated_msr(u32 index);
147int tdx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr);
148int tdx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr);
149
150int tdx_vcpu_ioctl(struct kvm_vcpu *vcpu, void __user *argp);
151int tdx_vcpu_unlocked_ioctl(struct kvm_vcpu *vcpu, void __user *argp);
152
153void tdx_flush_tlb_current(struct kvm_vcpu *vcpu);
154void tdx_flush_tlb_all(struct kvm_vcpu *vcpu);
155void tdx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, int root_level);
156int tdx_gmem_max_mapping_level(struct kvm *kvm, kvm_pfn_t pfn, bool is_private);
157#endif
158
159#endif /* __KVM_X86_VMX_X86_OPS_H */
~/ Read-only file preview.