MIPS: convert CONFIG_SYS_MIPS_TIMER_FREQ to Kconfig
[platform/kernel/u-boot.git] / include / u-boot / lz4.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright 2019 Google LLC
4  */
5
6 #ifndef __LZ4_H
7 #define __LZ4_H
8
9 /**
10  * ulz4fn() - Decompress LZ4 data
11  *
12  * @src: Source data to decompress
13  * @srcn: Length of source data
14  * @dst: Destination for uncompressed data
15  * @dstn: Returns length of uncompressed data
16  * Return: 0 if OK, -EPROTONOSUPPORT if the magic number or version number are
17  *      not recognised or independent blocks are used, -EINVAL if the reserved
18  *      fields are non-zero, or input is overrun, -EENOBUFS if the destination
19  *      buffer is overrun, -EEPROTO if the compressed data causes an error in
20  *      the decompression algorithm
21  */
22 int ulz4fn(const void *src, size_t srcn, void *dst, size_t *dstn);
23
24 /**
25  * LZ4_decompress_safe() - Decompression protected against buffer overflow
26  * @source: source address of the compressed data
27  * @dest: output buffer address of the uncompressed data
28  *      which must be already allocated
29  * @compressedSize: is the precise full size of the compressed block
30  * @maxDecompressedSize: is the size of 'dest' buffer
31  *
32  * Decompresses data from 'source' into 'dest'.
33  * If the source stream is detected malformed, the function will
34  * stop decoding and return a negative result.
35  * This function is protected against buffer overflow exploits,
36  * including malicious data packets. It never writes outside output buffer,
37  * nor reads outside input buffer.
38  *
39  * Return: number of bytes decompressed into destination buffer
40  *      (necessarily <= maxDecompressedSize)
41  *      or a negative result in case of error
42  */
43 int LZ4_decompress_safe(const char *source, char *dest,
44         int compressedSize, int maxDecompressedSize);
45
46 /**
47  * LZ4_decompress_safe_partial() - Decompress a block of size 'compressedSize'
48  *      at position 'source' into buffer 'dest'
49  * @source: source address of the compressed data
50  * @dest: output buffer address of the decompressed data which must be
51  *      already allocated
52  * @compressedSize: is the precise full size of the compressed block.
53  * @targetOutputSize: the decompression operation will try
54  *      to stop as soon as 'targetOutputSize' has been reached
55  * @maxDecompressedSize: is the size of destination buffer
56  *
57  * This function decompresses a compressed block of size 'compressedSize'
58  * at position 'source' into destination buffer 'dest'
59  * of size 'maxDecompressedSize'.
60  * The function tries to stop decompressing operation as soon as
61  * 'targetOutputSize' has been reached, reducing decompression time.
62  * This function never writes outside of output buffer,
63  * and never reads outside of input buffer.
64  * It is therefore protected against malicious data packets.
65  *
66  * Return: the number of bytes decoded in the destination buffer
67  *      (necessarily <= maxDecompressedSize)
68  *      or a negative result in case of error
69  *
70  */
71 int LZ4_decompress_safe_partial(const char *src, char *dst,
72         int compressedSize, int targetOutputSize, int dstCapacity);
73 #endif