648db22b |
1 | // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause |
2 | /* |
3 | * Copyright (c) Meta Platforms, Inc. and affiliates. |
4 | * All rights reserved. |
5 | * |
6 | * This source code is licensed under both the BSD-style license (found in the |
7 | * LICENSE file in the root directory of this source tree) and the GPLv2 (found |
8 | * in the COPYING file in the root directory of this source tree). |
9 | * You may select, at your option, one of the above-listed licenses. |
10 | */ |
11 | |
12 | #include <linux/kernel.h> |
13 | #include <linux/module.h> |
14 | #include <linux/string.h> |
15 | #include <linux/zstd.h> |
16 | |
17 | #include "common/zstd_deps.h" |
18 | |
19 | /* Common symbols. zstd_compress must depend on zstd_decompress. */ |
20 | |
21 | unsigned int zstd_is_error(size_t code) |
22 | { |
23 | return ZSTD_isError(code); |
24 | } |
25 | EXPORT_SYMBOL(zstd_is_error); |
26 | |
27 | zstd_error_code zstd_get_error_code(size_t code) |
28 | { |
29 | return ZSTD_getErrorCode(code); |
30 | } |
31 | EXPORT_SYMBOL(zstd_get_error_code); |
32 | |
33 | const char *zstd_get_error_name(size_t code) |
34 | { |
35 | return ZSTD_getErrorName(code); |
36 | } |
37 | EXPORT_SYMBOL(zstd_get_error_name); |
38 | |
39 | /* Decompression symbols. */ |
40 | |
41 | size_t zstd_dctx_workspace_bound(void) |
42 | { |
43 | return ZSTD_estimateDCtxSize(); |
44 | } |
45 | EXPORT_SYMBOL(zstd_dctx_workspace_bound); |
46 | |
47 | zstd_dctx *zstd_init_dctx(void *workspace, size_t workspace_size) |
48 | { |
49 | if (workspace == NULL) |
50 | return NULL; |
51 | return ZSTD_initStaticDCtx(workspace, workspace_size); |
52 | } |
53 | EXPORT_SYMBOL(zstd_init_dctx); |
54 | |
55 | size_t zstd_decompress_dctx(zstd_dctx *dctx, void *dst, size_t dst_capacity, |
56 | const void *src, size_t src_size) |
57 | { |
58 | return ZSTD_decompressDCtx(dctx, dst, dst_capacity, src, src_size); |
59 | } |
60 | EXPORT_SYMBOL(zstd_decompress_dctx); |
61 | |
62 | size_t zstd_dstream_workspace_bound(size_t max_window_size) |
63 | { |
64 | return ZSTD_estimateDStreamSize(max_window_size); |
65 | } |
66 | EXPORT_SYMBOL(zstd_dstream_workspace_bound); |
67 | |
68 | zstd_dstream *zstd_init_dstream(size_t max_window_size, void *workspace, |
69 | size_t workspace_size) |
70 | { |
71 | if (workspace == NULL) |
72 | return NULL; |
73 | (void)max_window_size; |
74 | return ZSTD_initStaticDStream(workspace, workspace_size); |
75 | } |
76 | EXPORT_SYMBOL(zstd_init_dstream); |
77 | |
78 | size_t zstd_reset_dstream(zstd_dstream *dstream) |
79 | { |
80 | return ZSTD_resetDStream(dstream); |
81 | } |
82 | EXPORT_SYMBOL(zstd_reset_dstream); |
83 | |
84 | size_t zstd_decompress_stream(zstd_dstream *dstream, zstd_out_buffer *output, |
85 | zstd_in_buffer *input) |
86 | { |
87 | return ZSTD_decompressStream(dstream, output, input); |
88 | } |
89 | EXPORT_SYMBOL(zstd_decompress_stream); |
90 | |
91 | size_t zstd_find_frame_compressed_size(const void *src, size_t src_size) |
92 | { |
93 | return ZSTD_findFrameCompressedSize(src, src_size); |
94 | } |
95 | EXPORT_SYMBOL(zstd_find_frame_compressed_size); |
96 | |
97 | size_t zstd_get_frame_header(zstd_frame_header *header, const void *src, |
98 | size_t src_size) |
99 | { |
100 | return ZSTD_getFrameHeader(header, src, src_size); |
101 | } |
102 | EXPORT_SYMBOL(zstd_get_frame_header); |
103 | |
104 | MODULE_LICENSE("Dual BSD/GPL"); |
105 | MODULE_DESCRIPTION("Zstd Decompressor"); |