1 /*-
2 * Copyright (c) 1997, 1998
3 * Nan Yang Computer Services Limited. All rights reserved.
4 *
5 * This software is distributed under the so-called ``Berkeley
6 * License'':
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by Nan Yang Computer
19 * Services Limited.
20 * 4. Neither the name of the Company nor the names of its contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
23 *
24 * This software is provided ``as is'', and any express or implied
25 * warranties, including, but not limited to, the implied warranties of
26 * merchantability and fitness for a particular purpose are disclaimed.
27 * In no event shall the company or contributors be liable for any
28 * direct, indirect, incidental, special, exemplary, or consequential
29 * damages (including, but not limited to, procurement of substitute
30 * goods or services; loss of use, data, or profits; or business
31 * interruption) however caused and on any theory of liability, whether
32 * in contract, strict liability, or tort (including negligence or
33 * otherwise) arising in any way out of the use of this software, even if
34 * advised of the possibility of such damage.
35 *
36 * $Id: vinumio.h,v 1.19 2000/04/26 04:17:33 grog Exp grog $
37 * $FreeBSD$
38 */
39
40 #define L 'F' /* ID letter of our ioctls */
41
42 #ifdef VINUMDEBUG
43 #define MAX_IOCTL_REPLY 1024
44 #else
45 #define MAX_IOCTL_REPLY 256
46 #endif
47
48 #ifdef VINUMDEBUG
49 struct debuginfo {
50 int changeit;
51 int param;
52 };
53
54 #endif
55
56 enum objecttype {
57 drive_object,
58 sd_object,
59 plex_object,
60 volume_object,
61 invalid_object
62 };
63
64 /*
65 * The state to set with VINUM_SETSTATE. Since each object has a
66 * different set of states, we need to translate later.
67 */
68 enum objectstate {
69 object_down,
70 object_initializing,
71 object_initialized,
72 object_up
73 };
74
75 /*
76 * This structure is used for modifying objects
77 * (VINUM_SETSTATE, VINUM_REMOVE, VINUM_RESETSTATS, VINUM_ATTACH,
78 * VINUM_DETACH, VINUM_REPLACE
79 */
80 struct vinum_ioctl_msg {
81 int index;
82 enum objecttype type;
83 enum objectstate state; /* state to set (VINUM_SETSTATE) */
84 enum parityop op; /* for parity ops */
85 int force; /* do it even if it doesn't make sense */
86 int recurse; /* recurse (VINUM_REMOVE) */
87 int verify; /* verify (initsd, rebuildparity) */
88 int otherobject; /* superordinate object (attach),
89 * replacement object (replace) */
90 int rename; /* rename object (attach) */
91 int64_t offset; /* offset of subdisk (for attach) */
92 int blocksize; /* size of block to revive (bytes) */
93 };
94
95 /* VINUM_CREATE returns a buffer of this kind */
96 struct _ioctl_reply {
97 int error;
98 char msg[MAX_IOCTL_REPLY];
99 };
100
101 struct vinum_rename_msg {
102 int index;
103 int recurse; /* rename subordinate objects too */
104 enum objecttype type;
105 char newname[MAXNAME]; /* new name to give to object */
106 };
107
108 /* ioctl requests */
109 #define BUFSIZE 1024 /* size of buffer, including continuations */
110 #define VINUM_CREATE _IOC(IOC_IN | IOC_OUT, L, 64, BUFSIZE) /* configure vinum */
111 #define VINUM_GETCONFIG _IOR(L, 65, struct _vinum_conf) /* get global config */
112 #define VINUM_DRIVECONFIG _IOWR(L, 66, struct drive) /* get drive config */
113 #define VINUM_SDCONFIG _IOWR(L, 67, struct sd) /* get subdisk config */
114 #define VINUM_PLEXCONFIG _IOWR(L, 68, struct plex) /* get plex config */
115 #define VINUM_VOLCONFIG _IOWR(L, 69, struct volume) /* get volume config */
116 #define VINUM_PLEXSDCONFIG _IOWR(L, 70, struct sd) /* get sd config for plex (plex, sdno) */
117 #define VINUM_GETFREELIST _IOWR(L, 71, struct drive_freelist) /* get freelist element (drive, fe) */
118 #define VINUM_SAVECONFIG _IOW(L, 72, int) /* write config to disk */
119 #define VINUM_RESETCONFIG _IOC(0, L, 73, 0) /* trash config on disk */
120 #define VINUM_INIT _IOC(0, L, 74, 0) /* read config from disk */
121 #ifdef VINUMDEBUG
122 #define VINUM_DEBUG _IOWR(L, 75, struct debuginfo) /* call the debugger from ioctl () */
123 #endif
124
125 /*
126 * Start an object. Pass two integers:
127 * msg [0] index in vinum_conf.<object>
128 * msg [1] type of object (see below)
129 *
130 * Return ioctl_reply
131 */
132 #define VINUM_SETSTATE _IOC(IOC_IN | IOC_OUT, L, 76, MAX_IOCTL_REPLY) /* start an object */
133 #define VINUM_RELEASECONFIG _IOC(0, L, 77, 0) /* release locks and write config to disk */
134 #define VINUM_STARTCONFIG _IOW(L, 78, int) /* start a configuration operation */
135 #define VINUM_MEMINFO _IOR(L, 79, struct meminfo) /* get memory usage summary */
136 #define VINUM_MALLOCINFO _IOWR(L, 80, struct mc) /* get specific malloc information [i] */
137 #define VINUM_LABEL _IOC(IOC_IN | IOC_OUT, L, 81, MAX_IOCTL_REPLY) /* label a volume */
138 #define VINUM_INITSD _IOW(L, 82, int) /* initialize a subdisk */
139 #define VINUM_REMOVE _IOWR(L, 83, struct _ioctl_reply) /* remove an object */
140 #define VINUM_READPOL _IOWR(L, 84, struct _ioctl_reply) /* set read policy */
141 #define VINUM_SETSTATE_FORCE _IOC(IOC_IN | IOC_OUT, L, 85, MAX_IOCTL_REPLY) /* diddle object state */
142 #define VINUM_RESETSTATS _IOWR(L, 86, struct _ioctl_reply) /* reset object stats */
143 #define VINUM_ATTACH _IOWR(L, 87, struct _ioctl_reply) /* attach an object */
144 #define VINUM_DETACH _IOWR(L, 88, struct _ioctl_reply) /* remove an object */
145
146 #define VINUM_RENAME _IOWR(L, 89, struct _ioctl_reply) /* rename an object */
147 #define VINUM_REPLACE _IOWR(L, 90, struct _ioctl_reply) /* replace an object */
148
149 #ifdef VINUMDEBUG
150 #define VINUM_RQINFO _IOWR(L, 91, struct rqinfo) /* get request info [i] from trace buffer */
151 #endif
152
153 #define VINUM_DAEMON _IOC(0, L, 92, 0) /* perform the kernel part of Vinum daemon */
154 #define VINUM_FINDDAEMON _IOC(0, L, 93, 0) /* check for presence of Vinum daemon */
155 #define VINUM_SETDAEMON _IOW(L, 94, int) /* set daemon flags */
156 #define VINUM_GETDAEMON _IOR(L, 95, int) /* get daemon flags */
157 #define VINUM_PARITYOP _IOWR(L, 96, struct _ioctl_reply) /* check/rebuild RAID-4/5 parity */
158 #define VINUM_MOVE _IOWR(L, 98, struct _ioctl_reply) /* move an object */
Cache object: b89de5663995297ccee07adc8dcefad9
|