From 19462f737c1fbbbbf19392124444c596707e4fff Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Wed, 24 Oct 2007 11:05:44 +0000 Subject: [PATCH] add complete startup process code for dxg.sys svn path=/branches/reactx/; revision=29848 --- reactos/drivers/directx/dxg/dxg.rbuild | 2 ++ reactos/drivers/directx/dxg/dxg_int.h | 3 ++ reactos/drivers/directx/dxg/eng.c | 14 ++++++++ reactos/drivers/directx/dxg/main.c | 49 +++++++++++++++++++++----- reactos/drivers/directx/dxg/tags.h | 8 +++++ 5 files changed, 67 insertions(+), 9 deletions(-) create mode 100644 reactos/drivers/directx/dxg/eng.c create mode 100644 reactos/drivers/directx/dxg/tags.h diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/reactos/drivers/directx/dxg/dxg.rbuild index 8a08f8f4e72..57421e86592 100644 --- a/reactos/drivers/directx/dxg/dxg.rbuild +++ b/reactos/drivers/directx/dxg/dxg.rbuild @@ -6,7 +6,9 @@ installbase="system32/drivers" installname="dxg.sys"> . dxgthk + ntoskrnl main.c + eng.c historic.c dxg.rc diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h index a8340f79444..996b3941f80 100644 --- a/reactos/drivers/directx/dxg/dxg_int.h +++ b/reactos/drivers/directx/dxg/dxg_int.h @@ -27,6 +27,8 @@ #include #include +#include "tags.h" + /* exported functions */ NTSTATUS DriverEntry(IN PVOID Context1, IN PVOID Context2); @@ -39,5 +41,6 @@ DWORD STDCALL DxDxgGenericThunk(ULONG_PTR ulIndex, ULONG_PTR ulHandle, SIZE_T *p DWORD STDCALL DxDdIoctl(ULONG ulIoctl, PVOID pBuffer, ULONG ulBufferSize); /* Internel functions */ +BOOL DdHmgCreate(); BOOL DdHmgDestroy(); diff --git a/reactos/drivers/directx/dxg/eng.c b/reactos/drivers/directx/dxg/eng.c new file mode 100644 index 00000000000..f83a44bfa74 --- /dev/null +++ b/reactos/drivers/directx/dxg/eng.c @@ -0,0 +1,14 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * PURPOSE: Native driver for dxg implementation + * FILE: drivers/directx/dxg/main.c + * PROGRAMER: Magnus olsen (magnus@greatlord.com) + * REVISION HISTORY: + * 15/10-2007 Magnus Olsen + */ + + + + + diff --git a/reactos/drivers/directx/dxg/main.c b/reactos/drivers/directx/dxg/main.c index 98756498971..52926cd513c 100644 --- a/reactos/drivers/directx/dxg/main.c +++ b/reactos/drivers/directx/dxg/main.c @@ -20,6 +20,11 @@ HSEMAPHORE ghsemHmgr = NULL; HSEMAPHORE ghsemDummyPage = NULL; VOID *gpDummyPage = NULL; PEPROCESS gpepSession = NULL; +PLARGE_INTEGER gpLockShortDelay = NULL; +HANDLE ghFreeDdHmgr = 0; +VOID *gpentDdHmgr = NULL; +VOID *gpentDdHmgrLast = NULL; + PDRVFN gpEngFuncs; const ULONG gcDxgFuncs = DXG_INDEX_DxDdIoctl + 1; @@ -92,7 +97,6 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv, /* Note 12/1-2004 : Why is this set to 0x618 */ *DirectDrawContext = 0x618; -#if 0 if (DdHmgCreate()) { ghsemDummyPage = EngCreateSemaphore(); @@ -103,7 +107,6 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv, return STATUS_SUCCESS; } } -#endif DdHmgDestroy(); @@ -119,16 +122,13 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv, NTSTATUS DxDdCleanupDxGraphics() { - DdHmgDestroy(); if (!ghsemDummyPage) { if (!gpDummyPage) { -#if 0 ExFreePoolWithTag(gpDummyPage,0); -#endif gpDummyPage = NULL; gcDummyPageRefCnt = 0; } @@ -143,16 +143,15 @@ DdHmgDestroy() { gcMaxDdHmgr = 0; gcSizeDdHmgr = 0; -#if 0 ghFreeDdHmgr = 0; - gpentDdHmgrLast = 0; + gpentDdHmgrLast = NULL; if (gpentDdHmgr) { EngFreeMem(gpentDdHmgr); - gpentDdHmgr = 0; + gpentDdHmgr = NULL; } -#endif + if (ghsemHmgr) { EngDeleteSemaphore(ghsemHmgr); @@ -162,3 +161,35 @@ DdHmgDestroy() return TRUE; } + +BOOL +DdHmgCreate() +{ + gpentDdHmgr = EngAllocMem(FL_ZERO_MEMORY, gcSizeDdHmgr, TAG_THDD); + ghFreeDdHmgr = 0; + gcMaxDdHmgr = 1; + + if (gpentDdHmgr) + { + ghsemHmgr = EngCreateSemaphore(); + + if (ghsemHmgr) + { + gpLockShortDelay = EngAllocMem(FL_ZERO_MEMORY | FL_NONPAGED_MEMORY, sizeof(LARGE_INTEGER), TAG_GINI); + + if (gpLockShortDelay) + { + gpLockShortDelay->QuadPart = ((LONGLONG)-100000); + return TRUE; + } + + EngDeleteSemaphore(ghsemHmgr); + ghsemHmgr = NULL; + } + + EngFreeMem(gpentDdHmgr); + gpentDdHmgr = NULL; + } + + return FALSE; +} diff --git a/reactos/drivers/directx/dxg/tags.h b/reactos/drivers/directx/dxg/tags.h new file mode 100644 index 00000000000..2dadac66208 --- /dev/null +++ b/reactos/drivers/directx/dxg/tags.h @@ -0,0 +1,8 @@ + + + +#define TAG_THDD TAG('t', 'h', 'd', 'd') +#define TAG_GINI TAG('G', 'i', 'n', 'i') + + +