/* * This file contains the powerpc specific implementation for the * architecture dependent functions defined in kvm-common.h and * libkvm.h * * Copyright (C) 2006 Qumranet, Inc. * * Authors: * Avi Kivity * Yaniv Kamay * * Copyright IBM Corp. 2007,2008 * Authors: * Jerone Young * Christian Ehrhardt * * This work is licensed under the GNU LGPL license, version 2. */ #include "libkvm-all.h" #include "libkvm.h" #include #include #include int handle_dcr(kvm_vcpu_context_t vcpu) { int ret = 0; struct kvm_run *run = vcpu->run; kvm_context_t kvm = vcpu->kvm; if (run->dcr.is_write) ret = kvm->callbacks->powerpc_dcr_write(vcpu, run->dcr.dcrn, run->dcr.data); else ret = kvm->callbacks->powerpc_dcr_read(vcpu, run->dcr.dcrn, &(run->dcr.data)); return ret; } void kvm_show_code(kvm_vcpu_context_t vcpu) { fprintf(stderr, "%s: Operation not supported\n", __FUNCTION__); } void kvm_show_regs(kvm_vcpu_context_t vcpu) { struct kvm_regs regs; int i; if (kvm_get_regs(vcpu, ®s)) return; fprintf(stderr,"guest vcpu #%d\n", vcpu); fprintf(stderr,"pc: %016"PRIx64" msr: %016"PRIx64"\n", regs.pc, regs.msr); fprintf(stderr,"lr: %016"PRIx64" ctr: %016"PRIx64"\n", regs.lr, regs.ctr); fprintf(stderr,"srr0: %016"PRIx64" srr1: %016"PRIx64"\n", regs.srr0, regs.srr1); for (i=0; i<32; i+=4) { fprintf(stderr, "gpr%02d: %016"PRIx64" %016"PRIx64" %016"PRIx64 " %016"PRIx64"\n", i, regs.gpr[i], regs.gpr[i+1], regs.gpr[i+2], regs.gpr[i+3]); } fflush(stdout); } int kvm_arch_create(kvm_context_t kvm, unsigned long phys_mem_bytes, void **vm_mem) { int r; r = kvm_init_coalesced_mmio(kvm); if (r < 0) return r; return 0; } int kvm_arch_run(kvm_vcpu_context_t vcpu) { int ret = 0; switch (vcpu->run->exit_reason){ case KVM_EXIT_DCR: ret = handle_dcr(vcpu); break; default: ret = 1; break; } return ret; }