2 * Copyright (C) 2016,2017 ARM Limited, All Rights Reserved.
3 * Author: Marc Zyngier <marc.zyngier@arm.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 #ifndef __LINUX_IRQCHIP_ARM_GIC_V4_H
19 #define __LINUX_IRQCHIP_ARM_GIC_V4_H
24 * Maximum number of ITTs when GITS_TYPER.VMOVP == 0, using the
25 * ITSList mechanism to perform inter-ITS synchronization.
27 #define GICv4_ITS_LIST_MAX 16
29 /* Embedded in kvm.arch */
31 struct fwnode_handle
*fwnode
;
32 struct irq_domain
*domain
;
33 struct page
*vprop_page
;
34 struct its_vpe
**vpes
;
36 irq_hw_number_t db_lpi_base
;
37 unsigned long *db_bitmap
;
39 u32 vlpi_count
[GICv4_ITS_LIST_MAX
];
42 /* Embedded in kvm_vcpu.arch */
44 struct page
*vpt_page
;
45 struct its_vm
*its_vm
;
46 /* Doorbell interrupt */
48 irq_hw_number_t vpe_db_lpi
;
49 /* VPE proxy mapping */
52 * This collection ID is used to indirect the target
53 * redistributor for this VPE. The ID itself isn't involved in
54 * programming of the ITS.
57 /* Unique (system-wide) VPE identifier */
59 /* Implementation Defined Area Invalid */
61 /* Pending VLPIs on schedule out? */
66 * struct its_vlpi_map: structure describing the mapping of a
67 * VLPI. Only to be interpreted in the context of a physical interrupt
68 * it complements. To be used as the vcpu_info passed to
69 * irq_set_vcpu_affinity().
71 * @vm: Pointer to the GICv4 notion of a VM
72 * @vpe: Pointer to the GICv4 notion of a virtual CPU (VPE)
73 * @vintid: Virtual LPI number
74 * @properties: Priority and enable bits (as written in the prop table)
75 * @db_enabled: Is the VPE doorbell to be generated?
85 enum its_vcpu_info_cmd_type
{
89 PROP_UPDATE_AND_INV_VLPI
,
96 enum its_vcpu_info_cmd_type cmd_type
;
98 struct its_vlpi_map
*map
;
103 int its_alloc_vcpu_irqs(struct its_vm
*vm
);
104 void its_free_vcpu_irqs(struct its_vm
*vm
);
105 int its_schedule_vpe(struct its_vpe
*vpe
, bool on
);
106 int its_invall_vpe(struct its_vpe
*vpe
);
107 int its_map_vlpi(int irq
, struct its_vlpi_map
*map
);
108 int its_get_vlpi(int irq
, struct its_vlpi_map
*map
);
109 int its_unmap_vlpi(int irq
);
110 int its_prop_update_vlpi(int irq
, u8 config
, bool inv
);
112 struct irq_domain_ops
;
113 int its_init_v4(struct irq_domain
*domain
, const struct irq_domain_ops
*ops
);