devfs.h revision 65515
155682Smarkm/* 290926Snectar * Copyright (c) 1992, 1993 3102644Snectar * The Regents of the University of California. All rights reserved. 4233294Sstas * Copyright (c) 2000 5233294Sstas * Poul-Henning Kamp. All rights reserved. 672445Sassar * 7233294Sstas * This code is derived from software donated to Berkeley by 872445Sassar * Jan-Simon Pendry. 955682Smarkm * 1055682Smarkm * Redistribution and use in source and binary forms, with or without 1155682Smarkm * modification, are permitted provided that the following conditions 1255682Smarkm * are met: 1355682Smarkm * 1. Redistributions of source code must retain the above copyright 1455682Smarkm * notice, this list of conditions and the following disclaimer. 1555682Smarkm * 2. Neither the name of the University nor the names of its contributors 1655682Smarkm * may be used to endorse or promote products derived from this software 1755682Smarkm * without specific prior written permission. 1855682Smarkm * 1955682Smarkm * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2055682Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2155682Smarkm * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2255682Smarkm * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2355682Smarkm * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2455682Smarkm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25178825Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26178825Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27178825Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2855682Smarkm * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2955682Smarkm * SUCH DAMAGE. 3055682Smarkm * 3155682Smarkm * @(#)kernfs.h 8.6 (Berkeley) 3/29/95 3255682Smarkm * From: FreeBSD: src/sys/miscfs/kernfs/kernfs.h 1.14 33178825Sdfr * 34102644Snectar * $FreeBSD: head/sys/fs/devfs/devfs.h 65515 2000-09-06 11:26:43Z phk $ 35233294Sstas */ 3672445Sassar 3755682Smarkm#ifndef _FS_DEVFS_DEVFS_H_ 3855682Smarkm#define _FS_DEVFS_DEVFS_H_ 3955682Smarkm 4055682Smarkm#ifdef _KERNEL /* No userland stuff in here... */ 4155682Smarkm 42233294Sstas/* 43233294Sstas * These are default sizes for the DEVFS inode table and the overflow 44233294Sstas * table. If the default table overflows we allocate the overflow 4555682Smarkm * table, the size of which can also be set with a sysctl. If the 4655682Smarkm * overflow table fills you're toast. 4755682Smarkm */ 4855682Smarkm#ifndef NDEVFSINO 4955682Smarkm#define NDEVFSINO 1024 5055682Smarkm#endif 5155682Smarkm 5255682Smarkm#ifndef NDEVFSOVERFLOW 5355682Smarkm#define NDEVFSOVERFLOW 32768 5455682Smarkm#endif 5555682Smarkm 5655682Smarkm/* 5755682Smarkm * This is the first "per mount" inode, these are used for directories 5855682Smarkm * and symlinks and the like. Must be larger than the number of "true" 5955682Smarkm * device nodes and symlinks. It is. 6072445Sassar */ 6155682Smarkm#define DEVFSINOMOUNT 0x2000000 6272445Sassar 6372445SassarMALLOC_DECLARE(M_DEVFS); 6472445Sassar 6572445Sassarstruct devfs_dirent { 6672445Sassar int de_inode; 6772445Sassar int de_flags; 6872445Sassar#define DE_ORPHAN 0x1 6990926Snectar#define DE_DOT 0x2 7090926Snectar#define DE_DOTDOT 0x4 7190926Snectar struct dirent *de_dirent; 7272445Sassar TAILQ_ENTRY(devfs_dirent) de_list; 7390926Snectar TAILQ_HEAD(, devfs_dirent) de_dlist; 7490926Snectar struct devfs_dirent *de_dir; 7590926Snectar int de_links; 7690926Snectar mode_t de_mode; 7790926Snectar uid_t de_uid; 78233294Sstas gid_t de_gid; 79233294Sstas struct timespec de_atime; 8090926Snectar struct timespec de_mtime; 8190926Snectar struct timespec de_ctime; 8290926Snectar struct vnode *de_vnode; 8390926Snectar char * de_symlink; 8472445Sassar}; 8572445Sassar 8672445Sassarstruct devfs_mount { 8772445Sassar struct vnode *dm_root; /* Root node */ 8872445Sassar struct devfs_dirent *dm_rootdir; 8990926Snectar struct devfs_dirent *dm_basedir; 9090926Snectar unsigned dm_generation; 91178825Sdfr struct devfs_dirent *dm_dirent[NDEVFSINO]; 9290926Snectar struct devfs_dirent **dm_overflow; 93178825Sdfr int dm_inode; 9472445Sassar struct lock dm_lock; 95178825Sdfr}; 9672445Sassar 9772445Sassar/* 9872445Sassar * This is what we fill in dm_dirent[N] for a deleted entry. 9972445Sassar */ 10072445Sassar#define DE_DELETED ((struct devfs_dirent *)sizeof(struct devfs_dirent)) 10190926Snectar 10272445Sassar#define VFSTODEVFS(mp) ((struct devfs_mount *)((mp)->mnt_data)) 10372445Sassar 10472445Sassarextern vop_t **devfs_vnodeop_p; 10572445Sassarextern vop_t **devfs_specop_p; 10672445Sassar 107178825Sdfrint devfs_allocv (struct devfs_dirent *de, struct mount *mp, struct vnode **vpp, struct proc *p); 10872445Sassarvoid devfs_attemptoverflow(int insist); 10972445Sassarstruct devfs_dirent *devfs_find (struct devfs_dirent *dd, const char *name, int namelen); 11072445Sassardev_t *devfs_itod (int inode); 11172445Sassarstruct devfs_dirent **devfs_itode (struct devfs_mount *dm, int inode); 11272445Sassarint devfs_populate (struct devfs_mount *dm); 11372445Sassarstruct devfs_dirent *devfs_newdirent (char *name, int namelen); 11472445Sassarvoid devfs_purge (struct devfs_dirent *dd); 11572445Sassarstruct devfs_dirent *devfs_vmkdir (char *name, int namelen, struct devfs_dirent *dotdot); 11672445Sassar 11772445Sassar#endif /* _KERNEL */ 11872445Sassar#endif /* _FS_DEVFS_DEVFS_H_ */ 11972445Sassar