VirtualBox

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

Last change on this file since 47687 was 44528, checked in by vboxsync, 12 years ago

header (C) fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.5 KB
Line 
1/** @file
2 * Internal hard disk format support API for VBoxHDD cache images.
3 */
4
5/*
6 * Copyright (C) 2006-2013 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 * Start a read request.
135 *
136 * @returns VBox status code.
137 * @param pBackendData Opaque state data for this image.
138 * @param uOffset The offset of the virtual disk to read from.
139 * @param cbRead How many bytes to read.
140 * @param pIoCtx I/O context associated with this request.
141 * @param pcbActuallyRead Pointer to returned number of bytes read.
142 */
143 DECLR3CALLBACKMEMBER(int, pfnRead, (void *pBackendData, uint64_t uOffset, size_t cbRead,
144 PVDIOCTX pIoCtx, size_t *pcbActuallyRead));
145
146 /**
147 * Start a write request.
148 *
149 * @returns VBox status code.
150 * @param pBackendData Opaque state data for this image.
151 * @param uOffset The offset of the virtual disk to write to.
152 * @param cbWrite How many bytes to write.
153 * @param pIoCtx I/O context associated with this request.
154 * @param pcbWriteProcess Pointer to returned number of bytes that could
155 * be processed. In case the function returned
156 * VERR_VD_BLOCK_FREE this is the number of bytes
157 * that could be written in a full block write,
158 * when prefixed/postfixed by the appropriate
159 * amount of (previously read) padding data.
160 */
161 DECLR3CALLBACKMEMBER(int, pfnWrite, (void *pBackendData, uint64_t uOffset, size_t cbWrite,
162 PVDIOCTX pIoCtx, 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 * @param pIoCtx I/O context associated with this request.
170 */
171 DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pBackendData, PVDIOCTX pIoCtx));
172
173 /**
174 * Discards the given amount of bytes from the cache.
175 *
176 * @returns VBox status code.
177 * @retval VERR_VD_DISCARD_ALIGNMENT_NOT_MET if the range doesn't meet the required alignment
178 * for the discard.
179 * @param pBackendData Opaque state data for this image.
180 * @param pIoCtx I/O context associated with this request.
181 * @param uOffset The offset of the first byte to discard.
182 * @param cbDiscard How many bytes to discard.
183 */
184 DECLR3CALLBACKMEMBER(int, pfnDiscard, (void *pBackendData, PVDIOCTX pIoCtx,
185 uint64_t uOffset, size_t cbDiscard,
186 size_t *pcbPreAllocated,
187 size_t *pcbPostAllocated,
188 size_t *pcbActuallyDiscarded,
189 void **ppbmAllocationBitmap,
190 unsigned fDiscard));
191
192 /**
193 * Get the version of a cache image.
194 *
195 * @returns version of cache image.
196 * @param pBackendData Opaque state data for this image.
197 */
198 DECLR3CALLBACKMEMBER(unsigned, pfnGetVersion, (void *pBackendData));
199
200 /**
201 * Get the capacity of a cache image.
202 *
203 * @returns size of cache image in bytes.
204 * @param pBackendData Opaque state data for this image.
205 */
206 DECLR3CALLBACKMEMBER(uint64_t, pfnGetSize, (void *pBackendData));
207
208 /**
209 * Get the file size of a cache image.
210 *
211 * @returns size of cache image in bytes.
212 * @param pBackendData Opaque state data for this image.
213 */
214 DECLR3CALLBACKMEMBER(uint64_t, pfnGetFileSize, (void *pBackendData));
215
216 /**
217 * Get the image flags of a cache image.
218 *
219 * @returns image flags of cache image.
220 * @param pBackendData Opaque state data for this image.
221 */
222 DECLR3CALLBACKMEMBER(unsigned, pfnGetImageFlags, (void *pBackendData));
223
224 /**
225 * Get the open flags of a cache image.
226 *
227 * @returns open flags of cache image.
228 * @param pBackendData Opaque state data for this image.
229 */
230 DECLR3CALLBACKMEMBER(unsigned, pfnGetOpenFlags, (void *pBackendData));
231
232 /**
233 * Set the open flags of a cache image. May cause the image to be locked
234 * in a different mode or be reopened (which can fail).
235 *
236 * @returns VBox status code.
237 * @param pBackendData Opaque state data for this image.
238 * @param uOpenFlags New open flags for this image.
239 */
240 DECLR3CALLBACKMEMBER(int, pfnSetOpenFlags, (void *pBackendData, unsigned uOpenFlags));
241
242 /**
243 * Get comment of a cache image.
244 *
245 * @returns VBox status code.
246 * @param pBackendData Opaque state data for this image.
247 * @param pszComment Where to store the comment.
248 * @param cbComment Size of the comment buffer.
249 */
250 DECLR3CALLBACKMEMBER(int, pfnGetComment, (void *pBackendData, char *pszComment, size_t cbComment));
251
252 /**
253 * Set comment of a cache image.
254 *
255 * @returns VBox status code.
256 * @param pBackendData Opaque state data for this image.
257 * @param pszComment Where to get the comment from. NULL resets comment.
258 * The comment is silently truncated if the image format
259 * limit is exceeded.
260 */
261 DECLR3CALLBACKMEMBER(int, pfnSetComment, (void *pBackendData, const char *pszComment));
262
263 /**
264 * Get UUID of a cache image.
265 *
266 * @returns VBox status code.
267 * @param pBackendData Opaque state data for this image.
268 * @param pUuid Where to store the image UUID.
269 */
270 DECLR3CALLBACKMEMBER(int, pfnGetUuid, (void *pBackendData, PRTUUID pUuid));
271
272 /**
273 * Set UUID of a cache image.
274 *
275 * @returns VBox status code.
276 * @param pBackendData Opaque state data for this image.
277 * @param pUuid Where to get the image UUID from.
278 */
279 DECLR3CALLBACKMEMBER(int, pfnSetUuid, (void *pBackendData, PCRTUUID pUuid));
280
281 /**
282 * Get last modification UUID of a cache image.
283 *
284 * @returns VBox status code.
285 * @param pBackendData Opaque state data for this image.
286 * @param pUuid Where to store the image modification UUID.
287 */
288 DECLR3CALLBACKMEMBER(int, pfnGetModificationUuid, (void *pBackendData, PRTUUID pUuid));
289
290 /**
291 * Set last modification UUID of a cache image.
292 *
293 * @returns VBox status code.
294 * @param pBackendData Opaque state data for this image.
295 * @param pUuid Where to get the image modification UUID from.
296 */
297 DECLR3CALLBACKMEMBER(int, pfnSetModificationUuid, (void *pBackendData, PCRTUUID pUuid));
298
299 /**
300 * Dump information about a cache image.
301 *
302 * @param pBackendData Opaque state data for this image.
303 */
304 DECLR3CALLBACKMEMBER(void, pfnDump, (void *pBackendData));
305
306 /** Returns a human readable hard disk location string given a
307 * set of hard disk configuration keys. The returned string is an
308 * equivalent of the full file path for image-based hard disks.
309 * Mandatory for backends with no VD_CAP_FILE and NULL otherwise. */
310 DECLR3CALLBACKMEMBER(int, pfnComposeLocation, (PVDINTERFACE pConfig, char **pszLocation));
311
312 /** Returns a human readable hard disk name string given a
313 * set of hard disk configuration keys. The returned string is an
314 * equivalent of the file name part in the full file path for
315 * image-based hard disks. Mandatory for backends with no
316 * VD_CAP_FILE and NULL otherwise. */
317 DECLR3CALLBACKMEMBER(int, pfnComposeName, (PVDINTERFACE pConfig, char **pszName));
318
319} VDCACHEBACKEND;
320
321/** Pointer to VD backend. */
322typedef VDCACHEBACKEND *PVDCACHEBACKEND;
323
324/** Constant pointer to VD backend. */
325typedef const VDCACHEBACKEND *PCVDCACHEBACKEND;
326
327/** Initialization entry point. */
328typedef DECLCALLBACK(int) FNVDCACHEFORMATLOAD(PVDCACHEBACKEND *ppBackendTable);
329typedef FNVDCACHEFORMATLOAD *PFNVDCACHEFORMATLOAD;
330#define VD_CACHEFORMAT_LOAD_NAME "VDCacheFormatLoad"
331
332/** The prefix to identify Storage Plugins. */
333#define VD_CACHEFORMAT_PLUGIN_PREFIX "VDCache"
334/** The size of the prefix excluding the '\\0' terminator. */
335#define VD_CACHEFORMAT_PLUGIN_PREFIX_LENGTH (sizeof(VD_CACHEFORMAT_PLUGIN_PREFIX)-1)
336
337#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