root/usr/src/grub/grub-0.97/stage2/zfs-include/zio.h
/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
/*
 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */
/*
 * Copyright 2013 by Saso Kiselkov. All rights reserved.
 * Copyright 2020 RackTop Systems, Inc.
 */

#ifndef _ZIO_H
#define _ZIO_H

#define ZEC_MAGIC       0x210da7ab10c7a11ULL    /* zio data bloc tail */

typedef struct zio_eck {
        uint64_t        zec_magic;      /* for validation, endianness   */
        zio_cksum_t     zec_cksum;      /* 256-bit checksum             */
} zio_eck_t;

/*
 * Gang block headers are self-checksumming and contain an array
 * of block pointers.
 */
#define SPA_GANGBLOCKSIZE       SPA_MINBLOCKSIZE
#define SPA_GBH_NBLKPTRS        ((SPA_GANGBLOCKSIZE - \
        sizeof (zio_eck_t)) / sizeof (blkptr_t))
#define SPA_GBH_FILLER          ((SPA_GANGBLOCKSIZE - \
        sizeof (zio_eck_t) - \
        (SPA_GBH_NBLKPTRS * sizeof (blkptr_t))) /\
        sizeof (uint64_t))

#define ZIO_GET_IOSIZE(zio)     \
        (BP_IS_GANG((zio)->io_bp) ? \
        SPA_GANGBLOCKSIZE : BP_GET_PSIZE((zio)->io_bp))

typedef struct zio_gbh {
        blkptr_t                zg_blkptr[SPA_GBH_NBLKPTRS];
        uint64_t                zg_filler[SPA_GBH_FILLER];
        zio_eck_t               zg_tail;
} zio_gbh_phys_t;

enum zio_checksum {
        ZIO_CHECKSUM_INHERIT = 0,
        ZIO_CHECKSUM_ON,
        ZIO_CHECKSUM_OFF,
        ZIO_CHECKSUM_LABEL,
        ZIO_CHECKSUM_GANG_HEADER,
        ZIO_CHECKSUM_ZILOG,
        ZIO_CHECKSUM_FLETCHER_2,
        ZIO_CHECKSUM_FLETCHER_4,
        ZIO_CHECKSUM_SHA256,
        ZIO_CHECKSUM_ZILOG2,
        ZIO_CHECKSUM_NOPARITY,
        ZIO_CHECKSUM_SHA512,
        ZIO_CHECKSUM_SKEIN,
        ZIO_CHECKSUM_EDONR,
        ZIO_CHECKSUM_FUNCTIONS
};

/* macros defining encryption lengths */
#define ZIO_OBJSET_MAC_LEN      32

enum zio_compress {
        ZIO_COMPRESS_INHERIT = 0,
        ZIO_COMPRESS_ON,
        ZIO_COMPRESS_OFF,
        ZIO_COMPRESS_LZJB,
        ZIO_COMPRESS_EMPTY,
        ZIO_COMPRESS_GZIP_1,
        ZIO_COMPRESS_GZIP_2,
        ZIO_COMPRESS_GZIP_3,
        ZIO_COMPRESS_GZIP_4,
        ZIO_COMPRESS_GZIP_5,
        ZIO_COMPRESS_GZIP_6,
        ZIO_COMPRESS_GZIP_7,
        ZIO_COMPRESS_GZIP_8,
        ZIO_COMPRESS_GZIP_9,
        ZIO_COMPRESS_ZLE,
        ZIO_COMPRESS_LZ4,
        ZIO_COMPRESS_FUNCTIONS
};

#endif  /* _ZIO_H */