]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
inmates: Switch IOAPIC demo from power button to timer interrupt source
authorJan Kiszka <jan.kiszka@siemens.com>
Tue, 3 Feb 2015 16:50:29 +0000 (17:50 +0100)
committerJan Kiszka <jan.kiszka@siemens.com>
Tue, 3 Feb 2015 16:50:29 +0000 (17:50 +0100)
This simplifies testing as no more manual triggering is required.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
inmates/demos/x86/ioapic-demo.c

index 2c57601c70750ddad52280e98ac4741eaf10584c..9357a1b4ed44cf3e07d5ae090553fa77a92357a7 100644 (file)
 #define UART_BASE              0x2f8
 #endif
 
+#define PM1_STATUS             0
+#define PM1_ENABLE             2
+# define PM1_TMR_EN            (1 << 0)
+
 #define ACPI_GSI               9
 
 #define IRQ_VECTOR             32
 
+static unsigned int pm_base;
+
 static void irq_handler(void)
 {
-       unsigned int pm_base = comm_region->pm_timer_address - 8;
-       u16 status = inw(pm_base);
+       u16 status = inw(pm_base + PM1_STATUS);
 
        printk("ACPI IRQ received, status: %04x\n", status);
        outw(status, pm_base);
@@ -51,8 +56,10 @@ void inmate_main(void)
        ioapic_init();
        ioapic_pin_set_vector(ACPI_GSI, TRIGGER_LEVEL_ACTIVE_HIGH, IRQ_VECTOR);
 
-       printk("Press power button to trigger an IRQ\n"
-              "Note: ACPI IRQs are broken for Linux now.\n");
+       pm_base = comm_region->pm_timer_address - 8;
+       outw(inw(pm_base + PM1_ENABLE) | PM1_TMR_EN, pm_base + PM1_ENABLE);
+
+       printk("Note: ACPI IRQs are broken for Linux now.\n");
        asm volatile("sti");
 
        while (1)