|  | 
| #define | PRODUCT_ID_KVM   0x4b	/* ASCII code K */ | 
|  | 
| #define | IMPLEMENTER_ARM   0x43b | 
|  | 
| #define | VGIC_ADDR_UNDEF   (-1) | 
|  | 
| #define | IS_VGIC_ADDR_UNDEF(_x)   ((_x) == VGIC_ADDR_UNDEF) | 
|  | 
| #define | INTERRUPT_ID_BITS_SPIS   10 | 
|  | 
| #define | INTERRUPT_ID_BITS_ITS   16 | 
|  | 
| #define | VGIC_PRI_BITS   5 | 
|  | 
| #define | vgic_irq_is_sgi(intid)   ((intid) < VGIC_NR_SGIS) | 
|  | 
| #define | VGIC_AFFINITY_0_SHIFT   0 | 
|  | 
| #define | VGIC_AFFINITY_0_MASK   (0xffUL << VGIC_AFFINITY_0_SHIFT) | 
|  | 
| #define | VGIC_AFFINITY_1_SHIFT   8 | 
|  | 
| #define | VGIC_AFFINITY_1_MASK   (0xffUL << VGIC_AFFINITY_1_SHIFT) | 
|  | 
| #define | VGIC_AFFINITY_2_SHIFT   16 | 
|  | 
| #define | VGIC_AFFINITY_2_MASK   (0xffUL << VGIC_AFFINITY_2_SHIFT) | 
|  | 
| #define | VGIC_AFFINITY_3_SHIFT   24 | 
|  | 
| #define | VGIC_AFFINITY_3_MASK   (0xffUL << VGIC_AFFINITY_3_SHIFT) | 
|  | 
| #define | VGIC_AFFINITY_LEVEL(reg,  level) | 
|  | 
| #define | VGIC_TO_MPIDR(val) | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP0_MASK   0x000000000000c000 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP0_SHIFT   14 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP1_MASK   0x0000000000003800 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP1_SHIFT   11 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_CRN_MASK   0x0000000000000780 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_CRN_SHIFT   7 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_CRM_MASK   0x0000000000000078 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_CRM_SHIFT   3 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP2_MASK   0x0000000000000007 | 
|  | 
| #define | KVM_REG_ARM_VGIC_SYSREG_OP2_SHIFT   0 | 
|  | 
| #define | KVM_DEV_ARM_VGIC_SYSREG_MASK | 
|  | 
| #define | KVM_ITS_CTE_VALID_SHIFT   63 | 
|  | 
| #define | KVM_ITS_CTE_VALID_MASK   BIT_ULL(63) | 
|  | 
| #define | KVM_ITS_CTE_RDBASE_SHIFT   16 | 
|  | 
| #define | KVM_ITS_CTE_ICID_MASK   GENMASK_ULL(15, 0) | 
|  | 
| #define | KVM_ITS_ITE_NEXT_SHIFT   48 | 
|  | 
| #define | KVM_ITS_ITE_PINTID_SHIFT   16 | 
|  | 
| #define | KVM_ITS_ITE_PINTID_MASK   GENMASK_ULL(47, 16) | 
|  | 
| #define | KVM_ITS_ITE_ICID_MASK   GENMASK_ULL(15, 0) | 
|  | 
| #define | KVM_ITS_DTE_VALID_SHIFT   63 | 
|  | 
| #define | KVM_ITS_DTE_VALID_MASK   BIT_ULL(63) | 
|  | 
| #define | KVM_ITS_DTE_NEXT_SHIFT   49 | 
|  | 
| #define | KVM_ITS_DTE_NEXT_MASK   GENMASK_ULL(62, 49) | 
|  | 
| #define | KVM_ITS_DTE_ITTADDR_SHIFT   5 | 
|  | 
| #define | KVM_ITS_DTE_ITTADDR_MASK   GENMASK_ULL(48, 5) | 
|  | 
| #define | KVM_ITS_DTE_SIZE_MASK   GENMASK_ULL(4, 0) | 
|  | 
| #define | KVM_ITS_L1E_VALID_MASK   BIT_ULL(63) | 
|  | 
| #define | KVM_ITS_L1E_ADDR_MASK   GENMASK_ULL(51, 16) | 
|  | 
| #define | KVM_VGIC_V3_RDIST_INDEX_MASK   GENMASK_ULL(11, 0) | 
|  | 
| #define | KVM_VGIC_V3_RDIST_FLAGS_MASK   GENMASK_ULL(15, 12) | 
|  | 
| #define | KVM_VGIC_V3_RDIST_FLAGS_SHIFT   12 | 
|  | 
| #define | KVM_VGIC_V3_RDIST_BASE_MASK   GENMASK_ULL(51, 16) | 
|  | 
| #define | KVM_VGIC_V3_RDIST_COUNT_MASK   GENMASK_ULL(63, 52) | 
|  | 
| #define | KVM_VGIC_V3_RDIST_COUNT_SHIFT   52 | 
|  | 
| #define | DEBUG_SPINLOCK_BUG_ON(p) | 
|  | 
|  | 
| static u32 | vgic_get_implementation_rev (struct kvm_vcpu *vcpu) | 
|  | 
| static bool | irq_is_pending (struct vgic_irq *irq) | 
|  | 
| static bool | vgic_irq_is_mapped_level (struct vgic_irq *irq) | 
|  | 
| static int | vgic_irq_get_lr_count (struct vgic_irq *irq) | 
|  | 
| static bool | vgic_irq_is_multi_sgi (struct vgic_irq *irq) | 
|  | 
| static int | vgic_write_guest_lock (struct kvm *kvm, gpa_t gpa, const void *data, unsigned long len) | 
|  | 
| int | vgic_v3_parse_attr (struct kvm_device *dev, struct kvm_device_attr *attr, struct vgic_reg_attr *reg_attr) | 
|  | 
| int | vgic_v2_parse_attr (struct kvm_device *dev, struct kvm_device_attr *attr, struct vgic_reg_attr *reg_attr) | 
|  | 
| const struct vgic_register_region * | vgic_get_mmio_region (struct kvm_vcpu *vcpu, struct vgic_io_device *iodev, gpa_t addr, int len) | 
|  | 
| struct vgic_irq * | vgic_get_irq (struct kvm *kvm, struct kvm_vcpu *vcpu, u32 intid) | 
|  | 
| void | __vgic_put_lpi_locked (struct kvm *kvm, struct vgic_irq *irq) | 
|  | 
| void | vgic_put_irq (struct kvm *kvm, struct vgic_irq *irq) | 
|  | 
| bool | vgic_get_phys_line_level (struct vgic_irq *irq) | 
|  | 
| void | vgic_irq_set_phys_pending (struct vgic_irq *irq, bool pending) | 
|  | 
| void | vgic_irq_set_phys_active (struct vgic_irq *irq, bool active) | 
|  | 
| bool | vgic_queue_irq_unlock (struct kvm *kvm, struct vgic_irq *irq, unsigned long flags) | 
|  | 
| void | vgic_kick_vcpus (struct kvm *kvm) | 
|  | 
| void | vgic_irq_handle_resampling (struct vgic_irq *irq, bool lr_deactivated, bool lr_pending) | 
|  | 
| int | vgic_check_iorange (struct kvm *kvm, phys_addr_t ioaddr, phys_addr_t addr, phys_addr_t alignment, phys_addr_t size) | 
|  | 
| void | vgic_v2_fold_lr_state (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v2_populate_lr (struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr) | 
|  | 
| void | vgic_v2_clear_lr (struct kvm_vcpu *vcpu, int lr) | 
|  | 
| void | vgic_v2_set_underflow (struct kvm_vcpu *vcpu) | 
|  | 
| int | vgic_v2_has_attr_regs (struct kvm_device *dev, struct kvm_device_attr *attr) | 
|  | 
| int | vgic_v2_dist_uaccess (struct kvm_vcpu *vcpu, bool is_write, int offset, u32 *val) | 
|  | 
| int | vgic_v2_cpuif_uaccess (struct kvm_vcpu *vcpu, bool is_write, int offset, u32 *val) | 
|  | 
| void | vgic_v2_set_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| void | vgic_v2_get_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| void | vgic_v2_enable (struct kvm_vcpu *vcpu) | 
|  | 
| int | vgic_v2_probe (const struct gic_kvm_info *info) | 
|  | 
| int | vgic_v2_map_resources (struct kvm *kvm) | 
|  | 
| int | vgic_register_dist_iodev (struct kvm *kvm, gpa_t dist_base_address, enum vgic_type) | 
|  | 
| void | vgic_v2_init_lrs (void) | 
|  | 
| void | vgic_v2_load (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v2_put (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v2_vmcr_sync (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v2_save_state (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v2_restore_state (struct kvm_vcpu *vcpu) | 
|  | 
| static void | vgic_get_irq_kref (struct vgic_irq *irq) | 
|  | 
| void | vgic_v3_fold_lr_state (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v3_populate_lr (struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr) | 
|  | 
| void | vgic_v3_clear_lr (struct kvm_vcpu *vcpu, int lr) | 
|  | 
| void | vgic_v3_set_underflow (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v3_set_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| void | vgic_v3_get_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| void | vgic_v3_enable (struct kvm_vcpu *vcpu) | 
|  | 
| int | vgic_v3_probe (const struct gic_kvm_info *info) | 
|  | 
| int | vgic_v3_map_resources (struct kvm *kvm) | 
|  | 
| int | vgic_v3_lpi_sync_pending_status (struct kvm *kvm, struct vgic_irq *irq) | 
|  | 
| int | vgic_v3_save_pending_tables (struct kvm *kvm) | 
|  | 
| int | vgic_v3_set_redist_base (struct kvm *kvm, u32 index, u64 addr, u32 count) | 
|  | 
| int | vgic_register_redist_iodev (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_unregister_redist_iodev (struct kvm_vcpu *vcpu) | 
|  | 
| bool | vgic_v3_check_base (struct kvm *kvm) | 
|  | 
| void | vgic_v3_load (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v3_put (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_v3_vmcr_sync (struct kvm_vcpu *vcpu) | 
|  | 
| bool | vgic_has_its (struct kvm *kvm) | 
|  | 
| int | kvm_vgic_register_its_device (void) | 
|  | 
| void | vgic_enable_lpis (struct kvm_vcpu *vcpu) | 
|  | 
| void | vgic_flush_pending_lpis (struct kvm_vcpu *vcpu) | 
|  | 
| int | vgic_its_inject_msi (struct kvm *kvm, struct kvm_msi *msi) | 
|  | 
| int | vgic_v3_has_attr_regs (struct kvm_device *dev, struct kvm_device_attr *attr) | 
|  | 
| int | vgic_v3_dist_uaccess (struct kvm_vcpu *vcpu, bool is_write, int offset, u32 *val) | 
|  | 
| int | vgic_v3_redist_uaccess (struct kvm_vcpu *vcpu, bool is_write, int offset, u32 *val) | 
|  | 
| int | vgic_v3_cpu_sysregs_uaccess (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr, bool is_write) | 
|  | 
| int | vgic_v3_has_cpu_sysregs_attr (struct kvm_vcpu *vcpu, struct kvm_device_attr *attr) | 
|  | 
| int | vgic_v3_line_level_info_uaccess (struct kvm_vcpu *vcpu, bool is_write, u32 intid, u32 *val) | 
|  | 
| int | kvm_register_vgic_device (unsigned long type) | 
|  | 
| void | vgic_set_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| void | vgic_get_vmcr (struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr) | 
|  | 
| int | vgic_lazy_init (struct kvm *kvm) | 
|  | 
| int | vgic_init (struct kvm *kvm) | 
|  | 
| void | vgic_debug_init (struct kvm *kvm) | 
|  | 
| void | vgic_debug_destroy (struct kvm *kvm) | 
|  | 
| static int | vgic_v3_max_apr_idx (struct kvm_vcpu *vcpu) | 
|  | 
| static bool | vgic_v3_redist_region_full (struct vgic_redist_region *region) | 
|  | 
| struct vgic_redist_region * | vgic_v3_rdist_free_slot (struct list_head *rdregs) | 
|  | 
| static size_t | vgic_v3_rd_region_size (struct kvm *kvm, struct vgic_redist_region *rdreg) | 
|  | 
| struct vgic_redist_region * | vgic_v3_rdist_region_from_index (struct kvm *kvm, u32 index) | 
|  | 
| void | vgic_v3_free_redist_region (struct vgic_redist_region *rdreg) | 
|  | 
| bool | vgic_v3_rdist_overlap (struct kvm *kvm, gpa_t base, size_t size) | 
|  | 
| static bool | vgic_dist_overlap (struct kvm *kvm, gpa_t base, size_t size) | 
|  | 
| bool | vgic_lpis_enabled (struct kvm_vcpu *vcpu) | 
|  | 
| int | vgic_copy_lpi_list (struct kvm *kvm, struct kvm_vcpu *vcpu, u32 **intid_ptr) | 
|  | 
| int | vgic_its_resolve_lpi (struct kvm *kvm, struct vgic_its *its, u32 devid, u32 eventid, struct vgic_irq **irq) | 
|  | 
| struct vgic_its * | vgic_msi_to_its (struct kvm *kvm, struct kvm_msi *msi) | 
|  | 
| int | vgic_its_inject_cached_translation (struct kvm *kvm, struct kvm_msi *msi) | 
|  | 
| void | vgic_lpi_translation_cache_init (struct kvm *kvm) | 
|  | 
| void | vgic_lpi_translation_cache_destroy (struct kvm *kvm) | 
|  | 
| void | vgic_its_invalidate_cache (struct kvm *kvm) | 
|  | 
| int | vgic_its_inv_lpi (struct kvm *kvm, struct vgic_irq *irq) | 
|  | 
| int | vgic_its_invall (struct kvm_vcpu *vcpu) | 
|  | 
| bool | vgic_supports_direct_msis (struct kvm *kvm) | 
|  | 
| int | vgic_v4_init (struct kvm *kvm) | 
|  | 
| void | vgic_v4_teardown (struct kvm *kvm) | 
|  | 
| void | vgic_v4_configure_vsgis (struct kvm *kvm) | 
|  | 
| void | vgic_v4_get_vlpi_state (struct vgic_irq *irq, bool *val) | 
|  | 
| int | vgic_v4_request_vpe_irq (struct kvm_vcpu *vcpu, int irq) | 
|  |