| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Transparent compression codec interface. | |
| * | |
| * Copyright (c) 2026 LG Electronics Co., Ltd. | |
| */ | |
| #ifndef _NTFS_CODEC_H | |
| #define _NTFS_CODEC_H | |
| #include <linux/types.h> | |
| #include <linux/fs.h> | |
| #include <linux/mm.h> | |
| struct compress_context; | |
| enum ntfs_codec_id { | |
| NTFS_CODEC_LZNT1, | |
| #ifdef CONFIG_NTFS_FS_WOF_COMPRESSION | |
| NTFS_CODEC_XPRESS4K, | |
| NTFS_CODEC_XPRESS8K, | |
| NTFS_CODEC_XPRESS16K, | |
| NTFS_CODEC_LZX32K, | |
| #endif | |
| }; | |
| struct ntfs_codec_ops { | |
| enum ntfs_codec_id id; | |
| const char *name; | |
| size_t (*scratch_size)(u32 chunk_size); | |
| int (*decompress_chunk)(void *scratch, | |
| const void *src, size_t src_len, | |
| void *dst, size_t dst_len, | |
| u32 chunk_size); | |
| int (*decompress_pages)(struct page *dest_pages[], | |
| int completed_pages[], | |
| int *dest_index, int *dest_ofs, | |
| int dest_max_index, int dest_max_ofs, | |
| int xpage, char *xpage_done, | |
| u8 *cb_start, u32 cb_size, | |
| loff_t i_size, s64 initialized_size); | |
| int (*compress_subblock)(struct compress_context *pctx, | |
| const char *inbuf, int bufsize, char *outbuf); | |
| }; | |
| extern const struct ntfs_codec_ops ntfs_lznt1_codec_ops; | |
| #ifdef CONFIG_NTFS_FS_WOF_COMPRESSION | |
| extern const struct ntfs_codec_ops ntfs_xpress4k_codec_ops; | |
| extern const struct ntfs_codec_ops ntfs_xpress8k_codec_ops; | |
| extern const struct ntfs_codec_ops ntfs_xpress16k_codec_ops; | |
| extern const struct ntfs_codec_ops ntfs_lzx32k_codec_ops; | |
| #endif | |
| #endif /* _NTFS_CODEC_H */ |