/* Generated by ./xlat/gen.sh from ./xlat/bootflags3.in; do not edit. */

#include "gcc_compat.h"
#include "static_assert.h"

#if defined(LINUX_REBOOT_CMD_RESTART) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_RESTART) == (0x01234567), "LINUX_REBOOT_CMD_RESTART != 0x01234567");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_RESTART 0x01234567
#endif
#if defined(LINUX_REBOOT_CMD_HALT) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_HALT) && HAVE_DECL_LINUX_REBOOT_CMD_HALT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_HALT) == (0xCDEF0123), "LINUX_REBOOT_CMD_HALT != 0xCDEF0123");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_HALT 0xCDEF0123
#endif
#if defined(LINUX_REBOOT_CMD_CAD_ON) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_ON)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_CAD_ON) == (0x89ABCDEF), "LINUX_REBOOT_CMD_CAD_ON != 0x89ABCDEF");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
#endif
#if defined(LINUX_REBOOT_CMD_CAD_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_CAD_OFF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_CAD_OFF) == (0x00000000), "LINUX_REBOOT_CMD_CAD_OFF != 0x00000000");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_CAD_OFF 0x00000000
#endif
#if defined(LINUX_REBOOT_CMD_POWER_OFF) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF) && HAVE_DECL_LINUX_REBOOT_CMD_POWER_OFF)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_POWER_OFF) == (0x4321FEDC), "LINUX_REBOOT_CMD_POWER_OFF != 0x4321FEDC");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
#endif
#if defined(LINUX_REBOOT_CMD_RESTART2) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_RESTART2) && HAVE_DECL_LINUX_REBOOT_CMD_RESTART2)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_RESTART2) == (0xA1B2C3D4), "LINUX_REBOOT_CMD_RESTART2 != 0xA1B2C3D4");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_RESTART2 0xA1B2C3D4
#endif
#if defined(LINUX_REBOOT_CMD_SW_SUSPEND) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND) && HAVE_DECL_LINUX_REBOOT_CMD_SW_SUSPEND)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_SW_SUSPEND) == (0xD000FCE2), "LINUX_REBOOT_CMD_SW_SUSPEND != 0xD000FCE2");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
#endif
#if defined(LINUX_REBOOT_CMD_KEXEC) || (defined(HAVE_DECL_LINUX_REBOOT_CMD_KEXEC) && HAVE_DECL_LINUX_REBOOT_CMD_KEXEC)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((LINUX_REBOOT_CMD_KEXEC) == (0x45584543), "LINUX_REBOOT_CMD_KEXEC != 0x45584543");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define LINUX_REBOOT_CMD_KEXEC 0x45584543
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat bootflags3 in mpers mode

# else

static
const struct xlat bootflags3[] = {
 XLAT(LINUX_REBOOT_CMD_RESTART),
 XLAT(LINUX_REBOOT_CMD_HALT),
 XLAT(LINUX_REBOOT_CMD_CAD_ON),
 XLAT(LINUX_REBOOT_CMD_CAD_OFF),
 XLAT(LINUX_REBOOT_CMD_POWER_OFF),
 XLAT(LINUX_REBOOT_CMD_RESTART2),
 XLAT(LINUX_REBOOT_CMD_SW_SUSPEND),
 XLAT(LINUX_REBOOT_CMD_KEXEC),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
