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