VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/Support/SUPDrvIDC.h@ 20338

Last change on this file since 20338 was 10377, checked in by vboxsync, 16 years ago

Implemented the IDC methods. Moved the setting of the R0Process and Process SUPDRVSESSION members to SUPDrv.c, and made SUPDrv.c provide default initialization of the Uid and Gid members.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.6 KB
Line 
1/* $Id: SUPDrvIDC.h 10377 2008-07-08 16:26:13Z vboxsync $ */
2/** @file
3 * VirtualBox Support Driver - Inter-Driver Communciation (IDC) definitions.
4 */
5
6/*
7 * Copyright (C) 2008 Sun Microsystems, Inc.
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 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27 * Clara, CA 95054 USA or visit http://www.sun.com if you need
28 * additional information or have any questions.
29 */
30
31#ifndef ___SUPDrvIDC_h___
32#define ___SUPDrvIDC_h___
33
34#include <VBox/types.h>
35
36/** @def SUP_IDC_CODE
37 * Creates IDC function code.
38 *
39 * @param Function The function number to encode, 1..255.
40 *
41 * @remarks We can take a sligtly more relaxed attitude wrt to size encoding
42 * here since only windows will use standard I/O control function code.
43 */
44#ifdef RT_OS_WINDOWS
45# define SUP_IDC_CODE(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, (Function) + 2542, METHOD_BUFFERED, FILE_WRITE_ACCESS)
46#else
47# define SUP_IDC_CODE(Function) ( UINT32_C(0xc0ffee00) | (uint32_t)(0x000000ff & (Function)) )
48#endif
49
50
51/*******************************************************************************
52* Structures and Typedefs *
53*******************************************************************************/
54#ifdef RT_ARCH_AMD64
55# pragma pack(8) /* paranoia. */
56#else
57# pragma pack(4) /* paranoia. */
58#endif
59
60
61/**
62 * An IDC request packet header.
63 *
64 * The main purpose of this header is to pass the session handle
65 * and status code in a generic manner in order to make things
66 * easier on the receiving end.
67 */
68typedef struct SUPDRVIDCREQHDR
69{
70 /** IN: The size of the request. */
71 uint32_t cb;
72 /** OUT: Status code of the request. */
73 int32_t rc;
74 /** IN: Pointer to the session handle. */
75 PSUPDRVSESSION pSession;
76#if ARCH_BITS == 32
77 /** Padding the structure to 16-bytes. */
78 uint32_t u32Padding;
79#endif
80} SUPDRVIDCREQHDR;
81/** Pointer to an IDC request packet header. */
82typedef SUPDRVIDCREQHDR *PSUPDRVIDCREQHDR;
83/** Pointer to a const IDC request packet header. */
84typedef SUPDRVIDCREQHDR const *PCSUPDRVIDCREQHDR;
85
86
87/**
88 * SUPDRV IDC: Connect request.
89 * This request takes a SUPDRVIDCREQCONNECT packet.
90 */
91#define SUPDRV_IDC_REQ_CONNECT SUP_IDC_CODE(1)
92/** A SUPDRV IDC connect request packet. */
93typedef struct SUPDRVIDCREQCONNECT
94{
95 /** The request header. */
96 SUPDRVIDCREQHDR Hdr;
97 /** The payload union. */
98 union
99 {
100 /** The input. */
101 struct SUPDRVIDCREQCONNECTIN
102 {
103 /** The magic cookie (SUPDRVIDCREQ_CONNECT_MAGIC_COOKIE). */
104 uint32_t u32MagicCookie;
105 /** The desired version of the IDC interface. */
106 uint32_t uReqVersion;
107 /** The minimum version of the IDC interface. */
108 uint32_t uMinVersion;
109 } In;
110
111 /** The output. */
112 struct SUPDRVIDCREQCONNECTOUT
113 {
114 /** The support driver session. (An opaque.) */
115 PSUPDRVSESSION pSession;
116 /** The version of the IDC interface for this session. */
117 uint32_t uSessionVersion;
118 /** The version of the IDC interface . */
119 uint32_t uDriverVersion;
120 /** The SVN revision of the driver.
121 * This will be set to 0 if not compiled into the driver. */
122 uint32_t uDriverRevision;
123 } Out;
124 } u;
125} SUPDRVIDCREQCONNECT;
126/** Pointer to a SUPDRV IDC connect request. */
127typedef SUPDRVIDCREQCONNECT *PSUPDRVIDCREQCONNECT;
128/** Magic cookie value (SUPDRVIDCREQCONNECT::In.u32MagicCookie). ('tori') */
129#define SUPDRVIDCREQ_CONNECT_MAGIC_COOKIE UINT32_C(0x69726f74)
130
131
132/**
133 * SUPDRV IDC: Disconnect request.
134 * This request only requires a SUPDRVIDCREQHDR.
135 */
136#define SUPDRV_IDC_REQ_DISCONNECT SUP_IDC_CODE(2)
137
138
139/**
140 * SUPDRV IDC: Query a symbol address.
141 * This request takes a SUPDRVIDCREQGETSYM packet.
142 */
143#define SUPDRV_IDC_REQ_GET_SYMBOL SUP_IDC_CODE(3)
144/** A SUPDRV IDC get symbol request packet. */
145typedef struct SUPDRVIDCREQGETSYM
146{
147 /** The request header. */
148 SUPDRVIDCREQHDR Hdr;
149 /** The payload union. */
150 union
151 {
152 /** The input. */
153 struct SUPDRVIDCREQGETSYMIN
154 {
155 /** The module name.
156 * NULL is an alias for the support driver. */
157 const char *pszModule;
158 /** The symbol name. */
159 const char *pszSymbol;
160 } In;
161
162 /** The output. */
163 struct SUPDRVIDCREQGETSYMOUT
164 {
165 /** The symbol address. */
166 PFNRT pfnSymbol;
167 } Out;
168 } u;
169} SUPDRVIDCREQGETSYM;
170/** Pointer to a SUPDRV IDC get symbol request. */
171typedef SUPDRVIDCREQGETSYM *PSUPDRVIDCREQGETSYM;
172
173
174/**
175 * SUPDRV IDC: Request the registration of a component factory.
176 * This request takes a SUPDRVIDCREQCOMPREGFACTORY packet.
177 */
178#define SUPDRV_IDC_REQ_COMPONENT_REGISTER_FACTORY SUP_IDC_CODE(10)
179/** A SUPDRV IDC register component factory request packet. */
180typedef struct SUPDRVIDCREQCOMPREGFACTORY
181{
182 /** The request header. */
183 SUPDRVIDCREQHDR Hdr;
184 /** The payload union. */
185 union
186 {
187 /** The input. */
188 struct SUPDRVIDCREQCOMPREGFACTORYIN
189 {
190 /** Pointer to the factory. */
191 PCSUPDRVFACTORY pFactory;
192 } In;
193 } u;
194} SUPDRVIDCREQCOMPREGFACTORY;
195/** Pointer to a SUPDRV IDC register component factory request. */
196typedef SUPDRVIDCREQCOMPREGFACTORY *PSUPDRVIDCREQCOMPREGFACTORY;
197
198
199/**
200 * SUPDRV IDC: Dergister a component factory.
201 * This request takes a SUPDRVIDCREQCOMPDEREGFACTORY packet.
202 */
203#define SUPDRV_IDC_REQ_COMPONENT_DEREGISTER_FACTORY SUP_IDC_CODE(11)
204/** A SUPDRV IDC deregister component factory request packet. */
205typedef struct SUPDRVIDCREQCOMPDEREGFACTORY
206{
207 /** The request header. */
208 SUPDRVIDCREQHDR Hdr;
209 /** The payload union. */
210 union
211 {
212 /** The input. */
213 struct SUPDRVIDCREQCOMPDEREGFACTORYIN
214 {
215 /** Pointer to the factory. */
216 PCSUPDRVFACTORY pFactory;
217 } In;
218 } u;
219} SUPDRVIDCREQCOMPDEREGFACTORY;
220/** Pointer to a SUPDRV IDC deregister component factory request. */
221typedef SUPDRVIDCREQCOMPDEREGFACTORY *PSUPDRVIDCREQCOMPDEREGFACTORY;
222
223
224/*
225 * The OS specific prototypes.
226 * Most OSes uses
227 */
228__BEGIN_DECLS
229
230#if defined(RT_OS_DARWIN)
231extern int VBOXCALL SUPDrvDarwinIDC(uint32_t iReq, PSUPDRVIDCREQHDR pReq);
232
233#elif defined(RT_OS_FREEBSD)
234extern int VBOXCALL SUPDrvFreeBSDIDC(uint32_t iReq, PSUPDRVIDCREQHDR pReq);
235
236#elif defined(RT_OS_LINUX)
237extern int VBOXCALL SUPDrvLinuxIDC(uint32_t iReq, PSUPDRVIDCREQHDR pReq);
238
239#elif defined(RT_OS_OS2)
240/** @todo Port to OS/2. */
241
242#elif defined(RT_OS_SOLARIS)
243extern int VBOXCALL SUPDrvSolarisIDC(uint32_t iReq, PSUPDRVIDCREQHDR pReq);
244
245#elif defined(RT_OS_WINDOWS)
246/* Nothing special for windows. */
247
248#else
249/* PORTME: OS specific IDC stuff goes here. */
250#endif
251
252__END_DECLS
253
254/**
255 * The SUPDRV IDC entry point.
256 *
257 * @returns VBox status code indicating the validity of the session, request and
258 * the return data packet. The status of the request it self is found
259 * in the packet (specific to each request).
260 *
261 * @param pSession The session. (This is NULL for SUPDRV_IDC_REQ_CONNECT.)
262 * @param uReq The request number.
263 * @param pvReq Pointer to the request packet. Optional for some requests.
264 * @param cbReq The size of the request packet.
265 */
266/** @todo move this and change to function proto */
267typedef DECLCALLBACK(int) FNSUPDRVIDCENTRY(PSUPDRVSESSION pSession, uint32_t uReq, void *pvReq, uint32_t cbReq);
268
269/** @} */
270
271
272#pragma pack() /* paranoia */
273
274#endif
275
276
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