1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2020 Bootlin 4 * 5 * Author: Joao Marcos Costa <joaomarcos.costa@bootlin.com> 6 */ 7 8 #ifndef SQFS_DECOMPRESSOR_H 9 #define SQFS_DECOMPRESSOR_H 10 11 #include <stdint.h> 12 #include "sqfs_filesystem.h" 13 14 #define SQFS_COMP_ZLIB 1 15 #define SQFS_COMP_LZMA 2 16 #define SQFS_COMP_LZO 3 17 #define SQFS_COMP_XZ 4 18 #define SQFS_COMP_LZ4 5 19 #define SQFS_COMP_ZSTD 6 20 21 /* LZMA does not support any compression options */ 22 23 struct squashfs_gzip_opts { 24 u32 compression_level; 25 u16 window_size; 26 u16 strategies; 27 }; 28 29 struct squashfs_xz_opts { 30 u32 dictionary_size; 31 u32 executable_filters; 32 }; 33 34 struct squashfs_lz4_opts { 35 u32 version; 36 u32 flags; 37 }; 38 39 struct squashfs_zstd_opts { 40 u32 compression_level; 41 }; 42 43 struct squashfs_lzo_opts { 44 u32 algorithm; 45 u32 level; 46 }; 47 48 union squashfs_compression_opts { 49 struct squashfs_gzip_opts *gzip; 50 struct squashfs_xz_opts *xz; 51 struct squashfs_lz4_opts *lz4; 52 struct squashfs_zstd_opts *zstd; 53 struct squashfs_lzo_opts *lzo; 54 }; 55 56 int sqfs_decompress(struct squashfs_ctxt *ctxt, void *dest, 57 unsigned long *dest_len, void *source, u32 src_len); 58 int sqfs_decompressor_init(struct squashfs_ctxt *ctxt); 59 void sqfs_decompressor_cleanup(struct squashfs_ctxt *ctxt); 60 61 #endif /* SQFS_DECOMPRESSOR_H */ 62