|
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 |