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
This commit is contained in:
Nate Lawson 2006-03-29 06:30:47 +00:00
parent 1e5e6f25c5
commit 87a500cd3b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=157244

View File

@ -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();