Changeset 71590 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Mar 31, 2018 6:34:28 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 121579
- Location:
- trunk/src/VBox/Additions
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp
r69500 r71590 15 15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. 16 16 */ 17 17 18 #ifdef VBOX_WITH_CROGL 18 19 … … 37 38 } 38 39 39 static void *vboxMpCrShgsmiBufferAlloc(PVBOXMP_DEVEXT pDevExt, HGSMISIZE cbData)40 static void RT_UNTRUSTED_VOLATILE_HOST *vboxMpCrShgsmiBufferAlloc(PVBOXMP_DEVEXT pDevExt, HGSMISIZE cbData) 40 41 { 41 42 return VBoxSHGSMIHeapBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, cbData); 42 43 } 43 44 44 static VBOXVIDEOOFFSET vboxMpCrShgsmiBufferOffset(PVBOXMP_DEVEXT pDevExt, void *pvBuffer) 45 { 46 return (VBOXVIDEOOFFSET)HGSMIPointerToOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, 47 (const HGSMIBUFFERHEADER *)pvBuffer); 48 } 49 50 static void* vboxMpCrShgsmiBufferFromOffset(PVBOXMP_DEVEXT pDevExt, VBOXVIDEOOFFSET offBuffer) 45 static VBOXVIDEOOFFSET vboxMpCrShgsmiBufferOffset(PVBOXMP_DEVEXT pDevExt, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 46 { 47 return (VBOXVIDEOOFFSET)HGSMIPointerToOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, pvBuffer); 48 } 49 50 static void RT_UNTRUSTED_VOLATILE_HOST *vboxMpCrShgsmiBufferFromOffset(PVBOXMP_DEVEXT pDevExt, VBOXVIDEOOFFSET offBuffer) 51 51 { 52 52 return HGSMIOffsetToPointer(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, (HGSMIOFFSET)offBuffer); 53 53 } 54 54 55 static void vboxMpCrShgsmiBufferFree(PVBOXMP_DEVEXT pDevExt, void *pvBuffer)55 static void vboxMpCrShgsmiBufferFree(PVBOXMP_DEVEXT pDevExt, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 56 56 { 57 57 VBoxSHGSMIHeapBufferFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pvBuffer); 58 58 } 59 59 60 static VBOXVIDEOOFFSET vboxMpCrShgsmiTransportBufOffset(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvBuffer)60 static VBOXVIDEOOFFSET vboxMpCrShgsmiTransportBufOffset(PVBOXMP_CRSHGSMITRANSPORT pCon, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 61 61 { 62 62 return vboxMpCrShgsmiBufferOffset(pCon->pDevExt, pvBuffer); 63 63 } 64 64 65 static void *vboxMpCrShgsmiTransportBufFromOffset(PVBOXMP_CRSHGSMITRANSPORT pCon, VBOXVIDEOOFFSET offBuffer)65 static void RT_UNTRUSTED_VOLATILE_HOST *vboxMpCrShgsmiTransportBufFromOffset(PVBOXMP_CRSHGSMITRANSPORT pCon, VBOXVIDEOOFFSET offBuffer) 66 66 { 67 67 return vboxMpCrShgsmiBufferFromOffset(pCon->pDevExt, offBuffer); 68 68 } 69 69 70 void *VBoxMpCrShgsmiTransportBufAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t cbBuffer)70 void RT_UNTRUSTED_VOLATILE_HOST *VBoxMpCrShgsmiTransportBufAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t cbBuffer) 71 71 { 72 72 return vboxMpCrShgsmiBufferAlloc(pCon->pDevExt, cbBuffer); 73 73 } 74 74 75 void VBoxMpCrShgsmiTransportBufFree(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvBuffer)75 void VBoxMpCrShgsmiTransportBufFree(PVBOXMP_CRSHGSMITRANSPORT pCon, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 76 76 { 77 77 vboxMpCrShgsmiBufferFree(pCon->pDevExt, pvBuffer); … … 297 297 298 298 typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 299 void *pvRx, uint32_t cbRx, void *pvCtx); 299 void RT_UNTRUSTED_VOLATILE_HOST *pvRx, 300 uint32_t cbRx, void *pvCtx); 300 301 typedef FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION *PFNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION; 301 302 … … 321 322 VBOXVDMACMD_CHROMIUM_BUFFER *pRxBuf = &pBody->aBuffers[1]; 322 323 PVBOXMP_CRSHGSMICON_BUFDR pWbDr = (PVBOXMP_CRSHGSMICON_BUFDR)pRxBuf->u64GuestData; 323 void *pvRx = NULL;324 void RT_UNTRUSTED_VOLATILE_HOST *pvRx = NULL; 324 325 uint32_t cbRx = 0; 325 326 … … 418 419 } VBOXMP_CRHGSMICON_WRR_COMPLETION_CTX, *PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX; 419 420 421 /** @callback_method_impl{FNVBOXMP_CRSHGSMITRANSPORT_SENDREADASYNC_COMPLETION} */ 420 422 static DECLCALLBACK(void) vboxMpCrShgsmiTransportSendWriteReadReadRepostCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 421 void *pvRx, uint32_t cbRx, void *pvCtx) 423 void RT_UNTRUSTED_VOLATILE_HOST *pvRx, 424 uint32_t cbRx, void *pvCtx) 422 425 { 423 426 PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX pData = (PVBOXMP_CRHGSMICON_WRR_COMPLETION_CTX)pvCtx; … … 448 451 PVBOXMP_CRSHGSMICON_BUFDR pWbDr = (PVBOXMP_CRSHGSMICON_BUFDR)pRxBuf->u64GuestData; 449 452 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION pfnCompletion = (PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION)pBufCmd->u64GuestData; 450 void *pvRx = NULL;453 void RT_UNTRUSTED_VOLATILE_HOST *pvRx = NULL; 451 454 uint32_t cbRx = 0; 452 455 … … 552 555 } 553 556 554 static DECLCALLBACK(VOID) vboxMpCrShgsmiTransportVbvaSendWriteAsyncCompletion(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext) 557 /** @callback_method_impl{FNVBOXSHGSMICMDCOMPLETION} */ 558 static DECLCALLBACK(VOID) 559 vboxMpCrShgsmiTransportVbvaSendWriteAsyncCompletion(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, void *pvContext) 555 560 { 556 561 RT_NOREF(pHeap); … … 559 564 560 565 PVBOXMP_CRSHGSMITRANSPORT pCon = (PVBOXMP_CRSHGSMITRANSPORT)pvContext; 561 VBOXCMDVBVA_CRCMD_CMD *pCmd;566 VBOXCMDVBVA_CRCMD_CMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = NULL; 562 567 int rc = VBoxCmdVbvaConCmdCompletionData(pvCmd, &pCmd); 563 568 const UINT cBuffers = 2; … … 581 586 const uint32_t cbCmd = VBOXMP_CRSHGSMICON_DR_SIZE(cBuffers, sizeof (VBOXMP_CRHGSMICMD_WRITEREAD), cbContextData); 582 587 PVBOXMP_DEVEXT pDevExt = pCon->pDevExt; 583 PVBOXVDMACBUF_DRpDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd);588 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd); 584 589 if (!pDr) 585 590 { … … 686 691 const uint32_t cBuffers = 2; 687 692 const uint32_t cbCmd = VBOXMP_CRSHGSMICON_DR_SIZE(cBuffers, sizeof (VBOXMP_CRHGSMICMD_WRITE), cbContextData); 688 PVBOXVDMACBUF_DRpDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd);693 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd); 689 694 if (!pDr) 690 695 { … … 1103 1108 } 1104 1109 1105 int VBoxMpCrCmdRxReadbackHandler(CRMessageReadback *pRx, uint32_t cbRx)1106 { 1107 if (cbRx < sizeof 1110 int VBoxMpCrCmdRxReadbackHandler(CRMessageReadback RT_UNTRUSTED_VOLATILE_HOST *pRx, uint32_t cbRx) 1111 { 1112 if (cbRx < sizeof(*pRx)) 1108 1113 { 1109 1114 WARN(("invalid rx size %d", cbRx)); 1110 1115 return VERR_INVALID_PARAMETER; 1111 1116 } 1112 void * pvData= VBoxMpCrCmdRxReadbackData(pRx);1117 void *pvSrc = VBoxMpCrCmdRxReadbackData(pRx); 1113 1118 uint32_t cbData = VBoxMpCrCmdRxReadbackDataSize(pRx, cbRx); 1114 void *pvDataPtr= *((void**)&pRx->readback_ptr);1115 memcpy(pvD ataPtr, pvData, cbData);1119 void *pvDst = *((void**)&pRx->readback_ptr); 1120 memcpy(pvDst, pvSrc, cbData); 1116 1121 return VINF_SUCCESS; 1117 1122 } 1118 1123 1119 int VBoxMpCrCmdRxHandler(CRMessageHeader *pRx, uint32_t cbRx)1120 { 1121 if (cbRx < sizeof 1124 int VBoxMpCrCmdRxHandler(CRMessageHeader RT_UNTRUSTED_VOLATILE_HOST *pRx, uint32_t cbRx) 1125 { 1126 if (cbRx < sizeof(*pRx)) 1122 1127 { 1123 1128 WARN(("invalid rx size %d", cbRx)); 1124 1129 return VERR_INVALID_PARAMETER; 1125 1130 } 1126 CRMessage Header *pHdr = (CRMessageHeader*)pRx;1127 switch ( pHdr->type)1131 CRMessageType enmType = pRx->type; 1132 switch (enmType) 1128 1133 { 1129 1134 case CR_MESSAGE_READBACK: 1130 return VBoxMpCrCmdRxReadbackHandler((CRMessageReadback *)pRx, cbRx);1135 return VBoxMpCrCmdRxReadbackHandler((CRMessageReadback RT_UNTRUSTED_VOLATILE_HOST *)pRx, cbRx); 1131 1136 default: 1132 WARN(("unsupported rx message type: %d", pHdr->type));1137 WARN(("unsupported rx message type: %d", enmType)); 1133 1138 return VERR_INVALID_PARAMETER; 1134 1139 } -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.h
r69500 r71590 45 45 { 46 46 uint32_t cbBuf; 47 void *pvBuf;47 void RT_UNTRUSTED_VOLATILE_HOST *pvBuf; 48 48 } VBOXMP_CRSHGSMICON_BUFDR, *PVBOXMP_CRSHGSMICON_BUFDR; 49 49 … … 62 62 * the callee must NOT free it or use outside of the callback context. 63 63 * */ 64 typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvRx, uint32_t cbRx, void *pvCtx); 64 typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 65 void RT_UNTRUSTED_VOLATILE_HOST *pvRx, 66 uint32_t cbRx, void *pvCtx); 65 67 typedef FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION *PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION; 66 68 … … 79 81 void VBoxMpCrShgsmiTransportCmdTermWriteAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvContext); 80 82 81 void *VBoxMpCrShgsmiTransportBufAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t cbBuffer);82 void VBoxMpCrShgsmiTransportBufFree(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvBuffer);83 void RT_UNTRUSTED_VOLATILE_HOST *VBoxMpCrShgsmiTransportBufAlloc(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t cbBuffer); 84 void VBoxMpCrShgsmiTransportBufFree(PVBOXMP_CRSHGSMITRANSPORT pCon, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer); 83 85 84 86 typedef struct VBOXMP_CRPACKER … … 98 100 } 99 101 100 DECLINLINE(void) VBoxMpCrPackerTxBufferInit(PVBOXMP_CRPACKER pPacker, void *pvBuffer, uint32_t cbBuffer, uint32_t cCommands) 101 { 102 crPackInitBuffer(&pPacker->CrBuffer, pvBuffer, cbBuffer, cbBuffer, cCommands); 102 DECLINLINE(void) VBoxMpCrPackerTxBufferInit(PVBOXMP_CRPACKER pPacker, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer, 103 uint32_t cbBuffer, uint32_t cCommands) 104 { 105 crPackInitBuffer(&pPacker->CrBuffer, (void *)pvBuffer, cbBuffer, cbBuffer, cCommands); 103 106 crPackSetBuffer(&pPacker->CrPacker, &pPacker->CrBuffer); 104 107 } … … 190 193 } 191 194 192 DECLINLINE(void *) VBoxMpCrCmdRxReadbackData(CRMessageReadback*pRx)193 { 194 return pRx + 1;195 } 196 197 DECLINLINE(uint32_t) VBoxMpCrCmdRxReadbackDataSize(CRMessageReadback *pRx, uint32_t cbRx)195 DECLINLINE(void *) VBoxMpCrCmdRxReadbackData(CRMessageReadback RT_UNTRUSTED_VOLATILE_HOST *pRx) 196 { 197 return (void *)(pRx + 1); 198 } 199 200 DECLINLINE(uint32_t) VBoxMpCrCmdRxReadbackDataSize(CRMessageReadback RT_UNTRUSTED_VOLATILE_HOST *pRx, uint32_t cbRx) 198 201 { 199 202 RT_NOREF(pRx); 200 203 return cbRx - sizeof(*pRx); 201 204 } 202 int VBoxMpCrCmdRxReadbackHandler(CRMessageReadback *pRx, uint32_t cbRx);203 int VBoxMpCrCmdRxHandler(CRMessageHeader *pRx, uint32_t cbRx);205 int VBoxMpCrCmdRxReadbackHandler(CRMessageReadback RT_UNTRUSTED_VOLATILE_HOST *pRx, uint32_t cbRx); 206 int VBoxMpCrCmdRxHandler(CRMessageHeader RT_UNTRUSTED_VOLATILE_HOST *pRx, uint32_t cbRx); 204 207 205 208 /* must be called after calling VBoxMpCrCtlConIs3DSupported only */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
r71196 r71590 1392 1392 UINT cbCmd = VBOXVDMACMD_SIZE_FROMBODYSIZE(RT_OFFSETOF(VBOXVDMACMD_CHROMIUM_CMD, aBuffers[cBuffers])); 1393 1393 1394 PVBOXVDMACBUF_DRpDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd);1394 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd); 1395 1395 if (pDr) 1396 1396 { … … 1438 1438 { 1439 1439 PVBOXVDMADDI_CMD pDdiCmd = VBOXVDMADDI_CMD_FROM_BUF_DR(pDr); 1440 vboxVdmaDdiCmdInit(pDdiCmd, 0, 0, vboxVideoAMgrAllocSubmitCompletion, pDr);1440 vboxVdmaDdiCmdInit(pDdiCmd, 0, 0, vboxVideoAMgrAllocSubmitCompletion, (void *)pDr); 1441 1441 /* mark command as submitted & invisible for the dx runtime since dx did not originate it */ 1442 1442 vboxVdmaDdiCmdSubmittedNotDx(pDdiCmd); … … 1808 1808 { 1809 1809 int rc = VINF_SUCCESS; 1810 PVBOXVDMA_CTL pCmd = (PVBOXVDMA_CTL)VBoxSHGSMICommandAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, 1811 sizeof(VBOXVDMA_CTL), HGSMI_CH_VBVA, VBVA_VDMA_CTL); 1810 VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *pCmd 1811 = (VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_GUEST *)VBoxSHGSMICommandAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, 1812 sizeof(VBOXVDMA_CTL), HGSMI_CH_VBVA, VBVA_VDMA_CTL); 1812 1813 if (pCmd) 1813 1814 { … … 1845 1846 } 1846 1847 1847 VBoxSHGSMICommandFree 1848 VBoxSHGSMICommandFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pCmd); 1848 1849 } 1849 1850 else -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPShgsmi.cpp
r69500 r71590 20 20 21 21 /* SHGSMI */ 22 DECLINLINE(void) vboxSHGSMICommandRetain( PVBOXSHGSMIHEADERpCmd)22 DECLINLINE(void) vboxSHGSMICommandRetain(VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pCmd) 23 23 { 24 24 ASMAtomicIncU32(&pCmd->cRefs); 25 25 } 26 26 27 void vboxSHGSMICommandFree(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADERpCmd)27 void vboxSHGSMICommandFree(PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pCmd) 28 28 { 29 29 VBoxSHGSMIHeapFree(pHeap, pCmd); 30 30 } 31 31 32 DECLINLINE(void) vboxSHGSMICommandRelease(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADERpCmd)32 DECLINLINE(void) vboxSHGSMICommandRelease(PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pCmd) 33 33 { 34 34 uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs); 35 35 Assert(cRefs < UINT32_MAX / 2); 36 36 if(!cRefs) 37 vboxSHGSMICommandFree 38 } 39 40 static DECLCALLBACK(void) vboxSHGSMICompletionSetEvent(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext)37 vboxSHGSMICommandFree(pHeap, pCmd); 38 } 39 40 static DECLCALLBACK(void) vboxSHGSMICompletionSetEvent(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, void *pvContext) 41 41 { 42 42 RT_NOREF(pHeap, pvCmd); … … 44 44 } 45 45 46 DECLCALLBACK(void) vboxSHGSMICompletionCommandRelease(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext)46 DECLCALLBACK(void) vboxSHGSMICompletionCommandRelease(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, void *pvContext) 47 47 { 48 48 RT_NOREF(pvContext); … … 51 51 52 52 /* do not wait for completion */ 53 DECLINLINE(const VBOXSHGSMIHEADER *) vboxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, PVBOXSHGSMIHEADER pHeader) 53 DECLINLINE(const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *) 54 vboxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 54 55 { 55 56 RT_NOREF(pHeap); … … 59 60 } 60 61 61 DECLINLINE(void) vboxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader)62 DECLINLINE(void) vboxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 62 63 { 63 64 if(!(ASMAtomicReadU32((volatile uint32_t *)&pHeader->fFlags) & VBOXSHGSMI_FLAG_HG_ASYNCH)) … … 71 72 } 72 73 73 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchEvent(PVBOXSHGSMI pHeap, PVOID pvBuff, RTSEMEVENT hEventSem) 74 { 75 PVBOXSHGSMIHEADER pHeader = VBoxSHGSMIBufferHeader(pvBuff); 74 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 75 VBoxSHGSMICommandPrepAsynchEvent(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuff, RTSEMEVENT hEventSem) 76 { 77 VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = VBoxSHGSMIBufferHeader(pvBuff); 76 78 pHeader->u64Info1 = (uint64_t)vboxSHGSMICompletionSetEvent; 77 79 pHeader->u64Info2 = (uintptr_t)hEventSem; … … 81 83 } 82 84 83 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepSynch(PVBOXSHGSMI pHeap, PVOID pCmd) 85 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMICommandPrepSynch(PVBOXSHGSMI pHeap, 86 void RT_UNTRUSTED_VOLATILE_HOST *pCmd) 84 87 { 85 88 RTSEMEVENT hEventSem; … … 93 96 } 94 97 95 void VBoxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader)98 void VBoxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 96 99 { 97 100 vboxSHGSMICommandDoneAsynch(pHeap, pHeader); 98 101 } 99 102 100 int VBoxSHGSMICommandDoneSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader)103 int VBoxSHGSMICommandDoneSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 101 104 { 102 105 VBoxSHGSMICommandDoneAsynch(pHeap, pHeader); … … 109 112 } 110 113 111 void VBoxSHGSMICommandCancelAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader)114 void VBoxSHGSMICommandCancelAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 112 115 { 113 116 vboxSHGSMICommandRelease(pHeap, (PVBOXSHGSMIHEADER)pHeader); 114 117 } 115 118 116 void VBoxSHGSMICommandCancelSynch (PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER*pHeader)117 { 118 VBoxSHGSMICommandCancelAsynch 119 void VBoxSHGSMICommandCancelSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 120 { 121 VBoxSHGSMICommandCancelAsynch(pHeap, pHeader); 119 122 RTSEMEVENT hEventSem = (RTSEMEVENT)pHeader->u64Info2; 120 123 RTSemEventDestroy(hEventSem); 121 124 } 122 125 123 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, 124 PVOID pvCompletion, uint32_t fFlags) 126 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 127 VBoxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuff, 128 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, PVOID pvCompletion, uint32_t fFlags) 125 129 { 126 130 fFlags &= ~VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ; 127 PVBOXSHGSMIHEADER pHeader = VBoxSHGSMIBufferHeader(pvBuff);131 VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = VBoxSHGSMIBufferHeader(pvBuff); 128 132 pHeader->u64Info1 = (uintptr_t)pfnCompletion; 129 133 pHeader->u64Info2 = (uintptr_t)pvCompletion; 130 134 pHeader->fFlags = fFlags; 131 135 132 return vboxSHGSMICommandPrepAsynch 133 } 134 135 const VBOXSHGSMIHEADER * VBoxSHGSMICommandPrepAsynchIrq(PVBOXSHGSMI pHeap, PVOID pvBuff,136 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion,137 136 return vboxSHGSMICommandPrepAsynch(pHeap, pHeader); 137 } 138 139 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 140 VBoxSHGSMICommandPrepAsynchIrq(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuff, 141 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion, uint32_t fFlags) 138 142 { 139 143 fFlags |= VBOXSHGSMI_FLAG_GH_ASYNCH_CALLBACK_IRQ | VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ; 140 PVBOXSHGSMIHEADER pHeader = VBoxSHGSMIBufferHeader(pvBuff);144 VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = VBoxSHGSMIBufferHeader(pvBuff); 141 145 pHeader->u64Info1 = (uintptr_t)pfnCompletion; 142 146 pHeader->u64Info2 = (uintptr_t)pvCompletion; … … 144 148 pHeader->fFlags = fFlags; 145 149 146 return vboxSHGSMICommandPrepAsynch 147 } 148 149 void *VBoxSHGSMIHeapAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo)150 { 151 KIRQL OldIrql; 152 void *pvData;150 return vboxSHGSMICommandPrepAsynch(pHeap, pHeader); 151 } 152 153 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMIHeapAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo) 154 { 155 KIRQL OldIrql; 156 void RT_UNTRUSTED_VOLATILE_HOST *pvData; 153 157 Assert(KeGetCurrentIrql() <= DISPATCH_LEVEL); 154 158 KeAcquireSpinLock(&pHeap->HeapLock, &OldIrql); … … 160 164 } 161 165 162 void VBoxSHGSMIHeapFree(PVBOXSHGSMI pHeap, void *pvBuffer)166 void VBoxSHGSMIHeapFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 163 167 { 164 168 KIRQL OldIrql; … … 169 173 } 170 174 171 void *VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData)172 { 173 KIRQL OldIrql; 174 void * pvData;175 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData) 176 { 177 KIRQL OldIrql; 178 void RT_UNTRUSTED_VOLATILE_HOST * pvData; 175 179 Assert(KeGetCurrentIrql() <= DISPATCH_LEVEL); 176 180 KeAcquireSpinLock(&pHeap->HeapLock, &OldIrql); … … 182 186 } 183 187 184 void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void *pvBuffer)188 void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 185 189 { 186 190 KIRQL OldIrql; … … 203 207 } 204 208 205 void* VBoxSHGSMICommandAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo) 209 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMICommandAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, 210 uint16_t u16ChannelInfo) 206 211 { 207 212 /* Issue the flush command. */ 208 PVBOXSHGSMIHEADER pHeader = (PVBOXSHGSMIHEADER)VBoxSHGSMIHeapAlloc(pHeap, cbData + sizeof (VBOXSHGSMIHEADER), u8Channel, 209 u16ChannelInfo); 213 VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = 214 (VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *)VBoxSHGSMIHeapAlloc(pHeap, cbData + sizeof(VBOXSHGSMIHEADER), 215 u8Channel, u16ChannelInfo); 210 216 Assert(pHeader); 211 217 if (pHeader) … … 217 223 } 218 224 219 void VBoxSHGSMICommandFree(PVBOXSHGSMI pHeap, void *pvBuffer)220 { 221 PVBOXSHGSMIHEADERpHeader = VBoxSHGSMIBufferHeader(pvBuffer);222 vboxSHGSMICommandRelease 225 void VBoxSHGSMICommandFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 226 { 227 VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader = VBoxSHGSMIBufferHeader(pvBuffer); 228 vboxSHGSMICommandRelease(pHeap, pHeader); 223 229 } 224 230 … … 226 232 #define VBOXSHGSMI_LISTENTRY2CMD(_pEntry) ( (PVBOXSHGSMIHEADER)((uint8_t *)(_pEntry) - RT_OFFSETOF(VBOXSHGSMIHEADER, pvNext)) ) 227 233 228 int VBoxSHGSMICommandProcessCompletion (PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER*pCur, bool bIrq, PVBOXVTLIST pPostProcessList)234 int VBoxSHGSMICommandProcessCompletion(PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER *pCur, bool bIrq, PVBOXVTLIST pPostProcessList) 229 235 { 230 236 int rc = VINF_SUCCESS; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPShgsmi.h
r69500 r71590 30 30 } VBOXSHGSMI, *PVBOXSHGSMI; 31 31 32 typedef DECLCALLBACK(void) FNVBOXSHGSMICMDCOMPLETION(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext);32 typedef DECLCALLBACK(void) FNVBOXSHGSMICMDCOMPLETION(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, void *pvContext); 33 33 typedef FNVBOXSHGSMICMDCOMPLETION *PFNVBOXSHGSMICMDCOMPLETION; 34 34 35 typedef DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) FNVBOXSHGSMICMDCOMPLETION_IRQ(PVBOXSHGSMI pHeap, void *pvCmd, void *pvContext, void **ppvCompletion); 35 typedef DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) FNVBOXSHGSMICMDCOMPLETION_IRQ(PVBOXSHGSMI pHeap, 36 void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, 37 void *pvContext, void **ppvCompletion); 36 38 typedef FNVBOXSHGSMICMDCOMPLETION_IRQ *PFNVBOXSHGSMICMDCOMPLETION_IRQ; 37 39 38 40 39 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchEvent(PVBOXSHGSMI pHeap, PVOID pvBuff, RTSEMEVENT hEventSem); 40 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepSynch(PVBOXSHGSMI pHeap, PVOID pCmd); 41 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, PVOID pvCompletion, uint32_t fFlags); 42 const VBOXSHGSMIHEADER* VBoxSHGSMICommandPrepAsynchIrq(PVBOXSHGSMI pHeap, PVOID pvBuff, PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion, uint32_t fFlags); 41 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 42 VBoxSHGSMICommandPrepAsynchEvent(PVBOXSHGSMI pHeap, PVOID pvBuff, RTSEMEVENT hEventSem); 43 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 44 VBoxSHGSMICommandPrepSynch(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd); 45 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 46 VBoxSHGSMICommandPrepAsynch(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuff, 47 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, PVOID pvCompletion, uint32_t fFlags); 48 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST * 49 VBoxSHGSMICommandPrepAsynchIrq(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuff, 50 PFNVBOXSHGSMICMDCOMPLETION_IRQ pfnCompletion, PVOID pvCompletion, uint32_t fFlags); 43 51 44 void VBoxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader);45 int VBoxSHGSMICommandDoneSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER*pHeader);46 void VBoxSHGSMICommandCancelAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader);47 void VBoxSHGSMICommandCancelSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader);52 void VBoxSHGSMICommandDoneAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader); 53 int VBoxSHGSMICommandDoneSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader); 54 void VBoxSHGSMICommandCancelAsynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader); 55 void VBoxSHGSMICommandCancelSynch(PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader); 48 56 49 DECLINLINE(HGSMIOFFSET) VBoxSHGSMICommandOffset(const PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER *pHeader)57 DECLINLINE(HGSMIOFFSET) VBoxSHGSMICommandOffset(const PVBOXSHGSMI pHeap, const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHeader) 50 58 { 51 59 return HGSMIHeapBufferOffset(&pHeap->Heap, (void*)pHeader); … … 61 69 int VBoxSHGSMIInit(PVBOXSHGSMI pHeap, void *pvBase, HGSMISIZE cbArea, HGSMIOFFSET offBase, const HGSMIENV *pEnv); 62 70 void VBoxSHGSMITerm(PVBOXSHGSMI pHeap); 63 void *VBoxSHGSMIHeapAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo);64 void VBoxSHGSMIHeapFree(PVBOXSHGSMI pHeap, void *pvBuffer);65 void *VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData);66 void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void *pvBuffer);67 void *VBoxSHGSMICommandAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo);68 void VBoxSHGSMICommandFree(PVBOXSHGSMI pHeap, void *pvBuffer);71 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMIHeapAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo); 72 void VBoxSHGSMIHeapFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer); 73 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData); 74 void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer); 75 void RT_UNTRUSTED_VOLATILE_HOST *VBoxSHGSMICommandAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo); 76 void VBoxSHGSMICommandFree(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer); 69 77 int VBoxSHGSMICommandProcessCompletion(PVBOXSHGSMI pHeap, VBOXSHGSMIHEADER* pCmd, bool bIrq, struct VBOXVTLIST * pPostProcessList); 70 78 int VBoxSHGSMICommandPostprocessCompletion(PVBOXSHGSMI pHeap, struct VBOXVTLIST * pPostProcessList); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVbva.cpp
r69500 r71590 123 123 #define vboxCmdVbvaSubmit vboxCmdVbvaSubmitHgsmi 124 124 125 static VBOXCMDVBVA_CTL *vboxCmdVbvaCtlCreate(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, uint32_t cbCtl)125 static VBOXCMDVBVA_CTL RT_UNTRUSTED_VOLATILE_HOST *vboxCmdVbvaCtlCreate(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, uint32_t cbCtl) 126 126 { 127 127 Assert(cbCtl >= sizeof (VBOXCMDVBVA_CTL)); 128 return (VBOXCMDVBVA_CTL*)VBoxSHGSMICommandAlloc(&pHGSMICtx->heapCtx, cbCtl, HGSMI_CH_VBVA, VBVA_CMDVBVA_CTL); 129 } 130 131 static void vboxCmdVbvaCtlFree(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CTL * pCtl) 128 return (VBOXCMDVBVA_CTL RT_UNTRUSTED_VOLATILE_HOST *)VBoxSHGSMICommandAlloc(&pHGSMICtx->heapCtx, cbCtl, 129 HGSMI_CH_VBVA, VBVA_CMDVBVA_CTL); 130 } 131 132 static void vboxCmdVbvaCtlFree(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CTL RT_UNTRUSTED_VOLATILE_HOST *pCtl) 132 133 { 133 134 VBoxSHGSMICommandFree(&pHGSMICtx->heapCtx, pCtl); 134 135 } 135 136 136 static int vboxCmdVbvaCtlSubmitSync(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CTL *pCtl)137 { 138 const VBOXSHGSMIHEADER *pHdr = VBoxSHGSMICommandPrepSynch(&pHGSMICtx->heapCtx, pCtl);137 static int vboxCmdVbvaCtlSubmitSync(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CTL RT_UNTRUSTED_VOLATILE_HOST *pCtl) 138 { 139 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHdr = VBoxSHGSMICommandPrepSynch(&pHGSMICtx->heapCtx, pCtl); 139 140 if (!pHdr) 140 141 { … … 176 177 static int vboxCmdVbvaCtlSubmitAsync(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CTL * pCtl, FNVBOXSHGSMICMDCOMPLETION pfnCompletion, void *pvCompletion) 177 178 { 178 const VBOXSHGSMIHEADER* pHdr = VBoxSHGSMICommandPrepAsynch(&pHGSMICtx->heapCtx, pCtl, pfnCompletion, pvCompletion, VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ); 179 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHdr = VBoxSHGSMICommandPrepAsynch(&pHGSMICtx->heapCtx, pCtl, pfnCompletion, 180 pvCompletion, VBOXSHGSMI_FLAG_GH_ASYNCH_IRQ); 179 181 HGSMIOFFSET offCmd = VBoxSHGSMICommandOffset(&pHGSMICtx->heapCtx, pHdr); 180 182 if (offCmd == HGSMIOFFSET_VOID) … … 191 193 return rc; 192 194 } 193 else 194 WARN(("vboxCmdVbvaSubmit returnd %d", rc)); 195 195 196 WARN(("vboxCmdVbvaSubmit returnd %d", rc)); 196 197 VBoxSHGSMICommandCancelAsynch(&pHGSMICtx->heapCtx, pHdr); 197 198 198 return rc; 199 199 } … … 201 201 static int vboxVBVAExCtlSubmitEnableDisable(PVBVAEXBUFFERCONTEXT pCtx, PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, bool fEnable) 202 202 { 203 VBOXCMDVBVA_CTL_ENABLE *pCtl = (VBOXCMDVBVA_CTL_ENABLE*)vboxCmdVbvaCtlCreate(pHGSMICtx, sizeof (*pCtl)); 203 VBOXCMDVBVA_CTL_ENABLE RT_UNTRUSTED_VOLATILE_HOST *pCtl = 204 (VBOXCMDVBVA_CTL_ENABLE RT_UNTRUSTED_VOLATILE_HOST *)vboxCmdVbvaCtlCreate(pHGSMICtx, sizeof (*pCtl)); 204 205 if (!pCtl) 205 206 { … … 210 211 pCtl->Hdr.u32Type = VBOXCMDVBVACTL_TYPE_ENABLE; 211 212 pCtl->Hdr.i32Result = VERR_NOT_IMPLEMENTED; 212 memset( &pCtl->Enable, 0, sizeof(pCtl->Enable));213 memset((void *)&pCtl->Enable, 0, sizeof(pCtl->Enable)); 213 214 pCtl->Enable.u32Flags = fEnable? VBVA_F_ENABLE: VBVA_F_DISABLE; 214 215 pCtl->Enable.u32Offset = pCtx->offVRAMBuffer; … … 1232 1233 uint32_t *pu32ClientID) 1233 1234 { 1234 VBOXCMDVBVA_CTL_3DCTL_CONNECT *pConnect = (VBOXCMDVBVA_CTL_3DCTL_CONNECT*)vboxCmdVbvaCtlCreate(pHGSMICtx, sizeof (VBOXCMDVBVA_CTL_3DCTL_CONNECT)); 1235 VBOXCMDVBVA_CTL_3DCTL_CONNECT RT_UNTRUSTED_VOLATILE_HOST *pConnect = 1236 (VBOXCMDVBVA_CTL_3DCTL_CONNECT RT_UNTRUSTED_VOLATILE_HOST *)vboxCmdVbvaCtlCreate(pHGSMICtx, 1237 sizeof(VBOXCMDVBVA_CTL_3DCTL_CONNECT)); 1235 1238 if (!pConnect) 1236 1239 { … … 1268 1271 int vboxCmdVbvaConDisconnect(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, uint32_t u32ClientID) 1269 1272 { 1270 VBOXCMDVBVA_CTL_3DCTL *pDisconnect = (VBOXCMDVBVA_CTL_3DCTL*)vboxCmdVbvaCtlCreate(pHGSMICtx, sizeof (VBOXCMDVBVA_CTL_3DCTL)); 1273 VBOXCMDVBVA_CTL_3DCTL RT_UNTRUSTED_VOLATILE_HOST *pDisconnect = 1274 (VBOXCMDVBVA_CTL_3DCTL RT_UNTRUSTED_VOLATILE_HOST*)vboxCmdVbvaCtlCreate(pHGSMICtx, sizeof(VBOXCMDVBVA_CTL_3DCTL)); 1271 1275 if (!pDisconnect) 1272 1276 { … … 1331 1335 void vboxCmdVbvaConCmdFree(PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBOXCMDVBVA_CRCMD_CMD *pCmd) 1332 1336 { 1333 VBOXCMDVBVA_CTL_3DCTL_CMD *pHdr = ((VBOXCMDVBVA_CTL_3DCTL_CMD*)pCmd)-1;1337 VBOXCMDVBVA_CTL_3DCTL_CMD RT_UNTRUSTED_VOLATILE_HOST *pHdr = ((VBOXCMDVBVA_CTL_3DCTL_CMD RT_UNTRUSTED_VOLATILE_HOST *)pCmd) - 1; 1334 1338 vboxCmdVbvaCtlFree(pHGSMICtx, &pHdr->Hdr); 1335 1339 } … … 1351 1355 } 1352 1356 1353 int VBoxCmdVbvaConCmdSubmitAsync(PVBOXMP_DEVEXT pDevExt, VBOXCMDVBVA_CRCMD_CMD* pCmd, FNVBOXSHGSMICMDCOMPLETION pfnCompletion, void *pvCompletion) 1357 int VBoxCmdVbvaConCmdSubmitAsync(PVBOXMP_DEVEXT pDevExt, VBOXCMDVBVA_CRCMD_CMD* pCmd, 1358 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, void *pvCompletion) 1354 1359 { 1355 1360 return vboxCmdVbvaConSubmitAsync(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pCmd, pfnCompletion, pvCompletion); 1356 1361 } 1357 1362 1358 int VBoxCmdVbvaConCmdCompletionData(void *pvCmd, VBOXCMDVBVA_CRCMD_CMD**ppCmd)1359 { 1360 VBOXCMDVBVA_CTL_3DCTL_CMD *pCmd = (VBOXCMDVBVA_CTL_3DCTL_CMD*)pvCmd;1363 int VBoxCmdVbvaConCmdCompletionData(void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, VBOXCMDVBVA_CRCMD_CMD RT_UNTRUSTED_VOLATILE_HOST **ppCmd) 1364 { 1365 VBOXCMDVBVA_CTL_3DCTL_CMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = (VBOXCMDVBVA_CTL_3DCTL_CMD RT_UNTRUSTED_VOLATILE_HOST *)pvCmd; 1361 1366 if (ppCmd) 1362 *ppCmd = (VBOXCMDVBVA_CRCMD_CMD *)(pCmd+1);1367 *ppCmd = (VBOXCMDVBVA_CRCMD_CMD RT_UNTRUSTED_VOLATILE_HOST *)(pCmd + 1); 1363 1368 return pCmd->Hdr.i32Result; 1364 1369 } … … 1368 1373 Assert(KeGetCurrentIrql() < DISPATCH_LEVEL); 1369 1374 1370 VBOXCMDVBVA_CTL_RESIZE *pResize = (VBOXCMDVBVA_CTL_RESIZE*)vboxCmdVbvaCtlCreate(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, sizeof (VBOXCMDVBVA_CTL_RESIZE)); 1375 VBOXCMDVBVA_CTL_RESIZE RT_UNTRUSTED_VOLATILE_HOST *pResize = 1376 (VBOXCMDVBVA_CTL_RESIZE RT_UNTRUSTED_VOLATILE_HOST*)vboxCmdVbvaCtlCreate(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 1377 sizeof(VBOXCMDVBVA_CTL_RESIZE)); 1371 1378 if (!pResize) 1372 1379 { … … 1381 1388 if (RT_SUCCESS(rc)) 1382 1389 { 1383 VBOXCMDVBVA_RESIZE_ENTRY *pEntry = &pResize->Resize.aEntries[0];1384 memcpy( pEntry->aTargetMap, pTargetMap, sizeof(pEntry->aTargetMap));1390 VBOXCMDVBVA_RESIZE_ENTRY RT_UNTRUSTED_VOLATILE_HOST *pEntry = &pResize->Resize.aEntries[0]; 1391 memcpy((void *)&pEntry->aTargetMap[0], pTargetMap, sizeof(pEntry->aTargetMap)); 1385 1392 LOG(("[%d] %dx%d, TargetMap0 0x%x, flags 0x%x", 1386 1393 pEntry->Screen.u32ViewIndex, pEntry->Screen.u32Width, pEntry->Screen.u32Height, pEntry->aTargetMap[0], pEntry->Screen.u16Flags)); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVbva.h
r69500 r71590 239 239 VBOXCMDVBVA_CRCMD_CMD* VBoxCmdVbvaConCmdAlloc(PVBOXMP_DEVEXT pDevExt, uint32_t cbCmd); 240 240 void VBoxCmdVbvaConCmdFree(PVBOXMP_DEVEXT pDevExt, VBOXCMDVBVA_CRCMD_CMD* pCmd); 241 int VBoxCmdVbvaConCmdSubmitAsync(PVBOXMP_DEVEXT pDevExt, VBOXCMDVBVA_CRCMD_CMD* pCmd, FNVBOXSHGSMICMDCOMPLETION pfnCompletion, void *pvCompletion); 242 int VBoxCmdVbvaConCmdCompletionData(void *pvCmd, VBOXCMDVBVA_CRCMD_CMD **ppCmd); 241 int VBoxCmdVbvaConCmdSubmitAsync(PVBOXMP_DEVEXT pDevExt, VBOXCMDVBVA_CRCMD_CMD* pCmd, 242 PFNVBOXSHGSMICMDCOMPLETION pfnCompletion, void *pvCompletion); 243 int VBoxCmdVbvaConCmdCompletionData(void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, VBOXCMDVBVA_CRCMD_CMD RT_UNTRUSTED_VOLATILE_HOST **ppCmd); 243 244 int VBoxCmdVbvaConCmdResize(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData, const uint32_t *pTargetMap, const POINT * pVScreenPos, uint16_t fFlags); 244 245 #endif /* #ifdef VBOX_WITH_CROGL */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp
r69500 r71590 342 342 } 343 343 344 NTSTATUS vboxVdmaCrSubmitWriteReadAsync(PVBOXMP_DEVEXT pDevExt, VBOXMP_CRPACKER *pCrPacker, uint32_t u32CrConClientID, PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION pfnCompletion, void *pvCompletion) 344 NTSTATUS vboxVdmaCrSubmitWriteReadAsync(PVBOXMP_DEVEXT pDevExt, VBOXMP_CRPACKER *pCrPacker, uint32_t u32CrConClientID, 345 PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION pfnCompletion, void *pvCompletion) 345 346 { 346 347 Assert(u32CrConClientID); … … 547 548 } 548 549 549 void *pvCommandBuffer = NULL;550 uint32_t cbCommandBuffer = VBOXMP_CRCMD_HEADER_SIZE ;551 cbCommandBuffer +=VBOXMP_CRCMD_SIZE_WINDOWVISIBLEREGIONS(cVRects);552 553 pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport,cbCommandBuffer);550 ; 551 uint32_t cbCommandBuffer = VBOXMP_CRCMD_HEADER_SIZE 552 + VBOXMP_CRCMD_SIZE_WINDOWVISIBLEREGIONS(cVRects); 553 void RT_UNTRUSTED_VOLATILE_HOST *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, 554 cbCommandBuffer); 554 555 if (!pvCommandBuffer) 555 556 { … … 603 604 } 604 605 605 void *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer);606 void RT_UNTRUSTED_VOLATILE_HOST *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer); 606 607 if (!pvCommandBuffer) 607 608 { … … 878 879 } VBOXVDMA_CRRXGENERICSYNC, *PVBOXVDMA_CRRXGENERICSYNC; 879 880 880 static DECLCALLBACK(void) vboxVdmaCrRxGenericSyncCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvRx, uint32_t cbRx, void *pvCtx) 881 /** @callback_method_impl{PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION} */ 882 static DECLCALLBACK(void) vboxVdmaCrRxGenericSyncCompletion(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, 883 void RT_UNTRUSTED_VOLATILE_HOST *pvRx, uint32_t cbRx, void *pvCtx) 881 884 { 882 885 PVBOXMP_VDMACR_WRITEREADCOMPLETION pvCompletionData = (PVBOXMP_VDMACR_WRITEREADCOMPLETION)pvCtx; … … 884 887 if (RT_SUCCESS(rc)) 885 888 { 886 rc = VBoxMpCrCmdRxHandler((CRMessageHeader *)pvRx, cbRx);889 rc = VBoxMpCrCmdRxHandler((CRMessageHeader *)pvRx, cbRx); 887 890 if (!RT_SUCCESS(rc)) 888 891 { … … 927 930 { 928 931 VBOXMP_CRPACKER CrPacker; 929 void *pvCommandBuffer;932 void RT_UNTRUSTED_VOLATILE_HOST *pvCommandBuffer; 930 933 } VBOXMP_CRHGSMIMGR; 931 934 … … 1095 1098 uint32_t cbCommandBuffer = VBOXMP_CRCMD_HEADER_SIZE + VBOXMP_CRCMD_SIZE_VBOXTEXPRESENT(cRects); 1096 1099 uint32_t cCommands = 1; 1097 void *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer);1100 void RT_UNTRUSTED_VOLATILE_HOST *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer); 1098 1101 if (!pvCommandBuffer) 1099 1102 { … … 1125 1128 uint32_t cbCommandBuffer = VBOXMP_CRCMD_HEADER_SIZE + VBOXMP_CRCMD_SIZE_CHROMIUMPARAMETERICR; 1126 1129 uint32_t cCommands = 1; 1127 void *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer);1130 void RT_UNTRUSTED_VOLATILE_HOST *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer); 1128 1131 if (!pvCommandBuffer) 1129 1132 { … … 1528 1531 int rc = VINF_SUCCESS; 1529 1532 1530 PVBOXVDMA_CTL pCmd = (PVBOXVDMA_CTL)VBoxSHGSMICommandAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, sizeof (VBOXVDMA_CTL), HGSMI_CH_VBVA, VBVA_VDMA_CTL); 1533 VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_HOST *pCmd = 1534 (VBOXVDMA_CTL RT_UNTRUSTED_VOLATILE_HOST *)VBoxSHGSMICommandAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, 1535 sizeof(VBOXVDMA_CTL), HGSMI_CH_VBVA, VBVA_VDMA_CTL); 1531 1536 if (pCmd) 1532 1537 { … … 1535 1540 pCmd->i32Result = VERR_NOT_SUPPORTED; 1536 1541 1537 const VBOXSHGSMIHEADER* pHdr = VBoxSHGSMICommandPrepSynch(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pCmd); 1542 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHdr = VBoxSHGSMICommandPrepSynch(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, 1543 pCmd); 1538 1544 Assert(pHdr); 1539 1545 if (pHdr) … … 1566 1572 } 1567 1573 1568 VBoxSHGSMICommandFree 1574 VBoxSHGSMICommandFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pCmd); 1569 1575 } 1570 1576 else … … 1714 1720 1715 1721 #ifdef VBOX_WITH_VDMA 1716 void vboxVdmaCBufDrFree (PVBOXVDMAINFO pInfo, PVBOXVDMACBUF_DRpDr)1717 { 1718 VBoxSHGSMICommandFree 1719 } 1720 1721 PVBOXVDMACBUF_DR vboxVdmaCBufDrCreate(PVBOXVDMAINFO pInfo, uint32_t cbTrailingData)1722 void vboxVdmaCBufDrFree(PVBOXVDMAINFO pInfo, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr) 1723 { 1724 VBoxSHGSMICommandFree(&pInfo->CmdHeap, pDr); 1725 } 1726 1727 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *vboxVdmaCBufDrCreate(PVBOXVDMAINFO pInfo, uint32_t cbTrailingData) 1722 1728 { 1723 1729 uint32_t cbDr = VBOXVDMACBUF_DR_SIZE(cbTrailingData); 1724 PVBOXVDMACBUF_DR pDr = (PVBOXVDMACBUF_DR)VBoxSHGSMICommandAlloc (&pInfo->CmdHeap, cbDr, HGSMI_CH_VBVA, VBVA_VDMA_CMD); 1730 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = 1731 (VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *)VBoxSHGSMICommandAlloc(&pInfo->CmdHeap, cbDr, HGSMI_CH_VBVA, VBVA_VDMA_CMD); 1725 1732 Assert(pDr); 1726 1733 if (pDr) 1727 memset (pDr, 0, cbDr);1734 memset((void *)pDr, 0, cbDr); 1728 1735 else 1729 1736 LOGREL(("VBoxSHGSMICommandAlloc returned NULL")); … … 1741 1748 } 1742 1749 1743 static DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) vboxVdmaCBufDrCompletionIrq(PVBOXSHGSMI pHeap, void *pvCmd, 1744 void *pvContext, void **ppvCompletion) 1750 /** @callback_method_impl{FNVBOXSHGSMICMDCOMPLETION_IRQ} */ 1751 static DECLCALLBACK(PFNVBOXSHGSMICMDCOMPLETION) 1752 vboxVdmaCBufDrCompletionIrq(PVBOXSHGSMI pHeap, void RT_UNTRUSTED_VOLATILE_HOST *pvCmd, void *pvContext, void **ppvCompletion) 1745 1753 { 1746 1754 RT_NOREF(pHeap, ppvCompletion); 1747 1755 PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)pvContext; 1748 PVBOXVDMACBUF_DR pDr = (PVBOXVDMACBUF_DR)pvCmd;1756 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = (VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *)pvCmd; 1749 1757 1750 1758 DXGK_INTERRUPT_TYPE enmComplType; … … 1756 1764 else if (pDr->rc == VERR_INTERRUPTED) 1757 1765 { 1758 Assert (0);1766 AssertFailed(); 1759 1767 enmComplType = DXGK_INTERRUPT_DMA_PREEMPTED; 1760 1768 } 1761 1769 else 1762 1770 { 1763 Assert (0);1771 AssertFailed(); 1764 1772 enmComplType = DXGK_INTERRUPT_DMA_FAULTED; 1765 1773 } … … 1775 1783 } 1776 1784 1777 int vboxVdmaCBufDrSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, PVBOXVDMACBUF_DR pDr) 1778 { 1779 const VBOXSHGSMIHEADER* pHdr = VBoxSHGSMICommandPrepAsynchIrq (&pInfo->CmdHeap, pDr, vboxVdmaCBufDrCompletionIrq, pDevExt, VBOXSHGSMI_FLAG_GH_ASYNCH_FORCE); 1785 int vboxVdmaCBufDrSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr) 1786 { 1787 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHdr = 1788 VBoxSHGSMICommandPrepAsynchIrq(&pInfo->CmdHeap, pDr, vboxVdmaCBufDrCompletionIrq, pDevExt, VBOXSHGSMI_FLAG_GH_ASYNCH_FORCE); 1780 1789 Assert(pHdr); 1781 1790 int rc = VERR_GENERAL_FAILURE; … … 1808 1817 } 1809 1818 1810 int vboxVdmaCBufDrSubmitSynch(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, PVBOXVDMACBUF_DR pDr) 1811 { 1812 const VBOXSHGSMIHEADER* pHdr = VBoxSHGSMICommandPrepAsynch (&pInfo->CmdHeap, pDr, NULL, NULL, VBOXSHGSMI_FLAG_GH_SYNCH); 1819 int vboxVdmaCBufDrSubmitSynch(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr) 1820 { 1821 const VBOXSHGSMIHEADER RT_UNTRUSTED_VOLATILE_HOST *pHdr = VBoxSHGSMICommandPrepAsynch(&pInfo->CmdHeap, pDr, NULL, 1822 NULL, VBOXSHGSMI_FLAG_GH_SYNCH); 1813 1823 Assert(pHdr); 1814 1824 int rc = VERR_GENERAL_FAILURE; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.h
r69500 r71590 71 71 NTSTATUS vboxVdmaDdiCmdSubmitted(PVBOXMP_DEVEXT pDevExt, PVBOXVDMADDI_CMD pCmd); 72 72 73 DECLINLINE(VOID) vboxVdmaDdiCmdInit(PVBOXVDMADDI_CMD pCmd, 74 uint32_t u32NodeOrdinal, uint32_t u32FenceId, 75 PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete, PVOID pvComplete) 73 DECLINLINE(VOID) vboxVdmaDdiCmdInit(PVBOXVDMADDI_CMD pCmd, uint32_t u32NodeOrdinal, uint32_t u32FenceId, 74 PFNVBOXVDMADDICMDCOMPLETE_DPC pfnComplete, PVOID pvComplete) 76 75 { 77 76 pCmd->QueueEntry.Blink = NULL; … … 283 282 return VBoxSHGSMICommandPtrOffset(&pInfo->CmdHeap, pvPtr); 284 283 } 285 int vboxVdmaCBufDrSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, PVBOXVDMACBUF_DRpDr);286 int vboxVdmaCBufDrSubmitSynch(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, PVBOXVDMACBUF_DRpDr);287 struct VBOXVDMACBUF_DR *vboxVdmaCBufDrCreate(PVBOXVDMAINFO pInfo, uint32_t cbTrailingData);288 void vboxVdmaCBufDrFree(PVBOXVDMAINFO pInfo, struct VBOXVDMACBUF_DR *pDr);284 int vboxVdmaCBufDrSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr); 285 int vboxVdmaCBufDrSubmitSynch(PVBOXMP_DEVEXT pDevExt, PVBOXVDMAINFO pInfo, VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr); 286 struct VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *vboxVdmaCBufDrCreate(PVBOXVDMAINFO pInfo, uint32_t cbTrailingData); 287 void vboxVdmaCBufDrFree(PVBOXVDMAINFO pInfo, struct VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr); 289 288 290 289 #define VBOXVDMACBUF_DR_DATA_OFFSET() (sizeof (VBOXVDMACBUF_DR)) -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVhwa.cpp
r69500 r71590 27 27 28 28 29 DECLINLINE(void) vboxVhwaHdrInit(VBOXVHWACMD* pHdr, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, VBOXVHWACMD_TYPE enmCmd) 30 { 31 memset(pHdr, 0, sizeof(VBOXVHWACMD)); 29 DECLINLINE(void) vboxVhwaHdrInit(VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pHdr, 30 D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, VBOXVHWACMD_TYPE enmCmd) 31 { 32 memset((void *)pHdr, 0, sizeof(VBOXVHWACMD)); 32 33 pHdr->iDisplay = srcId; 33 34 pHdr->rc = VERR_GENERAL_FAILURE; … … 39 40 40 41 #ifdef VBOXVHWA_WITH_SHGSMI 41 static int vboxVhwaCommandSubmitHgsmi(struct _DEVICE_EXTENSION *pDevExt, HGSMIOFFSET offDr)42 static int vboxVhwaCommandSubmitHgsmi(struct _DEVICE_EXTENSION *pDevExt, HGSMIOFFSET offDr) 42 43 { 43 44 VBoxHGSMIGuestWrite(pDevExt, offDr); … … 45 46 } 46 47 #else 47 DECLINLINE(void) vbvaVhwaCommandRelease(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd)48 DECLINLINE(void) vbvaVhwaCommandRelease(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 48 49 { 49 50 uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs); … … 55 56 } 56 57 57 DECLINLINE(void) vbvaVhwaCommandRetain(VBOXVHWACMD *pCmd)58 DECLINLINE(void) vbvaVhwaCommandRetain(VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 58 59 { 59 60 ASMAtomicIncU32(&pCmd->cRefs); … … 61 62 62 63 /* do not wait for completion */ 63 void vboxVhwaCommandSubmitAsynch(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void *pContext) 64 void vboxVhwaCommandSubmitAsynch(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 65 PFNVBOXVHWACMDCOMPLETION pfnCompletion, void *pContext) 64 66 { 65 67 pCmd->GuestVBVAReserved1 = (uintptr_t)pfnCompletion; … … 69 71 VBoxHGSMIBufferSubmit(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pCmd); 70 72 71 if( !(pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH) 72 || ( (pCmd->Flags & VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION) 73 && (pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED) ) ) 73 uint32_t const fFlags = pCmd->Flags; 74 if( !(fFlags & VBOXVHWACMD_FLAG_HG_ASYNCH) 75 || ( (fFlags & VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION) 76 && (fFlags & VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED) ) ) 74 77 { 75 78 /* the command is completed */ … … 80 83 } 81 84 82 static DECLCALLBACK(void) vboxVhwaCompletionSetEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD * pCmd, void * pvContext) 83 { 84 RT_NOREF(pDevExt, pCmd); 85 /** @callback_method_impl{FNVBOXVHWACMDCOMPLETION} */ 86 static DECLCALLBACK(void) 87 vboxVhwaCompletionSetEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, void *pvContext) 88 { 89 RT_NOREF(pDevExt, pCmd); 85 90 RTSemEventSignal((RTSEMEVENT)pvContext); 86 91 } 87 92 88 void vboxVhwaCommandSubmitAsynchByEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd, RTSEMEVENT hEvent)93 void vboxVhwaCommandSubmitAsynchByEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, RTSEMEVENT hEvent) 89 94 { 90 95 vboxVhwaCommandSubmitAsynch(pDevExt, pCmd, vboxVhwaCompletionSetEvent, hEvent); … … 98 103 } 99 104 100 VBOXVHWACMD* vboxVhwaCommandCreate(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd) 105 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *vboxVhwaCommandCreate(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, 106 VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd) 101 107 { 102 108 vboxVhwaCommandCheckCompletion(pDevExt); 109 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pHdr; 103 110 #ifdef VBOXVHWA_WITH_SHGSMI 104 VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxSHGSMICommandAlloc(&pDevExt->u.primary.hgsmiAdapterHeap,105 cbCmd + VBOXVHWACMD_HEADSIZE(),106 HGSMI_CH_VBVA,107 VBVA_VHWA_CMD);111 pHdr = (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *)VBoxSHGSMICommandAlloc(&pDevExt->u.primary.hgsmiAdapterHeap, 112 cbCmd + VBOXVHWACMD_HEADSIZE(), 113 HGSMI_CH_VBVA, 114 VBVA_VHWA_CMD); 108 115 #else 109 VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxHGSMIBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx,110 cbCmd + VBOXVHWACMD_HEADSIZE(),111 HGSMI_CH_VBVA,112 VBVA_VHWA_CMD);116 pHdr = (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 117 cbCmd + VBOXVHWACMD_HEADSIZE(), 118 HGSMI_CH_VBVA, 119 VBVA_VHWA_CMD); 113 120 #endif 114 121 Assert(pHdr); 115 122 if (!pHdr) 116 {117 123 LOGREL(("VBoxHGSMIBufferAlloc failed")); 118 }119 124 else 120 {121 125 vboxVhwaHdrInit(pHdr, srcId, enmCmd); 122 }123 126 124 127 return pHdr; 125 128 } 126 129 127 void vboxVhwaCommandFree(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd)130 void vboxVhwaCommandFree(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 128 131 { 129 132 #ifdef VBOXVHWA_WITH_SHGSMI … … 134 137 } 135 138 136 int vboxVhwaCommandSubmit(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd)139 int vboxVhwaCommandSubmit(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 137 140 { 138 141 #ifdef VBOXVHWA_WITH_SHGSMI … … 184 187 185 188 #ifndef VBOXVHWA_WITH_SHGSMI 186 static DECLCALLBACK(void) vboxVhwaCompletionFreeCmd(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd, void *pvContext) 189 /** @callback_method_impl{FNVBOXVHWACMDCOMPLETION} */ 190 static DECLCALLBACK(void) 191 vboxVhwaCompletionFreeCmd(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, void *pvContext) 187 192 { 188 193 RT_NOREF(pvContext); … … 197 202 /* need to save next since the command may be released in a pfnCallback and thus its data might be invalid */ 198 203 pNext = pCur->pNext; 199 VBOXVHWACMD *pCmd = VBOXVHWA_LISTENTRY2CMD(pCur);204 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBOXVHWA_LISTENTRY2CMD(pCur); 200 205 PFNVBOXVHWACMDCOMPLETION pfnCallback = (PFNVBOXVHWACMDCOMPLETION)pCmd->GuestVBVAReserved1; 201 206 void *pvCallback = (void*)pCmd->GuestVBVAReserved2; … … 206 211 #endif 207 212 208 void vboxVhwaCommandSubmitAsynchAndComplete(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD *pCmd)213 void vboxVhwaCommandSubmitAsynchAndComplete(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 209 214 { 210 215 #ifdef VBOXVHWA_WITH_SHGSMI … … 231 236 VBOXVHWACMD_QUERYINFO1* vboxVhwaQueryHostInfo1(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId) 232 237 { 233 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO1, sizeof(VBOXVHWACMD_QUERYINFO1)); 234 VBOXVHWACMD_QUERYINFO1 *pInfo1; 235 236 Assert(pCmd); 237 if (!pCmd) 238 { 239 LOGREL(("vboxVhwaCommandCreate failed")); 240 return NULL; 241 } 242 243 pInfo1 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1); 238 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO1, 239 sizeof(VBOXVHWACMD_QUERYINFO1)); 240 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), NULL); 241 242 VBOXVHWACMD_QUERYINFO1 *pInfo1 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1); 244 243 pInfo1->u.in.guestVersion.maj = VBOXVHWA_VERSION_MAJ; 245 244 pInfo1->u.in.guestVersion.min = VBOXVHWA_VERSION_MIN; … … 249 248 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 250 249 AssertRC(rc); 251 if(RT_SUCCESS(rc)) 252 { 253 if(RT_SUCCESS(pCmd->rc)) 254 { 250 if (RT_SUCCESS(rc)) 251 if (RT_SUCCESS(pCmd->rc)) 255 252 return VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1); 256 }257 }258 253 259 254 vboxVhwaCommandFree(pDevExt, pCmd); … … 263 258 VBOXVHWACMD_QUERYINFO2* vboxVhwaQueryHostInfo2(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, uint32_t numFourCC) 264 259 { 265 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO2, VBOXVHWAINFO2_SIZE(numFourCC)); 266 VBOXVHWACMD_QUERYINFO2 *pInfo2; 267 Assert(pCmd); 268 if (!pCmd) 269 { 270 LOGREL(("vboxVhwaCommandCreate failed")); 271 return NULL; 272 } 273 274 pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2); 260 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO2, 261 VBOXVHWAINFO2_SIZE(numFourCC)); 262 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), NULL); 263 264 VBOXVHWACMD_QUERYINFO2 *pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2); 275 265 pInfo2->numFourCC = numFourCC; 276 266 … … 295 285 int vboxVhwaEnable(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId) 296 286 { 297 int rc = VERR_GENERAL_FAILURE; 298 VBOXVHWACMD* pCmd; 299 300 pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_ENABLE, 0); 301 Assert(pCmd); 302 if (!pCmd) 303 { 304 LOGREL(("vboxVhwaCommandCreate failed")); 305 return rc; 306 } 307 308 rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 287 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_ENABLE, 0); 288 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), VERR_GENERAL_FAILURE); 289 290 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 309 291 AssertRC(rc); 310 292 if(RT_SUCCESS(rc)) … … 325 307 vboxVhwaCommandCheckCompletion(pDevExt); 326 308 327 int rc = VERR_GENERAL_FAILURE; 328 VBOXVHWACMD* pCmd; 329 330 pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_DISABLE, 0); 331 Assert(pCmd); 332 if (!pCmd) 333 { 334 LOGREL(("vboxVhwaCommandCreate failed")); 335 return rc; 336 } 337 338 rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 309 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_DISABLE, 0); 310 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), VERR_GENERAL_FAILURE); 311 312 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 339 313 AssertRC(rc); 340 if (RT_SUCCESS(rc))314 if (RT_SUCCESS(rc)) 341 315 { 342 316 if(RT_SUCCESS(pCmd->rc)) … … 511 485 return VERR_INVALID_STATE; 512 486 513 VBOXVHWACMD * pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId,514 VBOXVHWACMD_TYPE_SURF_DESTROY,sizeof(VBOXVHWACMD_SURF_DESTROY));487 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId, VBOXVHWACMD_TYPE_SURF_DESTROY, 488 sizeof(VBOXVHWACMD_SURF_DESTROY)); 515 489 Assert(pCmd); 516 if (pCmd)490 if (pCmd) 517 491 { 518 492 VBOXVHWACMD_SURF_DESTROY * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_DESTROY); … … 636 610 { 637 611 /* the first thing we need is to post create primary */ 638 VBOXVHWACMD * pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId,639 VBOXVHWACMD_TYPE_SURF_CREATE,sizeof(VBOXVHWACMD_SURF_CREATE));612 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId, VBOXVHWACMD_TYPE_SURF_CREATE, 613 sizeof(VBOXVHWACMD_SURF_CREATE)); 640 614 Assert(pCmd); 641 615 if (pCmd) … … 671 645 { 672 646 /* the first thing we need is to post create primary */ 673 VBOXVHWACMD * pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId,674 VBOXVHWACMD_TYPE_SURF_GETINFO,sizeof(VBOXVHWACMD_SURF_GETINFO));647 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, VidPnSourceId, VBOXVHWACMD_TYPE_SURF_GETINFO, 648 sizeof(VBOXVHWACMD_SURF_GETINFO)); 675 649 Assert(pCmd); 676 650 if (pCmd) … … 844 818 PVBOXWDDM_OVERLAYFLIP_INFO pOurInfo = (PVBOXWDDM_OVERLAYFLIP_INFO)pFlipInfo->pPrivateDriverData; 845 819 846 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 847 VBOXVHWACMD_TYPE_SURF_FLIP, sizeof(VBOXVHWACMD_SURF_FLIP)); 820 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 821 VBOXVHWACMD_TYPE_SURF_FLIP, 822 sizeof(VBOXVHWACMD_SURF_FLIP)); 848 823 Assert(pCmd); 849 if (pCmd)824 if (pCmd) 850 825 { 851 826 VBOXVHWACMD_SURF_FLIP * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); … … 915 890 916 891 int rc; 917 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 918 VBOXVHWACMD_TYPE_SURF_FLIP, RT_OFFSETOF(VBOXVHWACMD_SURF_COLORFILL, u.in.aRects[pCF->ClrFill.Rects.cRects])); 892 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = 893 vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, VBOXVHWACMD_TYPE_SURF_FLIP, 894 RT_OFFSETOF(VBOXVHWACMD_SURF_COLORFILL, u.in.aRects[pCF->ClrFill.Rects.cRects])); 919 895 Assert(pCmd); 920 896 if(pCmd) … … 1003 979 PVBOXWDDM_OVERLAY_INFO pOurInfo = (PVBOXWDDM_OVERLAY_INFO)pOverlayInfo->pPrivateDriverData; 1004 980 1005 VBOXVHWACMD* pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 1006 VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 981 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * pCmd = vboxVhwaCommandCreate(pOverlay->pDevExt, pOverlay->VidPnSourceId, 982 VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, 983 sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 1007 984 Assert(pCmd); 1008 if (pCmd)985 if (pCmd) 1009 986 { 1010 987 VBOXVHWACMD_SURF_OVERLAY_UPDATE * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVhwa.h
r69500 r71590 23 23 #include "VBoxMPShgsmi.h" 24 24 25 VBOXVHWACMD * vboxVhwaCommandCreate(PVBOXMP_DEVEXT pDevExt,26 D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId,27 VBOXVHWACMD_TYPE enmCmd,28 VBOXVHWACMD_LENGTH cbCmd);25 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * vboxVhwaCommandCreate(PVBOXMP_DEVEXT pDevExt, 26 D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, 27 VBOXVHWACMD_TYPE enmCmd, 28 VBOXVHWACMD_LENGTH cbCmd); 29 29 30 void vboxVhwaCommandFree(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd); 31 int vboxVhwaCommandSubmit(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd); 32 int vboxVhwaCommandSubmit(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd); 33 void vboxVhwaCommandSubmitAsynchAndComplete(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd); 30 void vboxVhwaCommandFree(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 31 int vboxVhwaCommandSubmit(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * pCmd); 32 void vboxVhwaCommandSubmitAsynchAndComplete(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 34 33 35 34 #ifndef VBOXVHWA_WITH_SHGSMI 36 typedef DECLCALLBACK(void) FNVBOXVHWACMDCOMPLETION(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD * pCmd, void * pContext); 35 typedef DECLCALLBACK(void) FNVBOXVHWACMDCOMPLETION(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * pCmd, 36 void *pvContext); 37 37 typedef FNVBOXVHWACMDCOMPLETION *PFNVBOXVHWACMDCOMPLETION; 38 38 39 void vboxVhwaCommandSubmitAsynch(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext); 40 void vboxVhwaCommandSubmitAsynchByEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD* pCmd, RTSEMEVENT hEvent); 39 void vboxVhwaCommandSubmitAsynch(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 40 PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext); 41 void vboxVhwaCommandSubmitAsynchByEvent(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, RTSEMEVENT hEvent); 41 42 42 #define VBOXVHWA_CMD2LISTENTRY(_pCmd) ((PVBOXVTLIST_ENTRY)&(_pCmd)->u.pNext)43 #define VBOXVHWA_LISTENTRY2CMD(_pEntry) ( (VBOXVHWACMD *)((uint8_t *)(_pEntry) - RT_OFFSETOF(VBOXVHWACMD, u.pNext)) )43 #define VBOXVHWA_CMD2LISTENTRY(_pCmd) ((PVBOXVTLIST_ENTRY)&(_pCmd)->u.pNext) 44 #define VBOXVHWA_LISTENTRY2CMD(_pEntry) ( (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *)((uint8_t *)(_pEntry) - RT_OFFSETOF(VBOXVHWACMD, u.pNext)) ) 44 45 45 DECLINLINE(void) vboxVhwaPutList(VBOXVTLIST *pList, VBOXVHWACMD *pCmd)46 DECLINLINE(void) vboxVhwaPutList(VBOXVTLIST *pList, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 46 47 { 47 48 vboxVtListPut(pList, VBOXVHWA_CMD2LISTENTRY(pCmd), VBOXVHWA_CMD2LISTENTRY(pCmd)); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r71514 r71590 211 211 int vboxWddmGhDisplayPostInfoScreen(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData, const POINT * pVScreenPos, uint16_t fFlags) 212 212 { 213 void *p = VBoxHGSMIBufferAlloc (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 214 sizeof (VBVAINFOSCREEN), 215 HGSMI_CH_VBVA, 216 VBVA_INFO_SCREEN); 217 if (!p) 213 VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *pScreen = 214 (VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 215 sizeof(VBVAINFOSCREEN), 216 HGSMI_CH_VBVA, 217 VBVA_INFO_SCREEN); 218 if (!pScreen != NULL) 218 219 { 219 220 WARN(("VBoxHGSMIBufferAlloc failed")); 220 221 221 return VERR_OUT_OF_RESOURCES; 222 222 } 223 224 VBVAINFOSCREEN *pScreen = (VBVAINFOSCREEN *)p;225 223 226 224 int rc = vboxWddmScreenInfoInit(pScreen, pAllocData, pVScreenPos, fFlags); 227 225 if (RT_SUCCESS(rc)) 228 226 { 229 pScreen->u32StartOffset 230 231 rc = VBoxHGSMIBufferSubmit (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, p);227 pScreen->u32StartOffset = 0; //(uint32_t)offVram; /* we pretend the view is located at the start of each framebuffer */ 228 229 rc = VBoxHGSMIBufferSubmit(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pScreen); 232 230 if (RT_FAILURE(rc)) 233 231 WARN(("VBoxHGSMIBufferSubmit failed %d", rc)); … … 236 234 WARN(("VBoxHGSMIBufferSubmit failed %d", rc)); 237 235 238 VBoxHGSMIBufferFree (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, p);236 VBoxHGSMIBufferFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pScreen); 239 237 240 238 return rc; … … 251 249 252 250 /* Issue the screen info command. */ 253 void *p = VBoxHGSMIBufferAlloc (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 254 sizeof (VBVAINFOVIEW), 255 HGSMI_CH_VBVA, 256 VBVA_INFO_VIEW); 257 if (!p) 251 VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_HOST *pView = 252 (VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, 253 sizeof(VBVAINFOVIEW), HGSMI_CH_VBVA, VBVA_INFO_VIEW); 254 if (!pView) 258 255 { 259 256 WARN(("VBoxHGSMIBufferAlloc failed")); 260 257 return VERR_OUT_OF_RESOURCES; 261 258 } 262 263 VBVAINFOVIEW *pView = (VBVAINFOVIEW *)p;264 265 259 pView->u32ViewIndex = pAllocData->SurfDesc.VidPnSourceId; 266 260 pView->u32ViewOffset = (uint32_t)offVram; /* we pretend the view is located at the start of each framebuffer */ 267 261 pView->u32ViewSize = vboxWddmVramCpuVisibleSegmentSize(pDevExt)/VBoxCommonFromDeviceExt(pDevExt)->cDisplays; 268 269 262 pView->u32MaxScreenSize = pView->u32ViewSize; 270 263 271 int rc = VBoxHGSMIBufferSubmit (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, p );264 int rc = VBoxHGSMIBufferSubmit (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pView); 272 265 if (RT_FAILURE(rc)) 273 266 WARN(("VBoxHGSMIBufferSubmit failed %d", rc)); 274 267 275 VBoxHGSMIBufferFree (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, p); 276 268 VBoxHGSMIBufferFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, pView); 277 269 return rc; 278 270 } … … 1561 1553 1562 1554 uint16_t chInfo; 1563 uint8_t *pvCmd = HGSMIBufferDataAndChInfoFromOffset (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, offCmd, &chInfo); 1555 uint8_t RT_UNTRUSTED_VOLATILE_HOST *pvCmd = 1556 HGSMIBufferDataAndChInfoFromOffset(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx.Heap.area, offCmd, &chInfo); 1564 1557 if (!pvCmd) 1565 1558 { … … 1572 1565 case VBVA_CMDVBVA_CTL: 1573 1566 { 1574 int rc = VBoxSHGSMICommandProcessCompletion (&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, (VBOXSHGSMIHEADER*)pvCmd, TRUE /*bool bIrq*/ , &CtlList); 1567 int rc = VBoxSHGSMICommandProcessCompletion(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, 1568 (VBOXSHGSMIHEADER *)pvCmd, TRUE /*bool bIrq*/ , &CtlList); 1575 1569 AssertRC(rc); 1576 1570 break; … … 1718 1712 { 1719 1713 uint16_t chInfo; 1720 uint8_t *pvCmd = HGSMIBufferDataAndChInfoFromOffset(&pHeap->Heap.area, offCmd, &chInfo); 1714 uint8_t RT_UNTRUSTED_VOLATILE_GUEST *pvCmd = 1715 HGSMIBufferDataAndChInfoFromOffset(&pHeap->Heap.area, offCmd, &chInfo); 1721 1716 Assert(pvCmd); 1722 1717 if (pvCmd) … … 3962 3957 } 3963 3958 UINT cbCmd = VBOXVDMACMD_SIZE(VBOXVDMACMD_DMA_BPB_TRANSFER); 3964 PVBOXVDMACBUF_DR pDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd);3959 VBOXVDMACBUF_DR RT_UNTRUSTED_VOLATILE_HOST *pDr = vboxVdmaCBufDrCreate(&pDevExt->u.primary.Vdma, cbCmd); 3965 3960 Assert(pDr); 3966 3961 if (pDr) -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h
r71323 r71590 164 164 } 165 165 166 DECLINLINE(int) vboxWddmScreenInfoInit(VBVAINFOSCREEN *pScreen, const VBOXWDDM_ALLOC_DATA *pAllocData, const POINT * pVScreenPos, uint16_t fFlags) 166 DECLINLINE(int) vboxWddmScreenInfoInit(VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *pScreen, 167 const VBOXWDDM_ALLOC_DATA *pAllocData, const POINT * pVScreenPos, uint16_t fFlags) 167 168 { 168 169 VBOXVIDEOOFFSET offVram = vboxWddmAddrFramOffset(&pAllocData->Addr); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPInternal.cpp
r69500 r71590 452 452 453 453 static DECLCALLBACK(int) 454 VBoxVbvaChannelGenericHandlerCB(void *pvHandler, uint16_t u16ChannelInfo, void *pvBuffer, HGSMISIZE cbBuffer) 454 VBoxVbvaChannelGenericHandlerCB(void *pvHandler, uint16_t u16ChannelInfo, 455 void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer, HGSMISIZE cbBuffer) 455 456 { 456 457 VBVA_CHANNELCONTEXTS *pCallbacks = (VBVA_CHANNELCONTEXTS*)pvHandler; -
trunk/src/VBox/Additions/common/VBoxVideo/HGSMIBase.cpp
r69309 r71590 60 60 DECLHIDDEN(int) VBoxHGSMIReportFlagsLocation(PHGSMIGUESTCOMMANDCONTEXT pCtx, HGSMIOFFSET offLocation) 61 61 { 62 HGSMIBUFFERLOCATION *p; 63 64 /* Allocate the IO buffer. */65 p = (HGSMIBUFFERLOCATION*)VBoxHGSMIBufferAlloc(pCtx, sizeof(*p), HGSMI_CH_HGSMI,66 HGSMI_CC_HOST_FLAGS_LOCATION);62 63 /* Allocate the IO buffer. */ 64 HGSMIBUFFERLOCATION RT_UNTRUSTED_VOLATILE_HOST *p = 65 (HGSMIBUFFERLOCATION RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pCtx, sizeof(*p), HGSMI_CH_HGSMI, 66 HGSMI_CC_HOST_FLAGS_LOCATION); 67 67 if (!p) 68 68 return VERR_NO_MEMORY; … … 90 90 DECLHIDDEN(int) VBoxHGSMISendCapsInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx, uint32_t fCaps) 91 91 { 92 VBVACAPS *p; 93 94 /* Allocate the IO buffer. */95 p = (VBVACAPS*)VBoxHGSMIBufferAlloc(pCtx, sizeof(*p), HGSMI_CH_VBVA, VBVA_INFO_CAPS);92 93 /* Allocate the IO buffer. */ 94 VBVACAPS RT_UNTRUSTED_VOLATILE_HOST *p = 95 (VBVACAPS RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pCtx, sizeof(*p), HGSMI_CH_VBVA, VBVA_INFO_CAPS); 96 96 97 97 if (!p) -
trunk/src/VBox/Additions/common/VBoxVideo/HGSMIBuffers.cpp
r69309 r71590 72 72 * @param u16Op the HGSMI command to be sent, set to the descriptor 73 73 */ 74 DECLHIDDEN(void *) VBoxHGSMIBufferAlloc(PHGSMIGUESTCOMMANDCONTEXT pCtx,75 HGSMISIZE cbData,76 uint8_t u8Ch,77 uint16_t u16Op)74 DECLHIDDEN(void RT_UNTRUSTED_VOLATILE_HOST *) VBoxHGSMIBufferAlloc(PHGSMIGUESTCOMMANDCONTEXT pCtx, 75 HGSMISIZE cbData, 76 uint8_t u8Ch, 77 uint16_t u16Op) 78 78 { 79 79 #ifdef VBOX_WDDM_MINIPORT 80 return VBoxSHGSMIHeapAlloc 80 return VBoxSHGSMIHeapAlloc(&pCtx->heapCtx, cbData, u8Ch, u16Op); 81 81 #else 82 return HGSMIHeapAlloc 82 return HGSMIHeapAlloc(&pCtx->heapCtx, cbData, u8Ch, u16Op); 83 83 #endif 84 84 } … … 91 91 * @param pvBuffer the pointer returned by @a VBoxHGSMIBufferAlloc 92 92 */ 93 DECLHIDDEN(void) VBoxHGSMIBufferFree(PHGSMIGUESTCOMMANDCONTEXT pCtx, 94 void *pvBuffer) 93 DECLHIDDEN(void) VBoxHGSMIBufferFree(PHGSMIGUESTCOMMANDCONTEXT pCtx, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 95 94 { 96 95 #ifdef VBOX_WDDM_MINIPORT 97 VBoxSHGSMIHeapFree 96 VBoxSHGSMIHeapFree(&pCtx->heapCtx, pvBuffer); 98 97 #else 99 HGSMIHeapFree 98 HGSMIHeapFree(&pCtx->heapCtx, pvBuffer); 100 99 #endif 101 100 } … … 107 106 * @param pvBuffer the pointer returned by @a VBoxHGSMIBufferAlloc 108 107 */ 109 DECLHIDDEN(int) VBoxHGSMIBufferSubmit(PHGSMIGUESTCOMMANDCONTEXT pCtx, 110 void *pvBuffer) 108 DECLHIDDEN(int) VBoxHGSMIBufferSubmit(PHGSMIGUESTCOMMANDCONTEXT pCtx, void RT_UNTRUSTED_VOLATILE_HOST *pvBuffer) 111 109 { 112 110 /* Initialize the buffer and get the offset for port IO. */ 113 HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset 111 HGSMIOFFSET offBuffer = HGSMIHeapBufferOffset(HGSMIGUESTCMDHEAP_GET(&pCtx->heapCtx), pvBuffer); 114 112 115 113 Assert(offBuffer != HGSMIOFFSET_VOID); -
trunk/src/VBox/Additions/common/VBoxVideo/HGSMIHostCmd.cpp
r69309 r71590 76 76 * be completed 77 77 */ 78 DECLHIDDEN(void) VBoxHGSMIHostCmdComplete(PHGSMIHOSTCOMMANDCONTEXT pCtx, 79 void *pvMem) 80 { 81 HGSMIBUFFERHEADER *pHdr = HGSMIBufferHeaderFromData(pvMem); 78 DECLHIDDEN(void) VBoxHGSMIHostCmdComplete(PHGSMIHOSTCOMMANDCONTEXT pCtx, void RT_UNTRUSTED_VOLATILE_HOST *pvMem) 79 { 80 HGSMIBUFFERHEADER RT_UNTRUSTED_VOLATILE_GUEST *pHdr = HGSMIBufferHeaderFromData(pvMem); 82 81 HGSMIOFFSET offMem = HGSMIPointerToOffset(&pCtx->areaCtx, pHdr); 83 82 Assert(offMem != HGSMIOFFSET_VOID); 84 if(offMem != HGSMIOFFSET_VOID) 85 { 83 if (offMem != HGSMIOFFSET_VOID) 86 84 HGSMINotifyHostCmdComplete(pCtx, offMem); 87 }88 85 } 89 86 -
trunk/src/VBox/Additions/common/VBoxVideo/Modesetting.cpp
r71488 r71590 152 152 int rc; 153 153 /* Issue the screen info command. */ 154 void *p = VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVAINFOVIEW) * u32Count,155 HGSMI_CH_VBVA, VBVA_INFO_VIEW);156 if (p)157 {158 VBVAINFOVIEW *pInfo = (VBVAINFOVIEW *)p;159 rc = pfnFill(pvData, pInfo, u32Count);154 VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_HOST *pInfo = 155 (VBVAINFOVIEW RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVAINFOVIEW) * u32Count, 156 HGSMI_CH_VBVA, VBVA_INFO_VIEW); 157 if (pInfo) 158 { 159 rc = pfnFill(pvData, (VBVAINFOVIEW *)pInfo /* lazy bird */, u32Count); 160 160 if (RT_SUCCESS(rc)) 161 VBoxHGSMIBufferSubmit (pCtx, p);162 VBoxHGSMIBufferFree(pCtx, p );161 VBoxHGSMIBufferSubmit(pCtx, pInfo); 162 VBoxHGSMIBufferFree(pCtx, pInfo); 163 163 } 164 164 else … … 294 294 { 295 295 /* Issue the screen info command. */ 296 void *p = VBoxHGSMIBufferAlloc(pCtx, 297 sizeof (VBVAINFOSCREEN), 298 HGSMI_CH_VBVA, 299 VBVA_INFO_SCREEN); 300 if (!p) 301 { 302 // LogFunc(("HGSMIHeapAlloc failed\n")); 303 } 304 else 305 { 306 VBVAINFOSCREEN *pScreen = (VBVAINFOSCREEN *)p; 307 296 VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *pScreen = 297 (VBVAINFOSCREEN RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVAINFOSCREEN), 298 HGSMI_CH_VBVA, VBVA_INFO_SCREEN); 299 if (pScreen != NULL) 300 { 308 301 pScreen->u32ViewIndex = cDisplay; 309 302 pScreen->i32OriginX = cOriginX; … … 316 309 pScreen->u16Flags = fFlags; 317 310 318 VBoxHGSMIBufferSubmit(pCtx, p); 319 320 VBoxHGSMIBufferFree(pCtx, p); 311 VBoxHGSMIBufferSubmit(pCtx, pScreen); 312 313 VBoxHGSMIBufferFree(pCtx, pScreen); 314 } 315 else 316 { 317 // LogFunc(("HGSMIHeapAlloc failed\n")); 321 318 } 322 319 } … … 338 335 uint32_t cWidth, uint32_t cHeight) 339 336 { 340 int rc = VINF_SUCCESS;337 int rc; 341 338 VBVAREPORTINPUTMAPPING *p; 342 339 // Log(("%s: cOriginX=%d, cOriginY=%d, cWidth=%u, cHeight=%u\n", __PRETTY_FUNCTION__, (int)cOriginX, (int)cOriginX, … … 377 374 { 378 375 int rc; 379 void *p; 380 381 AssertPtr(paHints); 382 if (!VALID_PTR(paHints)) 383 return VERR_INVALID_POINTER; 384 385 p = VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVAQUERYMODEHINTS) 386 + cScreens * sizeof(VBVAMODEHINT), 387 HGSMI_CH_VBVA, VBVA_QUERY_MODE_HINTS); 388 if (!p) 389 { 390 // LogFunc(("HGSMIHeapAlloc failed\n")); 391 return VERR_NO_MEMORY; 392 } 393 else 394 { 395 VBVAQUERYMODEHINTS *pQuery = (VBVAQUERYMODEHINTS *)p; 396 376 VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_HOST *pQuery; 377 378 AssertPtrReturn(paHints, VERR_INVALID_POINTER); 379 pQuery = (VBVAQUERYMODEHINTS RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pCtx, 380 sizeof(VBVAQUERYMODEHINTS) 381 + cScreens * sizeof(VBVAMODEHINT), 382 HGSMI_CH_VBVA, VBVA_QUERY_MODE_HINTS); 383 if (pQuery != NULL) 384 { 397 385 pQuery->cHintsQueried = cScreens; 398 386 pQuery->cbHintStructureGuest = sizeof(VBVAMODEHINT); 399 387 pQuery->rc = VERR_NOT_SUPPORTED; 400 388 401 VBoxHGSMIBufferSubmit(pCtx, p );389 VBoxHGSMIBufferSubmit(pCtx, pQuery); 402 390 rc = pQuery->rc; 403 391 if (RT_SUCCESS(rc)) 404 memcpy(paHints, ((uint8_t *)p) + sizeof(VBVAQUERYMODEHINTS), 405 cScreens * sizeof(VBVAMODEHINT)); 406 407 VBoxHGSMIBufferFree(pCtx, p); 392 memcpy(paHints, (void *)(pQuery + 1), cScreens * sizeof(VBVAMODEHINT)); 393 394 VBoxHGSMIBufferFree(pCtx, pQuery); 395 } 396 else 397 { 398 // LogFunc(("HGSMIHeapAlloc failed\n")); 399 rc = VERR_NO_MEMORY; 408 400 } 409 401 return rc; -
trunk/src/VBox/Additions/common/VBoxVideo/VBVABase.cpp
r69309 r71590 56 56 57 57 58 static bool vboxVBVAInformHost(PVBVABUFFERCONTEXT pCtx, 59 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, 60 int32_t cScreen, bool bEnable) 61 { 62 bool bRc = false; 58 static bool vboxVBVAInformHost(PVBVABUFFERCONTEXT pCtx, PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, int32_t cScreen, bool fEnable) 59 { 60 bool fRc = false; 63 61 64 62 #if 0 /* All callers check this */ … … 66 64 #endif 67 65 { 68 void *p = VBoxHGSMIBufferAlloc(pHGSMICtx, 69 sizeof (VBVAENABLE_EX), 70 HGSMI_CH_VBVA, 71 VBVA_ENABLE); 72 if (!p) 73 { 74 // LogFunc(("HGSMIHeapAlloc failed\n")); 75 } 76 else 77 { 78 VBVAENABLE_EX *pEnable = (VBVAENABLE_EX *)p; 79 80 pEnable->Base.u32Flags = bEnable? VBVA_F_ENABLE: VBVA_F_DISABLE; 66 VBVAENABLE_EX RT_UNTRUSTED_VOLATILE_HOST *pEnable = 67 (VBVAENABLE_EX RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(pHGSMICtx, sizeof(VBVAENABLE_EX), 68 HGSMI_CH_VBVA, VBVA_ENABLE); 69 if (pEnable != NULL) 70 { 71 pEnable->Base.u32Flags = fEnable ? VBVA_F_ENABLE : VBVA_F_DISABLE; 81 72 pEnable->Base.u32Offset = pCtx->offVRAMBuffer; 82 73 pEnable->Base.i32Result = VERR_NOT_SUPPORTED; … … 87 78 } 88 79 89 VBoxHGSMIBufferSubmit(pHGSMICtx, p); 90 91 if (bEnable) 92 { 93 bRc = RT_SUCCESS(pEnable->Base.i32Result); 94 } 80 VBoxHGSMIBufferSubmit(pHGSMICtx, pEnable); 81 82 if (fEnable) 83 fRc = RT_SUCCESS(pEnable->Base.i32Result); 95 84 else 96 { 97 bRc = true; 98 } 99 100 VBoxHGSMIBufferFree(pHGSMICtx, p); 101 } 102 } 103 104 return bRc; 85 fRc = true; 86 87 VBoxHGSMIBufferFree(pHGSMICtx, pEnable); 88 } 89 else 90 { 91 // LogFunc(("HGSMIHeapAlloc failed\n")); 92 } 93 } 94 95 return fRc; 105 96 } 106 97 … … 112 103 VBVABUFFER *pVBVA, int32_t cScreen) 113 104 { 114 bool bRc = false;105 bool fRc = false; 115 106 116 107 // LogFlowFunc(("pVBVA %p\n", pVBVA)); … … 136 127 pCtx->pVBVA = pVBVA; 137 128 138 bRc = vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, true);139 } 140 141 if (! bRc)129 fRc = vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, true); 130 } 131 132 if (!fRc) 142 133 { 143 134 VBoxVBVADisable(pCtx, pHGSMICtx, cScreen); 144 135 } 145 136 146 return bRc;137 return fRc; 147 138 } 148 139 … … 158 149 159 150 vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, false); 160 161 return;162 151 } 163 152 … … 165 154 PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx) 166 155 { 167 bool bRc = false;156 bool fRc = false; 168 157 169 158 // LogFunc(("flags = 0x%08X\n", pCtx->pVBVA? pCtx->pVBVA->u32HostEvents: -1)); … … 205 194 pCtx->pRecord = pRecord; 206 195 207 bRc = true;208 } 209 } 210 211 return bRc;196 fRc = true; 197 } 198 } 199 200 return fRc; 212 201 } 213 202 … … 228 217 pCtx->fHwBufferOverflow = false; 229 218 pCtx->pRecord = NULL; 230 231 return;232 219 } 233 220 … … 245 232 { 246 233 /* Issue the flush command. */ 247 void *p = VBoxHGSMIBufferAlloc(pCtx, 248 sizeof (VBVAFLUSH), 249 HGSMI_CH_VBVA, 250 VBVA_FLUSH); 251 if (!p) 234 VBVAFLUSH RT_UNTRUSTED_VOLATILE_HOST *pFlush = 235 (VBVAFLUSH RT_UNTRUSTED_VOLATILE_HOST * )VBoxHGSMIBufferAlloc(pCtx, sizeof(VBVAFLUSH), HGSMI_CH_VBVA, VBVA_FLUSH); 236 if (pFlush != NULL) 237 { 238 pFlush->u32Reserved = 0; 239 240 VBoxHGSMIBufferSubmit(pCtx, pFlush); 241 242 VBoxHGSMIBufferFree(pCtx, pFlush); 243 } 244 else 252 245 { 253 246 // LogFunc(("HGSMIHeapAlloc failed\n")); 254 247 } 255 else256 {257 VBVAFLUSH *pFlush = (VBVAFLUSH *)p;258 259 pFlush->u32Reserved = 0;260 261 VBoxHGSMIBufferSubmit(pCtx, p);262 263 VBoxHGSMIBufferFree(pCtx, p);264 }265 266 return;267 248 } 268 249 … … 286 267 memcpy (&pVBVA->au8Data[0], (uint8_t *)p + u32BytesTillBoundary, i32Diff); 287 268 } 288 289 return;290 269 } 291 270 -
trunk/src/VBox/Additions/x11/vboxvideo/HGSMIMemAlloc.h
r69346 r71590 48 48 49 49 int HGSMIMAInit(HGSMIMADATA *pMA, const HGSMIAREA *pArea, 50 HGSMIOFFSET *paDescriptors, uint32_t cDescriptors, HGSMISIZE cbMaxBlock,51 const HGSMIENV *pEnv);50 HGSMIOFFSET *paDescriptors, uint32_t cDescriptors, 51 HGSMISIZE cbMaxBlock, const HGSMIENV *pEnv); 52 52 void HGSMIMAUninit(HGSMIMADATA *pMA); 53 53 54 void *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb);55 void HGSMIMAFree(HGSMIMADATA *pMA, void *pv);54 void RT_UNTRUSTED_VOLATILE_GUEST *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb); 55 void HGSMIMAFree(HGSMIMADATA *pMA, void RT_UNTRUSTED_VOLATILE_GUEST *pv); 56 56 57 57 RT_C_DECLS_END -
trunk/src/VBox/Additions/x11/vboxvideo/VBoxVideoIPRT.h
r69346 r71590 94 94 } while (0) 95 95 # define AssertPtr assert 96 # define AssertPtrReturn(pv, rcRet) do { assert(pv); if (pv) {} else return(rcRet); } while(0) 96 97 # define AssertRC(expr) assert (!expr) 97 98 #else … … 99 100 # define AssertFailed() do { } while(0) 100 101 # define AssertMsg(expr, msg) do { } while(0) 101 # define AssertPtr(expr) do { } while(0) 102 # define AssertPtr(ptr) do { } while(0) 103 # define AssertPtrReturn(pv, rcRet) do { if (pv) {} else return(rcRet); } while(0) 102 104 # define AssertRC(expr) do { } while(0) 103 105 #endif … … 136 138 # define UINT32_C(Value) (Value ## U) 137 139 #endif 140 #define RT_UNTRUSTED_GUEST 141 #define RT_UNTRUSTED_VOLATILE_GUEST volatile 142 #define RT_UNTRUSTED_HOST 143 #define RT_UNTRUSTED_VOLATILE_HOST volatile 144 #define RT_UNTRUSTED_HSTGST 145 #define RT_UNTRUSTED_VOLATILE_HSTGST volatile 138 146 139 147 #define likely _X_LIKELY -
trunk/src/VBox/Additions/x11/vboxvideo/hgsmimemalloc.c
r69346 r71590 35 35 * submit and free pattern, we replace the generic allocator with a simple 36 36 * Boolean. Need more be said? 37 * 38 * bird> Yes, it's buggy. You never set fAllocated. See HGSMIMAAlloc(). 37 39 */ 38 40 … … 64 66 } 65 67 66 static HGSMIOFFSET HGSMIMAPointerToOffset(const HGSMIMADATA *pMA, const void *pv)68 static HGSMIOFFSET HGSMIMAPointerToOffset(const HGSMIMADATA *pMA, const void RT_UNTRUSTED_VOLATILE_GUEST *pv) 67 69 { 68 70 if (HGSMIAreaContainsPointer(&pMA->area, pv)) 69 {70 71 return HGSMIPointerToOffset(&pMA->area, pv); 71 }72 72 73 73 AssertFailed(); … … 75 75 } 76 76 77 static void *HGSMIMAOffsetToPointer(const HGSMIMADATA *pMA, HGSMIOFFSET off)77 static void RT_UNTRUSTED_VOLATILE_GUEST *HGSMIMAOffsetToPointer(const HGSMIMADATA *pMA, HGSMIOFFSET off) 78 78 { 79 79 if (HGSMIAreaContainsOffset(&pMA->area, off)) 80 {81 80 return HGSMIOffsetToPointer(&pMA->area, off); 82 }83 81 84 82 AssertFailed(); … … 86 84 } 87 85 88 void *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb)86 void RT_UNTRUSTED_VOLATILE_GUEST *HGSMIMAAlloc(HGSMIMADATA *pMA, HGSMISIZE cb) 89 87 { 90 88 (void)cb; … … 93 91 HGSMIOFFSET off = pMA->area.offBase; 94 92 return HGSMIMAOffsetToPointer(pMA, off); 95 pMA->fAllocated = true; 93 pMA->fAllocated = true; /** @todo r=bird: Errr. what's this doing *after* the return statement? */ 96 94 } 97 95 98 void HGSMIMAFree(HGSMIMADATA *pMA, void *pv)96 void HGSMIMAFree(HGSMIMADATA *pMA, void RT_UNTRUSTED_VOLATILE_GUEST *pv) 99 97 { 100 98 HGSMIOFFSET off = HGSMIMAPointerToOffset(pMA, pv); 101 99 if (off != HGSMIOFFSET_VOID) 102 {103 100 pMA->fAllocated = false; 104 }105 101 else 106 {107 102 AssertFailed(); 108 }109 103 } 104
Note:
See TracChangeset
for help on using the changeset viewer.