OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [include/] [linux/] [device-mapper.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/*
2
 * Copyright (C) 2001 Sistina Software (UK) Limited.
3
 * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
4
 *
5
 * This file is released under the LGPL.
6
 */
7
 
8
#ifndef _LINUX_DEVICE_MAPPER_H
9
#define _LINUX_DEVICE_MAPPER_H
10
 
11
#ifdef __KERNEL__
12
 
13
struct dm_target;
14
struct dm_table;
15
struct dm_dev;
16
struct mapped_device;
17
 
18
typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
19
 
20
union map_info {
21
        void *ptr;
22
        unsigned long long ll;
23
};
24
 
25
/*
26
 * In the constructor the target parameter will already have the
27
 * table, type, begin and len fields filled in.
28
 */
29
typedef int (*dm_ctr_fn) (struct dm_target *target,
30
                          unsigned int argc, char **argv);
31
 
32
/*
33
 * The destructor doesn't need to free the dm_target, just
34
 * anything hidden ti->private.
35
 */
36
typedef void (*dm_dtr_fn) (struct dm_target *ti);
37
 
38
/*
39
 * The map function must return:
40
 * < 0: error
41
 * = 0: The target will handle the io by resubmitting it later
42
 * = 1: simple remap complete
43
 * = 2: The target wants to push back the io
44
 */
45
typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio,
46
                          union map_info *map_context);
47
 
48
/*
49
 * Returns:
50
 * < 0 : error (currently ignored)
51
 * 0   : ended successfully
52
 * 1   : for some reason the io has still not completed (eg,
53
 *       multipath target might want to requeue a failed io).
54
 * 2   : The target wants to push back the io
55
 */
56
typedef int (*dm_endio_fn) (struct dm_target *ti,
57
                            struct bio *bio, int error,
58
                            union map_info *map_context);
59
 
60
typedef void (*dm_flush_fn) (struct dm_target *ti);
61
typedef void (*dm_presuspend_fn) (struct dm_target *ti);
62
typedef void (*dm_postsuspend_fn) (struct dm_target *ti);
63
typedef int (*dm_preresume_fn) (struct dm_target *ti);
64
typedef void (*dm_resume_fn) (struct dm_target *ti);
65
 
66
typedef int (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
67
                             char *result, unsigned int maxlen);
68
 
69
typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
70
 
71
typedef int (*dm_ioctl_fn) (struct dm_target *ti, struct inode *inode,
72
                            struct file *filp, unsigned int cmd,
73
                            unsigned long arg);
74
 
75
void dm_error(const char *message);
76
 
77
/*
78
 * Combine device limits.
79
 */
80
void dm_set_device_limits(struct dm_target *ti, struct block_device *bdev);
81
 
82
/*
83
 * Constructors should call these functions to ensure destination devices
84
 * are opened/closed correctly.
85
 * FIXME: too many arguments.
86
 */
87
int dm_get_device(struct dm_target *ti, const char *path, sector_t start,
88
                  sector_t len, int mode, struct dm_dev **result);
89
void dm_put_device(struct dm_target *ti, struct dm_dev *d);
90
 
91
/*
92
 * Information about a target type
93
 */
94
struct target_type {
95
        const char *name;
96
        struct module *module;
97
        unsigned version[3];
98
        dm_ctr_fn ctr;
99
        dm_dtr_fn dtr;
100
        dm_map_fn map;
101
        dm_endio_fn end_io;
102
        dm_flush_fn flush;
103
        dm_presuspend_fn presuspend;
104
        dm_postsuspend_fn postsuspend;
105
        dm_preresume_fn preresume;
106
        dm_resume_fn resume;
107
        dm_status_fn status;
108
        dm_message_fn message;
109
        dm_ioctl_fn ioctl;
110
};
111
 
112
struct io_restrictions {
113
        unsigned int            max_sectors;
114
        unsigned short          max_phys_segments;
115
        unsigned short          max_hw_segments;
116
        unsigned short          hardsect_size;
117
        unsigned int            max_segment_size;
118
        unsigned int            max_hw_sectors;
119
        unsigned long           seg_boundary_mask;
120
        unsigned long           bounce_pfn;
121
        unsigned char           no_cluster; /* inverted so that 0 is default */
122
};
123
 
