summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica
diff options
context:
space:
mode:
authornjl <njl@FreeBSD.org>2006-03-29 06:30:47 +0000
committernjl <njl@FreeBSD.org>2006-03-29 06:30:47 +0000
commitdbd623cfc1d31ef5647dbb7b3ea8267b93b51448 (patch)
treeb130f4e237b7bc1029968cf2d1bd3e15e3bb3c71 /sys/dev/acpica
parent590f74742c3404d7cf7de1d2dbba7ffe7e80a4e8 (diff)
downloadFreeBSD-src-dbd623cfc1d31ef5647dbb7b3ea8267b93b51448.zip
FreeBSD-src-dbd623cfc1d31ef5647dbb7b3ea8267b93b51448.tar.gz
Add reset register support. This is the only method to reboot some new
systems (blade servers). On most systems, this is implemented as an IO write to the SMI port and the BIOS generates the actual reset. PR: kern/94939 Submitted by: dodell@ixsystems.com Reviewed by: jhb MFC after: 3 weeks
Diffstat (limited to 'sys/dev/acpica')
-rw-r--r--sys/dev/acpica/acpi.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index bb34549..ee7e015 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -58,6 +58,7 @@ __FBSDID("$FreeBSD$");
#include <contrib/dev/acpica/acpi.h>
#include <dev/acpica/acpivar.h>
#include <dev/acpica/acpiio.h>
+#include <contrib/dev/acpica/achware.h>
#include <contrib/dev/acpica/acnamesp.h>
#include "pci_if.h"
@@ -1636,6 +1637,16 @@ acpi_shutdown_final(void *arg, int howto)
DELAY(1000000);
printf("ACPI power-off failed - timeout\n");
}
+ } else if ((howto & RB_AUTOBOOT) != 0 && AcpiGbl_FADT->ResetRegSup) {
+ status = AcpiHwLowLevelWrite(
+ AcpiGbl_FADT->ResetRegister.RegisterBitWidth,
+ AcpiGbl_FADT->ResetValue, &AcpiGbl_FADT->ResetRegister);
+ if (ACPI_FAILURE(status)) {
+ printf("ACPI reset failed - %s\n", AcpiFormatException(status));
+ } else {
+ DELAY(1000000);
+ printf("ACPI reset failed - timeout\n");
+ }
} else if (panicstr == NULL) {
printf("Shutting down ACPI\n");
AcpiTerminate();
OpenPOWER on IntegriCloud