1eda14cbcSMatt Macy /* 2eda14cbcSMatt Macy * CDDL HEADER START 3eda14cbcSMatt Macy * 4eda14cbcSMatt Macy * The contents of this file are subject to the terms of the 5eda14cbcSMatt Macy * Common Development and Distribution License (the "License"). 6eda14cbcSMatt Macy * You may not use this file except in compliance with the License. 7eda14cbcSMatt Macy * 8eda14cbcSMatt Macy * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*271171e0SMartin Matuska * or https://opensource.org/licenses/CDDL-1.0. 10eda14cbcSMatt Macy * See the License for the specific language governing permissions 11eda14cbcSMatt Macy * and limitations under the License. 12eda14cbcSMatt Macy * 13eda14cbcSMatt Macy * When distributing Covered Code, include this CDDL HEADER in each 14eda14cbcSMatt Macy * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15eda14cbcSMatt Macy * If applicable, add the following below this CDDL HEADER, with the 16eda14cbcSMatt Macy * fields enclosed by brackets "[]" replaced with your own identifying 17eda14cbcSMatt Macy * information: Portions Copyright [yyyy] [name of copyright owner] 18eda14cbcSMatt Macy * 19eda14cbcSMatt Macy * CDDL HEADER END 20eda14cbcSMatt Macy */ 21eda14cbcSMatt Macy /* 22eda14cbcSMatt Macy * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23eda14cbcSMatt Macy * Use is subject to license terms. 24eda14cbcSMatt Macy */ 25eda14cbcSMatt Macy 26eda14cbcSMatt Macy #ifndef _SPA_CHECKSUM_H 27eda14cbcSMatt Macy #define _SPA_CHECKSUM_H 28eda14cbcSMatt Macy 29eda14cbcSMatt Macy #include <sys/types.h> 30eda14cbcSMatt Macy 31eda14cbcSMatt Macy #ifdef __cplusplus 32eda14cbcSMatt Macy extern "C" { 33eda14cbcSMatt Macy #endif 34eda14cbcSMatt Macy 35eda14cbcSMatt Macy /* 36eda14cbcSMatt Macy * Each block has a 256-bit checksum -- strong enough for cryptographic hashes. 37eda14cbcSMatt Macy */ 38eda14cbcSMatt Macy typedef struct zio_cksum { 39eda14cbcSMatt Macy uint64_t zc_word[4]; 40eda14cbcSMatt Macy } zio_cksum_t; 41eda14cbcSMatt Macy 42eda14cbcSMatt Macy #define ZIO_SET_CHECKSUM(zcp, w0, w1, w2, w3) \ 43eda14cbcSMatt Macy { \ 44eda14cbcSMatt Macy (zcp)->zc_word[0] = w0; \ 45eda14cbcSMatt Macy (zcp)->zc_word[1] = w1; \ 46eda14cbcSMatt Macy (zcp)->zc_word[2] = w2; \ 47eda14cbcSMatt Macy (zcp)->zc_word[3] = w3; \ 48eda14cbcSMatt Macy } 49eda14cbcSMatt Macy 50eda14cbcSMatt Macy #define ZIO_CHECKSUM_EQUAL(zc1, zc2) \ 51eda14cbcSMatt Macy (0 == (((zc1).zc_word[0] - (zc2).zc_word[0]) | \ 52eda14cbcSMatt Macy ((zc1).zc_word[1] - (zc2).zc_word[1]) | \ 53eda14cbcSMatt Macy ((zc1).zc_word[2] - (zc2).zc_word[2]) | \ 54eda14cbcSMatt Macy ((zc1).zc_word[3] - (zc2).zc_word[3]))) 55eda14cbcSMatt Macy 56eda14cbcSMatt Macy #define ZIO_CHECKSUM_IS_ZERO(zc) \ 57eda14cbcSMatt Macy (0 == ((zc)->zc_word[0] | (zc)->zc_word[1] | \ 58eda14cbcSMatt Macy (zc)->zc_word[2] | (zc)->zc_word[3])) 59eda14cbcSMatt Macy 60eda14cbcSMatt Macy #define ZIO_CHECKSUM_BSWAP(zcp) \ 61eda14cbcSMatt Macy { \ 62eda14cbcSMatt Macy (zcp)->zc_word[0] = BSWAP_64((zcp)->zc_word[0]); \ 63eda14cbcSMatt Macy (zcp)->zc_word[1] = BSWAP_64((zcp)->zc_word[1]); \ 64eda14cbcSMatt Macy (zcp)->zc_word[2] = BSWAP_64((zcp)->zc_word[2]); \ 65eda14cbcSMatt Macy (zcp)->zc_word[3] = BSWAP_64((zcp)->zc_word[3]); \ 66eda14cbcSMatt Macy } 67eda14cbcSMatt Macy 68eda14cbcSMatt Macy #ifdef __cplusplus 69eda14cbcSMatt Macy } 70eda14cbcSMatt Macy #endif 71eda14cbcSMatt Macy 72eda14cbcSMatt Macy #endif 73