diff options
Diffstat (limited to 'kernel/x86/external-module-compat.h')
-rw-r--r-- | kernel/x86/external-module-compat.h | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/kernel/x86/external-module-compat.h b/kernel/x86/external-module-compat.h deleted file mode 100644 index a03087db..00000000 --- a/kernel/x86/external-module-compat.h +++ /dev/null @@ -1,406 +0,0 @@ - -/* - * Compatibility header for building as an external module. - */ - -#include <linux/compiler.h> -#include <linux/version.h> - -#include "../external-module-compat-comm.h" - -#include <asm/msr.h> - -/* for the MSR_VM_* constants that were moved to svm.h */ -#include <asm/svm.h> - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) - -#ifndef _EFER_SCE -#define _EFER_SCE 0 /* SYSCALL/SYSRET */ -#endif - -#ifndef EFER_SCE -#define EFER_SCE (1<<_EFER_SCE) -#endif - -#endif - -#ifndef MSR_VM_CR -#define MSR_VM_CR 0xc0010114 -#endif - -#ifndef MSR_VM_HSAVE_PA -#define MSR_VM_HSAVE_PA 0xc0010117 -#endif - -#ifndef _EFER_SVME -#define _EFER_SVME 12 -#define EFER_SVME (1<<_EFER_SVME) -#endif - -#include <asm/cpufeature.h> - -#ifndef X86_FEATURE_SVM -#define X86_FEATURE_SVM (6*32+ 2) /* Secure virtual machine */ -#endif - -#include <linux/smp.h> - -#ifndef X86_CR0_PE -#define X86_CR0_PE 0x00000001 -#endif - -#ifndef X86_CR0_MP -#define X86_CR0_MP 0x00000002 -#endif - -#ifndef X86_CR0_EM -#define X86_CR0_EM 0x00000004 -#endif - -#ifndef X86_CR0_TS -#define X86_CR0_TS 0x00000008 -#endif - -#ifndef X86_CR0_ET -#define X86_CR0_ET 0x00000010 -#endif - -#ifndef X86_CR0_NE -#define X86_CR0_NE 0x00000020 -#endif - -#ifndef X86_CR0_WP -#define X86_CR0_WP 0x00010000 -#endif - -#ifndef X86_CR0_AM -#define X86_CR0_AM 0x00040000 -#endif - -#ifndef X86_CR0_NW -#define X86_CR0_NW 0x20000000 -#endif - -#ifndef X86_CR0_CD -#define X86_CR0_CD 0x40000000 -#endif - -#ifndef X86_CR0_PG -#define X86_CR0_PG 0x80000000 -#endif - -#ifndef X86_CR3_PWT -#define X86_CR3_PWT 0x00000008 -#endif - -#ifndef X86_CR3_PCD -#define X86_CR3_PCD 0x00000010 -#endif - -#ifndef X86_CR4_VMXE -#define X86_CR4_VMXE 0x00002000 -#endif - -#undef X86_CR8_TPR -#define X86_CR8_TPR 0x0f - -/* - * 2.6.22 does not define set_64bit() under nonpae - */ -#ifdef CONFIG_X86_32 - -#include <asm/cmpxchg.h> - -static inline void __kvm_set_64bit(u64 *ptr, u64 val) -{ - unsigned int low = val; - unsigned int high = val >> 32; - - __asm__ __volatile__ ( - "\n1:\t" - "movl (%0), %%eax\n\t" - "movl 4(%0), %%edx\n\t" - "lock cmpxchg8b (%0)\n\t" - "jnz 1b" - : /* no outputs */ - : "D"(ptr), - "b"(low), - "c"(high) - : "ax","dx","memory"); -} - -#undef set_64bit -#define set_64bit __kvm_set_64bit - -static inline unsigned long long __kvm_cmpxchg64(volatile void *ptr, - unsigned long long old, - unsigned long long new) -{ - unsigned long long prev; - __asm__ __volatile__("lock cmpxchg8b %3" - : "=A"(prev) - : "b"((unsigned long)new), - "c"((unsigned long)(new >> 32)), - "m"(*__xg(ptr)), - "0"(old) - : "memory"); - return prev; -} - -#define kvm_cmpxchg64(ptr,o,n)\ - ((__typeof__(*(ptr)))__kvm_cmpxchg64((ptr),(unsigned long long)(o),\ - (unsigned long long)(n))) - -#undef cmpxchg64 -#define cmpxchg64(ptr, o, n) kvm_cmpxchg64(ptr, o, n) - -#endif - -#ifndef CONFIG_PREEMPT_NOTIFIERS -/* - * Include sched|preempt.h before defining CONFIG_PREEMPT_NOTIFIERS to avoid - * a miscompile. - */ -#include <linux/sched.h> -#include <linux/preempt.h> -#define CONFIG_PREEMPT_NOTIFIERS -#define CONFIG_PREEMPT_NOTIFIERS_COMPAT - -struct preempt_notifier; - -struct preempt_ops { - void (*sched_in)(struct preempt_notifier *notifier, int cpu); - void (*sched_out)(struct preempt_notifier *notifier, - struct task_struct *next); -}; - -struct preempt_notifier { - struct list_head link; - struct task_struct *tsk; - struct preempt_ops *ops; -}; - -void preempt_notifier_register(struct preempt_notifier *notifier); -void preempt_notifier_unregister(struct preempt_notifier *notifier); - -static inline void preempt_notifier_init(struct preempt_notifier *notifier, - struct preempt_ops *ops) -{ - notifier->ops = ops; -} - -void start_special_insn(void); -void end_special_insn(void); -void in_special_section(void); -void special_reload_dr7(void); - -void preempt_notifier_sys_init(void); -void preempt_notifier_sys_exit(void); - -#else - -static inline void start_special_insn(void) {} -static inline void end_special_insn(void) {} -static inline void in_special_section(void) {} -static inline void special_reload_dr7(void) {} - -static inline void preempt_notifier_sys_init(void) {} -static inline void preempt_notifier_sys_exit(void) {} - -#endif - -/* CONFIG_HAS_IOMEM is apparently fairly new too (2.6.21 for x86_64). */ -#ifndef CONFIG_HAS_IOMEM -#define CONFIG_HAS_IOMEM 1 -#endif - -/* X86_FEATURE_NX is missing in some x86_64 kernels */ - -#include <asm/cpufeature.h> - -#ifndef X86_FEATURE_NX -#define X86_FEATURE_NX (1*32+20) -#endif - -#undef true -#define true 1 -#undef false -#define false 0 - -/* EFER_LMA and EFER_LME are missing in pre 2.6.24 i386 kernels */ -#ifndef EFER_LME -#define _EFER_LME 8 /* Long mode enable */ -#define _EFER_LMA 10 /* Long mode active (read-only) */ -#define EFER_LME (1<<_EFER_LME) -#define EFER_LMA (1<<_EFER_LMA) -#endif - -struct kvm_desc_struct { - union { - struct { unsigned int a, b; }; - struct { - u16 limit0; - u16 base0; - unsigned base1: 8, type: 4, s: 1, dpl: 2, p: 1; - unsigned limit: 4, avl: 1, l: 1, d: 1, g: 1, base2: 8; - }; - - }; -} __attribute__((packed)); - -struct kvm_ldttss_desc64 { - u16 limit0; - u16 base0; - unsigned base1 : 8, type : 5, dpl : 2, p : 1; - unsigned limit1 : 4, zero0 : 3, g : 1, base2 : 8; - u32 base3; - u32 zero1; -} __attribute__((packed)); - -struct kvm_desc_ptr { - unsigned short size; - unsigned long address; -} __attribute__((packed)); - -#include <asm/msr.h> -#ifndef MSR_FS_BASE -#define MSR_FS_BASE 0xc0000100 -#endif -#ifndef MSR_GS_BASE -#define MSR_GS_BASE 0xc0000101 -#endif - -/* undefine lapic */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) - -#undef lapic - -#endif - -#include <asm/hw_irq.h> -#ifndef NMI_VECTOR -#define NMI_VECTOR 2 -#endif - -#ifndef MSR_MTRRcap -#define MSR_MTRRcap 0x0fe -#define MSR_MTRRfix64K_00000 0x250 -#define MSR_MTRRfix16K_80000 0x258 -#define MSR_MTRRfix16K_A0000 0x259 -#define MSR_MTRRfix4K_C0000 0x268 -#define MSR_MTRRfix4K_C8000 0x269 -#define MSR_MTRRfix4K_D0000 0x26a -#define MSR_MTRRfix4K_D8000 0x26b -#define MSR_MTRRfix4K_E0000 0x26c -#define MSR_MTRRfix4K_E8000 0x26d -#define MSR_MTRRfix4K_F0000 0x26e -#define MSR_MTRRfix4K_F8000 0x26f -#define MSR_MTRRdefType 0x2ff -#endif - -#ifndef MSR_IA32_CR_PAT -#define MSR_IA32_CR_PAT 0x00000277 -#endif - -/* Define DEBUGCTLMSR bits */ -#ifndef DEBUGCTLMSR_LBR - -#define _DEBUGCTLMSR_LBR 0 /* last branch recording */ -#define _DEBUGCTLMSR_BTF 1 /* single-step on branches */ - -#define DEBUGCTLMSR_LBR (1UL << _DEBUGCTLMSR_LBR) -#define DEBUGCTLMSR_BTF (1UL << _DEBUGCTLMSR_BTF) - -#endif - -#include <asm/asm.h> - -#ifndef __ASM_SIZE -# define ____ASM_FORM(x) " " #x " " -# ifdef CONFIG_X86_64 -# define __ASM_SIZE(inst) ____ASM_FORM(inst##q) -# else -# define __ASM_SIZE(inst) ____ASM_FORM(inst##l) -# endif -#endif - -#ifndef _ASM_PTR -# ifdef CONFIG_X86_64 -# define _ASM_PTR ".quad" -# else -# define _ASM_PTR ".long" -# endif -#endif - -/* Intel VT MSRs */ -#ifndef MSR_IA32_VMX_BASIC -#define MSR_IA32_VMX_BASIC 0x00000480 -#define MSR_IA32_VMX_PINBASED_CTLS 0x00000481 -#define MSR_IA32_VMX_PROCBASED_CTLS 0x00000482 -#define MSR_IA32_VMX_EXIT_CTLS 0x00000483 -#define MSR_IA32_VMX_ENTRY_CTLS 0x00000484 -#define MSR_IA32_VMX_MISC 0x00000485 -#define MSR_IA32_VMX_CR0_FIXED0 0x00000486 -#define MSR_IA32_VMX_CR0_FIXED1 0x00000487 -#define MSR_IA32_VMX_CR4_FIXED0 0x00000488 -#define MSR_IA32_VMX_CR4_FIXED1 0x00000489 -#define MSR_IA32_VMX_VMCS_ENUM 0x0000048a -#define MSR_IA32_VMX_PROCBASED_CTLS2 0x0000048b -#define MSR_IA32_VMX_EPT_VPID_CAP 0x0000048c -#endif - -#ifndef MSR_IA32_FEATURE_CONTROL -#define MSR_IA32_FEATURE_CONTROL 0x0000003a - -#define FEATURE_CONTROL_LOCKED (1<<0) -#define FEATURE_CONTROL_VMXON_ENABLED (1<<2) -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) && defined(__x86_64__) - -#undef set_debugreg -#define set_debugreg(value, register) \ - __asm__("movq %0,%%db" #register \ - : /* no output */ \ - :"r" ((unsigned long)value)) - -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) - -struct mtrr_var_range { - u32 base_lo; - u32 base_hi; - u32 mask_lo; - u32 mask_hi; -}; - -/* In the Intel processor's MTRR interface, the MTRR type is always held in - an 8 bit field: */ -typedef u8 mtrr_type; - -#define MTRR_NUM_FIXED_RANGES 88 -#define MTRR_MAX_VAR_RANGES 256 - -struct mtrr_state_type { - struct mtrr_var_range var_ranges[MTRR_MAX_VAR_RANGES]; - mtrr_type fixed_ranges[MTRR_NUM_FIXED_RANGES]; - unsigned char enabled; - unsigned char have_fixed; - mtrr_type def_type; -}; - -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25) -#if !defined(RHEL_RELEASE_CODE) || RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5,4) - -typedef u64 phys_addr_t; - -#endif -#endif - -#ifndef CONFIG_HAVE_KVM_IRQCHIP -#define CONFIG_HAVE_KVM_IRQCHIP 1 -#endif |