xref: /openbmc/linux/fs/ufs/ufs.h (revision f33219b7a90c4779a0b59e11fb35ebc4542db328)
1bcd6d4ecSChristoph Hellwig #ifndef _UFS_UFS_H
2bcd6d4ecSChristoph Hellwig #define _UFS_UFS_H 1
3bcd6d4ecSChristoph Hellwig 
4bcd6d4ecSChristoph Hellwig #define UFS_MAX_GROUP_LOADED 8
5bcd6d4ecSChristoph Hellwig #define UFS_CGNO_EMPTY ((unsigned)-1)
6bcd6d4ecSChristoph Hellwig 
7bcd6d4ecSChristoph Hellwig struct ufs_sb_private_info;
8bcd6d4ecSChristoph Hellwig struct ufs_cg_private_info;
9bcd6d4ecSChristoph Hellwig struct ufs_csum;
10bcd6d4ecSChristoph Hellwig 
11bcd6d4ecSChristoph Hellwig struct ufs_sb_info {
12bcd6d4ecSChristoph Hellwig 	struct ufs_sb_private_info * s_uspi;
13bcd6d4ecSChristoph Hellwig 	struct ufs_csum	* s_csp;
14bcd6d4ecSChristoph Hellwig 	unsigned s_bytesex;
15bcd6d4ecSChristoph Hellwig 	unsigned s_flags;
16bcd6d4ecSChristoph Hellwig 	struct buffer_head ** s_ucg;
17bcd6d4ecSChristoph Hellwig 	struct ufs_cg_private_info * s_ucpi[UFS_MAX_GROUP_LOADED];
18bcd6d4ecSChristoph Hellwig 	unsigned s_cgno[UFS_MAX_GROUP_LOADED];
19bcd6d4ecSChristoph Hellwig 	unsigned short s_cg_loaded;
20bcd6d4ecSChristoph Hellwig 	unsigned s_mount_opt;
21bcd6d4ecSChristoph Hellwig };
22bcd6d4ecSChristoph Hellwig 
23bcd6d4ecSChristoph Hellwig struct ufs_inode_info {
24bcd6d4ecSChristoph Hellwig 	union {
25bcd6d4ecSChristoph Hellwig 		__fs32	i_data[15];
26*f33219b7SDuane Griffin 		__u8	i_symlink[2 * 4 * 15];
27bcd6d4ecSChristoph Hellwig 		__fs64	u2_i_data[15];
28bcd6d4ecSChristoph Hellwig 	} i_u1;
29bcd6d4ecSChristoph Hellwig 	__u32	i_flags;
30bcd6d4ecSChristoph Hellwig 	__u32	i_shadow;
31bcd6d4ecSChristoph Hellwig 	__u32	i_unused1;
32bcd6d4ecSChristoph Hellwig 	__u32	i_unused2;
33bcd6d4ecSChristoph Hellwig 	__u32	i_oeftflag;
34bcd6d4ecSChristoph Hellwig 	__u16	i_osync;
35bcd6d4ecSChristoph Hellwig 	__u64	i_lastfrag;
36bcd6d4ecSChristoph Hellwig 	__u32   i_dir_start_lookup;
37bcd6d4ecSChristoph Hellwig 	struct inode vfs_inode;
38bcd6d4ecSChristoph Hellwig };
39bcd6d4ecSChristoph Hellwig 
40bcd6d4ecSChristoph Hellwig /* mount options */
41bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_ONERROR		0x0000000F
42bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_ONERROR_PANIC		0x00000001
43bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_ONERROR_LOCK		0x00000002
44bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_ONERROR_UMOUNT	0x00000004
45bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_ONERROR_REPAIR	0x00000008
46bcd6d4ecSChristoph Hellwig 
47bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE		0x0000FFF0
48bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_OLD		0x00000010
49bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_44BSD		0x00000020
50bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_SUN		0x00000040
51bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_NEXTSTEP	0x00000080
52bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_NEXTSTEP_CD	0x00000100
53bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_OPENSTEP	0x00000200
54bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_SUNx86	0x00000400
55bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_HP	        0x00000800
56bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_UFS2		0x00001000
57bcd6d4ecSChristoph Hellwig #define UFS_MOUNT_UFSTYPE_SUNOS		0x00002000
58bcd6d4ecSChristoph Hellwig 
59bcd6d4ecSChristoph Hellwig #define ufs_clear_opt(o,opt)	o &= ~UFS_MOUNT_##opt
60bcd6d4ecSChristoph Hellwig #define ufs_set_opt(o,opt)	o |= UFS_MOUNT_##opt
61bcd6d4ecSChristoph Hellwig #define ufs_test_opt(o,opt)	((o) & UFS_MOUNT_##opt)
62bcd6d4ecSChristoph Hellwig 
63bcd6d4ecSChristoph Hellwig /*
64bcd6d4ecSChristoph Hellwig  * Debug code
65bcd6d4ecSChristoph Hellwig  */
66bcd6d4ecSChristoph Hellwig #ifdef CONFIG_UFS_DEBUG
67bcd6d4ecSChristoph Hellwig #	define UFSD(f, a...)	{					\
68bcd6d4ecSChristoph Hellwig 		printk ("UFSD (%s, %d): %s:",				\
699746077aSHarvey Harrison 			__FILE__, __LINE__, __func__);		\
70bcd6d4ecSChristoph Hellwig 		printk (f, ## a);					\
71bcd6d4ecSChristoph Hellwig 	}
72bcd6d4ecSChristoph Hellwig #else
73bcd6d4ecSChristoph Hellwig #	define UFSD(f, a...)	/**/
74bcd6d4ecSChristoph Hellwig #endif
75bcd6d4ecSChristoph Hellwig 
76bcd6d4ecSChristoph Hellwig /* balloc.c */
77bcd6d4ecSChristoph Hellwig extern void ufs_free_fragments (struct inode *, u64, unsigned);
78bcd6d4ecSChristoph Hellwig extern void ufs_free_blocks (struct inode *, u64, unsigned);
79bcd6d4ecSChristoph Hellwig extern u64 ufs_new_fragments(struct inode *, void *, u64, u64,
80bcd6d4ecSChristoph Hellwig 			     unsigned, int *, struct page *);
81bcd6d4ecSChristoph Hellwig 
82bcd6d4ecSChristoph Hellwig /* cylinder.c */
83bcd6d4ecSChristoph Hellwig extern struct ufs_cg_private_info * ufs_load_cylinder (struct super_block *, unsigned);
84bcd6d4ecSChristoph Hellwig extern void ufs_put_cylinder (struct super_block *, unsigned);
85bcd6d4ecSChristoph Hellwig 
86bcd6d4ecSChristoph Hellwig /* dir.c */
87bcd6d4ecSChristoph Hellwig extern const struct inode_operations ufs_dir_inode_operations;
88bcd6d4ecSChristoph Hellwig extern int ufs_add_link (struct dentry *, struct inode *);
89bcd6d4ecSChristoph Hellwig extern ino_t ufs_inode_by_name(struct inode *, struct dentry *);
90bcd6d4ecSChristoph Hellwig extern int ufs_make_empty(struct inode *, struct inode *);
91bcd6d4ecSChristoph Hellwig extern struct ufs_dir_entry *ufs_find_entry(struct inode *, struct dentry *, struct page **);
92bcd6d4ecSChristoph Hellwig extern int ufs_delete_entry(struct inode *, struct ufs_dir_entry *, struct page *);
93bcd6d4ecSChristoph Hellwig extern int ufs_empty_dir (struct inode *);
94bcd6d4ecSChristoph Hellwig extern struct ufs_dir_entry *ufs_dotdot(struct inode *, struct page **);
95bcd6d4ecSChristoph Hellwig extern void ufs_set_link(struct inode *dir, struct ufs_dir_entry *de,
96bcd6d4ecSChristoph Hellwig 			 struct page *page, struct inode *inode);
97bcd6d4ecSChristoph Hellwig 
98bcd6d4ecSChristoph Hellwig /* file.c */
99bcd6d4ecSChristoph Hellwig extern const struct inode_operations ufs_file_inode_operations;
100bcd6d4ecSChristoph Hellwig extern const struct file_operations ufs_file_operations;
101bcd6d4ecSChristoph Hellwig 
102bcd6d4ecSChristoph Hellwig extern const struct address_space_operations ufs_aops;
103bcd6d4ecSChristoph Hellwig 
104bcd6d4ecSChristoph Hellwig /* ialloc.c */
105bcd6d4ecSChristoph Hellwig extern void ufs_free_inode (struct inode *inode);
106bcd6d4ecSChristoph Hellwig extern struct inode * ufs_new_inode (struct inode *, int);
107bcd6d4ecSChristoph Hellwig 
108bcd6d4ecSChristoph Hellwig /* inode.c */
109b55c460dSDavid Howells extern struct inode *ufs_iget(struct super_block *, unsigned long);
110bcd6d4ecSChristoph Hellwig extern int ufs_write_inode (struct inode *, int);
111bcd6d4ecSChristoph Hellwig extern int ufs_sync_inode (struct inode *);
112bcd6d4ecSChristoph Hellwig extern void ufs_delete_inode (struct inode *);
113bcd6d4ecSChristoph Hellwig extern struct buffer_head * ufs_bread (struct inode *, unsigned, int, int *);
114bcd6d4ecSChristoph Hellwig extern int ufs_getfrag_block (struct inode *inode, sector_t fragment, struct buffer_head *bh_result, int create);
115bcd6d4ecSChristoph Hellwig 
116bcd6d4ecSChristoph Hellwig /* namei.c */
117bcd6d4ecSChristoph Hellwig extern const struct file_operations ufs_dir_operations;
118bcd6d4ecSChristoph Hellwig 
119bcd6d4ecSChristoph Hellwig /* super.c */
120bcd6d4ecSChristoph Hellwig extern void ufs_warning (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
121bcd6d4ecSChristoph Hellwig extern void ufs_error (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
122bcd6d4ecSChristoph Hellwig extern void ufs_panic (struct super_block *, const char *, const char *, ...) __attribute__ ((format (printf, 3, 4)));
123bcd6d4ecSChristoph Hellwig 
124bcd6d4ecSChristoph Hellwig /* symlink.c */
125bcd6d4ecSChristoph Hellwig extern const struct inode_operations ufs_fast_symlink_inode_operations;
126bcd6d4ecSChristoph Hellwig 
127bcd6d4ecSChristoph Hellwig /* truncate.c */
128bcd6d4ecSChristoph Hellwig extern int ufs_truncate (struct inode *, loff_t);
129bcd6d4ecSChristoph Hellwig 
130bcd6d4ecSChristoph Hellwig static inline struct ufs_sb_info *UFS_SB(struct super_block *sb)
131bcd6d4ecSChristoph Hellwig {
132bcd6d4ecSChristoph Hellwig 	return sb->s_fs_info;
133bcd6d4ecSChristoph Hellwig }
134bcd6d4ecSChristoph Hellwig 
135bcd6d4ecSChristoph Hellwig static inline struct ufs_inode_info *UFS_I(struct inode *inode)
136bcd6d4ecSChristoph Hellwig {
137bcd6d4ecSChristoph Hellwig 	return container_of(inode, struct ufs_inode_info, vfs_inode);
138bcd6d4ecSChristoph Hellwig }
139bcd6d4ecSChristoph Hellwig 
140bcd6d4ecSChristoph Hellwig /*
141bcd6d4ecSChristoph Hellwig  * Give cylinder group number for a file system block.
142bcd6d4ecSChristoph Hellwig  * Give cylinder group block number for a file system block.
143bcd6d4ecSChristoph Hellwig  */
144bcd6d4ecSChristoph Hellwig /* #define	ufs_dtog(d)	((d) / uspi->s_fpg) */
145bcd6d4ecSChristoph Hellwig static inline u64 ufs_dtog(struct ufs_sb_private_info * uspi, u64 b)
146bcd6d4ecSChristoph Hellwig {
147bcd6d4ecSChristoph Hellwig 	do_div(b, uspi->s_fpg);
148bcd6d4ecSChristoph Hellwig 	return b;
149bcd6d4ecSChristoph Hellwig }
150bcd6d4ecSChristoph Hellwig /* #define	ufs_dtogd(d)	((d) % uspi->s_fpg) */
151bcd6d4ecSChristoph Hellwig static inline u32 ufs_dtogd(struct ufs_sb_private_info * uspi, u64 b)
152bcd6d4ecSChristoph Hellwig {
153bcd6d4ecSChristoph Hellwig 	return do_div(b, uspi->s_fpg);
154bcd6d4ecSChristoph Hellwig }
155bcd6d4ecSChristoph Hellwig 
156bcd6d4ecSChristoph Hellwig #endif /* _UFS_UFS_H */
157