VirtualBox

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

Last change on this file since 4878 was 4787, checked in by vboxsync, 17 years ago

Eliminated HCPTRTYPE and replaced with R3R0PTRTYPE where necessary.

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