aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2011-09-14 04:02:41 -0400
committerAvi Kivity <avi@redhat.com>2012-03-05 07:52:40 -0500
commite24ed81fedd551e80378be62fa0b0532480ea7d4 (patch)
tree254bcf7fbe858bc75087432667c7409e58b35575 /include/linux
parent6b75e6bfef7ba108ac3df0d430d80dea68fde4bf (diff)
KVM: PPC: Add generic single register ioctls
Right now we transfer a static struct every time we want to get or set registers. Unfortunately, over time we realize that there are more of these than we thought of before and the extensibility and flexibility of transferring a full struct every time is limited. So this is a new approach to the problem. With these new ioctls, we can get and set a single register that is identified by an ID. This allows for very precise and limited transmittal of data. When we later realize that it's a better idea to shove over multiple registers at once, we can reuse most of the infrastructure and simply implement a GET_MANY_REGS / SET_MANY_REGS interface. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/kvm.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index fa029ced4bd5..4f7a9fb8ab06 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -582,6 +582,7 @@ struct kvm_ppc_pvinfo {
582#define KVM_CAP_MAX_VCPUS 66 /* returns max vcpus per vm */ 582#define KVM_CAP_MAX_VCPUS 66 /* returns max vcpus per vm */
583#define KVM_CAP_PPC_PAPR 68 583#define KVM_CAP_PPC_PAPR 68
584#define KVM_CAP_SW_TLB 69 584#define KVM_CAP_SW_TLB 69
585#define KVM_CAP_ONE_REG 70
585#define KVM_CAP_S390_GMAP 71 586#define KVM_CAP_S390_GMAP 71
586#define KVM_CAP_TSC_DEADLINE_TIMER 72 587#define KVM_CAP_TSC_DEADLINE_TIMER 72
587#define KVM_CAP_S390_UCONTROL 73 588#define KVM_CAP_S390_UCONTROL 73
@@ -680,6 +681,37 @@ struct kvm_dirty_tlb {
680 __u32 num_dirty; 681 __u32 num_dirty;
681}; 682};
682 683
684/* Available with KVM_CAP_ONE_REG */
685
686#define KVM_REG_ARCH_MASK 0xff00000000000000ULL
687#define KVM_REG_GENERIC 0x0000000000000000ULL
688
689/*
690 * Architecture specific registers are to be defined in arch headers and
691 * ORed with the arch identifier.
692 */
693#define KVM_REG_PPC 0x1000000000000000ULL
694#define KVM_REG_X86 0x2000000000000000ULL
695#define KVM_REG_IA64 0x3000000000000000ULL
696#define KVM_REG_ARM 0x4000000000000000ULL
697#define KVM_REG_S390 0x5000000000000000ULL
698
699#define KVM_REG_SIZE_SHIFT 52
700#define KVM_REG_SIZE_MASK 0x00f0000000000000ULL
701#define KVM_REG_SIZE_U8 0x0000000000000000ULL
702#define KVM_REG_SIZE_U16 0x0010000000000000ULL
703#define KVM_REG_SIZE_U32 0x0020000000000000ULL
704#define KVM_REG_SIZE_U64 0x0030000000000000ULL
705#define KVM_REG_SIZE_U128 0x0040000000000000ULL
706#define KVM_REG_SIZE_U256 0x0050000000000000ULL
707#define KVM_REG_SIZE_U512 0x0060000000000000ULL
708#define KVM_REG_SIZE_U1024 0x0070000000000000ULL
709
710struct kvm_one_reg {
711 __u64 id;
712 __u64 addr;
713};
714
683/* 715/*
684 * ioctls for VM fds 716 * ioctls for VM fds
685 */ 717 */
@@ -819,6 +851,9 @@ struct kvm_s390_ucas_mapping {
819#define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma) 851#define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma)
820/* Available with KVM_CAP_SW_TLB */ 852/* Available with KVM_CAP_SW_TLB */
821#define KVM_DIRTY_TLB _IOW(KVMIO, 0xaa, struct kvm_dirty_tlb) 853#define KVM_DIRTY_TLB _IOW(KVMIO, 0xaa, struct kvm_dirty_tlb)
854/* Available with KVM_CAP_ONE_REG */
855#define KVM_GET_ONE_REG _IOW(KVMIO, 0xab, struct kvm_one_reg)
856#define KVM_SET_ONE_REG _IOW(KVMIO, 0xac, struct kvm_one_reg)
822 857
823#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) 858#define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0)
824 859