1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Name : qnx4_fs.h 4*4882a593Smuzhiyun * Author : Richard Frowijn 5*4882a593Smuzhiyun * Function : qnx4 global filesystem definitions 6*4882a593Smuzhiyun * History : 23-03-1998 created 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #ifndef _LINUX_QNX4_FS_H 9*4882a593Smuzhiyun #define _LINUX_QNX4_FS_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/types.h> 12*4882a593Smuzhiyun #include <linux/qnxtypes.h> 13*4882a593Smuzhiyun #include <linux/magic.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define QNX4_ROOT_INO 1 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define QNX4_MAX_XTNTS_PER_XBLK 60 18*4882a593Smuzhiyun /* for di_status */ 19*4882a593Smuzhiyun #define QNX4_FILE_USED 0x01 20*4882a593Smuzhiyun #define QNX4_FILE_MODIFIED 0x02 21*4882a593Smuzhiyun #define QNX4_FILE_BUSY 0x04 22*4882a593Smuzhiyun #define QNX4_FILE_LINK 0x08 23*4882a593Smuzhiyun #define QNX4_FILE_INODE 0x10 24*4882a593Smuzhiyun #define QNX4_FILE_FSYSCLEAN 0x20 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define QNX4_I_MAP_SLOTS 8 27*4882a593Smuzhiyun #define QNX4_Z_MAP_SLOTS 64 28*4882a593Smuzhiyun #define QNX4_VALID_FS 0x0001 /* Clean fs. */ 29*4882a593Smuzhiyun #define QNX4_ERROR_FS 0x0002 /* fs has errors. */ 30*4882a593Smuzhiyun #define QNX4_BLOCK_SIZE 0x200 /* blocksize of 512 bytes */ 31*4882a593Smuzhiyun #define QNX4_BLOCK_SIZE_BITS 9 /* blocksize shift */ 32*4882a593Smuzhiyun #define QNX4_DIR_ENTRY_SIZE 0x040 /* dir entry size of 64 bytes */ 33*4882a593Smuzhiyun #define QNX4_DIR_ENTRY_SIZE_BITS 6 /* dir entry size shift */ 34*4882a593Smuzhiyun #define QNX4_XBLK_ENTRY_SIZE 0x200 /* xblk entry size */ 35*4882a593Smuzhiyun #define QNX4_INODES_PER_BLOCK 0x08 /* 512 / 64 */ 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* for filenames */ 38*4882a593Smuzhiyun #define QNX4_SHORT_NAME_MAX 16 39*4882a593Smuzhiyun #define QNX4_NAME_MAX 48 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* 42*4882a593Smuzhiyun * This is the original qnx4 inode layout on disk. 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun struct qnx4_inode_entry { 45*4882a593Smuzhiyun char di_fname[QNX4_SHORT_NAME_MAX]; 46*4882a593Smuzhiyun qnx4_off_t di_size; 47*4882a593Smuzhiyun qnx4_xtnt_t di_first_xtnt; 48*4882a593Smuzhiyun __le32 di_xblk; 49*4882a593Smuzhiyun __le32 di_ftime; 50*4882a593Smuzhiyun __le32 di_mtime; 51*4882a593Smuzhiyun __le32 di_atime; 52*4882a593Smuzhiyun __le32 di_ctime; 53*4882a593Smuzhiyun qnx4_nxtnt_t di_num_xtnts; 54*4882a593Smuzhiyun qnx4_mode_t di_mode; 55*4882a593Smuzhiyun qnx4_muid_t di_uid; 56*4882a593Smuzhiyun qnx4_mgid_t di_gid; 57*4882a593Smuzhiyun qnx4_nlink_t di_nlink; 58*4882a593Smuzhiyun __u8 di_zero[4]; 59*4882a593Smuzhiyun qnx4_ftype_t di_type; 60*4882a593Smuzhiyun __u8 di_status; 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun struct qnx4_link_info { 64*4882a593Smuzhiyun char dl_fname[QNX4_NAME_MAX]; 65*4882a593Smuzhiyun __le32 dl_inode_blk; 66*4882a593Smuzhiyun __u8 dl_inode_ndx; 67*4882a593Smuzhiyun __u8 dl_spare[10]; 68*4882a593Smuzhiyun __u8 dl_status; 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun struct qnx4_xblk { 72*4882a593Smuzhiyun __le32 xblk_next_xblk; 73*4882a593Smuzhiyun __le32 xblk_prev_xblk; 74*4882a593Smuzhiyun __u8 xblk_num_xtnts; 75*4882a593Smuzhiyun __u8 xblk_spare[3]; 76*4882a593Smuzhiyun __le32 xblk_num_blocks; 77*4882a593Smuzhiyun qnx4_xtnt_t xblk_xtnts[QNX4_MAX_XTNTS_PER_XBLK]; 78*4882a593Smuzhiyun char xblk_signature[8]; 79*4882a593Smuzhiyun qnx4_xtnt_t xblk_first_xtnt; 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun struct qnx4_super_block { 83*4882a593Smuzhiyun struct qnx4_inode_entry RootDir; 84*4882a593Smuzhiyun struct qnx4_inode_entry Inode; 85*4882a593Smuzhiyun struct qnx4_inode_entry Boot; 86*4882a593Smuzhiyun struct qnx4_inode_entry AltBoot; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun #endif 90