VirtualBox

source: vbox/trunk/include/VBox/vmm/pdmsrv.h

Last change on this file was 99739, checked in by vboxsync, 12 months ago

*: doxygen corrections (mostly about removing @returns from functions returning void).

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

© 2023 Oracle
ContactPrivacy policyTerms of Use