1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * GRUB -- GRand Unified Bootloader 3*4882a593Smuzhiyun * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun /* 8*4882a593Smuzhiyun * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef _ZIO_H 12*4882a593Smuzhiyun #define _ZIO_H 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #include <zfs/spa.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #define ZEC_MAGIC 0x210da7ab10c7a11ULL /* zio data bloc tail */ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun typedef struct zio_eck { 19*4882a593Smuzhiyun uint64_t zec_magic; /* for validation, endianness */ 20*4882a593Smuzhiyun zio_cksum_t zec_cksum; /* 256-bit checksum */ 21*4882a593Smuzhiyun } zio_eck_t; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* 24*4882a593Smuzhiyun * Gang block headers are self-checksumming and contain an array 25*4882a593Smuzhiyun * of block pointers. 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun #define SPA_GANGBLOCKSIZE SPA_MINBLOCKSIZE 28*4882a593Smuzhiyun #define SPA_GBH_NBLKPTRS ((SPA_GANGBLOCKSIZE - \ 29*4882a593Smuzhiyun sizeof(zio_eck_t)) / sizeof(blkptr_t)) 30*4882a593Smuzhiyun #define SPA_GBH_FILLER ((SPA_GANGBLOCKSIZE - \ 31*4882a593Smuzhiyun sizeof(zio_eck_t) - \ 32*4882a593Smuzhiyun (SPA_GBH_NBLKPTRS * sizeof(blkptr_t))) /\ 33*4882a593Smuzhiyun sizeof(uint64_t)) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define ZIO_GET_IOSIZE(zio) \ 36*4882a593Smuzhiyun (BP_IS_GANG((zio)->io_bp) ? \ 37*4882a593Smuzhiyun SPA_GANGBLOCKSIZE : BP_GET_PSIZE((zio)->io_bp)) 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun typedef struct zio_gbh { 40*4882a593Smuzhiyun blkptr_t zg_blkptr[SPA_GBH_NBLKPTRS]; 41*4882a593Smuzhiyun uint64_t zg_filler[SPA_GBH_FILLER]; 42*4882a593Smuzhiyun zio_eck_t zg_tail; 43*4882a593Smuzhiyun } zio_gbh_phys_t; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun enum zio_checksum { 46*4882a593Smuzhiyun ZIO_CHECKSUM_INHERIT = 0, 47*4882a593Smuzhiyun ZIO_CHECKSUM_ON, 48*4882a593Smuzhiyun ZIO_CHECKSUM_OFF, 49*4882a593Smuzhiyun ZIO_CHECKSUM_LABEL, 50*4882a593Smuzhiyun ZIO_CHECKSUM_GANG_HEADER, 51*4882a593Smuzhiyun ZIO_CHECKSUM_ZILOG, 52*4882a593Smuzhiyun ZIO_CHECKSUM_FLETCHER_2, 53*4882a593Smuzhiyun ZIO_CHECKSUM_FLETCHER_4, 54*4882a593Smuzhiyun ZIO_CHECKSUM_SHA256, 55*4882a593Smuzhiyun ZIO_CHECKSUM_ZILOG2, 56*4882a593Smuzhiyun ZIO_CHECKSUM_FUNCTIONS 57*4882a593Smuzhiyun }; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define ZIO_CHECKSUM_ON_VALUE ZIO_CHECKSUM_FLETCHER_2 60*4882a593Smuzhiyun #define ZIO_CHECKSUM_DEFAULT ZIO_CHECKSUM_ON 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun enum zio_compress { 63*4882a593Smuzhiyun ZIO_COMPRESS_INHERIT = 0, 64*4882a593Smuzhiyun ZIO_COMPRESS_ON, 65*4882a593Smuzhiyun ZIO_COMPRESS_OFF, 66*4882a593Smuzhiyun ZIO_COMPRESS_LZJB, 67*4882a593Smuzhiyun ZIO_COMPRESS_EMPTY, 68*4882a593Smuzhiyun ZIO_COMPRESS_GZIP1, 69*4882a593Smuzhiyun ZIO_COMPRESS_GZIP2, 70*4882a593Smuzhiyun ZIO_COMPRESS_GZIP3, 71*4882a593Smuzhiyun ZIO_COMPRESS_GZIP4, 72*4882a593Smuzhiyun ZIO_COMPRESS_GZIP5, 73*4882a593Smuzhiyun ZIO_COMPRESS_GZIP6, 74*4882a593Smuzhiyun ZIO_COMPRESS_GZIP7, 75*4882a593Smuzhiyun ZIO_COMPRESS_GZIP8, 76*4882a593Smuzhiyun ZIO_COMPRESS_GZIP9, 77*4882a593Smuzhiyun ZIO_COMPRESS_FUNCTIONS 78*4882a593Smuzhiyun }; 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun #endif /* _ZIO_H */ 81