VirtualBox

source: vbox/trunk/include/VBox/vd-cache-plugin.h@ 38643

Last change on this file since 38643 was 38469, checked in by vboxsync, 13 years ago

VD: Interface cleanup. Merge the two involved structures (generic interface descriptor and callback table) into one, remove the duplicated interface wrappers in the backends and move the interface definitions into separate headers separating public and private interfaces.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 14.2 KB
Line 
1/** @file
2 * Internal hard disk format support API for VBoxHDD cache images.
3 */
4
5/*
6 * Copyright (C) 2006-2010 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef __VBoxHDD_CachePlugin_h__
27#define __VBoxHDD_CachePlugin_h__
28
29#include <VBox/vd.h>
30#include <VBox/vd-ifs-internal.h>
31
32/**
33 * Cache format backend interface used by VBox HDD Container implementation.
34 */
35typedef struct VDCACHEBACKEND
36{
37 /**
38 * The name of the backend (constant string).
39 */
40 const char *pszBackendName;
41
42 /**
43 * The size of the structure.
44 */
45 uint32_t cbSize;
46
47 /**
48 * The capabilities of the backend.
49 */
50 uint64_t uBackendCaps;
51
52 /**
53 * Pointer to a NULL-terminated array of strings, containing the supported
54 * file extensions. Note that some backends do not work on files, so this
55 * pointer may just contain NULL.
56 */
57 const char * const *papszFileExtensions;
58
59 /**
60 * Pointer to an array of structs describing each supported config key.
61 * Terminated by a NULL config key. Note that some backends do not support
62 * the configuration interface, so this pointer may just contain NULL.
63 * Mandatory if the backend sets VD_CAP_CONFIG.
64 */
65 PCVDCONFIGINFO paConfigInfo;
66
67 /**
68 * Handle of loaded plugin library, NIL_RTLDRMOD for static backends.
69 */
70 RTLDRMOD hPlugin;
71
72 /**
73 * Probes the given image.
74 *
75 * @returns VBox status code.
76 * @param pszFilename Name of the image file.
77 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
78 * @param pVDIfsImage Pointer to the per-image VD interface list.
79 */
80 DECLR3CALLBACKMEMBER(int, pfnProbe, (const char *pszFilename, PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage));
81
82 /**
83 * Open a cache image.
84 *
85 * @returns VBox status code.
86 * @param pszFilename Name of the image file to open. Guaranteed to be available and
87 * unchanged during the lifetime of this image.
88 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
89 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
90 * @param pVDIfsImage Pointer to the per-image VD interface list.
91 * @param ppBackendData Opaque state data for this image.
92 */
93 DECLR3CALLBACKMEMBER(int, pfnOpen, (const char *pszFilename, unsigned uOpenFlags,
94 PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
95 void **ppBackendData));
96
97 /**
98 * Create a cache image.
99 *
100 * @returns VBox status code.
101 * @param pszFilename Name of the image file to create. Guaranteed to be available and
102 * unchanged during the lifetime of this image.
103 * @param cbSize Image size in bytes.
104 * @param uImageFlags Flags specifying special image features.
105 * @param pszComment Pointer to image comment. NULL is ok.
106 * @param pUuid New UUID of the image. Not NULL.
107 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
108 * @param uPercentStart Starting value for progress percentage.
109 * @param uPercentSpan Span for varying progress percentage.
110 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
111 * @param pVDIfsImage Pointer to the per-image VD interface list.
112 * @param pVDIfsOperation Pointer to the per-operation VD interface list.
113 * @param ppBackendData Opaque state data for this image.
114 */
115 DECLR3CALLBACKMEMBER(int, pfnCreate, (const char *pszFilename, uint64_t cbSize,
116 unsigned uImageFlags, const char *pszComment,
117 PCRTUUID pUuid, unsigned uOpenFlags,
118 unsigned uPercentStart, unsigned uPercentSpan,
119 PVDINTERFACE pVDIfsDisk,
120 PVDINTERFACE pVDIfsImage,
121 PVDINTERFACE pVDIfsOperation,
122 void **ppBackendData));
123
124 /**
125 * Close a cache image.
126 *
127 * @returns VBox status code.
128 * @param pBackendData Opaque state data for this image.
129 * @param fDelete If true, delete the image from the host disk.
130 */
131 DECLR3CALLBACKMEMBER(int, pfnClose, (void *pBackendData, bool fDelete));
132
133 /**
134 * Read data from a cache image. The area read never crosses a block
135 * boundary.
136 *
137 * @returns VBox status code.
138 * @returns VERR_VD_BLOCK_FREE if this image contains no data for this block.
139 * @param pBackendData Opaque state data for this image.
140 * @param uOffset Offset to start reading from.
141 * @param pvBuf Where to store the read bits.
142 * @param cbRead Number of bytes to read.
143 * @param pcbActuallyRead Pointer to returned number of bytes read.
144 */
145 DECLR3CALLBACKMEMBER(int, pfnRead, (void *pBackendData, uint64_t uOffset, void *pvBuf,
146 size_t cbRead, size_t *pcbActuallyRead));
147
148 /**
149 * Write data to a cache image. The area written never crosses a block
150 * boundary.
151 *
152 * @returns VBox status code.
153 * @param pBackendData Opaque state data for this image.
154 * @param uOffset Offset to start writing to.
155 * @param pvBuf Where to retrieve the written bits.
156 * @param cbWrite Number of bytes to write.
157 * @param pcbWriteProcess Pointer to returned number of bytes that could
158 * be processed.
159 */
160 DECLR3CALLBACKMEMBER(int, pfnWrite, (void *pBackendData, uint64_t uOffset,
161 const void *pvBuf, size_t cbWrite,
162 size_t *pcbWriteProcess));
163
164 /**
165 * Flush data to disk.
166 *
167 * @returns VBox status code.
168 * @param pBackendData Opaque state data for this image.
169 */
170 DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pBackendData));
171
172 /**
173 * Get the version of a cache image.
174 *
175 * @returns version of cache image.
176 * @param pBackendData Opaque state data for this image.
177 */
178 DECLR3CALLBACKMEMBER(unsigned, pfnGetVersion, (void *pBackendData));
179
180 /**
181 * Get the capacity of a cache image.
182 *
183 * @returns size of cache image in bytes.
184 * @param pBackendData Opaque state data for this image.
185 */
186 DECLR3CALLBACKMEMBER(uint64_t, pfnGetSize, (void *pBackendData));
187
188 /**
189 * Get the file size of a cache image.
190 *
191 * @returns size of cache image in bytes.
192 * @param pBackendData Opaque state data for this image.
193 */
194 DECLR3CALLBACKMEMBER(uint64_t, pfnGetFileSize, (void *pBackendData));
195
196 /**
197 * Get the image flags of a cache image.
198 *
199 * @returns image flags of cache image.
200 * @param pBackendData Opaque state data for this image.
201 */
202 DECLR3CALLBACKMEMBER(unsigned, pfnGetImageFlags, (void *pBackendData));
203
204 /**
205 * Get the open flags of a cache image.
206 *
207 * @returns open flags of cache image.
208 * @param pBackendData Opaque state data for this image.
209 */
210 DECLR3CALLBACKMEMBER(unsigned, pfnGetOpenFlags, (void *pBackendData));
211
212 /**
213 * Set the open flags of a cache image. May cause the image to be locked
214 * in a different mode or be reopened (which can fail).
215 *
216 * @returns VBox status code.
217 * @param pBackendData Opaque state data for this image.
218 * @param uOpenFlags New open flags for this image.
219 */
220 DECLR3CALLBACKMEMBER(int, pfnSetOpenFlags, (void *pBackendData, unsigned uOpenFlags));
221
222 /**
223 * Get comment of a cache image.
224 *
225 * @returns VBox status code.
226 * @param pBackendData Opaque state data for this image.
227 * @param pszComment Where to store the comment.
228 * @param cbComment Size of the comment buffer.
229 */
230 DECLR3CALLBACKMEMBER(int, pfnGetComment, (void *pBackendData, char *pszComment, size_t cbComment));
231
232 /**
233 * Set comment of a cache image.
234 *
235 * @returns VBox status code.
236 * @param pBackendData Opaque state data for this image.
237 * @param pszComment Where to get the comment from. NULL resets comment.
238 * The comment is silently truncated if the image format
239 * limit is exceeded.
240 */
241 DECLR3CALLBACKMEMBER(int, pfnSetComment, (void *pBackendData, const char *pszComment));
242
243 /**
244 * Get UUID of a cache image.
245 *
246 * @returns VBox status code.
247 * @param pBackendData Opaque state data for this image.
248 * @param pUuid Where to store the image UUID.
249 */
250 DECLR3CALLBACKMEMBER(int, pfnGetUuid, (void *pBackendData, PRTUUID pUuid));
251
252 /**
253 * Set UUID of a cache image.
254 *
255 * @returns VBox status code.
256 * @param pBackendData Opaque state data for this image.
257 * @param pUuid Where to get the image UUID from.
258 */
259 DECLR3CALLBACKMEMBER(int, pfnSetUuid, (void *pBackendData, PCRTUUID pUuid));
260
261 /**
262 * Get last modification UUID of a cache image.
263 *
264 * @returns VBox status code.
265 * @param pBackendData Opaque state data for this image.
266 * @param pUuid Where to store the image modification UUID.
267 */
268 DECLR3CALLBACKMEMBER(int, pfnGetModificationUuid, (void *pBackendData, PRTUUID pUuid));
269
270 /**
271 * Set last modification UUID of a cache image.
272 *
273 * @returns VBox status code.
274 * @param pBackendData Opaque state data for this image.
275 * @param pUuid Where to get the image modification UUID from.
276 */
277 DECLR3CALLBACKMEMBER(int, pfnSetModificationUuid, (void *pBackendData, PCRTUUID pUuid));
278
279 /**
280 * Dump information about a cache image.
281 *
282 * @param pBackendData Opaque state data for this image.
283 */
284 DECLR3CALLBACKMEMBER(void, pfnDump, (void *pBackendData));
285
286 /**
287 * Start an asynchronous read request.
288 *
289 * @returns VBox status code.
290 * @param pBackendData Opaque state data for this image.
291 * @param uOffset The offset of the virtual disk to read from.
292 * @param cbRead How many bytes to read.
293 * @param pIoCtx I/O context associated with this request.
294 * @param pcbActuallyRead Pointer to returned number of bytes read.
295 */
296 DECLR3CALLBACKMEMBER(int, pfnAsyncRead, (void *pBackendData, uint64_t uOffset, size_t cbRead,
297 PVDIOCTX pIoCtx, size_t *pcbActuallyRead));
298
299 /**
300 * Start an asynchronous write request.
301 *
302 * @returns VBox status code.
303 * @param pBackendData Opaque state data for this image.
304 * @param uOffset The offset of the virtual disk to write to.
305 * @param cbWrite How many bytes to write.
306 * @param pIoCtx I/O context associated with this request.
307 * @param pcbWriteProcess Pointer to returned number of bytes that could
308 * be processed. In case the function returned
309 * VERR_VD_BLOCK_FREE this is the number of bytes
310 * that could be written in a full block write,
311 * when prefixed/postfixed by the appropriate
312 * amount of (previously read) padding data.
313 */
314 DECLR3CALLBACKMEMBER(int, pfnAsyncWrite, (void *pBackendData, uint64_t uOffset, size_t cbWrite,
315 PVDIOCTX pIoCtx, size_t *pcbWriteProcess));
316
317 /**
318 * Flush data to disk.
319 *
320 * @returns VBox status code.
321 * @param pBackendData Opaque state data for this image.
322 * @param pIoCtx I/O context associated with this request.
323 */
324 DECLR3CALLBACKMEMBER(int, pfnAsyncFlush, (void *pBackendData, PVDIOCTX pIoCtx));
325
326 /** Returns a human readable hard disk location string given a
327 * set of hard disk configuration keys. The returned string is an
328 * equivalent of the full file path for image-based hard disks.
329 * Mandatory for backends with no VD_CAP_FILE and NULL otherwise. */
330 DECLR3CALLBACKMEMBER(int, pfnComposeLocation, (PVDINTERFACE pConfig, char **pszLocation));
331
332 /** Returns a human readable hard disk name string given a
333 * set of hard disk configuration keys. The returned string is an
334 * equivalent of the file name part in the full file path for
335 * image-based hard disks. Mandatory for backends with no
336 * VD_CAP_FILE and NULL otherwise. */
337 DECLR3CALLBACKMEMBER(int, pfnComposeName, (PVDINTERFACE pConfig, char **pszName));
338
339} VDCACHEBACKEND;
340
341/** Pointer to VD backend. */
342typedef VDCACHEBACKEND *PVDCACHEBACKEND;
343
344/** Constant pointer to VD backend. */
345typedef const VDCACHEBACKEND *PCVDCACHEBACKEND;
346
347/** Initialization entry point. */
348typedef DECLCALLBACK(int) FNVDCACHEFORMATLOAD(PVDCACHEBACKEND *ppBackendTable);
349typedef FNVDCACHEFORMATLOAD *PFNVDCACHEFORMATLOAD;
350#define VD_CACHEFORMAT_LOAD_NAME "VDCacheFormatLoad"
351
352/** The prefix to identify Storage Plugins. */
353#define VD_CACHEFORMAT_PLUGIN_PREFIX "VDCache"
354/** The size of the prefix excluding the '\\0' terminator. */
355#define VD_CACHEFORMAT_PLUGIN_PREFIX_LENGTH (sizeof(VD_CACHEFORMAT_PLUGIN_PREFIX)-1)
356
357#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette