xref: /OK3568_Linux_fs/kernel/fs/befs/befs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * befs.h
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2001-2002 Will Dyson <will_dyson@pobox.com>
6*4882a593Smuzhiyun  * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef _LINUX_BEFS_H
10*4882a593Smuzhiyun #define _LINUX_BEFS_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include "befs_fs_types.h"
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* used in debug.c */
15*4882a593Smuzhiyun #define BEFS_VERSION "0.9.3"
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun typedef u64 befs_blocknr_t;
19*4882a593Smuzhiyun /*
20*4882a593Smuzhiyun  * BeFS in memory structures
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun struct befs_mount_options {
24*4882a593Smuzhiyun 	kgid_t gid;
25*4882a593Smuzhiyun 	kuid_t uid;
26*4882a593Smuzhiyun 	int use_gid;
27*4882a593Smuzhiyun 	int use_uid;
28*4882a593Smuzhiyun 	int debug;
29*4882a593Smuzhiyun 	char *iocharset;
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun struct befs_sb_info {
33*4882a593Smuzhiyun 	u32 magic1;
34*4882a593Smuzhiyun 	u32 block_size;
35*4882a593Smuzhiyun 	u32 block_shift;
36*4882a593Smuzhiyun 	int byte_order;
37*4882a593Smuzhiyun 	befs_off_t num_blocks;
38*4882a593Smuzhiyun 	befs_off_t used_blocks;
39*4882a593Smuzhiyun 	u32 inode_size;
40*4882a593Smuzhiyun 	u32 magic2;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun 	/* Allocation group information */
43*4882a593Smuzhiyun 	u32 blocks_per_ag;
44*4882a593Smuzhiyun 	u32 ag_shift;
45*4882a593Smuzhiyun 	u32 num_ags;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	/* State of the superblock */
48*4882a593Smuzhiyun 	u32 flags;
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	/* Journal log entry */
51*4882a593Smuzhiyun 	befs_block_run log_blocks;
52*4882a593Smuzhiyun 	befs_off_t log_start;
53*4882a593Smuzhiyun 	befs_off_t log_end;
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun 	befs_inode_addr root_dir;
56*4882a593Smuzhiyun 	befs_inode_addr indices;
57*4882a593Smuzhiyun 	u32 magic3;
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun 	struct befs_mount_options mount_opts;
60*4882a593Smuzhiyun 	struct nls_table *nls;
61*4882a593Smuzhiyun };
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun struct befs_inode_info {
64*4882a593Smuzhiyun 	u32 i_flags;
65*4882a593Smuzhiyun 	u32 i_type;
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun 	befs_inode_addr i_inode_num;
68*4882a593Smuzhiyun 	befs_inode_addr i_parent;
69*4882a593Smuzhiyun 	befs_inode_addr i_attribute;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	union {
72*4882a593Smuzhiyun 		befs_data_stream ds;
73*4882a593Smuzhiyun 		char symlink[BEFS_SYMLINK_LEN];
74*4882a593Smuzhiyun 	} i_data;
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun 	struct inode vfs_inode;
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun enum befs_err {
80*4882a593Smuzhiyun 	BEFS_OK,
81*4882a593Smuzhiyun 	BEFS_ERR,
82*4882a593Smuzhiyun 	BEFS_BAD_INODE,
83*4882a593Smuzhiyun 	BEFS_BT_END,
84*4882a593Smuzhiyun 	BEFS_BT_EMPTY,
85*4882a593Smuzhiyun 	BEFS_BT_MATCH,
86*4882a593Smuzhiyun 	BEFS_BT_OVERFLOW,
87*4882a593Smuzhiyun 	BEFS_BT_NOT_FOUND
88*4882a593Smuzhiyun };
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun /****************************/
92*4882a593Smuzhiyun /* debug.c */
93*4882a593Smuzhiyun __printf(2, 3)
94*4882a593Smuzhiyun void befs_error(const struct super_block *sb, const char *fmt, ...);
95*4882a593Smuzhiyun __printf(2, 3)
96*4882a593Smuzhiyun void befs_warning(const struct super_block *sb, const char *fmt, ...);
97*4882a593Smuzhiyun __printf(2, 3)
98*4882a593Smuzhiyun void befs_debug(const struct super_block *sb, const char *fmt, ...);
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun void befs_dump_super_block(const struct super_block *sb, befs_super_block *);
101*4882a593Smuzhiyun void befs_dump_inode(const struct super_block *sb, befs_inode *);
102*4882a593Smuzhiyun void befs_dump_index_entry(const struct super_block *sb, befs_disk_btree_super *);
103*4882a593Smuzhiyun void befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *);
104*4882a593Smuzhiyun /****************************/
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* Gets a pointer to the private portion of the super_block
108*4882a593Smuzhiyun  * structure from the public part
109*4882a593Smuzhiyun  */
110*4882a593Smuzhiyun static inline struct befs_sb_info *
BEFS_SB(const struct super_block * super)111*4882a593Smuzhiyun BEFS_SB(const struct super_block *super)
112*4882a593Smuzhiyun {
113*4882a593Smuzhiyun 	return (struct befs_sb_info *) super->s_fs_info;
114*4882a593Smuzhiyun }
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun static inline struct befs_inode_info *
BEFS_I(const struct inode * inode)117*4882a593Smuzhiyun BEFS_I(const struct inode *inode)
118*4882a593Smuzhiyun {
119*4882a593Smuzhiyun 	return container_of(inode, struct befs_inode_info, vfs_inode);
120*4882a593Smuzhiyun }
121*4882a593Smuzhiyun 
122*4882a593Smuzhiyun static inline befs_blocknr_t
iaddr2blockno(struct super_block * sb,const befs_inode_addr * iaddr)123*4882a593Smuzhiyun iaddr2blockno(struct super_block *sb, const befs_inode_addr *iaddr)
124*4882a593Smuzhiyun {
125*4882a593Smuzhiyun 	return ((iaddr->allocation_group << BEFS_SB(sb)->ag_shift) +
126*4882a593Smuzhiyun 		iaddr->start);
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun static inline befs_inode_addr
blockno2iaddr(struct super_block * sb,befs_blocknr_t blockno)130*4882a593Smuzhiyun blockno2iaddr(struct super_block *sb, befs_blocknr_t blockno)
131*4882a593Smuzhiyun {
132*4882a593Smuzhiyun 	befs_inode_addr iaddr;
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	iaddr.allocation_group = blockno >> BEFS_SB(sb)->ag_shift;
135*4882a593Smuzhiyun 	iaddr.start =
136*4882a593Smuzhiyun 	    blockno - (iaddr.allocation_group << BEFS_SB(sb)->ag_shift);
137*4882a593Smuzhiyun 	iaddr.len = 1;
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun 	return iaddr;
140*4882a593Smuzhiyun }
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun static inline unsigned int
befs_iaddrs_per_block(struct super_block * sb)143*4882a593Smuzhiyun befs_iaddrs_per_block(struct super_block *sb)
144*4882a593Smuzhiyun {
145*4882a593Smuzhiyun 	return BEFS_SB(sb)->block_size / sizeof(befs_disk_inode_addr);
146*4882a593Smuzhiyun }
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun #include "endian.h"
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun #endif				/* _LINUX_BEFS_H */
151