summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Brown2016-07-11 22:23:03 +0200
committerMichael Brown2016-07-11 22:23:03 +0200
commitdf85901768622b8aea94d39a28effdbf90f7d4f0 (patch)
treea6ae8c165518987aeba8447e09f6fc7f6f811e90
parent[acpi] Add support for ACPI power off (diff)
downloadipxe-df85901768622b8aea94d39a28effdbf90f7d4f0.tar.gz
ipxe-df85901768622b8aea94d39a28effdbf90f7d4f0.tar.xz
ipxe-df85901768622b8aea94d39a28effdbf90f7d4f0.zip
[acpi] Allow time for ACPI power off to take effect
The ACPI power off sequence may not take effect immediately. Delay for one second, to eliminate potentially confusing log messages such as "Could not power off: Error 0x43902001 (http://ipx". Reported-by: Leonid Vasetsky <leonidv@velostrata.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/arch/x86/interface/pcbios/acpipwr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/arch/x86/interface/pcbios/acpipwr.c b/src/arch/x86/interface/pcbios/acpipwr.c
index 63b986b6..d19f972d 100644
--- a/src/arch/x86/interface/pcbios/acpipwr.c
+++ b/src/arch/x86/interface/pcbios/acpipwr.c
@@ -23,6 +23,7 @@
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+#include <unistd.h>
#include <errno.h>
#include <byteswap.h>
#include <realmode.h>
@@ -111,6 +112,11 @@ int acpi_poweroff ( void ) {
ACPI_PM1_CNT_SLP_EN ), pm1b_cnt );
}
+ /* On some systems, execution will continue briefly. Delay to
+ * avoid potentially confusing log messages.
+ */
+ mdelay ( 1000 );
+
DBGC ( colour, "ACPI power off failed\n" );
return -EPROTO;
}