| /* 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 */ |