/* * Public hardware buffer methods. */ int vboxVbvaEnable (PVBOXMP_DEVEXT pDevExt, VBOXVBVAINFO *pVbva) { VBVABUFFER *pVBVA = pVbva->pVBVA; // DISPDBG((1, "VBoxDisp::vboxVbvaEnable screen %p vbva off 0x%x\n", ppdev->pjScreen, ppdev->layout.offVBVABuffer)); pVBVA->hostFlags.u32HostEvents = 0; pVBVA->hostFlags.u32SupportedOrders = 0; pVBVA->off32Data = 0; pVBVA->off32Free = 0; RtlZeroMemory (pVBVA->aRecords, sizeof (pVBVA->aRecords)); pVBVA->indexRecordFirst = 0; pVBVA->indexRecordFree = 0; pVBVA->cbPartialWriteThreshold = 256; pVBVA->cbData = pVbva->cbVBVA - sizeof (VBVABUFFER) + sizeof (pVBVA->au8Data); pVbva->fHwBufferOverflow = FALSE; pVbva->pRecord = NULL; int rc = vboxVBVAInformHost (pDevExt, pVbva, TRUE); AssertRC(rc); if (!RT_SUCCESS(rc)) vboxVbvaDisable (pDevExt, pVbva); return rc; }
int vboxVbvaDisable (PVBOXMP_DEVEXT pDevExt, VBOXVBVAINFO *pVbva) { // DISPDBG((1, "VBoxDisp::vbvaDisable called.\n")); pVbva->fHwBufferOverflow = FALSE; pVbva->pRecord = NULL; // ppdev->pVBVA = NULL; return vboxVBVAInformHost (pDevExt, pVbva, FALSE); }
RTDECL(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx, PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, int32_t cScreen) { LogFlowFunc(("\n")); pCtx->fHwBufferOverflow = false; pCtx->pRecord = NULL; pCtx->pVBVA = NULL; vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, false); return; }
/* * Public hardware buffer methods. */ RTDECL(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx, PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx, VBVABUFFER *pVBVA, int32_t cScreen) { bool bRc = false; LogFlowFunc(("pVBVA %p\n", pVBVA)); #if 0 /* All callers check this */ if (ppdev->bHGSMISupported) #endif { LogFunc(("pVBVA %p vbva off 0x%x\n", pVBVA, pCtx->offVRAMBuffer)); pVBVA->hostFlags.u32HostEvents = 0; pVBVA->hostFlags.u32SupportedOrders = 0; pVBVA->off32Data = 0; pVBVA->off32Free = 0; memset(pVBVA->aRecords, 0, sizeof (pVBVA->aRecords)); pVBVA->indexRecordFirst = 0; pVBVA->indexRecordFree = 0; pVBVA->cbPartialWriteThreshold = 256; pVBVA->cbData = pCtx->cbBuffer - sizeof (VBVABUFFER) + sizeof (pVBVA->au8Data); pCtx->fHwBufferOverflow = false; pCtx->pRecord = NULL; pCtx->pVBVA = pVBVA; bRc = vboxVBVAInformHost(pCtx, pHGSMICtx, cScreen, true); } if (!bRc) { VBoxVBVADisable(pCtx, pHGSMICtx, cScreen); } return bRc; }