VirtualBox

source: vbox/trunk/include/VBox/vddbg.h@ 62958

Last change on this file since 62958 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.8 KB
Line 
1/** @file
2 * VD Debug API.
3 */
4
5/*
6 * Copyright (C) 2011-2016 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 ___VBox_VDDbg_h
27#define ___VBox_VDDbg_h
28
29#include <VBox/cdefs.h>
30#include <VBox/types.h>
31#include <VBox/err.h>
32#include <VBox/vd.h> /* for VDRANGE */
33#include <iprt/sg.h>
34
35RT_C_DECLS_BEGIN
36
37#ifdef IN_RING0
38# error "There are no VD Debug APIs available in Ring-0 Host Context!"
39#endif
40
41/** @defgroup grp_vddbg VD Debug API
42 * @ingroup grp_vd
43 * @{
44 */
45
46/** I/O logger handle. */
47typedef struct VDIOLOGGERINT *VDIOLOGGER;
48/** Pointer to an I/O logger handler. */
49typedef VDIOLOGGER *PVDIOLOGGER;
50
51/** Pointer to an I/O log entry handle. */
52typedef struct VDIOLOGENTINT *VDIOLOGENT;
53/** Pointer to an I/O log entry handle. */
54typedef VDIOLOGENT *PVDIOLOGENT;
55
56/** I/O logger buffers all log entries in memory until VDDbgIoLogCommit() is called.
57 * If not given all entries are immediately logged to the file. */
58#define VDDBG_IOLOG_MEMORY_BUFFER RT_BIT_32(0)
59/** I/O logger logs the written data. */
60#define VDDBG_IOLOG_LOG_DATA_WRITTEN RT_BIT_32(1)
61/** I/O logger logs the read data. */
62#define VDDBG_IOLOG_LOG_DATA_READ RT_BIT_32(2)
63/** I/O logger logs all data. */
64#define VDDBG_IOLOG_LOG_DATA (VDDBG_IOLOG_LOG_DATA_READ | VDDBG_IOLOG_LOG_DATA_WRITTEN)
65/** Mask of valid flags. */
66#define VDDBG_IOLOG_VALID_MASK (VDDBG_IOLOG_MEMORY_BUFFER | VDDBG_IOLOG_LOG_DATA)
67
68/**
69 * I/O direction.
70 */
71typedef enum VDDBGIOLOGREQ
72{
73 /** Invalid direction. */
74 VDDBGIOLOGREQ_INVALID = 0,
75 /** Read. */
76 VDDBGIOLOGREQ_READ,
77 /** Write. */
78 VDDBGIOLOGREQ_WRITE,
79 /** Flush. */
80 VDDBGIOLOGREQ_FLUSH,
81 /** Discard. */
82 VDDBGIOLOGREQ_DISCARD,
83 /** 32bit hack. */
84 VDDBGIOLOGREQ_32BIT_HACK = 0x7fffffff
85} VDDBGIOLOGREQ;
86/** Pointer to a I/O direction. */
87typedef VDDBGIOLOGREQ *PVDDBGIOLOGREQ;
88
89/**
90 * I/O log event types.
91 */
92typedef enum VDIOLOGEVENT
93{
94 /** Invalid event. */
95 VDIOLOGEVENT_INVALID = 0,
96 /** I/O request start event. */
97 VDIOLOGEVENT_START,
98 /** I/O request complete event. */
99 VDIOLOGEVENT_COMPLETE,
100 /** No more events logged. */
101 VDIOLOGEVENT_END,
102 /** 32bit type blowup. */
103 VDIOLOGEVENT_32BIT_HACK = 0x7fffffff
104} VDIOLOGEVENT;
105/** Pointer to an I/O log event. */
106typedef VDIOLOGEVENT *PVDIOLOGEVENT;
107
108/**
109 * Creates a new I/O logger for writing to the I/O log.
110 *
111 * @returns VBox status code.
112 * @param phIoLogger Where to store the I/O logger handle on success.
113 * @param pszFilename The file to log into.
114 * @param fFlags Flags for the I/O logger.
115 */
116VBOXDDU_DECL(int) VDDbgIoLogCreate(PVDIOLOGGER phIoLogger, const char *pszFilename, uint32_t fFlags);
117
118/**
119 * Opens an existing I/O log and creates a new I/O logger from it.
120 *
121 * @returns VBox status code.
122 * @param phIoLogger Where to store the I/O logger handle on success.
123 * @param pszFilename The I/O log to use.
124 */
125VBOXDDU_DECL(int) VDDbgIoLogOpen(PVDIOLOGGER phIoLogger, const char *pszFilename);
126
127/**
128 * Destroys the given I/O logger handle.
129 *
130 * @returns nothing.
131 * @param hIoLogger The I/O logger handle to destroy.
132 */
133VBOXDDU_DECL(void) VDDbgIoLogDestroy(VDIOLOGGER hIoLogger);
134
135/**
136 * Commit all log entries to the log file.
137 *
138 * @returns VBox status code.
139 * @param hIoLogger The I/O logger to flush.
140 */
141VBOXDDU_DECL(int) VDDbgIoLogCommit(VDIOLOGGER hIoLogger);
142
143/**
144 * Returns the flags of the given I/O logger.
145 *
146 * @returns Flags of the I/O logger.
147 * @param hIoLogger The I/O logger to use.
148 */
149VBOXDDU_DECL(uint32_t) VDDbgIoLogGetFlags(VDIOLOGGER hIoLogger);
150
151/**
152 * Starts logging of an I/O request.
153 *
154 * @returns VBox status code.
155 * @param hIoLogger The I/O logger to use.
156 * @param fAsync Flag whether the request is synchronous or asynchronous.
157 * @param enmTxDir The transfer direction to log.
158 * @param off The start offset of the I/O request to log.
159 * @param cbIo The number of bytes the I/O request transfered.
160 * @param pSgBuf The data the I/O request is writing if it is a write request.
161 * Can be NULL if the logger is instructed to not log the data
162 * or a flush request is logged.
163 * @param phIoLogEntry Where to store the I/O log entry handle on success.
164 */
165VBOXDDU_DECL(int) VDDbgIoLogStart(VDIOLOGGER hIoLogger, bool fAsync, VDDBGIOLOGREQ enmTxDir, uint64_t off, size_t cbIo, PCRTSGBUF pSgBuf,
166 PVDIOLOGENT phIoLogEntry);
167
168/**
169 * Starts logging of a discard request.
170 *
171 * @returns VBox status code.
172 * @param hIoLogger The I/O logger to use.
173 * @param fAsync Flag whether the request is synchronous or asynchronous.
174 * @param paRanges The array of ranges to discard.
175 * @param cRanges Number of rnages in the array.
176 * @param phIoLogEntry Where to store the I/O log entry handle on success.
177 */
178VBOXDDU_DECL(int) VDDbgIoLogStartDiscard(VDIOLOGGER hIoLogger, bool fAsync, PCRTRANGE paRanges, unsigned cRanges,
179 PVDIOLOGENT phIoLogEntry);
180
181/**
182 * Marks the given I/O log entry as completed.
183 *
184 * @returns VBox status code.
185 * @param hIoLogger The I/O logger to use.
186 * @param hIoLogEntry The I/O log entry to complete.
187 * @param rcReq The status code the request completed with.
188 * @param pSgBuf The data read if the request was a read and it succeeded.
189 */
190VBOXDDU_DECL(int) VDDbgIoLogComplete(VDIOLOGGER hIoLogger, VDIOLOGENT hIoLogEntry, int rcReq, PCRTSGBUF pSgBuf);
191
192/**
193 * Gets the next event type from the I/O log.
194 *
195 * @returns VBox status code.
196 * @param hIoLogger The I/O logger to use.
197 * @param penmEvent Where to store the next event on success.
198 */
199VBOXDDU_DECL(int) VDDbgIoLogEventTypeGetNext(VDIOLOGGER hIoLogger, VDIOLOGEVENT *penmEvent);
200
201/**
202 * Gets the next request type from the I/O log.
203 *
204 * @returns VBox status code.
205 * @param hIoLogger The I/O logger to use.
206 * @param penmReq Where to store the next request on success.
207 */
208VBOXDDU_DECL(int) VDDbgIoLogReqTypeGetNext(VDIOLOGGER hIoLogger, PVDDBGIOLOGREQ penmReq);
209
210/**
211 * Returns the start event from the I/O log.
212 *
213 * @returns VBox status code.
214 * @retval VERR_EOF if the end of the log is reached.
215 * @retval VERR_BUFFER_OVERFLOW if the provided data buffer can't hold the data.
216 * pcbIo will hold the required buffer size on return.
217 * @param hIoLogger The I/O logger to use.
218 * @param pidEvent The ID of the event to identify the corresponding complete event.
219 * @param pfAsync Where to store the flag whether the request is
220 * @param poff Where to store the offset of the next I/O log entry on success.
221 * @param pcbIo Where to store the transfer size of the next I/O log entry on success.
222 * @param cbBuf Size of the provided data buffer.
223 * @param pvBuf Where to store the data of the next I/O log entry on success.
224 */
225VBOXDDU_DECL(int) VDDbgIoLogEventGetStart(VDIOLOGGER hIoLogger, uint64_t *pidEvent, bool *pfAsync,
226 uint64_t *poff, size_t *pcbIo, size_t cbBuf, void *pvBuf);
227
228/**
229 * Returns the discard start event from the I/O log.
230 *
231 * @returns VBox status code.
232 * @retval VERR_EOF if the end of the log is reached.
233 * @retval VERR_BUFFER_OVERFLOW if the provided data buffer can't hold the data.
234 * pcbIo will hold the required buffer size on return.
235 * @param hIoLogger The I/O logger to use.
236 * @param pidEvent The ID of the event to identify the corresponding complete event.
237 * @param pfAsync Where to store the flag whether the request is
238 * @param ppaRanges Where to store the pointer to the range array on success.
239 * @param pcRanges Where to store the number of entries in the array on success.
240 */
241VBOXDDU_DECL(int) VDDbgIoLogEventGetStartDiscard(VDIOLOGGER hIoLogger, uint64_t *pidEvent, bool *pfAsync,
242 PRTRANGE *ppaRanges, unsigned *pcRanges);
243
244/**
245 * Returns the complete from the I/O log.
246 *
247 * @returns VBox status code.
248 * @retval VERR_EOF if the end of the log is reached
249 * @retval VERR_BUFFER_OVERFLOW if the provided data buffer can't hold the data.
250 * pcbIo will hold the required buffer size on return.
251 * @param hIoLogger The I/O logger to use.
252 * @param pidEvent The ID of the event to identify the corresponding start event.
253 * @param pRc Where to store the status code of the request on success.
254 * @param pmsDuration Where to store the duration of the request.
255 * @param pcbIo Where to store the transfer size of the next I/O log entry on success.
256 * @param cbBuf Size of the provided data buffer.
257 * @param pvBuf Where to store the data of the data transfered during a read request.
258 */
259VBOXDDU_DECL(int) VDDbgIoLogEventGetComplete(VDIOLOGGER hIoLogger, uint64_t *pidEvent, int *pRc,
260 uint64_t *pmsDuration, size_t *pcbIo, size_t cbBuf, void *pvBuf);
261
262/** @} */
263
264RT_C_DECLS_END
265
266#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