Changeset 9533 for trunk/src/kernel32/hmdevio.cpp
- Timestamp:
- Dec 20, 2002, 11:38:58 AM (23 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdevio.cpp
r8840 r9533 1 /* $Id: hmdevio.cpp,v 1.2 8 2002-07-05 17:59:30sandervl Exp $ */1 /* $Id: hmdevio.cpp,v 1.29 2002-12-20 10:38:56 sandervl Exp $ */ 2 2 3 3 /* … … 27 27 #include <win\winioctl.h> 28 28 #include "hmdevio.h" 29 #include "cio.h"30 29 #include "map.h" 31 30 #include "exceptutil.h" … … 35 34 #include "dbglocal.h" 36 35 37 static BOOL fX86Init = FALSE;38 //SvL: Used in iccio.asm (how can you put these in the .asm data segment without messing things up?)39 ULONG ioentry = 0;40 USHORT gdt = 0;41 char devname[] = "/dev/fastio$";42 43 static BOOL GpdDevIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);44 static BOOL MAPMEMIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);45 static BOOL FXMEMMAPIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);46 static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);47 48 36 static WIN32DRV knownDriver[] = 49 {{"\\\\.\\GpdDev", "", TRUE, 666, GpdDevIOCtl}, 50 { "\\\\.\\MAPMEM", "PMAP$", FALSE, 0, MAPMEMIOCtl}, 51 { "FXMEMMAP.VXD", "PMAP$", FALSE, 0, FXMEMMAPIOCtl}, 37 { {0} 52 38 }; 53 39 54 static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV);55 BOOL fVirtualPC = FALSE;40 static int nrKnownDrivers = 0; 41 // = sizeof(knownDriver)/sizeof(WIN32DRV); 56 42 57 43 //****************************************************************************** … … 262 248 //****************************************************************************** 263 249 //****************************************************************************** 264 static BOOL GpdDevIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)265 {266 ULONG port, val = 0;267 268 if(fX86Init == FALSE) {269 if(io_init() == 0)270 fX86Init = TRUE;271 else return(FALSE);272 }273 274 *lpBytesReturned = 0;275 276 port = ((GENPORT_WRITE_INPUT *)lpInBuffer)->PortNumber;277 278 switch((dwIoControlCode >> 2) & 0xFFF) {279 case IOCTL_GPD_READ_PORT_UCHAR:280 if(nOutBufferSize < sizeof(char))281 return(FALSE);282 283 val = c_inb(port);284 *(char *)lpOutBuffer = val;285 *lpBytesReturned = sizeof(char);286 break;287 case IOCTL_GPD_READ_PORT_USHORT:288 if(nOutBufferSize < sizeof(USHORT))289 return(FALSE);290 291 val = c_inw(port);292 *(USHORT *)lpOutBuffer = val;293 *lpBytesReturned = sizeof(USHORT);294 break;295 case IOCTL_GPD_READ_PORT_ULONG:296 if(nOutBufferSize < sizeof(ULONG))297 return(FALSE);298 299 val = c_inl(port);300 *(ULONG *)lpOutBuffer = val;301 *lpBytesReturned = sizeof(ULONG);302 break;303 case IOCTL_GPD_WRITE_PORT_UCHAR:304 val = ((GENPORT_WRITE_INPUT *)lpInBuffer)->CharData;305 c_outb(port, val);306 break;307 case IOCTL_GPD_WRITE_PORT_USHORT:308 val = ((GENPORT_WRITE_INPUT *)lpInBuffer)->ShortData;309 c_outw(port, val);310 break;311 case IOCTL_GPD_WRITE_PORT_ULONG:312 val = ((GENPORT_WRITE_INPUT *)lpInBuffer)->LongData;313 c_outl(port, val);314 break;315 default:316 dprintf(("GpdDevIOCtl unknown func %X\n", (dwIoControlCode >> 2) & 0xFFF));317 return(FALSE);318 }319 320 return(TRUE);321 }322 //******************************************************************************323 //******************************************************************************324 static BOOL MAPMEMIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)325 {326 PHYSICAL_MEMORY_INFO *meminfo = (PHYSICAL_MEMORY_INFO *)lpInBuffer;327 struct map_ioctl memmap;328 329 *lpBytesReturned = 0;330 331 switch((dwIoControlCode >> 2) & 0xFFF) {332 case IOCTL_MAPMEM_MAP_USER_PHYSICAL_MEMORY:333 if(nInBufferSize != sizeof(PHYSICAL_MEMORY_INFO))334 return(FALSE);335 336 memmap.a.phys = meminfo->BusAddress.u.LowPart;337 memmap.size = meminfo->Length;338 dprintf(("DeviceIoControl map phys address %X length %X\n", memmap.a.phys, memmap.size));339 if(mpioctl((HFILE)hDevice, IOCTL_MAP, &memmap) == -1) {340 dprintf(("mpioctl failed!\n"));341 return(FALSE);342 }343 344 dprintf(("DeviceIoControl map virt address = %X\n", memmap.a.user));345 *(ULONG *)lpOutBuffer = (ULONG)memmap.a.user;346 break;347 case IOCTL_MAPMEM_UNMAP_USER_PHYSICAL_MEMORY:348 dprintf(("Unmap mapping %X\n", *(ULONG *)lpInBuffer));349 memmap.a.phys = *(ULONG *)lpInBuffer;350 memmap.size = 0;351 if(mpioctl((HFILE)hDevice, IOCTL_MAP, &memmap) == -1)352 return(FALSE);353 break;354 default:355 dprintf(("MAPMEMIOCtl unknown func %X\n", (dwIoControlCode >> 2) & 0xFFF));356 return(FALSE);357 }358 359 return(TRUE);360 }361 //******************************************************************************362 //******************************************************************************363 static BOOL FXMEMMAPIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)364 {365 struct map_ioctl memmap;366 MAPDEVREQUEST *vxdmem = (MAPDEVREQUEST *)lpInBuffer;367 368 switch(dwIoControlCode) {369 case 1:370 break;371 case 2:372 memmap.a.phys = (DWORD)vxdmem->mdr_PhysicalAddress;373 memmap.size = vxdmem->mdr_SizeInBytes;374 dprintf(("DeviceIoControl map phys address %X length %X\n", memmap.a.phys, memmap.size));375 if(mpioctl((HFILE)hDevice, IOCTL_MAP, &memmap) == -1) {376 dprintf(("mpioctl failed!\n"));377 return(FALSE);378 }379 380 dprintf(("DeviceIoControl map virt address = %X\n", memmap.a.user));381 vxdmem->mdr_LinearAddress = (PVOID)memmap.a.user;382 break;383 default:384 dprintf(("FXMEMMAPIOCtl unknown func %X\n", (dwIoControlCode >> 2) & 0xFFF));385 return(FALSE);386 }387 388 return(TRUE);389 }390 //******************************************************************************391 //******************************************************************************392 250 HMCustomDriver::HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName, LPVOID lpDriverData) 393 251 : HMDeviceDriver(lpDeviceName), hDrvDll(0), lpDriverData(NULL)
Note:
See TracChangeset
for help on using the changeset viewer.