124
struct dm_target {
125
        struct dm_table *table;
126
        struct target_type *type;
127
 
128
        /* target limits */
129
        sector_t begin;
130
        sector_t len;
131
 
132
        /* FIXME: turn this into a mask, and merge with io_restrictions */
133
        /* Always a power of 2 */
134
        sector_t split_io;
135
 
136
        /*
137
         * These are automatically filled in by
138
         * dm_table_get_device.
139
         */
140
        struct io_restrictions limits;
141
 
142
        /* target specific data */
143
        void *private;
144
 
145
        /* Used to provide an error string from the ctr */
146
        char *error;
147
};
148
 
149
int dm_register_target(struct target_type *t);
150
int dm_unregister_target(struct target_type *t);
151
 
152
 
153
/*-----------------------------------------------------------------
154
 * Functions for creating and manipulating mapped devices.
155
 * Drop the reference with dm_put when you finish with the object.
156
 *---------------------------------------------------------------*/
157
 
158
/*
159
 * DM_ANY_MINOR chooses the next available minor number.
160
 */
161
#define DM_ANY_MINOR (-1)
162
int dm_create(int minor, struct mapped_device **md);
163
 
164
/*
165
 * Reference counting for md.
166
 */
167
struct mapped_device *dm_get_md(dev_t dev);
168
void dm_get(struct mapped_device *md);
169
void dm_put(struct mapped_device *md);
170
 
171
/*
172
 * An arbitrary pointer may be stored alongside a mapped device.
173
 */
174
void dm_set_mdptr(struct mapped_device *md, void *ptr);
175
void *dm_get_mdptr(struct mapped_device *md);
176
 
177
/*
178
 * A device can still be used while suspended, but I/O is deferred.
179
 */
180
int dm_suspend(struct mapped_device *md, unsigned suspend_flags);
181
int dm_resume(struct mapped_device *md);
182
 
183
/*
184
 * Event functions.
185
 */
186
uint32_t dm_get_event_nr(struct mapped_device *md);
187
int dm_wait_event(struct mapped_device *md, int event_nr);
188
uint32_t dm_next_uevent_seq(struct mapped_device *md);
189
void dm_uevent_add(struct mapped_device *md, struct list_head *elist);
190
 
191
/*
192
 * Info functions.
193
 */
194
const char *dm_device_name(struct mapped_device *md);
195
int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid);
196
struct gendisk *dm_disk(struct mapped_device *md);
197
int dm_suspended(struct mapped_device *md);
198
int dm_noflush_suspending(struct dm_target *ti);
199
 
200
/*
201
 * Geometry functions.
202
 */
203
int dm_get_geometry(struct mapped_device *md, struct hd_geometry *geo);
204
int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo);
205
 
206
 
207
/*-----------------------------------------------------------------
208
 * Functions for manipulating device-mapper tables.
209
 *---------------------------------------------------------------*/
210
 
211
/*
212
 * First create an empty table.
213
 */
214
int dm_table_create(struct dm_table **result, int mode,
215
                    unsigned num_targets, struct mapped_device *md);
216
 
217
/*
218
 * Then call this once for each target.
219
 */
220
int dm_table_add_target(struct dm_table *t, const char *type,
221
                        sector_t start, sector_t len, char *params);
222
 
223
/*
224
 * Finally call this to make the table ready for use.
225
 */
226
int dm_table_complete(struct dm_table *t);
227
 
228
/*
229
 * Table reference counting.
230
 */
231
struct dm_table *dm_get_table(struct mapped_device *md);
232
void dm_table_get(struct dm_table *t);
233
void dm_table_put(struct dm_table *t);
234
 
235
/*
236
 * Queries
237
 */
238
sector_t dm_table_get_size(struct dm_table *t);
239
unsigned int dm_table_get_num_targets(struct dm_table *t);
240
int dm_table_get_mode(struct dm_table *t);
241
struct mapped_device *dm_table_get_md(struct dm_table *t);
242
 
243
/*
244
 * Trigger an event.
245
 */
246
void dm_table_event(struct dm_table *t);
247
 
248
/*
249
 * The device must be suspended before calling this method.
250
 */
251
int dm_swap_table(struct mapped_device *md, struct dm_table *t);
252
 
253
/*
254
 * Prepare a table for a device that will error all I/O.
255
 * To make it active, call dm_suspend(), dm_swap_table() then dm_resume().
256
 */
257
int dm_create_error_table(struct dm_table **result, struct mapped_device *md);
258
 
259
#endif  /* __KERNEL__ */
260
#endif  /* _LINUX_DEVICE_MAPPER_H */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.