162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ARM Generic Interrupt Controller (GIC) host specific defines
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef SELFTEST_KVM_VGIC_H
762306a36Sopenharmony_ci#define SELFTEST_KVM_VGIC_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/kvm.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "kvm_util.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define REDIST_REGION_ATTR_ADDR(count, base, flags, index) \
1462306a36Sopenharmony_ci	(((uint64_t)(count) << 52) | \
1562306a36Sopenharmony_ci	((uint64_t)((base) >> 16) << 16) | \
1662306a36Sopenharmony_ci	((uint64_t)(flags) << 12) | \
1762306a36Sopenharmony_ci	index)
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciint vgic_v3_setup(struct kvm_vm *vm, unsigned int nr_vcpus, uint32_t nr_irqs,
2062306a36Sopenharmony_ci		uint64_t gicd_base_gpa, uint64_t gicr_base_gpa);
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define VGIC_MAX_RESERVED	1023
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_civoid kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level);
2562306a36Sopenharmony_ciint _kvm_irq_set_level_info(int gic_fd, uint32_t intid, int level);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_civoid kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level);
2862306a36Sopenharmony_ciint _kvm_arm_irq_line(struct kvm_vm *vm, uint32_t intid, int level);
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci/* The vcpu arg only applies to private interrupts. */
3162306a36Sopenharmony_civoid kvm_irq_write_ispendr(int gic_fd, uint32_t intid, struct kvm_vcpu *vcpu);
3262306a36Sopenharmony_civoid kvm_irq_write_isactiver(int gic_fd, uint32_t intid, struct kvm_vcpu *vcpu);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#define KVM_IRQCHIP_NUM_PINS	(1020 - 32)
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#endif // SELFTEST_KVM_VGIC_H
37