VBoxMPMisc.h revision e637cb22e348f5665d5473dae55ed785aa7b6e9a
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync/* $Id$ */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync/** @file
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * VBox WDDM Miniport driver
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync/*
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * Copyright (C) 2011 Oracle Corporation
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync *
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * available from http://www.virtualbox.org. This file is free software;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * you can redistribute it and/or modify it under the terms of the GNU
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * General Public License (GPL) as published by the Free Software
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#ifndef ___VBoxMPMisc_h__
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#define ___VBoxMPMisc_h__
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#include "../../common/VBoxVideoTools.h"
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(void) vboxVideoLeDetach(LIST_ENTRY *pList, LIST_ENTRY *pDstList)
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync if (IsListEmpty(pList))
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync {
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync InitializeListHead(pDstList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync }
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync else
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync {
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync *pDstList = *pList;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync Assert(pDstList->Flink->Blink == pList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync Assert(pDstList->Blink->Flink == pList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync /* pDstList->Flink & pDstList->Blink point to the "real| entries, never to pList
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync * since we've checked IsListEmpty(pList) above */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync pDstList->Flink->Blink = pDstList;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync pDstList->Blink->Flink = pDstList;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync InitializeListHead(pList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync }
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync}
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
353e4c614c12b55dbab6685ea690ceb1e6b0e8ddvboxsynctypedef uint32_t VBOXWDDM_HANDLE;
be196d173cf52fa33016912e4745dbe1170ac53avboxsync#define VBOXWDDM_HANDLE_INVALID 0UL
be196d173cf52fa33016912e4745dbe1170ac53avboxsync
be196d173cf52fa33016912e4745dbe1170ac53avboxsynctypedef struct VBOXWDDM_HTABLE
353e4c614c12b55dbab6685ea690ceb1e6b0e8ddvboxsync{
353e4c614c12b55dbab6685ea690ceb1e6b0e8ddvboxsync uint32_t cData;
353e4c614c12b55dbab6685ea690ceb1e6b0e8ddvboxsync uint32_t iNext2Search;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync uint32_t cSize;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync PVOID *paData;
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync} VBOXWDDM_HTABLE, *PVBOXWDDM_HTABLE;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsynctypedef struct VBOXWDDM_HTABLE_ITERATOR
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync{
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync PVBOXWDDM_HTABLE pTbl;
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync uint32_t iCur;
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync uint32_t cLeft;
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync} VBOXWDDM_HTABLE_ITERATOR, *PVBOXWDDM_HTABLE_ITERATOR;
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsync
3633fa76957c4740b8d4372e0dfc938d3c3ea569vboxsyncVOID vboxWddmHTableIterInit(PVBOXWDDM_HTABLE pTbl, PVBOXWDDM_HTABLE_ITERATOR pIter);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncPVOID vboxWddmHTableIterNext(PVBOXWDDM_HTABLE_ITERATOR pIter, VBOXWDDM_HANDLE *phHandle);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncBOOL vboxWddmHTableIterHasNext(PVBOXWDDM_HTABLE_ITERATOR pIter);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncPVOID vboxWddmHTableIterRemoveCur(PVBOXWDDM_HTABLE_ITERATOR pIter);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncVOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS vboxWddmHTableRealloc(PVBOXWDDM_HTABLE pTbl, uint32_t cNewSize);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncVBOXWDDM_HANDLE vboxWddmHTablePut(PVBOXWDDM_HTABLE pTbl, PVOID pvData);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncPVOID vboxWddmHTableRemove(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncPVOID vboxWddmHTableGet(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncPVBOXWDDM_SWAPCHAIN vboxWddmSwapchainCreate();
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(BOOLEAN) vboxWddmSwapchainRetain(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(VOID) vboxWddmSwapchainRelease(PVBOXWDDM_SWAPCHAIN pSwapchain);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncPVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmSwapchainAllocRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncBOOLEAN vboxWddmSwapchainAllocAdd(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmSwapchainAllocRemoveAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmSwapchainDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmSwapchainCtxDestroyAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmSwapchainCtxEscape(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXDISPIFESCAPE_SWAPCHAININFO pSwapchainInfo, UINT cbSize);
be196d173cf52fa33016912e4745dbe1170ac53avboxsyncNTSTATUS vboxWddmSwapchainCtxInit(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
be196d173cf52fa33016912e4745dbe1170ac53avboxsyncVOID vboxWddmSwapchainCtxTerm(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
be196d173cf52fa33016912e4745dbe1170ac53avboxsync
be196d173cf52fa33016912e4745dbe1170ac53avboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegQueryDisplaySettingsKeyName(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegOpenDisplaySettingsKey(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, OUT PHANDLE phKey);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegDisplaySettingsQueryRelX(HANDLE hKey, int * pResult);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegDisplaySettingsQueryRelY(HANDLE hKey, int * pResult);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmDisplaySettingsQueryPos(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, POINT * pPos);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegQueryVideoGuidString(ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegQueryDrvKeyName(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegOpenKey(OUT PHANDLE phKey, IN PWCHAR pName, IN ACCESS_MASK fAccess);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegQueryValueDword(IN HANDLE hKey, IN PWCHAR pName, OUT PDWORD pDword);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmRegSetValueDword(IN HANDLE hKey, IN PWCHAR pName, OUT DWORD val);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncUNICODE_STRING* vboxWddmVGuidGet(PVBOXMP_DEVEXT pDevExt);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmVGuidFree(PVBOXMP_DEVEXT pDevExt);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#define VBOXWDDM_MM_VOID 0xffffffffUL
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsynctypedef struct VBOXWDDM_MM
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync RTL_BITMAP BitMap;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync UINT cPages;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync UINT cAllocs;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync PULONG pBuffer;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync} VBOXWDDM_MM, *PVBOXWDDM_MM;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxMmInit(PVBOXWDDM_MM pMm, UINT cPages);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncULONG vboxMmAlloc(PVBOXWDDM_MM pMm, UINT cPages);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxMmFree(PVBOXWDDM_MM pMm, UINT iPage, UINT cPages);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxMmTerm(PVBOXWDDM_MM pMm);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsynctypedef struct VBOXVIDEOCM_ALLOC_MGR
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync /* synch lock */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync FAST_MUTEX Mutex;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync VBOXWDDM_HTABLE AllocTable;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync VBOXWDDM_MM Mm;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync// PHYSICAL_ADDRESS PhData;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync uint8_t *pvData;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync uint32_t offData;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync uint32_t cbData;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync} VBOXVIDEOCM_ALLOC_MGR, *PVBOXVIDEOCM_ALLOC_MGR;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsynctypedef struct VBOXVIDEOCM_ALLOC_CONTEXT
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync PVBOXVIDEOCM_ALLOC_MGR pMgr;
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync /* synch lock */
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync FAST_MUTEX Mutex;
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync VBOXWDDM_HTABLE AllocTable;
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync} VBOXVIDEOCM_ALLOC_CONTEXT, *PVBOXVIDEOCM_ALLOC_CONTEXT;
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS vboxVideoAMgrCreate(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr, uint32_t offData, uint32_t cbData);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxVideoAMgrDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxVideoAMgrCtxCreate(PVBOXVIDEOCM_ALLOC_MGR pMgr, PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS vboxVideoAMgrCtxDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxVideoAMgrCtxAllocCreate(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, PVBOXVIDEOCM_UM_ALLOC pUmAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxVideoAMgrCtxAllocDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, VBOXDISP_KMHANDLE hSesionHandle);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#ifdef VBOX_WITH_CRHGSMI
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxVideoAMgrCtxAllocSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_CONTEXT pContext, UINT cBuffers, VBOXWDDM_UHGSMI_BUFFER_UI_INFO_ESCAPE *paBuffers);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#endif
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmSleep(uint32_t u32Val);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#if 0
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync/* wine shrc handle -> allocation map */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncVOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncBOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncPVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncBOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#endif
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync/* visible rects */
cba55d7782acd89472e03b4376591ff57fe7b80evboxsynctypedef struct VBOXWDDMVR_LIST
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync LIST_ENTRY ListHead;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync UINT cEntries;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync} VBOXWDDMVR_LIST, *PVBOXWDDMVR_LIST;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(UINT) VBoxWddmVrListRectsCount(PVBOXWDDMVR_LIST pList)
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync return pList->cEntries;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync}
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(BOOLEAN) VBoxWddmVrListIsEmpty(PVBOXWDDMVR_LIST pList)
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync return !VBoxWddmVrListRectsCount(pList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync}
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncDECLINLINE(void) VBoxWddmVrListInit(PVBOXWDDMVR_LIST pList)
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync{
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync InitializeListHead(&pList->ListHead);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync pList->cEntries = 0;
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync}
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncvoid VBoxWddmVrListClear(PVBOXWDDMVR_LIST pList);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncvoid VBoxWddmVrListTranslate(PVBOXWDDMVR_LIST pList, LONG x, LONG y);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS VBoxWddmVrListRectsAdd(PVBOXWDDMVR_LIST pList, UINT cRects, const PRECT aRects, BOOLEAN *pfChanged);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS VBoxWddmVrListRectsSubst(PVBOXWDDMVR_LIST pList, UINT cRects, const PRECT aRects, BOOLEAN *pfChanged);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS VBoxWddmVrListRectsGet(PVBOXWDDMVR_LIST pList, UINT cRects, PRECT aRects);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS VBoxWddmVrInit();
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncvoid VBoxWddmVrTerm();
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmDrvCfgInit(PUNICODE_STRING pRegStr);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync#ifdef VBOX_VDMA_WITH_WATCHDOG
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmWdInit(PVBOXMP_DEVEXT pDevExt);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS vboxWddmWdTerm(PVBOXMP_DEVEXT pDevExt);
be196d173cf52fa33016912e4745dbe1170ac53avboxsync#endif
cba55d7782acd89472e03b4376591ff57fe7b80evboxsync
be196d173cf52fa33016912e4745dbe1170ac53avboxsyncNTSTATUS VBoxWddmSlEnableVSyncNotification(PVBOXMP_DEVEXT pDevExt, BOOLEAN fEnable);
cba55d7782acd89472e03b4376591ff57fe7b80evboxsyncNTSTATUS VBoxWddmSlGetScanLine(PVBOXMP_DEVEXT pDevExt, DXGKARG_GETSCANLINE *pSl);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS VBoxWddmSlInit(PVBOXMP_DEVEXT pDevExt);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsyncNTSTATUS VBoxWddmSlTerm(PVBOXMP_DEVEXT pDevExt);
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync#endif /* #ifndef ___VBoxMPMisc_h__ */
5fa66c0f504a87c7a177cb850c98baaa27ca340fvboxsync