VBoxMPMisc.h revision e6ad2e18e663b076aeabfec994947514566a7acc
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* $Id$ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VBox WDDM Miniport driver
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
3f1e0eea71cabeb90529e546f16eb7aee513fde9vboxsync/*
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2011 Oracle Corporation
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifndef ___VBoxMPMisc_h__
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define ___VBoxMPMisc_h__
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "../../common/VBoxVideoTools.h"
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsyncDECLINLINE(void) vboxVideoLeDetach(LIST_ENTRY *pList, LIST_ENTRY *pDstList)
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync{
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync if (IsListEmpty(pList))
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync {
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync InitializeListHead(pDstList);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
0c437bb10c61b229407a7517efde04dfe3b1e4a1vboxsync else
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync {
0c437bb10c61b229407a7517efde04dfe3b1e4a1vboxsync *pDstList = *pList;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync Assert(pDstList->Flink->Blink == pList);
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync Assert(pDstList->Blink->Flink == pList);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* pDstList->Flink & pDstList->Blink point to the "real| entries, never to pList
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * since we've checked IsListEmpty(pList) above */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pDstList->Flink->Blink = pDstList;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync pDstList->Blink->Flink = pDstList;
2f0d866e126dd288169fed591c259c1c6b4016e5vboxsync InitializeListHead(pList);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync }
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef uint32_t VBOXWDDM_HANDLE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOXWDDM_HANDLE_INVALID 0UL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsynctypedef struct VBOXWDDM_HTABLE
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync uint32_t cData;
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync uint32_t iNext2Search;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t cSize;
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync PVOID *paData;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOXWDDM_HTABLE, *PVBOXWDDM_HTABLE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VBOXWDDM_HTABLE_ITERATOR
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync PVBOXWDDM_HTABLE pTbl;
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync uint32_t iCur;
0174432b2b1a760b89840ba696f7ba51def65dddvboxsync uint32_t cLeft;
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync} VBOXWDDM_HTABLE_ITERATOR, *PVBOXWDDM_HTABLE_ITERATOR;
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync
614cbe11a7e5588dc8d369e223174b1441a09359vboxsyncVOID vboxWddmHTableIterInit(PVBOXWDDM_HTABLE pTbl, PVBOXWDDM_HTABLE_ITERATOR pIter);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncPVOID vboxWddmHTableIterNext(PVBOXWDDM_HTABLE_ITERATOR pIter, VBOXWDDM_HANDLE *phHandle);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncBOOL vboxWddmHTableIterHasNext(PVBOXWDDM_HTABLE_ITERATOR pIter);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncPVOID vboxWddmHTableIterRemoveCur(PVBOXWDDM_HTABLE_ITERATOR pIter);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncVOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl);
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsyncNTSTATUS vboxWddmHTableRealloc(PVBOXWDDM_HTABLE pTbl, uint32_t cNewSize);
590bfe12ce22cd3716448fbb9f4dc51664bfe5e2vboxsyncVBOXWDDM_HANDLE vboxWddmHTablePut(PVBOXWDDM_HTABLE pTbl, PVOID pvData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncPVOID vboxWddmHTableRemove(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncPVOID vboxWddmHTableGet(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncPVBOXWDDM_SWAPCHAIN vboxWddmSwapchainCreate();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncDECLINLINE(BOOLEAN) vboxWddmSwapchainRetain(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncDECLINLINE(VOID) vboxWddmSwapchainRelease(PVBOXWDDM_SWAPCHAIN pSwapchain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncPVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxWddmSwapchainAllocRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncBOOLEAN vboxWddmSwapchainAllocAdd(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxWddmSwapchainAllocRemoveAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxWddmSwapchainDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxWddmSwapchainCtxDestroyAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmSwapchainCtxEscape(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXDISPIFESCAPE_SWAPCHAININFO pSwapchainInfo, UINT cbSize);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmSwapchainCtxInit(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxWddmSwapchainCtxTerm(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegQueryDisplaySettingsKeyName(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegOpenDisplaySettingsKey(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, OUT PHANDLE phKey);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegDisplaySettingsQueryRelX(HANDLE hKey, int * pResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegDisplaySettingsQueryRelY(HANDLE hKey, int * pResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmDisplaySettingsQueryPos(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, POINT * pPos);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegQueryVideoGuidString(ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegQueryDrvKeyName(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
f351fab06d1e1507b72f5c574df71193061fd393vboxsyncNTSTATUS vboxWddmRegOpenKey(OUT PHANDLE phKey, IN PWCHAR pName, IN ACCESS_MASK fAccess);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegQueryValueDword(IN HANDLE hKey, IN PWCHAR pName, OUT PDWORD pDword);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxWddmRegSetValueDword(IN HANDLE hKey, IN PWCHAR pName, OUT DWORD val);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsyncUNICODE_STRING* vboxWddmVGuidGet(PVBOXMP_DEVEXT pDevExt);
a11c569636fa6838bd423f4631a9660a5a84204bvboxsyncVOID vboxWddmVGuidFree(PVBOXMP_DEVEXT pDevExt);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOXWDDM_MM_VOID 0xffffffffUL
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VBOXWDDM_MM
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync RTL_BITMAP BitMap;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UINT cPages;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UINT cAllocs;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PULONG pBuffer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOXWDDM_MM, *PVBOXWDDM_MM;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxMmInit(PVBOXWDDM_MM pMm, UINT cPages);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncULONG vboxMmAlloc(PVBOXWDDM_MM pMm, UINT cPages);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxMmFree(PVBOXWDDM_MM pMm, UINT iPage, UINT cPages);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxMmTerm(PVBOXWDDM_MM pMm);
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VBOXVIDEOCM_ALLOC_MGR
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* synch lock */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync FAST_MUTEX Mutex;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOXWDDM_HTABLE AllocTable;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOXWDDM_MM Mm;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync// PHYSICAL_ADDRESS PhData;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint8_t *pvData;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t offData;
750d4d0506a38b2e80c997075d40aad474e675fbvboxsync uint32_t cbData;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOXVIDEOCM_ALLOC_MGR, *PVBOXVIDEOCM_ALLOC_MGR;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VBOXVIDEOCM_ALLOC_CONTEXT
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PVBOXVIDEOCM_ALLOC_MGR pMgr;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* synch lock */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync FAST_MUTEX Mutex;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOXWDDM_HTABLE AllocTable;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOXVIDEOCM_ALLOC_CONTEXT, *PVBOXVIDEOCM_ALLOC_CONTEXT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS vboxVideoAMgrCreate(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr, uint32_t offData, uint32_t cbData);
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncNTSTATUS vboxVideoAMgrDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr);
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncNTSTATUS vboxVideoAMgrCtxCreate(PVBOXVIDEOCM_ALLOC_MGR pMgr, PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncNTSTATUS vboxVideoAMgrCtxDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncNTSTATUS vboxVideoAMgrCtxAllocCreate(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, PVBOXVIDEOCM_UM_ALLOC pUmAlloc);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncNTSTATUS vboxVideoAMgrCtxAllocDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, VBOXDISP_KMHANDLE hSesionHandle);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef VBOX_WITH_CRHGSMI
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncNTSTATUS vboxVideoAMgrCtxAllocSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_CONTEXT pContext, UINT cBuffers, VBOXWDDM_UHGSMI_BUFFER_UI_INFO_ESCAPE *paBuffers);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVOID vboxWddmSleep(uint32_t u32Val);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsyncVOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
72ef2b9fc5ffc01d0dabd5052d6e8baa3a952773vboxsyncNTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer);
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#if 0
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* wine shrc handle -> allocation map */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncVOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncBOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncPVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncBOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
42c1972c22e09797b4b24afbd0ec114ed076c37cvboxsync/* visible rects */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct VBOXWDDMVR_LIST
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync LIST_ENTRY ListHead;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync UINT cEntries;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOXWDDMVR_LIST, *PVBOXWDDMVR_LIST;
9e4166cf5ed4940f506bc718ea6c89bf7ed252c8vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncDECLINLINE(UINT) VBoxWddmVrListRectsCount(PVBOXWDDMVR_LIST pList)
9e4166cf5ed4940f506bc718ea6c89bf7ed252c8vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync return pList->cEntries;
1e3cd9c9c95ff352da1331a1789b05fd012c880dvboxsync}
e08de24d4792d31b7f2aac29db5cb8840d940009vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncDECLINLINE(BOOLEAN) VBoxWddmVrListIsEmpty(PVBOXWDDMVR_LIST pList)
8a132edc1577cbe2a19cd778c1b2bea6ae5e8515vboxsync{
69deddbc68802f1cf1c3a404a9f816b8accb3385vboxsync return !VBoxWddmVrListRectsCount(pList);
3ecd8008b81f02a04220705ae0033142af363280vboxsync}
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncDECLINLINE(void) VBoxWddmVrListInit(PVBOXWDDMVR_LIST pList)
576d4214137bce409cdcf01e8df4a0bca5e0b2d1vboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync InitializeListHead(&pList->ListHead);
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync pList->cEntries = 0;
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync}
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsyncvoid VBoxWddmVrListClear(PVBOXWDDMVR_LIST pList);
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsyncvoid VBoxWddmVrListTranslate(PVBOXWDDMVR_LIST pList, LONG x, LONG y);
2634ec5cbf8f1fa0a968cd4664ead6df1fed730dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS VBoxWddmVrListRectsAdd(PVBOXWDDMVR_LIST pList, UINT cRects, const PRECT aRects, BOOLEAN *pfChanged);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncNTSTATUS VBoxWddmVrListRectsSubst(PVBOXWDDMVR_LIST pList, UINT cRects, const PRECT aRects, BOOLEAN *pfChanged);
3ecd8008b81f02a04220705ae0033142af363280vboxsyncNTSTATUS VBoxWddmVrListRectsGet(PVBOXWDDMVR_LIST pList, UINT cRects, PRECT aRects);
3ecd8008b81f02a04220705ae0033142af363280vboxsync
22e281e75ed636601178296c6daebda8f1d17c59vboxsyncNTSTATUS VBoxWddmVrInit();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid VBoxWddmVrTerm();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* #ifndef ___VBoxMPMisc_h__ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync