summaryrefslogtreecommitdiffstats
path: root/libdha
diff options
context:
space:
mode:
authorfaust3 <faust3@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-03-23 10:34:24 +0000
committerfaust3 <faust3@b3059339-0415-0410-9bf9-f77b7e298cf2>2004-03-23 10:34:24 +0000
commit543c00752d19e74fcde0c6139eee985d3c1476c0 (patch)
tree6e30007919772b1211dd61ace28d922f8a638432 /libdha
parenta977756617ef6bffd6a05c0ca1a96683c1bb38ca (diff)
downloadmpv-543c00752d19e74fcde0c6139eee985d3c1476c0.tar.bz2
mpv-543c00752d19e74fcde0c6139eee985d3c1476c0.tar.xz
windows xp support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@12057 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libdha')
-rw-r--r--libdha/sysdep/libdha_win32.c38
-rw-r--r--libdha/sysdep/pci_win32.c22
2 files changed, 57 insertions, 3 deletions
diff --git a/libdha/sysdep/libdha_win32.c b/libdha/sysdep/libdha_win32.c
index e19a224a4c..5f325dd532 100644
--- a/libdha/sysdep/libdha_win32.c
+++ b/libdha/sysdep/libdha_win32.c
@@ -5,6 +5,9 @@
*/
#include <windows.h>
+#include <ddk/ntddk.h>
+#include "../dhahelperwin/dhahelper.h"
+
/*
This is the request structure that applications use
to request services from the MAPDEV VxD.
@@ -32,9 +35,20 @@ typedef struct _MapDevRequest
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \
((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method) )
+
+int IsWinNT(){
+ OSVERSIONINFO OSVersionInfo;
+ OSVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&OSVersionInfo);
+ return OSVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT;
+}
+
+static HANDLE hDriver = INVALID_HANDLE_VALUE;
+
+
/* Memory Map a piece of Real Memory */
void *map_phys_mem(unsigned long base, unsigned long size) {
-
+ if(!IsWinNT()){
HANDLE hDevice ;
PVOID inBuf[1] ; /* buffer for struct pointer to VxD */
DWORD RetInfo[2] ; /* buffer to receive data from VxD */
@@ -63,6 +77,26 @@ void *map_phys_mem(unsigned long base, unsigned long size) {
fprintf(stderr, "Failed to map device\n") ; exit(1) ; }
return (void*)req.mdr_LinearAddress ;
+ }
+ else{
+ dhahelper_t dhahelper_priv;
+ DWORD dwBytesReturned;
+ dhahelper_priv.size = size;
+ dhahelper_priv.base = base;
+ if(hDriver==INVALID_HANDLE_VALUE)hDriver = CreateFile("\\\\.\\DHAHELPER",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+ if (!DeviceIoControl(hDriver, IOCTL_DHAHELPER_MAPPHYSTOLIN, &dhahelper_priv,sizeof(dhahelper_t), &dhahelper_priv, sizeof(dhahelper_t),&dwBytesReturned, NULL)){
+ printf("unable to map thre requested memory region\n");
+ return NULL;
+ }
+ else return dhahelper_priv.ptr;
+ }
}
-void unmap_phys_mem(void *ptr, unsigned long size) { }
+void unmap_phys_mem(void *ptr, unsigned long size) {
+ if(IsWinNT()){
+ dhahelper_t dhahelper_priv;
+ DWORD dwBytesReturned;
+ dhahelper_priv.ptr = ptr;
+ DeviceIoControl(hDriver, IOCTL_DHAHELPER_UNMAPPHYSADDR, &dhahelper_priv,sizeof(dhahelper_t), NULL, 0, &dwBytesReturned, NULL);
+ }
+}
diff --git a/libdha/sysdep/pci_win32.c b/libdha/sysdep/pci_win32.c
index 1c88cb13e8..a4a08077eb 100644
--- a/libdha/sysdep/pci_win32.c
+++ b/libdha/sysdep/pci_win32.c
@@ -4,15 +4,35 @@
Modified for readability by Nick Kurshev
*/
#include <windows.h>
+#include <ddk/ntddk.h>
+#include "../dhahelperwin/dhahelper.h"
+
+static HANDLE hDriver;
+extern int IsWinNT();
+
+
+
-/* Nothing to do for Win9x. For WinNT I have no solution */
static __inline__ int enable_os_io(void)
{
+ if(IsWinNT()){
+ DWORD dwBytesReturned;
+ hDriver = CreateFile("\\\\.\\DHAHELPER",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
+ if(!DeviceIoControl(hDriver, IOCTL_DHAHELPER_ENABLEDIRECTIO, NULL,0, NULL, 0, &dwBytesReturned, NULL)){
+ printf("unable to enable directio please install dhahelper.sys\n");
+ return(1);
+ }
+ }
return(0);
}
static __inline__ int disable_os_io(void)
{
+ if(IsWinNT()){
+ DWORD dwBytesReturned;
+ DeviceIoControl(hDriver, IOCTL_DHAHELPER_DISABLEDIRECTIO, NULL,0, NULL, 0, &dwBytesReturned, NULL);
+ CloseHandle(hDriver);
+ }
return(0);
}