mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 14:12:51 +00:00
75f74f0dbe
Cores provide 3 emulation hooks, implemented for example in the new 4xx_emulate.c: kvmppc_core_emulate_op kvmppc_core_emulate_mtspr kvmppc_core_emulate_mfspr Strictly speaking the last two aren't necessary, but provide for more informative error reporting ("unknown SPR"). Long term I'd like to have instruction decoding autogenerated from tables of opcodes, and that way we could aggregate universal, Book E, and core-specific instructions more easily and without redundant switch statements. Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com>
40 lines
1.2 KiB
C
40 lines
1.2 KiB
C
/*
|
|
* 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 __KVM_BOOKE_H__
|
|
#define __KVM_BOOKE_H__
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/kvm_host.h>
|
|
|
|
/* Helper function for "full" MSR writes. No need to call this if only EE is
|
|
* changing. */
|
|
static inline void kvmppc_set_msr(struct kvm_vcpu *vcpu, u32 new_msr)
|
|
{
|
|
if ((new_msr & MSR_PR) != (vcpu->arch.msr & MSR_PR))
|
|
kvmppc_mmu_priv_switch(vcpu, new_msr & MSR_PR);
|
|
|
|
vcpu->arch.msr = new_msr;
|
|
|
|
if (vcpu->arch.msr & MSR_WE)
|
|
kvm_vcpu_block(vcpu);
|
|
}
|
|
|
|
#endif /* __KVM_BOOKE_H__ */
|