Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  *  Name                 : qnx6_fs.h
0004  *  Author               : Kai Bankett
0005  *  Function             : qnx6 global filesystem definitions
0006  *  History              : 17-01-2012 created
0007  */
0008 #ifndef _LINUX_QNX6_FS_H
0009 #define _LINUX_QNX6_FS_H
0010 
0011 #include <linux/types.h>
0012 #include <linux/magic.h>
0013 
0014 #define QNX6_ROOT_INO 1
0015 
0016 /* for di_status */
0017 #define QNX6_FILE_DIRECTORY 0x01
0018 #define QNX6_FILE_DELETED   0x02
0019 #define QNX6_FILE_NORMAL    0x03
0020 
0021 #define QNX6_SUPERBLOCK_SIZE    0x200   /* superblock always is 512 bytes */
0022 #define QNX6_SUPERBLOCK_AREA    0x1000  /* area reserved for superblock */
0023 #define QNX6_BOOTBLOCK_SIZE 0x2000  /* heading bootblock area */
0024 #define QNX6_DIR_ENTRY_SIZE 0x20    /* dir entry size of 32 bytes */
0025 #define QNX6_INODE_SIZE     0x80    /* each inode is 128 bytes */
0026 #define QNX6_INODE_SIZE_BITS    7   /* inode entry size shift */
0027 
0028 #define QNX6_NO_DIRECT_POINTERS 16  /* 16 blockptrs in sbl/inode */
0029 #define QNX6_PTR_MAX_LEVELS 5   /* maximum indirect levels */
0030 
0031 /* for filenames */
0032 #define QNX6_SHORT_NAME_MAX 27
0033 #define QNX6_LONG_NAME_MAX  510
0034 
0035 /* list of mount options */
0036 #define QNX6_MOUNT_MMI_FS   0x010000 /* mount as Audi MMI 3G fs */
0037 
0038 /*
0039  * This is the original qnx6 inode layout on disk.
0040  * Each inode is 128 byte long.
0041  */
0042 struct qnx6_inode_entry {
0043     __fs64      di_size;
0044     __fs32      di_uid;
0045     __fs32      di_gid;
0046     __fs32      di_ftime;
0047     __fs32      di_mtime;
0048     __fs32      di_atime;
0049     __fs32      di_ctime;
0050     __fs16      di_mode;
0051     __fs16      di_ext_mode;
0052     __fs32      di_block_ptr[QNX6_NO_DIRECT_POINTERS];
0053     __u8        di_filelevels;
0054     __u8        di_status;
0055     __u8        di_unknown2[2];
0056     __fs32      di_zero2[6];
0057 };
0058 
0059 /*
0060  * Each directory entry is maximum 32 bytes long.
0061  * If more characters or special characters required it is stored
0062  * in the longfilenames structure.
0063  */
0064 struct qnx6_dir_entry {
0065     __fs32      de_inode;
0066     __u8        de_size;
0067     char        de_fname[QNX6_SHORT_NAME_MAX];
0068 };
0069 
0070 /*
0071  * Longfilename direntries have a different structure
0072  */
0073 struct qnx6_long_dir_entry {
0074     __fs32      de_inode;
0075     __u8        de_size;
0076     __u8        de_unknown[3];
0077     __fs32      de_long_inode;
0078     __fs32      de_checksum;
0079 };
0080 
0081 struct qnx6_long_filename {
0082     __fs16      lf_size;
0083     __u8        lf_fname[QNX6_LONG_NAME_MAX];
0084 };
0085 
0086 struct qnx6_root_node {
0087     __fs64      size;
0088     __fs32      ptr[QNX6_NO_DIRECT_POINTERS];
0089     __u8        levels;
0090     __u8        mode;
0091     __u8        spare[6];
0092 };
0093 
0094 struct qnx6_super_block {
0095     __fs32      sb_magic;
0096     __fs32      sb_checksum;
0097     __fs64      sb_serial;
0098     __fs32      sb_ctime;   /* time the fs was created */
0099     __fs32      sb_atime;   /* last access time */
0100     __fs32      sb_flags;
0101     __fs16      sb_version1;    /* filesystem version information */
0102     __fs16      sb_version2;    /* filesystem version information */
0103     __u8        sb_volumeid[16];
0104     __fs32      sb_blocksize;
0105     __fs32      sb_num_inodes;
0106     __fs32      sb_free_inodes;
0107     __fs32      sb_num_blocks;
0108     __fs32      sb_free_blocks;
0109     __fs32      sb_allocgroup;
0110     struct qnx6_root_node Inode;
0111     struct qnx6_root_node Bitmap;
0112     struct qnx6_root_node Longfile;
0113     struct qnx6_root_node Unknown;
0114 };
0115 
0116 /* Audi MMI 3G superblock layout is different to plain qnx6 */
0117 struct qnx6_mmi_super_block {
0118     __fs32      sb_magic;
0119     __fs32      sb_checksum;
0120     __fs64      sb_serial;
0121     __u8        sb_spare0[12];
0122     __u8        sb_id[12];
0123     __fs32      sb_blocksize;
0124     __fs32      sb_num_inodes;
0125     __fs32      sb_free_inodes;
0126     __fs32      sb_num_blocks;
0127     __fs32      sb_free_blocks;
0128     __u8        sb_spare1[4];
0129     struct qnx6_root_node Inode;
0130     struct qnx6_root_node Bitmap;
0131     struct qnx6_root_node Longfile;
0132     struct qnx6_root_node Unknown;
0133 };
0134 
0135 #endif