VirtualBox

source: vbox/trunk/include/VBox/vd-cache-backend.h@ 52664

Last change on this file since 52664 was 50988, checked in by vboxsync, 10 years ago

Storage/VD: Cleanup VD plugin handling. One shared object can now support an arbitrary number of image backends instead of just one like before

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.0 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 * Probes the given image.
69 *
70 * @returns VBox status code.
71 * @param pszFilename Name of the image file.
72 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
73 * @param pVDIfsImage Pointer to the per-image VD interface list.
74 */
75 DECLR3CALLBACKMEMBER(int, pfnProbe, (const char *pszFilename, PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage));
76
77 /**
78 * Open a cache image.
79 *
80 * @returns VBox status code.
81 * @param pszFilename Name of the image file to open. Guaranteed to be available and
82 * unchanged during the lifetime of this image.
83 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
84 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
85 * @param pVDIfsImage Pointer to the per-image VD interface list.
86 * @param ppBackendData Opaque state data for this image.
87 */
88 DECLR3CALLBACKMEMBER(int, pfnOpen, (const char *pszFilename, unsigned uOpenFlags,
89 PVDINTERFACE pVDIfsDisk, PVDINTERFACE pVDIfsImage,
90 void **ppBackendData));
91
92 /**
93 * Create a cache image.
94 *
95 * @returns VBox status code.
96 * @param pszFilename Name of the image file to create. Guaranteed to be available and
97 * unchanged during the lifetime of this image.
98 * @param cbSize Image size in bytes.
99 * @param uImageFlags Flags specifying special image features.
100 * @param pszComment Pointer to image comment. NULL is ok.
101 * @param pUuid New UUID of the image. Not NULL.
102 * @param uOpenFlags Image file open mode, see VD_OPEN_FLAGS_* constants.
103 * @param uPercentStart Starting value for progress percentage.
104 * @param uPercentSpan Span for varying progress percentage.
105 * @param pVDIfsDisk Pointer to the per-disk VD interface list.
106 * @param pVDIfsImage Pointer to the per-image VD interface list.
107 * @param pVDIfsOperation Pointer to the per-operation VD interface list.
108 * @param ppBackendData Opaque state data for this image.
109 */
110 DECLR3CALLBACKMEMBER(int, pfnCreate, (const char *pszFilename, uint64_t cbSize,
111 unsigned uImageFlags, const char *pszComment,
112 PCRTUUID pUuid, unsigned uOpenFlags,
113 unsigned uPercentStart, unsigned uPercentSpan,
114 PVDINTERFACE pVDIfsDisk,
115 PVDINTERFACE pVDIfsImage,
116 PVDINTERFACE pVDIfsOperation,
117 void **ppBackendData));
118
119 /**
120 * Close a cache image.
121 *
122 * @returns VBox status code.
123 * @param pBackendData Opaque state data for this image.
124 * @param fDelete If true, delete the image from the host disk.
125 */
126 DECLR3CALLBACKMEMBER(int, pfnClose, (void *pBackendData, bool fDelete));
127
128 /**
129 * Start a read request.
130 *
131 * @returns VBox status code.
132 * @param pBackendData Opaque state data for this image.
133 * @param uOffset The offset of the virtual disk to read from.
134 * @param cbRead How many bytes to read.
135 * @param pIoCtx I/O context associated with this request.
136 * @param pcbActuallyRead Pointer to returned number of bytes read.
137 */
138 DECLR3CALLBACKMEMBER(int, pfnRead, (void *pBackendData, uint64_t uOffset, size_t cbRead,
139 PVDIOCTX pIoCtx, size_t *pcbActuallyRead));
140
141 /**
142 * Start a write request.
143 *
144 * @returns VBox status code.
145 * @param pBackendData Opaque state data for this image.
146 * @param uOffset The offset of the virtual disk to write to.
147 * @param cbWrite How many bytes to write.
148 * @param pIoCtx I/O context associated with this request.
149 * @param pcbWriteProcess Pointer to returned number of bytes that could
150 * be processed. In case the function returned
151 * VERR_VD_BLOCK_FREE this is the number of bytes
152 * that could be written in a full block write,
153 * when prefixed/postfixed by the appropriate
154 * amount of (previously read) padding data.
155 */
156 DECLR3CALLBACKMEMBER(int, pfnWrite, (void *pBackendData, uint64_t uOffset, size_t cbWrite,
157 PVDIOCTX pIoCtx, size_t *pcbWriteProcess));
158
159 /**
160 * Flush data to disk.
161 *
162 * @returns VBox status code.
163 * @param pBackendData Opaque state data for this image.
164 * @param pIoCtx I/O context associated with this request.
165 */
166 DECLR3CALLBACKMEMBER(int, pfnFlush, (void *pBackendData, PVDIOCTX pIoCtx));
167
168 /**
169 * Discards the given amount of bytes from the cache.
170 *
171 * @returns VBox status code.
172 * @retval VERR_VD_DISCARD_ALIGNMENT_NOT_MET if the range doesn't meet the required alignment
173 * for the discard.
174 * @param pBackendData Opaque state data for this image.
175 * @param pIoCtx I/O context associated with this request.
176 * @param uOffset The offset of the first byte to discard.
177 * @param cbDiscard How many bytes to discard.
178 */
179 DECLR3CALLBACKMEMBER(int, pfnDiscard, (void *pBackendData, PVDIOCTX pIoCtx,
180 uint64_t uOffset, size_t cbDiscard,
181 size_t *pcbPreAllocated,
182 size_t *pcbPostAllocated,
183 size_t *pcbActuallyDiscarded,
184 void **ppbmAllocationBitmap,
185 unsigned fDiscard));
186
187 /**
188 * Get the version of a cache image.
189 *
190 * @returns version of cache image.
191 * @param pBackendData Opaque state data for this image.
192 */
193 DECLR3CALLBACKMEMBER(unsigned, pfnGetVersion, (void *pBackendData));
194
195 /**
196 * Get the capacity of a cache image.
197 *
198 * @returns size of cache image in bytes.
199 * @param pBackendData Opaque state data for this image.
200 */
201 DECLR3CALLBACKMEMBER(uint64_t, pfnGetSize, (void *pBackendData));
202
203 /**
204 * Get the file size of a cache image.
205 *
206 * @returns size of cache image in bytes.
207 * @param pBackendData Opaque state data for this image.
208 */
209 DECLR3CALLBACKMEMBER(uint64_t, pfnGetFileSize, (void *pBackendData));
210
211 /**
212 * Get the image flags of a cache image.
213 *
214 * @returns image flags of cache image.
215 * @param pBackendData Opaque state data for this image.
216 */
217 DECLR3CALLBACKMEMBER(unsigned, pfnGetImageFlags, (void *pBackendData));
218
219 /**
220 * Get the open flags of a cache image.
221 *
222 * @returns open flags of cache image.
223 * @param pBackendData Opaque state data for this image.
224 */
225 DECLR3CALLBACKMEMBER(unsigned, pfnGetOpenFlags, (void *pBackendData));
226
227 /**
228 * Set the open flags of a cache image. May cause the image to be locked
229 * in a different mode or be reopened (which can fail).
230 *
231 * @returns VBox status code.
232 * @param pBackendData Opaque state data for this image.
233 * @param uOpenFlags New open flags for this image.
234 */
235 DECLR3CALLBACKMEMBER(int, pfnSetOpenFlags, (void *pBackendData, unsigned uOpenFlags));
236
237 /**
238 * Get comment of a cache image.
239 *
240 * @returns VBox status code.
241 * @param pBackendData Opaque state data for this image.
242 * @param pszComment Where to store the comment.
243 * @param cbComment Size of the comment buffer.
244 */
245 DECLR3CALLBACKMEMBER(int, pfnGetComment, (void *pBackendData, char *pszComment, size_t cbComment));
246
247 /**
248 * Set comment of a cache image.
249 *
250 * @returns VBox status code.
251 * @param pBackendData Opaque state data for this image.
252 * @param pszComment Where to get the comment from. NULL resets comment.
253 * The comment is silently truncated if the image format
254 * limit is exceeded.
255 */
256 DECLR3CALLBACKMEMBER(int, pfnSetComment, (void *pBackendData, const char *pszComment));
257
258 /**
259 * Get UUID of a cache image.
260 *
261 * @returns VBox status code.
262 * @param pBackendData Opaque state data for this image.
263 * @param pUuid Where to store the image UUID.
264 */
265 DECLR3CALLBACKMEMBER(int, pfnGetUuid, (void *pBackendData, PRTUUID pUuid));
266
267 /**
268 * Set UUID of a cache image.
269 *
270 * @returns VBox status code.
271 * @param pBackendData Opaque state data for this image.
272 * @param pUuid Where to get the image UUID from.
273 */
274 DECLR3CALLBACKMEMBER(int, pfnSetUuid, (void *pBackendData, PCRTUUID pUuid));
275
276 /**
277 * Get last modification UUID of a cache image.
278 *
279 * @returns VBox status code.
280 * @param pBackendData Opaque state data for this image.
281 * @param pUuid Where to store the image modification UUID.
282 */
283 DECLR3CALLBACKMEMBER(int, pfnGetModificationUuid, (void *pBackendData, PRTUUID pUuid));
284
285 /**
286 * Set last modification UUID of a cache image.
287 *
288 * @returns VBox status code.
289 * @param pBackendData Opaque state data for this image.
290 * @param pUuid Where to get the image modification UUID from.
291 */
292 DECLR3CALLBACKMEMBER(int, pfnSetModificationUuid, (void *pBackendData, PCRTUUID pUuid));
293
294 /**
295 * Dump information about a cache image.
296 *
297 * @param pBackendData Opaque state data for this image.
298 */
299 DECLR3CALLBACKMEMBER(void, pfnDump, (void *pBackendData));
300
301 /** Returns a human readable hard disk location string given a
302 * set of hard disk configuration keys. The returned string is an
303 * equivalent of the full file path for image-based hard disks.
304 * Mandatory for backends with no VD_CAP_FILE and NULL otherwise. */
305 DECLR3CALLBACKMEMBER(int, pfnComposeLocation, (PVDINTERFACE pConfig, char **pszLocation));
306
307 /** Returns a human readable hard disk name string given a
308 * set of hard disk configuration keys. The returned string is an
309 * equivalent of the file name part in the full file path for
310 * image-based hard disks. Mandatory for backends with no
311 * VD_CAP_FILE and NULL otherwise. */
312 DECLR3CALLBACKMEMBER(int, pfnComposeName, (PVDINTERFACE pConfig, char **pszName));
313
314} VDCACHEBACKEND;
315/** Pointer to VD cache backend. */
316typedef VDCACHEBACKEND *PVDCACHEBACKEND;
317/** Constant pointer to VD backend. */
318typedef const VDCACHEBACKEND *PCVDCACHEBACKEND;
319
320#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle
ContactPrivacy/Do Not Sell My InfoTerms of Use