From: Rolf K. <lab...@us...> - 2007-11-15 09:12:57
|
Update of /cvsroot/opengtoolkit/portIO/c_source In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv3792 Modified Files: ogportio.c ogportiodll.c ogportiodll.h ogportiodll.rc Log Message: Added support for physical memory access unter NT based OSes Index: ogportio.c =================================================================== RCS file: /cvsroot/opengtoolkit/portIO/c_source/ogportio.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ogportio.c 5 Mar 2004 23:16:40 -0000 1.2 --- ogportio.c 15 Nov 2007 09:12:57 -0000 1.3 *************** *** 239,256 **** physAddr.HighPart = 0; ! if (BusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { ! KdPrint(("HalTranslateBusAddress failed in IOCTL_READ_PHYSMEM\n")); ntStatus = STATUS_UNSUCCESSFUL; } - else if (memType == 0) - { - logicAddr = MmMapIoSpace(mappedAddr, portreg->size, FALSE); - if (logicAddr == 0) - { - KdPrint(("MmMapIoSpace failed in IOCTL_READ_PHYSMEM\n")); - ntStatus = STATUS_UNSUCCESSFUL; - } - } else { --- 239,247 ---- physAddr.HighPart = 0; ! if (HalTranslateBusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { ! KdPrint(("HalTranslateBusAddress failed in IOCTL_READ_PORT\n")); ntStatus = STATUS_UNSUCCESSFUL; } else { *************** *** 279,287 **** break; } - - if (memType == 0) - { - MmUnmapIoSpace(logicAddr, portreg->size); - } } } --- 270,273 ---- *************** *** 310,327 **** physAddr.HighPart = 0; ! if (BusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { ! KdPrint(("HalTranslateBusAddress failed in IOCTL_READ_PHYSMEM\n")); ntStatus = STATUS_UNSUCCESSFUL; } - else if (memType == 0) - { - logicAddr = MmMapIoSpace(mappedAddr, portreg->size, FALSE); - if (logicAddr == 0) - { - KdPrint(("MmMapIoSpace failed in IOCTL_READ_PHYSMEM\n")); - ntStatus = STATUS_UNSUCCESSFUL; - } - } else { --- 296,304 ---- physAddr.HighPart = 0; ! if (HalTranslateBusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { ! KdPrint(("HalTranslateBusAddress failed in IOCTL_WRITE_PORT\n")); ntStatus = STATUS_UNSUCCESSFUL; } else { *************** *** 350,358 **** break; } - - if (memType == 0) - { - MmUnmapIoSpace(logicAddr, portreg->size); - } } } --- 327,330 ---- *************** *** 378,382 **** physAddr.HighPart = 0; ! if (BusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { KdPrint(("HalTranslateBusAddress failed in IOCTL_READ_PHYSMEM\n")); --- 350,354 ---- physAddr.HighPart = 0; ! if (HalTranslateBusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { KdPrint(("HalTranslateBusAddress failed in IOCTL_READ_PHYSMEM\n")); *************** *** 446,450 **** physAddr.HighPart = 0; ! if (BusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { KdPrint(("HalTranslateBusAddress failed in IOCTL_WRITE_PHYSMEM\n")); --- 418,422 ---- physAddr.HighPart = 0; ! if (HalTranslateBusAddress(Isa, 0, physAddr, memType, mappedAddr) == FALSE) { KdPrint(("HalTranslateBusAddress failed in IOCTL_WRITE_PHYSMEM\n")); Index: ogportiodll.c =================================================================== RCS file: /cvsroot/opengtoolkit/portIO/c_source/ogportiodll.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ogportiodll.c 5 Apr 2005 20:41:45 -0000 1.4 --- ogportiodll.c 15 Nov 2007 09:12:57 -0000 1.5 *************** *** 276,280 **** if (gWinNT && hDevice != INVALID_HANDLE_VALUE) { ! return CloseHandle(hDevice); } return ERROR_SUCCESS; --- 276,280 ---- if (gWinNT && hDevice != INVALID_HANDLE_VALUE) { ! CloseHandle(hDevice); } return ERROR_SUCCESS; *************** *** 490,494 **** if (hDevice == INVALID_HANDLE_VALUE) { ! err = PortIOOpen(FALSE); if (err) return err; } --- 490,494 ---- if (hDevice == INVALID_HANDLE_VALUE) { ! err = PortIOOpen(FALSE); if (err) return err; } *************** *** 542,546 **** if (hDevice == INVALID_HANDLE_VALUE) { ! err = PortIOOpen(FALSE); if (err) return err; } --- 542,546 ---- if (hDevice == INVALID_HANDLE_VALUE) { ! err = PortIOOpen(FALSE); if (err) return err; } *************** *** 550,560 **** param.u.dword = *(DWORD *)value; if (!DeviceIoControl(hDevice, ! IOCTL_WRITE_PORT, ! ¶m, ! sizeof(PORTREG), ! NULL, ! 0, ! &BytesReturned, ! NULL)) { err = GetLastError(); --- 550,627 ---- param.u.dword = *(DWORD *)value; if (!DeviceIoControl(hDevice, ! IOCTL_WRITE_PORT, ! ¶m, ! sizeof(PORTREG), ! NULL, ! 0, ! &BytesReturned, ! NULL)) ! { ! err = GetLastError(); ! } ! return err; ! } ! ! DWORD LibAPI PortIOWriteMem(unsigned long address, long size, long unit, void *value) ! { ! DWORD BytesReturned, err = ERROR_SUCCESS; ! MEMMAP param; ! ! if (!gWinNT) ! { ! return ERROR_NOT_SUPPORTED; ! } ! ! if (hDevice == INVALID_HANDLE_VALUE) ! { ! err = PortIOOpen(FALSE); ! if (err) return err; ! } ! ! param.address = address; ! param.size = size; ! param.unit = unit; ! memcpy(param.buf, value, size); ! if (!DeviceIoControl(hDevice, ! IOCTL_WRITE_PHYSMEM, ! ¶m, ! sizeof(MEMMAP) + size, ! NULL, ! 0, ! &BytesReturned, ! NULL)) ! { ! err = GetLastError(); ! } ! return err; ! } ! ! DWORD LibAPI PortIOReadMem(unsigned long address, long size, long unit, void *value) ! { ! DWORD BytesReturned, err = ERROR_SUCCESS; ! MEMMAP param; ! ! if (!gWinNT) ! { ! return ERROR_NOT_SUPPORTED; ! } ! ! if (hDevice == INVALID_HANDLE_VALUE) ! { ! err = PortIOOpen(FALSE); ! if (err) return err; ! } ! ! param.address = address; ! param.size = size; ! param.unit = unit; ! if (!DeviceIoControl(hDevice, ! IOCTL_READ_PHYSMEM, ! ¶m, ! sizeof(MEMMAP), ! value, ! size, ! &BytesReturned, ! NULL)) { err = GetLastError(); Index: ogportiodll.rc =================================================================== RCS file: /cvsroot/opengtoolkit/portIO/c_source/ogportiodll.rc,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ogportiodll.rc 3 Mar 2004 13:20:24 -0000 1.1 --- ogportiodll.rc 15 Nov 2007 09:12:57 -0000 1.2 *************** *** 1,21 **** #include <windows.h> ! #include <ntverp.h> #define VER_FILETYPE VFT_DRV #define VER_FILESUBTYPE VFT2_DRV_SYSTEM #define VER_FILEDESCRIPTION_STR "OpenG Generic Port I/O User Space Library" #define VER_INTERNALNAME_STR "OGPortIO.dll" #define VER_ORIGINALFILENAME_STR "OGPortIO.dll" ! #define VER_LEGALCOPYRIGHT_YEARS "\2512004" #define VER_LEGALCOPYRIGHT_STR VER_LEGALCOPYRIGHT_YEARS " Rolf Kalbermatter" #define VER_COMPANYNAME_STR "OpenG, http://www.openg.org" #define VER_PRODUCTNAME_STR "OpenG Generic Port I/O Driver" ! #define VER_FILEVERSION 1,0,1,0 ! #define VER_FILEVERSION_STR "Version 1.0.1" ! #define VER_PRODUCTVERSION 1,0,1 ! #define VER_PRODUCTVERSION_STR "OpenG Generic Port I/O Driver Version 1.0.1" #include "common.ver" --- 1,28 ---- #include <windows.h> ! #if _DEBUG ! #define VER_DEBUG VS_FF_DEBUG ! #else ! #define VER_DEBUG 0 ! #endif #define VER_FILETYPE VFT_DRV #define VER_FILESUBTYPE VFT2_DRV_SYSTEM + #define VER_FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + #define VER_FILEFLAGS (VER_DEBUG) + #define VER_FILEOS VOS_NT_WINDOWS32 #define VER_FILEDESCRIPTION_STR "OpenG Generic Port I/O User Space Library" #define VER_INTERNALNAME_STR "OGPortIO.dll" #define VER_ORIGINALFILENAME_STR "OGPortIO.dll" ! #define VER_LEGALCOPYRIGHT_YEARS "\2512004-2007" #define VER_LEGALCOPYRIGHT_STR VER_LEGALCOPYRIGHT_YEARS " Rolf Kalbermatter" #define VER_COMPANYNAME_STR "OpenG, http://www.openg.org" #define VER_PRODUCTNAME_STR "OpenG Generic Port I/O Driver" ! #define VER_FILEVERSION 1,1,0,0 ! #define VER_FILEVERSION_STR "Version 1.1.0" ! #define VER_PRODUCTVERSION 1,1,0 ! #define VER_PRODUCTVERSION_STR "OpenG Generic Port I/O Driver Version 1.1.0" #include "common.ver" Index: ogportiodll.h =================================================================== RCS file: /cvsroot/opengtoolkit/portIO/c_source/ogportiodll.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ogportiodll.h 10 Jun 2004 22:49:10 -0000 1.3 --- ogportiodll.h 15 Nov 2007 09:12:57 -0000 1.4 *************** *** 42,47 **** DWORD LibAPI PortIOWriteDirect(unsigned short address, unsigned long size, void *value); DWORD LibAPI PortIOWrite(unsigned short address, unsigned long size, void *value); ! ! /* Not yet implemented */ ! DWORD LibAPI PortIOReadMem(unsigned long address, unsigned long size, char *value); ! DWORD LibAPI PortIOWriteMem(unsigned long address, unsigned long size, char *value); --- 42,45 ---- DWORD LibAPI PortIOWriteDirect(unsigned short address, unsigned long size, void *value); DWORD LibAPI PortIOWrite(unsigned short address, unsigned long size, void *value); ! DWORD LibAPI PortIOReadMem(unsigned long address, long size, long unit, void *value); ! DWORD LibAPI PortIOWriteMem(unsigned long address, long size, long unit, void *value); |