1 /*
2  * This file and its contents are supplied under the terms of the
3  * Common Development and Distribution License ("CDDL"), version 1.0.
4  * You may only use this file in accordance with the terms of version
5  * 1.0 of the CDDL.
6  *
7  * A full copy of the text of the CDDL should have accompanied this
8  * source.  A copy of the CDDL is also available via the Internet at
9  * http://www.illumos.org/license/CDDL.
10  */
11 
12 /*
13  * Copyright (c) 2014 Joyent, Inc.  All rights reserved.
14  */
15 
16 #ifndef _SYS_FS_BOOTFS_IMPL_H
17 #define	_SYS_FS_BOOTFS_IMPL_H
18 
19 #include <sys/types.h>
20 #include <sys/list.h>
21 #include <sys/avl.h>
22 #include <sys/vnode.h>
23 #include <sys/vfs_opreg.h>
24 #include <sys/kstat.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /*
31  * The bootfs node is the file system specific version of the vnode for the
32  * bootfs file system. Because the bootfs file system is entirely a read-only
33  * file system, this structure requires no locking as the contents are
34  * immutable.
35  */
36 typedef struct bootfs_node {
37 	char			*bvn_name;	/* entry name */
38 	struct vnode		*bvn_vnp;	/* Corresponding vnode */
39 	avl_tree_t		bvn_dir;	/* directory entries, if VDIR */
40 	avl_node_t		bvn_link;	/* dirent link */
41 	list_node_t		bvn_alink;	/* link for all nodes */
42 	uint64_t		bvn_addr;	/* Address in pmem */
43 	uint64_t		bvn_size;	/* Size of the file */
44 	struct bootfs_node	*bvn_parent;	/* .. */
45 	vattr_t			bvn_attr;	/* attributes for the node */
46 } bootfs_node_t;
47 
48 typedef struct bootfs_stat {
49 	kstat_named_t	bfss_nfiles;
50 	kstat_named_t	bfss_ndirs;
51 	kstat_named_t	bfss_nbytes;
52 	kstat_named_t	bfss_ndups;
53 	kstat_named_t	bfss_ndiscards;
54 } bootfs_stat_t;
55 
56 typedef struct bootfs {
57 	vfs_t			*bfs_vfsp;
58 	char			*bfs_mntpath;
59 	bootfs_node_t		*bfs_rootvn;
60 	kstat_t			*bfs_kstat;
61 	list_t			bfs_nodes;
62 	minor_t			bfs_minor;
63 	uint_t			bfs_ninode;
64 	bootfs_stat_t		bfs_stat;
65 } bootfs_t;
66 
67 extern void bootfs_construct(bootfs_t *);
68 extern void bootfs_destruct(bootfs_t *);
69 extern int bootfs_node_constructor(void *, void *, int);
70 extern void bootfs_node_destructor(void *, void *);
71 
72 extern struct vnodeops *bootfs_vnodeops;
73 extern const fs_operation_def_t bootfs_vnodeops_template[];
74 extern kmem_cache_t *bootfs_node_cache;
75 extern major_t bootfs_major;
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /* _SYS_FS_BOOTFS_IMPL_H */
82