VirtualBox

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

Last change on this file since 106505 was 106061, checked in by vboxsync, 8 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1/* $Id: VBoxMPMisc.h 106061 2024-09-16 14:03:52Z vboxsync $ */
2/** @file
3 * VBox WDDM Miniport driver
4 */
5
6/*
7 * Copyright (C) 2011-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * SPDX-License-Identifier: GPL-3.0-only
26 */
27
28#ifndef GA_INCLUDED_SRC_WINNT_Graphics_Video_mp_wddm_VBoxMPMisc_h
29#define GA_INCLUDED_SRC_WINNT_Graphics_Video_mp_wddm_VBoxMPMisc_h
30#ifndef RT_WITHOUT_PRAGMA_ONCE
31# pragma once
32#endif
33
34#include "../../common/VBoxVideoTools.h"
35
36DECLINLINE(void) vboxVideoLeDetach(LIST_ENTRY *pList, LIST_ENTRY *pDstList)
37{
38 if (IsListEmpty(pList))
39 {
40 InitializeListHead(pDstList);
41 }
42 else
43 {
44 *pDstList = *pList;
45 Assert(pDstList->Flink->Blink == pList);
46 Assert(pDstList->Blink->Flink == pList);
47 /* pDstList->Flink & pDstList->Blink point to the "real| entries, never to pList
48 * since we've checked IsListEmpty(pList) above */
49 pDstList->Flink->Blink = pDstList;
50 pDstList->Blink->Flink = pDstList;
51 InitializeListHead(pList);
52 }
53}
54
55typedef uint32_t VBOXWDDM_HANDLE;
56#define VBOXWDDM_HANDLE_INVALID 0UL
57
58typedef struct VBOXWDDM_HTABLE
59{
60 uint32_t cData;
61 uint32_t iNext2Search;
62 uint32_t cSize;
63 PVOID *paData;
64} VBOXWDDM_HTABLE, *PVBOXWDDM_HTABLE;
65
66typedef struct VBOXWDDM_HTABLE_ITERATOR
67{
68 PVBOXWDDM_HTABLE pTbl;
69 uint32_t iCur;
70 uint32_t cLeft;
71} VBOXWDDM_HTABLE_ITERATOR, *PVBOXWDDM_HTABLE_ITERATOR;
72
73VOID vboxWddmHTableIterInit(PVBOXWDDM_HTABLE pTbl, PVBOXWDDM_HTABLE_ITERATOR pIter);
74PVOID vboxWddmHTableIterNext(PVBOXWDDM_HTABLE_ITERATOR pIter, VBOXWDDM_HANDLE *phHandle);
75BOOL vboxWddmHTableIterHasNext(PVBOXWDDM_HTABLE_ITERATOR pIter);
76PVOID vboxWddmHTableIterRemoveCur(PVBOXWDDM_HTABLE_ITERATOR pIter);
77NTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize);
78VOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl);
79NTSTATUS vboxWddmHTableRealloc(PVBOXWDDM_HTABLE pTbl, uint32_t cNewSize);
80VBOXWDDM_HANDLE vboxWddmHTablePut(PVBOXWDDM_HTABLE pTbl, PVOID pvData);
81PVOID vboxWddmHTableRemove(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
82PVOID vboxWddmHTableGet(PVBOXWDDM_HTABLE pTbl, VBOXWDDM_HANDLE hHandle);
83
84NTSTATUS vboxWddmRegQueryDisplaySettingsKeyName(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId,
85 ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
86NTSTATUS vboxWddmRegOpenDisplaySettingsKey(IN PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, OUT PHANDLE phKey);
87NTSTATUS vboxWddmRegDisplaySettingsQueryRelX(HANDLE hKey, int * pResult);
88NTSTATUS vboxWddmRegDisplaySettingsQueryRelY(HANDLE hKey, int * pResult);
89NTSTATUS vboxWddmDisplaySettingsQueryPos(IN PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId, POINT * pPos);
90void vboxWddmDisplaySettingsCheckPos(IN PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId);
91NTSTATUS vboxWddmRegQueryVideoGuidString(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
92
93NTSTATUS vboxWddmRegQueryDrvKeyName(PVBOXMP_DEVEXT pDevExt, ULONG cbBuf, PWCHAR pBuf, PULONG pcbResult);
94
95NTSTATUS vboxWddmRegOpenKeyEx(OUT PHANDLE phKey, IN HANDLE hRootKey, IN PCWCHAR pName, IN ACCESS_MASK fAccess);
96NTSTATUS vboxWddmRegOpenKey(OUT PHANDLE phKey, IN PCWCHAR pName, IN ACCESS_MASK fAccess);
97NTSTATUS vboxWddmRegQueryValueDword(IN HANDLE hKey, IN PCWCHAR pName, OUT PDWORD pDword);
98NTSTATUS vboxWddmRegSetValueDword(IN HANDLE hKey, IN PCWCHAR pName, IN DWORD val);
99
100NTSTATUS vboxWddmRegDrvFlagsSet(PVBOXMP_DEVEXT pDevExt, DWORD fVal);
101DWORD vboxWddmRegDrvFlagsGet(PVBOXMP_DEVEXT pDevExt, DWORD fDefault);
102
103UNICODE_STRING* vboxWddmVGuidGet(PVBOXMP_DEVEXT pDevExt);
104VOID vboxWddmVGuidFree(PVBOXMP_DEVEXT pDevExt);
105
106#define VBOXWDDM_MM_VOID 0xffffffffUL
107
108typedef struct VBOXWDDM_MM
109{
110 RTL_BITMAP BitMap;
111 UINT cPages;
112 UINT cAllocs;
113 PULONG pBuffer;
114} VBOXWDDM_MM, *PVBOXWDDM_MM;
115
116NTSTATUS vboxMmInit(PVBOXWDDM_MM pMm, UINT cPages);
117ULONG vboxMmAlloc(PVBOXWDDM_MM pMm, UINT cPages);
118VOID vboxMmFree(PVBOXWDDM_MM pMm, UINT iPage, UINT cPages);
119NTSTATUS vboxMmTerm(PVBOXWDDM_MM pMm);
120
121typedef struct VBOXVIDEOCM_ALLOC_MGR
122{
123 /* synch lock */
124 FAST_MUTEX Mutex;
125 VBOXWDDM_HTABLE AllocTable;
126 VBOXWDDM_MM Mm;
127// PHYSICAL_ADDRESS PhData;
128 uint8_t *pvData;
129 uint32_t offData;
130 uint32_t cbData;
131} VBOXVIDEOCM_ALLOC_MGR, *PVBOXVIDEOCM_ALLOC_MGR;
132
133typedef struct VBOXVIDEOCM_ALLOC_CONTEXT
134{
135 PVBOXVIDEOCM_ALLOC_MGR pMgr;
136 /* synch lock */
137 FAST_MUTEX Mutex;
138 VBOXWDDM_HTABLE AllocTable;
139} VBOXVIDEOCM_ALLOC_CONTEXT, *PVBOXVIDEOCM_ALLOC_CONTEXT;
140
141NTSTATUS vboxVideoAMgrCreate(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr, uint32_t offData, uint32_t cbData);
142NTSTATUS vboxVideoAMgrDestroy(PVBOXMP_DEVEXT pDevExt, PVBOXVIDEOCM_ALLOC_MGR pMgr);
143
144NTSTATUS vboxVideoAMgrCtxCreate(PVBOXVIDEOCM_ALLOC_MGR pMgr, PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
145NTSTATUS vboxVideoAMgrCtxDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pCtx);
146
147NTSTATUS vboxVideoAMgrCtxAllocCreate(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, PVBOXVIDEOCM_UM_ALLOC pUmAlloc);
148NTSTATUS vboxVideoAMgrCtxAllocDestroy(PVBOXVIDEOCM_ALLOC_CONTEXT pContext, VBOXDISP_KMHANDLE hSesionHandle);
149
150VOID vboxWddmSleep(uint32_t u32Val);
151VOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val);
152
153NTSTATUS vboxUmdDumpBuf(PVBOXDISPIFESCAPE_DBGDUMPBUF pBuf, uint32_t cbBuffer);
154
155#if 0
156/* wine shrc handle -> allocation map */
157VOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt);
158VOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt);
159BOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
160PVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc);
161BOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc);
162#endif
163
164NTSTATUS vboxWddmDrvCfgInit(PUNICODE_STRING pRegStr);
165
166NTSTATUS VBoxWddmSlEnableVSyncNotification(PVBOXMP_DEVEXT pDevExt, BOOLEAN fEnable);
167NTSTATUS VBoxWddmSlGetScanLine(PVBOXMP_DEVEXT pDevExt, DXGKARG_GETSCANLINE *pSl);
168NTSTATUS VBoxWddmSlInit(PVBOXMP_DEVEXT pDevExt);
169NTSTATUS VBoxWddmSlTerm(PVBOXMP_DEVEXT pDevExt);
170
171void vboxWddmDiInitDefault(DXGK_DISPLAY_INFORMATION *pInfo, PHYSICAL_ADDRESS PhAddr, D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId);
172void vboxWddmDiToAllocData(PVBOXMP_DEVEXT pDevExt, const DXGK_DISPLAY_INFORMATION *pInfo, struct VBOXWDDM_ALLOC_DATA *pAllocData);
173void vboxWddmDmSetupDefaultVramLocation(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID ModifiedVidPnSourceId, struct VBOXWDDM_SOURCE *paSources);
174
175char const *vboxWddmAllocTypeString(PVBOXWDDM_ALLOCATION pAlloc);
176
177#endif /* !GA_INCLUDED_SRC_WINNT_Graphics_Video_mp_wddm_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