Lines Matching defs:pVGAState

337 static int vbvaFlushProcess (unsigned uScreenId, PVGASTATE pVGAState, VBVAPARTIALRECORD *pPartialRecord, VBVABUFFER *pVBVA)
378 pVGAState->pDrv->pfnVBVAUpdateBegin (pVGAState->pDrv, uScreenId);
383 pVGAState->pDrv->pfnVBVAUpdateProcess (pVGAState->pDrv, uScreenId, phdr, cbCmd);
442 pVGAState->pDrv->pfnVBVAUpdateEnd (pVGAState->pDrv, uScreenId, dirtyRect.xLeft, dirtyRect.yTop,
447 pVGAState->pDrv->pfnVBVAUpdateEnd (pVGAState->pDrv, uScreenId, 0, 0, 0, 0);
454 static int vbvaFlush (PVGASTATE pVGAState, VBVACONTEXT *pCtx)
465 vbvaFlushProcess (uScreenId, pVGAState, pPartialRecord, pVBVA);
473 static int vbvaResize (PVGASTATE pVGAState, VBVAVIEW *pView, const VBVAINFOSCREEN *pNewScreen)
481 uint8_t *pu8VRAM = pVGAState->vram_ptrR3 + pView->view.u32ViewOffset;
483 int rc = pVGAState->pDrv->pfnVBVAResize (pVGAState->pDrv, &pView->view, &pView->screen, pu8VRAM);
490 static int vbvaEnable (unsigned uScreenId, PVGASTATE pVGAState, VBVACONTEXT *pCtx, VBVABUFFER *pVBVA, uint32_t u32Offset, bool fRestored)
496 if (pVGAState->pDrv->pfnVBVAEnable)
501 rc = pVGAState->pDrv->pfnVBVAEnable (pVGAState->pDrv, uScreenId, &pVBVA->hostFlags, false);
536 static int vbvaDisable (unsigned uScreenId, PVGASTATE pVGAState, VBVACONTEXT *pCtx)
539 vbvaFlush (pVGAState, pCtx);
555 pVGAState->pDrv->pfnVBVADisable (pVGAState->pDrv, uScreenId);
559 bool VBVAIsEnabled(PVGASTATE pVGAState)
561 PHGSMIINSTANCE pHGSMI = pVGAState->pHGSMI;
596 static int vbvaUpdateMousePointerShape(PVGASTATE pVGAState, VBVAMOUSESHAPEINFO *pMouseShapeInfo, bool fShape, const uint8_t *pu8Shape)
599 LogFlowFunc(("pVGAState %p, pMouseShapeInfo %p, fShape %d, pu8Shape %p\n",
600 pVGAState, pMouseShapeInfo, fShape, pu8Shape));
607 rc = pVGAState->pDrv->pfnVBVAMousePointerShape (pVGAState->pDrv,
618 rc = pVGAState->pDrv->pfnVBVAMousePointerShape (pVGAState->pDrv,
629 static int vbvaMousePointerShape (PVGASTATE pVGAState, VBVACONTEXT *pCtx, const VBVAMOUSEPOINTERSHAPE *pShape, HGSMISIZE cbShape)
692 if (pVGAState->pDrv->pfnVBVAMousePointerShape == NULL)
697 int rc = vbvaUpdateMousePointerShape(pVGAState, &pCtx->mouseShapeInfo, fShape, &pShape->au8Data[0]);
781 static VBOXVHWACMD* vbvaVHWAHHCommandCreate (PVGASTATE pVGAState, VBOXVHWACMD_TYPE enmCmd, int32_t iDisplay, VBOXVHWACMD_LENGTH cbCmd)
805 static void vbvaVHWACommandComplete(PVGASTATE pVGAState, PVBOXVHWACMD pCommand, bool fAsyncCommand)
810 vbvaVHWACommandCompleteAsync(&pVGAState->IVBVACallbacks, pCommand);
820 static void vbvaVHWACommandCompleteAllPending(PVGASTATE pVGAState, int rc)
822 if (!ASMAtomicUoReadU32(&pVGAState->pendingVhwaCommands.cPending))
827 PDMCritSectEnter(&pVGAState->CritSect, VERR_SEM_BUSY);
829 RTListForEachSafe(&pVGAState->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
832 vbvaVHWACommandComplete(pVGAState, pIter->pCommand, true);
836 ASMAtomicDecU32(&pVGAState->pendingVhwaCommands.cPending);
840 PDMCritSectLeave(&pVGAState->CritSect);
843 static void vbvaVHWACommandClearAllPending(PVGASTATE pVGAState)
845 if (!ASMAtomicUoReadU32(&pVGAState->pendingVhwaCommands.cPending))
850 PDMCritSectEnter(&pVGAState->CritSect, VERR_SEM_BUSY);
852 RTListForEachSafe(&pVGAState->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
855 ASMAtomicDecU32(&pVGAState->pendingVhwaCommands.cPending);
859 PDMCritSectLeave(&pVGAState->CritSect);
862 static void vbvaVHWACommandPend(PVGASTATE pVGAState, PVBOXVHWACMD pCommand)
866 if (ASMAtomicUoReadU32(&pVGAState->pendingVhwaCommands.cPending) < VBOX_VHWA_MAX_PENDING_COMMANDS)
873 PDMCritSectEnter(&pVGAState->CritSect, VERR_SEM_BUSY);
874 if (ASMAtomicUoReadU32(&pVGAState->pendingVhwaCommands.cPending) < VBOX_VHWA_MAX_PENDING_COMMANDS)
876 RTListAppend(&pVGAState->pendingVhwaCommands.PendingList, &pPend->Node);
877 ASMAtomicIncU32(&pVGAState->pendingVhwaCommands.cPending);
878 PDMCritSectLeave(&pVGAState->CritSect);
881 PDMCritSectLeave(&pVGAState->CritSect);
891 vbvaVHWACommandCompleteAllPending(pVGAState, rc);
895 vbvaVHWACommandComplete(pVGAState, pCommand, false);
913 static int vbvaVHWACommandSavePending(PVGASTATE pVGAState, PSSMHANDLE pSSM)
915 int rc = SSMR3PutU32(pSSM, pVGAState->pendingVhwaCommands.cPending);
918 RTListForEach(&pVGAState->pendingVhwaCommands.PendingList, pIter, VBOX_VHWA_PENDINGCMD, Node)
920 rc = SSMR3PutU32(pSSM, (uint32_t)(((uint8_t*)pIter->pCommand) - ((uint8_t*)pVGAState->vram_ptrR3)));
926 static int vbvaVHWACommandLoadPending(PVGASTATE pVGAState, PSSMHANDLE pSSM, uint32_t u32Version)
940 PVBOXVHWACMD pCommand = (PVBOXVHWACMD)(((uint8_t*)pVGAState->vram_ptrR3) + off32);
941 vbvaVHWACommandPend(pVGAState, pCommand);
947 static bool vbvaVHWACommandSubmit(PVGASTATE pVGAState, PVBOXVHWACMD pCommand, bool fAsyncCommand)
952 if (pVGAState->pDrv->pfnVHWACommandProcess)
955 int rc = pVGAState->pDrv->pfnVHWACommandProcess(pVGAState->pDrv, pCommand);
990 vbvaVHWACommandComplete(pVGAState, pCommand, fAsyncCommand);
995 static bool vbvaVHWACheckPendingCommands(PVGASTATE pVGAState)
997 if (!ASMAtomicUoReadU32(&pVGAState->pendingVhwaCommands.cPending))
1002 PDMCritSectEnter(&pVGAState->CritSect, VERR_SEM_BUSY);
1004 RTListForEachSafe(&pVGAState->pendingVhwaCommands.PendingList, pIter, pNext, VBOX_VHWA_PENDINGCMD, Node)
1006 if (!vbvaVHWACommandSubmit(pVGAState, pIter->pCommand, true))
1008 PDMCritSectLeave(&pVGAState->CritSect);
1014 ASMAtomicDecU32(&pVGAState->pendingVhwaCommands.cPending);
1018 PDMCritSectLeave(&pVGAState->CritSect);
1023 void vbvaTimerCb(PVGASTATE pVGAState)
1025 vbvaVHWACheckPendingCommands(pVGAState);
1027 static void vbvaVHWAHandleCommand(PVGASTATE pVGAState, PVBOXVHWACMD pCmd)
1029 if (vbvaVHWACheckPendingCommands(pVGAState))
1031 if (vbvaVHWACommandSubmit(pVGAState, pCmd, false))
1035 vbvaVHWACommandPend(pVGAState, pCmd);
1043 static int vbvaVHWAHHCommandPost(PVGASTATE pVGAState, VBOXVHWACMD* pCmd)
1053 vbvaVHWAHandleCommand(pVGAState, pCmd);
1073 int vbvaVHWAConstruct (PVGASTATE pVGAState)
1075 pVGAState->pendingVhwaCommands.cPending = 0;
1076 RTListInit(&pVGAState->pendingVhwaCommands.PendingList);
1078 VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(pVGAState, VBOXVHWACMD_TYPE_HH_CONSTRUCT, 0, sizeof(VBOXVHWACMD_HH_CONSTRUCT));
1090 PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
1094 pBody->pvVRAM = pVGAState->vram_ptrR3;
1095 pBody->cbVRAM = pVGAState->vram_size;
1097 rc = vbvaVHWAHHCommandPost(pVGAState, pCmd);
1105 /* @todo: set some flag in pVGAState indicating VHWA is not supported */
1117 if (iDisplay >= pVGAState->cMonitors)
1129 int vbvaVHWAReset (PVGASTATE pVGAState)
1131 vbvaVHWACommandClearAllPending(pVGAState);
1134 VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(pVGAState, VBOXVHWACMD_TYPE_HH_RESET, 0, 0);
1143 rc =vbvaVHWAHHCommandPost(pVGAState, pCmd);
1157 if (iDisplay >= pVGAState->cMonitors)
1170 typedef DECLCALLBACK(bool) FNVBOXVHWAHHCMDPRECB(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext);
1173 typedef DECLCALLBACK(bool) FNVBOXVHWAHHCMDPOSTCB(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, int rc, void *pvContext);
1176 int vbvaVHWAHHPost(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, PFNVBOXVHWAHHCMDPRECB pfnPre, PFNVBOXVHWAHHCMDPOSTCB pfnPost, void *pvContext)
1184 if (!pfnPre || pfnPre(pVGAState, pCmd, iDisplay, pvContext))
1186 rc = vbvaVHWAHHCommandPost(pVGAState, pCmd);
1190 if (!pfnPost(pVGAState, pCmd, iDisplay, rc, pvContext))
1212 if (iDisplay >= pVGAState->cMonitors)
1221 int vbvaVHWAEnable (PVGASTATE pVGAState, bool bEnable)
1224 VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(pVGAState,
1230 int rc = vbvaVHWAHHPost (pVGAState, pCmd, NULL, NULL, NULL);
1256 PVGASTATE pVGAState = PPDMIDISPLAYVBVACALLBACKS_2_PVGASTATE(pInterface);
1257 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
1261 if (pVGAState->fGuestCaps & VBVACAPS_COMPLETEGCMD_BY_IOREAD)
1347 static DECLCALLBACK(bool) vboxVBVASaveStateBeginPostCb(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, int rc, void *pvContext)
1379 static DECLCALLBACK(bool) vboxVBVASaveStatePerformPreCb(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
1415 static DECLCALLBACK(bool) vboxVBVASaveStateEndPreCb(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
1427 static DECLCALLBACK(bool) vboxVBVALoadStatePerformPostCb(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, int rc, void *pvContext)
1461 static DECLCALLBACK(bool) vboxVBVALoadStatePerformPreCb(PVGASTATE pVGAState, VBOXVHWACMD *pCmd, uint32_t iDisplay, void *pvContext)
1498 int vboxVBVASaveDevStateExec (PVGASTATE pVGAState, PSSMHANDLE pSSM)
1500 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
1597 rc = SSMR3PutU32 (pSSM, pVGAState->fGuestCaps);
1622 PVGASTATE pVGAState = PDMINS_2_DATA(pDevIns, PVGASTATE);
1628 VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(pVGAState, VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEBEGIN, 0, cbCmd);
1632 vbvaVHWAHHPost (pVGAState, pCmd, NULL, vboxVBVASaveStateBeginPostCb, &VhwaData);
1638 rc = vboxVBVASaveDevStateExec (pVGAState, pSSM);
1646 vbvaVHWAHHPost (pVGAState, pCmd, vboxVBVASaveStatePerformPreCb, NULL, &VhwaData);
1651 rc = vbvaVHWACommandSavePending(pVGAState, pSSM);
1655 vbvaVHWAHHPost (pVGAState, pCmd, vboxVBVASaveStateEndPreCb, NULL, &VhwaData);
1669 for (uint32_t i = 0; i < pVGAState->cMonitors; ++i)
1690 PVGASTATE pVGAState = PDMINS_2_DATA(pDevIns, PVGASTATE);
1691 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
1822 rc = SSMR3GetU32 (pSSM, &pVGAState->fGuestCaps);
1824 pVGAState->pDrv->pfnVBVAGuestCapabilityUpdate(pVGAState->pDrv, pVGAState->fGuestCaps);
1874 VBOXVHWACMD *pCmd = vbvaVHWAHHCommandCreate(pVGAState, VBOXVHWACMD_TYPE_HH_SAVESTATE_LOADPERFORM, 0, cbCmd);
1882 vbvaVHWAHHPost (pVGAState, pCmd, vboxVBVALoadStatePerformPreCb, vboxVBVALoadStatePerformPostCb, &VhwaData);
1889 rc = vbvaVHWACommandLoadPending(pVGAState, pSSM, u32Version);
1900 for (uint32_t i = 0; i < pVGAState->cMonitors; ++i)
1937 PVGASTATE pVGAState = PDMINS_2_DATA(pDevIns, PVGASTATE);
1938 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
1950 Assert(!vboxCmdVBVAIsEnabled(pVGAState));
1952 vbvaEnable (iView, pVGAState, pCtx, pView->pVBVA, pView->u32VBVAOffset, true /* fRestored */);
1953 vbvaResize (pVGAState, pView, &pView->screen);
1959 vbvaUpdateMousePointerShape(pVGAState, &pCtx->mouseShapeInfo, true, pCtx->mouseShapeInfo.pu8Shape);
1966 void VBVARaiseIrq (PVGASTATE pVGAState, uint32_t fFlags)
1968 PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
1969 PDMCritSectEnter(&pVGAState->CritSect, VERR_SEM_BUSY);
1971 HGSMISetHostGuestFlags(pVGAState->pHGSMI, HGSMIHOSTFLAGS_IRQ | fFlags);
1974 PDMCritSectLeave(&pVGAState->CritSect);
1977 static DECLCALLBACK(int) vbvaRaiseIrqEMT(PVGASTATE pVGAState, uint32_t fFlags)
1979 VBVARaiseIrq(pVGAState, fFlags);
1983 void VBVARaiseIrqNoWait(PVGASTATE pVGAState, uint32_t fFlags)
1990 VMR3ReqCallNoWait(PDMDevHlpGetVM(pVGAState->pDevInsR3), VMCPUID_ANY, (PFNRT)vbvaRaiseIrqEMT, 2, pVGAState, fFlags);
1993 int VBVAInfoView(PVGASTATE pVGAState, VBVAINFOVIEW *pView)
1998 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
2014 int VBVAInfoScreen(PVGASTATE pVGAState, VBVAINFOSCREEN *pScreen)
2016 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
2036 vbvaResize (pVGAState, &pCtx->aViews[pScreen->u32ViewIndex], pScreen);
2051 int VBVAGetInfoViewAndScreen(PVGASTATE pVGAState, uint32_t u32ViewIndex, VBVAINFOVIEW *pView, VBVAINFOSCREEN *pScreen)
2053 if (u32ViewIndex >= pVGAState->cMonitors)
2056 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
2083 PVGASTATE pVGAState = (PVGASTATE)pvCallback;
2084 VBVARaiseIrqNoWait (pVGAState, 0);
2099 PVGASTATE pVGAState = (PVGASTATE)pvHandler;
2100 PHGSMIINSTANCE pIns = pVGAState->pHGSMI;
2108 rc = vboxCmdVBVACmdSubmit(pVGAState);
2115 rc =vboxCmdVBVACmdFlush(pVGAState);
2132 rc = vboxCmdVBVACmdCtl(pVGAState, pCtl, cbBuffer - VBoxSHGSMIBufferHeaderSize());
2145 vboxVDMACommand(pVGAState->pVdma, pCmd, cbBuffer - VBoxSHGSMIBufferHeaderSize());
2157 vboxVDMAControl(pVGAState->pVdma, pCmd, cbBuffer - VBoxSHGSMIBufferHeaderSize());
2190 pConf32->u32Value = pVGAState->fHostCursorCapabilities;
2235 if (vboxCmdVBVAIsEnabled(pVGAState))
2257 rc = VBVAInfoView(pVGAState, &View);
2290 rc = vbvaFlush (pVGAState, pCtx);
2302 if (vboxCmdVBVAIsEnabled(pVGAState))
2312 rc = VBVAInfoScreen(pVGAState, &Screen);
2318 if (vboxCmdVBVAIsEnabled(pVGAState))
2373 vbvaFlush (pVGAState, pCtx);
2375 rc = vbvaEnable (uScreenId, pVGAState, pCtx, pVBVA, u32Offset, false /* fRestored */);
2386 rc = vbvaDisable (uScreenId, pVGAState, pCtx);
2416 rc = vbvaMousePointerShape (pVGAState, pCtx, pShape, cbBuffer);
2430 vbvaVHWAHandleCommand(pVGAState, (PVBOXVHWACMD)pvBuffer);
2446 pVGAState->fGuestCaps = pCaps->fCaps;
2447 pVGAState->pDrv->pfnVBVAGuestCapabilityUpdate(pVGAState->pDrv,
2461 pVGAState->fScanLineCfg = pCfg->fFlags;
2508 pVGAState->pDrv->pfnVBVAInputMappingUpdate(pVGAState->pDrv, pReport->x, pReport->y, pReport->cx, pReport->cy);
2543 void VBVAPause(PVGASTATE pVGAState, bool fPause)
2545 if (!pVGAState || !pVGAState->pHGSMI)
2550 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pVGAState->pHGSMI);
2558 void VBVAReset (PVGASTATE pVGAState)
2560 if (!pVGAState || !pVGAState->pHGSMI)
2565 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
2568 vbvaVHWAReset (pVGAState);
2571 uint32_t HgFlags = HGSMIReset (pVGAState->pHGSMI);
2575 PDMDevHlpPCISetIrq(pVGAState->pDevInsR3, 0, PDM_IRQ_LEVEL_LOW);
2580 vbvaFlush (pVGAState, pCtx);
2586 vbvaDisable (uScreenId, pVGAState, pCtx);
2598 int VBVAUpdateDisplay (PVGASTATE pVGAState)
2602 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
2608 rc = vbvaFlush (pVGAState, pCtx);
2693 int VBVAInit (PVGASTATE pVGAState)
2695 PPDMDEVINS pDevIns = pVGAState->pDevInsR3;
2699 int rc = HGSMICreate (&pVGAState->pHGSMI,
2703 pVGAState->vram_ptrR3,
2704 pVGAState->vram_size,
2706 pVGAState,
2711 rc = HGSMIHostChannelRegister (pVGAState->pHGSMI,
2714 pVGAState);
2717 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
2718 pCtx->cViews = pVGAState->cMonitors;
2721 pVGAState->fHostCursorCapabilities = 0;
2729 void VBVADestroy (PVGASTATE pVGAState)
2731 VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext (pVGAState->pHGSMI);
2742 HGSMIDestroy (pVGAState->pHGSMI);
2743 pVGAState->pHGSMI = NULL;