xref: /openbmc/linux/fs/befs/befs.h (revision b2441318)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * befs.h
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * Copyright (C) 2001-2002 Will Dyson <will_dyson@pobox.com>
61da177e4SLinus Torvalds  * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)
71da177e4SLinus Torvalds  */
81da177e4SLinus Torvalds 
91da177e4SLinus Torvalds #ifndef _LINUX_BEFS_H
101da177e4SLinus Torvalds #define _LINUX_BEFS_H
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #include "befs_fs_types.h"
131da177e4SLinus Torvalds 
141da177e4SLinus Torvalds /* used in debug.c */
151da177e4SLinus Torvalds #define BEFS_VERSION "0.9.3"
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds typedef u64 befs_blocknr_t;
191da177e4SLinus Torvalds /*
201da177e4SLinus Torvalds  * BeFS in memory structures
211da177e4SLinus Torvalds  */
221da177e4SLinus Torvalds 
2309ad0eaeSFabian Frederick struct befs_mount_options {
2431aba059SEric W. Biederman 	kgid_t gid;
2531aba059SEric W. Biederman 	kuid_t uid;
261da177e4SLinus Torvalds 	int use_gid;
271da177e4SLinus Torvalds 	int use_uid;
281da177e4SLinus Torvalds 	int debug;
291da177e4SLinus Torvalds 	char *iocharset;
3009ad0eaeSFabian Frederick };
311da177e4SLinus Torvalds 
32038428fcSFabian Frederick struct befs_sb_info {
331da177e4SLinus Torvalds 	u32 magic1;
341da177e4SLinus Torvalds 	u32 block_size;
351da177e4SLinus Torvalds 	u32 block_shift;
361da177e4SLinus Torvalds 	int byte_order;
371da177e4SLinus Torvalds 	befs_off_t num_blocks;
381da177e4SLinus Torvalds 	befs_off_t used_blocks;
391da177e4SLinus Torvalds 	u32 inode_size;
401da177e4SLinus Torvalds 	u32 magic2;
411da177e4SLinus Torvalds 
421da177e4SLinus Torvalds 	/* Allocation group information */
431da177e4SLinus Torvalds 	u32 blocks_per_ag;
441da177e4SLinus Torvalds 	u32 ag_shift;
451da177e4SLinus Torvalds 	u32 num_ags;
461da177e4SLinus Torvalds 
476ea4558fSSalah Triki 	/* State of the superblock */
486ea4558fSSalah Triki 	u32 flags;
496ea4558fSSalah Triki 
502ac636b4SSalah Triki 	/* Journal log entry */
511da177e4SLinus Torvalds 	befs_block_run log_blocks;
521da177e4SLinus Torvalds 	befs_off_t log_start;
531da177e4SLinus Torvalds 	befs_off_t log_end;
541da177e4SLinus Torvalds 
551da177e4SLinus Torvalds 	befs_inode_addr root_dir;
561da177e4SLinus Torvalds 	befs_inode_addr indices;
571da177e4SLinus Torvalds 	u32 magic3;
581da177e4SLinus Torvalds 
5909ad0eaeSFabian Frederick 	struct befs_mount_options mount_opts;
601da177e4SLinus Torvalds 	struct nls_table *nls;
61038428fcSFabian Frederick };
621da177e4SLinus Torvalds 
63f8ccad21SFabian Frederick struct befs_inode_info {
641da177e4SLinus Torvalds 	u32 i_flags;
651da177e4SLinus Torvalds 	u32 i_type;
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds 	befs_inode_addr i_inode_num;
681da177e4SLinus Torvalds 	befs_inode_addr i_parent;
691da177e4SLinus Torvalds 	befs_inode_addr i_attribute;
701da177e4SLinus Torvalds 
711da177e4SLinus Torvalds 	union {
721da177e4SLinus Torvalds 		befs_data_stream ds;
731da177e4SLinus Torvalds 		char symlink[BEFS_SYMLINK_LEN];
741da177e4SLinus Torvalds 	} i_data;
751da177e4SLinus Torvalds 
761da177e4SLinus Torvalds 	struct inode vfs_inode;
77f8ccad21SFabian Frederick };
781da177e4SLinus Torvalds 
791da177e4SLinus Torvalds enum befs_err {
801da177e4SLinus Torvalds 	BEFS_OK,
811da177e4SLinus Torvalds 	BEFS_ERR,
821da177e4SLinus Torvalds 	BEFS_BAD_INODE,
831da177e4SLinus Torvalds 	BEFS_BT_END,
841da177e4SLinus Torvalds 	BEFS_BT_EMPTY,
851da177e4SLinus Torvalds 	BEFS_BT_MATCH,
86672a8515SLuis de Bethencourt 	BEFS_BT_OVERFLOW,
871da177e4SLinus Torvalds 	BEFS_BT_NOT_FOUND
881da177e4SLinus Torvalds };
891da177e4SLinus Torvalds 
901da177e4SLinus Torvalds 
911da177e4SLinus Torvalds /****************************/
921da177e4SLinus Torvalds /* debug.c */
93dac52fc1SFabian Frederick __printf(2, 3)
941da177e4SLinus Torvalds void befs_error(const struct super_block *sb, const char *fmt, ...);
95dac52fc1SFabian Frederick __printf(2, 3)
961da177e4SLinus Torvalds void befs_warning(const struct super_block *sb, const char *fmt, ...);
97dac52fc1SFabian Frederick __printf(2, 3)
981da177e4SLinus Torvalds void befs_debug(const struct super_block *sb, const char *fmt, ...);
991da177e4SLinus Torvalds 
1001da177e4SLinus Torvalds void befs_dump_super_block(const struct super_block *sb, befs_super_block *);
1011da177e4SLinus Torvalds void befs_dump_inode(const struct super_block *sb, befs_inode *);
102a9721f31SAl Viro void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *);
1031da177e4SLinus Torvalds void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *);
1041da177e4SLinus Torvalds /****************************/
1051da177e4SLinus Torvalds 
1061da177e4SLinus Torvalds 
1071da177e4SLinus Torvalds /* Gets a pointer to the private portion of the super_block
1081da177e4SLinus Torvalds  * structure from the public part
1091da177e4SLinus Torvalds  */
110038428fcSFabian Frederick static inline struct befs_sb_info *
BEFS_SB(const struct super_block * super)1111da177e4SLinus Torvalds BEFS_SB(const struct super_block *super)
1121da177e4SLinus Torvalds {
113038428fcSFabian Frederick 	return (struct befs_sb_info *) super->s_fs_info;
1141da177e4SLinus Torvalds }
1151da177e4SLinus Torvalds 
116f8ccad21SFabian Frederick static inline struct befs_inode_info *
BEFS_I(const struct inode * inode)1171da177e4SLinus Torvalds BEFS_I(const struct inode *inode)
1181da177e4SLinus Torvalds {
119db6172c4SRasmus Villemoes 	return container_of(inode, struct befs_inode_info, vfs_inode);
1201da177e4SLinus Torvalds }
1211da177e4SLinus Torvalds 
1221da177e4SLinus Torvalds static inline befs_blocknr_t
iaddr2blockno(struct super_block * sb,const befs_inode_addr * iaddr)12322341d8fSAl Viro iaddr2blockno(struct super_block *sb, const befs_inode_addr *iaddr)
1241da177e4SLinus Torvalds {
1251da177e4SLinus Torvalds 	return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) +
1261da177e4SLinus Torvalds 		iaddr->start);
1271da177e4SLinus Torvalds }
1281da177e4SLinus Torvalds 
1291da177e4SLinus Torvalds static inline befs_inode_addr
blockno2iaddr(struct super_block * sb,befs_blocknr_t blockno)1301da177e4SLinus Torvalds blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno)
1311da177e4SLinus Torvalds {
1321da177e4SLinus Torvalds 	befs_inode_addr iaddr;
13312ecb38dSLuis de Bethencourt 
1341da177e4SLinus Torvalds 	iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift;
1351da177e4SLinus Torvalds 	iaddr.start =
1361da177e4SLinus Torvalds 	    blockno - (iaddr.allocation_group << BEFS_SB(sb)->ag_shift);
1371da177e4SLinus Torvalds 	iaddr.len = 1;
1381da177e4SLinus Torvalds 
1391da177e4SLinus Torvalds 	return iaddr;
1401da177e4SLinus Torvalds }
1411da177e4SLinus Torvalds 
1421da177e4SLinus Torvalds static inline unsigned int
befs_iaddrs_per_block(struct super_block * sb)1431da177e4SLinus Torvalds befs_iaddrs_per_block(struct super_block *sb)
1441da177e4SLinus Torvalds {
145a9721f31SAl Viro 	return BEFS_SB(sb)->block_size / sizeof(befs_disk_inode_addr);
1461da177e4SLinus Torvalds }
1471da177e4SLinus Torvalds 
148af10b008SAl Viro #include "endian.h"
149af10b008SAl Viro 
1501da177e4SLinus Torvalds #endif				/* _LINUX_BEFS_H */
151