VirtualBox

source: vbox/trunk/src/VBox/Devices/testcase/tstDeviceInternal.h@ 76882

Last change on this file since 76882 was 76565, checked in by vboxsync, 6 years ago

Devices: Use VBOX_INCLUDED_SRC_ as header guard prefix with scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.7 KB
Line 
1/** @file
2 * tstDevice: Shared definitions between the framework and the shim library.
3 */
4
5/*
6 * Copyright (C) 2017-2019 Oracle Corporation
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
17#ifndef VBOX_INCLUDED_SRC_testcase_tstDeviceInternal_h
18#define VBOX_INCLUDED_SRC_testcase_tstDeviceInternal_h
19#ifndef RT_WITHOUT_PRAGMA_ONCE
20# pragma once
21#endif
22
23#include <VBox/types.h>
24#include <iprt/assert.h>
25#include <iprt/list.h>
26#include <iprt/semaphore.h>
27
28#include "tstDevicePlugin.h"
29#include "tstDeviceVMMInternal.h"
30
31RT_C_DECLS_BEGIN
32
33
34/** Converts PDM device instance to the device under test structure. */
35#define TSTDEV_PDMDEVINS_2_DUT(a_pDevIns) ((a_pDevIns)->Internal.s.pDut)
36
37/**
38 * PDM module descriptor type.
39 */
40typedef enum TSTDEVPDMMODTYPE
41{
42 /** Invalid module type. */
43 TSTDEVPDMMODTYPE_INVALID = 0,
44 /** Ring 3 module. */
45 TSTDEVPDMMODTYPE_R3,
46 /** Ring 0 module. */
47 TSTDEVPDMMODTYPE_R0,
48 /** Raw context module. */
49 TSTDEVPDMMODTYPE_RC,
50 /** 32bit hack. */
51 TSTDEVPDMMODTYPE_32BIT_HACK = 0x7fffffff
52} TSTDEVPDMMODTYPE;
53
54/**
55 * Registered I/O port access handler.
56 */
57typedef struct RTDEVDUTIOPORT
58{
59 /** Node for the list of registered handlers. */
60 RTLISTNODE NdIoPorts;
61 /** Start I/O port the handler is for. */
62 RTIOPORT PortStart;
63 /** Number of ports handled. */
64 RTIOPORT cPorts;
65 /** Opaque user data - R3. */
66 void *pvUserR3;
67 /** Out handler - R3. */
68 PFNIOMIOPORTOUT pfnOutR3;
69 /** In handler - R3. */
70 PFNIOMIOPORTIN pfnInR3;
71 /** Out string handler - R3. */
72 PFNIOMIOPORTOUTSTRING pfnOutStrR3;
73 /** In string handler - R3. */
74 PFNIOMIOPORTINSTRING pfnInStrR3;
75
76 /** Opaque user data - R0. */
77 void *pvUserR0;
78 /** Out handler - R0. */
79 PFNIOMIOPORTOUT pfnOutR0;
80 /** In handler - R0. */
81 PFNIOMIOPORTIN pfnInR0;
82 /** Out string handler - R0. */
83 PFNIOMIOPORTOUTSTRING pfnOutStrR0;
84 /** In string handler - R0. */
85 PFNIOMIOPORTINSTRING pfnInStrR0;
86
87#ifdef TSTDEV_SUPPORTS_RC
88 /** Opaque user data - RC. */
89 void *pvUserRC;
90 /** Out handler - RC. */
91 PFNIOMIOPORTOUT pfnOutRC;
92 /** In handler - RC. */
93 PFNIOMIOPORTIN pfnInRC;
94 /** Out string handler - RC. */
95 PFNIOMIOPORTOUTSTRING pfnOutStrRC;
96 /** In string handler - RC. */
97 PFNIOMIOPORTINSTRING pfnInStrRC;
98#endif
99} RTDEVDUTIOPORT;
100/** Pointer to a registered I/O port handler. */
101typedef RTDEVDUTIOPORT *PRTDEVDUTIOPORT;
102/** Pointer to a const I/O port handler. */
103typedef const RTDEVDUTIOPORT *PCRTDEVDUTIOPORT;
104
105/**
106 * The Support Driver session state.
107 */
108typedef struct TSTDEVSUPDRVSESSION
109{
110 /** Pointer to the owning device under test instance. */
111 PTSTDEVDUTINT pDut;
112 /** List of event semaphores. */
113 RTLISTANCHOR LstSupSem;
114} TSTDEVSUPDRVSESSION;
115/** Pointer to the Support Driver session state. */
116typedef TSTDEVSUPDRVSESSION *PTSTDEVSUPDRVSESSION;
117
118/** Converts a Support Driver session handle to the internal state. */
119#define TSTDEV_PSUPDRVSESSION_2_PTSTDEVSUPDRVSESSION(a_pSession) ((PTSTDEVSUPDRVSESSION)(a_pSession))
120/** Converts the internal session state to a Support Driver session handle. */
121#define TSTDEV_PTSTDEVSUPDRVSESSION_2_PSUPDRVSESSION(a_pSession) ((PSUPDRVSESSION)(a_pSession))
122
123/**
124 * Support driver event semaphore.
125 */
126typedef struct TSTDEVSUPSEMEVENT
127{
128 /** Node for the event semaphore list. */
129 RTLISTNODE NdSupSem;
130 /** Flag whether this is multi event semaphore. */
131 bool fMulti;
132 /** Event smeaphore handles depending on the flag above. */
133 union
134 {
135 RTSEMEVENT hSemEvt;
136 RTSEMEVENTMULTI hSemEvtMulti;
137 } u;
138} TSTDEVSUPSEMEVENT;
139/** Pointer to a support event semaphore state. */
140typedef TSTDEVSUPSEMEVENT *PTSTDEVSUPSEMEVENT;
141
142/** Converts a Support event semaphore handle to the internal state. */
143#define TSTDEV_SUPSEMEVENT_2_PTSTDEVSUPSEMEVENT(a_pSupSemEvt) ((PTSTDEVSUPSEMEVENT)(a_pSupSemEvt))
144/** Converts the internal session state to a Support event semaphore handle. */
145#define TSTDEV_PTSTDEVSUPSEMEVENT_2_SUPSEMEVENT(a_pSupSemEvt) ((SUPSEMEVENT)(a_pSupSemEvt))
146
147/**
148 * The contex the device under test is currently in.
149 */
150typedef enum TSTDEVDUTCTX
151{
152 /** Invalid context. */
153 TSTDEVDUTCTX_INVALID = 0,
154 /** R3 context. */
155 TSTDEVDUTCTX_R3,
156 /** R0 context. */
157 TSTDEVDUTCTX_R0,
158 /** RC context. */
159 TSTDEVDUTCTX_RC,
160 /** 32bit hack. */
161 TSTDEVDUTCTX_32BIT_HACK = 0x7fffffff
162} TSTDEVDUTCTX;
163
164/**
165 * PCI region descriptor.
166 */
167typedef struct TSTDEVDUTPCIREGION
168{
169 /** Size of the region. */
170 RTGCPHYS cbRegion;
171 /** Address space type. */
172 PCIADDRESSSPACE enmType;
173 /** Region mapping callback. */
174 PFNPCIIOREGIONMAP pfnRegionMap;
175} TSTDEVDUTPCIREGION;
176/** Pointer to a PCI region descriptor. */
177typedef TSTDEVDUTPCIREGION *PTSTDEVDUTPCIREGION;
178/** Pointer to a const PCI region descriptor. */
179typedef const TSTDEVDUTPCIREGION *PCTSTDEVDUTPCIREGION;
180
181/**
182 * Device under test instance data.
183 */
184typedef struct TSTDEVDUTINT
185{
186 /** Pointer to the testcase this device is part of. */
187 PCTSTDEVTESTCASEREG pTestcaseReg;
188 /** Pointer to the PDM device instance. */
189 PPDMDEVINS pDevIns;
190 /** Current device context. */
191 TSTDEVDUTCTX enmCtx;
192 /** Critical section protecting the lists below. */
193 RTCRITSECTRW CritSectLists;
194 /** List of registered I/O port handlers. */
195 RTLISTANCHOR LstIoPorts;
196 /** List of timers registered. */
197 RTLISTANCHOR LstTimers;
198 /** List of registered MMIO regions. */
199 RTLISTANCHOR LstMmio;
200 /** List of MM Heap allocations. */
201 RTLISTANCHOR LstMmHeap;
202 /** List of PDM threads. */
203 RTLISTANCHOR LstPdmThreads;
204 /** The SUP session we emulate. */
205 TSTDEVSUPDRVSESSION SupSession;
206 /** The VM state assoicated with this device. */
207 PVM pVm;
208 /** The registered PCI device instance if this is a PCI device. */
209 PPDMPCIDEV pPciDev;
210 /** PCI Region descriptors. */
211 TSTDEVDUTPCIREGION aPciRegions[VBOX_PCI_NUM_REGIONS];
212} TSTDEVDUTINT;
213
214
215DECLHIDDEN(int) tstDevPdmLdrGetSymbol(PTSTDEVDUTINT pThis, const char *pszMod, TSTDEVPDMMODTYPE enmModType,
216 const char *pszSymbol, PFNRT *ppfn);
217
218
219DECLINLINE(int) tstDevDutLockShared(PTSTDEVDUTINT pThis)
220{
221 return RTCritSectRwEnterShared(&pThis->CritSectLists);
222}
223
224DECLINLINE(int) tstDevDutUnlockShared(PTSTDEVDUTINT pThis)
225{
226 return RTCritSectRwLeaveShared(&pThis->CritSectLists);
227}
228
229DECLINLINE(int) tstDevDutLockExcl(PTSTDEVDUTINT pThis)
230{
231 return RTCritSectRwEnterExcl(&pThis->CritSectLists);
232}
233
234DECLINLINE(int) tstDevDutUnlockExcl(PTSTDEVDUTINT pThis)
235{
236 return RTCritSectRwLeaveExcl(&pThis->CritSectLists);
237}
238
239RT_C_DECLS_END
240
241#endif /* !VBOX_INCLUDED_SRC_testcase_tstDeviceInternal_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