Add GICv4 specific structures to be used in later patches.
Signed-off-by: Mykyta Poturai <[email protected]>
---
xen/arch/arm/include/asm/vgic.h | 43 +++++++++++++++++++++++++++++++++
1 file changed, 43 insertions(+)
diff --git a/xen/arch/arm/include/asm/vgic.h b/xen/arch/arm/include/asm/vgic.h
index 6f9ab1c98c..a874a02d70 100644
--- a/xen/arch/arm/include/asm/vgic.h
+++ b/xen/arch/arm/include/asm/vgic.h
@@ -127,6 +127,42 @@ struct vgic_irq_rank {
uint8_t vcpu[32];
};
+#ifdef CONFIG_GICV4
+struct its_vm {
+ struct its_vpe **vpes;
+ /* Number of VPE. */
+ unsigned int nr_vpes;
+ uint32_t *db_lpi_bases;
+ unsigned int nr_db_lpis;
+ /* Property table per VM. */
+ void *vproptable;
+};
+
+struct its_vpe {
+ rwlock_t lock;
+ uint32_t vpe_id;
+ /* Pending table per VCPU. */
+ void *vpendtable;
+ uint32_t vpe_db_lpi;
+ struct its_vm *its_vm;
+ unsigned int col_idx;
+ bool resident;
+ /* Pending VLPIs on schedule out? */
+ bool pending_last;
+ struct {
+ /* Implementation Defined Area Invalid */
+ bool idai;
+ /* VPE proxy mapping */
+ int vpe_proxy_event;
+ };
+ /*
+ * Ensure mutual exclusion between affinity setting of the vPE
+ * and vLPI operations using vpe->col_idx.
+ */
+ spinlock_t vpe_lock;
+};
+#endif
+
struct vgic_dist {
/* Version of the vGIC */
enum gic_version version;
@@ -193,6 +229,10 @@ struct vgic_dist {
*/
bool rdists_enabled; /* Is any redistributor enabled? */
bool has_its;
+#ifdef CONFIG_GICV4
+ struct its_vm *its_vm;
+#endif
+ bool nassgireq;
#endif
};
@@ -227,6 +267,9 @@ struct vgic_cpu {
#define VGIC_V3_RDIST_LAST (1 << 0) /* last vCPU of the rdist */
#define VGIC_V3_LPIS_ENABLED (1 << 1)
uint8_t flags;
+#ifdef CONFIG_GICV4
+ struct its_vpe *its_vpe;
+#endif
};
struct sgi_target {
--
2.51.2