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

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

#if defined(BTRFS_BLOCK_GROUP_DATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_DATA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_DATA) == ((1ULL << 0)), "BTRFS_BLOCK_GROUP_DATA != (1ULL << 0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_DATA (1ULL << 0)
#endif
#if defined(BTRFS_BLOCK_GROUP_SYSTEM) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM) && HAVE_DECL_BTRFS_BLOCK_GROUP_SYSTEM)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_SYSTEM) == ((1ULL << 1)), "BTRFS_BLOCK_GROUP_SYSTEM != (1ULL << 1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_SYSTEM (1ULL << 1)
#endif
#if defined(BTRFS_BLOCK_GROUP_METADATA) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA) && HAVE_DECL_BTRFS_BLOCK_GROUP_METADATA)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_METADATA) == ((1ULL << 2)), "BTRFS_BLOCK_GROUP_METADATA != (1ULL << 2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_METADATA (1ULL << 2)
#endif
#if defined(BTRFS_BLOCK_GROUP_RAID0) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID0)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_RAID0) == ((1ULL << 3)), "BTRFS_BLOCK_GROUP_RAID0 != (1ULL << 3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_RAID0 (1ULL << 3)
#endif
#if defined(BTRFS_BLOCK_GROUP_RAID1) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID1)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_RAID1) == ((1ULL << 4)), "BTRFS_BLOCK_GROUP_RAID1 != (1ULL << 4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_RAID1 (1ULL << 4)
#endif
#if defined(BTRFS_BLOCK_GROUP_DUP) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_DUP) && HAVE_DECL_BTRFS_BLOCK_GROUP_DUP)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_DUP) == ((1ULL << 5)), "BTRFS_BLOCK_GROUP_DUP != (1ULL << 5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_DUP (1ULL << 5)
#endif
#if defined(BTRFS_BLOCK_GROUP_RAID10) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID10)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_RAID10) == ((1ULL << 6)), "BTRFS_BLOCK_GROUP_RAID10 != (1ULL << 6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_RAID10 (1ULL << 6)
#endif
#if defined(BTRFS_BLOCK_GROUP_RAID5) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID5)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_RAID5) == ((1ULL << 7)), "BTRFS_BLOCK_GROUP_RAID5 != (1ULL << 7)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_RAID5 (1ULL << 7)
#endif
#if defined(BTRFS_BLOCK_GROUP_RAID6) || (defined(HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6) && HAVE_DECL_BTRFS_BLOCK_GROUP_RAID6)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BLOCK_GROUP_RAID6) == ((1ULL << 8)), "BTRFS_BLOCK_GROUP_RAID6 != (1ULL << 8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BLOCK_GROUP_RAID6 (1ULL << 8)
#endif
#if defined(BTRFS_AVAIL_ALLOC_BIT_SINGLE) || (defined(HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE) && HAVE_DECL_BTRFS_AVAIL_ALLOC_BIT_SINGLE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_AVAIL_ALLOC_BIT_SINGLE) == ((1ULL << 48)), "BTRFS_AVAIL_ALLOC_BIT_SINGLE != (1ULL << 48)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_AVAIL_ALLOC_BIT_SINGLE (1ULL << 48)
#endif
#if defined(BTRFS_SPACE_INFO_GLOBAL_RSV) || (defined(HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV) && HAVE_DECL_BTRFS_SPACE_INFO_GLOBAL_RSV)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_SPACE_INFO_GLOBAL_RSV) == ((1ULL << 49)), "BTRFS_SPACE_INFO_GLOBAL_RSV != (1ULL << 49)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_SPACE_INFO_GLOBAL_RSV (1ULL << 49)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat btrfs_space_info_flags[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat btrfs_space_info_flags[] = {
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_DATA),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_SYSTEM),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_METADATA),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_RAID0),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_RAID1),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_DUP),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_RAID10),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_RAID5),
 XLAT_TYPE(uint64_t, BTRFS_BLOCK_GROUP_RAID6),
 XLAT_TYPE(uint64_t, BTRFS_AVAIL_ALLOC_BIT_SINGLE),
 XLAT_TYPE(uint64_t, BTRFS_SPACE_INFO_GLOBAL_RSV),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
