1#ifndef __LZ4_H__
2#define __LZ4_H__
3/*
4 * LZ4 Kernel Interface
5 *
6 * Copyright (C) 2013, LG Electronics, Kyungsik Lee <kyungsik.lee@lge.com>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12#define LZ4_MEM_COMPRESS	(4096 * sizeof(unsigned char *))
13#define LZ4HC_MEM_COMPRESS	(65538 * sizeof(unsigned char *))
14
15/*
16 * lz4_compressbound()
17 * Provides the maximum size that LZ4 may output in a "worst case" scenario
18 * (input data not compressible)
19 */
20static inline size_t lz4_compressbound(size_t isize)
21{
22	return isize + (isize / 255) + 16;
23}
24
25/*
26 * lz4_compress()
27 *	src     : source address of the original data
28 *	src_len : size of the original data
29 *	dst	: output buffer address of the compressed data
30 *		This requires 'dst' of size LZ4_COMPRESSBOUND.
31 *	dst_len : is the output size, which is returned after compress done
32 *	workmem : address of the working memory.
33 *		This requires 'workmem' of size LZ4_MEM_COMPRESS.
34 *	return  : Success if return 0
35 *		  Error if return (< 0)
36 *	note :  Destination buffer and workmem must be already allocated with
37 *		the defined size.
38 */
39int lz4_compress(const unsigned char *src, size_t src_len,
40		unsigned char *dst, size_t *dst_len, void *wrkmem);
41
42 /*
43  * lz4hc_compress()
44  *	 src	 : source address of the original data
45  *	 src_len : size of the original data
46  *	 dst	 : output buffer address of the compressed data
47  *		This requires 'dst' of size LZ4_COMPRESSBOUND.
48  *	 dst_len : is the output size, which is returned after compress done
49  *	 workmem : address of the working memory.
50  *		This requires 'workmem' of size LZ4HC_MEM_COMPRESS.
51  *	 return  : Success if return 0
52  *		   Error if return (< 0)
53  *	 note :  Destination buffer and workmem must be already allocated with
54  *		 the defined size.
55  */
56int lz4hc_compress(const unsigned char *src, size_t src_len,
57		unsigned char *dst, size_t *dst_len, void *wrkmem);
58
59/*
60 * lz4_decompress()
61 *	src     : source address of the compressed data
62 *	src_len : is the input size, whcih is returned after decompress done
63 *	dest	: output buffer address of the decompressed data
64 *	actual_dest_len: is the size of uncompressed data, supposing it's known
65 *	return  : Success if return 0
66 *		  Error if return (< 0)
67 *	note :  Destination buffer must be already allocated.
68 *		slightly faster than lz4_decompress_unknownoutputsize()
69 */
70int lz4_decompress(const unsigned char *src, size_t *src_len,
71		unsigned char *dest, size_t actual_dest_len);
72
73/*
74 * lz4_decompress_unknownoutputsize()
75 *	src     : source address of the compressed data
76 *	src_len : is the input size, therefore the compressed size
77 *	dest	: output buffer address of the decompressed data
78 *	dest_len: is the max size of the destination buffer, which is
79 *			returned with actual size of decompressed data after
80 *			decompress done
81 *	return  : Success if return 0
82 *		  Error if return (< 0)
83 *	note :  Destination buffer must be already allocated.
84 */
85int lz4_decompress_unknownoutputsize(const unsigned char *src, size_t src_len,
86		unsigned char *dest, size_t *dest_len);
87#endif
88