VirtualBox

source: vbox/trunk/include/VBox/types.h@ 21217

Last change on this file since 21217 was 20880, checked in by vboxsync, 15 years ago

Queue suspend and power off calls from the VM for SMP guests (deadlock prevention).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.1 KB
Line 
1/** @file
2 * VirtualBox - Types.
3 */
4
5/*
6 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
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 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 *
25 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
26 * Clara, CA 95054 USA or visit http://www.sun.com if you need
27 * additional information or have any questions.
28 */
29
30#ifndef ___VBox_types_h
31#define ___VBox_types_h
32
33#include <VBox/cdefs.h>
34#include <iprt/types.h>
35
36
37/** @defgroup grp_types Basic VBox Types
38 * @{
39 */
40
41
42/** @defgroup grp_types_both Common Guest and Host Context Basic Types
43 * @ingroup grp_types
44 * @{
45 */
46
47
48/** @defgroup grp_types_hc Host Context Basic Types
49 * @ingroup grp_types_both
50 * @{
51 */
52
53/** @} */
54
55
56/** @defgroup grp_types_gc Guest Context Basic Types
57 * @ingroup grp_types_both
58 * @{
59 */
60
61/** @} */
62
63
64/** Pointer to per support driver session data.
65 * (The data is a R0 entity and private to the the R0 SUP part. All
66 * other should consider this a sort of handle.) */
67typedef R0PTRTYPE(struct SUPDRVSESSION *) PSUPDRVSESSION;
68
69/** Pointer to a VM. */
70typedef struct VM *PVM;
71/** Pointer to a VM - Ring-0 Ptr. */
72typedef R0PTRTYPE(struct VM *) PVMR0;
73/** Pointer to a VM - Ring-3 Ptr. */
74typedef R3PTRTYPE(struct VM *) PVMR3;
75/** Pointer to a VM - RC Ptr. */
76typedef RCPTRTYPE(struct VM *) PVMRC;
77
78/** Pointer to a virtual CPU structure. */
79typedef struct VMCPU * PVMCPU;
80/** Pointer to a virtual CPU structure - Ring-3 Ptr. */
81typedef R3PTRTYPE(struct VMCPU *) PVMCPUR3;
82/** Pointer to a virtual CPU structure - Ring-0 Ptr. */
83typedef R0PTRTYPE(struct VMCPU *) PVMCPUR0;
84/** Pointer to a virtual CPU structure - RC Ptr. */
85typedef RCPTRTYPE(struct VMCPU *) PVMCPURC;
86
87/** Pointer to a ring-0 (global) VM structure. */
88typedef R0PTRTYPE(struct GVM *) PGVM;
89
90/** Pointer to a ring-3 (user mode) VM structure. */
91typedef R3PTRTYPE(struct UVM *) PUVM;
92
93/** Pointer to a ring-3 (user mode) VMCPU structure. */
94typedef R3PTRTYPE(struct UVMCPU *) PUVMCPU;
95
96/** Virtual CPU ID. */
97typedef uint32_t VMCPUID;
98/** Pointer to a virtual CPU ID. */
99typedef VMCPUID *PVMCPUID;
100/** @name Special CPU ID values.
101 * Most of these are for request scheduling.
102 *
103 * @{ */
104/** All virtual CPUs. */
105#define VMCPUID_ALL UINT32_C(0xfffffff2)
106/** All virtual CPUs, descending order. */
107#define VMCPUID_ALL_REVERSE UINT32_C(0xfffffff3)
108/** Any virtual CPU.
109 * Intended for scheduling a VM request or some other task. */
110#define VMCPUID_ANY UINT32_C(0xfffffff4)
111/** Any virtual CPU; always queue for future execution.
112 * Intended for scheduling a VM request or some other task. */
113#define VMCPUID_ANY_QUEUE UINT32_C(0xfffffff5)
114/** The NIL value. */
115#define NIL_VMCPUID UINT32_C(0xfffffffd)
116/** @} */
117
118/**
119 * Virtual CPU set.
120 */
121typedef struct VMCPUSET
122{
123 /** The bitmap data. */
124 uint32_t au32Bitmap[256/32];
125} VMCPUSET;
126/** Pointer to a Virtual CPU set. */
127typedef VMCPUSET *PVMCPUSET;
128/** Pointer to a const Virtual CPU set. */
129typedef VMCPUSET const *PCVMCPUSET;
130
131/** Tests if a valid CPU ID is present in the set.. */
132#define VMCPUSET_IS_PRESENT(pSet, idCpu) ASMBitTest( &(pSet)->au32Bitmap, (idCpu))
133/** Adds a CPU to the set. */
134#define VMCPUSET_ADD(pSet, idCpu) ASMBitSet( &(pSet)->au32Bitmap, (idCpu))
135/** Deletes a CPU from the set. */
136#define VMCPUSET_DEL(pSet, idCpu) ASMBitClear(&(pSet)->au32Bitmap, (idCpu))
137/** Empties the set. */
138#define VMCPUSET_EMPTY(pSet, idCpu) memset(&(pSet)->au32Bitmap, '\0', sizeof((pSet)->au32Bitmap))
139/** Filles the set. */
140#define VMCPUSET_FILL(pSet, idCpu) memset(&(pSet)->au32Bitmap, 0xff, sizeof((pSet)->au32Bitmap))
141/** Filles the set. */
142#define VMCPUSET_IS_EQUAL(pSet1, pSet2) (memcmp(&(pSet1)->au32Bitmap, &(pSet2)->au32Bitmap, sizeof((pSet1)->au32Bitmap)) == 0)
143
144
145/** VM State
146 */
147typedef enum VMSTATE
148{
149 /** The VM is being created. */
150 VMSTATE_CREATING = 0,
151 /** The VM is created. */
152 VMSTATE_CREATED,
153 /** The VM is runnning. */
154 VMSTATE_RUNNING,
155 /** The VM state is being loaded from file. */
156 VMSTATE_LOADING,
157 /** The VM is screwed because of a failed state loading. */
158 VMSTATE_LOAD_FAILURE,
159 /** The VM state is being saved to file. */
160 VMSTATE_SAVING,
161 /** The VM is suspended. */
162 VMSTATE_SUSPENDED,
163 /** The VM is being reset. */
164 VMSTATE_RESETTING,
165 /** The VM is in guru meditation over a fatal failure. */
166 VMSTATE_GURU_MEDITATION,
167 /** The VM is switched off, awaiting destruction. */
168 VMSTATE_OFF,
169 /** The VM is being destroyed. */
170 VMSTATE_DESTROYING,
171 /** Terminated. */
172 VMSTATE_TERMINATED,
173 /** hack forcing the size of the enum to 32-bits. */
174 VMSTATE_MAKE_32BIT_HACK = 0x7fffffff
175} VMSTATE;
176
177
178/** Pointer to a PDM Driver Base Interface. */
179typedef struct PDMIBASE *PPDMIBASE;
180/** Pointer to a pointer to a PDM Driver Base Interface. */
181typedef PPDMIBASE *PPPDMIBASE;
182
183/** Pointer to a PDM Device Instance. */
184typedef struct PDMDEVINS *PPDMDEVINS;
185/** Pointer to a pointer to a PDM Device Instance. */
186typedef PPDMDEVINS *PPPDMDEVINS;
187/** R3 pointer to a PDM Device Instance. */
188typedef R3PTRTYPE(PPDMDEVINS) PPDMDEVINSR3;
189/** R0 pointer to a PDM Device Instance. */
190typedef R0PTRTYPE(PPDMDEVINS) PPDMDEVINSR0;
191/** RC pointer to a PDM Device Instance. */
192typedef RCPTRTYPE(PPDMDEVINS) PPDMDEVINSRC;
193
194/** Pointer to a PDM USB Device Instance. */
195typedef struct PDMUSBINS *PPDMUSBINS;
196/** Pointer to a pointer to a PDM USB Device Instance. */
197typedef PPDMUSBINS *PPPDMUSBINS;
198
199/** Pointer to a PDM Driver Instance. */
200typedef struct PDMDRVINS *PPDMDRVINS;
201/** Pointer to a pointer to a PDM Driver Instance. */
202typedef PPDMDRVINS *PPPDMDRVINS;
203
204/** Pointer to a PDM Service Instance. */
205typedef struct PDMSRVINS *PPDMSRVINS;
206/** Pointer to a pointer to a PDM Service Instance. */
207typedef PPDMSRVINS *PPPDMSRVINS;
208
209/** Pointer to a PDM critical section. */
210typedef union PDMCRITSECT *PPDMCRITSECT;
211/** Pointer to a const PDM critical section. */
212typedef const union PDMCRITSECT *PCPDMCRITSECT;
213
214/** R3 pointer to a timer. */
215typedef R3PTRTYPE(struct TMTIMER *) PTMTIMERR3;
216/** Pointer to a R3 pointer to a timer. */
217typedef PTMTIMERR3 *PPTMTIMERR3;
218
219/** R0 pointer to a timer. */
220typedef R0PTRTYPE(struct TMTIMER *) PTMTIMERR0;
221/** Pointer to a R3 pointer to a timer. */
222typedef PTMTIMERR0 *PPTMTIMERR0;
223
224/** RC pointer to a timer. */
225typedef RCPTRTYPE(struct TMTIMER *) PTMTIMERRC;
226/** Pointer to a RC pointer to a timer. */
227typedef PTMTIMERRC *PPTMTIMERRC;
228
229/** Pointer to a timer. */
230typedef CTX_SUFF(PTMTIMER) PTMTIMER;
231/** Pointer to a pointer to a timer. */
232typedef PTMTIMER *PPTMTIMER;
233
234/** SSM Operation handle. */
235typedef struct SSMHANDLE *PSSMHANDLE;
236
237/** Pointer to a CPUMCTX. */
238typedef struct CPUMCTX *PCPUMCTX;
239/** Pointer to a const CPUMCTX. */
240typedef const struct CPUMCTX *PCCPUMCTX;
241
242/** Pointer to a CPU context core. */
243typedef struct CPUMCTXCORE *PCPUMCTXCORE;
244/** Pointer to a const CPU context core. */
245typedef const struct CPUMCTXCORE *PCCPUMCTXCORE;
246
247/** Pointer to selector hidden registers. */
248typedef struct CPUMSELREGHID *PCPUMSELREGHID;
249/** Pointer to const selector hidden registers. */
250typedef const struct CPUMSELREGHID *PCCPUMSELREGHID;
251
252/** @} */
253
254
255/** @defgroup grp_types_idt Interrupt Descriptor Table Entry.
256 * @ingroup grp_types
257 * @todo This all belongs in x86.h!
258 * @{ */
259
260/** @todo VBOXIDT -> VBOXDESCIDT, skip the complex variations. We'll never use them. */
261
262/** IDT Entry, Task Gate view. */
263#pragma pack(1) /* paranoia */
264typedef struct VBOXIDTE_TASKGATE
265{
266 /** Reserved. */
267 unsigned u16Reserved1 : 16;
268 /** Task Segment Selector. */
269 unsigned u16TSS : 16;
270 /** More reserved. */
271 unsigned u8Reserved2 : 8;
272 /** Fixed value bit 0 - Set to 1. */
273 unsigned u1Fixed0 : 1;
274 /** Busy bit. */
275 unsigned u1Busy : 1;
276 /** Fixed value bit 2 - Set to 1. */
277 unsigned u1Fixed1 : 1;
278 /** Fixed value bit 3 - Set to 0. */
279 unsigned u1Fixed2: 1;
280 /** Fixed value bit 4 - Set to 0. */
281 unsigned u1Fixed3 : 1;
282 /** Descriptor Privilege level. */
283 unsigned u2DPL : 2;
284 /** Present flag. */
285 unsigned u1Present : 1;
286 /** Reserved. */
287 unsigned u16Reserved3 : 16;
288} VBOXIDTE_TASKGATE;
289#pragma pack()
290/** Pointer to IDT Entry, Task gate view. */
291typedef VBOXIDTE_TASKGATE *PVBOXIDTE_TASKGATE;
292
293
294/** IDT Entry, Intertupt gate view. */
295#pragma pack(1) /* paranoia */
296typedef struct VBOXIDTE_INTERRUPTGATE
297{
298 /** Low offset word. */
299 unsigned u16OffsetLow : 16;
300 /** Segment Selector. */
301 unsigned u16SegSel : 16;
302 /** Reserved. */
303 unsigned u5Reserved2 : 5;
304 /** Fixed value bit 0 - Set to 0. */
305 unsigned u1Fixed0 : 1;
306 /** Fixed value bit 1 - Set to 0. */
307 unsigned u1Fixed1 : 1;
308 /** Fixed value bit 2 - Set to 0. */
309 unsigned u1Fixed2 : 1;
310 /** Fixed value bit 3 - Set to 0. */
311 unsigned u1Fixed3: 1;
312 /** Fixed value bit 4 - Set to 1. */
313 unsigned u1Fixed4 : 1;
314 /** Fixed value bit 5 - Set to 1. */
315 unsigned u1Fixed5 : 1;
316 /** Gate size, 1 = 32 bits, 0 = 16 bits. */
317 unsigned u132BitGate : 1;
318 /** Fixed value bit 5 - Set to 0. */
319 unsigned u1Fixed6 : 1;
320 /** Descriptor Privilege level. */
321 unsigned u2DPL : 2;
322 /** Present flag. */
323 unsigned u1Present : 1;
324 /** High offset word. */
325 unsigned u16OffsetHigh : 16;
326} VBOXIDTE_INTERRUPTGATE;
327#pragma pack()
328/** Pointer to IDT Entry, Interrupt gate view. */
329typedef VBOXIDTE_INTERRUPTGATE *PVBOXIDTE_INTERRUPTGATE;
330
331/** IDT Entry, Trap Gate view. */
332#pragma pack(1) /* paranoia */
333typedef struct VBOXIDTE_TRAPGATE
334{
335 /** Low offset word. */
336 unsigned u16OffsetLow : 16;
337 /** Segment Selector. */
338 unsigned u16SegSel : 16;
339 /** Reserved. */
340 unsigned u5Reserved2 : 5;
341 /** Fixed value bit 0 - Set to 0. */
342 unsigned u1Fixed0 : 1;
343 /** Fixed value bit 1 - Set to 0. */
344 unsigned u1Fixed1 : 1;
345 /** Fixed value bit 2 - Set to 0. */
346 unsigned u1Fixed2 : 1;
347 /** Fixed value bit 3 - Set to 1. */
348 unsigned u1Fixed3: 1;
349 /** Fixed value bit 4 - Set to 1. */
350 unsigned u1Fixed4 : 1;
351 /** Fixed value bit 5 - Set to 1. */
352 unsigned u1Fixed5 : 1;
353 /** Gate size, 1 = 32 bits, 0 = 16 bits. */
354 unsigned u132BitGate : 1;
355 /** Fixed value bit 5 - Set to 0. */
356 unsigned u1Fixed6 : 1;
357 /** Descriptor Privilege level. */
358 unsigned u2DPL : 2;
359 /** Present flag. */
360 unsigned u1Present : 1;
361 /** High offset word. */
362 unsigned u16OffsetHigh : 16;
363} VBOXIDTE_TRAPGATE;
364#pragma pack()
365/** Pointer to IDT Entry, Trap Gate view. */
366typedef VBOXIDTE_TRAPGATE *PVBOXIDTE_TRAPGATE;
367
368/** IDT Entry Generic view. */
369#pragma pack(1) /* paranoia */
370typedef struct VBOXIDTE_GENERIC
371{
372 /** Low offset word. */
373 unsigned u16OffsetLow : 16;
374 /** Segment Selector. */
375 unsigned u16SegSel : 16;
376 /** Reserved. */
377 unsigned u5Reserved : 5;
378 /** IDT Type part one (not used for task gate). */
379 unsigned u3Type1 : 3;
380 /** IDT Type part two. */
381 unsigned u5Type2 : 5;
382 /** Descriptor Privilege level. */
383 unsigned u2DPL : 2;
384 /** Present flag. */
385 unsigned u1Present : 1;
386 /** High offset word. */
387 unsigned u16OffsetHigh : 16;
388} VBOXIDTE_GENERIC;
389#pragma pack()
390/** Pointer to IDT Entry Generic view. */
391typedef VBOXIDTE_GENERIC *PVBOXIDTE_GENERIC;
392
393/** IDT Type1 value. (Reserved for task gate!) */
394#define VBOX_IDTE_TYPE1 0
395/** IDT Type2 value - Task gate. */
396#define VBOX_IDTE_TYPE2_TASK 0x5
397/** IDT Type2 value - 16 bit interrupt gate. */
398#define VBOX_IDTE_TYPE2_INT_16 0x6
399/** IDT Type2 value - 32 bit interrupt gate. */
400#define VBOX_IDTE_TYPE2_INT_32 0xe
401/** IDT Type2 value - 16 bit trap gate. */
402#define VBOX_IDTE_TYPE2_TRAP_16 0x7
403/** IDT Type2 value - 32 bit trap gate. */
404#define VBOX_IDTE_TYPE2_TRAP_32 0xf
405
406/** IDT Entry. */
407#pragma pack(1) /* paranoia */
408typedef union VBOXIDTE
409{
410 /** Task gate view. */
411 VBOXIDTE_TASKGATE Task;
412 /** Trap gate view. */
413 VBOXIDTE_TRAPGATE Trap;
414 /** Interrupt gate view. */
415 VBOXIDTE_INTERRUPTGATE Int;
416 /** Generic IDT view. */
417 VBOXIDTE_GENERIC Gen;
418
419 /** 8 bit unsigned integer view. */
420 uint8_t au8[8];
421 /** 16 bit unsigned integer view. */
422 uint16_t au16[4];
423 /** 32 bit unsigned integer view. */
424 uint32_t au32[2];
425 /** 64 bit unsigned integer view. */
426 uint64_t au64;
427} VBOXIDTE;
428#pragma pack()
429/** Pointer to IDT Entry. */
430typedef VBOXIDTE *PVBOXIDTE;
431/** Pointer to IDT Entry. */
432typedef VBOXIDTE const *PCVBOXIDTE;
433
434#pragma pack(1)
435/** IDTR */
436typedef struct VBOXIDTR
437{
438 /** Size of the IDT. */
439 uint16_t cbIdt;
440 /** Address of the IDT. */
441 uint64_t pIdt;
442} VBOXIDTR, *PVBOXIDTR;
443#pragma pack()
444
445#pragma pack(1)
446/** IDTR from version 1.6 */
447typedef struct VBOXIDTR_VER1_6
448{
449 /** Size of the IDT. */
450 uint16_t cbIdt;
451 /** Address of the IDT. */
452 uint32_t pIdt;
453} VBOXIDTR_VER1_6, *PVBOXIDTR_VER1_6;
454#pragma pack()
455
456/** @} */
457
458
459/** @def VBOXIDTE_OFFSET
460 * Return the offset of an IDT entry.
461 */
462#define VBOXIDTE_OFFSET(desc) \
463 ( ((uint32_t)((desc).Gen.u16OffsetHigh) << 16) \
464 | ( (desc).Gen.u16OffsetLow ) )
465
466#pragma pack(1)
467/** GDTR */
468typedef struct VBOXGDTR
469{
470 /** Size of the GDT. */
471 uint16_t cbGdt;
472 /** Address of the GDT. */
473 uint64_t pGdt;
474} VBOXGDTR;
475#pragma pack()
476/** Pointer to GDTR. */
477typedef VBOXGDTR *PVBOXGDTR;
478
479#pragma pack(1)
480/** GDTR from version 1.6 */
481typedef struct VBOXGDTR_VER1_6
482{
483 /** Size of the GDT. */
484 uint16_t cbGdt;
485 /** Address of the GDT. */
486 uint32_t pGdt;
487} VBOXGDTR_VER1_6;
488#pragma pack()
489
490/** @} */
491
492
493/**
494 * 32-bit Task Segment used in raw mode.
495 * @todo Move this to SELM! Use X86TSS32 instead.
496 */
497#pragma pack(1)
498typedef struct VBOXTSS
499{
500 /** 0x00 - Back link to previous task. (static) */
501 RTSEL selPrev;
502 uint16_t padding1;
503 /** 0x04 - Ring-0 stack pointer. (static) */
504 uint32_t esp0;
505 /** 0x08 - Ring-0 stack segment. (static) */
506 RTSEL ss0;
507 uint16_t padding_ss0;
508 /** 0x0c - Ring-1 stack pointer. (static) */
509 uint32_t esp1;
510 /** 0x10 - Ring-1 stack segment. (static) */
511 RTSEL ss1;
512 uint16_t padding_ss1;
513 /** 0x14 - Ring-2 stack pointer. (static) */
514 uint32_t esp2;
515 /** 0x18 - Ring-2 stack segment. (static) */
516 RTSEL ss2;
517 uint16_t padding_ss2;
518 /** 0x1c - Page directory for the task. (static) */
519 uint32_t cr3;
520 /** 0x20 - EIP before task switch. */
521 uint32_t eip;
522 /** 0x24 - EFLAGS before task switch. */
523 uint32_t eflags;
524 /** 0x28 - EAX before task switch. */
525 uint32_t eax;
526 /** 0x2c - ECX before task switch. */
527 uint32_t ecx;
528 /** 0x30 - EDX before task switch. */
529 uint32_t edx;
530 /** 0x34 - EBX before task switch. */
531 uint32_t ebx;
532 /** 0x38 - ESP before task switch. */
533 uint32_t esp;
534 /** 0x3c - EBP before task switch. */
535 uint32_t ebp;
536 /** 0x40 - ESI before task switch. */
537 uint32_t esi;
538 /** 0x44 - EDI before task switch. */
539 uint32_t edi;
540 /** 0x48 - ES before task switch. */
541 RTSEL es;
542 uint16_t padding_es;
543 /** 0x4c - CS before task switch. */
544 RTSEL cs;
545 uint16_t padding_cs;
546 /** 0x50 - SS before task switch. */
547 RTSEL ss;
548 uint16_t padding_ss;
549 /** 0x54 - DS before task switch. */
550 RTSEL ds;
551 uint16_t padding_ds;
552 /** 0x58 - FS before task switch. */
553 RTSEL fs;
554 uint16_t padding_fs;
555 /** 0x5c - GS before task switch. */
556 RTSEL gs;
557 uint16_t padding_gs;
558 /** 0x60 - LDTR before task switch. */
559 RTSEL selLdt;
560 uint16_t padding_ldt;
561 /** 0x64 - Debug trap flag */
562 uint16_t fDebugTrap;
563 /** 0x66 - Offset relative to the TSS of the start of the I/O Bitmap
564 * and the end of the interrupt redirection bitmap. */
565 uint16_t offIoBitmap;
566 /** 0x68 - 32 bytes for the virtual interrupt redirection bitmap. (VME) */
567 uint8_t IntRedirBitmap[32];
568} VBOXTSS;
569#pragma pack()
570/** Pointer to task segment. */
571typedef VBOXTSS *PVBOXTSS;
572/** Pointer to const task segment. */
573typedef const VBOXTSS *PCVBOXTSS;
574
575
576/**
577 * Data transport buffer (scatter/gather)
578 */
579typedef struct PDMDATASEG
580{
581 /** Length of buffer in entry. */
582 size_t cbSeg;
583 /** Pointer to the start of the buffer. */
584 void *pvSeg;
585} PDMDATASEG;
586/** Pointer to a data transport segment. */
587typedef PDMDATASEG *PPDMDATASEG;
588/** Pointer to a const data transport segment. */
589typedef PDMDATASEG const *PCPDMDATASEG;
590
591
592/**
593 * The current ROM page protection.
594 *
595 * @remarks This is part of the saved state.
596 */
597typedef enum PGMROMPROT
598{
599 /** The customary invalid value. */
600 PGMROMPROT_INVALID = 0,
601 /** Read from the virgin ROM page, ignore writes.
602 * Map the virgin page, use write access handler to ignore writes. */
603 PGMROMPROT_READ_ROM_WRITE_IGNORE,
604 /** Read from the virgin ROM page, write to the shadow RAM.
605 * Map the virgin page, use write access handler change the RAM. */
606 PGMROMPROT_READ_ROM_WRITE_RAM,
607 /** Read from the shadow ROM page, ignore writes.
608 * Map the shadow page read-only, use write access handler to ignore writes. */
609 PGMROMPROT_READ_RAM_WRITE_IGNORE,
610 /** Read from the shadow ROM page, ignore writes.
611 * Map the shadow page read-write, disabled write access handler. */
612 PGMROMPROT_READ_RAM_WRITE_RAM,
613 /** The end of valid values. */
614 PGMROMPROT_END,
615 /** The usual 32-bit type size hack. */
616 PGMROMPROT_32BIT_HACK = 0x7fffffff
617} PGMROMPROT;
618
619
620/**
621 * Page mapping lock.
622 *
623 * @remarks This doesn't work in structures shared between
624 * ring-3, ring-0 and/or GC.
625 */
626typedef struct PGMPAGEMAPLOCK
627{
628 /** @todo see PGMPhysIsPageMappingLockValid for possibly incorrect assumptions */
629#if defined(IN_RC) || defined(VBOX_WITH_2X_4GB_ADDR_SPACE_IN_R0)
630 /** Just a dummy for the time being. */
631 uint32_t u32Dummy;
632#else
633 /** Pointer to the PGMPAGE. */
634 void *pvPage;
635 /** Pointer to the PGMCHUNKR3MAP. */
636 void *pvMap;
637#endif
638} PGMPAGEMAPLOCK;
639/** Pointer to a page mapping lock. */
640typedef PGMPAGEMAPLOCK *PPGMPAGEMAPLOCK;
641
642
643/** @} */
644
645#endif
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use