2008-10-27 10:41:46 -07:00
/*
* Copyright ( C ) 2008 , VMware , Inc .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE , GOOD TITLE or
* NON INFRINGEMENT . See the GNU General Public License for more
* details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
*/
2010-05-07 16:57:28 -07:00
# ifndef _ASM_X86_HYPERVISOR_H
# define _ASM_X86_HYPERVISOR_H
2008-10-27 10:41:46 -07:00
2013-03-04 21:20:21 +01:00
# ifdef CONFIG_HYPERVISOR_GUEST
2010-12-21 14:18:48 +08:00
# include <asm/kvm_para.h>
2010-12-21 14:18:49 +08:00
# include <asm/xen/hypervisor.h>
2010-12-21 14:18:48 +08:00
2010-05-07 16:57:28 -07:00
/*
* x86 hypervisor information
*/
struct hypervisor_x86 {
/* Hypervisor name */
const char * name ;
/* Detection routine */
bool ( * detect ) ( void ) ;
/* Adjust CPU feature bits (run once per CPU) */
void ( * set_cpu_features ) ( struct cpuinfo_x86 * ) ;
/* Platform setup (run once per boot) */
void ( * init_platform ) ( void ) ;
2013-01-17 15:44:42 -08:00
/* X2APIC detection (run once per boot) */
bool ( * x2apic_available ) ( void ) ;
2010-05-07 16:57:28 -07:00
} ;
extern const struct hypervisor_x86 * x86_hyper ;
/* Recognized hypervisors */
extern const struct hypervisor_x86 x86_hyper_vmware ;
extern const struct hypervisor_x86 x86_hyper_ms_hyperv ;
2010-05-14 12:39:33 +01:00
extern const struct hypervisor_x86 x86_hyper_xen_hvm ;
2012-07-06 13:47:39 -04:00
extern const struct hypervisor_x86 x86_hyper_kvm ;
2010-05-07 16:57:28 -07:00
2013-03-04 21:20:21 +01:00
extern void init_hypervisor ( struct cpuinfo_x86 * c ) ;
extern void init_hypervisor_platform ( void ) ;
extern bool hypervisor_x2apic_available ( void ) ;
# else
static inline void init_hypervisor ( struct cpuinfo_x86 * c ) { }
static inline void init_hypervisor_platform ( void ) { }
static inline bool hypervisor_x2apic_available ( void ) { return false ; }
# endif /* CONFIG_HYPERVISOR_GUEST */
# endif /* _ASM_X86_HYPERVISOR_H */