2008-04-17 08:28:09 +04:00
/*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License , version 2 , as
* published by the Free Software Foundation .
*
* 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 . 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 , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*
* Copyright IBM Corp . 2008
*
* Authors : Hollis Blanchard < hollisb @ us . ibm . com >
*/
# ifndef __POWERPC_KVM_PPC_H__
# define __POWERPC_KVM_PPC_H__
/* This file exists just so we can dereference kvm_vcpu, avoiding nested header
* dependencies . */
# include <linux/mutex.h>
# include <linux/timer.h>
# include <linux/types.h>
# include <linux/kvm_types.h>
# include <linux/kvm_host.h>
enum emulation_result {
EMULATE_DONE , /* no further processing */
EMULATE_DO_MMIO , /* kvm_run filled with MMIO request */
EMULATE_DO_DCR , /* kvm_run filled with DCR request */
EMULATE_FAIL , /* can't emulate this instruction */
} ;
extern int __kvmppc_vcpu_run ( struct kvm_run * kvm_run , struct kvm_vcpu * vcpu ) ;
extern char kvmppc_handlers_start [ ] ;
extern unsigned long kvmppc_handler_len ;
extern void kvmppc_dump_vcpu ( struct kvm_vcpu * vcpu ) ;
extern int kvmppc_handle_load ( struct kvm_run * run , struct kvm_vcpu * vcpu ,
unsigned int rt , unsigned int bytes ,
int is_bigendian ) ;
extern int kvmppc_handle_store ( struct kvm_run * run , struct kvm_vcpu * vcpu ,
u32 val , unsigned int bytes , int is_bigendian ) ;
extern int kvmppc_emulate_instruction ( struct kvm_run * run ,
struct kvm_vcpu * vcpu ) ;
2008-05-22 03:22:51 +04:00
extern int kvmppc_emulate_mmio ( struct kvm_run * run , struct kvm_vcpu * vcpu ) ;
2008-11-05 18:36:16 +03:00
extern void kvmppc_emulate_dec ( struct kvm_vcpu * vcpu ) ;
2008-04-17 08:28:09 +04:00
2009-01-04 01:22:59 +03:00
/* Core-specific hooks */
2008-12-03 00:51:53 +03:00
extern void kvmppc_mmu_map ( struct kvm_vcpu * vcpu , u64 gvaddr , gpa_t gpaddr ,
2008-12-03 00:51:55 +03:00
unsigned int gtlb_idx ) ;
2008-04-17 08:28:09 +04:00
extern void kvmppc_mmu_priv_switch ( struct kvm_vcpu * vcpu , int usermode ) ;
2008-07-25 22:54:53 +04:00
extern void kvmppc_mmu_switch_pid ( struct kvm_vcpu * vcpu , u32 pid ) ;
2009-01-04 01:22:59 +03:00
extern void kvmppc_mmu_destroy ( struct kvm_vcpu * vcpu ) ;
2008-11-05 18:36:14 +03:00
2008-11-05 18:36:18 +03:00
extern struct kvm_vcpu * kvmppc_core_vcpu_create ( struct kvm * kvm ,
unsigned int id ) ;
extern void kvmppc_core_vcpu_free ( struct kvm_vcpu * vcpu ) ;
2008-11-05 18:36:17 +03:00
extern int kvmppc_core_vcpu_setup ( struct kvm_vcpu * vcpu ) ;
2008-11-05 18:36:14 +03:00
extern int kvmppc_core_check_processor_compat ( void ) ;
2008-11-05 18:36:17 +03:00
extern int kvmppc_core_vcpu_translate ( struct kvm_vcpu * vcpu ,
struct kvm_translation * tr ) ;
2008-11-05 18:36:14 +03:00
extern void kvmppc_core_vcpu_load ( struct kvm_vcpu * vcpu , int cpu ) ;
extern void kvmppc_core_vcpu_put ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_load_guest_debugstate ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_load_host_debugstate ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_deliver_interrupts ( struct kvm_vcpu * vcpu ) ;
extern int kvmppc_core_pending_dec ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_queue_program ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_queue_dec ( struct kvm_vcpu * vcpu ) ;
extern void kvmppc_core_queue_external ( struct kvm_vcpu * vcpu ,
struct kvm_interrupt * irq ) ;
2008-11-05 18:36:16 +03:00
extern int kvmppc_core_emulate_op ( struct kvm_run * run , struct kvm_vcpu * vcpu ,
unsigned int op , int * advance ) ;
extern int kvmppc_core_emulate_mtspr ( struct kvm_vcpu * vcpu , int sprn , int rs ) ;
extern int kvmppc_core_emulate_mfspr ( struct kvm_vcpu * vcpu , int sprn , int rt ) ;
2008-11-05 18:36:18 +03:00
extern int kvmppc_booke_init ( void ) ;
extern void kvmppc_booke_exit ( void ) ;
2008-11-24 20:37:38 +03:00
extern void kvmppc_core_destroy_mmu ( struct kvm_vcpu * vcpu ) ;
2008-04-17 08:28:09 +04:00
# endif /* __POWERPC_KVM_PPC_H__ */