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