# HG changeset patch # User faust3 # Date 1190063549 0 # Node ID 173d35b7aca33777aac83e80a15f6df1bfe19bb6 # Parent 40a61e5ef8cad1b5cd08e53fb3fffdc92bfc9c0c - make dhahelperwin compile with mingw - add dhahelper.rc based on code by Kevin Kofler and Romain Li¸«±vin from the tilp project http://svn.tilp.info/cgi-bin/viewcvs.cgi/libticables/trunk/src/win32/dha/ diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vidix/dhahelperwin/Makefile Mon Sep 17 21:12:29 2007 +0000 @@ -0,0 +1,42 @@ +include ../../config.mak + +all: dhasetup.exe dhahelper.sys + +dhasetup.exe: dhasetup.c + $(CC) -o dhasetup.exe dhasetup.c + +dhahelper.o: dhahelper.c dhahelper.h + $(CC) -Wall -Os -c dhahelper.c -o dhahelper.o + +dhahelper-rc.o: dhahelper.rc common.ver ntverp.h + windres -I. dhahelper.rc $@ + +base.tmp: dhahelper.o dhahelper-rc.o + $(CC) -Wl,--base-file,base.tmp \ + -Wl,--entry,_DriverEntry@8 \ + -nostartfiles -nostdlib \ + -o junk.tmp \ + dhahelper.o dhahelper-rc.o \ + -lntoskrnl + -rm -f junk.tmp + +temp.exp: base.tmp + dlltool --dllname dhahelper.sys --base-file base.tmp --output-exp temp.exp + +dhahelper.sys: dhahelper.o dhahelper-rc.o temp.exp + $(CC) -Wl,--subsystem,native \ + -Wl,--image-base,0x10000 \ + -Wl,--file-alignment,0x1000 \ + -Wl,--section-alignment,0x1000 \ + -Wl,--entry,_DriverEntry@8 \ + -Wl,temp.exp \ + -mdll -nostartfiles -nostdlib \ + -o dhahelper.sys \ + dhahelper.o dhahelper-rc.o \ + -lntoskrnl + strip dhahelper.sys + +clean: + rm -f *.o *~ dhahelper.sys dhasetup.exe base.tmp temp.exp + +distclean: clean diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/SOURCES --- a/vidix/dhahelperwin/SOURCES Mon Sep 17 21:03:24 2007 +0000 +++ b/vidix/dhahelperwin/SOURCES Mon Sep 17 21:12:29 2007 +0000 @@ -3,4 +3,4 @@ TARGETTYPE=DRIVER NTDEBUG=ntsd -SOURCES= dhahelper.c +SOURCES= dhahelper.c dhahelper.rc diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/common.ver --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vidix/dhahelperwin/common.ver Mon Sep 17 21:12:29 2007 +0000 @@ -0,0 +1,207 @@ +/* + * PROJECT: ReactOS + * LICENSE: GPL - See COPYING in the top level directory + * FILE: include/psdk/common.ver + * PURPOSE: Common Version File. + * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + */ + +// +// Copyright Year +// +#ifndef VER_LEGALCOPYRIGHT_YEARS +#define VER_LEGALCOPYRIGHT_YEARS "2007" +#endif + +// +// Copyright String +// +#ifndef VER_LEGALCOPYRIGHT_STR +#if defined(RC_INVOKED) && !defined(WIN16) +#define VER_LEGALCOPYRIGHT_STR L"\251 ReactOS Foundation. All rights reserved." +#else +#define VER_LEGALCOPYRIGHT_STR "Copyright (c) ReactOS Foundation. All rights reserved." +#endif +#endif + +// +// Product Name String +// +#ifndef VER_PRODUCTNAME_STR +#ifdef RC_INVOKED +#define VER_PRODUCTNAME_STR L"ReactOS\256 Operating System" +#else +#define VER_PRODUCTNAME_STR "ReactOS (R) Operating System" +#endif +#endif + +// +// The File Version is the same as the Product Version +// +#ifndef VER_FILEVERSION +#define VER_FILEVERSION VER_PRODUCTVERSION +#endif +#ifndef VER_FILEVERSION_STR +#define VER_FILEVERSION_STR VER_PRODUCTVERSION_STR +#endif + +// +// If no Original Name was given, use the Internal NAme +// +#ifndef VER_ORIGINALFILENAME_STR +#define VER_ORIGINALFILENAME_STR VER_INTERNALNAME_STR +#endif + +// +// Allow tagging a Build by Machine/Date +// +#if defined(__BUILDMACHINE__) +#if defined(__BUILDDATE__) +#define B2(x,y) " (" #x "." #y ")" +#define B1(x,y) B2(x, y) +#define BUILD_MACHINE_TAG B1(__BUILDMACHINE__, __BUILDDATE__) +#else +#define B2(x) " built by: " #x +#define B1(x) B2(x) +#define BUILD_MACHINE_TAG B1(__BUILDMACHINE__) +#endif +#if defined(__BUILDMACHINE_LEN__) +#if __BUILDMACHINE_LEN__ >= 25 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG +#elif __BUILDMACHINE_LEN__ == 24 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 23 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 22 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 21 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 20 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 19 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 18 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 17 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 16 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 15 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 14 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 13 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 12 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 11 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 10 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 9 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 8 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 7 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 6 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 5 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 4 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 3 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 2 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#elif __BUILDMACHINE_LEN__ == 1 +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG " " +#else +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG +#endif +#else +#define BUILD_MACHINE_TAG_PADDED BUILD_MACHINE_TAG +#endif +#else +#define BUILD_MACHINE_TAG +#define BUILD_MACHINE_TAG_PADDED +#endif + +// +// Set default neutral Unicode Language ID +// +#ifndef VER_VERSION_UNICODE_LANG +#define VER_VERSION_UNICODE_LANG "000004B0" +#endif + +// +// Set default netural ANSI Language ID +// +#ifndef VER_VERSION_ANSI_LANG +#define VER_VERSION_ANSI_LANG "000004E4" +#endif + +// +// Set default netural translation ID +// +#ifndef VER_VERSION_TRANSLATION +#define VER_VERSION_TRANSLATION 0x0000, 0x04B0 +#endif + +// +// Make sure the Resource Compiler called us. +// If so, then build the actual version resource. +// +#ifdef RC_INVOKED + +VS_VERSION_INFO VERSIONINFO +FILEVERSION VER_FILEVERSION +PRODUCTVERSION VER_PRODUCTVERSION +FILEFLAGSMASK VER_FILEFLAGSMASK +FILEFLAGS VER_FILEFLAGS +FILEOS VER_FILEOS +FILETYPE VER_FILETYPE +FILESUBTYPE VER_FILESUBTYPE +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK VER_VERSION_UNICODE_LANG + BEGIN + VALUE "CompanyName", VER_COMPANYNAME_STR + VALUE "FileDescription", VER_FILEDESCRIPTION_STR + VALUE "FileVersion", VER_FILEVERSION_STR BUILD_MACHINE_TAG_PADDED + VALUE "InternalName", VER_INTERNALNAME_STR + VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR + VALUE "OriginalFilename",VER_ORIGINALFILENAME_STR + VALUE "ProductName", VER_PRODUCTNAME_STR + VALUE "ProductVersion", VER_PRODUCTVERSION_STR +#ifdef VER_OLESELFREGISTER + VALUE "OleSelfRegister", "\0" +#endif + END + +#ifdef VER_ANSICP + BLOCK VER_VERSION_ANSI_LANG + BEGIN + VALUE "CompanyName", VER_COMPANYNAME_STR + VALUE "FileDescription", VER_FILEDESCRIPTION_STR EXPORT_TAG + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", VER_INTERNALNAME_STR + VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR + VALUE "OriginalFilename",VER_ORIGINALFILENAME_STR + VALUE "ProductName", VER_PRODUCTNAME_STR + VALUE "ProductVersion", VER_PRODUCTVERSION_STR +#ifdef VER_OLESELFREGISTER + VALUE "OleSelfRegister", "\0" +#endif + END +#endif + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", VER_VERSION_TRANSLATION + END +END + +#endif diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/dhahelper.c --- a/vidix/dhahelperwin/dhahelper.c Mon Sep 17 21:03:24 2007 +0000 +++ b/vidix/dhahelperwin/dhahelper.c Mon Sep 17 21:12:29 2007 +0000 @@ -1,6 +1,8 @@ /****************************************************************************** * dhahelper.c: direct hardware access under Windows NT/2000/XP * Copyright (c) 2004 Sascha Sommer . + * Patched to compile with MinGW by Kevin Kofler: + * Copyright (c) 2007 Kevin Kofler * * This file is part of MPlayer. * @@ -21,7 +23,18 @@ *****************************************************************************/ +#if defined(_MSC_VER) #include +#ifndef STDCALL +#define STDCALL /* nothing */ +#endif +#elif defined(__MINGW32__) +#include +#define NO_SEH /* FIXME */ +#else +#error Unsupported compiler. This driver requires MSVC+DDK or MinGW to build. +#endif + #include "dhahelper.h" #define OutputDebugString DbgPrint @@ -47,20 +60,20 @@ -static NTSTATUS dhahelperdispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); -static void dhahelperunload(IN PDRIVER_OBJECT DriverObject); -static NTSTATUS UnmapPhysicalMemory(PVOID UserVirtualAddress); -static NTSTATUS MapPhysicalMemoryToLinearSpace(PVOID pPhysAddress,ULONG PhysMemSizeInBytes,PVOID *PhysMemLin); +static STDCALL NTSTATUS dhahelperdispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); +static STDCALL void dhahelperunload(IN PDRIVER_OBJECT DriverObject); +static STDCALL NTSTATUS UnmapPhysicalMemory(PVOID UserVirtualAddress); +static STDCALL NTSTATUS MapPhysicalMemoryToLinearSpace(PVOID pPhysAddress,ULONG PhysMemSizeInBytes,PVOID *PhysMemLin); -void Ke386SetIoAccessMap(int, IOPM *); -void Ke386QueryIoAccessMap(int, IOPM *); -void Ke386IoSetAccessProcess(PEPROCESS, int); +void STDCALL Ke386SetIoAccessMap(int, IOPM *); +void STDCALL Ke386QueryIoAccessMap(int, IOPM *); +void STDCALL Ke386IoSetAccessProcess(PEPROCESS, int); //entry point -NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){ +STDCALL NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){ UNICODE_STRING DeviceNameUnicodeString; UNICODE_STRING DeviceLinkUnicodeString; NTSTATUS ntStatus; @@ -106,7 +119,7 @@ // Process the IRPs sent to this device -static NTSTATUS dhahelperdispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){ +static STDCALL NTSTATUS dhahelperdispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){ PIO_STACK_LOCATION IrpStack; ULONG dwInputBufferLength; ULONG dwOutputBufferLength; @@ -207,7 +220,7 @@ // Delete the associated device and return -static void dhahelperunload(IN PDRIVER_OBJECT DriverObject){ +static STDCALL void dhahelperunload(IN PDRIVER_OBJECT DriverObject){ UNICODE_STRING DeviceLinkUnicodeString; NTSTATUS ntStatus=STATUS_SUCCESS; OutputDebugString ("dhahelper: entering dhahelperunload"); @@ -240,7 +253,7 @@ //I'm not sure what the limitations of ZwMapViewOfSection are but mapping 128MB videoram (that is probably already mapped by the gfxcard driver) //won't work so it is generally a good idea to map only the memory you really need -static NTSTATUS MapPhysicalMemoryToLinearSpace(PVOID pPhysAddress,ULONG PhysMemSizeInBytes,PVOID *PhysMemLin){ +static STDCALL NTSTATUS MapPhysicalMemoryToLinearSpace(PVOID pPhysAddress,ULONG PhysMemSizeInBytes,PVOID *PhysMemLin){ alloc_priv* alloclisttmp; PMDL Mdl=NULL; PVOID SystemVirtualAddress=NULL; @@ -248,8 +261,14 @@ PHYSICAL_ADDRESS pStartPhysAddress; OutputDebugString ("dhahelper: entering MapPhysicalMemoryToLinearSpace"); +#ifdef _WIN64 pStartPhysAddress.QuadPart = (ULONGLONG)pPhysAddress; +#else + pStartPhysAddress.QuadPart = (ULONGLONG)(ULONG)pPhysAddress; +#endif +#ifndef NO_SEH __try { +#endif SystemVirtualAddress=MmMapIoSpace(pStartPhysAddress,PhysMemSizeInBytes, /*MmWriteCombined*/MmNonCached); if(!SystemVirtualAddress){ OutputDebugString("dhahelper: MmMapIoSpace failed"); @@ -263,18 +282,24 @@ } OutputDebugString("dhahelper: Mdl 0x%x",Mdl); MmBuildMdlForNonPagedPool(Mdl); +#ifdef _WIN64 + UserVirtualAddress = (PVOID)(((ULONGLONG)PAGE_ALIGN(MmMapLockedPages(Mdl,UserMode))) + MmGetMdlByteOffset(Mdl)); +#else UserVirtualAddress = (PVOID)(((ULONG)PAGE_ALIGN(MmMapLockedPages(Mdl,UserMode))) + MmGetMdlByteOffset(Mdl)); +#endif if(!UserVirtualAddress){ OutputDebugString("dhahelper: MmMapLockedPages failed"); return STATUS_INSUFFICIENT_RESOURCES; } OutputDebugString("dhahelper: UserVirtualAddress 0x%x",UserVirtualAddress); +#ifndef NO_SEH }__except(EXCEPTION_EXECUTE_HANDLER){ NTSTATUS ntStatus; ntStatus = GetExceptionCode(); OutputDebugString("dhahelper: MapPhysicalMemoryToLinearSpace failed due to exception 0x%0x\n", ntStatus); return ntStatus; } +#endif OutputDebugString("dhahelper: adding data to internal allocation list"); @@ -304,7 +329,7 @@ return STATUS_SUCCESS; } -static NTSTATUS UnmapPhysicalMemory(PVOID UserVirtualAddress){ +static STDCALL NTSTATUS UnmapPhysicalMemory(PVOID UserVirtualAddress){ unsigned int i; unsigned int x=0; unsigned int alloccounttmp=alloccount; @@ -327,16 +352,20 @@ } else if(alloclist[i].UserVirtualAddress==UserVirtualAddress){ if(x==i){ +#ifndef NO_SEH __try { +#endif MmUnmapLockedPages(alloclist[x].UserVirtualAddress, alloclist[x].Mdl); IoFreeMdl(alloclist[x].Mdl); MmUnmapIoSpace(alloclist[x].SystemVirtualAddress,alloclist[x].PhysMemSizeInBytes); +#ifndef NO_SEH }__except(EXCEPTION_EXECUTE_HANDLER){ NTSTATUS ntStatus; ntStatus = GetExceptionCode(); OutputDebugString("dhahelper: UnmapPhysicalMemory failed due to exception 0x%0x (Mdl 0x%x)\n", ntStatus,alloclist[x].Mdl); return ntStatus; } +#endif } alloccounttmp--; } diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/dhahelper.rc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vidix/dhahelperwin/dhahelper.rc Mon Sep 17 21:12:29 2007 +0000 @@ -0,0 +1,17 @@ +#include + +#include + +#undef VER_COMPANYNAME_STR +#undef VER_PRODUCTNAME_STR + +#define VER_FILETYPE VFT_DRV +#define VER_FILESUBTYPE VFT2_DRV_SYSTEM +#define VER_FILEDESCRIPTION_STR "DhaHelper - Direct HardWare Access Driver" +#define VER_INTERNALNAME_STR "DhaHelper.sys" +#define VER_ORIGINALFILENAME_STR "DhaHelper.sys" +#define VER_LEGALCOPYRIGHT_STR "Sascha Sommer" +#define VER_COMPANYNAME_STR "MPlayer " +#define VER_PRODUCTNAME_STR "DhaHelper Driver V1.0" + +#include "common.ver" diff -r 40a61e5ef8ca -r 173d35b7aca3 vidix/dhahelperwin/ntverp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vidix/dhahelperwin/ntverp.h Mon Sep 17 21:12:29 2007 +0000 @@ -0,0 +1,151 @@ +/* + * PROJECT: ReactOS + * LICENSE: GPL - See COPYING in the top level directory + * FILE: include/psdk/ntverp.h + * PURPOSE: Master Version File. + * This file should be modified only by the official builder + * to update VERSION, VER_PRODUCTVERSION, VER_PRODUCTVERSION_ + * STR and VER_PRODUCTBETA_STR values. + * The VER_PRODUCTBUILD lines must contain the product + * comments and end with the build#. + * The VER_PRODUCTBETA_STR lines must contain the product + * comments and end with "somestring"