xref: /OK3568_Linux_fs/kernel/include/linux/qnx6_fs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  Name                 : qnx6_fs.h
4*4882a593Smuzhiyun  *  Author               : Kai Bankett
5*4882a593Smuzhiyun  *  Function             : qnx6 global filesystem definitions
6*4882a593Smuzhiyun  *  History              : 17-01-2012 created
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun #ifndef _LINUX_QNX6_FS_H
9*4882a593Smuzhiyun #define _LINUX_QNX6_FS_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/types.h>
12*4882a593Smuzhiyun #include <linux/magic.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define QNX6_ROOT_INO 1
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* for di_status */
17*4882a593Smuzhiyun #define QNX6_FILE_DIRECTORY	0x01
18*4882a593Smuzhiyun #define QNX6_FILE_DELETED	0x02
19*4882a593Smuzhiyun #define QNX6_FILE_NORMAL	0x03
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #define QNX6_SUPERBLOCK_SIZE	0x200	/* superblock always is 512 bytes */
22*4882a593Smuzhiyun #define QNX6_SUPERBLOCK_AREA	0x1000	/* area reserved for superblock */
23*4882a593Smuzhiyun #define	QNX6_BOOTBLOCK_SIZE	0x2000	/* heading bootblock area */
24*4882a593Smuzhiyun #define QNX6_DIR_ENTRY_SIZE	0x20	/* dir entry size of 32 bytes */
25*4882a593Smuzhiyun #define QNX6_INODE_SIZE		0x80	/* each inode is 128 bytes */
26*4882a593Smuzhiyun #define QNX6_INODE_SIZE_BITS	7	/* inode entry size shift */
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define QNX6_NO_DIRECT_POINTERS	16	/* 16 blockptrs in sbl/inode */
29*4882a593Smuzhiyun #define QNX6_PTR_MAX_LEVELS	5	/* maximum indirect levels */
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /* for filenames */
32*4882a593Smuzhiyun #define QNX6_SHORT_NAME_MAX	27
33*4882a593Smuzhiyun #define QNX6_LONG_NAME_MAX	510
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /* list of mount options */
36*4882a593Smuzhiyun #define QNX6_MOUNT_MMI_FS	0x010000 /* mount as Audi MMI 3G fs */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /*
39*4882a593Smuzhiyun  * This is the original qnx6 inode layout on disk.
40*4882a593Smuzhiyun  * Each inode is 128 byte long.
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun struct qnx6_inode_entry {
43*4882a593Smuzhiyun 	__fs64		di_size;
44*4882a593Smuzhiyun 	__fs32		di_uid;
45*4882a593Smuzhiyun 	__fs32		di_gid;
46*4882a593Smuzhiyun 	__fs32		di_ftime;
47*4882a593Smuzhiyun 	__fs32		di_mtime;
48*4882a593Smuzhiyun 	__fs32		di_atime;
49*4882a593Smuzhiyun 	__fs32		di_ctime;
50*4882a593Smuzhiyun 	__fs16		di_mode;
51*4882a593Smuzhiyun 	__fs16		di_ext_mode;
52*4882a593Smuzhiyun 	__fs32		di_block_ptr[QNX6_NO_DIRECT_POINTERS];
53*4882a593Smuzhiyun 	__u8		di_filelevels;
54*4882a593Smuzhiyun 	__u8		di_status;
55*4882a593Smuzhiyun 	__u8		di_unknown2[2];
56*4882a593Smuzhiyun 	__fs32		di_zero2[6];
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /*
60*4882a593Smuzhiyun  * Each directory entry is maximum 32 bytes long.
61*4882a593Smuzhiyun  * If more characters or special characters required it is stored
62*4882a593Smuzhiyun  * in the longfilenames structure.
63*4882a593Smuzhiyun  */
64*4882a593Smuzhiyun struct qnx6_dir_entry {
65*4882a593Smuzhiyun 	__fs32		de_inode;
66*4882a593Smuzhiyun 	__u8		de_size;
67*4882a593Smuzhiyun 	char		de_fname[QNX6_SHORT_NAME_MAX];
68*4882a593Smuzhiyun };
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun /*
71*4882a593Smuzhiyun  * Longfilename direntries have a different structure
72*4882a593Smuzhiyun  */
73*4882a593Smuzhiyun struct qnx6_long_dir_entry {
74*4882a593Smuzhiyun 	__fs32		de_inode;
75*4882a593Smuzhiyun 	__u8		de_size;
76*4882a593Smuzhiyun 	__u8		de_unknown[3];
77*4882a593Smuzhiyun 	__fs32		de_long_inode;
78*4882a593Smuzhiyun 	__fs32		de_checksum;
79*4882a593Smuzhiyun };
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun struct qnx6_long_filename {
82*4882a593Smuzhiyun 	__fs16		lf_size;
83*4882a593Smuzhiyun 	__u8		lf_fname[QNX6_LONG_NAME_MAX];
84*4882a593Smuzhiyun };
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun struct qnx6_root_node {
87*4882a593Smuzhiyun 	__fs64		size;
88*4882a593Smuzhiyun 	__fs32		ptr[QNX6_NO_DIRECT_POINTERS];
89*4882a593Smuzhiyun 	__u8		levels;
90*4882a593Smuzhiyun 	__u8		mode;
91*4882a593Smuzhiyun 	__u8		spare[6];
92*4882a593Smuzhiyun };
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun struct qnx6_super_block {
95*4882a593Smuzhiyun 	__fs32		sb_magic;
96*4882a593Smuzhiyun 	__fs32		sb_checksum;
97*4882a593Smuzhiyun 	__fs64		sb_serial;
98*4882a593Smuzhiyun 	__fs32		sb_ctime;	/* time the fs was created */
99*4882a593Smuzhiyun 	__fs32		sb_atime;	/* last access time */
100*4882a593Smuzhiyun 	__fs32		sb_flags;
101*4882a593Smuzhiyun 	__fs16		sb_version1;	/* filesystem version information */
102*4882a593Smuzhiyun 	__fs16		sb_version2;	/* filesystem version information */
103*4882a593Smuzhiyun 	__u8		sb_volumeid[16];
104*4882a593Smuzhiyun 	__fs32		sb_blocksize;
105*4882a593Smuzhiyun 	__fs32		sb_num_inodes;
106*4882a593Smuzhiyun 	__fs32		sb_free_inodes;
107*4882a593Smuzhiyun 	__fs32		sb_num_blocks;
108*4882a593Smuzhiyun 	__fs32		sb_free_blocks;
109*4882a593Smuzhiyun 	__fs32		sb_allocgroup;
110*4882a593Smuzhiyun 	struct qnx6_root_node Inode;
111*4882a593Smuzhiyun 	struct qnx6_root_node Bitmap;
112*4882a593Smuzhiyun 	struct qnx6_root_node Longfile;
113*4882a593Smuzhiyun 	struct qnx6_root_node Unknown;
114*4882a593Smuzhiyun };
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* Audi MMI 3G superblock layout is different to plain qnx6 */
117*4882a593Smuzhiyun struct qnx6_mmi_super_block {
118*4882a593Smuzhiyun 	__fs32		sb_magic;
119*4882a593Smuzhiyun 	__fs32		sb_checksum;
120*4882a593Smuzhiyun 	__fs64		sb_serial;
121*4882a593Smuzhiyun 	__u8		sb_spare0[12];
122*4882a593Smuzhiyun 	__u8		sb_id[12];
123*4882a593Smuzhiyun 	__fs32		sb_blocksize;
124*4882a593Smuzhiyun 	__fs32		sb_num_inodes;
125*4882a593Smuzhiyun 	__fs32		sb_free_inodes;
126*4882a593Smuzhiyun 	__fs32		sb_num_blocks;
127*4882a593Smuzhiyun 	__fs32		sb_free_blocks;
128*4882a593Smuzhiyun 	__u8		sb_spare1[4];
129*4882a593Smuzhiyun 	struct qnx6_root_node Inode;
130*4882a593Smuzhiyun 	struct qnx6_root_node Bitmap;
131*4882a593Smuzhiyun 	struct qnx6_root_node Longfile;
132*4882a593Smuzhiyun 	struct qnx6_root_node Unknown;
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun #endif
136