summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2020-06-07 17:19:04 +0000
committerkettenis <kettenis@openbsd.org>2020-06-07 17:19:04 +0000
commit957dfd9fbe6a6bfaf41b6905a092dca5db9cf087 (patch)
treecc6ad7279a0064a6acb75ab534e048afe3cfb671
parentAdd more return codes. (diff)
downloadwireguard-openbsd-957dfd9fbe6a6bfaf41b6905a092dca5db9cf087.tar.xz
wireguard-openbsd-957dfd9fbe6a6bfaf41b6905a092dca5db9cf087.zip
Add powerdown code.
-rw-r--r--sys/arch/powerpc64/powerpc64/machdep.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/sys/arch/powerpc64/powerpc64/machdep.c b/sys/arch/powerpc64/powerpc64/machdep.c
index 739c12d4ee2..6a2b046666c 100644
--- a/sys/arch/powerpc64/powerpc64/machdep.c
+++ b/sys/arch/powerpc64/powerpc64/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.15 2020/06/07 11:54:45 kettenis Exp $ */
+/* $OpenBSD: machdep.c,v 1.16 2020/06/07 17:19:04 kettenis Exp $ */
/*
* Copyright (c) 2020 Mark Kettenis <kettenis@openbsd.org>
@@ -22,6 +22,7 @@
#include <sys/exec.h>
#include <sys/exec_elf.h>
#include <sys/msgbuf.h>
+#include <sys/reboot.h>
#include <machine/cpufunc.h>
#include <machine/opal.h>
@@ -502,9 +503,34 @@ consinit(void)
{
}
+void
+opal_powerdown(void)
+{
+ int64_t error;
+
+ do {
+ error = opal_cec_power_down(0);
+ if (error == OPAL_BUSY_EVENT)
+ opal_poll_events(NULL);
+ } while (error == OPAL_BUSY || error == OPAL_BUSY_EVENT);
+
+ if (error != OPAL_SUCCESS)
+ return;
+
+ /* Wait for the actual powerdown to happen. */
+ for (;;)
+ opal_poll_events(NULL);
+}
+
__dead void
boot(int howto)
{
+ if ((howto & RB_HALT) != 0) {
+ if ((howto & RB_POWERDOWN) != 0)
+ opal_powerdown();
+ }
+
+ printf("rebooting...\n");
opal_cec_reboot();
for (;;)