From 0035e5094c9e01c8227db2ddc0c607e3f6bc33b7 Mon Sep 17 00:00:00 2001 From: Jan Kiszka Date: Mon, 22 Aug 2011 17:46:42 +0200 Subject: ioapic: Implement polarity If the polarity bit is set in the redirection table, the input level simply has to inverted as it is low active in this case. Signed-off-by: Jan Kiszka Signed-off-by: Anthony Liguori --- hw/ioapic.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'hw') diff --git a/hw/ioapic.c b/hw/ioapic.c index 5916387..61991d7 100644 --- a/hw/ioapic.c +++ b/hw/ioapic.c @@ -148,6 +148,9 @@ static void ioapic_set_irq(void *opaque, int vector, int level) uint32_t mask = 1 << vector; uint64_t entry = s->ioredtbl[vector]; + if (entry & (1 << IOAPIC_LVT_POLARITY_SHIFT)) { + level = !level; + } if (((entry >> IOAPIC_LVT_TRIGGER_MODE_SHIFT) & 1) == IOAPIC_TRIGGER_LEVEL) { /* level triggered */ -- cgit v1.1