changeset 12056:3a727f52c4a2

windows xp support
author faust3
date Tue, 23 Mar 2004 10:34:24 +0000
parents 174ff71996aa
children 0f058e9cd422
files libdha/sysdep/libdha_win32.c libdha/sysdep/pci_win32.c
diffstat 2 files changed, 57 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libdha/sysdep/libdha_win32.c	Tue Mar 23 04:24:52 2004 +0000
+++ b/libdha/sysdep/libdha_win32.c	Tue Mar 23 10:34:24 2004 +0000
@@ -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 @@
 #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 @@
     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);
+  }
+}
--- a/libdha/sysdep/pci_win32.c	Tue Mar 23 04:24:52 2004 +0000
+++ b/libdha/sysdep/pci_win32.c	Tue Mar 23 10:34:24 2004 +0000
@@ -4,15 +4,35 @@
    Modified for readability by Nick Kurshev
 */
 #include <windows.h>
+#include <ddk/ntddk.h>
+#include "../dhahelperwin/dhahelper.h"
 
-/* Nothing to do for Win9x. For WinNT I have no solution */
+static HANDLE hDriver;
+extern int IsWinNT();
+
+
+
+
 
 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);
 }