3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * PURPOSE: Native driver for dxg implementation
6 * FILE: drivers/directx/dxg/main.c
7 * PROGRAMER: Magnus olsen (magnus@greatlord.com)
9 * 15/10-2007 Magnus Olsen
14 #include "dxg_driver.h"
16 LONG gcDummyPageRefCnt
= 0;
17 HSEMAPHORE ghsemDummyPage
= NULL
;
18 VOID
*gpDummyPage
= NULL
;
19 PEPROCESS gpepSession
= NULL
;
20 PLARGE_INTEGER gpLockShortDelay
= NULL
;
24 const ULONG gcDxgFuncs
= DXG_INDEX_DxDdIoctl
+ 1;
29 DriverEntry(IN PVOID Context1
,
37 DxDdStartupDxGraphics (ULONG SizeEngDrv
,
38 PDRVENABLEDATA pDxEngDrv
,
40 PDRVENABLEDATA pDxgDrv
,
41 PULONG DirectDrawContext
,
48 /* Test see if the data is vaild we got from win32k.sys */
49 if ((SizeEngDrv
!= sizeof(DRVENABLEDATA
)) ||
50 (SizeDxgDrv
!= sizeof(DRVENABLEDATA
)))
52 return STATUS_BUFFER_TOO_SMALL
;
55 /* rest static value */
57 gcDummyPageRefCnt
= 0;
58 ghsemDummyPage
= NULL
;
61 * Setup internal driver functions list we got from dxg driver functions list
63 pDxgDrv
->iDriverVersion
= 0x80000; /* Note 12/1-2004 : DirectX 8 ? */
64 pDxgDrv
->c
= gcDxgFuncs
;
65 pDxgDrv
->pdrvfn
= gaDxgFuncs
;
67 /* check how many driver functions and fail if the value does not match */
68 if (pDxEngDrv
->c
!= DXENG_INDEX_DxEngLoadImage
+ 1)
70 return STATUS_INTERNAL_ERROR
;
74 * Check if all drv functions are sorted right
75 * and if it really are exported
78 for (i
=1 ; i
< DXENG_INDEX_DxEngLoadImage
+ 1; i
++)
80 drv_func
= &pDxEngDrv
->pdrvfn
[i
];
82 if ((drv_func
->iFunc
!= i
) ||
83 (drv_func
->pfn
== NULL
))
85 return STATUS_INTERNAL_ERROR
;
89 gpEngFuncs
= pDxEngDrv
->pdrvfn
;
91 /* Note 12/1-2004 : Why is this set to 0x618 */
92 *DirectDrawContext
= 0x618;
96 ghsemDummyPage
= EngCreateSemaphore();
101 return STATUS_SUCCESS
;
109 EngDeleteSemaphore(ghsemDummyPage
);
113 return STATUS_NO_MEMORY
;
120 DxDdCleanupDxGraphics()
124 if (ghsemDummyPage
!= 0 )
126 if (gpDummyPage
!= 0 )
128 ExFreePoolWithTag(gpDummyPage
,0);
130 gcDummyPageRefCnt
= 0;
132 EngDeleteSemaphore(ghsemDummyPage
);