VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h@ 49180

Last change on this file since 49180 was 48070, checked in by vboxsync, 12 years ago

wddm,vboxtray: forward-port autoresize, multimon, and seamless fixes from 4.2 r87071, r87353, r87356, r87528, r87568, r87581, r87584, r87608, r87673, r87678, r87708, r87629, r87529; additional fixes

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.1 KB
Line 
1/* $Id: VBoxMPMisc.h 48070 2013-08-26 18:13:22Z vboxsync $ */
2
3/** @file
4 * VBox WDDM Miniport driver
5 */
6
7/*
8 * Copyright (C) 2011-2012 Oracle Corporation
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19#ifndef ___VBoxMPMisc_h__
20#define ___VBoxMPMisc_h__
21
22#include "../../common/VBoxVideoTools.h"
23
24DECLINLINE(void) vboxVideoLeDetach(LIST_ENTRY *pList, LIST_ENTRY *pDstList)
25{
26 if (IsListEmpty(pList))
27 {
28 InitializeListHead(pDstList);
29 }
30 else
31 {
32 *pDstList = *pList;
33 Assert(pDstList->Flink->Blink == pList);
34 Assert(pDstList->Blink->Flink == pList);
35 /* pDstList->Flink & pDstList->Blink point to the "real| entries, never to pList
36 * since we've checked IsListEmpty(pList) above */
37 pDstList->Flink->Blink = pDstList;
38 pDstList->Blink->Flink = pDstList;
39 InitializeListHead(pList);
40 }
41}
42
43typedef uint32_t VBOXWDDM_HANDLE;
44#define VBOXWDDM_HANDLE_INVALID 0UL
45
46typedef struct VBOXWDDM_HTABLE
47{
48 uint32_t cData;
49 uint32_t iNext2Search;
50 uint32_t cSize;
51 PVOID *paData;
52} VBOXWDDM_HTABLE, *PVBOXWDDM_HTABLE;
53
54typedef struct VBOXWDDM_HTABLE_ITERATOR
55{
56 PVBOXWDDM_HTABLE pTbl;
57 uint32_t iCur;
58 uint32_t cLeft;
59} VBOXWDDM_HTABLE_ITERATOR, *PVBOXWDDM_HTABLE_ITERATOR;
60
61VOID vboxWddmHTableIterInit(PVBOXWDDM_HTABLE pTbl, PVBOXWDDM_HTABLE_ITERATOR pIter);
62PVOID vboxWddmHTableIterNext(PVBOXWDDM_HTABLE_ITERATOR pIter, VBOXWDDM_HANDLE *phHandle);
63BOOL vboxWddmHTableIterHasNext(PVBOXWDDM_HTABLE_ITERATOR pIter);
64PVOID vboxWddmHTableIterRemoveCur(PVBOXWDDM_HTABLE_ITERATOR pIter);
65NTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize);
66VOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl);
67NTSTATUS vboxWddmHTableRealloc(PVBOXWDDM_HTABLE pTbl, uint32_t cNewSize);
68VBOXWDDM_HANDLE vboxWddmHTablePut(PVBOXWDDM_HTABLE pTbl, PVOID pvData);
69PVOID vboxWddmHTableRemove(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
70PVOID vboxWddmHTableGet(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
71
72
73PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainCreate();
74BOOLEAN vboxWddmSwapchainRetain(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
75VOID vboxWddmSwapchainRelease(PVBOXWDDM_SWAPCHAIN pSwapchain);
76PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOCATION *pAlloc);
77PVBOXWDDM_SWAPCHAIN vboxWddmSwapchainRetainByAllocData(PVBOXMP_DEVEXT pDevExt, const struct VBOXWDDM_ALLOC_DATA *pAllocData);
78VOID vboxWddmSwapchainAllocRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
79BOOLEAN vboxWddmSwapchainAllocAdd(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain, PVBOXWDDM_ALLOCATION pAlloc);
80VOID vboxWddmSwapchainAllocRemoveAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
81VOID vboxWddmSwapchainDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SWAPCHAIN pSwapchain);
82VOID vboxWddmSwapchainCtxDestroyAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
83NTSTATUS vboxWddmSwapchainCtxEscape(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXDISPIFESCAPE_SWAPCHAININFO pSwapchainInfo, UINT cbSize);
84NTSTATUS vboxWddmSwapchainCtxInit(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
85VOID vboxWddmSwapchainCtxTerm(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
86
87
88NTSTATUS vboxWddmRegQueryDisplaySettingsKeyName(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
89 ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
90NTSTATUS vboxWddmRegOpenDisplaySettingsKey(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, OUT PHANDLE phKey);
91NTSTATUS vboxWddmRegDisplaySettingsQueryRelX(HANDLE hKey, int * pResult);
92NTSTATUS vboxWddmRegDisplaySettingsQueryRelY(HANDLE hKey, int * pResult);
93NTSTATUS vboxWddmDisplaySettingsQueryPos(IN PVBOXMP_DEVEXT pDeviceExtension, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, POINT * pPos);
94NTSTATUS vboxWddmRegQueryVideoGuidString(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
95
96NTSTATUS vboxWddmRegQueryDrvKeyName(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
97
98NTSTATUS vboxWddmRegOpenKeyEx(OUT PHANDLE phKey, IN HANDLE hRootKey, IN PWCHAR pName, IN ACCESS_MASK fAccess);
99NTSTATUS vboxWddmRegOpenKey(OUT PHANDLE phKey, IN PWCHAR pName, IN ACCESS_MASK fAccess);
100NTSTATUS vboxWddmRegQueryValueDword(IN HANDLE hKey, IN PWCHAR pName, OUT PDWORD pDword);
101NTSTATUS vboxWddmRegSetValueDword(IN HANDLE hKey, IN PWCHAR pName, IN DWORD val);
102
103NTSTATUS vboxWddmRegDrvFlagsSet(PVBOXMP_DEVEXT pDevExt, DWORD fVal);
104DWORD vboxWddmRegDrvFlagsGet(PVBOXMP_DEVEXT pDevExt, DWORD fDefault);
105
106UNICODE_STRING* vboxWddmVGuidGet(PVBOXMP_DEVEXT pDevExt);
107VOID vboxWddmVGuidFree(PVBOXMP_DEVEXT pDevExt);
108
109#define VBOXWDDM_MM_VOID 0xffffffffUL
110
111typedef struct VBOXWDDM_MM
112{
113 RTL_BITMAP BitMap;
114 UINT cPages;
115 UINT cAllocs;
116 PULONG pBuffer;
117} VBOXWDDM_MM, *PVBOXWDDM_MM;
118
119NTSTATUS vboxMmInit(PVBOXWDDM_MM pMm, UINT cPages);
120ULONG vboxMmAlloc(PVBOXWDDM_MM pMm, UINT cPages);
121VOID vboxMmFree(PVBOXWDDM_MM pMm, UINT iPage, UINT cPages);
122NTSTATUS vboxMmTerm(PVBOXWDDM_MM pMm);
123
124typedef struct VBOXVIDEOCM_ALLOC_MGR
125{
126 /* synch lock */
127 FAST_MUTEX Mutex;
128 VBOXWDDM_HTABLE AllocTable;
129 VBOXWDDM_MM Mm;
130// PHYSICAL_ADDRESS PhData;
131 uint8_t *pvData;
132 uint32_t offData;
133 uint32_t cbData;
134} VBOXVIDEOCM_ALLOC_MGR, *PVBOXVIDEOCM_ALLOC_MGR;
135
136typedef struct VBOXVIDEOCM_ALLOC_CONTEXT
137{
138 PVBOXVIDEOCM_ALLOC_MGR pMgr;
139 /* synch lock */
140 FAST_MUTEX Mutex;
141 VBOXWDDM_HTABLE AllocTable;
142} VBOXVIDEOCM_ALLOC_CONTEXT, *PVBOXVIDEOCM_ALLOC_CONTEXT;
143
144NTSTATUS vboxVideoAMgrCreate(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr, uint32_t offData, uint32_t cbData);
145NTSTATUS vboxVideoAMgrDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr);
146
147NTSTATUS vboxVideoAMgrCtxCreate(PVBOXVIDEOCM_ALLOC_MGR pMgr, PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
148NTSTATUS vboxVideoAMgrCtxDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
149
150NTSTATUS vboxVideoAMgrCtxAllocCreate(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, PVBOXVIDEOCM_UM_ALLOC pUmAlloc);
151NTSTATUS vboxVideoAMgrCtxAllocDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, VBOXDISP_KMHANDLE hSesionHandle);
152
153#ifdef VBOX_WITH_CRHGSMI
154NTSTATUS vboxVideoAMgrCtxAllocSubmit(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_CONTEXT pContext, UINT cBuffers, VBOXWDDM_UHGSMI_BUFFER_UI_INFO_ESCAPE *paBuffers);
155#endif
156
157VOID vboxWddmSleep(uint32_t u32Val);
158VOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val);
159
160NTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer);
161
162#if 0
163/* wine shrc handle -> allocation map */
164VOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt);
165VOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt);
166BOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
167PVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc);
168BOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
169#endif
170
171NTSTATUS vboxWddmDrvCfgInit(PUNICODE_STRING pRegStr);
172
173#ifdef VBOX_VDMA_WITH_WATCHDOG
174NTSTATUS vboxWddmWdInit(PVBOXMP_DEVEXT pDevExt);
175NTSTATUS vboxWddmWdTerm(PVBOXMP_DEVEXT pDevExt);
176#endif
177
178NTSTATUS VBoxWddmSlEnableVSyncNotification(PVBOXMP_DEVEXT pDevExt, BOOLEAN fEnable);
179NTSTATUS VBoxWddmSlGetScanLine(PVBOXMP_DEVEXT pDevExt, DXGKARG_GETSCANLINE *pSl);
180NTSTATUS VBoxWddmSlInit(PVBOXMP_DEVEXT pDevExt);
181NTSTATUS VBoxWddmSlTerm(PVBOXMP_DEVEXT pDevExt);
182
183#ifdef VBOX_WDDM_WIN8
184void vboxWddmDiInitDefault(DXGK_DISPLAY_INFORMATION *pInfo, PHYSICAL_ADDRESS PhAddr, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId);
185void vboxWddmDiToAllocData(PVBOXMP_DEVEXT pDevExt, const DXGK_DISPLAY_INFORMATION *pInfo, struct VBOXWDDM_ALLOC_DATA *pAllocData);
186void vboxWddmDmAdjustDefaultVramLocations(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID ModifiedVidPnSourceId);
187#endif
188
189NTSTATUS vboxWddmChildStatusConnect(PVBOXMP_DEVEXT pDevExt, uint32_t iChild, BOOLEAN fConnect);
190
191#endif /* #ifndef ___VBoxMPMisc_h__ */
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette