xref: /OK3568_Linux_fs/kernel/include/uapi/linux/minix_fs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef _LINUX_MINIX_FS_H
3*4882a593Smuzhiyun #define _LINUX_MINIX_FS_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/types.h>
6*4882a593Smuzhiyun #include <linux/magic.h>
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun /*
9*4882a593Smuzhiyun  * The minix filesystem constants/structures
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /*
13*4882a593Smuzhiyun  * Thanks to Kees J Bot for sending me the definitions of the new
14*4882a593Smuzhiyun  * minix filesystem (aka V2) with bigger inodes and 32-bit block
15*4882a593Smuzhiyun  * pointers.
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define MINIX_ROOT_INO 1
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* Not the same as the bogus LINK_MAX in <linux/limits.h>. Oh well. */
21*4882a593Smuzhiyun #define MINIX_LINK_MAX	250
22*4882a593Smuzhiyun #define MINIX2_LINK_MAX	65530
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun #define MINIX_I_MAP_SLOTS	8
25*4882a593Smuzhiyun #define MINIX_Z_MAP_SLOTS	64
26*4882a593Smuzhiyun #define MINIX_VALID_FS		0x0001		/* Clean fs. */
27*4882a593Smuzhiyun #define MINIX_ERROR_FS		0x0002		/* fs has errors. */
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /*
32*4882a593Smuzhiyun  * This is the original minix inode layout on disk.
33*4882a593Smuzhiyun  * Note the 8-bit gid and atime and ctime.
34*4882a593Smuzhiyun  */
35*4882a593Smuzhiyun struct minix_inode {
36*4882a593Smuzhiyun 	__u16 i_mode;
37*4882a593Smuzhiyun 	__u16 i_uid;
38*4882a593Smuzhiyun 	__u32 i_size;
39*4882a593Smuzhiyun 	__u32 i_time;
40*4882a593Smuzhiyun 	__u8  i_gid;
41*4882a593Smuzhiyun 	__u8  i_nlinks;
42*4882a593Smuzhiyun 	__u16 i_zone[9];
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun /*
46*4882a593Smuzhiyun  * The new minix inode has all the time entries, as well as
47*4882a593Smuzhiyun  * long block numbers and a third indirect block (7+1+1+1
48*4882a593Smuzhiyun  * instead of 7+1+1). Also, some previously 8-bit values are
49*4882a593Smuzhiyun  * now 16-bit. The inode is now 64 bytes instead of 32.
50*4882a593Smuzhiyun  */
51*4882a593Smuzhiyun struct minix2_inode {
52*4882a593Smuzhiyun 	__u16 i_mode;
53*4882a593Smuzhiyun 	__u16 i_nlinks;
54*4882a593Smuzhiyun 	__u16 i_uid;
55*4882a593Smuzhiyun 	__u16 i_gid;
56*4882a593Smuzhiyun 	__u32 i_size;
57*4882a593Smuzhiyun 	__u32 i_atime;
58*4882a593Smuzhiyun 	__u32 i_mtime;
59*4882a593Smuzhiyun 	__u32 i_ctime;
60*4882a593Smuzhiyun 	__u32 i_zone[10];
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /*
64*4882a593Smuzhiyun  * minix super-block data on disk
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun struct minix_super_block {
67*4882a593Smuzhiyun 	__u16 s_ninodes;
68*4882a593Smuzhiyun 	__u16 s_nzones;
69*4882a593Smuzhiyun 	__u16 s_imap_blocks;
70*4882a593Smuzhiyun 	__u16 s_zmap_blocks;
71*4882a593Smuzhiyun 	__u16 s_firstdatazone;
72*4882a593Smuzhiyun 	__u16 s_log_zone_size;
73*4882a593Smuzhiyun 	__u32 s_max_size;
74*4882a593Smuzhiyun 	__u16 s_magic;
75*4882a593Smuzhiyun 	__u16 s_state;
76*4882a593Smuzhiyun 	__u32 s_zones;
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /*
80*4882a593Smuzhiyun  * V3 minix super-block data on disk
81*4882a593Smuzhiyun  */
82*4882a593Smuzhiyun struct minix3_super_block {
83*4882a593Smuzhiyun 	__u32 s_ninodes;
84*4882a593Smuzhiyun 	__u16 s_pad0;
85*4882a593Smuzhiyun 	__u16 s_imap_blocks;
86*4882a593Smuzhiyun 	__u16 s_zmap_blocks;
87*4882a593Smuzhiyun 	__u16 s_firstdatazone;
88*4882a593Smuzhiyun 	__u16 s_log_zone_size;
89*4882a593Smuzhiyun 	__u16 s_pad1;
90*4882a593Smuzhiyun 	__u32 s_max_size;
91*4882a593Smuzhiyun 	__u32 s_zones;
92*4882a593Smuzhiyun 	__u16 s_magic;
93*4882a593Smuzhiyun 	__u16 s_pad2;
94*4882a593Smuzhiyun 	__u16 s_blocksize;
95*4882a593Smuzhiyun 	__u8  s_disk_version;
96*4882a593Smuzhiyun };
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun struct minix_dir_entry {
99*4882a593Smuzhiyun 	__u16 inode;
100*4882a593Smuzhiyun 	char name[0];
101*4882a593Smuzhiyun };
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun struct minix3_dir_entry {
104*4882a593Smuzhiyun 	__u32 inode;
105*4882a593Smuzhiyun 	char name[0];
106*4882a593Smuzhiyun };
107*4882a593Smuzhiyun #endif
108