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