4 * Copyright (C) 2015 ARM Ltd.
5 * Author: Marc Zyngier <marc.zyngier@arm.com>
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 #include <linux/kvm_host.h>
17 #include <kvm/arm_vgic.h>
21 static int vgic_create(struct kvm_device *dev, u32 type)
23 return kvm_vgic_create(dev->kvm, type);
26 static void vgic_destroy(struct kvm_device *dev)
31 void kvm_register_vgic_device(unsigned long type)
34 case KVM_DEV_TYPE_ARM_VGIC_V2:
35 kvm_register_device_ops(&kvm_arm_vgic_v2_ops,
36 KVM_DEV_TYPE_ARM_VGIC_V2);
38 #ifdef CONFIG_KVM_ARM_VGIC_V3
39 case KVM_DEV_TYPE_ARM_VGIC_V3:
40 kvm_register_device_ops(&kvm_arm_vgic_v3_ops,
41 KVM_DEV_TYPE_ARM_VGIC_V3);
49 static int vgic_v2_set_attr(struct kvm_device *dev,
50 struct kvm_device_attr *attr)
55 static int vgic_v2_get_attr(struct kvm_device *dev,
56 struct kvm_device_attr *attr)
61 static int vgic_v2_has_attr(struct kvm_device *dev,
62 struct kvm_device_attr *attr)
67 struct kvm_device_ops kvm_arm_vgic_v2_ops = {
68 .name = "kvm-arm-vgic-v2",
69 .create = vgic_create,
70 .destroy = vgic_destroy,
71 .set_attr = vgic_v2_set_attr,
72 .get_attr = vgic_v2_get_attr,
73 .has_attr = vgic_v2_has_attr,
78 #ifdef CONFIG_KVM_ARM_VGIC_V3
80 static int vgic_v3_set_attr(struct kvm_device *dev,
81 struct kvm_device_attr *attr)
86 static int vgic_v3_get_attr(struct kvm_device *dev,
87 struct kvm_device_attr *attr)
92 static int vgic_v3_has_attr(struct kvm_device *dev,
93 struct kvm_device_attr *attr)
98 struct kvm_device_ops kvm_arm_vgic_v3_ops = {
99 .name = "kvm-arm-vgic-v3",
100 .create = vgic_create,
101 .destroy = vgic_destroy,
102 .set_attr = vgic_v3_set_attr,
103 .get_attr = vgic_v3_get_attr,
104 .has_attr = vgic_v3_has_attr,
107 #endif /* CONFIG_KVM_ARM_VGIC_V3 */