zio_compress.h revision 321535
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 35extern "C" { 36#endif 37 38enum 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. */ 59typedef 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. */ 62typedef 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 */ 68typedef 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 75extern zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS]; 76 77/* 78 * Compression routines. 79 */ 80extern size_t lzjb_compress(void *src, void *dst, size_t s_len, size_t d_len, 81 int level); 82extern int lzjb_decompress(void *src, void *dst, size_t s_len, size_t d_len, 83 int level); 84extern size_t gzip_compress(void *src, void *dst, size_t s_len, size_t d_len, 85 int level); 86extern int gzip_decompress(void *src, void *dst, size_t s_len, size_t d_len, 87 int level); 88extern size_t zle_compress(void *src, void *dst, size_t s_len, size_t d_len, 89 int level); 90extern int zle_decompress(void *src, void *dst, size_t s_len, size_t d_len, 91 int level); 92extern void lz4_init(void); 93extern void lz4_fini(void); 94extern size_t lz4_compress(void *src, void *dst, size_t s_len, size_t d_len, 95 int level); 96extern int lz4_decompress(void *src, void *dst, size_t s_len, size_t d_len, 97 int level); 98 99/* 100 * Compress and decompress data if necessary. 101 */ 102extern size_t zio_compress_data(enum zio_compress c, void *src, void *dst, 103 size_t s_len); 104extern int zio_decompress_data(enum zio_compress c, void *src, void *dst, 105 size_t s_len, size_t d_len); 106 107/* 108 * Module lifetime management. 109 */ 110extern void zio_compress_init(void); 111extern void zio_compress_fini(void); 112 113#ifdef __cplusplus 114} 115#endif 116 117#endif /* _SYS_ZIO_COMPRESS_H */ 118