18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Name : qnx6_fs.h 48c2ecf20Sopenharmony_ci * Author : Kai Bankett 58c2ecf20Sopenharmony_ci * Function : qnx6 global filesystem definitions 68c2ecf20Sopenharmony_ci * History : 17-01-2012 created 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci#ifndef _LINUX_QNX6_FS_H 98c2ecf20Sopenharmony_ci#define _LINUX_QNX6_FS_H 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/types.h> 128c2ecf20Sopenharmony_ci#include <linux/magic.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#define QNX6_ROOT_INO 1 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci/* for di_status */ 178c2ecf20Sopenharmony_ci#define QNX6_FILE_DIRECTORY 0x01 188c2ecf20Sopenharmony_ci#define QNX6_FILE_DELETED 0x02 198c2ecf20Sopenharmony_ci#define QNX6_FILE_NORMAL 0x03 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define QNX6_SUPERBLOCK_SIZE 0x200 /* superblock always is 512 bytes */ 228c2ecf20Sopenharmony_ci#define QNX6_SUPERBLOCK_AREA 0x1000 /* area reserved for superblock */ 238c2ecf20Sopenharmony_ci#define QNX6_BOOTBLOCK_SIZE 0x2000 /* heading bootblock area */ 248c2ecf20Sopenharmony_ci#define QNX6_DIR_ENTRY_SIZE 0x20 /* dir entry size of 32 bytes */ 258c2ecf20Sopenharmony_ci#define QNX6_INODE_SIZE 0x80 /* each inode is 128 bytes */ 268c2ecf20Sopenharmony_ci#define QNX6_INODE_SIZE_BITS 7 /* inode entry size shift */ 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci#define QNX6_NO_DIRECT_POINTERS 16 /* 16 blockptrs in sbl/inode */ 298c2ecf20Sopenharmony_ci#define QNX6_PTR_MAX_LEVELS 5 /* maximum indirect levels */ 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci/* for filenames */ 328c2ecf20Sopenharmony_ci#define QNX6_SHORT_NAME_MAX 27 338c2ecf20Sopenharmony_ci#define QNX6_LONG_NAME_MAX 510 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci/* list of mount options */ 368c2ecf20Sopenharmony_ci#define QNX6_MOUNT_MMI_FS 0x010000 /* mount as Audi MMI 3G fs */ 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci/* 398c2ecf20Sopenharmony_ci * This is the original qnx6 inode layout on disk. 408c2ecf20Sopenharmony_ci * Each inode is 128 byte long. 418c2ecf20Sopenharmony_ci */ 428c2ecf20Sopenharmony_cistruct qnx6_inode_entry { 438c2ecf20Sopenharmony_ci __fs64 di_size; 448c2ecf20Sopenharmony_ci __fs32 di_uid; 458c2ecf20Sopenharmony_ci __fs32 di_gid; 468c2ecf20Sopenharmony_ci __fs32 di_ftime; 478c2ecf20Sopenharmony_ci __fs32 di_mtime; 488c2ecf20Sopenharmony_ci __fs32 di_atime; 498c2ecf20Sopenharmony_ci __fs32 di_ctime; 508c2ecf20Sopenharmony_ci __fs16 di_mode; 518c2ecf20Sopenharmony_ci __fs16 di_ext_mode; 528c2ecf20Sopenharmony_ci __fs32 di_block_ptr[QNX6_NO_DIRECT_POINTERS]; 538c2ecf20Sopenharmony_ci __u8 di_filelevels; 548c2ecf20Sopenharmony_ci __u8 di_status; 558c2ecf20Sopenharmony_ci __u8 di_unknown2[2]; 568c2ecf20Sopenharmony_ci __fs32 di_zero2[6]; 578c2ecf20Sopenharmony_ci}; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci/* 608c2ecf20Sopenharmony_ci * Each directory entry is maximum 32 bytes long. 618c2ecf20Sopenharmony_ci * If more characters or special characters required it is stored 628c2ecf20Sopenharmony_ci * in the longfilenames structure. 638c2ecf20Sopenharmony_ci */ 648c2ecf20Sopenharmony_cistruct qnx6_dir_entry { 658c2ecf20Sopenharmony_ci __fs32 de_inode; 668c2ecf20Sopenharmony_ci __u8 de_size; 678c2ecf20Sopenharmony_ci char de_fname[QNX6_SHORT_NAME_MAX]; 688c2ecf20Sopenharmony_ci}; 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci/* 718c2ecf20Sopenharmony_ci * Longfilename direntries have a different structure 728c2ecf20Sopenharmony_ci */ 738c2ecf20Sopenharmony_cistruct qnx6_long_dir_entry { 748c2ecf20Sopenharmony_ci __fs32 de_inode; 758c2ecf20Sopenharmony_ci __u8 de_size; 768c2ecf20Sopenharmony_ci __u8 de_unknown[3]; 778c2ecf20Sopenharmony_ci __fs32 de_long_inode; 788c2ecf20Sopenharmony_ci __fs32 de_checksum; 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cistruct qnx6_long_filename { 828c2ecf20Sopenharmony_ci __fs16 lf_size; 838c2ecf20Sopenharmony_ci __u8 lf_fname[QNX6_LONG_NAME_MAX]; 848c2ecf20Sopenharmony_ci}; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cistruct qnx6_root_node { 878c2ecf20Sopenharmony_ci __fs64 size; 888c2ecf20Sopenharmony_ci __fs32 ptr[QNX6_NO_DIRECT_POINTERS]; 898c2ecf20Sopenharmony_ci __u8 levels; 908c2ecf20Sopenharmony_ci __u8 mode; 918c2ecf20Sopenharmony_ci __u8 spare[6]; 928c2ecf20Sopenharmony_ci}; 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_cistruct qnx6_super_block { 958c2ecf20Sopenharmony_ci __fs32 sb_magic; 968c2ecf20Sopenharmony_ci __fs32 sb_checksum; 978c2ecf20Sopenharmony_ci __fs64 sb_serial; 988c2ecf20Sopenharmony_ci __fs32 sb_ctime; /* time the fs was created */ 998c2ecf20Sopenharmony_ci __fs32 sb_atime; /* last access time */ 1008c2ecf20Sopenharmony_ci __fs32 sb_flags; 1018c2ecf20Sopenharmony_ci __fs16 sb_version1; /* filesystem version information */ 1028c2ecf20Sopenharmony_ci __fs16 sb_version2; /* filesystem version information */ 1038c2ecf20Sopenharmony_ci __u8 sb_volumeid[16]; 1048c2ecf20Sopenharmony_ci __fs32 sb_blocksize; 1058c2ecf20Sopenharmony_ci __fs32 sb_num_inodes; 1068c2ecf20Sopenharmony_ci __fs32 sb_free_inodes; 1078c2ecf20Sopenharmony_ci __fs32 sb_num_blocks; 1088c2ecf20Sopenharmony_ci __fs32 sb_free_blocks; 1098c2ecf20Sopenharmony_ci __fs32 sb_allocgroup; 1108c2ecf20Sopenharmony_ci struct qnx6_root_node Inode; 1118c2ecf20Sopenharmony_ci struct qnx6_root_node Bitmap; 1128c2ecf20Sopenharmony_ci struct qnx6_root_node Longfile; 1138c2ecf20Sopenharmony_ci struct qnx6_root_node Unknown; 1148c2ecf20Sopenharmony_ci}; 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_ci/* Audi MMI 3G superblock layout is different to plain qnx6 */ 1178c2ecf20Sopenharmony_cistruct qnx6_mmi_super_block { 1188c2ecf20Sopenharmony_ci __fs32 sb_magic; 1198c2ecf20Sopenharmony_ci __fs32 sb_checksum; 1208c2ecf20Sopenharmony_ci __fs64 sb_serial; 1218c2ecf20Sopenharmony_ci __u8 sb_spare0[12]; 1228c2ecf20Sopenharmony_ci __u8 sb_id[12]; 1238c2ecf20Sopenharmony_ci __fs32 sb_blocksize; 1248c2ecf20Sopenharmony_ci __fs32 sb_num_inodes; 1258c2ecf20Sopenharmony_ci __fs32 sb_free_inodes; 1268c2ecf20Sopenharmony_ci __fs32 sb_num_blocks; 1278c2ecf20Sopenharmony_ci __fs32 sb_free_blocks; 1288c2ecf20Sopenharmony_ci __u8 sb_spare1[4]; 1298c2ecf20Sopenharmony_ci struct qnx6_root_node Inode; 1308c2ecf20Sopenharmony_ci struct qnx6_root_node Bitmap; 1318c2ecf20Sopenharmony_ci struct qnx6_root_node Longfile; 1328c2ecf20Sopenharmony_ci struct qnx6_root_node Unknown; 1338c2ecf20Sopenharmony_ci}; 1348c2ecf20Sopenharmony_ci 1358c2ecf20Sopenharmony_ci#endif 136