include/linux/qnx4_fs.h
changeset 0 aa628870c1d3
child 2 d1f6d8b6f81c
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 /*
       
     2  *  Name                         : qnx4_fs.h
       
     3  *  Author                       : Richard Frowijn
       
     4  *  Function                     : qnx4 global filesystem definitions
       
     5  *  Version                      : 1.0.2
       
     6  *  Last modified                : 2000-01-31
       
     7  *
       
     8  *  History                      : 23-03-1998 created
       
     9  */
       
    10 #ifndef _LINUX_QNX4_FS_H
       
    11 #define _LINUX_QNX4_FS_H
       
    12 
       
    13 #include <linux/qnxtypes.h>
       
    14 #include <linux/magic.h>
       
    15 
       
    16 #define QNX4_ROOT_INO 1
       
    17 
       
    18 #define QNX4_MAX_XTNTS_PER_XBLK	60
       
    19 /* for di_status */
       
    20 #define QNX4_FILE_USED          0x01
       
    21 #define QNX4_FILE_MODIFIED      0x02
       
    22 #define QNX4_FILE_BUSY          0x04
       
    23 #define QNX4_FILE_LINK          0x08
       
    24 #define QNX4_FILE_INODE         0x10
       
    25 #define QNX4_FILE_FSYSCLEAN     0x20
       
    26 
       
    27 #define QNX4_I_MAP_SLOTS	8
       
    28 #define QNX4_Z_MAP_SLOTS	64
       
    29 #define QNX4_VALID_FS		0x0001	/* Clean fs. */
       
    30 #define QNX4_ERROR_FS		0x0002	/* fs has errors. */
       
    31 #define QNX4_BLOCK_SIZE         0x200	/* blocksize of 512 bytes */
       
    32 #define QNX4_BLOCK_SIZE_BITS    9	/* blocksize shift */
       
    33 #define QNX4_DIR_ENTRY_SIZE     0x040	/* dir entry size of 64 bytes */
       
    34 #define QNX4_DIR_ENTRY_SIZE_BITS 6	/* dir entry size shift */
       
    35 #define QNX4_XBLK_ENTRY_SIZE    0x200	/* xblk entry size */
       
    36 #define QNX4_INODES_PER_BLOCK   0x08	/* 512 / 64 */
       
    37 
       
    38 /* for filenames */
       
    39 #define QNX4_SHORT_NAME_MAX	16
       
    40 #define QNX4_NAME_MAX		48
       
    41 
       
    42 /*
       
    43  * This is the original qnx4 inode layout on disk.
       
    44  */
       
    45 struct qnx4_inode_entry {
       
    46 	char		di_fname[QNX4_SHORT_NAME_MAX];
       
    47 	qnx4_off_t	di_size;
       
    48 	qnx4_xtnt_t	di_first_xtnt;
       
    49 	__le32		di_xblk;
       
    50 	__le32		di_ftime;
       
    51 	__le32		di_mtime;
       
    52 	__le32		di_atime;
       
    53 	__le32		di_ctime;
       
    54 	qnx4_nxtnt_t	di_num_xtnts;
       
    55 	qnx4_mode_t	di_mode;
       
    56 	qnx4_muid_t	di_uid;
       
    57 	qnx4_mgid_t	di_gid;
       
    58 	qnx4_nlink_t	di_nlink;
       
    59 	__u8		di_zero[4];
       
    60 	qnx4_ftype_t	di_type;
       
    61 	__u8		di_status;
       
    62 };
       
    63 
       
    64 struct qnx4_link_info {
       
    65 	char		dl_fname[QNX4_NAME_MAX];
       
    66 	__le32		dl_inode_blk;
       
    67 	__u8		dl_inode_ndx;
       
    68 	__u8		dl_spare[10];
       
    69 	__u8		dl_status;
       
    70 };
       
    71 
       
    72 struct qnx4_xblk {
       
    73 	__le32		xblk_next_xblk;
       
    74 	__le32		xblk_prev_xblk;
       
    75 	__u8		xblk_num_xtnts;
       
    76 	__u8		xblk_spare[3];
       
    77 	__le32		xblk_num_blocks;
       
    78 	qnx4_xtnt_t	xblk_xtnts[QNX4_MAX_XTNTS_PER_XBLK];
       
    79 	char		xblk_signature[8];
       
    80 	qnx4_xtnt_t	xblk_first_xtnt;
       
    81 };
       
    82 
       
    83 struct qnx4_super_block {
       
    84 	struct qnx4_inode_entry RootDir;
       
    85 	struct qnx4_inode_entry Inode;
       
    86 	struct qnx4_inode_entry Boot;
       
    87 	struct qnx4_inode_entry AltBoot;
       
    88 };
       
    89 
       
    90 #ifdef __KERNEL__
       
    91 
       
    92 #define QNX4_DEBUG 0
       
    93 
       
    94 #if QNX4_DEBUG
       
    95 #define QNX4DEBUG(X) printk X
       
    96 #else
       
    97 #define QNX4DEBUG(X) (void) 0
       
    98 #endif
       
    99 
       
   100 struct qnx4_sb_info {
       
   101 	struct buffer_head	*sb_buf;	/* superblock buffer */
       
   102 	struct qnx4_super_block	*sb;		/* our superblock */
       
   103 	unsigned int		Version;	/* may be useful */
       
   104 	struct qnx4_inode_entry	*BitMap;	/* useful */
       
   105 };
       
   106 
       
   107 struct qnx4_inode_info {
       
   108 	struct qnx4_inode_entry raw;
       
   109 	loff_t mmu_private;
       
   110 	struct inode vfs_inode;
       
   111 };
       
   112 
       
   113 extern struct inode *qnx4_iget(struct super_block *, unsigned long);
       
   114 extern struct dentry *qnx4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd);
       
   115 extern unsigned long qnx4_count_free_blocks(struct super_block *sb);
       
   116 extern unsigned long qnx4_block_map(struct inode *inode, long iblock);
       
   117 
       
   118 extern struct buffer_head *qnx4_bread(struct inode *, int, int);
       
   119 
       
   120 extern const struct inode_operations qnx4_file_inode_operations;
       
   121 extern const struct inode_operations qnx4_dir_inode_operations;
       
   122 extern const struct file_operations qnx4_file_operations;
       
   123 extern const struct file_operations qnx4_dir_operations;
       
   124 extern int qnx4_is_free(struct super_block *sb, long block);
       
   125 extern int qnx4_set_bitmap(struct super_block *sb, long block, int busy);
       
   126 extern int qnx4_create(struct inode *inode, struct dentry *dentry, int mode, struct nameidata *nd);
       
   127 extern void qnx4_truncate(struct inode *inode);
       
   128 extern void qnx4_free_inode(struct inode *inode);
       
   129 extern int qnx4_unlink(struct inode *dir, struct dentry *dentry);
       
   130 extern int qnx4_rmdir(struct inode *dir, struct dentry *dentry);
       
   131 extern int qnx4_sync_file(struct file *file, struct dentry *dentry, int);
       
   132 extern int qnx4_sync_inode(struct inode *inode);
       
   133 
       
   134 static inline struct qnx4_sb_info *qnx4_sb(struct super_block *sb)
       
   135 {
       
   136 	return sb->s_fs_info;
       
   137 }
       
   138 
       
   139 static inline struct qnx4_inode_info *qnx4_i(struct inode *inode)
       
   140 {
       
   141 	return container_of(inode, struct qnx4_inode_info, vfs_inode);
       
   142 }
       
   143 
       
   144 static inline struct qnx4_inode_entry *qnx4_raw_inode(struct inode *inode)
       
   145 {
       
   146 	return &qnx4_i(inode)->raw;
       
   147 }
       
   148 
       
   149 #endif				/* __KERNEL__ */
       
   150 
       
   151 #endif