The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/vndvar.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: vndvar.h,v 1.38 2018/10/07 11:51:26 mlelstv Exp $      */
    2 
    3 /*-
    4  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Jason R. Thorpe.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 /*
   33  * Copyright (c) 1988 University of Utah.
   34  * Copyright (c) 1990, 1993
   35  *      The Regents of the University of California.  All rights reserved.
   36  *
   37  * This code is derived from software contributed to Berkeley by
   38  * the Systems Programming Group of the University of Utah Computer
   39  * Science Department.
   40  *
   41  * Redistribution and use in source and binary forms, with or without
   42  * modification, are permitted provided that the following conditions
   43  * are met:
   44  * 1. Redistributions of source code must retain the above copyright
   45  *    notice, this list of conditions and the following disclaimer.
   46  * 2. Redistributions in binary form must reproduce the above copyright
   47  *    notice, this list of conditions and the following disclaimer in the
   48  *    documentation and/or other materials provided with the distribution.
   49  * 3. Neither the name of the University nor the names of its contributors
   50  *    may be used to endorse or promote products derived from this software
   51  *    without specific prior written permission.
   52  *
   53  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   54  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   55  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   56  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   57  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   58  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   59  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   60  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   61  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   62  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   63  * SUCH DAMAGE.
   64  *
   65  * from: Utah $Hdr: fdioctl.h 1.1 90/07/09$
   66  *
   67  *      @(#)vnioctl.h   8.1 (Berkeley) 6/10/93
   68  */
   69 
   70 #ifndef _SYS_DEV_VNDVAR_H_
   71 #define _SYS_DEV_VNDVAR_H_
   72 
   73 #include <sys/ioccom.h>
   74 #include <sys/pool.h>
   75 
   76 /*
   77  * Vnode disk pseudo-geometry information.
   78  */
   79 struct vndgeom {
   80         u_int32_t       vng_secsize;    /* # bytes per sector */
   81         u_int32_t       vng_nsectors;   /* # data sectors per track */
   82         u_int32_t       vng_ntracks;    /* # tracks per cylinder */
   83         u_int32_t       vng_ncylinders; /* # cylinders per unit */
   84 };
   85 
   86 /*
   87  * Ioctl definitions for file (vnode) disk pseudo-device.
   88  */
   89 struct vnd_ioctl {
   90         char            *vnd_file;      /* pathname of file to mount */
   91         int             vnd_flags;      /* flags; see below */
   92         struct vndgeom  vnd_geom;       /* geometry to emulate */
   93         unsigned int    vnd_osize;      /* (returned) size of disk */
   94         uint64_t        vnd_size;       /* (returned) size of disk */
   95 };
   96 
   97 /* vnd_flags */
   98 #define VNDIOF_HASGEOM  0x01            /* use specified geometry */
   99 #define VNDIOF_READONLY 0x02            /* as read-only device */
  100 #define VNDIOF_FORCE    0x04            /* force close */
  101 #define VNDIOF_FILEIO   0x08            /* have to use read/write */
  102 #define VNDIOF_COMP     0x0400          /* must stay the same as VNF_COMP */
  103 
  104 #ifdef _KERNEL
  105 
  106 struct vnode;
  107 
  108 /*
  109  * A vnode disk's state information.
  110  */
  111 struct vnd_softc {
  112         device_t         sc_dev;
  113         int              sc_flags;      /* flags */
  114         uint64_t         sc_size;       /* size of vnd */
  115         struct vnode    *sc_vp;         /* vnode */
  116         u_int            sc_iosize;     /* smallest I/O size for backend */
  117         kauth_cred_t     sc_cred;       /* credentials */
  118         int              sc_maxactive;  /* max # of active requests */
  119         struct bufq_state *sc_tab;      /* transfer queue */
  120         int              sc_pending;    /* number of pending transfers */
  121         int              sc_active;     /* number of active transfers */
  122         struct disk      sc_dkdev;      /* generic disk device info */
  123         struct vndgeom   sc_geom;       /* virtual geometry */
  124         struct pool      sc_vxpool;     /* vndxfer pool */
  125         struct pool      sc_vbpool;     /* vndbuf pool */
  126         struct lwp      *sc_kthread;    /* kernel thread */
  127         u_int32_t        sc_comp_blksz; /* precompressed block size */
  128         u_int32_t        sc_comp_numoffs;/* count of compressed block offsets */
  129         u_int64_t       *sc_comp_offsets;/* file idx's to compressed blocks */
  130         unsigned char   *sc_comp_buff;  /* compressed data buffer */
  131         unsigned char   *sc_comp_decombuf;/* decompressed data buffer */
  132         int32_t          sc_comp_buffblk;/*current decompressed block */
  133         z_stream         sc_comp_stream;/* decompress descriptor */
  134 };
  135 #endif
  136 
  137 /* sc_flags */
  138 #define VNF_INITED      0x001   /* unit has been initialized */
  139 #define VNF_WLABEL      0x002   /* label area is writable */
  140 #define VNF_LABELLING   0x004   /* unit is currently being labelled */
  141 #define VNF_WANTED      0x008   /* someone is waiting to obtain a lock */
  142 #define VNF_LOCKED      0x010   /* unit is locked */
  143 #define VNF_READONLY    0x020   /* unit is read-only */
  144 #define VNF_KLABEL      0x040   /* keep label on close */
  145 #define VNF_VLABEL      0x080   /* label is valid */
  146 #define VNF_KTHREAD     0x100   /* thread is running */
  147 #define VNF_VUNCONF     0x200   /* device is unconfiguring */
  148 #define VNF_COMP        0x400   /* file is compressed */
  149 #define VNF_CLEARING    0x800   /* unit is being torn down */
  150 #define VNF_USE_VN_RDWR 0x1000  /* have to use vn_rdwr() */
  151 
  152 /* structure of header in a compressed file */
  153 struct vnd_comp_header {
  154         char preamble[128];
  155         u_int32_t block_size;
  156         u_int32_t num_blocks;
  157 };
  158 
  159 /*
  160  * A simple structure for describing which vnd units are in use.
  161  */
  162 
  163 struct vnd_user {
  164         int             vnu_unit;       /* which vnd unit */
  165         dev_t           vnu_dev;        /* file is on this device... */
  166         ino_t           vnu_ino;        /* ...at this inode */
  167 };
  168 
  169 /*
  170  * Before you can use a unit, it must be configured with VNDIOCSET.
  171  * The configuration persists across opens and closes of the device;
  172  * an VNDIOCCLR must be used to reset a configuration.  An attempt to
  173  * VNDIOCSET an already active unit will return EBUSY.
  174  */
  175 #define VNDIOCSET       _IOWR('F', 0, struct vnd_ioctl) /* enable disk */
  176 #define VNDIOCCLR       _IOW('F', 1, struct vnd_ioctl)  /* disable disk */
  177 #define VNDIOCGET       _IOWR('F', 3, struct vnd_user)  /* get list */
  178 
  179 #ifdef _KERNEL
  180 /*
  181  * Everything else is kernel-private, mostly exported for compat/netbsd32.
  182  *
  183  * NetBSD 3.0 had a 32-bit value for vnu_ino.
  184  *
  185  * NetBSD 5.0 had a 32-bit value for vnu_dev, and vnd_size.
  186  */
  187 struct vnd_user30 {
  188         int             vnu_unit;       /* which vnd unit */
  189         uint32_t        vnu_dev;        /* file is on this device... */
  190         uint32_t        vnu_ino;        /* ...at this inode */
  191 };
  192 #define VNDIOCGET30     _IOWR('F', 2, struct vnd_user30)        /* get list */
  193 
  194 struct vnd_user50 {
  195         int             vnu_unit;       /* which vnd unit */
  196         uint32_t        vnu_dev;        /* file is on this device... */
  197         ino_t           vnu_ino;        /* ...at this inode */
  198 };
  199 #define VNDIOCGET50     _IOWR('F', 3, struct vnd_user50)        /* get list */
  200 
  201 struct vnd_ioctl50 {
  202         char            *vnd_file;      /* pathname of file to mount */
  203         int             vnd_flags;      /* flags; see below */
  204         struct vndgeom  vnd_geom;       /* geometry to emulate */
  205         unsigned int    vnd_size;       /* (returned) size of disk */
  206 };
  207 #define VNDIOCSET50     _IOWR('F', 0, struct vnd_ioctl50)
  208 #define VNDIOCCLR50     _IOW('F', 1, struct vnd_ioctl50)
  209 
  210 #endif /* _KERNEL */
  211 
  212 #endif /* _SYS_DEV_VNDVAR_H_ */

Cache object: e7962fd69b7616458cc61b1ba20dee32


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.