xref: /rk3399_rockchip-uboot/include/zfs/zio.h (revision 326ea986ac150acdc7656d57fca647db80b50158)
14d3c95f5SJorgen Lundman /*
24d3c95f5SJorgen Lundman  *  GRUB  --  GRand Unified Bootloader
34d3c95f5SJorgen Lundman  *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
44d3c95f5SJorgen Lundman  *
5*1a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
64d3c95f5SJorgen Lundman  */
74d3c95f5SJorgen Lundman /*
84d3c95f5SJorgen Lundman  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
94d3c95f5SJorgen Lundman  */
104d3c95f5SJorgen Lundman 
114d3c95f5SJorgen Lundman #ifndef _ZIO_H
124d3c95f5SJorgen Lundman #define	_ZIO_H
134d3c95f5SJorgen Lundman 
144d3c95f5SJorgen Lundman #include <zfs/spa.h>
154d3c95f5SJorgen Lundman 
164d3c95f5SJorgen Lundman #define	ZEC_MAGIC	0x210da7ab10c7a11ULL	/* zio data bloc tail */
174d3c95f5SJorgen Lundman 
184d3c95f5SJorgen Lundman typedef struct zio_eck {
194d3c95f5SJorgen Lundman 	uint64_t	zec_magic;	/* for validation, endianness	*/
204d3c95f5SJorgen Lundman 	zio_cksum_t	zec_cksum;	/* 256-bit checksum		*/
214d3c95f5SJorgen Lundman } zio_eck_t;
224d3c95f5SJorgen Lundman 
234d3c95f5SJorgen Lundman /*
244d3c95f5SJorgen Lundman  * Gang block headers are self-checksumming and contain an array
254d3c95f5SJorgen Lundman  * of block pointers.
264d3c95f5SJorgen Lundman  */
274d3c95f5SJorgen Lundman #define	SPA_GANGBLOCKSIZE	SPA_MINBLOCKSIZE
284d3c95f5SJorgen Lundman #define	SPA_GBH_NBLKPTRS	((SPA_GANGBLOCKSIZE - \
294d3c95f5SJorgen Lundman 	sizeof(zio_eck_t)) / sizeof(blkptr_t))
304d3c95f5SJorgen Lundman #define	SPA_GBH_FILLER		((SPA_GANGBLOCKSIZE - \
314d3c95f5SJorgen Lundman 	sizeof(zio_eck_t) - \
324d3c95f5SJorgen Lundman 	(SPA_GBH_NBLKPTRS * sizeof(blkptr_t))) /\
334d3c95f5SJorgen Lundman 	sizeof(uint64_t))
344d3c95f5SJorgen Lundman 
354d3c95f5SJorgen Lundman #define	ZIO_GET_IOSIZE(zio)	\
364d3c95f5SJorgen Lundman 	(BP_IS_GANG((zio)->io_bp) ? \
374d3c95f5SJorgen Lundman 	SPA_GANGBLOCKSIZE : BP_GET_PSIZE((zio)->io_bp))
384d3c95f5SJorgen Lundman 
394d3c95f5SJorgen Lundman typedef struct zio_gbh {
404d3c95f5SJorgen Lundman 	blkptr_t		zg_blkptr[SPA_GBH_NBLKPTRS];
414d3c95f5SJorgen Lundman 	uint64_t		zg_filler[SPA_GBH_FILLER];
424d3c95f5SJorgen Lundman 	zio_eck_t		zg_tail;
434d3c95f5SJorgen Lundman } zio_gbh_phys_t;
444d3c95f5SJorgen Lundman 
454d3c95f5SJorgen Lundman enum zio_checksum {
464d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_INHERIT = 0,
474d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_ON,
484d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_OFF,
494d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_LABEL,
504d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_GANG_HEADER,
514d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_ZILOG,
524d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_FLETCHER_2,
534d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_FLETCHER_4,
544d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_SHA256,
554d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_ZILOG2,
564d3c95f5SJorgen Lundman 	ZIO_CHECKSUM_FUNCTIONS
574d3c95f5SJorgen Lundman };
584d3c95f5SJorgen Lundman 
594d3c95f5SJorgen Lundman #define	ZIO_CHECKSUM_ON_VALUE	ZIO_CHECKSUM_FLETCHER_2
604d3c95f5SJorgen Lundman #define	ZIO_CHECKSUM_DEFAULT	ZIO_CHECKSUM_ON
614d3c95f5SJorgen Lundman 
624d3c95f5SJorgen Lundman enum zio_compress {
634d3c95f5SJorgen Lundman 	ZIO_COMPRESS_INHERIT = 0,
644d3c95f5SJorgen Lundman 	ZIO_COMPRESS_ON,
654d3c95f5SJorgen Lundman 	ZIO_COMPRESS_OFF,
664d3c95f5SJorgen Lundman 	ZIO_COMPRESS_LZJB,
674d3c95f5SJorgen Lundman 	ZIO_COMPRESS_EMPTY,
684d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP1,
694d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP2,
704d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP3,
714d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP4,
724d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP5,
734d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP6,
744d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP7,
754d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP8,
764d3c95f5SJorgen Lundman 	ZIO_COMPRESS_GZIP9,
774d3c95f5SJorgen Lundman 	ZIO_COMPRESS_FUNCTIONS
784d3c95f5SJorgen Lundman };
794d3c95f5SJorgen Lundman 
804d3c95f5SJorgen Lundman #endif	/* _ZIO_H */
81