VirtualBox

root/trunk/include/VBox/gvmm.h

Revision 13742, 6.8 kB (checked in by vboxsync, 2 weeks ago)

Some initial VM data restructuring.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1 /* $Id$ */
2 /** @file
3  * GVMM - The Global VM Manager.
4  */
5
6 /*
7  * Copyright (C) 2007 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 ___VBox_gvmm_h
32 #define ___VBox_gvmm_h
33
34 #include <VBox/cdefs.h>
35 #include <VBox/types.h>
36 #include <VBox/sup.h>
37
38 __BEGIN_DECLS
39
40 /** @defgroup grp_GVMM  GVMM - The Global VM Manager.
41  * @{
42  */
43
44 /** @def IN_GVMM_R0
45  * Used to indicate whether we're inside the same link module as the ring 0
46  * part of the Global VM Manager or not.
47  */
48 #ifdef DOXYGEN_RUNNING
49 # define IN_GVMM_R0
50 #endif
51 /** @def GVMMR0DECL
52  * Ring 0 VM export or import declaration.
53  * @param   type    The return type of the function declaration.
54  */
55 #ifdef IN_GVMM_R0
56 # define GVMMR0DECL(type)    DECLEXPORT(type) VBOXCALL
57 #else
58 # define GVMMR0DECL(type)    DECLIMPORT(type) VBOXCALL
59 #endif
60
61 /** @def NIL_GVM_HANDLE
62  * The nil GVM VM handle value (VM::hSelf).
63  */
64 #define NIL_GVM_HANDLE 0
65
66
67 /**
68  * The scheduler statistics
69  */
70 typedef struct GVMMSTATSSCHED
71 {
72     /** The number of calls to GVMMR0SchedHalt. */
73     uint64_t        cHaltCalls;
74     /** The number of times we did go to sleep in GVMMR0SchedHalt. */
75     uint64_t        cHaltBlocking;
76     /** The number of times we timed out in GVMMR0SchedHalt. */
77     uint64_t        cHaltTimeouts;
78     /** The number of times we didn't go to sleep in GVMMR0SchedHalt. */
79     uint64_t        cHaltNotBlocking;
80     /** The number of wake ups done during GVMMR0SchedHalt. */
81     uint64_t        cHaltWakeUps;
82
83     /** The number of calls to GVMMR0WakeUp. */
84     uint64_t        cWakeUpCalls;
85     /** The number of times the EMT thread wasn't actually halted when GVMMR0WakeUp was called. */
86     uint64_t        cWakeUpNotHalted;
87     /** The number of wake ups done during GVMMR0WakeUp (not counting the explicit one). */
88     uint64_t        cWakeUpWakeUps;
89
90     /** The number of calls to GVMMR0SchedPoll. */
91     uint64_t        cPollCalls;
92     /** The number of times the EMT has halted in a GVMMR0SchedPoll call. */
93     uint64_t        cPollHalts;
94     /** The number of wake ups done during GVMMR0SchedPoll. */
95     uint64_t        cPollWakeUps;
96     uint64_t        u64Alignment; /**< padding */
97 } GVMMSTATSSCHED;
98 /** Pointer to the GVMM scheduler statistics. */
99 typedef GVMMSTATSSCHED *PGVMMSTATSSCHED;
100
101 /**
102  * The GMM statistics.
103  */
104 typedef struct GVMMSTATS
105 {
106     /** The VM statistics if a VM was specified. */
107     GVMMSTATSSCHED  SchedVM;
108     /** The sum statistics of all VMs accessible to the caller. */
109     GVMMSTATSSCHED  SchedSum;
110     /** The number of VMs accessible to the caller. */
111     uint32_t        cVMs;
112     /** Alignment padding. */
113     uint32_t        u32Padding;
114 } GVMMSTATS;
115 /** Pointer to the GVMM statistics. */
116 typedef GVMMSTATS *PGVMMSTATS;
117 /** Const pointer to the GVMM statistics. */
118 typedef const GVMMSTATS *PCGVMMSTATS;
119
120
121
122 GVMMR0DECL(int)     GVMMR0Init(void);
123 GVMMR0DECL(void)    GVMMR0Term(void);
124 GVMMR0DECL(int) GVMMR0SetConfig(PSUPDRVSESSION pSession, const char *pszName, uint64_t u64Value);
125 GVMMR0DECL(int) GVMMR0QueryConfig(PSUPDRVSESSION pSession, const char *pszName, uint64_t *pu64Value);
126
127 GVMMR0DECL(int)     GVMMR0CreateVM(PSUPDRVSESSION pSession, uint32_t cCPUs, PVM *ppVM);
128 GVMMR0DECL(int)     GVMMR0InitVM(PVM pVM);
129 GVMMR0DECL(int)     GVMMR0DestroyVM(PVM pVM);
130 GVMMR0DECL(PGVM)    GVMMR0ByHandle(uint32_t hGVM);
131 GVMMR0DECL(PGVM)    GVMMR0ByVM(PVM pVM);
132 GVMMR0DECL(int)     GVMMR0ByVMAndEMT(PVM pVM, PGVM *ppGVM);
133 GVMMR0DECL(PVM)     GVMMR0GetVMByHandle(uint32_t hGVM);
134 GVMMR0DECL(PVM)     GVMMR0GetVMByEMT(RTNATIVETHREAD hEMT);
135 GVMMR0DECL(int)     GVMMR0SchedHalt(PVM pVM, uint64_t u64ExpireGipTime);
136 GVMMR0DECL(int)     GVMMR0SchedWakeUp(PVM pVM);
137 GVMMR0DECL(int)     GVMMR0SchedPoll(PVM pVM, bool fYield);
138 GVMMR0DECL(int)     GVMMR0QueryStatistics(PGVMMSTATS pStats, PSUPDRVSESSION pSession, PVM pVM);
139 GVMMR0DECL(int)     GVMMR0ResetStatistics(PCGVMMSTATS pStats, PSUPDRVSESSION pSession, PVM pVM);
140
141
142 /**
143  * Request packet for calling GVMMR0CreateVM.
144  */
145 typedef struct GVMMCREATEVMREQ
146 {
147     /** The request header. */
148     SUPVMMR0REQHDR  Hdr;
149     /** The support driver session. (IN) */
150     PSUPDRVSESSION  pSession;
151     /** Number of virtual CPUs for the new VM. (IN) */
152     uint32_t        cCPUs;
153     /** Pointer to the ring-3 mapping of the shared VM structure on return. (OUT) */
154     PVMR3           pVMR3;
155     /** Pointer to the ring-0 mapping of the shared VM structure on return. (OUT) */
156     PVMR0           pVMR0;
157 } GVMMCREATEVMREQ;
158 /** Pointer to a GVMMR0CreateVM request packet. */
159 typedef GVMMCREATEVMREQ *PGVMMCREATEVMREQ;
160
161 GVMMR0DECL(int)     GVMMR0CreateVMReq(PGVMMCREATEVMREQ pReq);
162
163
164 /**
165  * Request buffer for GVMMR0QueryStatisticsReq / VMMR0_DO_GVMM_QUERY_STATISTICS.
166  * @see GVMMR0QueryStatistics.
167  */
168 typedef struct GVMMQUERYSTATISTICSSREQ
169 {
170     /** The header. */
171     SUPVMMR0REQHDR  Hdr;
172     /** The support driver session. */
173     PSUPDRVSESSION  pSession;
174     /** The statistics. */
175     GVMMSTATS       Stats;
176 } GVMMQUERYSTATISTICSSREQ;
177 /** Pointer to a GVMMR0QueryStatisticsReq / VMMR0_DO_GVMM_QUERY_STATISTICS request buffer. */
178 typedef GVMMQUERYSTATISTICSSREQ *PGVMMQUERYSTATISTICSSREQ;
179
180 GVMMR0DECL(int)     GVMMR0QueryStatisticsReq(PVM pVM, PGVMMQUERYSTATISTICSSREQ pReq);
181
182
183 /**
184  * Request buffer for GVMMR0ResetStatisticsReq / VMMR0_DO_GVMM_RESET_STATISTICS.
185  * @see GVMMR0ResetStatistics.
186  */
187 typedef struct GVMMRESETSTATISTICSSREQ
188 {
189     /** The header. */
190     SUPVMMR0REQHDR  Hdr;
191     /** The support driver session. */
192     PSUPDRVSESSION  pSession;
193     /** The statistics to reset.
194      * Any non-zero entry will be reset (if permitted). */
195     GVMMSTATS       Stats;
196 } GVMMRESETSTATISTICSSREQ;
197 /** Pointer to a GVMMR0ResetStatisticsReq / VMMR0_DO_GVMM_RESET_STATISTICS request buffer. */
198 typedef GVMMRESETSTATISTICSSREQ *PGVMMRESETSTATISTICSSREQ;
199
200 GVMMR0DECL(int)     GVMMR0ResetStatisticsReq(PVM pVM, PGVMMRESETSTATISTICSSREQ pReq);
201
202
203 /** @} */
204
205 __END_DECLS
206
207 #endif
208
Note: See TracBrowser for help on using the browser.

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy