xref: /openbmc/linux/fs/befs/befs.h (revision 2ac636b4)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * befs.h
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * Copyright (C) 2001-2002 Will Dyson <will_dyson@pobox.com>
51da177e4SLinus Torvalds  * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)
61da177e4SLinus Torvalds  */
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds #ifndef _LINUX_BEFS_H
91da177e4SLinus Torvalds #define _LINUX_BEFS_H
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #include "befs_fs_types.h"
121da177e4SLinus Torvalds 
131da177e4SLinus Torvalds /* used in debug.c */
141da177e4SLinus Torvalds #define BEFS_VERSION "0.9.3"
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds typedef u64 befs_blocknr_t;
181da177e4SLinus Torvalds /*
191da177e4SLinus Torvalds  * BeFS in memory structures
201da177e4SLinus Torvalds  */
211da177e4SLinus Torvalds 
2209ad0eaeSFabian Frederick struct befs_mount_options {
2331aba059SEric W. Biederman 	kgid_t gid;
2431aba059SEric W. Biederman 	kuid_t uid;
251da177e4SLinus Torvalds 	int use_gid;
261da177e4SLinus Torvalds 	int use_uid;
271da177e4SLinus Torvalds 	int debug;
281da177e4SLinus Torvalds 	char *iocharset;
2909ad0eaeSFabian Frederick };
301da177e4SLinus Torvalds 
31038428fcSFabian Frederick struct befs_sb_info {
321da177e4SLinus Torvalds 	u32 magic1;
331da177e4SLinus Torvalds 	u32 block_size;
341da177e4SLinus Torvalds 	u32 block_shift;
351da177e4SLinus Torvalds 	int byte_order;
361da177e4SLinus Torvalds 	befs_off_t num_blocks;
371da177e4SLinus Torvalds 	befs_off_t used_blocks;
381da177e4SLinus Torvalds 	u32 inode_size;
391da177e4SLinus Torvalds 	u32 magic2;
401da177e4SLinus Torvalds 
411da177e4SLinus Torvalds 	/* Allocation group information */
421da177e4SLinus Torvalds 	u32 blocks_per_ag;
431da177e4SLinus Torvalds 	u32 ag_shift;
441da177e4SLinus Torvalds 	u32 num_ags;
451da177e4SLinus Torvalds 
466ea4558fSSalah Triki 	/* State of the superblock */
476ea4558fSSalah Triki 	u32 flags;
486ea4558fSSalah Triki 
492ac636b4SSalah Triki 	/* Journal log entry */
501da177e4SLinus Torvalds 	befs_block_run log_blocks;
511da177e4SLinus Torvalds 	befs_off_t log_start;
521da177e4SLinus Torvalds 	befs_off_t log_end;
531da177e4SLinus Torvalds 
541da177e4SLinus Torvalds 	befs_inode_addr root_dir;
551da177e4SLinus Torvalds 	befs_inode_addr indices;
561da177e4SLinus Torvalds 	u32 magic3;
571da177e4SLinus Torvalds 
5809ad0eaeSFabian Frederick 	struct befs_mount_options mount_opts;
591da177e4SLinus Torvalds 	struct nls_table *nls;
60038428fcSFabian Frederick };
611da177e4SLinus Torvalds 
62f8ccad21SFabian Frederick struct befs_inode_info {
631da177e4SLinus Torvalds 	u32 i_flags;
641da177e4SLinus Torvalds 	u32 i_type;
651da177e4SLinus Torvalds 
661da177e4SLinus Torvalds 	befs_inode_addr i_inode_num;
671da177e4SLinus Torvalds 	befs_inode_addr i_parent;
681da177e4SLinus Torvalds 	befs_inode_addr i_attribute;
691da177e4SLinus Torvalds 
701da177e4SLinus Torvalds 	union {
711da177e4SLinus Torvalds 		befs_data_stream ds;
721da177e4SLinus Torvalds 		char symlink[BEFS_SYMLINK_LEN];
731da177e4SLinus Torvalds 	} i_data;
741da177e4SLinus Torvalds 
751da177e4SLinus Torvalds 	struct inode vfs_inode;
76f8ccad21SFabian Frederick };
771da177e4SLinus Torvalds 
781da177e4SLinus Torvalds enum befs_err {
791da177e4SLinus Torvalds 	BEFS_OK,
801da177e4SLinus Torvalds 	BEFS_ERR,
811da177e4SLinus Torvalds 	BEFS_BAD_INODE,
821da177e4SLinus Torvalds 	BEFS_BT_END,
831da177e4SLinus Torvalds 	BEFS_BT_EMPTY,
841da177e4SLinus Torvalds 	BEFS_BT_MATCH,
85672a8515SLuis de Bethencourt 	BEFS_BT_OVERFLOW,
861da177e4SLinus Torvalds 	BEFS_BT_NOT_FOUND
871da177e4SLinus Torvalds };
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds 
901da177e4SLinus Torvalds /****************************/
911da177e4SLinus Torvalds /* debug.c */
92dac52fc1SFabian Frederick __printf(2, 3)
931da177e4SLinus Torvalds void befs_error(const struct super_block *sb, const char *fmt, ...);
94dac52fc1SFabian Frederick __printf(2, 3)
951da177e4SLinus Torvalds void befs_warning(const struct super_block *sb, const char *fmt, ...);
96dac52fc1SFabian Frederick __printf(2, 3)
971da177e4SLinus Torvalds void befs_debug(const struct super_block *sb, const char *fmt, ...);
981da177e4SLinus Torvalds 
991da177e4SLinus Torvalds void befs_dump_super_block(const struct super_block *sb, befs_super_block *);
1001da177e4SLinus Torvalds void befs_dump_inode(const struct super_block *sb, befs_inode *);
101a9721f31SAl Viro void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *);
1021da177e4SLinus Torvalds void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *);
1031da177e4SLinus Torvalds /****************************/
1041da177e4SLinus Torvalds 
1051da177e4SLinus Torvalds 
1061da177e4SLinus Torvalds /* Gets a pointer to the private portion of the super_block
1071da177e4SLinus Torvalds  * structure from the public part
1081da177e4SLinus Torvalds  */
109038428fcSFabian Frederick static inline struct befs_sb_info *
1101da177e4SLinus Torvalds BEFS_SB(const struct super_block *super)
1111da177e4SLinus Torvalds {
112038428fcSFabian Frederick 	return (struct befs_sb_info *) super->s_fs_info;
1131da177e4SLinus Torvalds }
1141da177e4SLinus Torvalds 
115f8ccad21SFabian Frederick static inline struct befs_inode_info *
1161da177e4SLinus Torvalds BEFS_I(const struct inode *inode)
1171da177e4SLinus Torvalds {
118db6172c4SRasmus Villemoes 	return container_of(inode, struct befs_inode_info, vfs_inode);
1191da177e4SLinus Torvalds }
1201da177e4SLinus Torvalds 
1211da177e4SLinus Torvalds static inline befs_blocknr_t
12222341d8fSAl Viro iaddr2blockno(struct super_block *sb, const befs_inode_addr *iaddr)
1231da177e4SLinus Torvalds {
1241da177e4SLinus Torvalds 	return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) +
1251da177e4SLinus Torvalds 		iaddr->start);
1261da177e4SLinus Torvalds }
1271da177e4SLinus Torvalds 
1281da177e4SLinus Torvalds static inline befs_inode_addr
1291da177e4SLinus Torvalds blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno)
1301da177e4SLinus Torvalds {
1311da177e4SLinus Torvalds 	befs_inode_addr iaddr;
1321da177e4SLinus Torvalds 	iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift;
1331da177e4SLinus Torvalds 	iaddr.start =
1341da177e4SLinus Torvalds 	    blockno - (iaddr.allocation_group << BEFS_SB(sb)->ag_shift);
1351da177e4SLinus Torvalds 	iaddr.len = 1;
1361da177e4SLinus Torvalds 
1371da177e4SLinus Torvalds 	return iaddr;
1381da177e4SLinus Torvalds }
1391da177e4SLinus Torvalds 
1401da177e4SLinus Torvalds static inline unsigned int
1411da177e4SLinus Torvalds befs_iaddrs_per_block(struct super_block *sb)
1421da177e4SLinus Torvalds {
143a9721f31SAl Viro 	return BEFS_SB(sb)->block_size / sizeof (befs_disk_inode_addr);
1441da177e4SLinus Torvalds }
1451da177e4SLinus Torvalds 
146af10b008SAl Viro #include "endian.h"
147af10b008SAl Viro 
1481da177e4SLinus Torvalds #endif				/* _LINUX_BEFS_H */
149