Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / dev / vndvar.h @ 13

History | View | Annotate | Download (8.16 KB)

1
/*        $NetBSD: vndvar.h,v 1.35 2015/09/06 06:00:59 dholland 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
#if !defined(__minix)
75
#include <sys/pool.h>
76
#endif /* defined(__minix) */
77

    
78
/*
79
 * Vnode disk pseudo-geometry information.
80
 */
81
struct vndgeom {
82
        u_int32_t        vng_secsize;        /* # bytes per sector */
83
        u_int32_t        vng_nsectors;        /* # data sectors per track */
84
        u_int32_t        vng_ntracks;        /* # tracks per cylinder */
85
        u_int32_t        vng_ncylinders;        /* # cylinders per unit */
86
};
87

    
88
/*
89
 * Ioctl definitions for file (vnode) disk pseudo-device.
90
 */
91
struct vnd_ioctl {
92
#if !defined(__minix)
93
        char                *vnd_file;        /* pathname of file to mount */
94
#else
95
        int                vnd_fildes;        /* file descriptor of file to mount */
96
#endif /* !defined(__minix)*/
97
        int                vnd_flags;        /* flags; see below */
98
        struct vndgeom        vnd_geom;        /* geometry to emulate */
99
#if !defined(__minix)
100
        unsigned int        vnd_osize;        /* (returned) size of disk */
101
#endif /* !defined(__minix)*/
102
        uint64_t        vnd_size;        /* (returned) size of disk */
103
};
104

    
105
/* vnd_flags */
106
#define        VNDIOF_HASGEOM        0x01                /* use specified geometry */
107
#define        VNDIOF_READONLY        0x02                /* as read-only device */
108
#define        VNDIOF_FORCE        0x04                /* force close */
109

    
110
#if !defined(__minix)
111
#ifdef _KERNEL
112

    
113
struct vnode;
114

    
115
/*
116
 * A vnode disk's state information.
117
 */
118
struct vnd_softc {
119
        device_t         sc_dev;
120
        int                 sc_flags;        /* flags */
121
        uint64_t         sc_size;        /* size of vnd */
122
        struct vnode        *sc_vp;                /* vnode */
123
        kauth_cred_t         sc_cred;        /* credentials */
124
        int                 sc_maxactive;        /* max # of active requests */
125
        struct bufq_state *sc_tab;        /* transfer queue */
126
        int                 sc_pending;        /* number of pending transfers */
127
        int                 sc_active;        /* number of active transfers */
128
        struct disk         sc_dkdev;        /* generic disk device info */
129
        struct vndgeom         sc_geom;        /* virtual geometry */
130
        struct pool         sc_vxpool;        /* vndxfer pool */
131
        struct pool         sc_vbpool;        /* vndbuf pool */
132
        struct lwp         *sc_kthread;        /* kernel thread */
133
        u_int32_t         sc_comp_blksz;        /* precompressed block size */
134
        u_int32_t         sc_comp_numoffs;/* count of compressed block offsets */
135
        u_int64_t        *sc_comp_offsets;/* file idx's to compressed blocks */
136
        unsigned char        *sc_comp_buff;        /* compressed data buffer */
137
        unsigned char        *sc_comp_decombuf;/* decompressed data buffer */
138
        int32_t                 sc_comp_buffblk;/*current decompressed block */
139
        z_stream         sc_comp_stream;/* decompress descriptor */
140
};
141
#endif
142

    
143
/* sc_flags */
144
#define        VNF_INITED        0x001        /* unit has been initialized */
145
#define        VNF_WLABEL        0x002        /* label area is writable */
146
#define        VNF_LABELLING        0x004        /* unit is currently being labelled */
147
#define        VNF_WANTED        0x008        /* someone is waiting to obtain a lock */
148
#define        VNF_LOCKED        0x010        /* unit is locked */
149
#define        VNF_READONLY        0x020        /* unit is read-only */
150
#define        VNF_KLABEL        0x040        /* keep label on close */
151
#define        VNF_VLABEL        0x080        /* label is valid */
152
#define        VNF_KTHREAD        0x100        /* thread is running */
153
#define        VNF_VUNCONF        0x200        /* device is unconfiguring */
154
#define VNF_COMP        0x400        /* file is compressed */
155
#define VNF_CLEARING        0x800        /* unit is being torn down */
156
#define VNF_USE_VN_RDWR        0x1000        /* have to use vn_rdwr() */
157

    
158
/* structure of header in a compressed file */
159
struct vnd_comp_header
160
{
161
        char preamble[128];
162
        u_int32_t block_size;
163
        u_int32_t num_blocks;
164
};
165
#endif /* !defined(__minix) */
166

    
167
/*
168
 * A simple structure for describing which vnd units are in use.
169
 */
170

    
171
struct vnd_user {
172
        int                vnu_unit;        /* which vnd unit */
173
        dev_t                vnu_dev;        /* file is on this device... */
174
        ino_t                vnu_ino;        /* ...at this inode */
175
};
176

    
177
/*
178
 * Before you can use a unit, it must be configured with VNDIOCSET.
179
 * The configuration persists across opens and closes of the device;
180
 * an VNDIOCCLR must be used to reset a configuration.  An attempt to
181
 * VNDIOCSET an already active unit will return EBUSY.
182
 */
183
#define VNDIOCSET        _IOWR('F', 0, struct vnd_ioctl)        /* enable disk */
184
#define VNDIOCCLR        _IOW('F', 1, struct vnd_ioctl)        /* disable disk */
185
#define VNDIOCGET        _IOWR('F', 3, struct vnd_user)        /* get list */
186

    
187
#ifdef _KERNEL
188
/*
189
 * Everything else is kernel-private, mostly exported for compat/netbsd32.
190
 *
191
 * NetBSD 3.0 had a 32-bit value for vnu_ino.
192
 *
193
 * NetBSD 5.0 had a 32-bit value for vnu_dev, and vnd_size.
194
 */
195
struct vnd_user30 {
196
        int                vnu_unit;        /* which vnd unit */
197
        uint32_t        vnu_dev;        /* file is on this device... */
198
        uint32_t        vnu_ino;        /* ...at this inode */
199
};
200
#define VNDIOCGET30        _IOWR('F', 2, struct vnd_user30)        /* get list */
201

    
202
struct vnd_user50 {
203
        int                vnu_unit;        /* which vnd unit */
204
        uint32_t        vnu_dev;        /* file is on this device... */
205
        ino_t                vnu_ino;        /* ...at this inode */
206
};
207
#define VNDIOCGET50        _IOWR('F', 3, struct vnd_user50)        /* get list */
208

    
209
struct vnd_ioctl50 {
210
        char                *vnd_file;        /* pathname of file to mount */
211
        int                vnd_flags;        /* flags; see below */
212
        struct vndgeom        vnd_geom;        /* geometry to emulate */
213
        unsigned int        vnd_size;        /* (returned) size of disk */
214
};
215
#define VNDIOCSET50        _IOWR('F', 0, struct vnd_ioctl50)
216
#define VNDIOCCLR50        _IOW('F', 1, struct vnd_ioctl50)
217

    
218
#endif /* _KERNEL */
219

    
220
#endif /* _SYS_DEV_VNDVAR_H_ */