xref: /dflybsd-src/lib/libdm/libdm.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino /*
2*86d7f5d3SJohn Marino  * Copyright (c) 2011 Alex Hornung <alex@alexhornung.com>.
3*86d7f5d3SJohn Marino  * All rights reserved.
4*86d7f5d3SJohn Marino  *
5*86d7f5d3SJohn Marino  * Redistribution and use in source and binary forms, with or without
6*86d7f5d3SJohn Marino  * modification, are permitted provided that the following conditions
7*86d7f5d3SJohn Marino  * are met:
8*86d7f5d3SJohn Marino  *
9*86d7f5d3SJohn Marino  * 1. Redistributions of source code must retain the above copyright
10*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer.
11*86d7f5d3SJohn Marino  * 2. Redistributions in binary form must reproduce the above copyright
12*86d7f5d3SJohn Marino  *    notice, this list of conditions and the following disclaimer in
13*86d7f5d3SJohn Marino  *    the documentation and/or other materials provided with the
14*86d7f5d3SJohn Marino  *    distribution.
15*86d7f5d3SJohn Marino  *
16*86d7f5d3SJohn Marino  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17*86d7f5d3SJohn Marino  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18*86d7f5d3SJohn Marino  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19*86d7f5d3SJohn Marino  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
20*86d7f5d3SJohn Marino  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21*86d7f5d3SJohn Marino  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
22*86d7f5d3SJohn Marino  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23*86d7f5d3SJohn Marino  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24*86d7f5d3SJohn Marino  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25*86d7f5d3SJohn Marino  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26*86d7f5d3SJohn Marino  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27*86d7f5d3SJohn Marino  * SUCH DAMAGE.
28*86d7f5d3SJohn Marino  */
29*86d7f5d3SJohn Marino 
30*86d7f5d3SJohn Marino /* Make dm_task opaque */
31*86d7f5d3SJohn Marino struct dm_task;
32*86d7f5d3SJohn Marino 
33*86d7f5d3SJohn Marino struct dm_info {
34*86d7f5d3SJohn Marino 	int		exists;
35*86d7f5d3SJohn Marino 	int		suspended;
36*86d7f5d3SJohn Marino 	int		live_table;
37*86d7f5d3SJohn Marino 	int		inactive_table;
38*86d7f5d3SJohn Marino 	int		read_only;
39*86d7f5d3SJohn Marino 	int32_t		open_count;
40*86d7f5d3SJohn Marino 	int32_t		target_count;
41*86d7f5d3SJohn Marino 	uint32_t	event_nr;
42*86d7f5d3SJohn Marino 	uint32_t	major;
43*86d7f5d3SJohn Marino 	uint32_t	minor;
44*86d7f5d3SJohn Marino };
45*86d7f5d3SJohn Marino 
46*86d7f5d3SJohn Marino struct dm_names {
47*86d7f5d3SJohn Marino 	const char	*name;
48*86d7f5d3SJohn Marino 	uint64_t	dev;
49*86d7f5d3SJohn Marino 	uint32_t	next;
50*86d7f5d3SJohn Marino };
51*86d7f5d3SJohn Marino 
52*86d7f5d3SJohn Marino struct dm_deps {
53*86d7f5d3SJohn Marino 	uint32_t	count;
54*86d7f5d3SJohn Marino 	uint64_t	deps[1];
55*86d7f5d3SJohn Marino };
56*86d7f5d3SJohn Marino 
57*86d7f5d3SJohn Marino struct dm_versions {
58*86d7f5d3SJohn Marino 	const char	*name;
59*86d7f5d3SJohn Marino 	uint32_t	version[3];
60*86d7f5d3SJohn Marino 	uint32_t	next;
61*86d7f5d3SJohn Marino };
62*86d7f5d3SJohn Marino 
63*86d7f5d3SJohn Marino /* XXX: dm_task_set_geometry */
64*86d7f5d3SJohn Marino 
65*86d7f5d3SJohn Marino enum {
66*86d7f5d3SJohn Marino 	DM_DEVICE_REMOVE,
67*86d7f5d3SJohn Marino 	DM_DEVICE_REMOVE_ALL,
68*86d7f5d3SJohn Marino 	DM_DEVICE_CREATE,
69*86d7f5d3SJohn Marino 	DM_DEVICE_RELOAD,
70*86d7f5d3SJohn Marino 	DM_DEVICE_RESUME,
71*86d7f5d3SJohn Marino 	DM_DEVICE_SUSPEND,
72*86d7f5d3SJohn Marino 	DM_DEVICE_CLEAR,
73*86d7f5d3SJohn Marino 	DM_DEVICE_LIST_VERSIONS,
74*86d7f5d3SJohn Marino 	DM_DEVICE_STATUS,
75*86d7f5d3SJohn Marino 	DM_DEVICE_TABLE,
76*86d7f5d3SJohn Marino 	DM_DEVICE_INFO,
77*86d7f5d3SJohn Marino 	DM_DEVICE_DEPS,
78*86d7f5d3SJohn Marino 	DM_DEVICE_VERSION,
79*86d7f5d3SJohn Marino 	DM_DEVICE_TARGET_MSG,
80*86d7f5d3SJohn Marino 	DM_DEVICE_RENAME,
81*86d7f5d3SJohn Marino 	DM_DEVICE_LIST
82*86d7f5d3SJohn Marino };
83*86d7f5d3SJohn Marino 
84*86d7f5d3SJohn Marino /* int level, const char *file, int line, const char *fmt, ... */
85*86d7f5d3SJohn Marino typedef void (*dm_error_func_t)(int, const char *, int, const char *, ...);
86*86d7f5d3SJohn Marino 
87*86d7f5d3SJohn Marino struct dm_task *dm_task_create(int task_type);
88*86d7f5d3SJohn Marino void dm_task_destroy(struct dm_task *dmt);
89*86d7f5d3SJohn Marino int dm_task_run(struct dm_task *dmt);
90*86d7f5d3SJohn Marino int dm_task_set_name(struct dm_task *dmt, const char *name);
91*86d7f5d3SJohn Marino const char *dm_task_get_name(struct dm_task *dmt);
92*86d7f5d3SJohn Marino int dm_task_set_newname(struct dm_task *dmt, const char *newname);
93*86d7f5d3SJohn Marino int dm_task_set_major(struct dm_task *dmt, int major);
94*86d7f5d3SJohn Marino int dm_task_set_minor(struct dm_task *dmt, int minor);
95*86d7f5d3SJohn Marino int dm_task_get_minor(struct dm_task *dmt);
96*86d7f5d3SJohn Marino int dm_task_set_uuid(struct dm_task *dmt, const char *uuid);
97*86d7f5d3SJohn Marino const char *dm_task_get_uuid(struct dm_task *dmt);
98*86d7f5d3SJohn Marino int dm_task_add_target(struct dm_task *dmt, uint64_t start, size_t size,
99*86d7f5d3SJohn Marino     const char *target, const char *params);
100*86d7f5d3SJohn Marino int dm_task_set_sector(struct dm_task *dmt, uint64_t sector);
101*86d7f5d3SJohn Marino int dm_task_set_message(struct dm_task *dmt, const char *msg);
102*86d7f5d3SJohn Marino int dm_task_set_ro(struct dm_task *dmt);
103*86d7f5d3SJohn Marino int dm_task_no_open_count(struct dm_task *dmt);
104*86d7f5d3SJohn Marino int dm_task_query_inactive_table(struct dm_task *dmt);
105*86d7f5d3SJohn Marino int dm_task_set_read_ahead(struct dm_task *dmt, uint32_t read_ahead);
106*86d7f5d3SJohn Marino int dm_task_get_read_ahead(struct dm_task *dmt, uint32_t *read_ahead);
107*86d7f5d3SJohn Marino int dm_task_secure_data(struct dm_task *dmt);
108*86d7f5d3SJohn Marino int dm_task_get_info(struct dm_task *dmt, struct dm_info *dmi);
109*86d7f5d3SJohn Marino int dm_task_get_driver_version(struct dm_task *dmt, char *ver, size_t ver_sz);
110*86d7f5d3SJohn Marino struct dm_deps *dm_task_get_deps(struct dm_task *dmt);
111*86d7f5d3SJohn Marino struct dm_versions *dm_task_get_versions(struct dm_task *dmt);
112*86d7f5d3SJohn Marino struct dm_names *dm_task_get_names(struct dm_task *dmt);
113*86d7f5d3SJohn Marino int dm_task_update_nodes(void);
114*86d7f5d3SJohn Marino void *dm_get_next_target(struct dm_task *dmt, void *cur, uint64_t *startp,
115*86d7f5d3SJohn Marino     uint64_t *lengthp, char **target_type, char **params);
116*86d7f5d3SJohn Marino uint32_t dm_get_major(void);
117*86d7f5d3SJohn Marino int dm_is_dm_major(uint32_t major);
118*86d7f5d3SJohn Marino const char *dm_dir(void);
119*86d7f5d3SJohn Marino void dm_udev_set_sync_support(int sync_udev);
120*86d7f5d3SJohn Marino int dm_task_set_cookie(struct dm_task *dmt, uint32_t *cookie,
121*86d7f5d3SJohn Marino     uint16_t udev_flags);
122*86d7f5d3SJohn Marino int dm_udev_wait(uint32_t cookie);
123*86d7f5d3SJohn Marino void dm_lib_release(void);
124*86d7f5d3SJohn Marino int dm_log_init(dm_error_func_t fn);
125*86d7f5d3SJohn Marino int dm_log_init_verbose(int verbose);
126*86d7f5d3SJohn Marino int dm_task_set_uid(struct dm_task *dmt, uid_t uid);
127*86d7f5d3SJohn Marino int dm_task_set_gid(struct dm_task *dmt, gid_t gid);
128*86d7f5d3SJohn Marino int dm_task_set_mode(struct dm_task *dmt, mode_t mode);
129*86d7f5d3SJohn Marino int dm_task_no_flush(struct dm_task *dmt);
130*86d7f5d3SJohn Marino int dm_task_skip_lockfs(struct dm_task *dmt);
131*86d7f5d3SJohn Marino int dm_task_set_geometry(struct dm_task *dmt, const char *cylinders,
132*86d7f5d3SJohn Marino     const char *heads, const char *sectors, const char *start);
133*86d7f5d3SJohn Marino 
134*86d7f5d3SJohn Marino 
135*86d7f5d3SJohn Marino 
136*86d7f5d3SJohn Marino 
137*86d7f5d3SJohn Marino /*****************************************************************************/
138*86d7f5d3SJohn Marino /********************** DragonFly-specific extensions ************************/
139*86d7f5d3SJohn Marino /*****************************************************************************/
140*86d7f5d3SJohn Marino void *dm_get_next_version(struct dm_task *dmt, void *cur,
141*86d7f5d3SJohn Marino     const char **target_type, uint32_t *target_ver);
142*86d7f5d3SJohn Marino void *dm_get_next_dep(struct dm_task *dmt, void *cur, uint64_t *dep);
143*86d7f5d3SJohn Marino void *dm_get_next_name(struct dm_task *dmt, void *cur, const char **name,
144*86d7f5d3SJohn Marino     uint64_t *dev);
145*86d7f5d3SJohn Marino 
146