KVM: SVM: Software reserved fields
[linux-2.6-microblaze.git] / arch / x86 / kvm / svm / svm.h
index 84b3133..af09bcd 100644 (file)
 extern u32 msrpm_offsets[MSRPM_OFFSETS] __read_mostly;
 extern bool npt_enabled;
 
+/*
+ * Clean bits in VMCB.
+ * VMCB_ALL_CLEAN_MASK might also need to
+ * be updated if this enum is modified.
+ */
 enum {
        VMCB_INTERCEPTS, /* Intercept vectors, TSC offset,
                            pause filter count */
@@ -48,9 +53,17 @@ enum {
                          * AVIC PHYSICAL_TABLE pointer,
                          * AVIC LOGICAL_TABLE pointer
                          */
-       VMCB_DIRTY_MAX,
+       VMCB_SW = 31,    /* Reserved for hypervisor/software use */
 };
 
+#define VMCB_ALL_CLEAN_MASK (                                  \
+       (1U << VMCB_INTERCEPTS) | (1U << VMCB_PERM_MAP) |       \
+       (1U << VMCB_ASID) | (1U << VMCB_INTR) |                 \
+       (1U << VMCB_NPT) | (1U << VMCB_CR) | (1U << VMCB_DR) |  \
+       (1U << VMCB_DT) | (1U << VMCB_SEG) | (1U << VMCB_CR2) | \
+       (1U << VMCB_LBR) | (1U << VMCB_AVIC) |                  \
+       (1U << VMCB_SW))
+
 /* TPR and CR2 are always written before VMRUN */
 #define VMCB_ALWAYS_DIRTY_MASK ((1U << VMCB_INTR) | (1U << VMCB_CR2))
 
@@ -237,7 +250,7 @@ static inline void vmcb_mark_all_dirty(struct vmcb *vmcb)
 
 static inline void vmcb_mark_all_clean(struct vmcb *vmcb)
 {
-       vmcb->control.clean = ((1 << VMCB_DIRTY_MAX) - 1)
+       vmcb->control.clean = VMCB_ALL_CLEAN_MASK
                               & ~VMCB_ALWAYS_DIRTY_MASK;
 }
 
@@ -479,8 +492,6 @@ extern struct kvm_x86_nested_ops svm_nested_ops;
 
 #define VMCB_AVIC_APIC_BAR_MASK                0xFFFFFFFFFF000ULL
 
-extern int avic;
-
 static inline void avic_update_vapic_bar(struct vcpu_svm *svm, u64 data)
 {
        svm->vmcb->control.avic_vapic_bar = data & VMCB_AVIC_APIC_BAR_MASK;
@@ -581,6 +592,7 @@ void sev_es_init_vmcb(struct vcpu_svm *svm);
 void sev_es_create_vcpu(struct vcpu_svm *svm);
 void sev_vcpu_deliver_sipi_vector(struct kvm_vcpu *vcpu, u8 vector);
 void sev_es_prepare_guest_switch(struct vcpu_svm *svm, unsigned int cpu);
+void sev_es_unmap_ghcb(struct vcpu_svm *svm);
 
 /* vmenter.S */