VirtualBox

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

Last change on this file since 68115 was 63039, checked in by vboxsync, 9 years ago

GA/NT/Graphics: warnings

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