1 /* $OpenBSD: rf_raidframe.h,v 1.6 2002/12/16 07:01:05 tdeval Exp $ */
2 /* $NetBSD: rf_raidframe.h,v 1.11 2000/05/28 00:48:31 oster Exp $ */
3
4 /*
5 * Copyright (c) 1995 Carnegie-Mellon University.
6 * All rights reserved.
7 *
8 * Author: Mark Holland
9 *
10 * Permission to use, copy, modify and distribute this software and
11 * its documentation is hereby granted, provided that both the copyright
12 * notice and this permission notice appear in all copies of the
13 * software, derivative works or modified versions, and any portions
14 * thereof, and that both notices appear in supporting documentation.
15 *
16 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
17 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
18 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
19 *
20 * Carnegie Mellon requests users of this software to return to
21 *
22 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
23 * School of Computer Science
24 * Carnegie Mellon University
25 * Pittsburgh PA 15213-3890
26 *
27 * any improvements or extensions that they make and grant Carnegie the
28 * rights to redistribute these changes.
29 */
30
31 /*****************************************************
32 *
33 * rf_raidframe.h
34 *
35 * Main header file for using RAIDframe in the kernel.
36 *
37 *****************************************************/
38
39
40 #ifndef _RF__RF_RAIDFRAME_H_
41 #define _RF__RF_RAIDFRAME_H_
42
43 #include "rf_types.h"
44 #include "rf_configure.h"
45 #include "rf_disks.h"
46 #include "rf_raid.h"
47
48 typedef RF_uint32 RF_ReconReqFlags_t;
49
50 struct rf_recon_req { /* Used to tell the kernel to fail a disk. */
51 RF_RowCol_t row, col;
52 RF_ReconReqFlags_t flags;
53 void *raidPtr; /*
54 * Used internally; need not be
55 * set at ioctl time.
56 */
57 struct rf_recon_req *next; /*
58 * Used internally; need not be
59 * set at ioctl time.
60 */
61 };
62
63 struct RF_SparetWait_s {
64 int C, G, fcol; /*
65 * C = # disks in row,
66 * G = # units in stripe,
67 * fcol = which disk has failed
68 */
69
70 RF_StripeCount_t SUsPerPU; /*
71 * This stuff is the info
72 * required to create a spare
73 * table.
74 */
75 int TablesPerSpareRegion;
76 int BlocksPerTable;
77 RF_StripeCount_t TableDepthInPUs;
78 RF_StripeCount_t SpareSpaceDepthPerRegionInSUs;
79
80 RF_SparetWait_t *next; /*
81 * Used internally; need not be
82 * set at ioctl time.
83 */
84 };
85
86 typedef struct RF_DeviceConfig_s {
87 u_int rows;
88 u_int cols;
89 u_int maxqdepth;
90 int ndevs;
91 RF_RaidDisk_t devs[RF_MAX_DISKS];
92 int nspares;
93 RF_RaidDisk_t spares[RF_MAX_DISKS];
94 } RF_DeviceConfig_t;
95
96
97 typedef struct RF_ProgressInfo_s {
98 RF_uint64 remaining;
99 RF_uint64 completed;
100 RF_uint64 total;
101 } RF_ProgressInfo_t;
102
103 /* Flags that can be put in the rf_recon_req structure. */
104 #define RF_FDFLAGS_NONE 0x0 /* Just fail the disk. */
105 #define RF_FDFLAGS_RECON 0x1 /* Fail and initiate recon. */
106
107 #define RF_SCSI_DISK_MAJOR 8 /*
108 * The device major number for disks
109 * in the system.
110 */
111
112 /* Configure the driver. */
113 #define RAIDFRAME_CONFIGURE _IOW ('r', 1, void *)
114 /* Shutdown the driver. */
115 #define RAIDFRAME_SHUTDOWN _IO ('r', 2)
116 /* Debug only: test unit ready. */
117 #define RAIDFRAME_TUR _IOW ('r', 3, dev_t)
118 /* Run a test access. */
119 #define RAIDFRAME_TEST_ACC _IOWR('r', 4, struct rf_test_acc)
120 /* Fail a disk & optionally start recon. */
121 #define RAIDFRAME_FAIL_DISK _IOW ('r', 5, struct rf_recon_req)
122 /* Get reconstruction % complete on indicated row. */
123 #define RAIDFRAME_CHECK_RECON_STATUS _IOWR('r', 6, int)
124 /* Rewrite (initialize) all parity. */
125 #define RAIDFRAME_REWRITEPARITY _IO ('r', 7)
126 /* Copy reconstructed data back to replaced disk. */
127 #define RAIDFRAME_COPYBACK _IO ('r', 8)
128 /* Does not return until kernel needs a spare table. */
129 #define RAIDFRAME_SPARET_WAIT _IOR ('r', 9, RF_SparetWait_t)
130 /* Used to send a spare table down into the kernel. */
131 #define RAIDFRAME_SEND_SPARET _IOW ('r', 10, void *)
132 /* Used to wake up the sparemap daemon & tell it to exit. */
133 #define RAIDFRAME_ABORT_SPARET_WAIT _IO ('r', 11)
134 /* Start tracing accesses. */
135 #define RAIDFRAME_START_ATRAC _IO ('r', 12)
136 /* Stop tracing accesses. */
137 #define RAIDFRAME_STOP_ATRACE _IO ('r', 13)
138 /* Get size (# sectors) in raid device. */
139 #define RAIDFRAME_GET_SIZE _IOR ('r', 14, int)
140 /* Get configuration. */
141 #define RAIDFRAME_GET_INFO _IOWR('r', 15, RF_DeviceConfig_t *)
142 /* Reset AccTotals for device. */
143 #define RAIDFRAME_RESET_ACCTOTALS _IO ('r', 16)
144 /* Retrieve AccTotals for device. */
145 #define RAIDFRAME_GET_ACCTOTALS _IOR ('r', 17, RF_AccTotals_t)
146 /* Turn AccTotals on or off for device. */
147 #define RAIDFRAME_KEEP_ACCTOTALS _IOW ('r', 18, int)
148
149 #define RAIDFRAME_GET_COMPONENT_LABEL _IOWR ('r', 19, RF_ComponentLabel_t *)
150 #define RAIDFRAME_SET_COMPONENT_LABEL _IOW ('r', 20, RF_ComponentLabel_t)
151
152 #define RAIDFRAME_INIT_LABELS _IOW ('r', 21, RF_ComponentLabel_t)
153 #define RAIDFRAME_ADD_HOT_SPARE _IOW ('r', 22, RF_SingleComponent_t)
154 #define RAIDFRAME_REMOVE_HOT_SPARE _IOW ('r', 23, RF_SingleComponent_t)
155 #define RAIDFRAME_REBUILD_IN_PLACE _IOW ('r', 24, RF_SingleComponent_t)
156 #define RAIDFRAME_CHECK_PARITY _IOWR ('r', 25, int)
157 #define RAIDFRAME_CHECK_PARITYREWRITE_STATUS _IOWR ('r', 26, int)
158 #define RAIDFRAME_CHECK_COPYBACK_STATUS _IOWR ('r', 27, int)
159 #define RAIDFRAME_SET_AUTOCONFIG _IOWR ('r', 28, int)
160 #define RAIDFRAME_SET_ROOT _IOWR ('r', 29, int)
161 #define RAIDFRAME_DELETE_COMPONENT _IOW ('r', 30, RF_SingleComponent_t)
162 #define RAIDFRAME_INCORPORATE_HOT_SPARE _IOW ('r', 31, RF_SingleComponent_t)
163
164 /* 'Extended' status versions. */
165 #define RAIDFRAME_CHECK_RECON_STATUS_EXT \
166 _IOWR('r', 32, RF_ProgressInfo_t *)
167 #define RAIDFRAME_CHECK_PARITYREWRITE_STATUS_EXT \
168 _IOWR ('r', 33, RF_ProgressInfo_t *)
169 #define RAIDFRAME_CHECK_COPYBACK_STATUS_EXT \
170 _IOWR ('r', 34, RF_ProgressInfo_t *)
171
172 #endif /* !_RF__RF_RAIDFRAME_H_ */