VirtualBox

source: vbox/trunk/src/VBox/VMM/VMMSwitcher/VMMSwitcher.h@ 1

Last change on this file since 1 was 1, checked in by vboxsync, 55 years ago

import

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.1 KB
Line 
1/** @file
2 *
3 * VMM - World Switchers.
4 */
5
6/*
7 * Copyright (C) 2006 InnoTek Systemberatung GmbH
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 as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * If you received this file as part of a commercial VirtualBox
18 * distribution, then only the terms of your commercial VirtualBox
19 * license agreement apply instead of the previous paragraph.
20 */
21
22
23#ifndef __VMMSwitcher_h__
24#define __VMMSwitcher_h__
25
26#include <VBox/vmm.h>
27
28/** @name Fixup Types.
29 * @{
30 */
31/** @todo document what arguments these take and what they do. */
32#define FIX_HC_2_GC_NEAR_REL 1
33#define FIX_HC_2_ID_NEAR_REL 2
34#define FIX_GC_2_HC_NEAR_REL 3
35#define FIX_GC_2_ID_NEAR_REL 4
36#define FIX_ID_2_HC_NEAR_REL 5
37#define FIX_ID_2_GC_NEAR_REL 6
38#define FIX_GC_FAR32 7
39#define FIX_GC_CPUM_OFF 8
40#define FIX_GC_VM_OFF 9
41#define FIX_HC_CPUM_OFF 10
42#define FIX_HC_VM_OFF 11
43#define FIX_INTER_32BIT_CR3 12
44#define FIX_INTER_PAE_CR3 13
45#define FIX_INTER_AMD64_CR3 14
46#define FIX_HYPER_32BIT_CR3 15
47#define FIX_HYPER_PAE_CR3 16
48#define FIX_HYPER_AMD64_CR3 17
49#define FIX_HYPER_CS 18
50#define FIX_HYPER_DS 19
51#define FIX_HYPER_TSS 20
52#define FIX_GC_TSS_GDTE_DW2 21
53#define FIX_CR4_MASK 22
54#define FIX_CR4_OSFSXR 23
55#define FIX_NO_FXSAVE_JMP 24
56#define FIX_NO_SYSENTER_JMP 25
57#define FIX_NO_SYSCALL_JMP 26
58#define FIX_HC_64BIT 27
59#define FIX_HC_64BIT_CPUM 28
60#define FIX_ID_32BIT 29
61#define FIX_ID_64BIT 30
62#define FIX_ID_FAR32_TO_64BIT_MODE 31
63#define FIX_GC_APIC_BASE_32BIT 32
64#define FIX_THE_END 255
65/** @} */
66
67
68/** Pointer to a switcher definition. */
69typedef struct VMMSWITCHERDEF *PVMMSWITCHERDEF;
70
71/**
72 * Callback function for relocating the core code belonging to a switcher.
73 *
74 * @param pVM VM handle.
75 * @param pSwitcher Pointer to the switcher structure.
76 * @param pu8CodeR0 Pointer to the first code byte in the ring-0 mapping.
77 * @param pu8CodeR3 Pointer to the first code byte in the ring-3 mapping.
78 * @param GCPtrCode The GC address of the first code byte.
79 * @param u32IDCode The address of the identity mapped code (first byte).
80 */
81typedef DECLCALLBACK(void) FNVMMSWITCHERRELOCATE(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3,
82 RTGCPTR GCPtrCode, uint32_t u32IDCode);
83/** Pointer to a FNVMMSWITCHERRELOCATE(). */
84typedef FNVMMSWITCHERRELOCATE *PFNVMMSWITCHERRELOCATE;
85
86/**
87 * VMM Switcher structure.
88 */
89#pragma pack(1)
90typedef struct VMMSWITCHERDEF
91{
92 /** Pointer to the code. */
93 void *pvCode;
94 /** Pointer to the fixup records. */
95 void *pvFixups;
96 /** Pointer to the description. */
97 const char *pszDesc;
98 /** Function which performs the necessary relocations. */
99 PFNVMMSWITCHERRELOCATE pfnRelocate;
100 /** The switcher type. */
101 VMMSWITCHER enmType;
102 /** Size of the entire code chunk. */
103 uint32_t cbCode;
104 /** vmmR0HostToGuest C entrypoint. */
105 uint32_t offR0HostToGuest;
106 /** vmmGCGuestToHost C entrypoint. */
107 uint32_t offGCGuestToHost;
108 /** vmmGCCallTrampoline address. */
109 uint32_t offGCCallTrampoline;
110 /** vmmGCGuestToHostAsm assembly entrypoint. */
111 uint32_t offGCGuestToHostAsm;
112 /** vmmGCGuestToHostAsmHyperCtx assembly entrypoint taking HyperCtx. */
113 uint32_t offGCGuestToHostAsmHyperCtx;
114 /** vmmGCGuestToHostAsmGuestCtx assembly entrypoint taking GuestCtx. */
115 uint32_t offGCGuestToHostAsmGuestCtx;
116 /** @name Disassembly Regions.
117 * @{ */
118 uint32_t offHCCode0;
119 uint32_t cbHCCode0;
120 uint32_t offHCCode1;
121 uint32_t cbHCCode1;
122 uint32_t offIDCode0;
123 uint32_t cbIDCode0;
124 uint32_t offIDCode1;
125 uint32_t cbIDCode1;
126 uint32_t offGCCode;
127 uint32_t cbGCCode;
128 /** @} */
129} VMMSWITCHERDEF;
130#pragma pack()
131
132__BEGIN_DECLS
133extern VMMSWITCHERDEF vmmR3Switcher32BitTo32Bit_Def;
134extern VMMSWITCHERDEF vmmR3Switcher32BitToPAE_Def;
135extern VMMSWITCHERDEF vmmR3Switcher32BitToAMD64_Def;
136extern VMMSWITCHERDEF vmmR3SwitcherPAETo32Bit_Def;
137extern VMMSWITCHERDEF vmmR3SwitcherPAEToPAE_Def;
138extern VMMSWITCHERDEF vmmR3SwitcherPAEToAMD64_Def;
139extern VMMSWITCHERDEF vmmR3SwitcherAMD64ToPAE_Def;
140extern VMMSWITCHERDEF vmmR3SwitcherAMD64ToAMD64_Def;
141
142extern DECLCALLBACK(void) vmmR3Switcher32BitTo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
143extern DECLCALLBACK(void) vmmR3Switcher32BitToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
144extern DECLCALLBACK(void) vmmR3Switcher32BitToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
145extern DECLCALLBACK(void) vmmR3SwitcherPAETo32Bit_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
146extern DECLCALLBACK(void) vmmR3SwitcherPAEToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
147extern DECLCALLBACK(void) vmmR3SwitcherPAEToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
148extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToPAE_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
149extern DECLCALLBACK(void) vmmR3SwitcherAMD64ToAMD64_Relocate(PVM pVM, PVMMSWITCHERDEF pSwitcher, uint8_t *pu8CodeR0, uint8_t *pu8CodeR3, RTGCPTR GCPtrCode, uint32_t u32IdCode);
150__END_DECLS
151
152#endif
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