diff options
author | jhb <jhb@FreeBSD.org> | 2014-01-23 20:35:32 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2014-01-23 20:35:32 +0000 |
commit | 6414202f610ed1724a3b213b7f0ba6ce9f52ea69 (patch) | |
tree | 715799c63ee26e27fc184f5f2d222ea765d13418 /usr.sbin/bhyve/mptbl.c | |
parent | e1016866c7ece00b60ccc7f0807fb1c2ebd0f3b8 (diff) | |
download | FreeBSD-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.c | 13 |
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: |