|  | /* Copyright (c) 2015 Google Inc. | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * x86 VMM kernel headers */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <ros/arch/vmx.h> | 
|  |  | 
|  | /* Initialization data provided by the userspace part of the VMM when setting | 
|  | * up a guest physical core (vmx vcpu). */ | 
|  | struct vmm_gpcore_init { | 
|  | void				*posted_irq_desc; | 
|  | void				*vapic_addr; | 
|  | void				*apic_addr; | 
|  | uintptr_t			fsbase; | 
|  | uintptr_t			gsbase; | 
|  | }; | 
|  |  | 
|  | /* Intel VM Trap Injection Fields */ | 
|  | #define VM_TRAP_VALID               (1 << 31) | 
|  | #define VM_TRAP_ERROR_CODE          (1 << 11) | 
|  | #define VM_TRAP_HARDWARE            (3 << 8) | 
|  | /* End Intel VM Trap Injection Fields */ | 
|  |  | 
|  | static inline bool vmm_user_handles_cpuid(uint32_t eax, uint32_t ecx) | 
|  | { | 
|  | switch (eax) { | 
|  | case 0x0b: | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | } |