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