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