1 /* $OpenBSD: rf_openbsd.h,v 1.5 2002/12/16 07:01:04 tdeval 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 Greg Oster
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 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the NetBSD
21 * Foundation, Inc. and its contributors.
22 * 4. Neither the name of The NetBSD Foundation nor the names of its
23 * contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 * POSSIBILITY OF SUCH DAMAGE.
37 */
38
39 /*
40 * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
41 * All rights reserved.
42 *
43 * This code is derived from software contributed to The NetBSD Foundation
44 * by Jason R. Thorpe.
45 *
46 * Redistribution and use in source and binary forms, with or without
47 * modification, are permitted provided that the following conditions
48 * are met:
49 * 1. Redistributions of source code must retain the above copyright
50 * notice, this list of conditions and the following disclaimer.
51 * 2. Redistributions in binary form must reproduce the above copyright
52 * notice, this list of conditions and the following disclaimer in the
53 * documentation and/or other materials provided with the distribution.
54 * 3. All advertising materials mentioning features or use of this software
55 * must display the following acknowledgement:
56 * This product includes software developed by the NetBSD
57 * Foundation, Inc. and its contributors.
58 * 4. Neither the name of The NetBSD Foundation nor the names of its
59 * contributors may be used to endorse or promote products derived
60 * from this software without specific prior written permission.
61 *
62 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
63 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
64 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
65 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
66 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
67 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
68 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
69 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
70 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
71 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
72 * POSSIBILITY OF SUCH DAMAGE.
73 */
74
75
76 #ifndef _RF__RF_OPENBSD_H_
77 #define _RF__RF_OPENBSD_H_
78
79 #ifdef _KERNEL
80 #include <sys/fcntl.h>
81 #include <sys/systm.h>
82 #include <sys/namei.h>
83 #include <sys/vnode.h>
84 #endif /* _KERNEL */
85
86 /* The per-component label information that the user can set. */
87 typedef struct RF_ComponentInfo_s {
88 int row; /* The row number of this component. */
89 int column; /* The column number of this component. */
90 int serial_number; /*
91 * A user-specified serial number for this
92 * RAID set.
93 */
94 } RF_ComponentInfo_t;
95
96 /* The per-component label information. */
97 typedef struct RF_ComponentLabel_s {
98 int version; /* The version of this label. */
99 int serial_number; /*
100 * A user-specified serial number for this
101 * RAID set.
102 */
103 int mod_counter; /*
104 * Modification counter. Changed (usually
105 * by incrementing) every time the label
106 * is changed.
107 */
108 int row; /* The row number of this component. */
109 int column; /* The column number of this component. */
110 int num_rows; /* Number of rows in this RAID set. */
111 int num_columns; /* Number of columns in this RAID set. */
112 int clean; /* 1 when clean, 0 when dirty. */
113 int status; /*
114 * rf_ds_optimal, rf_ds_dist_spared, whatever.
115 */
116 /* Stuff that will be in version 2 of the label. */
117 int sectPerSU; /* Sectors per Stripe Unit. */
118 int SUsPerPU; /* Stripe Units per Parity Units. */
119 int SUsPerRU; /* Stripe Units per Reconstruction Units. */
120 int parityConfig; /* '0' == RAID0, '1' == RAID1, etc. */
121 int maxOutstanding; /* maxOutstanding disk requests. */
122 int blockSize; /*
123 * Size of component block.
124 * (disklabel->d_secsize)
125 */
126 int numBlocks; /*
127 * Number of blocks on this component. May
128 * be smaller than the partition size.
129 */
130 int partitionSize; /*
131 * Number of blocks on this *partition*.
132 * Must exactly match the partition size
133 * from the disklabel.
134 */
135 int future_use[33]; /* Future expansion. */
136 int autoconfigure; /*
137 * Automatically configure this RAID set.
138 * 0 == no, 1 == yes
139 */
140 int root_partition; /*
141 * Use this set as :
142 * 0 == no, 1 == yes
143 */
144 int last_unit; /*
145 * Last unit number (e.g. 0 for /dev/raid0)
146 * of this component. Used for autoconfigure
147 * only.
148 */
149 int config_order; /*
150 * 0 .. n. The order in which the component
151 * should be auto-configured. E.g. 0 is will
152 * done first, (and would become raid0).
153 * This may be in conflict with last_unit !!?!
154 */
155 /* Not currently used. */
156 int fut_use2[44]; /* More future expansion. */
157 } RF_ComponentLabel_t;
158
159 typedef struct RF_SingleComponent_s {
160 int row;
161 int column;
162 char component_name[50]; /* name of the component */
163 } RF_SingleComponent_t;
164
165 #ifdef _KERNEL
166
167 struct raidcinfo {
168 struct vnode *ci_vp; /* Component device's vnode. */
169 dev_t ci_dev; /* Component device's dev_t. */
170 RF_ComponentLabel_t ci_label; /*
171 * Components RAIDframe label.
172 */
173 #if 0
174 size_t ci_size; /* Size. */
175 char *ci_path; /* Path to component. */
176 size_t ci_pathlen; /* Length of component path. */
177 #endif
178 };
179
180 /* XXX Probably belongs in a different .h file. */
181 typedef struct RF_AutoConfig_s {
182 char devname[56]; /*
183 * The name of this component.
184 */
185 int flag; /* A general-purpose flag. */
186 dev_t dev; /*
187 * The device for this
188 * component.
189 */
190 struct vnode *vp; /* Master Vnode Pointer. */
191 RF_ComponentLabel_t *clabel; /* The label. */
192 struct RF_AutoConfig_s *next; /*
193 * The next autoconfig
194 * structure in this set.
195 */
196 } RF_AutoConfig_t;
197
198 typedef struct RF_ConfigSet_s {
199 struct RF_AutoConfig_s *ac; /*
200 * All of the autoconfig
201 * structures for this
202 * config set.
203 */
204 int rootable; /*
205 * Set to 1 if this set can
206 * be root.
207 */
208 struct RF_ConfigSet_s *next;
209 } RF_ConfigSet_t;
210
211
212 #endif /* _KERNEL */
213 #endif /* _RF__RF_OPENBSD_H_ */