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