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

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

#if defined(BTRFS_QGROUP_LIMIT_MAX_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_RFER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_MAX_RFER) == ((1ULL << 0)), "BTRFS_QGROUP_LIMIT_MAX_RFER != (1ULL << 0)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_MAX_RFER (1ULL << 0)
#endif
#if defined(BTRFS_QGROUP_LIMIT_MAX_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_MAX_EXCL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_MAX_EXCL) == ((1ULL << 1)), "BTRFS_QGROUP_LIMIT_MAX_EXCL != (1ULL << 1)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_MAX_EXCL (1ULL << 1)
#endif
#if defined(BTRFS_QGROUP_LIMIT_RSV_RFER) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_RFER)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_RSV_RFER) == ((1ULL << 2)), "BTRFS_QGROUP_LIMIT_RSV_RFER != (1ULL << 2)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_RSV_RFER (1ULL << 2)
#endif
#if defined(BTRFS_QGROUP_LIMIT_RSV_EXCL) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RSV_EXCL)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_RSV_EXCL) == ((1ULL << 3)), "BTRFS_QGROUP_LIMIT_RSV_EXCL != (1ULL << 3)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_RSV_EXCL (1ULL << 3)
#endif
#if defined(BTRFS_QGROUP_LIMIT_RFER_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_RFER_CMPR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_RFER_CMPR) == ((1ULL << 4)), "BTRFS_QGROUP_LIMIT_RFER_CMPR != (1ULL << 4)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_RFER_CMPR (1ULL << 4)
#endif
#if defined(BTRFS_QGROUP_LIMIT_EXCL_CMPR) || (defined(HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR) && HAVE_DECL_BTRFS_QGROUP_LIMIT_EXCL_CMPR)
DIAG_PUSH_IGNORE_TAUTOLOGICAL_COMPARE
static_assert((BTRFS_QGROUP_LIMIT_EXCL_CMPR) == ((1ULL << 5)), "BTRFS_QGROUP_LIMIT_EXCL_CMPR != (1ULL << 5)");
DIAG_POP_IGNORE_TAUTOLOGICAL_COMPARE
#else
# define BTRFS_QGROUP_LIMIT_EXCL_CMPR (1ULL << 5)
#endif

#ifndef XLAT_MACROS_ONLY

# ifdef IN_MPERS

extern const struct xlat btrfs_qgroup_limit_flags[];

# else

#  if !(defined HAVE_M32_MPERS || defined HAVE_MX32_MPERS)
static
#  endif
const struct xlat btrfs_qgroup_limit_flags[] = {
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_MAX_RFER),
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_MAX_EXCL),
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_RSV_RFER),
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_RSV_EXCL),
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_RFER_CMPR),
 XLAT_TYPE(uint64_t, BTRFS_QGROUP_LIMIT_EXCL_CMPR),
 XLAT_END
};

# endif /* !IN_MPERS */

#endif /* !XLAT_MACROS_ONLY */
