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

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

#if defined(DM_READONLY_FLAG) || (defined(HAVE_DECL_DM_READONLY_FLAG) && HAVE_DECL_DM_READONLY_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_READONLY_FLAG) == ((1 << 0)), "DM_READONLY_FLAG != (1 << 0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_READONLY_FLAG (1 << 0)
#endif
#if defined(DM_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_SUSPEND_FLAG) && HAVE_DECL_DM_SUSPEND_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_SUSPEND_FLAG) == ((1 << 1)), "DM_SUSPEND_FLAG != (1 << 1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_SUSPEND_FLAG (1 << 1)
#endif
#if defined(DM_EXISTS_FLAG) || (defined(HAVE_DECL_DM_EXISTS_FLAG) && HAVE_DECL_DM_EXISTS_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_EXISTS_FLAG) == ((1 << 2)), "DM_EXISTS_FLAG != (1 << 2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_EXISTS_FLAG (1 << 2)
#endif
#if defined(DM_PERSISTENT_DEV_FLAG) || (defined(HAVE_DECL_DM_PERSISTENT_DEV_FLAG) && HAVE_DECL_DM_PERSISTENT_DEV_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_PERSISTENT_DEV_FLAG) == ((1 << 3)), "DM_PERSISTENT_DEV_FLAG != (1 << 3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_PERSISTENT_DEV_FLAG (1 << 3)
#endif
#if defined(DM_STATUS_TABLE_FLAG) || (defined(HAVE_DECL_DM_STATUS_TABLE_FLAG) && HAVE_DECL_DM_STATUS_TABLE_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_STATUS_TABLE_FLAG) == ((1 << 4)), "DM_STATUS_TABLE_FLAG != (1 << 4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_STATUS_TABLE_FLAG (1 << 4)
#endif
#if defined(DM_ACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_ACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_ACTIVE_PRESENT_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_ACTIVE_PRESENT_FLAG) == ((1 << 5)), "DM_ACTIVE_PRESENT_FLAG != (1 << 5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_ACTIVE_PRESENT_FLAG (1 << 5)
#endif
#if defined(DM_INACTIVE_PRESENT_FLAG) || (defined(HAVE_DECL_DM_INACTIVE_PRESENT_FLAG) && HAVE_DECL_DM_INACTIVE_PRESENT_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_INACTIVE_PRESENT_FLAG) == ((1 << 6)), "DM_INACTIVE_PRESENT_FLAG != (1 << 6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_INACTIVE_PRESENT_FLAG (1 << 6)
#endif
#if defined(DM_BUFFER_FULL_FLAG) || (defined(HAVE_DECL_DM_BUFFER_FULL_FLAG) && HAVE_DECL_DM_BUFFER_FULL_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_BUFFER_FULL_FLAG) == ((1 << 8)), "DM_BUFFER_FULL_FLAG != (1 << 8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_BUFFER_FULL_FLAG (1 << 8)
#endif
#if defined(DM_SKIP_BDGET_FLAG) || (defined(HAVE_DECL_DM_SKIP_BDGET_FLAG) && HAVE_DECL_DM_SKIP_BDGET_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_SKIP_BDGET_FLAG) == ((1 << 9)), "DM_SKIP_BDGET_FLAG != (1 << 9)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_SKIP_BDGET_FLAG (1 << 9)
#endif
#if defined(DM_SKIP_LOCKFS_FLAG) || (defined(HAVE_DECL_DM_SKIP_LOCKFS_FLAG) && HAVE_DECL_DM_SKIP_LOCKFS_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_SKIP_LOCKFS_FLAG) == ((1 << 10)), "DM_SKIP_LOCKFS_FLAG != (1 << 10)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_SKIP_LOCKFS_FLAG (1 << 10)
#endif
#if defined(DM_NOFLUSH_FLAG) || (defined(HAVE_DECL_DM_NOFLUSH_FLAG) && HAVE_DECL_DM_NOFLUSH_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_NOFLUSH_FLAG) == ((1 << 11)), "DM_NOFLUSH_FLAG != (1 << 11)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_NOFLUSH_FLAG (1 << 11)
#endif
#if defined(DM_QUERY_INACTIVE_TABLE_FLAG) || (defined(HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG) && HAVE_DECL_DM_QUERY_INACTIVE_TABLE_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_QUERY_INACTIVE_TABLE_FLAG) == ((1 << 12)), "DM_QUERY_INACTIVE_TABLE_FLAG != (1 << 12)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_QUERY_INACTIVE_TABLE_FLAG (1 << 12)
#endif
#if defined(DM_UEVENT_GENERATED_FLAG) || (defined(HAVE_DECL_DM_UEVENT_GENERATED_FLAG) && HAVE_DECL_DM_UEVENT_GENERATED_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_UEVENT_GENERATED_FLAG) == ((1 << 13)), "DM_UEVENT_GENERATED_FLAG != (1 << 13)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_UEVENT_GENERATED_FLAG (1 << 13)
#endif
#if defined(DM_UUID_FLAG) || (defined(HAVE_DECL_DM_UUID_FLAG) && HAVE_DECL_DM_UUID_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_UUID_FLAG) == ((1 << 14)), "DM_UUID_FLAG != (1 << 14)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_UUID_FLAG (1 << 14)
#endif
#if defined(DM_SECURE_DATA_FLAG) || (defined(HAVE_DECL_DM_SECURE_DATA_FLAG) && HAVE_DECL_DM_SECURE_DATA_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_SECURE_DATA_FLAG) == ((1 << 15)), "DM_SECURE_DATA_FLAG != (1 << 15)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_SECURE_DATA_FLAG (1 << 15)
#endif
#if defined(DM_DATA_OUT_FLAG) || (defined(HAVE_DECL_DM_DATA_OUT_FLAG) && HAVE_DECL_DM_DATA_OUT_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_DATA_OUT_FLAG) == ((1 << 16)), "DM_DATA_OUT_FLAG != (1 << 16)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_DATA_OUT_FLAG (1 << 16)
#endif
#if defined(DM_DEFERRED_REMOVE) || (defined(HAVE_DECL_DM_DEFERRED_REMOVE) && HAVE_DECL_DM_DEFERRED_REMOVE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_DEFERRED_REMOVE) == ((1 << 17)), "DM_DEFERRED_REMOVE != (1 << 17)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_DEFERRED_REMOVE (1 << 17)
#endif
#if defined(DM_INTERNAL_SUSPEND_FLAG) || (defined(HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG) && HAVE_DECL_DM_INTERNAL_SUSPEND_FLAG)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((DM_INTERNAL_SUSPEND_FLAG) == ((1 << 18)), "DM_INTERNAL_SUSPEND_FLAG != (1 << 18)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define DM_INTERNAL_SUSPEND_FLAG (1 << 18)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

#  error static const struct xlat dm_flags in mpers mode

# else

static
const struct xlat dm_flags[] = {
 XLAT(DM_READONLY_FLAG),
 XLAT(DM_SUSPEND_FLAG),

 XLAT(DM_EXISTS_FLAG),
 XLAT(DM_PERSISTENT_DEV_FLAG),
 XLAT(DM_STATUS_TABLE_FLAG),
 XLAT(DM_ACTIVE_PRESENT_FLAG),
 XLAT(DM_INACTIVE_PRESENT_FLAG),
 XLAT(DM_BUFFER_FULL_FLAG),
 XLAT(DM_SKIP_BDGET_FLAG),
 XLAT(DM_SKIP_LOCKFS_FLAG),
 XLAT(DM_NOFLUSH_FLAG),
 XLAT(DM_QUERY_INACTIVE_TABLE_FLAG),
 XLAT(DM_UEVENT_GENERATED_FLAG),
 XLAT(DM_UUID_FLAG),
 XLAT(DM_SECURE_DATA_FLAG),
 XLAT(DM_DATA_OUT_FLAG),
 XLAT(DM_DEFERRED_REMOVE),
 XLAT(DM_INTERNAL_SUSPEND_FLAG),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
