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