xref: /netbsd-src/tests/fs/puffs/h_dtfs/dtfs.h (revision 58d9a550765dd589d52bb1b450174f585e62257a)
1*58d9a550Spooka /*	$NetBSD: dtfs.h,v 1.2 2010/07/14 13:09:52 pooka Exp $	*/
23626443eSpooka 
33626443eSpooka /*
43626443eSpooka  * Copyright (c) 2006  Antti Kantee.  All Rights Reserved.
53626443eSpooka  *
63626443eSpooka  * Redistribution and use in source and binary forms, with or without
73626443eSpooka  * modification, are permitted provided that the following conditions
83626443eSpooka  * are met:
93626443eSpooka  * 1. Redistributions of source code must retain the above copyright
103626443eSpooka  *    notice, this list of conditions and the following disclaimer.
113626443eSpooka  * 2. Redistributions in binary form must reproduce the above copyright
123626443eSpooka  *    notice, this list of conditions and the following disclaimer in the
133626443eSpooka  *    documentation and/or other materials provided with the distribution.
143626443eSpooka  *
153626443eSpooka  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
163626443eSpooka  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
173626443eSpooka  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
183626443eSpooka  * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
193626443eSpooka  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
203626443eSpooka  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
213626443eSpooka  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
223626443eSpooka  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
233626443eSpooka  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
243626443eSpooka  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
253626443eSpooka  * SUCH DAMAGE.
263626443eSpooka  */
273626443eSpooka 
283626443eSpooka #ifndef DTFS_H_
293626443eSpooka #define DTFS_H_
303626443eSpooka 
313626443eSpooka #include <sys/types.h>
323626443eSpooka 
333626443eSpooka #include <puffs.h>
343626443eSpooka 
353626443eSpooka PUFFSOP_PROTOS(dtfs);
363626443eSpooka int	dtfs_domount(struct puffs_usermount *, const char *);
373626443eSpooka 
383626443eSpooka #define DTFS_BLOCKSHIFT	(12)
393626443eSpooka #define DTFS_BLOCKSIZE	(1<<DTFS_BLOCKSHIFT)
403626443eSpooka 
413626443eSpooka #define ROUNDUP(a,b) ((a) & ((b)-1))
423626443eSpooka #define BLOCKNUM(a,b) (((a) & ~((1<<(b))-1)) >> (b))
433626443eSpooka 
443626443eSpooka struct dtfs_fid;
453626443eSpooka struct dtfs_mount {
463626443eSpooka 	ino_t		dtm_nextfileid;	/* running number for file id	*/
473626443eSpooka 
483626443eSpooka 	size_t		dtm_fsizes;	/* sum of file sizes in bytes	*/
493626443eSpooka 	fsfilcnt_t	dtm_nfiles;	/* number of files		*/
503626443eSpooka 
513626443eSpooka 	LIST_HEAD(, dtfs_poll) dtm_pollent;
523626443eSpooka 	int		dtm_needwakeup;
533626443eSpooka 	vm_prot_t	dtm_allowprot;
543626443eSpooka };
553626443eSpooka 
563626443eSpooka struct dtfs_file {
573626443eSpooka 	union {
583626443eSpooka 		struct {
593626443eSpooka 			uint8_t **blocks;
603626443eSpooka 			size_t numblocks;
613626443eSpooka 			size_t datalen;
623626443eSpooka 		} reg;
633626443eSpooka 		struct {
643626443eSpooka 			struct puffs_node *dotdot;
653626443eSpooka 			LIST_HEAD(, dtfs_dirent) dirents;
663626443eSpooka 		} dir;
673626443eSpooka 		struct {
683626443eSpooka 			char *target;
693626443eSpooka 		} link;
703626443eSpooka 	} u;
713626443eSpooka #define df_blocks u.reg.blocks
723626443eSpooka #define df_numblocks u.reg.numblocks
733626443eSpooka #define df_datalen u.reg.datalen
743626443eSpooka #define df_dotdot u.dir.dotdot
753626443eSpooka #define df_dirents u.dir.dirents
763626443eSpooka #define df_linktarget u.link.target
773626443eSpooka };
783626443eSpooka 
793626443eSpooka struct dtfs_dirent {
803626443eSpooka 	struct puffs_node *dfd_node;
813626443eSpooka 	struct puffs_node *dfd_parent;
823626443eSpooka 	char *dfd_name;
833626443eSpooka 	size_t dfd_namelen;
843626443eSpooka 
853626443eSpooka 	LIST_ENTRY(dtfs_dirent) dfd_entries;
863626443eSpooka };
873626443eSpooka 
883626443eSpooka struct dtfs_fid {
893626443eSpooka 	struct puffs_node	*dfid_addr;
903626443eSpooka 
913626443eSpooka 	/* best^Wsome-effort extra sanity check */
923626443eSpooka 	ino_t			dfid_fileid;
933626443eSpooka 	u_long			dfid_gen;
943626443eSpooka };
953626443eSpooka #define DTFS_FIDSIZE (sizeof(struct dtfs_fid))
963626443eSpooka 
973626443eSpooka struct dtfs_poll {
983626443eSpooka 	struct puffs_cc *dp_pcc;
993626443eSpooka 	LIST_ENTRY(dtfs_poll) dp_entries;
1003626443eSpooka };
1013626443eSpooka 
1023626443eSpooka struct puffs_node *	dtfs_genfile(struct puffs_node *,
1033626443eSpooka 				     const struct puffs_cn *, enum vtype);
1043626443eSpooka struct dtfs_file *	dtfs_newdir(void);
1053626443eSpooka struct dtfs_file *	dtfs_newfile(void);
1063626443eSpooka struct dtfs_dirent *	dtfs_dirgetnth(struct dtfs_file *, int);
1073626443eSpooka struct dtfs_dirent *	dtfs_dirgetbyname(struct dtfs_file *,
1083626443eSpooka 					  const char *, size_t);
1093626443eSpooka 
1103626443eSpooka void			dtfs_nukenode(struct puffs_node *, struct puffs_node *,
1113626443eSpooka 				      const char *, size_t);
1123626443eSpooka void			dtfs_freenode(struct puffs_node *);
1133626443eSpooka void			dtfs_setsize(struct puffs_node *, off_t);
1143626443eSpooka 
1153626443eSpooka void	dtfs_adddent(struct puffs_node *, struct dtfs_dirent *);
1163626443eSpooka void	dtfs_removedent(struct puffs_node *, struct dtfs_dirent *);
1173626443eSpooka 
1183626443eSpooka void	dtfs_baseattrs(struct vattr *, enum vtype, ino_t);
1193626443eSpooka void	dtfs_updatetimes(struct puffs_node *, int, int, int);
1203626443eSpooka 
121*58d9a550Spooka bool	dtfs_isunder(struct puffs_node *, struct puffs_node *);
122*58d9a550Spooka 
1233626443eSpooka 
1243626443eSpooka #define DTFS_CTOF(a) ((struct dtfs_file *)(((struct puffs_node *)a)->pn_data))
1253626443eSpooka #define DTFS_PTOF(a) ((struct dtfs_file *)(a->pn_data))
1263626443eSpooka 
1273626443eSpooka #endif /* DTFS_H_ */
128