VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPVideoPortAPI.cpp

Last change on this file was 98103, checked in by vboxsync, 16 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: 5.7 KB
Line 
1/* $Id: VBoxMPVideoPortAPI.cpp 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * VBox XPDM Miniport video port api
4 */
5
6/*
7 * Copyright (C) 2011-2023 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#include "VBoxMPInternal.h"
29
30/*Empty stubs*/
31static VP_STATUS
32vboxWaitForSingleObjectVoid(IN PVOID HwDeviceExtension, IN PVOID Object, IN PLARGE_INTEGER Timeout OPTIONAL)
33{
34 RT_NOREF(HwDeviceExtension, Object, Timeout);
35 WARN(("stub called"));
36 return ERROR_INVALID_FUNCTION;
37}
38
39static LONG vboxSetEventVoid(IN PVOID HwDeviceExtension, IN PEVENT pEvent)
40{
41 RT_NOREF(HwDeviceExtension, pEvent);
42 WARN(("stub called"));
43 return 0;
44}
45
46static VOID vboxClearEventVoid(IN PVOID HwDeviceExtension, IN PEVENT pEvent)
47{
48 RT_NOREF(HwDeviceExtension, pEvent);
49 WARN(("stub called"));
50}
51
52static VP_STATUS
53vboxCreateEventVoid(IN PVOID HwDeviceExtension, IN ULONG EventFlag, IN PVOID Unused, OUT PEVENT *ppEvent)
54{
55 RT_NOREF(HwDeviceExtension, EventFlag, Unused, ppEvent);
56 WARN(("stub called"));
57 return ERROR_INVALID_FUNCTION;
58}
59
60static VP_STATUS
61vboxDeleteEventVoid(IN PVOID HwDeviceExtension, IN PEVENT pEvent)
62{
63 RT_NOREF(HwDeviceExtension, pEvent);
64 WARN(("stub called"));
65 return ERROR_INVALID_FUNCTION;
66}
67
68static PVOID
69vboxAllocatePoolVoid(IN PVOID HwDeviceExtension, IN VBOXVP_POOL_TYPE PoolType, IN size_t NumberOfBytes, IN ULONG Tag)
70{
71 RT_NOREF(HwDeviceExtension, PoolType, NumberOfBytes, Tag);
72 WARN(("stub called"));
73 return NULL;
74}
75
76static VOID vboxFreePoolVoid(IN PVOID HwDeviceExtension, IN PVOID Ptr)
77{
78 RT_NOREF(HwDeviceExtension, Ptr);
79 WARN(("stub called"));
80}
81
82static BOOLEAN
83vboxQueueDpcVoid(IN PVOID HwDeviceExtension, IN PMINIPORT_DPC_ROUTINE CallbackRoutine, IN PVOID Context)
84{
85 RT_NOREF(HwDeviceExtension, CallbackRoutine, Context);
86 WARN(("stub called"));
87 return FALSE;
88}
89
90static VBOXVP_STATUS
91vboxCreateSecondaryDisplayVoid(IN PVOID HwDeviceExtension, IN OUT PVOID SecondaryDeviceExtension, IN ULONG fFlag)
92{
93 RT_NOREF(HwDeviceExtension, SecondaryDeviceExtension, fFlag);
94 WARN(("stub called"));
95 return ERROR_INVALID_FUNCTION;
96}
97
98#define VP_GETPROC(dst, type, name) \
99{ \
100 pAPI->dst = (type)(pConfigInfo->VideoPortGetProcAddress)(pExt, (PUCHAR)(name)); \
101}
102
103/*Query video port for api functions or fill with stubs if those are not supported*/
104void VBoxSetupVideoPortAPI(PVBOXMP_DEVEXT pExt, PVIDEO_PORT_CONFIG_INFO pConfigInfo)
105{
106 VBOXVIDEOPORTPROCS *pAPI = &pExt->u.primary.VideoPortProcs;
107 VideoPortZeroMemory(pAPI, sizeof(VBOXVIDEOPORTPROCS));
108
109 if (VBoxQueryWinVersion(NULL) <= WINVERSION_NT4)
110 {
111 /* VideoPortGetProcAddress is available for >= win2k */
112 pAPI->pfnWaitForSingleObject = vboxWaitForSingleObjectVoid;
113 pAPI->pfnSetEvent = vboxSetEventVoid;
114 pAPI->pfnClearEvent = vboxClearEventVoid;
115 pAPI->pfnCreateEvent = vboxCreateEventVoid;
116 pAPI->pfnDeleteEvent = vboxDeleteEventVoid;
117 pAPI->pfnAllocatePool = vboxAllocatePoolVoid;
118 pAPI->pfnFreePool = vboxFreePoolVoid;
119 pAPI->pfnQueueDpc = vboxQueueDpcVoid;
120 pAPI->pfnCreateSecondaryDisplay = vboxCreateSecondaryDisplayVoid;
121 return;
122 }
123
124 VP_GETPROC(pfnWaitForSingleObject, PFNWAITFORSINGLEOBJECT, "VideoPortWaitForSingleObject");
125 VP_GETPROC(pfnSetEvent, PFNSETEVENT, "VideoPortSetEvent");
126 VP_GETPROC(pfnClearEvent, PFNCLEAREVENT, "VideoPortClearEvent");
127 VP_GETPROC(pfnCreateEvent, PFNCREATEEVENT, "VideoPortCreateEvent");
128 VP_GETPROC(pfnDeleteEvent, PFNDELETEEVENT, "VideoPortDeleteEvent");
129
130 if(pAPI->pfnWaitForSingleObject
131 && pAPI->pfnSetEvent
132 && pAPI->pfnClearEvent
133 && pAPI->pfnCreateEvent
134 && pAPI->pfnDeleteEvent)
135 {
136 pAPI->fSupportedTypes |= VBOXVIDEOPORTPROCS_EVENT;
137 }
138 else
139 {
140 pAPI->pfnWaitForSingleObject = vboxWaitForSingleObjectVoid;
141 pAPI->pfnSetEvent = vboxSetEventVoid;
142 pAPI->pfnClearEvent = vboxClearEventVoid;
143 pAPI->pfnCreateEvent = vboxCreateEventVoid;
144 pAPI->pfnDeleteEvent = vboxDeleteEventVoid;
145 }
146
147 VP_GETPROC(pfnAllocatePool, PFNALLOCATEPOOL, "VideoPortAllocatePool");
148 VP_GETPROC(pfnFreePool, PFNFREEPOOL, "VideoPortFreePool");
149
150 if(pAPI->pfnAllocatePool
151 && pAPI->pfnFreePool)
152 {
153 pAPI->fSupportedTypes |= VBOXVIDEOPORTPROCS_POOL;
154 }
155 else
156 {
157 pAPI->pfnAllocatePool = vboxAllocatePoolVoid;
158 pAPI->pfnFreePool = vboxFreePoolVoid;
159 }
160
161 VP_GETPROC(pfnQueueDpc, PFNQUEUEDPC, "VideoPortQueueDpc");
162
163 if(pAPI->pfnQueueDpc)
164 {
165 pAPI->fSupportedTypes |= VBOXVIDEOPORTPROCS_DPC;
166 }
167 else
168 {
169 pAPI->pfnQueueDpc = vboxQueueDpcVoid;
170 }
171
172 VP_GETPROC(pfnCreateSecondaryDisplay, PFNCREATESECONDARYDISPLAY, "VideoPortCreateSecondaryDisplay");
173
174 if (pAPI->pfnCreateSecondaryDisplay)
175 {
176 pAPI->fSupportedTypes |= VBOXVIDEOPORTPROCS_CSD;
177 }
178 else
179 {
180 pAPI->pfnCreateSecondaryDisplay = vboxCreateSecondaryDisplayVoid;
181 }
182}
183
184#undef VP_GETPROC
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use