blob: 9cebc67e8403b5d30bbac81f713aea125ea49e42 [file] [log] [blame]
bigbiff bigbiffe60683a2013-02-22 20:55:50 -05001#ifndef _LINUX_REBOOT_H
2#define _LINUX_REBOOT_H
3
4/*
5 * Magic values required to use _reboot() system call.
6 */
7
8#define LINUX_REBOOT_MAGIC1 0xfee1dead
9#define LINUX_REBOOT_MAGIC2 672274793
10#define LINUX_REBOOT_MAGIC2A 85072278
11#define LINUX_REBOOT_MAGIC2B 369367448
12
13
14/*
15 * Commands accepted by the _reboot() system call.
16 *
17 * RESTART Restart system using default command and mode.
18 * HALT Stop OS and give system control to ROM monitor, if any.
19 * CAD_ON Ctrl-Alt-Del sequence causes RESTART command.
20 * CAD_OFF Ctrl-Alt-Del sequence sends SIGINT to init task.
21 * POWER_OFF Stop OS and remove all power from system, if possible.
22 * RESTART2 Restart system using given command string.
23 */
24
25#define LINUX_REBOOT_CMD_RESTART 0x01234567
26#define LINUX_REBOOT_CMD_HALT 0xCDEF0123
27#define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
28#define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
29#define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
30#define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
31
32/* Including <unistd.h> makes sure that on a glibc system
33 <features.h> is included, which again defines __GLIBC__ */
34#include <unistd.h>
35#include "linux_reboot.h"
36
37#define USE_LIBC
38
39#ifdef USE_LIBC
40
41/* libc version */
42#if defined __GLIBC__ && __GLIBC__ >= 2
43# include <sys/reboot.h>
44# define REBOOT(cmd) reboot(cmd)
45#else
46extern int reboot(int, int, int);
47# define REBOOT(cmd) reboot(LINUX_REBOOT_MAGIC1,LINUX_REBOOT_MAGIC2,(cmd))
48#endif
49static inline int my_reboot(int cmd) {
50 return REBOOT(cmd);
51}
52
53#else /* no USE_LIBC */
54
55/* direct syscall version */
56#include <linux/unistd.h>
57
58#ifdef _syscall3
59_syscall3(int, reboot, int, magic, int, magic_too, int, cmd);
60#else
61/* Let us hope we have a 3-argument reboot here */
62extern int reboot(int, int, int);
63#endif
64
65static inline int my_reboot(int cmd) {
66 return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd);
67}
68
69#endif
70
71
72#endif /* _LINUX_REBOOT_H */