aboutsummaryrefslogtreecommitdiff
path: root/hw/intc/gic_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'hw/intc/gic_internal.h')
-rw-r--r--hw/intc/gic_internal.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/hw/intc/gic_internal.h b/hw/intc/gic_internal.h
index 48a58d789..6f67a0906 100644
--- a/hw/intc/gic_internal.h
+++ b/hw/intc/gic_internal.h
@@ -50,6 +50,21 @@
s->priority1[irq][cpu] : \
s->priority2[(irq) - GIC_INTERNAL])
#define GIC_TARGET(irq) s->irq_target[irq]
+#define GIC_SET_GROUP0(irq, cm) (s->irq_state[irq].group |= (cm))
+#define GIC_SET_GROUP1(irq, cm) (s->irq_state[irq].group &= ~(cm))
+#define GIC_TEST_GROUP0(irq, cm) ((s->irq_state[irq].group & (cm)) == 0)
+
+#define GICC_CTLR_S_EN_GRP0 (1U << 0)
+#define GICC_CTLR_S_EN_GRP1 (1U << 1)
+#define GICC_CTLR_S_ACK_CTL (1U << 2)
+#define GICC_CTLR_S_FIQ_EN (1U << 3)
+#define GICC_CTLR_S_CBPR (1U << 4) /* GICv1: SBPR */
+
+#define GICC_CTLR_S_MASK 0x7ff
+
+#define GICC_CTLR_NS_EN_GRP1 (1U << 0)
+#define GICC_CTLR_NS_MASK (1 | 3 << 5 | 1 << 9)
+
/* The special cases for the revision property: */
#define REV_11MPCORE 0
@@ -58,9 +73,19 @@
void gic_set_pending_private(GICState *s, int cpu, int irq);
uint32_t gic_acknowledge_irq(GICState *s, int cpu);
void gic_complete_irq(GICState *s, int cpu, int irq);
+inline void gic_update_with_grouping(GICState *s);
+inline void gic_update_no_grouping(GICState *s);
void gic_update(GICState *s);
void gic_init_irqs_and_distributor(GICState *s, int num_irq);
void gic_set_priority(GICState *s, int cpu, int irq, uint8_t val);
+uint32_t gic_get_priority(GICState *s, int cpu, int irq);
+void gic_set_priority_mask(GICState *s, int cpu, uint8_t val);
+uint32_t gic_get_priority_mask(GICState *s, int cpu);
+uint32_t gic_get_cpu_control(GICState *s, int cpu);
+void gic_set_cpu_control(GICState *s, int cpu, uint32_t value);
+uint8_t gic_get_running_priority(GICState *s, int cpu);
+uint16_t gic_get_current_pending_irq(GICState *s, int cpu);
+
static inline bool gic_test_pending(GICState *s, int irq, int cm)
{