ccdvar.h revision 1.9 1 1.9 thorpej /* $NetBSD: ccdvar.h,v 1.9 1996/01/07 22:03:30 thorpej Exp $ */
2 1.5 thorpej
3 1.5 thorpej /*
4 1.5 thorpej * Copyright (c) 1995 Jason R. Thorpe.
5 1.5 thorpej * All rights reserved.
6 1.5 thorpej *
7 1.5 thorpej * Redistribution and use in source and binary forms, with or without
8 1.5 thorpej * modification, are permitted provided that the following conditions
9 1.5 thorpej * are met:
10 1.5 thorpej * 1. Redistributions of source code must retain the above copyright
11 1.5 thorpej * notice, this list of conditions and the following disclaimer.
12 1.5 thorpej * 2. Redistributions in binary form must reproduce the above copyright
13 1.5 thorpej * notice, this list of conditions and the following disclaimer in the
14 1.5 thorpej * documentation and/or other materials provided with the distribution.
15 1.5 thorpej * 3. All advertising materials mentioning features or use of this software
16 1.5 thorpej * must display the following acknowledgement:
17 1.5 thorpej * This product includes software developed for the NetBSD Project
18 1.5 thorpej * by Jason R. Thorpe.
19 1.5 thorpej * 4. The name of the author may not be used to endorse or promote products
20 1.5 thorpej * derived from this software without specific prior written permission.
21 1.5 thorpej *
22 1.5 thorpej * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 1.5 thorpej * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 1.5 thorpej * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 1.5 thorpej * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 1.5 thorpej * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 1.5 thorpej * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 1.5 thorpej * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 1.5 thorpej * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30 1.5 thorpej * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 1.5 thorpej * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 1.5 thorpej * SUCH DAMAGE.
33 1.5 thorpej */
34 1.2 cgd
35 1.1 hpeyerl /*
36 1.1 hpeyerl * Copyright (c) 1988 University of Utah.
37 1.3 hpeyerl * Copyright (c) 1990, 1993
38 1.3 hpeyerl * The Regents of the University of California. All rights reserved.
39 1.1 hpeyerl *
40 1.1 hpeyerl * This code is derived from software contributed to Berkeley by
41 1.1 hpeyerl * the Systems Programming Group of the University of Utah Computer
42 1.1 hpeyerl * Science Department.
43 1.1 hpeyerl *
44 1.1 hpeyerl * Redistribution and use in source and binary forms, with or without
45 1.1 hpeyerl * modification, are permitted provided that the following conditions
46 1.1 hpeyerl * are met:
47 1.1 hpeyerl * 1. Redistributions of source code must retain the above copyright
48 1.1 hpeyerl * notice, this list of conditions and the following disclaimer.
49 1.1 hpeyerl * 2. Redistributions in binary form must reproduce the above copyright
50 1.1 hpeyerl * notice, this list of conditions and the following disclaimer in the
51 1.1 hpeyerl * documentation and/or other materials provided with the distribution.
52 1.1 hpeyerl * 3. All advertising materials mentioning features or use of this software
53 1.1 hpeyerl * must display the following acknowledgement:
54 1.1 hpeyerl * This product includes software developed by the University of
55 1.1 hpeyerl * California, Berkeley and its contributors.
56 1.1 hpeyerl * 4. Neither the name of the University nor the names of its contributors
57 1.1 hpeyerl * may be used to endorse or promote products derived from this software
58 1.1 hpeyerl * without specific prior written permission.
59 1.1 hpeyerl *
60 1.1 hpeyerl * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
61 1.1 hpeyerl * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
62 1.1 hpeyerl * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
63 1.1 hpeyerl * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
64 1.1 hpeyerl * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
65 1.1 hpeyerl * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
66 1.1 hpeyerl * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
67 1.1 hpeyerl * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
68 1.1 hpeyerl * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
69 1.1 hpeyerl * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
70 1.1 hpeyerl * SUCH DAMAGE.
71 1.1 hpeyerl *
72 1.2 cgd * from: Utah $Hdr: cdvar.h 1.1 90/07/09$
73 1.2 cgd *
74 1.3 hpeyerl * @(#)cdvar.h 8.1 (Berkeley) 6/10/93
75 1.1 hpeyerl */
76 1.1 hpeyerl
77 1.5 thorpej /*
78 1.5 thorpej * Dynamic configuration and disklabel support by:
79 1.5 thorpej * Jason R. Thorpe <thorpej (at) nas.nasa.gov>
80 1.5 thorpej * Numerical Aerodynamic Simulation Facility
81 1.5 thorpej * Mail Stop 258-6
82 1.5 thorpej * NASA Ames Research Center
83 1.5 thorpej * Moffett Field, CA 94035
84 1.5 thorpej */
85 1.1 hpeyerl
86 1.1 hpeyerl /*
87 1.5 thorpej * A concatenated disk is described at initialization time by this structure.
88 1.1 hpeyerl */
89 1.1 hpeyerl struct ccddevice {
90 1.5 thorpej int ccd_unit; /* logical unit of this ccd */
91 1.5 thorpej int ccd_interleave; /* interleave (DEV_BSIZE blocks) */
92 1.5 thorpej int ccd_flags; /* misc. information */
93 1.5 thorpej struct vnode **ccd_vpp; /* array of component vnodes */
94 1.5 thorpej char **ccd_cpp; /* array of component pathnames */
95 1.5 thorpej int ccd_ndev; /* number of component devices */
96 1.5 thorpej };
97 1.5 thorpej
98 1.5 thorpej /*
99 1.5 thorpej * This structure is used to configure a ccd via ioctl(2).
100 1.5 thorpej */
101 1.5 thorpej struct ccd_ioctl {
102 1.5 thorpej char **ccio_disks; /* pointer to component paths */
103 1.5 thorpej int ccio_ndisks; /* number of disks to concatenate */
104 1.5 thorpej int ccio_ileave; /* interleave (DEV_BSIZE blocks) */
105 1.5 thorpej int ccio_flags; /* misc. information */
106 1.5 thorpej int ccio_unit; /* unit number: use varies */
107 1.5 thorpej size_t ccio_size; /* (returned) size of ccd */
108 1.1 hpeyerl };
109 1.1 hpeyerl
110 1.1 hpeyerl /* ccd_flags */
111 1.3 hpeyerl #define CCDF_SWAP 0x01 /* interleave should be dmmax */
112 1.3 hpeyerl #define CCDF_UNIFORM 0x02 /* use LCCD of sizes for uniform interleave */
113 1.1 hpeyerl
114 1.5 thorpej /* Mask of user-settable ccd flags. */
115 1.5 thorpej #define CCDF_USERMASK (CCDF_SWAP|CCDF_UNIFORM)
116 1.5 thorpej
117 1.1 hpeyerl /*
118 1.1 hpeyerl * Component info table.
119 1.1 hpeyerl * Describes a single component of a concatenated disk.
120 1.1 hpeyerl */
121 1.1 hpeyerl struct ccdcinfo {
122 1.5 thorpej struct vnode *ci_vp; /* device's vnode */
123 1.5 thorpej dev_t ci_dev; /* XXX: device's dev_t */
124 1.5 thorpej size_t ci_size; /* size */
125 1.5 thorpej char *ci_path; /* path to component */
126 1.5 thorpej size_t ci_pathlen; /* length of component path */
127 1.1 hpeyerl };
128 1.1 hpeyerl
129 1.1 hpeyerl /*
130 1.1 hpeyerl * Interleave description table.
131 1.1 hpeyerl * Computed at boot time to speed irregular-interleave lookups.
132 1.1 hpeyerl * The idea is that we interleave in "groups". First we interleave
133 1.1 hpeyerl * evenly over all component disks up to the size of the smallest
134 1.1 hpeyerl * component (the first group), then we interleave evenly over all
135 1.1 hpeyerl * remaining disks up to the size of the next-smallest (second group),
136 1.1 hpeyerl * and so on.
137 1.1 hpeyerl *
138 1.1 hpeyerl * Each table entry describes the interleave characteristics of one
139 1.1 hpeyerl * of these groups. For example if a concatenated disk consisted of
140 1.1 hpeyerl * three components of 5, 3, and 7 DEV_BSIZE blocks interleaved at
141 1.1 hpeyerl * DEV_BSIZE (1), the table would have three entries:
142 1.1 hpeyerl *
143 1.1 hpeyerl * ndisk startblk startoff dev
144 1.1 hpeyerl * 3 0 0 0, 1, 2
145 1.1 hpeyerl * 2 9 3 0, 2
146 1.1 hpeyerl * 1 13 5 2
147 1.1 hpeyerl * 0 - - -
148 1.1 hpeyerl *
149 1.1 hpeyerl * which says that the first nine blocks (0-8) are interleaved over
150 1.1 hpeyerl * 3 disks (0, 1, 2) starting at block offset 0 on any component disk,
151 1.1 hpeyerl * the next 4 blocks (9-12) are interleaved over 2 disks (0, 2) starting
152 1.1 hpeyerl * at component block 3, and the remaining blocks (13-14) are on disk
153 1.1 hpeyerl * 2 starting at offset 5.
154 1.1 hpeyerl */
155 1.1 hpeyerl struct ccdiinfo {
156 1.1 hpeyerl int ii_ndisk; /* # of disks range is interleaved over */
157 1.1 hpeyerl daddr_t ii_startblk; /* starting scaled block # for range */
158 1.1 hpeyerl daddr_t ii_startoff; /* starting component offset (block #) */
159 1.8 thorpej int *ii_index; /* ordered list of components in range */
160 1.1 hpeyerl };
161 1.1 hpeyerl
162 1.5 thorpej /*
163 1.5 thorpej * Concatenated disk pseudo-geometry information.
164 1.5 thorpej */
165 1.5 thorpej struct ccdgeom {
166 1.5 thorpej u_int32_t ccg_secsize; /* # bytes per sector */
167 1.5 thorpej u_int32_t ccg_nsectors; /* # data sectors per track */
168 1.5 thorpej u_int32_t ccg_ntracks; /* # tracks per cylinder */
169 1.5 thorpej u_int32_t ccg_ncylinders; /* # cylinders per unit */
170 1.5 thorpej };
171 1.5 thorpej
172 1.5 thorpej /*
173 1.5 thorpej * A concatenated disk is described after initialization by this structure.
174 1.5 thorpej */
175 1.5 thorpej struct ccd_softc {
176 1.5 thorpej int sc_unit; /* logical unit number */
177 1.5 thorpej int sc_flags; /* flags */
178 1.5 thorpej int sc_cflags; /* configuration flags */
179 1.5 thorpej size_t sc_size; /* size of ccd */
180 1.5 thorpej int sc_ileave; /* interleave */
181 1.5 thorpej int sc_nccdisks; /* number of components */
182 1.5 thorpej struct ccdcinfo *sc_cinfo; /* component info */
183 1.5 thorpej struct ccdiinfo *sc_itable; /* interleave table */
184 1.5 thorpej struct ccdgeom sc_geom; /* pseudo geometry info */
185 1.9 thorpej char sc_xname[8]; /* XXX external name */
186 1.9 thorpej struct disk sc_dkdev; /* generic disk device info */
187 1.5 thorpej };
188 1.5 thorpej
189 1.5 thorpej /* sc_flags */
190 1.5 thorpej #define CCDF_INITED 0x01 /* unit has been initialized */
191 1.5 thorpej #define CCDF_WLABEL 0x02 /* label area is writable */
192 1.5 thorpej #define CCDF_LABELLING 0x04 /* unit is currently being labelled */
193 1.7 thorpej #define CCDF_WANTED 0x40 /* someone is waiting to obtain a lock */
194 1.7 thorpej #define CCDF_LOCKED 0x80 /* unit is locked */
195 1.5 thorpej
196 1.5 thorpej /*
197 1.5 thorpej * Before you can use a unit, it must be configured with CCDIOCSET.
198 1.5 thorpej * The configuration persists across opens and closes of the device;
199 1.6 thorpej * a CCDIOCCLR must be used to reset a configuration. An attempt to
200 1.5 thorpej * CCDIOCSET an already active unit will return EBUSY. Attempts to
201 1.5 thorpej * CCDIOCCLR an inactive unit will return ENXIO.
202 1.5 thorpej */
203 1.5 thorpej #define CCDIOCSET _IOWR('F', 16, struct ccd_ioctl) /* enable ccd */
204 1.5 thorpej #define CCDIOCCLR _IOW('F', 17, struct ccd_ioctl) /* disable ccd */
205