mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 23:34:00 -04:00
vgic_v3_setup() has a good bit of sanity checking internally to ensure that vCPUs have actually been created and match the dimensioning of the vgic itself. Spin off an unsanitised setup and initialization helper so vgic initialization can be wired in around a 'default' VM's vCPU creation. Signed-off-by: Oliver Upton <oliver.upton@linux.dev> Signed-off-by: Marc Zyngier <maz@kernel.org>
41 lines
1.2 KiB
C
41 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* ARM Generic Interrupt Controller (GIC) host specific defines
|
|
*/
|
|
|
|
#ifndef SELFTEST_KVM_VGIC_H
|
|
#define SELFTEST_KVM_VGIC_H
|
|
|
|
#include <linux/kvm.h>
|
|
|
|
#include "kvm_util.h"
|
|
|
|
#define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \
|
|
(((uint64_t)(count) << 52) | \
|
|
((uint64_t)((base) >> 16) << 16) | \
|
|
((uint64_t)(flags) << 12) | \
|
|
index)
|
|
|
|
bool kvm_supports_vgic_v3(void);
|
|
int __vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs);
|
|
void __vgic_v3_init(int fd);
|
|
int vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs);
|
|
|
|
#define VGIC_MAX_RESERVED 1023
|
|
|
|
void kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level);
|
|
int _kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level);
|
|
|
|
void kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level);
|
|
int _kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level);
|
|
|
|
/* The vcpu arg only applies to private interrupts. */
|
|
void kvm_irq_write_ispendr(int gic_fd, uint32_t intid, struct kvm_vcpu *vcpu);
|
|
void kvm_irq_write_isactiver(int gic_fd, uint32_t intid, struct kvm_vcpu *vcpu);
|
|
|
|
#define KVM_IRQCHIP_NUM_PINS (1020 - 32)
|
|
|
|
int vgic_its_setup(struct kvm_vm *vm);
|
|
|
|
#endif // SELFTEST_KVM_VGIC_H
|