]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
1da177e4 | 2 | /* |
f30c2269 | 3 | * fs/befs/befs_fs_types.h |
1da177e4 LT |
4 | * |
5 | * Copyright (C) 2001 Will Dyson ([email protected]) | |
6 | * | |
7 | * | |
8 | * | |
9 | * from linux/include/linux/befs_fs.h | |
10 | * | |
11 | * Copyright (C) 1999 Makoto Kato ([email protected]) | |
12 | * | |
13 | */ | |
14 | ||
15 | #ifndef _LINUX_BEFS_FS_TYPES | |
16 | #define _LINUX_BEFS_FS_TYPES | |
17 | ||
18 | #ifdef __KERNEL__ | |
19 | #include <linux/types.h> | |
20 | #endif /*__KERNEL__*/ | |
21 | ||
22 | #define PACKED __attribute__ ((__packed__)) | |
23 | ||
24 | /* | |
25 | * Max name lengths of BFS | |
26 | */ | |
27 | ||
28 | #define BEFS_NAME_LEN 255 | |
29 | ||
30 | #define BEFS_SYMLINK_LEN 144 | |
31 | #define BEFS_NUM_DIRECT_BLOCKS 12 | |
32 | #define B_OS_NAME_LENGTH 32 | |
33 | ||
34 | /* The datastream blocks mapped by the double-indirect | |
35 | * block are always 4 fs blocks long. | |
36 | * This eliminates the need for linear searches among | |
37 | * the potentially huge number of indirect blocks | |
38 | * | |
39 | * Err. Should that be 4 fs blocks or 4k??? | |
40 | * It matters on large blocksize volumes | |
41 | */ | |
42 | #define BEFS_DBLINDIR_BRUN_LEN 4 | |
43 | ||
44 | /* | |
45 | * Flags of superblock | |
46 | */ | |
47 | ||
48 | enum super_flags { | |
49 | BEFS_BYTESEX_BE, | |
50 | BEFS_BYTESEX_LE, | |
51 | BEFS_CLEAN = 0x434c454e, | |
52 | BEFS_DIRTY = 0x44495254, | |
53 | BEFS_SUPER_MAGIC1 = 0x42465331, /* BFS1 */ | |
54 | BEFS_SUPER_MAGIC2 = 0xdd121031, | |
55 | BEFS_SUPER_MAGIC3 = 0x15b6830e, | |
56 | }; | |
57 | ||
58 | #define BEFS_BYTEORDER_NATIVE 0x42494745 | |
12ecb38d LB |
59 | #define BEFS_BYTEORDER_NATIVE_LE ((__force fs32)cpu_to_le32(BEFS_BYTEORDER_NATIVE)) |
60 | #define BEFS_BYTEORDER_NATIVE_BE ((__force fs32)cpu_to_be32(BEFS_BYTEORDER_NATIVE)) | |
1da177e4 LT |
61 | |
62 | #define BEFS_SUPER_MAGIC BEFS_SUPER_MAGIC1 | |
12ecb38d LB |
63 | #define BEFS_SUPER_MAGIC1_LE ((__force fs32)cpu_to_le32(BEFS_SUPER_MAGIC1)) |
64 | #define BEFS_SUPER_MAGIC1_BE ((__force fs32)cpu_to_be32(BEFS_SUPER_MAGIC1)) | |
1da177e4 LT |
65 | |
66 | /* | |
67 | * Flags of inode | |
68 | */ | |
69 | ||
70 | #define BEFS_INODE_MAGIC1 0x3bbe0ad9 | |
71 | ||
72 | enum inode_flags { | |
73 | BEFS_INODE_IN_USE = 0x00000001, | |
74 | BEFS_ATTR_INODE = 0x00000004, | |
75 | BEFS_INODE_LOGGED = 0x00000008, | |
76 | BEFS_INODE_DELETED = 0x00000010, | |
77 | BEFS_LONG_SYMLINK = 0x00000040, | |
78 | BEFS_PERMANENT_FLAG = 0x0000ffff, | |
79 | BEFS_INODE_NO_CREATE = 0x00010000, | |
80 | BEFS_INODE_WAS_WRITTEN = 0x00020000, | |
81 | BEFS_NO_TRANSACTION = 0x00040000, | |
82 | }; | |
e60f749b | 83 | /* |
1da177e4 LT |
84 | * On-Disk datastructures of BeFS |
85 | */ | |
86 | ||
1151895f AV |
87 | typedef u64 __bitwise fs64; |
88 | typedef u32 __bitwise fs32; | |
89 | typedef u16 __bitwise fs16; | |
90 | ||
1da177e4 | 91 | typedef u64 befs_off_t; |
a9721f31 | 92 | typedef fs64 befs_time_t; |
1da177e4 LT |
93 | |
94 | /* Block runs */ | |
a9721f31 AV |
95 | typedef struct { |
96 | fs32 allocation_group; | |
97 | fs16 start; | |
98 | fs16 len; | |
99 | } PACKED befs_disk_block_run; | |
100 | ||
1da177e4 LT |
101 | typedef struct { |
102 | u32 allocation_group; | |
103 | u16 start; | |
104 | u16 len; | |
105 | } PACKED befs_block_run; | |
106 | ||
a9721f31 | 107 | typedef befs_disk_block_run befs_disk_inode_addr; |
1da177e4 LT |
108 | typedef befs_block_run befs_inode_addr; |
109 | ||
110 | /* | |
111 | * The Superblock Structure | |
112 | */ | |
113 | typedef struct { | |
114 | char name[B_OS_NAME_LENGTH]; | |
a9721f31 AV |
115 | fs32 magic1; |
116 | fs32 fs_byte_order; | |
1da177e4 | 117 | |
a9721f31 AV |
118 | fs32 block_size; |
119 | fs32 block_shift; | |
1da177e4 | 120 | |
a9721f31 AV |
121 | fs64 num_blocks; |
122 | fs64 used_blocks; | |
1da177e4 | 123 | |
a9721f31 | 124 | fs32 inode_size; |
1da177e4 | 125 | |
a9721f31 AV |
126 | fs32 magic2; |
127 | fs32 blocks_per_ag; | |
128 | fs32 ag_shift; | |
129 | fs32 num_ags; | |
1da177e4 | 130 | |
a9721f31 | 131 | fs32 flags; |
1da177e4 | 132 | |
a9721f31 AV |
133 | befs_disk_block_run log_blocks; |
134 | fs64 log_start; | |
135 | fs64 log_end; | |
1da177e4 | 136 | |
a9721f31 AV |
137 | fs32 magic3; |
138 | befs_disk_inode_addr root_dir; | |
139 | befs_disk_inode_addr indices; | |
1da177e4 LT |
140 | |
141 | } PACKED befs_super_block; | |
142 | ||
e60f749b | 143 | /* |
1da177e4 LT |
144 | * Note: the indirect and dbl_indir block_runs may |
145 | * be longer than one block! | |
146 | */ | |
a9721f31 AV |
147 | typedef struct { |
148 | befs_disk_block_run direct[BEFS_NUM_DIRECT_BLOCKS]; | |
149 | fs64 max_direct_range; | |
150 | befs_disk_block_run indirect; | |
151 | fs64 max_indirect_range; | |
152 | befs_disk_block_run double_indirect; | |
153 | fs64 max_double_indirect_range; | |
154 | fs64 size; | |
155 | } PACKED befs_disk_data_stream; | |
156 | ||
1da177e4 LT |
157 | typedef struct { |
158 | befs_block_run direct[BEFS_NUM_DIRECT_BLOCKS]; | |
159 | befs_off_t max_direct_range; | |
160 | befs_block_run indirect; | |
161 | befs_off_t max_indirect_range; | |
162 | befs_block_run double_indirect; | |
163 | befs_off_t max_double_indirect_range; | |
164 | befs_off_t size; | |
165 | } PACKED befs_data_stream; | |
166 | ||
167 | /* Attribute */ | |
168 | typedef struct { | |
a9721f31 AV |
169 | fs32 type; |
170 | fs16 name_size; | |
171 | fs16 data_size; | |
1da177e4 LT |
172 | char name[1]; |
173 | } PACKED befs_small_data; | |
174 | ||
175 | /* Inode structure */ | |
176 | typedef struct { | |
a9721f31 AV |
177 | fs32 magic1; |
178 | befs_disk_inode_addr inode_num; | |
179 | fs32 uid; | |
180 | fs32 gid; | |
181 | fs32 mode; | |
182 | fs32 flags; | |
1da177e4 LT |
183 | befs_time_t create_time; |
184 | befs_time_t last_modified_time; | |
a9721f31 AV |
185 | befs_disk_inode_addr parent; |
186 | befs_disk_inode_addr attributes; | |
187 | fs32 type; | |
1da177e4 | 188 | |
a9721f31 AV |
189 | fs32 inode_size; |
190 | fs32 etc; /* not use */ | |
1da177e4 LT |
191 | |
192 | union { | |
a9721f31 | 193 | befs_disk_data_stream datastream; |
1da177e4 LT |
194 | char symlink[BEFS_SYMLINK_LEN]; |
195 | } data; | |
196 | ||
a9721f31 | 197 | fs32 pad[4]; /* not use */ |
1da177e4 LT |
198 | befs_small_data small_data[1]; |
199 | } PACKED befs_inode; | |
200 | ||
201 | /* | |
202 | * B+tree superblock | |
203 | */ | |
204 | ||
205 | #define BEFS_BTREE_MAGIC 0x69f6c2e8 | |
206 | ||
207 | enum btree_types { | |
208 | BTREE_STRING_TYPE = 0, | |
209 | BTREE_INT32_TYPE = 1, | |
210 | BTREE_UINT32_TYPE = 2, | |
211 | BTREE_INT64_TYPE = 3, | |
212 | BTREE_UINT64_TYPE = 4, | |
213 | BTREE_FLOAT_TYPE = 5, | |
214 | BTREE_DOUBLE_TYPE = 6 | |
215 | }; | |
216 | ||
a9721f31 AV |
217 | typedef struct { |
218 | fs32 magic; | |
219 | fs32 node_size; | |
220 | fs32 max_depth; | |
221 | fs32 data_type; | |
222 | fs64 root_node_ptr; | |
223 | fs64 free_node_ptr; | |
224 | fs64 max_size; | |
225 | } PACKED befs_disk_btree_super; | |
226 | ||
1da177e4 LT |
227 | typedef struct { |
228 | u32 magic; | |
229 | u32 node_size; | |
230 | u32 max_depth; | |
231 | u32 data_type; | |
232 | befs_off_t root_node_ptr; | |
233 | befs_off_t free_node_ptr; | |
234 | befs_off_t max_size; | |
235 | } PACKED befs_btree_super; | |
236 | ||
237 | /* | |
25985edc | 238 | * Header structure of each btree node |
1da177e4 | 239 | */ |
a9721f31 AV |
240 | typedef struct { |
241 | fs64 left; | |
242 | fs64 right; | |
243 | fs64 overflow; | |
244 | fs16 all_key_count; | |
245 | fs16 all_key_length; | |
246 | } PACKED befs_btree_nodehead; | |
247 | ||
1da177e4 LT |
248 | typedef struct { |
249 | befs_off_t left; | |
250 | befs_off_t right; | |
251 | befs_off_t overflow; | |
252 | u16 all_key_count; | |
253 | u16 all_key_length; | |
a9721f31 | 254 | } PACKED befs_host_btree_nodehead; |
1da177e4 LT |
255 | |
256 | #endif /* _LINUX_BEFS_FS_TYPES */ |