18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci#ifndef DECOMPRESSOR_H
38c2ecf20Sopenharmony_ci#define DECOMPRESSOR_H
48c2ecf20Sopenharmony_ci/*
58c2ecf20Sopenharmony_ci * Squashfs - a compressed read only filesystem for Linux
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
88c2ecf20Sopenharmony_ci * Phillip Lougher <phillip@squashfs.org.uk>
98c2ecf20Sopenharmony_ci *
108c2ecf20Sopenharmony_ci * decompressor.h
118c2ecf20Sopenharmony_ci */
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <linux/bio.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistruct squashfs_decompressor {
168c2ecf20Sopenharmony_ci	void	*(*init)(struct squashfs_sb_info *, void *);
178c2ecf20Sopenharmony_ci	void	*(*comp_opts)(struct squashfs_sb_info *, void *, int);
188c2ecf20Sopenharmony_ci	void	(*free)(void *);
198c2ecf20Sopenharmony_ci	int	(*decompress)(struct squashfs_sb_info *, void *,
208c2ecf20Sopenharmony_ci		struct bio *, int, int, struct squashfs_page_actor *);
218c2ecf20Sopenharmony_ci	int	id;
228c2ecf20Sopenharmony_ci	char	*name;
238c2ecf20Sopenharmony_ci	int	supported;
248c2ecf20Sopenharmony_ci};
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistatic inline void *squashfs_comp_opts(struct squashfs_sb_info *msblk,
278c2ecf20Sopenharmony_ci							void *buff, int length)
288c2ecf20Sopenharmony_ci{
298c2ecf20Sopenharmony_ci	return msblk->decompressor->comp_opts ?
308c2ecf20Sopenharmony_ci		msblk->decompressor->comp_opts(msblk, buff, length) : NULL;
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci#ifdef CONFIG_SQUASHFS_XZ
348c2ecf20Sopenharmony_ciextern const struct squashfs_decompressor squashfs_xz_comp_ops;
358c2ecf20Sopenharmony_ci#endif
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci#ifdef CONFIG_SQUASHFS_LZ4
388c2ecf20Sopenharmony_ciextern const struct squashfs_decompressor squashfs_lz4_comp_ops;
398c2ecf20Sopenharmony_ci#endif
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci#ifdef CONFIG_SQUASHFS_LZO
428c2ecf20Sopenharmony_ciextern const struct squashfs_decompressor squashfs_lzo_comp_ops;
438c2ecf20Sopenharmony_ci#endif
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#ifdef CONFIG_SQUASHFS_ZLIB
468c2ecf20Sopenharmony_ciextern const struct squashfs_decompressor squashfs_zlib_comp_ops;
478c2ecf20Sopenharmony_ci#endif
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci#ifdef CONFIG_SQUASHFS_ZSTD
508c2ecf20Sopenharmony_ciextern const struct squashfs_decompressor squashfs_zstd_comp_ops;
518c2ecf20Sopenharmony_ci#endif
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#endif
54