xref: /openbmc/linux/lib/zstd/decompress/zstd_decompress_block.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1e0c1b49fSNick Terrell /*
2e0c1b49fSNick Terrell  * Copyright (c) Yann Collet, Facebook, Inc.
3e0c1b49fSNick Terrell  * All rights reserved.
4e0c1b49fSNick Terrell  *
5e0c1b49fSNick Terrell  * This source code is licensed under both the BSD-style license (found in the
6e0c1b49fSNick Terrell  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7e0c1b49fSNick Terrell  * in the COPYING file in the root directory of this source tree).
8e0c1b49fSNick Terrell  * You may select, at your option, one of the above-listed licenses.
9e0c1b49fSNick Terrell  */
10e0c1b49fSNick Terrell 
11e0c1b49fSNick Terrell 
12e0c1b49fSNick Terrell #ifndef ZSTD_DEC_BLOCK_H
13e0c1b49fSNick Terrell #define ZSTD_DEC_BLOCK_H
14e0c1b49fSNick Terrell 
15e0c1b49fSNick Terrell /*-*******************************************************
16e0c1b49fSNick Terrell  *  Dependencies
17e0c1b49fSNick Terrell  *********************************************************/
18e0c1b49fSNick Terrell #include "../common/zstd_deps.h"   /* size_t */
19e0c1b49fSNick Terrell #include <linux/zstd.h>    /* DCtx, and some public functions */
20e0c1b49fSNick Terrell #include "../common/zstd_internal.h"  /* blockProperties_t, and some public functions */
21e0c1b49fSNick Terrell #include "zstd_decompress_internal.h"  /* ZSTD_seqSymbol */
22e0c1b49fSNick Terrell 
23e0c1b49fSNick Terrell 
24e0c1b49fSNick Terrell /* ===   Prototypes   === */
25e0c1b49fSNick Terrell 
26e0c1b49fSNick Terrell /* note: prototypes already published within `zstd.h` :
27e0c1b49fSNick Terrell  * ZSTD_decompressBlock()
28e0c1b49fSNick Terrell  */
29e0c1b49fSNick Terrell 
30e0c1b49fSNick Terrell /* note: prototypes already published within `zstd_internal.h` :
31e0c1b49fSNick Terrell  * ZSTD_getcBlockSize()
32e0c1b49fSNick Terrell  * ZSTD_decodeSeqHeaders()
33e0c1b49fSNick Terrell  */
34e0c1b49fSNick Terrell 
35e0c1b49fSNick Terrell 
36*2aa14b1aSNick Terrell  /* Streaming state is used to inform allocation of the literal buffer */
37*2aa14b1aSNick Terrell typedef enum {
38*2aa14b1aSNick Terrell     not_streaming = 0,
39*2aa14b1aSNick Terrell     is_streaming = 1
40*2aa14b1aSNick Terrell } streaming_operation;
41*2aa14b1aSNick Terrell 
42e0c1b49fSNick Terrell /* ZSTD_decompressBlock_internal() :
43e0c1b49fSNick Terrell  * decompress block, starting at `src`,
44e0c1b49fSNick Terrell  * into destination buffer `dst`.
45e0c1b49fSNick Terrell  * @return : decompressed block size,
46e0c1b49fSNick Terrell  *           or an error code (which can be tested using ZSTD_isError())
47e0c1b49fSNick Terrell  */
48e0c1b49fSNick Terrell size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
49e0c1b49fSNick Terrell                                void* dst, size_t dstCapacity,
50*2aa14b1aSNick Terrell                          const void* src, size_t srcSize, const int frame, const streaming_operation streaming);
51e0c1b49fSNick Terrell 
52e0c1b49fSNick Terrell /* ZSTD_buildFSETable() :
53e0c1b49fSNick Terrell  * generate FSE decoding table for one symbol (ll, ml or off)
54e0c1b49fSNick Terrell  * this function must be called with valid parameters only
55e0c1b49fSNick Terrell  * (dt is large enough, normalizedCounter distribution total is a power of 2, max is within range, etc.)
56e0c1b49fSNick Terrell  * in which case it cannot fail.
57e0c1b49fSNick Terrell  * The workspace must be 4-byte aligned and at least ZSTD_BUILD_FSE_TABLE_WKSP_SIZE bytes, which is
58e0c1b49fSNick Terrell  * defined in zstd_decompress_internal.h.
59e0c1b49fSNick Terrell  * Internal use only.
60e0c1b49fSNick Terrell  */
61e0c1b49fSNick Terrell void ZSTD_buildFSETable(ZSTD_seqSymbol* dt,
62e0c1b49fSNick Terrell              const short* normalizedCounter, unsigned maxSymbolValue,
63*2aa14b1aSNick Terrell              const U32* baseValue, const U8* nbAdditionalBits,
64e0c1b49fSNick Terrell                    unsigned tableLog, void* wksp, size_t wkspSize,
65e0c1b49fSNick Terrell                    int bmi2);
66e0c1b49fSNick Terrell 
67e0c1b49fSNick Terrell 
68e0c1b49fSNick Terrell #endif /* ZSTD_DEC_BLOCK_H */
69