VirtualBox

source: vbox/trunk/src/VBox/Additions/WINNT/Graphics/Miniport/wddm/VBoxVideoWddm.cpp@ 26009

Last change on this file since 26009 was 26009, checked in by vboxsync, 15 years ago

wddm: DxgkDdiQueryChildStatus impl

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 24.7 KB
Line 
1/*
2 * Copyright (C) 2010 Sun Microsystems, Inc.
3 *
4 * This file is part of VirtualBox Open Source Edition (OSE), as
5 * available from http://www.virtualbox.org. This file is free software;
6 * you can redistribute it and/or modify it under the terms of the GNU
7 * General Public License (GPL) as published by the Free Software
8 * Foundation, in version 2 as it comes in the "COPYING" file of the
9 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
10 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
11 *
12 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
13 * Clara, CA 95054 USA or visit http://www.sun.com if you need
14 * additional information or have any questions.
15 */
16
17#include "../VBoxVideo.h"
18#include "../Helper.h"
19
20#include <VBox/VBoxGuestLib.h>
21
22#define VBOXWDDM_MEMTAG 'MDBV'
23PVOID vboxWddmMemAlloc(IN SIZE_T cbSize)
24{
25 return ExAllocatePoolWithTag(NonPagedPool, cbSize, VBOXWDDM_MEMTAG);
26}
27
28PVOID vboxWddmMemAllocZero(IN SIZE_T cbSize)
29{
30 PVOID pvMem = vboxWddmMemAlloc(cbSize);
31 memset(pvMem, 0, cbSize);
32 return pvMem;
33}
34
35
36VOID vboxWddmMemFree(PVOID pvMem)
37{
38 ExFreePool(pvMem);
39}
40
41NTSTATUS vboxWddmPickResources(PDEVICE_EXTENSION pContext, PDXGK_DEVICE_INFO pDeviceInfo, PULONG pAdapterMemorySize)
42{
43 NTSTATUS Status = STATUS_SUCCESS;
44 USHORT DispiId;
45 *pAdapterMemorySize = VBE_DISPI_TOTAL_VIDEO_MEMORY_BYTES;
46
47 VBoxVideoCmnPortWriteUshort((PUSHORT)VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_ID);
48 VBoxVideoCmnPortWriteUshort((PUSHORT)VBE_DISPI_IOPORT_DATA, VBE_DISPI_ID2);
49 DispiId = VBoxVideoCmnPortReadUshort((PUSHORT)VBE_DISPI_IOPORT_DATA);
50 if (DispiId == VBE_DISPI_ID2)
51 {
52 dprintf(("VBoxVideoWddm: found the VBE card\n"));
53 /*
54 * Write some hardware information to registry, so that
55 * it's visible in Windows property dialog.
56 */
57
58 /*
59 * Query the adapter's memory size. It's a bit of a hack, we just read
60 * an ULONG from the data port without setting an index before.
61 */
62 *pAdapterMemorySize = VBoxVideoCmnPortReadUlong((PULONG)VBE_DISPI_IOPORT_DATA);
63 if (VBoxHGSMIIsSupported (pContext))
64 {
65 pContext->u.primary.IOPortHost = (RTIOPORT)VGA_PORT_HGSMI_HOST;
66 pContext->u.primary.IOPortGuest = (RTIOPORT)VGA_PORT_HGSMI_GUEST;
67
68 PCM_RESOURCE_LIST pRcList = pDeviceInfo->TranslatedResourceList;
69 /* @todo: verify resources */
70 for(ULONG i = 0; i < pRcList->Count; ++i)
71 {
72 PCM_FULL_RESOURCE_DESCRIPTOR pFRc = &pRcList->List[i];
73 for(ULONG j = 0; j < pFRc->PartialResourceList.Count; ++j)
74 {
75 PCM_PARTIAL_RESOURCE_DESCRIPTOR pPRc = &pFRc->PartialResourceList.PartialDescriptors[j];
76 switch(pPRc->Type)
77 {
78 case CmResourceTypePort:
79 break;
80 case CmResourceTypeInterrupt:
81 break;
82 case CmResourceTypeMemory:
83 break;
84 case CmResourceTypeDma:
85 break;
86 case CmResourceTypeDeviceSpecific:
87 break;
88 case CmResourceTypeBusNumber:
89 break;
90 default:
91 break;
92 }
93 }
94 }
95 }
96 else
97 {
98 drprintf(("VBoxVideoWddm: HGSMI unsupported, returning err\n"));
99 /* @todo: report a better status */
100 Status = STATUS_UNSUCCESSFUL;
101 }
102 }
103 else
104 {
105 drprintf(("VBoxVideoWddm:: VBE card not found, returning err\n"));
106 Status = STATUS_UNSUCCESSFUL;
107 }
108
109
110 return Status;
111}
112
113/* driver callbacks */
114
115NTSTATUS DxgkDdiAddDevice(
116 IN CONST PDEVICE_OBJECT PhysicalDeviceObject,
117 OUT PVOID *MiniportDeviceContext
118 )
119{
120 /* The DxgkDdiAddDevice function should be made pageable. */
121 PAGED_CODE();
122
123 dfprintf(("==> "__FUNCTION__ ", pdo(0x%x)\n", PhysicalDeviceObject));
124 NTSTATUS Status = STATUS_UNSUCCESSFUL;
125
126 PDEVICE_EXTENSION pContext = (PDEVICE_EXTENSION)vboxWddmMemAllocZero(sizeof(DEVICE_EXTENSION));
127 if(pContext)
128 {
129 *MiniportDeviceContext = pContext;
130 }
131 else
132 {
133 Status = STATUS_INSUFFICIENT_RESOURCES;
134 drprintf(("VBoxVideoWddm: ERROR, failed to create context\n"));
135 }
136
137 dfprintf(("<== "__FUNCTION__ ", status(0x%x), pContext(0x%x)\n", Status, pContext));
138
139 return Status;
140}
141
142NTSTATUS DxgkDdiStartDevice(
143 IN CONST PVOID MiniportDeviceContext,
144 IN PDXGK_START_INFO DxgkStartInfo,
145 IN PDXGKRNL_INTERFACE DxgkInterface,
146 OUT PULONG NumberOfVideoPresentSources,
147 OUT PULONG NumberOfChildren
148 )
149{
150 /* The DxgkDdiStartDevice function should be made pageable. */
151 PAGED_CODE();
152
153 NTSTATUS Status;
154
155 dfprintf(("==> "__FUNCTION__ ", context(0x%x)\n", MiniportDeviceContext));
156
157 if ( ARGUMENT_PRESENT(MiniportDeviceContext) &&
158 ARGUMENT_PRESENT(DxgkInterface) &&
159 ARGUMENT_PRESENT(DxgkStartInfo) &&
160 ARGUMENT_PRESENT(NumberOfVideoPresentSources),
161 ARGUMENT_PRESENT(NumberOfChildren)
162 )
163 {
164 PDEVICE_EXTENSION pContext = (PDEVICE_EXTENSION)MiniportDeviceContext;
165
166 /* Save DeviceHandle and function pointers supplied by the DXGKRNL_INTERFACE structure passed to DxgkInterface. */
167 memcpy(&pContext->u.primary.DxgkInterface, DxgkInterface, sizeof(DXGKRNL_INTERFACE));
168
169 /* Allocate a DXGK_DEVICE_INFO structure, and call DxgkCbGetDeviceInformation to fill in the members of that structure, which include the registry path, the PDO, and a list of translated resources for the display adapter represented by MiniportDeviceContext. Save selected members (ones that the display miniport driver will need later)
170 * of the DXGK_DEVICE_INFO structure in the context block represented by MiniportDeviceContext. */
171 DXGK_DEVICE_INFO DeviceInfo;
172 Status = pContext->u.primary.DxgkInterface.DxgkCbGetDeviceInformation (pContext->u.primary.DxgkInterface.DeviceHandle, &DeviceInfo);
173 if(Status == STATUS_SUCCESS)
174 {
175 ULONG AdapterMemorySize;
176 Status = vboxWddmPickResources(pContext, &DeviceInfo, &AdapterMemorySize);
177 if(Status == STATUS_SUCCESS)
178 {
179 /* Initialize VBoxGuest library, which is used for requests which go through VMMDev. */
180 VbglInit ();
181
182 /* Guest supports only HGSMI, the old VBVA via VMMDev is not supported. Old
183 * code will be ifdef'ed and later removed.
184 * The host will however support both old and new interface to keep compatibility
185 * with old guest additions.
186 */
187 VBoxSetupDisplaysHGSMI(pContext, AdapterMemorySize);
188 if ((pContext)->u.primary.bHGSMI)
189 {
190 drprintf(("VBoxVideoWddm: using HGSMI\n"));
191 *NumberOfVideoPresentSources = pContext->u.primary.cDisplays;
192 *NumberOfChildren = pContext->u.primary.cDisplays;
193 dprintf(("VBoxVideoWddm: sources(%d), children(%d)\n", *NumberOfVideoPresentSources, *NumberOfChildren));
194 }
195 else
196 {
197 drprintf(("VBoxVideoWddm: HGSMI failed to initialize, returning err\n"));
198 /* @todo: report a better status */
199 Status = STATUS_UNSUCCESSFUL;
200 }
201 }
202 else
203 {
204 drprintf(("VBoxVideoWddm:: vboxWddmPickResources failed Status(0x%x), returning err\n", Status));
205 Status = STATUS_UNSUCCESSFUL;
206 }
207 }
208 else
209 {
210 drprintf(("VBoxVideoWddm: DxgkCbGetDeviceInformation failed Status(0x%x), returning err\n", Status));
211 }
212 }
213 else
214 {
215 drprintf(("VBoxVideoWddm: invalid parameter, returning err\n"));
216 Status = STATUS_INVALID_PARAMETER;
217 }
218
219 dfprintf(("<== "__FUNCTION__ ", status(0x%x)\n", Status));
220
221 return Status;
222}
223
224NTSTATUS DxgkDdiStopDevice(
225 IN CONST PVOID MiniportDeviceContext
226 )
227{
228 return STATUS_NOT_IMPLEMENTED;
229}
230
231NTSTATUS DxgkDdiRemoveDevice(
232 IN CONST PVOID MiniportDeviceContext
233 )
234{
235 return STATUS_NOT_IMPLEMENTED;
236}
237
238NTSTATUS DxgkDdiDispatchIoRequest(
239 IN CONST PVOID MiniportDeviceContext,
240 IN ULONG VidPnSourceId,
241 IN PVIDEO_REQUEST_PACKET VideoRequestPacket
242 )
243{
244 return STATUS_NOT_IMPLEMENTED;
245}
246
247BOOLEAN DxgkDdiInterruptRoutine(
248 IN CONST PVOID MiniportDeviceContext,
249 IN ULONG MessageNumber
250 )
251{
252 return false;
253}
254
255VOID DxgkDdiDpcRoutine(
256 IN CONST PVOID MiniportDeviceContext
257 )
258{
259
260}
261
262NTSTATUS DxgkDdiQueryChildRelations(
263 IN CONST PVOID MiniportDeviceContext,
264 IN OUT PDXGK_CHILD_DESCRIPTOR ChildRelations,
265 IN ULONG ChildRelationsSize
266 )
267{
268 /* The DxgkDdiQueryChildRelations function should be made pageable. */
269 PAGED_CODE();
270
271 dfprintf(("==> "__FUNCTION__ ", context(0x%x)\n", MiniportDeviceContext));
272 for(ULONG i = 0; i < ChildRelationsSize; i++)
273 {
274 ChildRelations[i].ChildDeviceType = TypeVideoOutput;
275 ChildRelations[i].ChildCapabilities.Type.VideoOutput.InterfaceTechnology = D3DKMDT_VOT_OTHER;
276 ChildRelations[i].ChildCapabilities.Type.VideoOutput.MonitorOrientationAwareness = D3DKMDT_MOA_NONE;
277 ChildRelations[i].ChildCapabilities.Type.VideoOutput.SupportsSdtvModes = FALSE;
278 ChildRelations[i].ChildCapabilities.HpdAwareness = HpdAwarenessAlwaysConnected;
279 ChildRelations[i].AcpiUid = i+1; /* @todo: do we need it? could it be zero ? */
280 ChildRelations[i].ChildUid = i+1; /* could it be zero ? */
281 }
282 dfprintf(("<== "__FUNCTION__ ", context(0x%x)\n", MiniportDeviceContext));
283 return STATUS_SUCCESS;
284}
285
286NTSTATUS DxgkDdiQueryChildStatus(
287 IN CONST PVOID MiniportDeviceContext,
288 IN PDXGK_CHILD_STATUS ChildStatus,
289 IN BOOLEAN NonDestructiveOnly
290 )
291{
292 /* The DxgkDdiQueryChildStatus should be made pageable. */
293 PAGED_CODE();
294
295 dfprintf(("==> "__FUNCTION__ ", context(0x%x)\n", MiniportDeviceContext));
296
297 NTSTATUS Status = STATUS_SUCCESS;
298 switch(ChildStatus->Type)
299 {
300 case StatusConnection:
301 ChildStatus->HotPlug.Connected = TRUE;
302 dfprintf(("VBoxVideoWddm: StatusConnection\n"));
303 break;
304 case StatusRotation:
305 ChildStatus->Rotation.Angle = 0;
306 dfprintf(("VBoxVideoWddm: StatusRotation\n"));
307 break;
308 default:
309 drprintf(("VBoxVideoWddm: ERROR: status type: %d\n", ChildStatus->Type));
310 Status = STATUS_INVALID_PARAMETER;
311 break;
312 }
313
314 dfprintf(("<== "__FUNCTION__ ", context(0x%x)\n", MiniportDeviceContext));
315
316 return Status;
317}
318
319NTSTATUS DxgkDdiQueryDeviceDescriptor(
320 IN CONST PVOID MiniportDeviceContext,
321 IN ULONG ChildUid,
322 IN OUT PDXGK_DEVICE_DESCRIPTOR DeviceDescriptor
323 )
324{
325 return STATUS_NOT_IMPLEMENTED;
326}
327
328NTSTATUS DxgkDdiSetPowerState(
329 IN CONST PVOID MiniportDeviceContext,
330 IN ULONG DeviceUid,
331 IN DEVICE_POWER_STATE DevicePowerState,
332 IN POWER_ACTION ActionType
333 )
334{
335 return STATUS_NOT_IMPLEMENTED;
336}
337
338NTSTATUS DxgkDdiNotifyAcpiEvent(
339 IN CONST PVOID MiniportDeviceContext,
340 IN DXGK_EVENT_TYPE EventType,
341 IN ULONG Event,
342 IN PVOID Argument,
343 OUT PULONG AcpiFlags
344 )
345{
346 return STATUS_NOT_IMPLEMENTED;
347}
348
349VOID DxgkDdiResetDevice(
350 IN CONST PVOID MiniportDeviceContext
351 )
352{
353
354}
355
356VOID DxgkDdiUnload(
357 VOID
358 )
359{
360
361}
362
363NTSTATUS DxgkDdiQueryInterface(
364 IN CONST PVOID MiniportDeviceContext,
365 IN PQUERY_INTERFACE QueryInterface
366 )
367{
368 return STATUS_NOT_IMPLEMENTED;
369}
370
371VOID DxgkDdiControlEtwLogging(
372 IN BOOLEAN Enable,
373 IN ULONG Flags,
374 IN UCHAR Level
375 )
376{
377
378}
379
380NTSTATUS APIENTRY DxgkDdiQueryAdapterInfo(
381 CONST HANDLE hAdapter,
382 CONST DXGKARG_QUERYADAPTERINFO* pQueryAdapterInfo)
383{
384 return STATUS_NOT_IMPLEMENTED;
385}
386
387NTSTATUS APIENTRY DxgkDdiCreateDevice(
388 CONST HANDLE hAdapter,
389 DXGKARG_CREATEDEVICE* pCreateDevice)
390{
391 return STATUS_NOT_IMPLEMENTED;
392}
393
394NTSTATUS APIENTRY DxgkDdiCreateAllocation(
395 CONST HANDLE hAdapter,
396 DXGKARG_CREATEALLOCATION* pCreateAllocation)
397{
398 return STATUS_NOT_IMPLEMENTED;
399}
400
401NTSTATUS
402APIENTRY
403DxgkDdiDestroyAllocation(
404 CONST HANDLE hAdapter,
405 CONST DXGKARG_DESTROYALLOCATION* pDestroyAllocation)
406{
407 return STATUS_NOT_IMPLEMENTED;
408}
409
410
411NTSTATUS
412APIENTRY
413DxgkDdiDescribeAllocation(
414 CONST HANDLE hAdapter,
415 DXGKARG_DESCRIBEALLOCATION* pDescribeAllocation)
416{
417 return STATUS_NOT_IMPLEMENTED;
418}
419
420NTSTATUS
421APIENTRY
422DxgkDdiGetStandardAllocationDriverData(
423 CONST HANDLE hAdapter,
424 DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA* pGetStandardAllocationDriverData)
425{
426 return STATUS_NOT_IMPLEMENTED;
427}
428
429NTSTATUS
430APIENTRY
431DxgkDdiAcquireSwizzlingRange(
432 CONST HANDLE hAdapter,
433 DXGKARG_ACQUIRESWIZZLINGRANGE* pAcquireSwizzlingRange)
434{
435 return STATUS_NOT_IMPLEMENTED;
436}
437
438NTSTATUS
439APIENTRY
440DxgkDdiReleaseSwizzlingRange(
441 CONST HANDLE hAdapter,
442 CONST DXGKARG_RELEASESWIZZLINGRANGE* pReleaseSwizzlingRange)
443{
444 return STATUS_NOT_IMPLEMENTED;
445}
446
447NTSTATUS
448APIENTRY
449DxgkDdiPatch(
450 CONST HANDLE hAdapter,
451 CONST DXGKARG_PATCH* pPatch)
452{
453 return STATUS_NOT_IMPLEMENTED;
454}
455
456NTSTATUS
457APIENTRY
458DxgkDdiSubmitCommand(
459 CONST HANDLE hAdapter,
460 CONST DXGKARG_SUBMITCOMMAND* pSubmitCommand)
461{
462 return STATUS_NOT_IMPLEMENTED;
463}
464
465NTSTATUS
466APIENTRY
467DxgkDdiPreemptCommand(
468 CONST HANDLE hAdapter,
469 CONST DXGKARG_PREEMPTCOMMAND* pPreemptCommand)
470{
471 return STATUS_NOT_IMPLEMENTED;
472}
473
474NTSTATUS
475APIENTRY
476DxgkDdiBuildPagingBuffer(
477 CONST HANDLE hAdapter,
478 DXGKARG_BUILDPAGINGBUFFER* pBuildPagingBuffer)
479{
480 return STATUS_NOT_IMPLEMENTED;
481}
482
483NTSTATUS
484APIENTRY
485DxgkDdiSetPalette(
486 CONST HANDLE hAdapter,
487 CONST DXGKARG_SETPALETTE* pSetPalette
488 )
489{
490 return STATUS_NOT_IMPLEMENTED;
491}
492
493NTSTATUS
494APIENTRY
495DxgkDdiSetPointerPosition(
496 CONST HANDLE hAdapter,
497 CONST DXGKARG_SETPOINTERPOSITION* pSetPointerPosition)
498{
499 return STATUS_NOT_IMPLEMENTED;
500}
501
502NTSTATUS
503APIENTRY
504DxgkDdiSetPointerShape(
505 CONST HANDLE hAdapter,
506 CONST DXGKARG_SETPOINTERSHAPE* pSetPointerShape)
507{
508 return STATUS_NOT_IMPLEMENTED;
509}
510
511NTSTATUS
512APIENTRY CALLBACK
513DxgkDdiResetFromTimeout(
514 CONST HANDLE hAdapter)
515{
516 return STATUS_NOT_IMPLEMENTED;
517}
518
519NTSTATUS
520APIENTRY
521DxgkDdiEscape(
522 CONST HANDLE hAdapter,
523 CONST DXGKARG_ESCAPE* pEscape)
524{
525 PAGED_CODE();
526
527 return STATUS_INVALID_PARAMETER;
528}
529
530NTSTATUS
531APIENTRY
532DxgkDdiCollectDbgInfo(
533 CONST HANDLE hAdapter,
534 CONST DXGKARG_COLLECTDBGINFO* pCollectDbgInfo
535 )
536{
537 return STATUS_NOT_IMPLEMENTED;
538}
539
540NTSTATUS
541APIENTRY
542DxgkDdiQueryCurrentFence(
543 CONST HANDLE hAdapter,
544 DXGKARG_QUERYCURRENTFENCE* pCurrentFence)
545{
546 return STATUS_NOT_IMPLEMENTED;
547}
548
549NTSTATUS
550APIENTRY
551DxgkDdiIsSupportedVidPn(
552 CONST HANDLE hAdapter,
553 OUT DXGKARG_ISSUPPORTEDVIDPN* pIsSupportedVidPnArg
554 )
555{
556 return STATUS_NOT_IMPLEMENTED;
557}
558
559NTSTATUS
560APIENTRY
561DxgkDdiRecommendFunctionalVidPn(
562 CONST HANDLE hAdapter,
563 CONST DXGKARG_RECOMMENDFUNCTIONALVIDPN* CONST pRecommendFunctionalVidPnArg
564 )
565{
566 return STATUS_NOT_IMPLEMENTED;
567}
568
569NTSTATUS
570APIENTRY
571DxgkDdiEnumVidPnCofuncModality(
572 CONST HANDLE hAdapter,
573 CONST DXGKARG_ENUMVIDPNCOFUNCMODALITY* CONST pEnumCofuncModalityArg
574 )
575{
576 return STATUS_NOT_IMPLEMENTED;
577}
578
579NTSTATUS
580APIENTRY
581DxgkDdiSetVidPnSourceAddress(
582 CONST HANDLE hAdapter,
583 CONST DXGKARG_SETVIDPNSOURCEADDRESS* pSetVidPnSourceAddress
584 )
585{
586 return STATUS_NOT_IMPLEMENTED;
587}
588
589NTSTATUS
590APIENTRY
591DxgkDdiSetVidPnSourceVisibility(
592 CONST HANDLE hAdapter,
593 CONST DXGKARG_SETVIDPNSOURCEVISIBILITY* pSetVidPnSourceVisibility
594 )
595{
596 return STATUS_NOT_IMPLEMENTED;
597}
598
599NTSTATUS
600APIENTRY
601DxgkDdiCommitVidPn(
602 CONST HANDLE hAdapter,
603 CONST DXGKARG_COMMITVIDPN* CONST pCommitVidPnArg
604 )
605{
606 return STATUS_NOT_IMPLEMENTED;
607}
608
609NTSTATUS
610APIENTRY
611DxgkDdiUpdateActiveVidPnPresentPath(
612 CONST HANDLE hAdapter,
613 CONST DXGKARG_UPDATEACTIVEVIDPNPRESENTPATH* CONST pUpdateActiveVidPnPresentPathArg
614 )
615{
616 return STATUS_NOT_IMPLEMENTED;
617}
618
619NTSTATUS
620APIENTRY
621DxgkDdiRecommendMonitorModes(
622 CONST HANDLE hAdapter,
623 CONST DXGKARG_RECOMMENDMONITORMODES* CONST pRecommendMonitorModesArg
624 )
625{
626 return STATUS_NOT_IMPLEMENTED;
627}
628
629NTSTATUS
630APIENTRY
631DxgkDdiRecommendVidPnTopology(
632 CONST HANDLE hAdapter,
633 CONST DXGKARG_RECOMMENDVIDPNTOPOLOGY* CONST pRecommendVidPnTopologyArg
634 )
635{
636 return STATUS_NOT_IMPLEMENTED;
637}
638
639NTSTATUS
640APIENTRY
641DxgkDdiGetScanLine(
642 CONST HANDLE hAdapter,
643 DXGKARG_GETSCANLINE* pGetScanLine)
644{
645 return STATUS_NOT_IMPLEMENTED;
646}
647
648NTSTATUS
649APIENTRY
650DxgkDdiStopCapture(
651 CONST HANDLE hAdapter,
652 CONST DXGKARG_STOPCAPTURE* pStopCapture)
653{
654 return STATUS_NOT_IMPLEMENTED;
655}
656
657NTSTATUS
658APIENTRY
659DxgkDdiControlInterrupt(
660 CONST HANDLE hAdapter,
661 CONST DXGK_INTERRUPT_TYPE InterruptType,
662 BOOLEAN Enable
663 )
664{
665 return STATUS_NOT_IMPLEMENTED;
666}
667
668NTSTATUS
669APIENTRY
670DxgkDdiCreateOverlay(
671 CONST HANDLE hAdapter,
672 DXGKARG_CREATEOVERLAY *pCreateOverlay)
673{
674 return STATUS_NOT_IMPLEMENTED;
675}
676
677NTSTATUS
678APIENTRY
679DxgkDdiDestroyDevice(
680 CONST HANDLE hDevice)
681{
682 return STATUS_NOT_IMPLEMENTED;
683}
684
685NTSTATUS
686APIENTRY
687DxgkDdiOpenAllocation(
688 CONST HANDLE hDevice,
689 CONST DXGKARG_OPENALLOCATION *pOpenAllocation)
690{
691 return STATUS_NOT_IMPLEMENTED;
692}
693
694NTSTATUS
695APIENTRY
696DxgkDdiCloseAllocation(
697 CONST HANDLE hDevice,
698 CONST DXGKARG_CLOSEALLOCATION* pCloseAllocation)
699{
700 return STATUS_NOT_IMPLEMENTED;
701}
702
703NTSTATUS
704APIENTRY
705DxgkDdiRender(
706 CONST HANDLE hContext,
707 DXGKARG_RENDER *pRender)
708{
709 return STATUS_NOT_IMPLEMENTED;
710}
711
712NTSTATUS
713APIENTRY
714DxgkDdiPresent(
715 CONST HANDLE hContext,
716 DXGKARG_PRESENT *pPresent)
717{
718 return STATUS_NOT_IMPLEMENTED;
719}
720
721NTSTATUS
722APIENTRY
723DxgkDdiUpdateOverlay(
724 CONST HANDLE hOverlay,
725 CONST DXGKARG_UPDATEOVERLAY *pUpdateOverlay)
726{
727 return STATUS_NOT_IMPLEMENTED;
728}
729
730NTSTATUS
731APIENTRY
732DxgkDdiFlipOverlay(
733 CONST HANDLE hOverlay,
734 CONST DXGKARG_FLIPOVERLAY *pFlipOverlay)
735{
736 return STATUS_NOT_IMPLEMENTED;
737}
738
739NTSTATUS
740APIENTRY
741DxgkDdiDestroyOverlay(
742 CONST HANDLE hOverlay)
743{
744 return STATUS_NOT_IMPLEMENTED;
745}
746
747NTSTATUS
748APIENTRY
749DxgkDdiCreateContext(
750 CONST HANDLE hDevice,
751 DXGKARG_CREATECONTEXT *pCreateContext)
752{
753 return STATUS_NOT_IMPLEMENTED;
754}
755
756NTSTATUS
757APIENTRY
758DxgkDdiDestroyContext(
759 CONST HANDLE hContext)
760{
761 return STATUS_NOT_IMPLEMENTED;
762}
763
764NTSTATUS
765APIENTRY
766DxgkDdiLinkDevice(
767 __in CONST PDEVICE_OBJECT PhysicalDeviceObject,
768 __in CONST PVOID MiniportDeviceContext,
769 __inout PLINKED_DEVICE LinkedDevice
770 )
771{
772 return STATUS_NOT_IMPLEMENTED;
773}
774
775NTSTATUS
776APIENTRY
777DxgkDdiSetDisplayPrivateDriverFormat(
778 CONST HANDLE hAdapter,
779 /*CONST*/ DXGKARG_SETDISPLAYPRIVATEDRIVERFORMAT* pSetDisplayPrivateDriverFormat
780 )
781{
782 return STATUS_NOT_IMPLEMENTED;
783}
784
785NTSTATUS
786DriverEntry(
787 IN PDRIVER_OBJECT DriverObject,
788 IN PUNICODE_STRING RegistryPath
789 )
790{
791 dprintf(("VBoxVideoWddm::DriverEntry. Built %s %s\n", __DATE__, __TIME__));
792
793 DRIVER_INITIALIZATION_DATA DriverInitializationData = {'\0'};
794
795 PAGED_CODE();
796
797 if (! ARGUMENT_PRESENT(DriverObject) ||
798 ! ARGUMENT_PRESENT(RegistryPath))
799 {
800 return STATUS_INVALID_PARAMETER;
801 }
802
803 // Fill in the DriverInitializationData structure and call DxgkInitialize()
804 DriverInitializationData.Version = DXGKDDI_INTERFACE_VERSION;
805
806 DriverInitializationData.DxgkDdiAddDevice = DxgkDdiAddDevice;
807 DriverInitializationData.DxgkDdiStartDevice = DxgkDdiStartDevice;
808 DriverInitializationData.DxgkDdiStopDevice = DxgkDdiStopDevice;
809 DriverInitializationData.DxgkDdiRemoveDevice = DxgkDdiRemoveDevice;
810 DriverInitializationData.DxgkDdiDispatchIoRequest = DxgkDdiDispatchIoRequest;
811 DriverInitializationData.DxgkDdiInterruptRoutine = DxgkDdiInterruptRoutine;
812 DriverInitializationData.DxgkDdiDpcRoutine = DxgkDdiDpcRoutine;
813 DriverInitializationData.DxgkDdiQueryChildRelations = DxgkDdiQueryChildRelations;
814 DriverInitializationData.DxgkDdiQueryChildStatus = DxgkDdiQueryChildStatus;
815 DriverInitializationData.DxgkDdiQueryDeviceDescriptor = DxgkDdiQueryDeviceDescriptor;
816 DriverInitializationData.DxgkDdiSetPowerState = DxgkDdiSetPowerState;
817 DriverInitializationData.DxgkDdiNotifyAcpiEvent = DxgkDdiNotifyAcpiEvent;
818 DriverInitializationData.DxgkDdiResetDevice = DxgkDdiResetDevice;
819 DriverInitializationData.DxgkDdiUnload = DxgkDdiUnload;
820 DriverInitializationData.DxgkDdiQueryInterface = DxgkDdiQueryInterface;
821 DriverInitializationData.DxgkDdiControlEtwLogging = DxgkDdiControlEtwLogging;
822
823 DriverInitializationData.DxgkDdiQueryAdapterInfo = DxgkDdiQueryAdapterInfo;
824 DriverInitializationData.DxgkDdiCreateDevice = DxgkDdiCreateDevice;
825 DriverInitializationData.DxgkDdiCreateAllocation = DxgkDdiCreateAllocation;
826 DriverInitializationData.DxgkDdiDestroyAllocation = DxgkDdiDestroyAllocation ;
827
828 DriverInitializationData.DxgkDdiDescribeAllocation = DxgkDdiDescribeAllocation;
829 DriverInitializationData.DxgkDdiGetStandardAllocationDriverData = DxgkDdiGetStandardAllocationDriverData;
830
831 DriverInitializationData.DxgkDdiAcquireSwizzlingRange = DxgkDdiAcquireSwizzlingRange;
832 DriverInitializationData.DxgkDdiReleaseSwizzlingRange = DxgkDdiReleaseSwizzlingRange;
833
834 DriverInitializationData.DxgkDdiPatch = DxgkDdiPatch;
835
836 DriverInitializationData.DxgkDdiSubmitCommand = DxgkDdiSubmitCommand;
837 DriverInitializationData.DxgkDdiPreemptCommand = DxgkDdiPreemptCommand;
838 DriverInitializationData.DxgkDdiBuildPagingBuffer = DxgkDdiBuildPagingBuffer;
839
840 DriverInitializationData.DxgkDdiSetPalette = DxgkDdiSetPalette;
841 DriverInitializationData.DxgkDdiSetPointerPosition = DxgkDdiSetPointerPosition;
842 DriverInitializationData.DxgkDdiSetPointerShape = DxgkDdiSetPointerShape;
843
844 DriverInitializationData.DxgkDdiResetFromTimeout = DxgkDdiResetFromTimeout;
845
846 DriverInitializationData.DxgkDdiEscape = DxgkDdiEscape;
847
848 DriverInitializationData.DxgkDdiCollectDbgInfo = DxgkDdiCollectDbgInfo;
849
850 DriverInitializationData.DxgkDdiQueryCurrentFence = DxgkDdiQueryCurrentFence;
851
852 DriverInitializationData.DxgkDdiIsSupportedVidPn = DxgkDdiIsSupportedVidPn;
853 DriverInitializationData.DxgkDdiRecommendFunctionalVidPn = DxgkDdiRecommendFunctionalVidPn;
854 DriverInitializationData.DxgkDdiEnumVidPnCofuncModality = DxgkDdiEnumVidPnCofuncModality;
855 DriverInitializationData.DxgkDdiSetVidPnSourceAddress = DxgkDdiSetVidPnSourceAddress;
856 DriverInitializationData.DxgkDdiSetVidPnSourceVisibility = DxgkDdiSetVidPnSourceVisibility;
857 DriverInitializationData.DxgkDdiCommitVidPn = DxgkDdiCommitVidPn;
858 DriverInitializationData.DxgkDdiUpdateActiveVidPnPresentPath = DxgkDdiUpdateActiveVidPnPresentPath;
859
860 DriverInitializationData.DxgkDdiRecommendMonitorModes = DxgkDdiRecommendMonitorModes;
861 DriverInitializationData.DxgkDdiRecommendVidPnTopology = DxgkDdiRecommendVidPnTopology;
862
863 DriverInitializationData.DxgkDdiGetScanLine = DxgkDdiGetScanLine;
864
865 DriverInitializationData.DxgkDdiStopCapture = DxgkDdiStopCapture;
866
867 DriverInitializationData.DxgkDdiControlInterrupt = DxgkDdiControlInterrupt;
868
869 DriverInitializationData.DxgkDdiCreateOverlay = DxgkDdiCreateOverlay;
870
871 DriverInitializationData.DxgkDdiDestroyDevice = DxgkDdiDestroyDevice;
872
873 DriverInitializationData.DxgkDdiOpenAllocation = DxgkDdiOpenAllocation;
874 DriverInitializationData.DxgkDdiCloseAllocation = DxgkDdiCloseAllocation;
875
876 DriverInitializationData.DxgkDdiRender = DxgkDdiRender;
877 DriverInitializationData.DxgkDdiPresent = DxgkDdiPresent;
878
879 DriverInitializationData.DxgkDdiUpdateOverlay = DxgkDdiUpdateOverlay;
880 DriverInitializationData.DxgkDdiFlipOverlay = DxgkDdiFlipOverlay;
881 DriverInitializationData.DxgkDdiDestroyOverlay = DxgkDdiDestroyOverlay;
882
883 DriverInitializationData.DxgkDdiCreateContext = DxgkDdiCreateContext;
884 DriverInitializationData.DxgkDdiDestroyContext = DxgkDdiDestroyContext;
885
886 DriverInitializationData.DxgkDdiLinkDevice = DxgkDdiLinkDevice;
887 DriverInitializationData.DxgkDdiSetDisplayPrivateDriverFormat = DxgkDdiSetDisplayPrivateDriverFormat;
888
889//#if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7)
890// DriverInitializationData.DxgkDdiRenderKm = D3DDDIRenderKm;
891// DriverInitializationData.DxgkDdiRestartFromTimeout = D3DDDIRestartFromTimeout;
892// DriverInitializationData.DxgkDdiSetVidPnSourceVisibility = DxgkDdiSetVidPnSourceVisibility;
893// DriverInitializationData.DxgkDdiUpdateActiveVidPnPresentPath = D3DDDIUpdateActiveVidPnPresentPath;
894// DriverInitializationData.DxgkDdiQueryVidPnHWCapability = D3DDDI DxgkDdiQueryVidPnHWCapability;
895//#endif
896
897 return DxgkInitialize(DriverObject,
898 RegistryPath,
899 &DriverInitializationData);
900}
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