diff options
author | 2020-06-07 17:19:04 +0000 | |
---|---|---|
committer | 2020-06-07 17:19:04 +0000 | |
commit | 957dfd9fbe6a6bfaf41b6905a092dca5db9cf087 (patch) | |
tree | cc6ad7279a0064a6acb75ab534e048afe3cfb671 | |
parent | Add more return codes. (diff) | |
download | wireguard-openbsd-957dfd9fbe6a6bfaf41b6905a092dca5db9cf087.tar.xz wireguard-openbsd-957dfd9fbe6a6bfaf41b6905a092dca5db9cf087.zip |
Add powerdown code.
-rw-r--r-- | sys/arch/powerpc64/powerpc64/machdep.c | 28 |
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 (;;) |