1use core::ptr;
2
3use super::abi::*;
4use crate::{
5 result_from_value,
6 Error,
7};
8
9const LINUX_REBOOT_MAGIC1: u32 = 0xfee1dead;
10const LINUX_REBOOT_MAGIC2: u32 = 672274793;
11
12pub const RB_POWER_OFF: u32 = 0x4321FEDC;
13
14#[inline]
15#[allow(clippy::missing_safety_doc)]
16pub unsafe fn reboot(cmd: u32, arg: *mut u8) -> crate::Result<i32> {
17 let ret = syscall_4(
18 169,
19 LINUX_REBOOT_MAGIC1 as usize,
20 LINUX_REBOOT_MAGIC2 as usize,
21 cmd as usize,
22 arg as usize,
23 ) as i32;
24 result_from_value(ret)
25}
26
27#[inline]
32pub fn reboot_power_off() -> Error {
33 match unsafe { reboot(RB_POWER_OFF, ptr::null_mut()) } {
34 Ok(ret) => unreachable!("reboot() returned {ret}"),
35 Err(err) => err,
36 }
37}