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