1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Squashfs - a compressed read only filesystem for Linux
4  *
5  * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
6  * Phillip Lougher <[email protected]>
7  *
8  * squashfs.h
9  */
10 
11 #define TRACE(s, args...)	pr_debug("SQUASHFS: "s, ## args)
12 
13 #define ERROR(s, args...)	pr_err("SQUASHFS error: "s, ## args)
14 
15 #define WARNING(s, args...)	pr_warn("SQUASHFS: "s, ## args)
16 
17 #ifdef CONFIG_SQUASHFS_FILE_CACHE
18 #define SQUASHFS_READ_PAGES msblk->max_thread_num
19 #else
20 #define SQUASHFS_READ_PAGES 0
21 #endif
22 
23 /* block.c */
24 extern int squashfs_read_data(struct super_block *, u64, int, u64 *,
25 				struct squashfs_page_actor *);
26 
27 /* cache.c */
28 extern struct squashfs_cache *squashfs_cache_init(char *, int, int);
29 extern void squashfs_cache_delete(struct squashfs_cache *);
30 extern struct squashfs_cache_entry *squashfs_cache_get(struct super_block *,
31 				struct squashfs_cache *, u64, int);
32 extern void squashfs_cache_put(struct squashfs_cache_entry *);
33 extern int squashfs_copy_data(void *, struct squashfs_cache_entry *, int, int);
34 extern int squashfs_read_metadata(struct super_block *, void *, u64 *,
35 				int *, int);
36 extern struct squashfs_cache_entry *squashfs_get_fragment(struct super_block *,
37 				u64, int);
38 extern struct squashfs_cache_entry *squashfs_get_datablock(struct super_block *,
39 				u64, int);
40 extern void *squashfs_read_table(struct super_block *, u64, int);
41 
42 /* decompressor.c */
43 extern const struct squashfs_decompressor *squashfs_lookup_decompressor(int);
44 extern void *squashfs_decompressor_setup(struct super_block *, unsigned short);
45 
46 /* decompressor_xxx.c */
47 
48 struct squashfs_decompressor_thread_ops {
49 	void * (*create)(struct squashfs_sb_info *msblk, void *comp_opts);
50 	void (*destroy)(struct squashfs_sb_info *msblk);
51 	int (*decompress)(struct squashfs_sb_info *msblk, struct bio *bio,
52 			  int offset, int length, struct squashfs_page_actor *output);
53 	int (*max_decompressors)(void);
54 };
55 
56 #ifdef CONFIG_SQUASHFS_DECOMP_SINGLE
57 extern const struct squashfs_decompressor_thread_ops squashfs_decompressor_single;
58 #endif
59 #ifdef CONFIG_SQUASHFS_DECOMP_MULTI
60 extern const struct squashfs_decompressor_thread_ops squashfs_decompressor_multi;
61 #endif
62 #ifdef CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU
63 extern const struct squashfs_decompressor_thread_ops squashfs_decompressor_percpu;
64 #endif
65 
66 /* export.c */
67 extern __le64 *squashfs_read_inode_lookup_table(struct super_block *, u64, u64,
68 				unsigned int);
69 
70 /* fragment.c */
71 extern int squashfs_frag_lookup(struct super_block *, unsigned int, u64 *);
72 extern __le64 *squashfs_read_fragment_index_table(struct super_block *,
73 				u64, u64, unsigned int);
74 
75 /* file.c */
76 void squashfs_copy_cache(struct folio *, struct squashfs_cache_entry *,
77 		size_t bytes, size_t offset);
78 
79 /* file_xxx.c */
80 int squashfs_readpage_block(struct folio *, u64 block, int bsize, int expected);
81 
82 /* id.c */
83 extern int squashfs_get_id(struct super_block *, unsigned int, unsigned int *);
84 extern __le64 *squashfs_read_id_index_table(struct super_block *, u64, u64,
85 				unsigned short);
86 
87 /* inode.c */
88 extern struct inode *squashfs_iget(struct super_block *, long long,
89 				unsigned int);
90 extern int squashfs_read_inode(struct inode *, long long);
91 
92 /* xattr.c */
93 extern ssize_t squashfs_listxattr(struct dentry *, char *, size_t);
94 
95 /*
96  * Inodes, files,  decompressor and xattr operations
97  */
98 
99 /* dir.c */
100 extern const struct file_operations squashfs_dir_ops;
101 
102 /* export.c */
103 extern const struct export_operations squashfs_export_ops;
104 
105 /* file.c */
106 extern const struct address_space_operations squashfs_aops;
107 
108 /* inode.c */
109 extern const struct inode_operations squashfs_inode_ops;
110 
111 /* namei.c */
112 extern const struct inode_operations squashfs_dir_inode_ops;
113 
114 /* symlink.c */
115 extern const struct address_space_operations squashfs_symlink_aops;
116 extern const struct inode_operations squashfs_symlink_inode_ops;
117 
118 /* xattr.c */
119 extern const struct xattr_handler * const squashfs_xattr_handlers[];
120