aboutsummaryrefslogtreecommitdiffstats
path: root/include/kvm
diff options
context:
space:
mode:
authorEric Auger <eric.auger@linaro.org>2015-12-21 12:09:38 -0500
committerChristoffer Dall <christoffer.dall@linaro.org>2016-05-20 09:40:06 -0400
commitad275b8bb1e659b14120174d87e3c1fdc22e9978 (patch)
tree78bbd8ed5653836ccd931323819ec1f57b793573 /include/kvm
parent5e6431da8f3a04759ac8d77b7c98eec0de580343 (diff)
KVM: arm/arm64: vgic-new: vgic_init: implement vgic_init
This patch allocates and initializes the data structures used to model the vgic distributor and virtual cpu interfaces. At that stage the number of IRQs and number of virtual CPUs is frozen. Signed-off-by: Eric Auger <eric.auger@linaro.org> Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Christoffer Dall <christoffer.dall@linaro.org>
Diffstat (limited to 'include/kvm')
-rw-r--r--include/kvm/vgic/vgic.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/include/kvm/vgic/vgic.h b/include/kvm/vgic/vgic.h
index 0634d895007a..e7ae36b9bffa 100644
--- a/include/kvm/vgic/vgic.h
+++ b/include/kvm/vgic/vgic.h
@@ -119,6 +119,7 @@ struct vgic_io_device {
119struct vgic_dist { 119struct vgic_dist {
120 bool in_kernel; 120 bool in_kernel;
121 bool ready; 121 bool ready;
122 bool initialized;
122 123
123 /* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */ 124 /* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
124 u32 vgic_model; 125 u32 vgic_model;
@@ -195,7 +196,11 @@ struct vgic_cpu {
195}; 196};
196 197
197int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write); 198int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write);
199void kvm_vgic_early_init(struct kvm *kvm);
198int kvm_vgic_create(struct kvm *kvm, u32 type); 200int kvm_vgic_create(struct kvm *kvm, u32 type);
201void kvm_vgic_destroy(struct kvm *kvm);
202void kvm_vgic_vcpu_early_init(struct kvm_vcpu *vcpu);
203void kvm_vgic_vcpu_destroy(struct kvm_vcpu *vcpu);
199int kvm_vgic_hyp_init(void); 204int kvm_vgic_hyp_init(void);
200 205
201int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int intid, 206int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int intid,
@@ -204,7 +209,7 @@ int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int intid,
204int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu); 209int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu);
205 210
206#define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) 211#define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
207#define vgic_initialized(k) (false) 212#define vgic_initialized(k) ((k)->arch.vgic.initialized)
208#define vgic_ready(k) ((k)->arch.vgic.ready) 213#define vgic_ready(k) ((k)->arch.vgic.ready)
209#define vgic_valid_spi(k, i) (((i) >= VGIC_NR_PRIVATE_IRQS) && \ 214#define vgic_valid_spi(k, i) (((i) >= VGIC_NR_PRIVATE_IRQS) && \
210 ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS)) 215 ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS))