1/* 2 * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28/* 29 * Copyright (c) 1995, 1998 Apple Computer, Inc. All Rights Reserved. 30 * Copyright (c) 1990, 1993 31 * The Regents of the University of California. All rights reserved. 32 * 33 * Redistribution and use in source and binary forms, with or without 34 * modification, are permitted provided that the following conditions 35 * are met: 36 * 1. Redistributions of source code must retain the above copyright 37 * notice, this list of conditions and the following disclaimer. 38 * 2. Redistributions in binary form must reproduce the above copyright 39 * notice, this list of conditions and the following disclaimer in the 40 * documentation and/or other materials provided with the distribution. 41 * 3. All advertising materials mentioning features or use of this software 42 * must display the following acknowledgement: 43 * This product includes software developed by the University of 44 * California, Berkeley and its contributors. 45 * 4. Neither the name of the University nor the names of its contributors 46 * may be used to endorse or promote products derived from this software 47 * without specific prior written permission. 48 * 49 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 50 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 51 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 52 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 53 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 54 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 55 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 56 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 57 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 58 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 59 * SUCH DAMAGE. 60 * 61 * @(#)specdev.h 8.6 (Berkeley) 5/21/95 62 */ 63 64#ifndef _MISCFS_SPECFS_SPECDEV_H_ 65#define _MISCFS_SPECFS_SPECDEV_H_ 66 67#include <sys/appleapiopts.h> 68 69#ifdef __APPLE_API_PRIVATE 70#include <vfs/vfs_support.h> 71 72/* 73 * This structure defines the information maintained about 74 * special devices. It is allocated in checkalias and freed 75 * in vgone. 76 */ 77struct specinfo { 78 struct vnode **si_hashchain; 79 struct vnode *si_specnext; 80 long si_flags; 81 dev_t si_rdev; 82 int32_t si_opencount; 83 daddr_t si_size; /* device block size in bytes */ 84 daddr64_t si_lastr; /* last read blkno (read-ahead) */ 85 u_int64_t si_devsize; /* actual device size in bytes */ 86 87 u_int8_t si_initted; 88 u_int8_t si_throttleable; 89 u_int16_t si_isssd; 90 u_int32_t si_devbsdunit; 91 u_int64_t si_throttle_mask; 92}; 93/* 94 * Exported shorthand 95 */ 96#define v_rdev v_specinfo->si_rdev 97#define v_hashchain v_specinfo->si_hashchain 98#define v_specnext v_specinfo->si_specnext 99#define v_specflags v_specinfo->si_flags 100#define v_specsize v_specinfo->si_size 101#define v_specdevsize v_specinfo->si_devsize 102#define v_speclastr v_specinfo->si_lastr 103 104/* 105 * Flags for specinfo 106 */ 107#define SI_MOUNTEDON 0x0001 /* block special device is mounted on */ 108#define SI_ALIASED 0x0002 /* multiple active vnodes refer to this device */ 109 110/* 111 * Special device management 112 */ 113#define SPECHSZ 64 114#if ((SPECHSZ&(SPECHSZ-1)) == 0) 115#define SPECHASH(rdev) (((rdev>>21)+(rdev))&(SPECHSZ-1)) 116#else 117#define SPECHASH(rdev) (((unsigned)((rdev>>21)+(rdev)))%SPECHSZ) 118#endif 119 120extern struct vnode *speclisth[SPECHSZ]; 121 122/* 123 * Prototypes for special file operations on vnodes. 124 */ 125extern int (**spec_vnodeop_p)(void *); 126struct nameidata; 127struct componentname; 128struct flock; 129struct buf; 130struct uio; 131 132__BEGIN_DECLS 133#ifdef BSD_KERNEL_PRIVATE 134int spec_blktooff (struct vnop_blktooff_args *); 135int spec_offtoblk (struct vnop_offtoblk_args *); 136int spec_fsync_internal (vnode_t, int, vfs_context_t); 137int spec_blockmap (struct vnop_blockmap_args *); 138int spec_kqfilter (vnode_t vp, struct knote *kn); 139#endif /* BSD_KERNEL_PRIVATE */ 140 141int spec_ebadf(void *); 142 143int spec_lookup (struct vnop_lookup_args *); 144#define spec_create (int (*) (struct vnop_access_args *))err_create 145#define spec_mknod (int (*) (struct vnop_access_args *))err_mknod 146int spec_open (struct vnop_open_args *); 147int spec_close (struct vnop_close_args *); 148#define spec_access (int (*) (struct vnop_access_args *))spec_ebadf 149#define spec_getattr (int (*) (struct vnop_getattr_args *))spec_ebadf 150#define spec_setattr (int (*) (struct vnop_setattr_args *))spec_ebadf 151int spec_read (struct vnop_read_args *); 152int spec_write (struct vnop_write_args *); 153int spec_ioctl (struct vnop_ioctl_args *); 154int spec_select (struct vnop_select_args *); 155#define spec_revoke (int (*) (struct vnop_access_args *))nop_revoke 156#define spec_mmap (int (*) (struct vnop_access_args *))err_mmap 157int spec_fsync (struct vnop_fsync_args *); 158#define spec_remove (int (*) (struct vnop_access_args *))err_remove 159#define spec_link (int (*) (struct vnop_access_args *))err_link 160#define spec_rename (int (*) (struct vnop_access_args *))err_rename 161#define spec_mkdir (int (*) (struct vnop_access_args *))err_mkdir 162#define spec_rmdir (int (*) (struct vnop_access_args *))err_rmdir 163#define spec_symlink (int (*) (struct vnop_access_args *))err_symlink 164#define spec_readdir (int (*) (struct vnop_access_args *))err_readdir 165#define spec_readlink (int (*) (struct vnop_access_args *))err_readlink 166#define spec_inactive (int (*) (struct vnop_access_args *))nop_inactive 167#define spec_reclaim (int (*) (struct vnop_access_args *))nop_reclaim 168#define spec_lock (int (*) (struct vnop_access_args *))nop_lock 169#define spec_unlock (int (*)(struct vnop_access_args *))nop_unlock 170int spec_strategy (struct vnop_strategy_args *); 171#define spec_islocked (int (*) (struct vnop_access_args *))nop_islocked 172int spec_pathconf (struct vnop_pathconf_args *); 173#define spec_advlock (int (*) (struct vnop_access_args *))err_advlock 174#define spec_blkatoff (int (*) (struct vnop_access_args *))err_blkatoff 175#define spec_valloc (int (*) (struct vnop_access_args *))err_valloc 176#define spec_vfree (int (*) (struct vnop_access_args *))err_vfree 177#define spec_bwrite (int (*) (struct vnop_bwrite_args *))nop_bwrite 178__END_DECLS 179 180#endif /* __APPLE_API_PRIVATE */ 181#endif /* _MISCFS_SPECFS_SPECDEV_H_ */ 182