xref: /OK3568_Linux_fs/u-boot/include/zfs/zio.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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