VirtualBox

source: vbox/trunk/src/VBox/Devices/Storage/IOBufMgmt.h@ 74441

Last change on this file since 74441 was 69500, checked in by vboxsync, 7 years ago

*: scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.5 KB
Line 
1/* $Id: IOBufMgmt.h 69500 2017-10-28 15:14:05Z vboxsync $ */
2/** @file
3 * VBox storage devices: I/O buffer management API.
4 */
5
6/*
7 * Copyright (C) 2016-2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17#ifndef __IOBufMgmt_h
18#define __IOBufMgmt_h
19
20#include <VBox/cdefs.h>
21#include <iprt/sg.h>
22
23RT_C_DECLS_BEGIN
24
25/**
26 * Opaque I/O buffer manager.
27 */
28typedef struct IOBUFMGRINT *IOBUFMGR;
29/** Pointer to a I/O buffer manager. */
30typedef IOBUFMGR *PIOBUFMGR;
31
32/* NIL I/O buffer manager handle. */
33#define NIL_IOBUFMGR ((IOBUFMGR)0)
34
35#define IOBUFMGR_F_DEFAULT (0)
36/** I/O buffer memory needs to be non pageable (for example because it contains sensitive data
37 * which shouldn't end up in swap unencrypted). */
38#define IOBUFMGR_F_REQUIRE_NOT_PAGABLE RT_BIT(0)
39
40/**
41 * I/O buffer descriptor.
42 */
43typedef struct IOBUFDESC
44{
45 /** S/G buffer. */
46 RTSGBUF SgBuf;
47 /** Internal data */
48 union
49 {
50#ifdef IOBUFDESCINT_DECLARED
51 IOBUFDESCINT Int;
52#endif
53 uint8_t abPadding[HC_ARCH_BITS == 32 ? 88 : 172];
54 };
55} IOBUFDESC;
56/** Pointer to a I/O buffer descriptor. */
57typedef IOBUFDESC *PIOBUFDESC;
58
59/**
60 * Creates I/O buffer manager.
61 *
62 * @returns VBox status code.
63 * @param phIoBufMgr Where to store the handle to the I/O buffer manager on success.
64 * @param cbMax The maximum amount of I/O memory to allow. Trying to allocate more than
65 * this will lead to out of memory errors. 0 for "unlimited" size (only restriction
66 * is the available memory on the host).
67 * @param fFlags Combination of IOBUFMGR_F_*
68 */
69DECLHIDDEN(int) IOBUFMgrCreate(PIOBUFMGR phIoBufMgr, size_t cbMax, uint32_t fFlags);
70
71/**
72 * Destroys the given I/O buffer manager.
73 *
74 * @returns VBox status code.
75 * @retval VERR_INVALID_STATE if there is still memory allocated by the given manager.
76 * @param hIoBufMgr The I/O buffer manager.
77 */
78DECLHIDDEN(int) IOBUFMgrDestroy(IOBUFMGR hIoBufMgr);
79
80/**
81 * Allocates a I/O buffer and fills the descriptor.
82 *
83 * @returns VBox status code.
84 * @retval VERR_NO_MEMORY if there is not enough free memory to satisfy the request
85 * and partial allocations are not allowed or allocating some internal tracking
86 * structures failed.
87 * @param hIoBufMgr The I/O buffer manager.
88 * @param pIoBufDesc The I/O buffer descriptor to initialize on success.
89 * @param cbIoBuf How much to allocate.
90 * @param pcbIoBufAllocated Where to store amount of memory the manager was able to allocate
91 * if there is not enough free memory to satisfy the complete request.
92 * NULL if partial allocations are not supported.
93 */
94DECLHIDDEN(int) IOBUFMgrAllocBuf(IOBUFMGR hIoBufMgr, PIOBUFDESC pIoBufDesc, size_t cbIoBuf,
95 size_t *pcbIoBufAllocated);
96
97/**
98 * Frees a given I/O buffer.
99 *
100 * @returns nothing.
101 * @param pIoBufDesc The I/O buffer descriptor to free.
102 */
103DECLHIDDEN(void) IOBUFMgrFreeBuf(PIOBUFDESC pIoBufDesc);
104
105RT_C_DECLS_END
106
107#endif /* __HBDMgmt_h */
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