xref: /netbsd-src/sys/dev/dm/netbsd-dm.h (revision deb6f0161a9109e7de9b519dc8dfb9478668dcdd)
1 /*        $NetBSD: netbsd-dm.h,v 1.8 2017/06/04 08:50:27 mbalmer Exp $      */
2 
3 /*
4  * Copyright (c) 2008 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Adam Hamsik.
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  *
19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef __NETBSD_DM_H__
33 #define __NETBSD_DM_H__
34 
35 #include <sys/ioccom.h>
36 #include <prop/proplib.h>
37 
38 #define DM_CMD_LEN 16
39 
40 #define DM_IOCTL 0xfd
41 
42 #define DM_IOCTL_CMD 0
43 
44 #define NETBSD_DM_IOCTL       _IOWR(DM_IOCTL, DM_IOCTL_CMD, struct plistref)
45 
46 
47 /*
48  * DM-ioctl dictionary.
49  *
50  * This contains general information about dm device.
51  *
52  * <dict>
53  *     <key>command</key>
54  *     <string>...</string>
55  *
56  *     <key>event_nr</key>
57  *     <integer>...</integer>
58  *
59  *     <key>name</key>
60  *     <string>...</string>
61  *
62  *     <key>uuid</key>
63  *     <string>...</string>
64  *
65  *     <key>dev</key>
66  *     <integer></integer>
67  *
68  *     <key>flags</key>
69  *     <integer></integer>
70  *
71  *     <key>version</key>
72  *      <array>
73  *       <integer>...</integer>
74  *       <integer>...</integer>
75  *       <integer>...</integer>
76  *      </array>
77  *
78  *      <key>cmd_data</key>
79  *       <array>
80  *        <!-- See below for command
81  *             specific dictionaries -->
82  *       </array>
83  * </dict>
84  *
85  * Available commands from _cmd_data_v4.
86  *
87  * create, reload, remove, remove_all, suspend,
88  * resume, info, deps, rename, version, status,
89  * table, waitevent, names, clear, mknodes,
90  * targets, message, setgeometry
91  *
92  */
93 
94 /*
95  * DM_LIST_VERSIONS == "targets" command dictionary entry.
96  * Lists all available targets with their version.
97  *
98  * <array>
99  *   <dict>
100  *    <key>name<key>
101  *    <string>...</string>
102  *
103  *    <key>version</key>
104  *      <array>
105  *       <integer>...</integer>
106  *       <integer>...</integer>
107  *       <integer>...</integer>
108  *      </array>
109  *   </dict>
110  * </array>
111  *
112  */
113 
114 /*
115  * DM_DEV_LIST == "names"
116  * Request list of device-mapper created devices from kernel.
117  *
118  * <array>
119  *   <dict>
120  *    <key>name<key>
121  *    <string>...</string>
122  *
123  *    <key>dev</key>
124  *    <integer>...</integer>
125  *   </dict>
126  * </array>
127  *
128  * dev is uint64_t
129  *
130  */
131 
132  /*
133   * DM_DEV_RENAME == "rename"
134   * Rename device to string.
135   *
136   * <array>
137   *    <string>...</string>
138   * </array>
139   *
140   */
141 
142  /*
143   * DM_DEV_STATUS == "info, mknodes"
144   * Will change fields DM_IOCTL_OPEN, DM_IOCTL_DEV in received dictionary,
145   * with dm device values with name or uuid from list.
146   *
147   */
148 
149  /*
150   * DM_TABLE_STATUS == "status,table"
151   * Request list of device-mapper created devices from kernel.
152   *
153   * <array>
154   *   <dict>
155   *    <key>type<key>
156   *    <string>...</string>
157   *
158   *    <key>start</key>
159   *    <integer>...</integer>
160   *
161   *    <key>length</key>
162   *    <integer>...</integer>
163   *
164   *    <key>params</key>
165   *    <string>...</string>
166   *   </dict>
167   * </array>
168   *
169   * params is string which contains {device} {parameters}
170   *
171   */
172 
173  /*
174   * DM_TABLE_DEPS == "deps"
175   * Request list active table device dependencies.
176   *
177   * This command is also run to get dm-device
178   * dependencies for existing real block device.
179   *
180   * eg. vgcreate calls DM_TABLE_DEPS
181   *
182   * <array>
183   *   <integer>...</integer>
184   * </array>
185   *
186   */
187 
188 
189 #define DM_IOCTL_COMMAND      "command"
190 #define DM_IOCTL_VERSION      "version"
191 #define DM_IOCTL_OPEN         "open_count"
192 #define DM_IOCTL_MINOR        "minor"
193 #define DM_IOCTL_NAME         "name"
194 #define DM_IOCTL_UUID         "uuid"
195 #define DM_IOCTL_TARGET_COUNT "target_count"
196 #define DM_IOCTL_EVENT        "event_nr"
197 #define DM_IOCTL_FLAGS        "flags"
198 #define DM_IOCTL_CMD_DATA     "cmd_data"
199 
200 #define DM_TARGETS_NAME       "name"
201 #define DM_TARGETS_VERSION    "ver"
202 
203 #define DM_DEV_NEWNAME        "newname"
204 #define DM_DEV_NAME           "name"
205 #define DM_DEV_DEV            "dev"
206 
207 #define DM_TABLE_TYPE         "type"
208 #define DM_TABLE_START        "start"
209 #define DM_TABLE_STAT         "status"
210 #define DM_TABLE_LENGTH       "length"
211 #define DM_TABLE_PARAMS       "params"
212 //#ifndef __LIB_DEVMAPPER__
213 //#define DM_TABLE_DEPS         "deps"
214 //#endif
215 
216 /* Status bits */
217 /* IO mode of device */
218 #define DM_READONLY_FLAG	(1 << 0) /* In/Out *//* to kernel/from kernel */
219 #define DM_SUSPEND_FLAG		(1 << 1) /* In/Out */
220 /* XXX. This flag is undocumented. */
221 #define DM_EXISTS_FLAG          (1 << 2) /* In/Out */
222 /* Minor number is persistent */
223 #define DM_PERSISTENT_DEV_FLAG	(1 << 3) /* In */
224 
225 /*
226  * Flag passed into ioctl STATUS command to get table information
227  * rather than current status.
228  */
229 #define DM_STATUS_TABLE_FLAG	(1 << 4) /* In */
230 
231 /*
232  * Flags that indicate whether a table is present in either of
233  * the two table slots that a device has.
234  */
235 #define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */
236 #define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
237 
238 /*
239  * Indicates that the buffer passed in wasn't big enough for the
240  * results.
241  */
242 #define DM_BUFFER_FULL_FLAG	(1 << 8) /* Out */
243 
244 /*
245  * This flag is now ignored.
246  */
247 #define DM_SKIP_BDGET_FLAG	(1 << 9) /* In */
248 
249 /*
250  * Set this to avoid attempting to freeze any filesystem when suspending.
251  */
252 #define DM_SKIP_LOCKFS_FLAG	(1 << 10) /* In */
253 
254 /*
255  * Set this to suspend without flushing queued ios.
256  */
257 #define DM_NOFLUSH_FLAG		(1 << 11) /* In */
258 
259 /*
260  * If set, any table information returned will relate to the inactive
261  * table instead of the live one.  Always check DM_INACTIVE_PRESENT_FLAG
262  * is set before using the data returned.
263  */
264 #define DM_QUERY_INACTIVE_TABLE_FLAG    (1 << 12) /* In */
265 
266 #endif /* __NETBSD_DM_H__ */
267