summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bhyve/mptbl.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2014-01-23 20:35:32 +0000
committerjhb <jhb@FreeBSD.org>2014-01-23 20:35:32 +0000
commit6414202f610ed1724a3b213b7f0ba6ce9f52ea69 (patch)
tree715799c63ee26e27fc184f5f2d222ea765d13418 /usr.sbin/bhyve/mptbl.c
parente1016866c7ece00b60ccc7f0807fb1c2ebd0f3b8 (diff)
downloadFreeBSD-src-6414202f610ed1724a3b213b7f0ba6ce9f52ea69.zip
FreeBSD-src-6414202f610ed1724a3b213b7f0ba6ce9f52ea69.tar.gz
MFC 259826,259997,259998:
Support soft power-off via the ACPI S5 state for bhyve guests and wire up a virtual power button to SIGTERM: - Implement the PM1_EVT and PM1_CTL registers required by ACPI. - Emulate the Reset Control register at I/O port 0xcf9. - Advertise an _S5 package. - Implement an SMI_CMD register with commands to enable and disable ACPI. Currently the only change when ACPI is enabled is to enable the virtual power button via SIGTERM. - Implement a fixed-feature power button when ACPI is enabled by asserting PWRBTN_STS in PM1_EVT when SIGTERM is received. - Add support for EVFILT_SIGNAL events to mevent. - Implement support for the ACPI system command interrupt (SCI) and assert it when needed based on the values in PM1_EVT. Mark the SCI as active-low and level triggered in the MADT and MP Table.
Diffstat (limited to 'usr.sbin/bhyve/mptbl.c')
-rw-r--r--usr.sbin/bhyve/mptbl.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/usr.sbin/bhyve/mptbl.c b/usr.sbin/bhyve/mptbl.c
index 3d45cc6..2b4ca84 100644
--- a/usr.sbin/bhyve/mptbl.c
+++ b/usr.sbin/bhyve/mptbl.c
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <string.h>
+#include "acpi.h"
#include "bhyverun.h"
#include "mptbl.h"
@@ -200,13 +201,21 @@ mpt_build_ioint_entries(int_entry_ptr mpie, int num_pins, int id)
mpie->int_type = INTENTRY_TYPE_INT;
mpie->src_bus_irq = 0;
break;
+ case SCI_INT:
+ /* ACPI SCI is level triggered and active-lo. */
+ mpie->int_flags = INTENTRY_FLAGS_POLARITY_ACTIVELO |
+ INTENTRY_FLAGS_TRIGGER_LEVEL;
+ mpie->int_type = INTENTRY_TYPE_INT;
+ mpie->src_bus_irq = SCI_INT;
+ break;
case 5:
case 10:
case 11:
/*
- * PCI Irqs set to level triggered.
+ * PCI Irqs set to level triggered and active-lo.
*/
- mpie->int_flags = INTENTRY_FLAGS_TRIGGER_LEVEL;
+ mpie->int_flags = INTENTRY_FLAGS_POLARITY_ACTIVELO |
+ INTENTRY_FLAGS_TRIGGER_LEVEL;
mpie->src_bus_id = 0;
/* fall through.. */
default:
OpenPOWER on IntegriCloud