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

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

#if defined(BTRFS_BALANCE_ARGS_PROFILES) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES) && HAVE_DECL_BTRFS_BALANCE_ARGS_PROFILES)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_PROFILES) == ((1ULL << 0)), "BTRFS_BALANCE_ARGS_PROFILES != (1ULL << 0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_PROFILES (1ULL << 0)
#endif
#if defined(BTRFS_BALANCE_ARGS_USAGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_USAGE) == ((1ULL << 1)), "BTRFS_BALANCE_ARGS_USAGE != (1ULL << 1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_USAGE (1ULL << 1)
#endif
#if defined(BTRFS_BALANCE_ARGS_DEVID) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID) && HAVE_DECL_BTRFS_BALANCE_ARGS_DEVID)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_DEVID) == ((1ULL << 2)), "BTRFS_BALANCE_ARGS_DEVID != (1ULL << 2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_DEVID (1ULL << 2)
#endif
#if defined(BTRFS_BALANCE_ARGS_DRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_DRANGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_DRANGE) == ((1ULL << 3)), "BTRFS_BALANCE_ARGS_DRANGE != (1ULL << 3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_DRANGE (1ULL << 3)
#endif
#if defined(BTRFS_BALANCE_ARGS_VRANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_VRANGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_VRANGE) == ((1ULL << 4)), "BTRFS_BALANCE_ARGS_VRANGE != (1ULL << 4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_VRANGE (1ULL << 4)
#endif
#if defined(BTRFS_BALANCE_ARGS_LIMIT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_LIMIT) == ((1ULL << 5)), "BTRFS_BALANCE_ARGS_LIMIT != (1ULL << 5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_LIMIT (1ULL << 5)
#endif
#if defined(BTRFS_BALANCE_ARGS_LIMIT_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_LIMIT_RANGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_LIMIT_RANGE) == ((1ULL << 6)), "BTRFS_BALANCE_ARGS_LIMIT_RANGE != (1ULL << 6)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_LIMIT_RANGE (1ULL << 6)
#endif
#if defined(BTRFS_BALANCE_ARGS_STRIPES_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_STRIPES_RANGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_STRIPES_RANGE) == ((1ULL << 7)), "BTRFS_BALANCE_ARGS_STRIPES_RANGE != (1ULL << 7)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_STRIPES_RANGE (1ULL << 7)
#endif
#if defined(BTRFS_BALANCE_ARGS_CONVERT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT) && HAVE_DECL_BTRFS_BALANCE_ARGS_CONVERT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_CONVERT) == ((1ULL << 8)), "BTRFS_BALANCE_ARGS_CONVERT != (1ULL << 8)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_CONVERT (1ULL << 8)
#endif
#if defined(BTRFS_BALANCE_ARGS_SOFT) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT) && HAVE_DECL_BTRFS_BALANCE_ARGS_SOFT)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_SOFT) == ((1ULL << 9)), "BTRFS_BALANCE_ARGS_SOFT != (1ULL << 9)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_SOFT (1ULL << 9)
#endif
#if defined(BTRFS_BALANCE_ARGS_USAGE_RANGE) || (defined(HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE) && HAVE_DECL_BTRFS_BALANCE_ARGS_USAGE_RANGE)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_BALANCE_ARGS_USAGE_RANGE) == ((1ULL << 10)), "BTRFS_BALANCE_ARGS_USAGE_RANGE != (1ULL << 10)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_BALANCE_ARGS_USAGE_RANGE (1ULL << 10)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat btrfs_balance_args[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat btrfs_balance_args[] = {
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_PROFILES),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_USAGE),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_DEVID),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_DRANGE),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_VRANGE),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_LIMIT),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_LIMIT_RANGE),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_STRIPES_RANGE),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_CONVERT),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_SOFT),
 XLAT_TYPE(uint64_t, BTRFS_BALANCE_ARGS_USAGE_RANGE),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
