xref: /openbmc/linux/include/linux/qnx6_fs.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
25d026c72SKai Bankett /*
35d026c72SKai Bankett  *  Name                 : qnx6_fs.h
45d026c72SKai Bankett  *  Author               : Kai Bankett
55d026c72SKai Bankett  *  Function             : qnx6 global filesystem definitions
65d026c72SKai Bankett  *  History              : 17-01-2012 created
75d026c72SKai Bankett  */
85d026c72SKai Bankett #ifndef _LINUX_QNX6_FS_H
95d026c72SKai Bankett #define _LINUX_QNX6_FS_H
105d026c72SKai Bankett 
115d026c72SKai Bankett #include <linux/types.h>
125d026c72SKai Bankett #include <linux/magic.h>
135d026c72SKai Bankett 
145d026c72SKai Bankett #define QNX6_ROOT_INO 1
155d026c72SKai Bankett 
165d026c72SKai Bankett /* for di_status */
175d026c72SKai Bankett #define QNX6_FILE_DIRECTORY	0x01
185d026c72SKai Bankett #define QNX6_FILE_DELETED	0x02
195d026c72SKai Bankett #define QNX6_FILE_NORMAL	0x03
205d026c72SKai Bankett 
215d026c72SKai Bankett #define QNX6_SUPERBLOCK_SIZE	0x200	/* superblock always is 512 bytes */
225d026c72SKai Bankett #define QNX6_SUPERBLOCK_AREA	0x1000	/* area reserved for superblock */
235d026c72SKai Bankett #define	QNX6_BOOTBLOCK_SIZE	0x2000	/* heading bootblock area */
245d026c72SKai Bankett #define QNX6_DIR_ENTRY_SIZE	0x20	/* dir entry size of 32 bytes */
255d026c72SKai Bankett #define QNX6_INODE_SIZE		0x80	/* each inode is 128 bytes */
265d026c72SKai Bankett #define QNX6_INODE_SIZE_BITS	7	/* inode entry size shift */
275d026c72SKai Bankett 
285d026c72SKai Bankett #define QNX6_NO_DIRECT_POINTERS	16	/* 16 blockptrs in sbl/inode */
295d026c72SKai Bankett #define QNX6_PTR_MAX_LEVELS	5	/* maximum indirect levels */
305d026c72SKai Bankett 
315d026c72SKai Bankett /* for filenames */
325d026c72SKai Bankett #define QNX6_SHORT_NAME_MAX	27
335d026c72SKai Bankett #define QNX6_LONG_NAME_MAX	510
345d026c72SKai Bankett 
355d026c72SKai Bankett /* list of mount options */
365d026c72SKai Bankett #define QNX6_MOUNT_MMI_FS	0x010000 /* mount as Audi MMI 3G fs */
375d026c72SKai Bankett 
385d026c72SKai Bankett /*
395d026c72SKai Bankett  * This is the original qnx6 inode layout on disk.
405d026c72SKai Bankett  * Each inode is 128 byte long.
415d026c72SKai Bankett  */
425d026c72SKai Bankett struct qnx6_inode_entry {
435d026c72SKai Bankett 	__fs64		di_size;
445d026c72SKai Bankett 	__fs32		di_uid;
455d026c72SKai Bankett 	__fs32		di_gid;
465d026c72SKai Bankett 	__fs32		di_ftime;
475d026c72SKai Bankett 	__fs32		di_mtime;
485d026c72SKai Bankett 	__fs32		di_atime;
495d026c72SKai Bankett 	__fs32		di_ctime;
505d026c72SKai Bankett 	__fs16		di_mode;
515d026c72SKai Bankett 	__fs16		di_ext_mode;
525d026c72SKai Bankett 	__fs32		di_block_ptr[QNX6_NO_DIRECT_POINTERS];
535d026c72SKai Bankett 	__u8		di_filelevels;
545d026c72SKai Bankett 	__u8		di_status;
555d026c72SKai Bankett 	__u8		di_unknown2[2];
565d026c72SKai Bankett 	__fs32		di_zero2[6];
575d026c72SKai Bankett };
585d026c72SKai Bankett 
595d026c72SKai Bankett /*
605d026c72SKai Bankett  * Each directory entry is maximum 32 bytes long.
615d026c72SKai Bankett  * If more characters or special characters required it is stored
625d026c72SKai Bankett  * in the longfilenames structure.
635d026c72SKai Bankett  */
645d026c72SKai Bankett struct qnx6_dir_entry {
655d026c72SKai Bankett 	__fs32		de_inode;
665d026c72SKai Bankett 	__u8		de_size;
675d026c72SKai Bankett 	char		de_fname[QNX6_SHORT_NAME_MAX];
685d026c72SKai Bankett };
695d026c72SKai Bankett 
705d026c72SKai Bankett /*
715d026c72SKai Bankett  * Longfilename direntries have a different structure
725d026c72SKai Bankett  */
735d026c72SKai Bankett struct qnx6_long_dir_entry {
745d026c72SKai Bankett 	__fs32		de_inode;
755d026c72SKai Bankett 	__u8		de_size;
765d026c72SKai Bankett 	__u8		de_unknown[3];
775d026c72SKai Bankett 	__fs32		de_long_inode;
785d026c72SKai Bankett 	__fs32		de_checksum;
795d026c72SKai Bankett };
805d026c72SKai Bankett 
815d026c72SKai Bankett struct qnx6_long_filename {
825d026c72SKai Bankett 	__fs16		lf_size;
835d026c72SKai Bankett 	__u8		lf_fname[QNX6_LONG_NAME_MAX];
845d026c72SKai Bankett };
855d026c72SKai Bankett 
865d026c72SKai Bankett struct qnx6_root_node {
875d026c72SKai Bankett 	__fs64		size;
885d026c72SKai Bankett 	__fs32		ptr[QNX6_NO_DIRECT_POINTERS];
895d026c72SKai Bankett 	__u8		levels;
905d026c72SKai Bankett 	__u8		mode;
915d026c72SKai Bankett 	__u8		spare[6];
925d026c72SKai Bankett };
935d026c72SKai Bankett 
945d026c72SKai Bankett struct qnx6_super_block {
955d026c72SKai Bankett 	__fs32		sb_magic;
965d026c72SKai Bankett 	__fs32		sb_checksum;
975d026c72SKai Bankett 	__fs64		sb_serial;
985d026c72SKai Bankett 	__fs32		sb_ctime;	/* time the fs was created */
995d026c72SKai Bankett 	__fs32		sb_atime;	/* last access time */
1005d026c72SKai Bankett 	__fs32		sb_flags;
1015d026c72SKai Bankett 	__fs16		sb_version1;	/* filesystem version information */
1025d026c72SKai Bankett 	__fs16		sb_version2;	/* filesystem version information */
1035d026c72SKai Bankett 	__u8		sb_volumeid[16];
1045d026c72SKai Bankett 	__fs32		sb_blocksize;
1055d026c72SKai Bankett 	__fs32		sb_num_inodes;
1065d026c72SKai Bankett 	__fs32		sb_free_inodes;
1075d026c72SKai Bankett 	__fs32		sb_num_blocks;
1085d026c72SKai Bankett 	__fs32		sb_free_blocks;
1095d026c72SKai Bankett 	__fs32		sb_allocgroup;
1105d026c72SKai Bankett 	struct qnx6_root_node Inode;
1115d026c72SKai Bankett 	struct qnx6_root_node Bitmap;
1125d026c72SKai Bankett 	struct qnx6_root_node Longfile;
1135d026c72SKai Bankett 	struct qnx6_root_node Unknown;
1145d026c72SKai Bankett };
1155d026c72SKai Bankett 
1165d026c72SKai Bankett /* Audi MMI 3G superblock layout is different to plain qnx6 */
1175d026c72SKai Bankett struct qnx6_mmi_super_block {
1185d026c72SKai Bankett 	__fs32		sb_magic;
1195d026c72SKai Bankett 	__fs32		sb_checksum;
1205d026c72SKai Bankett 	__fs64		sb_serial;
1215d026c72SKai Bankett 	__u8		sb_spare0[12];
1225d026c72SKai Bankett 	__u8		sb_id[12];
1235d026c72SKai Bankett 	__fs32		sb_blocksize;
1245d026c72SKai Bankett 	__fs32		sb_num_inodes;
1255d026c72SKai Bankett 	__fs32		sb_free_inodes;
1265d026c72SKai Bankett 	__fs32		sb_num_blocks;
1275d026c72SKai Bankett 	__fs32		sb_free_blocks;
1285d026c72SKai Bankett 	__u8		sb_spare1[4];
1295d026c72SKai Bankett 	struct qnx6_root_node Inode;
1305d026c72SKai Bankett 	struct qnx6_root_node Bitmap;
1315d026c72SKai Bankett 	struct qnx6_root_node Longfile;
1325d026c72SKai Bankett 	struct qnx6_root_node Unknown;
1335d026c72SKai Bankett };
1345d026c72SKai Bankett 
1355d026c72SKai Bankett #endif
136