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