xref: /dragonfly/sys/dev/raid/vinum/vinumio.h (revision 9f3fc534)
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: src/sys/dev/vinum/vinumio.h,v 1.18.2.1 2000/05/11 08:49:22 grog Exp $
38  * $DragonFly: src/sys/dev/raid/vinum/vinumio.h,v 1.2 2003/06/17 04:28:33 dillon Exp $
39  */
40 
41 #include <sys/ioccom.h>
42 
43 #define L 'F'						    /* ID letter of our ioctls */
44 
45 #ifdef VINUMDEBUG
46 #define MAX_IOCTL_REPLY 1024
47 #else
48 #define MAX_IOCTL_REPLY 256
49 #endif
50 
51 #ifdef VINUMDEBUG
52 struct debuginfo {
53     int changeit;
54     int param;
55 };
56 
57 #endif
58 
59 enum objecttype {
60     drive_object,
61     sd_object,
62     plex_object,
63     volume_object,
64     invalid_object
65 };
66 
67 /*
68  * The state to set with VINUM_SETSTATE.  Since each object has a
69  * different set of states, we need to translate later.
70  */
71 enum objectstate {
72     object_down,
73     object_initializing,
74     object_initialized,
75     object_up
76 };
77 
78 /*
79  * This structure is used for modifying objects
80  * (VINUM_SETSTATE, VINUM_REMOVE, VINUM_RESETSTATS, VINUM_ATTACH,
81  * VINUM_DETACH, VINUM_REPLACE
82  */
83 struct vinum_ioctl_msg {
84     int index;
85     enum objecttype type;
86     enum objectstate state;				    /* state to set (VINUM_SETSTATE) */
87     enum parityop op;					    /* for parity ops */
88     int force;						    /* do it even if it doesn't make sense */
89     int recurse;					    /* recurse (VINUM_REMOVE) */
90     int verify;						    /* verify (initsd, rebuildparity) */
91     int otherobject;					    /* superordinate object (attach),
92 							    * replacement object (replace) */
93     int rename;						    /* rename object (attach) */
94     int64_t offset;					    /* offset of subdisk (for attach) */
95     int blocksize;					    /* size of block to revive (bytes) */
96 };
97 
98 /* VINUM_CREATE returns a buffer of this kind */
99 struct _ioctl_reply {
100     int error;
101     char msg[MAX_IOCTL_REPLY];
102 };
103 
104 struct vinum_rename_msg {
105     int index;
106     int recurse;					    /* rename subordinate objects too */
107     enum objecttype type;
108     char newname[MAXNAME];				    /* new name to give to object */
109 };
110 
111 /* ioctl requests */
112 #define BUFSIZE 1024					    /* size of buffer, including continuations */
113 #define VINUM_CREATE		_IOC(IOC_IN | IOC_OUT, L, 64, BUFSIZE) /* configure vinum */
114 #define VINUM_GETCONFIG		_IOR(L, 65, struct _vinum_conf)	/* get global config */
115 #define VINUM_DRIVECONFIG	_IOWR(L, 66, struct drive)  /* get drive config */
116 #define VINUM_SDCONFIG		_IOWR(L, 67, struct sd)	    /* get subdisk config */
117 #define VINUM_PLEXCONFIG	_IOWR(L, 68, struct plex)   /* get plex config */
118 #define VINUM_VOLCONFIG		_IOWR(L, 69, struct volume) /* get volume config */
119 #define VINUM_PLEXSDCONFIG	_IOWR(L, 70, struct sd)	    /* get sd config for plex (plex, sdno) */
120 #define VINUM_GETFREELIST	_IOWR(L, 71, struct drive_freelist) /* get freelist element (drive, fe) */
121 #define VINUM_SAVECONFIG	_IOW(L, 72, int)	    /* write config to disk */
122 #define VINUM_RESETCONFIG	_IOC(0, L, 73, 0)	    /* trash config on disk */
123 #define VINUM_INIT		_IOC(0, L, 74, 0)	    /* read config from disk */
124 #ifdef VINUMDEBUG
125 #define VINUM_DEBUG		_IOWR(L, 75, struct debuginfo) /* call the debugger from ioctl () */
126 #endif
127 
128 /*
129  * Start an object.  Pass two integers:
130  * msg [0] index in vinum_conf.<object>
131  * msg [1] type of object (see below)
132  *
133  * Return ioctl_reply
134  */
135 #define VINUM_SETSTATE 		_IOC(IOC_IN | IOC_OUT, L, 76, MAX_IOCTL_REPLY) /* start an object */
136 #define VINUM_RELEASECONFIG	_IOC(0, L, 77, 0)	    /* release locks and write config to disk */
137 #define VINUM_STARTCONFIG	_IOW(L, 78, int)	    /* start a configuration operation */
138 #define VINUM_MEMINFO 		_IOR(L, 79, struct meminfo) /* get memory usage summary */
139 #define VINUM_MALLOCINFO	_IOWR(L, 80, struct mc)	    /* get specific malloc information [i] */
140 #define VINUM_LABEL 		_IOC(IOC_IN | IOC_OUT, L, 81, MAX_IOCTL_REPLY) /* label a volume */
141 #define VINUM_INITSD 		_IOW(L, 82, int)	    /* initialize a subdisk */
142 #define VINUM_REMOVE 		_IOWR(L, 83, struct _ioctl_reply) /* remove an object */
143 #define VINUM_READPOL 		_IOWR(L, 84, struct _ioctl_reply) /* set read policy */
144 #define VINUM_SETSTATE_FORCE	_IOC(IOC_IN | IOC_OUT, L, 85, MAX_IOCTL_REPLY) /* diddle object state */
145 #define VINUM_RESETSTATS	_IOWR(L, 86, struct _ioctl_reply) /* reset object stats */
146 #define VINUM_ATTACH		_IOWR(L, 87, struct _ioctl_reply) /* attach an object */
147 #define VINUM_DETACH		_IOWR(L, 88, struct _ioctl_reply) /* remove an object */
148 
149 #define VINUM_RENAME		_IOWR(L, 89, struct _ioctl_reply) /* rename an object */
150 #define VINUM_REPLACE		_IOWR(L, 90, struct _ioctl_reply) /* replace an object */
151 
152 #ifdef VINUMDEBUG
153 #define VINUM_RQINFO		_IOWR(L, 91, struct rqinfo) /* get request info [i] from trace buffer */
154 #endif
155 
156 #define VINUM_DAEMON		_IOC(0, L, 92, 0)	    /* perform the kernel part of Vinum daemon */
157 #define VINUM_FINDDAEMON	_IOC(0, L, 93, 0)	    /* check for presence of Vinum daemon */
158 #define VINUM_SETDAEMON		_IOW(L, 94, int)	    /* set daemon flags */
159 #define VINUM_GETDAEMON		_IOR(L, 95, int)	    /* get daemon flags */
160 #define VINUM_PARITYOP   	_IOWR(L, 96, struct _ioctl_reply) /* check/rebuild RAID-4/5 parity */
161 #define VINUM_MOVE		_IOWR(L, 98, struct _ioctl_reply) /* move an object */
162