VirtualBox

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

Last change on this file since 36638 was 33567, checked in by vboxsync, 14 years ago

VD: Move the generic virtual disk framework + backends to src/VBox/Storage and rename the files to get rid of the HDD part because it supports floppy and DVD images too

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