VirtualBox

source: vbox/trunk/include/VBox/pdmsrv.h@ 7944

Last change on this file since 7944 was 5999, checked in by vboxsync, 17 years ago

The Giant CDDL Dual-License Header Change.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1/** @file
2 * PDM - Pluggable Device Manager, VM Services.
3 */
4
5/*
6 * Copyright (C) 2006-2007 innotek GmbH
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_pdmsrv_h
27#define ___VBox_pdmsrv_h
28
29#include <VBox/pdmifs.h>
30#include <VBox/ssm.h>
31#include <VBox/cfgm.h>
32
33__BEGIN_DECLS
34
35/** @defgroup grp_pdm_services Services
36 * @ingroup grp_pdm
37 * @{
38 */
39
40/**
41 * Construct a service instance for a VM.
42 *
43 * @returns VBox status.
44 * @param pSrvIns The service instance data.
45 * If the registration structure is needed, pSrvIns->pReg points to it.
46 * @param pCfg Configuration node handle for the service. Use this to obtain the configuration
47 * of the driver instance. It's also found in pSrvIns->pCfg, but since it's primary
48 * usage is expected in this function it is passed as a parameter.
49 */
50typedef DECLCALLBACK(int) FNPDMSRVCONSTRUCT(PPDMSRVINS pSrvIns, PCFGMNODE pCfg);
51/** Pointer to a FNPDMSRVCONSTRUCT() function. */
52typedef FNPDMSRVCONSTRUCT *PFNPDMSRVCONSTRUCT;
53
54/**
55 * Destruct a driver instance.
56 *
57 * Most VM resources are freed by the VM. This callback is provided so that any non-VM
58 * resources can be freed correctly.
59 *
60 * @param pSrvIns The service instance data.
61 */
62typedef DECLCALLBACK(void) FNPDMSRVDESTRUCT(PPDMSRVINS pSrvIns);
63/** Pointer to a FNPDMSRVDESTRUCT() function. */
64typedef FNPDMSRVDESTRUCT *PFNPDMSRVDESTRUCT;
65
66/**
67 * Power On notification.
68 *
69 * @param pSrvIns The service instance data.
70 */
71typedef DECLCALLBACK(void) FNPDMSRVPOWERON(PPDMSRVINS pSrvIns);
72/** Pointer to a FNPDMSRVPOWERON() function. */
73typedef FNPDMSRVPOWERON *PFNPDMSRVPOWERON;
74
75/**
76 * Reset notification.
77 *
78 * @returns VBox status.
79 * @param pSrvIns The service instance data.
80 */
81typedef DECLCALLBACK(void) FNPDMSRVRESET(PPDMSRVINS pSrvIns);
82/** Pointer to a FNPDMSRVRESET() function. */
83typedef FNPDMSRVRESET *PFNPDMSRVRESET;
84
85/**
86 * Suspend notification.
87 *
88 * @returns VBox status.
89 * @param pSrvIns The service instance data.
90 */
91typedef DECLCALLBACK(void) FNPDMSRVSUSPEND(PPDMSRVINS pSrvIns);
92/** Pointer to a FNPDMSRVSUSPEND() function. */
93typedef FNPDMSRVSUSPEND *PFNPDMSRVSUSPEND;
94
95/**
96 * Resume notification.
97 *
98 * @returns VBox status.
99 * @param pSrvIns The service instance data.
100 */
101typedef DECLCALLBACK(void) FNPDMSRVRESUME(PPDMSRVINS pSrvIns);
102/** Pointer to a FNPDMSRVRESUME() function. */
103typedef FNPDMSRVRESUME *PFNPDMSRVRESUME;
104
105/**
106 * Power Off notification.
107 *
108 * @param pSrvIns The service instance data.
109 */
110typedef DECLCALLBACK(void) FNPDMSRVPOWEROFF(PPDMSRVINS pSrvIns);
111/** Pointer to a FNPDMSRVPOWEROFF() function. */
112typedef FNPDMSRVPOWEROFF *PFNPDMSRVPOWEROFF;
113
114/**
115 * Detach notification.
116 *
117 * This is called when a driver or device is detached from the service
118 *
119 * @param pSrvIns The service instance data.
120 */
121typedef DECLCALLBACK(void) FNPDMSRVDETACH(PPDMSRVINS pSrvIns, PPDMDEVINS pDevIns, PPDMDRVINS pDrvIns);
122/** Pointer to a FNPDMSRVDETACH() function. */
123typedef FNPDMSRVDETACH *PFNPDMSRVDETACH;
124
125
126
127/** PDM Service Registration Structure,
128 * This structure is used when registering a driver from
129 * VBoxServicesRegister() (HC Ring-3). PDM will continue use till
130 * the VM is terminated.
131 */
132typedef struct PDMSRVREG
133{
134 /** Structure version. PDM_SRVREG_VERSION defines the current version. */
135 uint32_t u32Version;
136 /** Driver name. */
137 char szServiceName[32];
138 /** The description of the driver. The UTF-8 string pointed to shall, like this structure,
139 * remain unchanged from registration till VM destruction. */
140 const char *pszDescription;
141
142 /** Flags, combination of the PDM_SRVREG_FLAGS_* \#defines. */
143 RTUINT fFlags;
144 /** Size of the instance data. */
145 RTUINT cbInstance;
146
147 /** Construct instance - required. */
148 PFNPDMSRVCONSTRUCT pfnConstruct;
149 /** Destruct instance - optional. */
150 PFNPDMSRVDESTRUCT pfnDestruct;
151 /** Power on notification - optional. */
152 PFNPDMSRVPOWERON pfnPowerOn;
153 /** Reset notification - optional. */
154 PFNPDMSRVRESET pfnReset;
155 /** Suspend notification - optional. */
156 PFNPDMSRVSUSPEND pfnSuspend;
157 /** Resume notification - optional. */
158 PFNPDMSRVRESUME pfnResume;
159 /** Detach notification - optional. */
160 PFNPDMSRVDETACH pfnDetach;
161 /** Power off notification - optional. */
162 PFNPDMSRVPOWEROFF pfnPowerOff;
163
164} PDMSRVREG;
165/** Pointer to a PDM Driver Structure. */
166typedef PDMSRVREG *PPDMSRVREG;
167/** Const pointer to a PDM Driver Structure. */
168typedef PDMSRVREG const *PCPDMSRVREG;
169
170
171
172/**
173 * PDM Service API.
174 */
175typedef struct PDMSRVHLP
176{
177 /** Structure version. PDM_SRVHLP_VERSION defines the current version. */
178 uint32_t u32Version;
179
180 /**
181 * Assert that the current thread is the emulation thread.
182 *
183 * @returns True if correct.
184 * @returns False if wrong.
185 * @param pSrvIns Service instance.
186 * @param pszFile Filename of the assertion location.
187 * @param iLine Linenumber of the assertion location.
188 * @param pszFunction Function of the assertion location.
189 */
190 DECLR3CALLBACKMEMBER(bool, pfnAssertEMT,(PPDMSRVINS pSrvIns, const char *pszFile, unsigned iLine, const char *pszFunction));
191
192 /**
193 * Assert that the current thread is NOT the emulation thread.
194 *
195 * @returns True if correct.
196 * @returns False if wrong.
197 * @param pSrvIns Service instance.
198 * @param pszFile Filename of the assertion location.
199 * @param iLine Linenumber of the assertion location.
200 * @param pszFunction Function of the assertion location.
201 */
202 DECLR3CALLBACKMEMBER(bool, pfnAssertOther,(PPDMSRVINS pSrvIns, const char *pszFile, unsigned iLine, const char *pszFunction));
203
204 /**
205 * Creates a timer.
206 *
207 * @returns VBox status.
208 * @param pVM The VM to create the timer in.
209 * @param pSrvIns Service instance.
210 * @param enmClock The clock to use on this timer.
211 * @param pfnCallback Callback function.
212 * @param pszDesc Pointer to description string which must stay around
213 * until the timer is fully destroyed (i.e. a bit after TMTimerDestroy()).
214 * @param ppTimer Where to store the timer on success.
215 */
216 DECLR3CALLBACKMEMBER(int, pfnTMTimerCreate,(PPDMSRVINS pSrvIns, TMCLOCK enmClock, PFNTMTIMERDEV pfnCallback, const char *pszDesc, PPTMTIMERR3 ppTimer));
217
218 /**
219 * Query the virtual timer frequency.
220 *
221 * @returns Frequency in Hz.
222 * @param pSrvIns Service instance.
223 * @thread Any thread.
224 */
225 DECLR3CALLBACKMEMBER(uint64_t, pfnTMGetVirtualFreq,(PPDMSRVINS pSrvIns));
226
227 /**
228 * Query the virtual time.
229 *
230 * @returns The current virtual time.
231 * @param pSrvIns Service instance.
232 * @thread Any thread.
233 */
234 DECLR3CALLBACKMEMBER(uint64_t, pfnTMGetVirtualTime,(PPDMSRVINS pSrvIns));
235
236} PDMSRVHLP;
237/** Pointer PDM Service API. */
238typedef PDMSRVHLP *PPDMSRVHLP;
239/** Pointer const PDM Service API. */
240typedef const PDMSRVHLP *PCPDMSRVHLP;
241
242/** Current SRVHLP version number. */
243#define PDM_SRVHLP_VERSION 0xf9010000
244
245
246/**
247 * PDM Service Instance.
248 */
249typedef struct PDMSRVINS
250{
251 /** Structure version. PDM_SRVINS_VERSION defines the current version. */
252 uint32_t u32Version;
253
254 /** Internal data. */
255 union
256 {
257#ifdef PDMSRVINSINT_DECLARED
258 PDMSRVINSINT s;
259#endif
260 uint8_t padding[HC_ARCH_BITS == 32 ? 32 : 32];
261 } Internal;
262
263 /** Pointer the PDM Service API. */
264 R3PTRTYPE(PCPDMSRVHLP) pHlp;
265 /** Pointer to driver registration structure. */
266 R3PTRTYPE(PCPDMSRVREG) pReg;
267 /** Configuration handle. */
268 R3PTRTYPE(PCFGMNODE) pCfg;
269 /** The base interface of the service.
270 * The service constructor initializes this. */
271 PDMIBASE IBase;
272 /* padding to make achInstanceData aligned at 16 byte boundrary. */
273 uint32_t au32Padding[2];
274 /** Pointer to driver instance data. */
275 R3PTRTYPE(void *) pvInstanceData;
276 /** Driver instance data. The size of this area is defined
277 * in the PDMSRVREG::cbInstanceData field. */
278 char achInstanceData[4];
279} PDMSRVINS;
280
281/** Current PDMSRVREG version number. */
282#define PDM_SRVINS_VERSION 0xf7010000
283
284/** Converts a pointer to the PDMSRVINS::IBase to a pointer to PDMSRVINS. */
285#define PDMIBASE_2_PDMSRV(pInterface) ( (PPDMSRVINS)((char *)(pInterface) - RT_OFFSETOF(PDMSRVINS, IBase)) )
286
287
288
289/** Pointer to callbacks provided to the VBoxServiceRegister() call. */
290typedef struct PDMSRVREGCB *PPDMSRVREGCB;
291
292/**
293 * Callbacks for VBoxServiceRegister().
294 */
295typedef struct PDMSRVREGCB
296{
297 /** Interface version.
298 * This is set to PDM_SRVREG_CB_VERSION. */
299 uint32_t u32Version;
300
301 /**
302 * Registers a service with the current VM instance.
303 *
304 * @returns VBox status code.
305 * @param pCallbacks Pointer to the callback table.
306 * @param pSrvReg Pointer to the device registration record.
307 * This data must be permanent and readonly.
308 */
309 DECLR3CALLBACKMEMBER(int, pfnRegister,(PPDMSRVREGCB pCallbacks, PCPDMSRVREG pSrvReg));
310} PDMSRVREGCB;
311
312/** Current version of the PDMSRVREGCB structure. */
313#define PDM_SRVREG_CB_VERSION 0xf8010000
314
315
316/**
317 * The VBoxServicesRegister callback function.
318 *
319 * PDM will invoke this function after loading a device module and letting
320 * the module decide which devices to register and how to handle conflicts.
321 *
322 * @returns VBox status code.
323 * @param pCallbacks Pointer to the callback table.
324 * @param u32Version VBox version number.
325 */
326typedef DECLCALLBACK(int) FNPDMVBOXSERVICESREGISTER(PPDMSRVREGCB pCallbacks, uint32_t u32Version);
327
328
329/** @} */
330
331__END_DECLS
332
333#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