@@ -103,7 +103,7 @@ void gic_restore_state(struct vcpu *v)
gic_restore_pending_irqs(v);
}
-static unsigned int gic_irq_startup(struct irq_desc *desc)
+static void gic_irq_unmask(struct irq_desc *desc)
{
uint32_t enabler;
int irq = desc->irq;
@@ -111,11 +111,9 @@ static unsigned int gic_irq_startup(struct irq_desc *desc)
/* Enable routing */
enabler = GICD[GICD_ISENABLER + irq / 32];
GICD[GICD_ISENABLER + irq / 32] = enabler | (1u << (irq % 32));
-
- return 0;
}
-static void gic_irq_shutdown(struct irq_desc *desc)
+static void gic_irq_mask(struct irq_desc *desc)
{
uint32_t enabler;
int irq = desc->irq;
@@ -125,14 +123,11 @@ static void gic_irq_shutdown(struct irq_desc *desc)
GICD[GICD_ICENABLER + irq / 32] = enabler | (1u << (irq % 32));
}
-static void gic_irq_enable(struct irq_desc *desc)
-{
-
-}
-
-static void gic_irq_disable(struct irq_desc *desc)
+static unsigned int gic_irq_startup(struct irq_desc *desc)
{
+ gic_irq_unmask(desc);
+ return 0;
}
static void gic_irq_ack(struct irq_desc *desc)
@@ -166,9 +161,9 @@ static void gic_irq_set_affinity(struct irq_desc *desc, const cpumask_t *mask)
static hw_irq_controller gic_host_irq_type = {
.typename = "gic",
.startup = gic_irq_startup,
- .shutdown = gic_irq_shutdown,
- .enable = gic_irq_enable,
- .disable = gic_irq_disable,
+ .shutdown = gic_irq_mask,
+ .enable = gic_irq_unmask,
+ .disable = gic_irq_mask,
.ack = gic_irq_ack,
.end = gic_host_irq_end,
.set_affinity = gic_irq_set_affinity,
@@ -176,9 +171,9 @@ static hw_irq_controller gic_host_irq_type = {
static hw_irq_controller gic_guest_irq_type = {
.typename = "gic",
.startup = gic_irq_startup,
- .shutdown = gic_irq_shutdown,
- .enable = gic_irq_enable,
- .disable = gic_irq_disable,
+ .shutdown = gic_irq_mask,
+ .enable = gic_irq_unmask,
+ .disable = gic_irq_mask,
.ack = gic_irq_ack,
.end = gic_guest_irq_end,
.set_affinity = gic_irq_set_affinity,
Also implement enable/disable as mask/unmask irq. Signed-off-by: Julien Grall <julien.grall@citrix.com> --- xen/arch/arm/gic.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-)