VirtualBox

source: vbox/trunk/include/VBox/VBoxGuestLib.h@ 8006

Last change on this file since 8006 was 5999, checked in by vboxsync, 16 years ago

The Giant CDDL Dual-License Header Change.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.3 KB
Line 
1/** @file
2 * VBoxGuestLib - Support library header for VirtualBox
3 * Additions: Public header.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
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 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef ___VBox_VBoxGuestLib_h
28#define ___VBox_VBoxGuestLib_h
29
30#include <VBox/VBoxGuest.h>
31
32#include <VBox/err.h>
33
34#ifndef IN_RING0
35#error VBoxGuestLib is only suitable for ring-0!
36#endif
37
38/** @defgroup grp_guest_lib VirtualBox Guest Library
39 * @{
40 */
41
42/** @page pg_guest_lib VirtualBox Guest Library
43 *
44 * The library has 2 versions for each platform:
45 * 1) for VBoxGuest main driver, who is responsible for managing the VMMDev virtual hardware;
46 * 2) for other guest drivers.
47 *
48 * Library therefore consists of:
49 * common code to be used by both VBoxGuest and other drivers;
50 * VBoxGuest specific code;
51 * code for other drivers which communicate with VBoxGuest via an IOCTL.
52 *
53 * The library sources produce 2 libs VBoxGuestLib and VBoxGuestLibBase,
54 * the latter one is for VBoxGuest.
55 *
56 * Drivers must choose right library in their makefiles.
57 *
58 * Library source code and the header have a define VBGL_VBOXGUEST,
59 * which is defined for VBoxGuest and undefined for other drivers.
60 *
61 */
62
63#define DECLVBGL(type) type VBOXCALL
64
65typedef uint32_t VBGLIOPORT;
66
67__BEGIN_DECLS
68
69#ifdef VBGL_VBOXGUEST
70
71/**
72 * The library initialization function to be used by the main
73 * VBoxGuest system driver.
74 *
75 * @return VBox status code.
76 */
77DECLVBGL(int) VbglInit (VBGLIOPORT portVMMDev, VMMDevMemory *pVMMDevMemory);
78
79#else
80
81/**
82 * The library initialization function to be used by all drivers
83 * other than the main VBoxGuest system driver.
84 *
85 * @return VBox status code.
86 */
87DECLVBGL(int) VbglInit (void);
88
89#endif
90
91/**
92 * The library termination function.
93 */
94DECLVBGL(void) VbglTerminate (void);
95
96/** @name Generic request functions.
97 * @{
98 */
99
100/**
101 * Allocate memory for generic request and initialize the request header.
102 *
103 * @param ppReq pointer to resulting memory address.
104 * @param cbSize size of memory block required for the request.
105 * @param reqType the generic request type.
106 *
107 * @return VBox status code.
108 */
109DECLVBGL(int) VbglGRAlloc (VMMDevRequestHeader **ppReq, uint32_t cbSize, VMMDevRequestType reqType);
110
111/**
112 * Perform the generic request.
113 *
114 * @param pReq pointer the request structure.
115 *
116 * @return VBox status code.
117 */
118DECLVBGL(int) VbglGRPerform (VMMDevRequestHeader *pReq);
119
120/**
121 * Free the generic request memory.
122 *
123 * @param pReq pointer the request structure.
124 *
125 * @return VBox status code.
126 */
127DECLVBGL(void) VbglGRFree (VMMDevRequestHeader *pReq);
128/** @} */
129
130#ifdef VBOX_HGCM
131
132#ifdef VBGL_VBOXGUEST
133
134/**
135 * Callback function called from HGCM helpers when a wait for request
136 * completion IRQ is required.
137 *
138 * @param pvData VBoxGuest pointer to be passed to callback.
139 * @param u32Data VBoxGuest 32 bit value to be passed to callback.
140 */
141
142typedef DECLVBGL(void) VBGLHGCMCALLBACK(VMMDevHGCMRequestHeader *pHeader, void *pvData, uint32_t u32Data);
143
144/**
145 * Perform a connect request. That is locate required service and
146 * obtain a client identifier for future access.
147 *
148 * @param pConnectInfo The request data.
149 * @param pAsyncCallback Required pointer to function that is called when
150 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
151 * implements waiting for an IRQ in this function.
152 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
153 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
154 *
155 * @return VBox status code.
156 */
157
158DECLVBGL(int) VbglHGCMConnect (VBoxGuestHGCMConnectInfo *pConnectInfo,
159 VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
160
161
162/**
163 * Perform a disconnect request. That is tell the host that
164 * the client will not call the service anymore.
165 *
166 * @param pDisconnectInfo The request data.
167 * @param pAsyncCallback Required pointer to function that is called when
168 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
169 * implements waiting for an IRQ in this function.
170 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
171 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
172 *
173 * @return VBox status code.
174 */
175
176DECLVBGL(int) VbglHGCMDisconnect (VBoxGuestHGCMDisconnectInfo *pDisconnectInfo,
177 VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
178
179/* Call a HGCM service.
180 *
181 * @param pCallInfo The request data.
182 * @param pAsyncCallback Required pointer to function that is called when
183 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
184 * implements waiting for an IRQ in this function.
185 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
186 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
187 *
188 * @return VBox status code.
189 */
190DECLVBGL(int) VbglHGCMCall (VBoxGuestHGCMCallInfo *pCallInfo,
191 VBGLHGCMCALLBACK *pAsyncCallback, void *pvAsyncData, uint32_t u32AsyncData);
192
193#else /* !VBGL_VBOXGUEST */
194
195struct VBGLHGCMHANDLEDATA;
196typedef struct VBGLHGCMHANDLEDATA *VBGLHGCMHANDLE;
197
198/** @name HGCM functions
199 * @{
200 */
201
202/**
203 * Connect to a service.
204 *
205 * @param pHandle Pointer to variable that will hold a handle to be used
206 * further in VbglHGCMCall and VbglHGCMClose.
207 * @param pData Connection information structure.
208 *
209 * @return VBox status code.
210 */
211DECLVBGL(int) VbglHGCMConnect (VBGLHGCMHANDLE *pHandle, VBoxGuestHGCMConnectInfo *pData);
212
213/**
214 * Connect to a service.
215 *
216 * @param handle Handle of the connection.
217 * @param pData Disconnect request information structure.
218 *
219 * @return VBox status code.
220 */
221DECLVBGL(int) VbglHGCMDisconnect (VBGLHGCMHANDLE handle, VBoxGuestHGCMDisconnectInfo *pData);
222
223/**
224 * Call to a service.
225 *
226 * @param handle Handle of the connection.
227 * @param pData Call request information structure, including function parameters.
228 * @param cbData Length in bytes of data.
229 *
230 * @return VBox status code.
231 */
232DECLVBGL(int) VbglHGCMCall (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
233/** @} */
234
235#endif /* !VBGL_VBOXGUEST */
236
237#endif /* VBOX_HGCM */
238
239
240/**
241 * Initialize the heap.
242 *
243 * @return VBox error code.
244 */
245DECLVBGL(int) VbglPhysHeapInit (void);
246
247/**
248 * Shutdown the heap.
249 */
250DECLVBGL(void) VbglPhysHeapTerminate (void);
251
252
253/**
254 * Allocate a memory block.
255 *
256 * @param cbSize Size of block to be allocated.
257 * @return Virtual address of allocated memory block.
258 */
259DECLVBGL(void *) VbglPhysHeapAlloc (uint32_t cbSize);
260
261/**
262 * Get physical address of memory block pointed by
263 * the virtual address.
264 *
265 * @note WARNING!
266 * The function does not acquire the Heap mutex!
267 * When calling the function make sure that
268 * the pointer is a valid one and is not being
269 * deallocated.
270 * This function can NOT be used for verifying
271 * if the given pointer is a valid one allocated
272 * from the heap.
273 *
274 *
275 * @param p Virtual address of memory block.
276 * @return Physical memory block.
277 */
278DECLVBGL(RTCCPHYS) VbglPhysHeapGetPhysAddr (void *p);
279
280/**
281 * Free a memory block.
282 *
283 * @param p Virtual address of memory block.
284 */
285DECLVBGL(void) VbglPhysHeapFree (void *p);
286
287DECLVBGL(int) VbglQueryVMMDevMemory (VMMDevMemory **ppVMMDevMemory);
288
289__END_DECLS
290
291/** @} */
292
293#endif
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use