Changeset 44723 in vbox for trunk/src/VBox/Devices/VMMDev
- Timestamp:
- Feb 15, 2013 6:22:23 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83824
- Location:
- trunk/src/VBox/Devices/VMMDev
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r44722 r44723 129 129 */ 130 130 131 static void vmmdevSetIRQ_Legacy_EMT(VMMDevState *p VMMDevState)132 { 133 if (!p VMMDevState->fu32AdditionsOk)131 static void vmmdevSetIRQ_Legacy_EMT(VMMDevState *pThis) 132 { 133 if (!pThis->fu32AdditionsOk) 134 134 { 135 135 Log(("vmmdevSetIRQ: IRQ is not generated, guest has not yet reported to us.\n")); … … 141 141 /* Filter unsupported events */ 142 142 uint32_t u32EventFlags = 143 p VMMDevState->u32HostEventFlags144 & p VMMDevState->pVMMDevRAMR3->V.V1_03.u32GuestEventMask;143 pThis->u32HostEventFlags 144 & pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask; 145 145 146 146 Log(("vmmdevSetIRQ: u32EventFlags = 0x%08X, " 147 "p VMMDevState->u32HostEventFlags = 0x%08X, "148 "p VMMDevState->pVMMDevRAMR3->u32GuestEventMask = 0x%08X\n",147 "pThis->u32HostEventFlags = 0x%08X, " 148 "pThis->pVMMDevRAMR3->u32GuestEventMask = 0x%08X\n", 149 149 u32EventFlags, 150 p VMMDevState->u32HostEventFlags,151 p VMMDevState->pVMMDevRAMR3->V.V1_03.u32GuestEventMask));150 pThis->u32HostEventFlags, 151 pThis->pVMMDevRAMR3->V.V1_03.u32GuestEventMask)); 152 152 153 153 /* Move event flags to VMMDev RAM */ 154 p VMMDevState->pVMMDevRAMR3->V.V1_03.u32HostEvents = u32EventFlags;154 pThis->pVMMDevRAMR3->V.V1_03.u32HostEvents = u32EventFlags; 155 155 156 156 if (u32EventFlags) 157 157 { 158 158 /* Clear host flags which will be delivered to guest. */ 159 p VMMDevState->u32HostEventFlags &= ~u32EventFlags;160 Log(("vmmdevSetIRQ: p VMMDevState->u32HostEventFlags = 0x%08X\n",161 p VMMDevState->u32HostEventFlags));159 pThis->u32HostEventFlags &= ~u32EventFlags; 160 Log(("vmmdevSetIRQ: pThis->u32HostEventFlags = 0x%08X\n", 161 pThis->u32HostEventFlags)); 162 162 u32IRQLevel = 1; 163 163 } … … 165 165 /* Set IRQ level for pin 0 */ 166 166 /** @todo make IRQ pin configurable, at least a symbolic constant */ 167 PPDMDEVINS pDevIns = p VMMDevState->pDevIns;167 PPDMDEVINS pDevIns = pThis->pDevIns; 168 168 PDMDevHlpPCISetIrqNoWait(pDevIns, 0, u32IRQLevel); 169 169 Log(("vmmdevSetIRQ: IRQ set %d\n", u32IRQLevel)); 170 170 } 171 171 172 static void vmmdevMaybeSetIRQ_EMT(VMMDevState *p VMMDevState)172 static void vmmdevMaybeSetIRQ_EMT(VMMDevState *pThis) 173 173 { 174 174 Log3(("vmmdevMaybeSetIRQ_EMT: u32HostEventFlags = 0x%08X, u32GuestFilterMask = 0x%08X.\n", 175 p VMMDevState->u32HostEventFlags, pVMMDevState->u32GuestFilterMask));176 177 if (p VMMDevState->u32HostEventFlags & pVMMDevState->u32GuestFilterMask)178 { 179 p VMMDevState->pVMMDevRAMR3->V.V1_04.fHaveEvents = true;180 PDMDevHlpPCISetIrqNoWait(p VMMDevState->pDevIns, 0, 1);175 pThis->u32HostEventFlags, pThis->u32GuestFilterMask)); 176 177 if (pThis->u32HostEventFlags & pThis->u32GuestFilterMask) 178 { 179 pThis->pVMMDevRAMR3->V.V1_04.fHaveEvents = true; 180 PDMDevHlpPCISetIrqNoWait(pThis->pDevIns, 0, 1); 181 181 Log3(("vmmdevMaybeSetIRQ_EMT: IRQ set.\n")); 182 182 } 183 183 } 184 184 185 static void vmmdevNotifyGuest_EMT(VMMDevState *p VMMDevState, uint32_t u32EventMask)185 static void vmmdevNotifyGuest_EMT(VMMDevState *pThis, uint32_t u32EventMask) 186 186 { 187 187 Log3(("VMMDevNotifyGuest_EMT: u32EventMask = 0x%08X.\n", u32EventMask)); 188 188 189 if (VBOX_GUEST_INTERFACE_VERSION_1_03(p VMMDevState))189 if (VBOX_GUEST_INTERFACE_VERSION_1_03(pThis)) 190 190 { 191 191 Log3(("VMMDevNotifyGuest_EMT: Old additions detected.\n")); 192 192 193 p VMMDevState->u32HostEventFlags |= u32EventMask;194 vmmdevSetIRQ_Legacy_EMT(p VMMDevState);193 pThis->u32HostEventFlags |= u32EventMask; 194 vmmdevSetIRQ_Legacy_EMT(pThis); 195 195 } 196 196 else … … 198 198 Log3(("VMMDevNotifyGuest_EMT: New additions detected.\n")); 199 199 200 if (!p VMMDevState->fu32AdditionsOk)201 { 202 p VMMDevState->u32HostEventFlags |= u32EventMask;200 if (!pThis->fu32AdditionsOk) 201 { 202 pThis->u32HostEventFlags |= u32EventMask; 203 203 Log(("vmmdevNotifyGuest_EMT: IRQ is not generated, guest has not yet reported to us.\n")); 204 204 return; … … 206 206 207 207 const bool fHadEvents = 208 (p VMMDevState->u32HostEventFlags & pVMMDevState->u32GuestFilterMask) != 0;208 (pThis->u32HostEventFlags & pThis->u32GuestFilterMask) != 0; 209 209 210 210 Log3(("VMMDevNotifyGuest_EMT: fHadEvents = %d, u32HostEventFlags = 0x%08X, u32GuestFilterMask = 0x%08X.\n", 211 fHadEvents, p VMMDevState->u32HostEventFlags, pVMMDevState->u32GuestFilterMask));212 213 p VMMDevState->u32HostEventFlags |= u32EventMask;211 fHadEvents, pThis->u32HostEventFlags, pThis->u32GuestFilterMask)); 212 213 pThis->u32HostEventFlags |= u32EventMask; 214 214 215 215 if (!fHadEvents) 216 vmmdevMaybeSetIRQ_EMT (p VMMDevState);217 } 218 } 219 220 void VMMDevCtlSetGuestFilterMask (VMMDevState *p VMMDevState,216 vmmdevMaybeSetIRQ_EMT (pThis); 217 } 218 } 219 220 void VMMDevCtlSetGuestFilterMask (VMMDevState *pThis, 221 221 uint32_t u32OrMask, 222 222 uint32_t u32NotMask) 223 223 { 224 PDMCritSectEnter(&p VMMDevState->CritSect, VERR_SEM_BUSY);224 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 225 225 226 226 const bool fHadEvents = 227 (p VMMDevState->u32HostEventFlags & pVMMDevState->u32GuestFilterMask) != 0;227 (pThis->u32HostEventFlags & pThis->u32GuestFilterMask) != 0; 228 228 229 229 Log(("VMMDevCtlSetGuestFilterMask: u32OrMask = 0x%08X, u32NotMask = 0x%08X, fHadEvents = %d.\n", u32OrMask, u32NotMask, fHadEvents)); 230 230 if (fHadEvents) 231 231 { 232 if (!p VMMDevState->fNewGuestFilterMask)233 p VMMDevState->u32NewGuestFilterMask = pVMMDevState->u32GuestFilterMask;234 235 p VMMDevState->u32NewGuestFilterMask |= u32OrMask;236 p VMMDevState->u32NewGuestFilterMask &= ~u32NotMask;237 p VMMDevState->fNewGuestFilterMask = true;232 if (!pThis->fNewGuestFilterMask) 233 pThis->u32NewGuestFilterMask = pThis->u32GuestFilterMask; 234 235 pThis->u32NewGuestFilterMask |= u32OrMask; 236 pThis->u32NewGuestFilterMask &= ~u32NotMask; 237 pThis->fNewGuestFilterMask = true; 238 238 } 239 239 else 240 240 { 241 p VMMDevState->u32GuestFilterMask |= u32OrMask;242 p VMMDevState->u32GuestFilterMask &= ~u32NotMask;243 vmmdevMaybeSetIRQ_EMT (p VMMDevState);244 } 245 PDMCritSectLeave(&p VMMDevState->CritSect);246 } 247 248 void VMMDevNotifyGuest (VMMDevState *p VMMDevState, uint32_t u32EventMask)249 { 250 PPDMDEVINS pDevIns = p VMMDevState->pDevIns;241 pThis->u32GuestFilterMask |= u32OrMask; 242 pThis->u32GuestFilterMask &= ~u32NotMask; 243 vmmdevMaybeSetIRQ_EMT (pThis); 244 } 245 PDMCritSectLeave(&pThis->CritSect); 246 } 247 248 void VMMDevNotifyGuest (VMMDevState *pThis, uint32_t u32EventMask) 249 { 250 PPDMDEVINS pDevIns = pThis->pDevIns; 251 251 252 252 Log3(("VMMDevNotifyGuest: u32EventMask = 0x%08X.\n", u32EventMask)); … … 260 260 return; 261 261 262 PDMCritSectEnter(&p VMMDevState->CritSect, VERR_SEM_BUSY);262 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 263 263 /* No need to wait for the completion of this request. It is a notification 264 264 * about something, which has already happened. 265 265 */ 266 vmmdevNotifyGuest_EMT(p VMMDevState, u32EventMask);267 PDMCritSectLeave(&p VMMDevState->CritSect);266 vmmdevNotifyGuest_EMT(pThis, u32EventMask); 267 PDMCritSectLeave(&pThis->CritSect); 268 268 } 269 269 -
trunk/src/VBox/Devices/VMMDev/VMMDevHGCM.cpp
r44528 r44723 5 5 6 6 /* 7 * Copyright (C) 2006-201 2Oracle Corporation7 * Copyright (C) 2006-2013 Oracle Corporation 8 8 * 9 9 * This file is part of VirtualBox Open Source Edition (OSE), as … … 17 17 18 18 19 /******************************************************************************* 20 * Header Files * 21 *******************************************************************************/ 19 22 #define LOG_GROUP LOG_GROUP_DEV_VMM 20 23 #include <iprt/alloc.h> … … 40 43 #endif 41 44 45 46 /******************************************************************************* 47 * Structures and Typedefs * 48 *******************************************************************************/ 42 49 typedef enum _VBOXHGCMCMDTYPE 43 50 { … … 49 56 } VBOXHGCMCMDTYPE; 50 57 51 /* Information about a linear ptr parameter. */ 58 /** 59 * Information about a linear ptr parameter. 60 */ 52 61 typedef struct _VBOXHGCMLINPTR 53 62 { 54 /* Index of the parameter. */63 /** Index of the parameter. */ 55 64 uint32_t iParm; 56 65 57 /* Offset in the first physical page of the region. */66 /** Offset in the first physical page of the region. */ 58 67 uint32_t offFirstPage; 59 68 60 /* How many pages. */69 /** How many pages. */ 61 70 uint32_t cPages; 62 71 63 /* Pointer to array of the GC physical addresses for these pages.64 * It is assumed that the physical address of the locked resident 65 * guest pagedoes not change.72 /** Pointer to array of the GC physical addresses for these pages. 73 * It is assumed that the physical address of the locked resident guest page 74 * does not change. 66 75 */ 67 76 RTGCPHYS *paPages; … … 71 80 struct VBOXHGCMCMD 72 81 { 73 /* Active commands, list is protected by critsectHGCMCmdList. */82 /** Active commands, list is protected by critsectHGCMCmdList. */ 74 83 struct VBOXHGCMCMD *pNext; 75 84 struct VBOXHGCMCMD *pPrev; 76 85 77 /* The type of the command. */86 /** The type of the command. */ 78 87 VBOXHGCMCMDTYPE enmCmdType; 79 88 80 /* Whether the command was cancelled by the guest. */89 /** Whether the command was cancelled by the guest. */ 81 90 bool fCancelled; 82 91 83 /* Whether the command is in the active commands list. */92 /** Whether the command is in the active commands list. */ 84 93 bool fInList; 85 94 86 /* Whether the command was saved. */95 /** Whether the command was saved. */ 87 96 bool fSaved; 88 97 89 /* GC physical address of the guest request. */98 /** GC physical address of the guest request. */ 90 99 RTGCPHYS GCPhys; 91 100 92 /* Request packet size */101 /** Request packet size */ 93 102 uint32_t cbSize; 94 103 95 /* Pointer to converted host parameters in case of a Call request.104 /** Pointer to converted host parameters in case of a Call request. 96 105 * Parameters follow this structure in the same memory block. 97 106 */ 98 107 VBOXHGCMSVCPARM *paHostParms; 99 108 100 /* Linear pointer parameters information. */109 /** Linear pointer parameters information. */ 101 110 int cLinPtrs; 102 111 103 /* How many pages for all linptrs of this command.112 /** How many pages for all linptrs of this command. 104 113 * Only valid if cLinPtrs > 0. This field simplifies loading of saved state. 105 114 */ 106 115 int cLinPtrPages; 107 116 108 /* Pointer to descriptions of linear pointers. */117 /** Pointer to descriptions of linear pointers. */ 109 118 VBOXHGCMLINPTR *paLinPtrs; 110 119 }; 111 120 112 static int vmmdevHGCMCmdListLock (VMMDevState *p VMMDevState)113 { 114 int rc = RTCritSectEnter (&p VMMDevState->critsectHGCMCmdList);121 static int vmmdevHGCMCmdListLock (VMMDevState *pThis) 122 { 123 int rc = RTCritSectEnter (&pThis->critsectHGCMCmdList); 115 124 AssertRC (rc); 116 125 return rc; 117 126 } 118 127 119 static void vmmdevHGCMCmdListUnlock (VMMDevState *p VMMDevState)120 { 121 int rc = RTCritSectLeave (&p VMMDevState->critsectHGCMCmdList);128 static void vmmdevHGCMCmdListUnlock (VMMDevState *pThis) 129 { 130 int rc = RTCritSectLeave (&pThis->critsectHGCMCmdList); 122 131 AssertRC (rc); 123 132 } 124 133 125 static int vmmdevHGCMAddCommand (VMMDevState *p VMMDevState, PVBOXHGCMCMD pCmd, RTGCPHYS GCPhys, uint32_t cbSize, VBOXHGCMCMDTYPE enmCmdType)126 { 127 /* PPDMDEVINS pDevIns = p VMMDevState->pDevIns; */128 129 int rc = vmmdevHGCMCmdListLock (p VMMDevState);134 static int vmmdevHGCMAddCommand (VMMDevState *pThis, PVBOXHGCMCMD pCmd, RTGCPHYS GCPhys, uint32_t cbSize, VBOXHGCMCMDTYPE enmCmdType) 135 { 136 /* PPDMDEVINS pDevIns = pThis->pDevIns; */ 137 138 int rc = vmmdevHGCMCmdListLock (pThis); 130 139 131 140 if (RT_SUCCESS (rc)) … … 134 143 135 144 /* Insert at the head of the list. The vmmdevHGCMLoadStateDone depends on this. */ 136 pCmd->pNext = p VMMDevState->pHGCMCmdList;145 pCmd->pNext = pThis->pHGCMCmdList; 137 146 pCmd->pPrev = NULL; 138 147 139 if (p VMMDevState->pHGCMCmdList)140 { 141 p VMMDevState->pHGCMCmdList->pPrev = pCmd;142 } 143 144 p VMMDevState->pHGCMCmdList = pCmd;148 if (pThis->pHGCMCmdList) 149 { 150 pThis->pHGCMCmdList->pPrev = pCmd; 151 } 152 153 pThis->pHGCMCmdList = pCmd; 145 154 146 155 pCmd->fInList = true; … … 159 168 || enmCmdType == VBOXHGCMCMDTYPE_CALL) 160 169 { 161 Log(("vmmdevHGCMAddCommand: u32HGCMEnabled = %d\n", p VMMDevState->u32HGCMEnabled));162 if (ASMAtomicCmpXchgU32(&p VMMDevState->u32HGCMEnabled, 1, 0))170 Log(("vmmdevHGCMAddCommand: u32HGCMEnabled = %d\n", pThis->u32HGCMEnabled)); 171 if (ASMAtomicCmpXchgU32(&pThis->u32HGCMEnabled, 1, 0)) 163 172 { 164 VMMDevCtlSetGuestFilterMask (p VMMDevState, VMMDEV_EVENT_HGCM, 0);173 VMMDevCtlSetGuestFilterMask (pThis, VMMDEV_EVENT_HGCM, 0); 165 174 } 166 175 } 167 176 168 vmmdevHGCMCmdListUnlock (p VMMDevState);177 vmmdevHGCMCmdListUnlock (pThis); 169 178 } 170 179 … … 172 181 } 173 182 174 static int vmmdevHGCMRemoveCommand (VMMDevState *p VMMDevState, PVBOXHGCMCMD pCmd)175 { 176 /* PPDMDEVINS pDevIns = p VMMDevState->pDevIns; */177 178 int rc = vmmdevHGCMCmdListLock (p VMMDevState);183 static int vmmdevHGCMRemoveCommand (VMMDevState *pThis, PVBOXHGCMCMD pCmd) 184 { 185 /* PPDMDEVINS pDevIns = pThis->pDevIns; */ 186 187 int rc = vmmdevHGCMCmdListLock (pThis); 179 188 180 189 if (RT_SUCCESS (rc)) … … 185 194 { 186 195 LogFlowFunc(("%p not in the list\n", pCmd)); 187 vmmdevHGCMCmdListUnlock (p VMMDevState);196 vmmdevHGCMCmdListUnlock (pThis); 188 197 return VINF_SUCCESS; 189 198 } … … 204 213 else 205 214 { 206 p VMMDevState->pHGCMCmdList = pCmd->pNext;215 pThis->pHGCMCmdList = pCmd->pNext; 207 216 } 208 217 … … 211 220 pCmd->fInList = false; 212 221 213 vmmdevHGCMCmdListUnlock (p VMMDevState);222 vmmdevHGCMCmdListUnlock (pThis); 214 223 } 215 224 … … 474 483 } 475 484 476 int vmmdevHGCMConnect (VMMDevState *p VMMDevState, VMMDevHGCMConnect *pHGCMConnect, RTGCPHYS GCPhys)485 int vmmdevHGCMConnect (VMMDevState *pThis, VMMDevHGCMConnect *pHGCMConnect, RTGCPHYS GCPhys) 477 486 { 478 487 int rc = VINF_SUCCESS; … … 486 495 VMMDevHGCMConnect *pHGCMConnectCopy = (VMMDevHGCMConnect *)(pCmd+1); 487 496 488 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT);497 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT); 489 498 490 499 memcpy(pHGCMConnectCopy, pHGCMConnect, pHGCMConnect->header.header.size); … … 498 507 pHGCMConnectCopy->loc.type = VMMDevHGCMLoc_LocalHost_Existing; 499 508 500 rc = p VMMDevState->pHGCMDrv->pfnConnect (pVMMDevState->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID);509 rc = pThis->pHGCMDrv->pfnConnect (pThis->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID); 501 510 } 502 511 else … … 508 517 } 509 518 510 static int vmmdevHGCMConnectSaved (VMMDevState *p VMMDevState, VMMDevHGCMConnect *pHGCMConnect, RTGCPHYS GCPhys, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd)519 static int vmmdevHGCMConnectSaved (VMMDevState *pThis, VMMDevHGCMConnect *pHGCMConnect, RTGCPHYS GCPhys, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd) 511 520 { 512 521 int rc = VINF_SUCCESS; … … 524 533 VMMDevHGCMConnect *pHGCMConnectCopy = (VMMDevHGCMConnect *)(pCmd+1); 525 534 526 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT);535 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMConnect->header.header.size, VBOXHGCMCMDTYPE_CONNECT); 527 536 528 537 memcpy(pHGCMConnectCopy, pHGCMConnect, pHGCMConnect->header.header.size); … … 532 541 pHGCMConnectCopy->loc.type = VMMDevHGCMLoc_LocalHost_Existing; 533 542 534 rc = p VMMDevState->pHGCMDrv->pfnConnect (pVMMDevState->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID);543 rc = pThis->pHGCMDrv->pfnConnect (pThis->pHGCMDrv, pCmd, &pHGCMConnectCopy->loc, &pHGCMConnectCopy->u32ClientID); 535 544 536 545 if (RT_SUCCESS (rc)) … … 547 556 } 548 557 549 int vmmdevHGCMDisconnect (VMMDevState *p VMMDevState, VMMDevHGCMDisconnect *pHGCMDisconnect, RTGCPHYS GCPhys)558 int vmmdevHGCMDisconnect (VMMDevState *pThis, VMMDevHGCMDisconnect *pHGCMDisconnect, RTGCPHYS GCPhys) 550 559 { 551 560 int rc = VINF_SUCCESS; … … 557 566 if (pCmd) 558 567 { 559 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT);568 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT); 560 569 561 570 pCmd->paHostParms = NULL; … … 563 572 pCmd->paLinPtrs = NULL; 564 573 565 rc = p VMMDevState->pHGCMDrv->pfnDisconnect (pVMMDevState->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID);574 rc = pThis->pHGCMDrv->pfnDisconnect (pThis->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID); 566 575 } 567 576 else … … 573 582 } 574 583 575 static int vmmdevHGCMDisconnectSaved (VMMDevState *p VMMDevState, VMMDevHGCMDisconnect *pHGCMDisconnect, RTGCPHYS GCPhys, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd)584 static int vmmdevHGCMDisconnectSaved (VMMDevState *pThis, VMMDevHGCMDisconnect *pHGCMDisconnect, RTGCPHYS GCPhys, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd) 576 585 { 577 586 int rc = VINF_SUCCESS; … … 586 595 *ppCmd = pCmd; 587 596 588 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT);597 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMDisconnect->header.header.size, VBOXHGCMCMDTYPE_DISCONNECT); 589 598 590 599 pCmd->paHostParms = NULL; … … 592 601 pCmd->paLinPtrs = NULL; 593 602 594 rc = p VMMDevState->pHGCMDrv->pfnDisconnect (pVMMDevState->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID);603 rc = pThis->pHGCMDrv->pfnDisconnect (pThis->pHGCMDrv, pCmd, pHGCMDisconnect->u32ClientID); 595 604 596 605 if (RT_SUCCESS (rc)) … … 607 616 } 608 617 609 int vmmdevHGCMCall (VMMDevState *p VMMDevState, VMMDevHGCMCall *pHGCMCall, uint32_t cbHGCMCall, RTGCPHYS GCPhys, bool f64Bits)618 int vmmdevHGCMCall (VMMDevState *pThis, VMMDevHGCMCall *pHGCMCall, uint32_t cbHGCMCall, RTGCPHYS GCPhys, bool f64Bits) 610 619 { 611 620 int rc = VINF_SUCCESS; … … 850 859 /* Don't overdo it */ 851 860 if (pGuestParm->type != VMMDevHGCMParmType_LinAddr_Out) 852 rc = PDMDevHlpPhysReadGCVirt(p VMMDevState->pDevIns, pcBuf, linearAddr, size);861 rc = PDMDevHlpPhysReadGCVirt(pThis->pDevIns, pcBuf, linearAddr, size); 853 862 else 854 863 rc = VINF_SUCCESS; … … 862 871 * Do it for all linear pointers because load state will require In pointer info too. 863 872 */ 864 rc = vmmdevHGCMSaveLinPtr (p VMMDevState->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages);873 rc = vmmdevHGCMSaveLinPtr (pThis->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages); 865 874 866 875 iLinPtr++; … … 912 921 { 913 922 /* Copy pages to the pcBuf[size]. */ 914 rc = vmmdevHGCMPageListRead(p VMMDevState->pDevIns, pcBuf, size, pPageListInfo);923 rc = vmmdevHGCMPageListRead(pThis->pDevIns, pcBuf, size, pPageListInfo); 915 924 } 916 925 else … … 991 1000 /* Don't overdo it */ 992 1001 if (pGuestParm->type != VMMDevHGCMParmType_LinAddr_Out) 993 rc = PDMDevHlpPhysReadGCVirt(p VMMDevState->pDevIns, pcBuf, linearAddr, size);1002 rc = PDMDevHlpPhysReadGCVirt(pThis->pDevIns, pcBuf, linearAddr, size); 994 1003 else 995 1004 rc = VINF_SUCCESS; … … 1003 1012 * Do it for all linear pointers because load state will require In pointer info too. 1004 1013 */ 1005 rc = vmmdevHGCMSaveLinPtr (p VMMDevState->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages);1014 rc = vmmdevHGCMSaveLinPtr (pThis->pDevIns, i, linearAddr, size, iLinPtr, pCmd->paLinPtrs, &pPages); 1006 1015 1007 1016 iLinPtr++; … … 1053 1062 { 1054 1063 /* Copy pages to the pcBuf[size]. */ 1055 rc = vmmdevHGCMPageListRead(p VMMDevState->pDevIns, pcBuf, size, pPageListInfo);1064 rc = vmmdevHGCMPageListRead(pThis->pDevIns, pcBuf, size, pPageListInfo); 1056 1065 } 1057 1066 else … … 1080 1089 if (RT_SUCCESS (rc)) 1081 1090 { 1082 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL);1091 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL); 1083 1092 1084 1093 /* Pass the function call to HGCM connector for actual processing */ 1085 rc = p VMMDevState->pHGCMDrv->pfnCall (pVMMDevState->pHGCMDrv, pCmd, pHGCMCall->u32ClientID,1094 rc = pThis->pHGCMDrv->pfnCall (pThis->pHGCMDrv, pCmd, pHGCMCall->u32ClientID, 1086 1095 pHGCMCall->u32Function, cParms, pCmd->paHostParms); 1087 1096 … … 1089 1098 { 1090 1099 Log(("vmmdevHGCMCall: pfnCall failed rc = %Rrc\n", rc)); 1091 vmmdevHGCMRemoveCommand (p VMMDevState, pCmd);1100 vmmdevHGCMRemoveCommand (pThis, pCmd); 1092 1101 } 1093 1102 } … … 1119 1128 1120 1129 1121 static int vmmdevHGCMCallSaved (VMMDevState *p VMMDevState, VMMDevHGCMCall *pHGCMCall, RTGCPHYS GCPhys, uint32_t cbHGCMCall, bool f64Bits, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd)1130 static int vmmdevHGCMCallSaved (VMMDevState *pThis, VMMDevHGCMCall *pHGCMCall, RTGCPHYS GCPhys, uint32_t cbHGCMCall, bool f64Bits, bool *pfHGCMCalled, VBOXHGCMCMD *pSavedCmd, VBOXHGCMCMD **ppCmd) 1122 1131 { 1123 1132 int rc = VINF_SUCCESS; … … 1275 1284 *ppCmd = pCmd; 1276 1285 1277 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL);1286 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, pHGCMCall->header.header.size, VBOXHGCMCMDTYPE_CALL); 1278 1287 1279 1288 /* Process parameters, changing them to host context pointers for easy … … 1383 1392 } 1384 1393 1385 rc = PDMDevHlpPhysRead(p VMMDevState->pDevIns,1394 rc = PDMDevHlpPhysRead(pThis->pDevIns, 1386 1395 pLinPtr->paPages[iPage] + offPage, 1387 1396 pu8Dst, cbChunk); … … 1452 1461 { 1453 1462 /* Copy pages to the pcBuf[size]. */ 1454 rc = vmmdevHGCMPageListRead(p VMMDevState->pDevIns, pu8Buf, size, pPageListInfo);1463 rc = vmmdevHGCMPageListRead(pThis->pDevIns, pu8Buf, size, pPageListInfo); 1455 1464 } 1456 1465 else … … 1563 1572 } 1564 1573 1565 rc = PDMDevHlpPhysRead(p VMMDevState->pDevIns,1574 rc = PDMDevHlpPhysRead(pThis->pDevIns, 1566 1575 pLinPtr->paPages[iPage] + offPage, 1567 1576 pu8Dst, cbChunk); … … 1632 1641 { 1633 1642 /* Copy pages to the pcBuf[size]. */ 1634 rc = vmmdevHGCMPageListRead(p VMMDevState->pDevIns, pu8Buf, size, pPageListInfo);1643 rc = vmmdevHGCMPageListRead(pThis->pDevIns, pu8Buf, size, pPageListInfo); 1635 1644 } 1636 1645 else … … 1660 1669 { 1661 1670 /* Pass the function call to HGCM connector for actual processing */ 1662 rc = p VMMDevState->pHGCMDrv->pfnCall (pVMMDevState->pHGCMDrv, pCmd, pHGCMCall->u32ClientID, pHGCMCall->u32Function, cParms, pCmd->paHostParms);1671 rc = pThis->pHGCMDrv->pfnCall (pThis->pHGCMDrv, pCmd, pHGCMCall->u32ClientID, pHGCMCall->u32Function, cParms, pCmd->paHostParms); 1663 1672 if (RT_SUCCESS (rc)) 1664 1673 { … … 1675 1684 * @thread EMT 1676 1685 */ 1677 int vmmdevHGCMCancel (VMMDevState *p VMMDevState, VMMDevHGCMCancel *pHGCMCancel, RTGCPHYS GCPhys)1686 int vmmdevHGCMCancel (VMMDevState *pThis, VMMDevHGCMCancel *pHGCMCancel, RTGCPHYS GCPhys) 1678 1687 { 1679 1688 NOREF(pHGCMCancel); 1680 int rc = vmmdevHGCMCancel2(p VMMDevState, GCPhys);1689 int rc = vmmdevHGCMCancel2(pThis, GCPhys); 1681 1690 return rc == VERR_NOT_FOUND ? VERR_INVALID_PARAMETER : rc; 1682 1691 } … … 1763 1772 DECLCALLBACK(void) hgcmCompletedWorker (PPDMIHGCMPORT pInterface, int32_t result, PVBOXHGCMCMD pCmd) 1764 1773 { 1765 VMMDevState *p VMMDevState= PDMIHGCMPORT_2_VMMDEVSTATE(pInterface);1774 VMMDevState *pThis = PDMIHGCMPORT_2_VMMDEVSTATE(pInterface); 1766 1775 #ifdef VBOX_WITH_DTRACE 1767 1776 uint32_t idFunction = 0; … … 1791 1800 */ 1792 1801 VBOXDD_HGCMCALL_COMPLETED_EMT(pCmd, result); 1793 vmmdevHGCMRemoveCommand (p VMMDevState, pCmd);1802 vmmdevHGCMRemoveCommand (pThis, pCmd); 1794 1803 1795 1804 if (pCmd->fCancelled || pCmd->fSaved) … … 1831 1840 * 3.0 blocker.) 1832 1841 */ 1833 /** @todo s/p VMMDevState/pThis/g */1842 /** @todo s/pThis/pThis/g */ 1834 1843 /** @todo It would be faster if this interface would use MMIO2 memory and we 1835 1844 * didn't have to mess around with PDMDevHlpPhysRead/Write. We're 1836 1845 * reading the header 3 times now and writing the request back twice. */ 1837 1846 1838 PDMCritSectEnter(&p VMMDevState->CritSect, VERR_SEM_BUSY);1839 PDMCritSectLeave(&p VMMDevState->CritSect);1840 1841 PDMDevHlpPhysRead(p VMMDevState->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize);1847 PDMCritSectEnter(&pThis->CritSect, VERR_SEM_BUSY); 1848 PDMCritSectLeave(&pThis->CritSect); 1849 1850 PDMDevHlpPhysRead(pThis->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize); 1842 1851 1843 1852 /* Setup return codes. */ … … 1893 1902 { 1894 1903 /* Use the saved page list to write data back to the guest RAM. */ 1895 rc = vmmdevHGCMWriteLinPtr (p VMMDevState->pDevIns, i, pHostParm->u.pointer.addr,1904 rc = vmmdevHGCMWriteLinPtr (pThis->pDevIns, i, pHostParm->u.pointer.addr, 1896 1905 size, iLinPtr, pCmd->paLinPtrs); 1897 1906 AssertReleaseRC(rc); … … 1934 1943 { 1935 1944 /* Copy pHostParm->u.pointer.addr[pHostParm->u.pointer.size] to pages. */ 1936 rc = vmmdevHGCMPageListWrite(p VMMDevState->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size);1945 rc = vmmdevHGCMPageListWrite(pThis->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size); 1937 1946 } 1938 1947 else … … 1996 2005 { 1997 2006 /* Use the saved page list to write data back to the guest RAM. */ 1998 rc = vmmdevHGCMWriteLinPtr (p VMMDevState->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs);2007 rc = vmmdevHGCMWriteLinPtr (pThis->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs); 1999 2008 AssertReleaseRC(rc); 2000 2009 } … … 2036 2045 { 2037 2046 /* Copy pHostParm->u.pointer.addr[pHostParm->u.pointer.size] to pages. */ 2038 rc = vmmdevHGCMPageListWrite(p VMMDevState->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size);2047 rc = vmmdevHGCMPageListWrite(pThis->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size); 2039 2048 } 2040 2049 else … … 2098 2107 { 2099 2108 /* Use the saved page list to write data back to the guest RAM. */ 2100 rc = vmmdevHGCMWriteLinPtr (p VMMDevState->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs);2109 rc = vmmdevHGCMWriteLinPtr (pThis->pDevIns, i, pHostParm->u.pointer.addr, size, iLinPtr, pCmd->paLinPtrs); 2101 2110 AssertReleaseRC(rc); 2102 2111 } … … 2138 2147 { 2139 2148 /* Copy pHostParm->u.pointer.addr[pHostParm->u.pointer.size] to pages. */ 2140 rc = vmmdevHGCMPageListWrite(p VMMDevState->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size);2149 rc = vmmdevHGCMPageListWrite(pThis->pDevIns, pPageListInfo, pHostParm->u.pointer.addr, size); 2141 2150 } 2142 2151 else … … 2186 2195 2187 2196 /* Write back the request */ 2188 PDMDevHlpPhysWrite(p VMMDevState->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize);2197 PDMDevHlpPhysWrite(pThis->pDevIns, pCmd->GCPhys, pHeader, pCmd->cbSize); 2189 2198 2190 2199 /* Now, when the command was removed from the internal list, notify the guest. */ 2191 VMMDevNotifyGuest (p VMMDevState, VMMDEV_EVENT_HGCM);2200 VMMDevNotifyGuest (pThis, VMMDEV_EVENT_HGCM); 2192 2201 2193 2202 if ((uint8_t *)pHeader != &au8Prealloc[0]) … … 2212 2221 DECLCALLBACK(void) hgcmCompleted (PPDMIHGCMPORT pInterface, int32_t result, PVBOXHGCMCMD pCmd) 2213 2222 { 2214 VMMDevState *p VMMDevState= PDMIHGCMPORT_2_VMMDEVSTATE(pInterface);2223 VMMDevState *pThis = PDMIHGCMPORT_2_VMMDEVSTATE(pInterface); 2215 2224 2216 2225 VBOXDD_HGCMCALL_COMPLETED_REQ(pCmd, result); … … 2219 2228 * efficient...? */ 2220 2229 /* Not safe to execute asynchronously; forward to EMT */ 2221 int rc = VMR3ReqCallVoidNoWait(PDMDevHlpGetVM(p VMMDevState->pDevIns), VMCPUID_ANY,2230 int rc = VMR3ReqCallVoidNoWait(PDMDevHlpGetVM(pThis->pDevIns), VMCPUID_ANY, 2222 2231 (PFNRT)hgcmCompletedWorker, 3, pInterface, result, pCmd); 2223 2232 AssertRC(rc); … … 2225 2234 2226 2235 /* @thread EMT */ 2227 int vmmdevHGCMSaveState(VMMDevState *p VMMDevState, PSSMHANDLE pSSM)2236 int vmmdevHGCMSaveState(VMMDevState *pThis, PSSMHANDLE pSSM) 2228 2237 { 2229 2238 /* Save information about pending requests. … … 2237 2246 uint32_t cCmds = 0; 2238 2247 2239 PVBOXHGCMCMD pIter = p VMMDevState->pHGCMCmdList;2248 PVBOXHGCMCMD pIter = pThis->pHGCMCmdList; 2240 2249 2241 2250 while (pIter) … … 2254 2263 if (cCmds > 0) 2255 2264 { 2256 pIter = p VMMDevState->pHGCMCmdList;2265 pIter = pThis->pHGCMCmdList; 2257 2266 2258 2267 while (pIter) … … 2331 2340 */ 2332 2341 pIter->fSaved = true; 2333 vmmdevHGCMRemoveCommand (p VMMDevState, pIter);2342 vmmdevHGCMRemoveCommand (pThis, pIter); 2334 2343 2335 2344 pIter = pNext; … … 2345 2354 2346 2355 /** @thread EMT(0) */ 2347 int vmmdevHGCMLoadState(VMMDevState *p VMMDevState, PSSMHANDLE pSSM, uint32_t uVersion)2356 int vmmdevHGCMLoadState(VMMDevState *pThis, PSSMHANDLE pSSM, uint32_t uVersion) 2348 2357 { 2349 2358 int rc = VINF_SUCCESS; … … 2379 2388 pCmd->enmCmdType = VBOXHGCMCMDTYPE_LOADSTATE; /* This marks the "old" saved command. */ 2380 2389 2381 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE);2390 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE); 2382 2391 } 2383 2392 } … … 2501 2510 AssertRCReturn(rc, rc); 2502 2511 2503 vmmdevHGCMAddCommand (p VMMDevState, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE);2512 vmmdevHGCMAddCommand (pThis, pCmd, GCPhys, cbSize, VBOXHGCMCMDTYPE_LOADSTATE); 2504 2513 } 2505 2514 … … 2513 2522 2514 2523 /* @thread EMT */ 2515 int vmmdevHGCMLoadStateDone(VMMDevState *p VMMDevState, PSSMHANDLE pSSM)2524 int vmmdevHGCMLoadStateDone(VMMDevState *pThis, PSSMHANDLE pSSM) 2516 2525 { 2517 2526 LogFlowFunc(("\n")); 2518 2527 2519 2528 /* Reissue pending requests. */ 2520 PPDMDEVINS pDevIns = p VMMDevState->pDevIns;2521 2522 int rc = vmmdevHGCMCmdListLock (p VMMDevState);2529 PPDMDEVINS pDevIns = pThis->pDevIns; 2530 2531 int rc = vmmdevHGCMCmdListLock (pThis); 2523 2532 2524 2533 if (RT_SUCCESS (rc)) … … 2534 2543 * New commands will be inserted to the list. 2535 2544 */ 2536 PVBOXHGCMCMD pIter = p VMMDevState->pHGCMCmdList;2537 2538 p VMMDevState->pHGCMCmdList = NULL; /* Reset the list. Saved commands will be processed and deallocated. */2545 PVBOXHGCMCMD pIter = pThis->pHGCMCmdList; 2546 2547 pThis->pHGCMCmdList = NULL; /* Reset the list. Saved commands will be processed and deallocated. */ 2539 2548 2540 2549 while (pIter) … … 2584 2593 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2585 2594 } 2586 else if (!p VMMDevState->pHGCMDrv)2595 else if (!pThis->pHGCMDrv) 2587 2596 { 2588 2597 Log(("VMMDevReq_HGCMConnect HGCM Connector is NULL!\n")); … … 2595 2604 Log(("VMMDevReq_HGCMConnect\n")); 2596 2605 2597 requestHeader->header.rc = vmmdevHGCMConnectSaved (p VMMDevState, pHGCMConnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd);2606 requestHeader->header.rc = vmmdevHGCMConnectSaved (pThis, pHGCMConnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd); 2598 2607 } 2599 2608 break; … … 2607 2616 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2608 2617 } 2609 else if (!p VMMDevState->pHGCMDrv)2618 else if (!pThis->pHGCMDrv) 2610 2619 { 2611 2620 Log(("VMMDevReq_HGCMDisconnect HGCM Connector is NULL!\n")); … … 2617 2626 2618 2627 Log(("VMMDevReq_VMMDevHGCMDisconnect\n")); 2619 requestHeader->header.rc = vmmdevHGCMDisconnectSaved (p VMMDevState, pHGCMDisconnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd);2628 requestHeader->header.rc = vmmdevHGCMDisconnectSaved (pThis, pHGCMDisconnect, pIter->GCPhys, &fHGCMCalled, pIter, &pCmd); 2620 2629 } 2621 2630 break; … … 2629 2638 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2630 2639 } 2631 else if (!p VMMDevState->pHGCMDrv)2640 else if (!pThis->pHGCMDrv) 2632 2641 { 2633 2642 Log(("VMMDevReq_HGCMCall HGCM Connector is NULL!\n")); … … 2647 2656 bool f64Bits = false; 2648 2657 #endif /* VBOX_WITH_64_BITS_GUESTS */ 2649 requestHeader->header.rc = vmmdevHGCMCallSaved (p VMMDevState, pHGCMCall, pIter->GCPhys, requestHeader->header.size, f64Bits, &fHGCMCalled, pIter, &pCmd);2658 requestHeader->header.rc = vmmdevHGCMCallSaved (pThis, pHGCMCall, pIter->GCPhys, requestHeader->header.size, f64Bits, &fHGCMCalled, pIter, &pCmd); 2650 2659 } 2651 2660 break; … … 2663 2672 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2664 2673 } 2665 else if (!p VMMDevState->pHGCMDrv)2674 else if (!pThis->pHGCMDrv) 2666 2675 { 2667 2676 Log(("VMMDevReq_HGCMConnect HGCM Connector is NULL!\n")); … … 2674 2683 Log(("VMMDevReq_HGCMConnect\n")); 2675 2684 2676 requestHeader->header.rc = vmmdevHGCMConnect (p VMMDevState, pHGCMConnect, pIter->GCPhys);2685 requestHeader->header.rc = vmmdevHGCMConnect (pThis, pHGCMConnect, pIter->GCPhys); 2677 2686 } 2678 2687 break; … … 2686 2695 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2687 2696 } 2688 else if (!p VMMDevState->pHGCMDrv)2697 else if (!pThis->pHGCMDrv) 2689 2698 { 2690 2699 Log(("VMMDevReq_HGCMDisconnect HGCM Connector is NULL!\n")); … … 2696 2705 2697 2706 Log(("VMMDevReq_VMMDevHGCMDisconnect\n")); 2698 requestHeader->header.rc = vmmdevHGCMDisconnect (p VMMDevState, pHGCMDisconnect, pIter->GCPhys);2707 requestHeader->header.rc = vmmdevHGCMDisconnect (pThis, pHGCMDisconnect, pIter->GCPhys); 2699 2708 } 2700 2709 break; … … 2713 2722 requestHeader->header.rc = VERR_INVALID_PARAMETER; 2714 2723 } 2715 else if (!p VMMDevState->pHGCMDrv)2724 else if (!pThis->pHGCMDrv) 2716 2725 { 2717 2726 Log(("VMMDevReq_HGCMCall HGCM Connector is NULL!\n")); … … 2731 2740 bool f64Bits = false; 2732 2741 #endif /* VBOX_WITH_64_BITS_GUESTS */ 2733 requestHeader->header.rc = vmmdevHGCMCall (p VMMDevState, pHGCMCall, requestHeader->header.size, pIter->GCPhys, f64Bits);2742 requestHeader->header.rc = vmmdevHGCMCall (pThis, pHGCMCall, requestHeader->header.size, pIter->GCPhys, f64Bits); 2734 2743 } 2735 2744 break; … … 2776 2785 if (pCmd) 2777 2786 { 2778 vmmdevHGCMRemoveCommand (p VMMDevState, pCmd);2787 vmmdevHGCMRemoveCommand (pThis, pCmd); 2779 2788 2780 2789 if (pCmd->paLinPtrs != NULL) … … 2787 2796 } 2788 2797 2789 VMMDevNotifyGuest (p VMMDevState, VMMDEV_EVENT_HGCM);2798 VMMDevNotifyGuest (pThis, VMMDEV_EVENT_HGCM); 2790 2799 } 2791 2800 } … … 2802 2811 } 2803 2812 2804 vmmdevHGCMCmdListUnlock (p VMMDevState);2813 vmmdevHGCMCmdListUnlock (pThis); 2805 2814 } 2806 2815
Note:
See TracChangeset
for help on using the changeset viewer.