1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2001 - 2003 Sistina Software (UK) Limited.
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2004 - 2009 Red Hat, Inc. All rights reserved.
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This file is released under the LGPL.
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _LINUX_DM_IOCTL_V4_H
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _LINUX_DM_IOCTL_V4_H
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DIR "mapper"		/* Slashes not supported */
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_CONTROL_NODE "control"
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_MAX_TYPE_NAME 16
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_NAME_LEN 128
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UUID_LEN 129
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * A traditional ioctl interface for the device mapper.
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Each device can have two tables associated with it, an
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 'active' table which is the one currently used by io passing
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * through the device, and an 'inactive' one which is a table
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * that is being prepared as a replacement for the 'active' one.
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_VERSION:
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Just get the version information for the ioctl interface.
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_REMOVE_ALL:
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Remove all dm devices, destroy all tables.  Only really used
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for debug.
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_LIST_DEVICES:
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Get a list of all the dm device names.
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_CREATE:
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Create a new device, neither the 'active' or 'inactive' table
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * slots will be filled.  The device will be in suspended state
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * after creation, however any io to the device will get errored
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * since it will be out-of-bounds.
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_REMOVE:
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Remove a device, destroy any tables.
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_RENAME:
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Rename a device or set its uuid if none was previously supplied.
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_SUSPEND:
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This performs both suspend and resume, depending which flag is
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * passed in.
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Suspend: This command will not return until all pending io to
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the device has completed.  Further io will be deferred until
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the device is resumed.
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Resume: It is no longer an error to issue this command on an
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * unsuspended device.  If a table is present in the 'inactive'
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * slot, it will be moved to the active slot, then the old table
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * from the active slot will be _destroyed_.  Finally the device
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is resumed.
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_STATUS:
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Retrieves the status for the table in the 'active' slot.
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_WAIT:
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Wait for a significant event to occur to the device.  This
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * could either be caused by an event triggered by one of the
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * targets of the table in the 'active' slot, or a table change.
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_LOAD:
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Load a table into the 'inactive' slot for the device.  The
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * device does _not_ need to be suspended prior to this command.
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_CLEAR:
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Destroy any table in the 'inactive' slot (ie. abort).
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_DEPS:
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Return a set of device dependencies for the 'active' table.
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TABLE_STATUS:
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Return the targets status for the 'active' table.
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_TARGET_MSG:
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Pass a message string to the target at a specific offset of a device.
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * DM_DEV_SET_GEOMETRY:
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set the geometry of a device by passing in a string in this format:
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * "cylinders heads sectors_per_track start_sector"
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Beware that CHS geometry is nearly obsolete and only provided
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for compatibility with dm devices that can be booted by a PC
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * BIOS.  See struct hd_geometry for range limits.  Also note that
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the geometry is erased if the device size changes.
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * All ioctl arguments consist of a single chunk of memory, with
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * this structure at the start.  If a uuid is specified any
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * lookup (eg. for a DM_INFO) will be done on that, *not* the
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * name.
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_ioctl {
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * The version number is made up of three parts:
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * major - no backward or forward compatibility,
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * minor - only backwards compatible,
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * patch - both backwards and forwards compatible.
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * All clients of the ioctl interface should fill in the
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * version number of the interface that they were
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * compiled with.
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * All recognised ioctl commands (ie. those that don't
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * return -ENOTTY) fill out this field, even if the
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * command failed.
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 version[3];	/* in/out */
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 data_size;	/* total size of data passed in
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				 * including this struct */
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 data_start;	/* offset to start of data
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				 * relative to start of this struct */
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 target_count;	/* in/out */
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32 open_count;	/* out */
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 flags;		/* in/out */
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * event_nr holds either the event number (input and output) or the
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * udev cookie value (input only).
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * The DM_DEV_WAIT ioctl takes an event number as input.
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * The DM_SUSPEND, DM_DEV_REMOVE and DM_DEV_RENAME ioctls
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * use the field as a cookie to return in the DM_COOKIE
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * variable with the uevents they issue.
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * For output, the ioctls return the event number, not the cookie.
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 event_nr;      	/* in/out */
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 padding;
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 dev;		/* in/out */
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[DM_NAME_LEN];	/* device name */
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char uuid[DM_UUID_LEN];	/* unique identifier for
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				 * the block device */
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char data[7];		/* padding or data */
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to specify tables.  These structures appear after the
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * dm_ioctl.
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_spec {
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 sector_start;
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 length;
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__s32 status;		/* used when reading from kernel only */
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * Location of the next dm_target_spec.
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * - When specifying targets on a DM_TABLE_LOAD command, this value is
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   the number of bytes from the start of the "current" dm_target_spec
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   to the start of the "next" dm_target_spec.
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * - When retrieving targets on a DM_TABLE_STATUS command, this value
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   is the number of bytes from the start of the first dm_target_spec
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   (that follows the dm_ioctl struct) to the start of the "next"
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *   dm_target_spec.
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 next;
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char target_type[DM_MAX_TYPE_NAME];
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * Parameter string starts immediately after this object.
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * Be careful to add padding after string to ensure correct
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * alignment of subsequent dm_target_spec.
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to retrieve the target dependencies.
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_deps {
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 count;	/* Array size */
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 padding;	/* unused */
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 dev[0];	/* out */
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to get a list of all dm devices.
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_name_list {
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 dev;
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 next;		/* offset to the next record from
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   the _start_ of this */
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char name[0];
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to retrieve the target versions
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_versions {
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng        __u32 next;
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng        __u32 version[3];
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng        char name[0];
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
208224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Used to pass message to a target
209224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
210224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct dm_target_msg {
211224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 sector;	/* Device sector */
212224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
213224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	char message[0];
214224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
215224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
216224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
217224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If you change this make sure you make the corresponding change
218224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * to dm-ioctl.c:lookup_ioctl()
219224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
220224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
221224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Top level cmds */
222224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_VERSION_CMD = 0,
223224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_REMOVE_ALL_CMD,
224224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_LIST_DEVICES_CMD,
225224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
226224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* device level cmds */
227224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_CREATE_CMD,
228224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_REMOVE_CMD,
229224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_RENAME_CMD,
230224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_SUSPEND_CMD,
231224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_STATUS_CMD,
232224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_WAIT_CMD,
233224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
234224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Table level cmds */
235224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_TABLE_LOAD_CMD,
236224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_TABLE_CLEAR_CMD,
237224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_TABLE_DEPS_CMD,
238224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_TABLE_STATUS_CMD,
239224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
240224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/* Added later */
241224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_LIST_VERSIONS_CMD,
242224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_TARGET_MSG_CMD,
243224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DM_DEV_SET_GEOMETRY_CMD
244224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
245224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
246224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_IOCTL 0xfd
247224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
248224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION       _IOWR(DM_IOCTL, DM_VERSION_CMD, struct dm_ioctl)
249224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_REMOVE_ALL    _IOWR(DM_IOCTL, DM_REMOVE_ALL_CMD, struct dm_ioctl)
250224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_LIST_DEVICES  _IOWR(DM_IOCTL, DM_LIST_DEVICES_CMD, struct dm_ioctl)
251224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
252224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_CREATE    _IOWR(DM_IOCTL, DM_DEV_CREATE_CMD, struct dm_ioctl)
253224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_REMOVE    _IOWR(DM_IOCTL, DM_DEV_REMOVE_CMD, struct dm_ioctl)
254224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_RENAME    _IOWR(DM_IOCTL, DM_DEV_RENAME_CMD, struct dm_ioctl)
255224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_SUSPEND   _IOWR(DM_IOCTL, DM_DEV_SUSPEND_CMD, struct dm_ioctl)
256224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_STATUS    _IOWR(DM_IOCTL, DM_DEV_STATUS_CMD, struct dm_ioctl)
257224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_WAIT      _IOWR(DM_IOCTL, DM_DEV_WAIT_CMD, struct dm_ioctl)
258224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
259224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_LOAD    _IOWR(DM_IOCTL, DM_TABLE_LOAD_CMD, struct dm_ioctl)
260224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_CLEAR   _IOWR(DM_IOCTL, DM_TABLE_CLEAR_CMD, struct dm_ioctl)
261224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_DEPS    _IOWR(DM_IOCTL, DM_TABLE_DEPS_CMD, struct dm_ioctl)
262224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TABLE_STATUS  _IOWR(DM_IOCTL, DM_TABLE_STATUS_CMD, struct dm_ioctl)
263224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
264224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_LIST_VERSIONS _IOWR(DM_IOCTL, DM_LIST_VERSIONS_CMD, struct dm_ioctl)
265224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
266224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_TARGET_MSG	 _IOWR(DM_IOCTL, DM_TARGET_MSG_CMD, struct dm_ioctl)
267224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DEV_SET_GEOMETRY	_IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
268224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
269224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION_MAJOR	4
270e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_VERSION_MINOR	27
271224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_VERSION_PATCHLEVEL	0
272e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_VERSION_EXTRA	"-ioctl (2013-10-30)"
273224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
274224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Status bits */
275224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_READONLY_FLAG	(1 << 0) /* In/Out */
276224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SUSPEND_FLAG		(1 << 1) /* In/Out */
277224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_PERSISTENT_DEV_FLAG	(1 << 3) /* In */
278224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
279224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
280224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Flag passed into ioctl STATUS command to get table information
281224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * rather than current status.
282224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
283224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_STATUS_TABLE_FLAG	(1 << 4) /* In */
284224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
285224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
286224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Flags that indicate whether a table is present in either of
287224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the two table slots that a device has.
288224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
289224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_ACTIVE_PRESENT_FLAG   (1 << 5) /* Out */
290224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_INACTIVE_PRESENT_FLAG (1 << 6) /* Out */
291224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
292224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
293224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Indicates that the buffer passed in wasn't big enough for the
294224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * results.
295224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
296224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_BUFFER_FULL_FLAG	(1 << 8) /* Out */
297224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
298224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
299224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This flag is now ignored.
300224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
301224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SKIP_BDGET_FLAG	(1 << 9) /* In */
302224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
303224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
304224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set this to avoid attempting to freeze any filesystem when suspending.
305224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
306224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SKIP_LOCKFS_FLAG	(1 << 10) /* In */
307224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
308224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
309224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Set this to suspend without flushing queued ios.
310224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Also disables flushing uncommitted changes in the thin target before
311224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * generating statistics for DM_TABLE_STATUS and DM_DEV_WAIT.
312224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
313224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_NOFLUSH_FLAG		(1 << 11) /* In */
314224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
315224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
316224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, any table information returned will relate to the inactive
317224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * table instead of the live one.  Always check DM_INACTIVE_PRESENT_FLAG
318224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is set before using the data returned.
319224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
320224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_QUERY_INACTIVE_TABLE_FLAG	(1 << 12) /* In */
321224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
322224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
323224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, a uevent was generated for which the caller may need to wait.
324224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
325224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UEVENT_GENERATED_FLAG	(1 << 13) /* Out */
326224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
327224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
328224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, rename changes the uuid not the name.  Only permitted
329224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * if no uuid was previously supplied: an existing uuid cannot be changed.
330224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
331224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_UUID_FLAG			(1 << 14) /* In */
332224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
333224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
334224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, all buffers are wiped after use. Use when sending
335224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * or requesting sensitive data such as an encryption key.
336224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
337224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_SECURE_DATA_FLAG		(1 << 15) /* In */
338224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
339224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
340224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * If set, a message generated output data.
341224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
342224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define DM_DATA_OUT_FLAG		(1 << 16) /* Out */
343224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
344e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/*
345e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * If set with DM_DEV_REMOVE or DM_REMOVE_ALL this indicates that if
346e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * the device cannot be removed immediately because it is still in use
347e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * it should instead be scheduled for removal when it gets closed.
348e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl *
349e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * On return from DM_DEV_REMOVE, DM_DEV_STATUS or other ioctls, this
350e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * flag indicates that the device is scheduled to be removed when it
351e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl * gets closed.
352e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl */
353e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define DM_DEFERRED_REMOVE		(1 << 17) /* In/Out */
354e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
355224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif				/* _LINUX_DM_IOCTL_H */
356