Author: neel
Date: Mon Nov 11 00:45:17 2013
New Revision: 257933
URL: http://svnweb.freebsd.org/changeset/base/257933

Log:
  x86 platforms that use an IOAPIC route the legacy timer interrupt (IRQ0) to
  pin 2 of the IOAPIC.
  
  Add an 'Interrupt Source Override' entry to the MADT to describe this
  and start asserting interrupts on pin 2 in the 8254 device model.
  
  Submitted by: Tycho Nightingale ([email protected])

Modified:
  head/usr.sbin/bhyve/acpi.c
  head/usr.sbin/bhyve/pit_8254.c

Modified: head/usr.sbin/bhyve/acpi.c
==============================================================================
--- head/usr.sbin/bhyve/acpi.c  Sun Nov 10 23:48:16 2013        (r257932)
+++ head/usr.sbin/bhyve/acpi.c  Mon Nov 11 00:45:17 2013        (r257933)
@@ -259,7 +259,17 @@ basl_fwrite_madt(FILE *fp)
        EFPRINTF(fp, "[0004]\t\tInterrupt : 00000000\n");
        EFPRINTF(fp, "\n");
 
-       /* Override the 8259 chained vector. XXX maybe not needed */
+       /* Legacy IRQ0 is connected to pin 2 of the IOAPIC */
+       EFPRINTF(fp, "[0001]\t\tSubtable Type : 02\n");
+       EFPRINTF(fp, "[0001]\t\tLength : 0A\n");
+       EFPRINTF(fp, "[0001]\t\tBus : 00\n");
+       EFPRINTF(fp, "[0001]\t\tSource : 00\n");
+       EFPRINTF(fp, "[0004]\t\tInterrupt : 00000002\n");
+       EFPRINTF(fp, "[0002]\t\tFlags (decoded below) : 0005\n");
+       EFPRINTF(fp, "\t\t\tPolarity : 1\n");
+       EFPRINTF(fp, "\t\t\tTrigger Mode : 1\n");
+       EFPRINTF(fp, "\n");
+
        EFPRINTF(fp, "[0001]\t\tSubtable Type : 02\n");
        EFPRINTF(fp, "[0001]\t\tLength : 0A\n");
        EFPRINTF(fp, "[0001]\t\tBus : 00\n");

Modified: head/usr.sbin/bhyve/pit_8254.c
==============================================================================
--- head/usr.sbin/bhyve/pit_8254.c      Sun Nov 10 23:48:16 2013        
(r257932)
+++ head/usr.sbin/bhyve/pit_8254.c      Mon Nov 11 00:45:17 2013        
(r257933)
@@ -106,8 +106,8 @@ pit_mevent_cb(int fd, enum ev_type type,
 
        pit_mev_count++;
 
-       ioapic_assert_pin(c->ctx, 0);
-       ioapic_deassert_pin(c->ctx, 0);
+       ioapic_assert_pin(c->ctx, 2);
+       ioapic_deassert_pin(c->ctx, 2);
 
        /*
         * Delete the timer for one-shots
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to