diff options
author | njl <njl@FreeBSD.org> | 2006-03-29 06:30:47 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2006-03-29 06:30:47 +0000 |
commit | dbd623cfc1d31ef5647dbb7b3ea8267b93b51448 (patch) | |
tree | b130f4e237b7bc1029968cf2d1bd3e15e3bb3c71 /sys/dev/acpica | |
parent | 590f74742c3404d7cf7de1d2dbba7ffe7e80a4e8 (diff) | |
download | FreeBSD-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.c | 11 |
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(); |