1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 /* 27 * Copyright (c) 2013 by Saso Kiselkov. All rights reserved. 28 * Copyright (c) 2015 by Delphix. All rights reserved. 29 */ 30 31 #ifndef _SYS_ZIO_COMPRESS_H 32 #define _SYS_ZIO_COMPRESS_H 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 enum zio_compress { 39 ZIO_COMPRESS_INHERIT = 0, 40 ZIO_COMPRESS_ON, 41 ZIO_COMPRESS_OFF, 42 ZIO_COMPRESS_LZJB, 43 ZIO_COMPRESS_EMPTY, 44 ZIO_COMPRESS_GZIP_1, 45 ZIO_COMPRESS_GZIP_2, 46 ZIO_COMPRESS_GZIP_3, 47 ZIO_COMPRESS_GZIP_4, 48 ZIO_COMPRESS_GZIP_5, 49 ZIO_COMPRESS_GZIP_6, 50 ZIO_COMPRESS_GZIP_7, 51 ZIO_COMPRESS_GZIP_8, 52 ZIO_COMPRESS_GZIP_9, 53 ZIO_COMPRESS_ZLE, 54 ZIO_COMPRESS_LZ4, 55 ZIO_COMPRESS_FUNCTIONS 56 }; 57 58 /* Common signature for all zio compress functions. */ 59 typedef size_t zio_compress_func_t(void *src, void *dst, 60 size_t s_len, size_t d_len, int); 61 /* Common signature for all zio decompress functions. */ 62 typedef int zio_decompress_func_t(void *src, void *dst, 63 size_t s_len, size_t d_len, int); 64 65 /* 66 * Information about each compression function. 67 */ 68 typedef struct zio_compress_info { 69 zio_compress_func_t *ci_compress; /* compression function */ 70 zio_decompress_func_t *ci_decompress; /* decompression function */ 71 int ci_level; /* level parameter */ 72 char *ci_name; /* algorithm name */ 73 } zio_compress_info_t; 74 75 extern zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS]; 76 77 /* 78 * Compression routines. 79 */ 80 extern size_t lzjb_compress(void *src, void *dst, size_t s_len, size_t d_len, 81 int level); 82 extern int lzjb_decompress(void *src, void *dst, size_t s_len, size_t d_len, 83 int level); 84 extern size_t gzip_compress(void *src, void *dst, size_t s_len, size_t d_len, 85 int level); 86 extern int gzip_decompress(void *src, void *dst, size_t s_len, size_t d_len, 87 int level); 88 extern size_t zle_compress(void *src, void *dst, size_t s_len, size_t d_len, 89 int level); 90 extern int zle_decompress(void *src, void *dst, size_t s_len, size_t d_len, 91 int level); 92 extern size_t lz4_compress(void *src, void *dst, size_t s_len, size_t d_len, 93 int level); 94 extern int lz4_decompress(void *src, void *dst, size_t s_len, size_t d_len, 95 int level); 96 97 /* 98 * Compress and decompress data if necessary. 99 */ 100 extern size_t zio_compress_data(enum zio_compress c, void *src, void *dst, 101 size_t s_len); 102 extern int zio_decompress_data(enum zio_compress c, void *src, void *dst, 103 size_t s_len, size_t d_len); 104 105 #ifdef __cplusplus 106 } 107 #endif 108 109 #endif /* _SYS_ZIO_COMPRESS_H */ 110