X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fdrivers%2Finput%2Fkbdclass%2Fkbdclass.c;h=eb22e9bf2028a6e176139f2b5e1d56258e55c499;hp=5211e83972fa2a88a8d5fc916a8833567bb62bcf;hb=82beaf2b2a6318d5630a02fe3ba9fd3545bd6173;hpb=d7b2d1d3c2dca483a64de5e41d7ba6d0abbb438f diff --git a/reactos/drivers/input/kbdclass/kbdclass.c b/reactos/drivers/input/kbdclass/kbdclass.c index 5211e83972f..eb22e9bf202 100644 --- a/reactos/drivers/input/kbdclass/kbdclass.c +++ b/reactos/drivers/input/kbdclass/kbdclass.c @@ -369,6 +369,8 @@ ClassCallback( ASSERT(ClassDeviceExtension->Common.IsClassDO); + KeAcquireSpinLock(&ClassDeviceExtension->SpinLock, &OldIrql); + DPRINT("ClassCallback()\n"); /* A filter driver might have consumed all the data already; I'm * not sure if they are supposed to move the packets when they @@ -382,6 +384,8 @@ ClassCallback( /* A read request is waiting for input, so go straight to it */ /* FIXME: use SEH */ + DPRINT("Immediate Completion: %x\n", DataStart->MakeCode); + RtlCopyMemory( Irp->MdlAddress ? MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority) : Irp->AssociatedIrp.SystemBuffer, DataStart, @@ -403,8 +407,6 @@ ClassCallback( /* If we have data from the port driver and a higher service to send the data to */ if (InputCount != 0) { - KeAcquireSpinLock(&ClassDeviceExtension->SpinLock, &OldIrql); - if (ClassDeviceExtension->InputCount + InputCount > ClassDeviceExtension->DriverExtension->DataQueueSize) ReadSize = ClassDeviceExtension->DriverExtension->DataQueueSize - ClassDeviceExtension->InputCount; else @@ -428,7 +430,6 @@ ClassCallback( ClassDeviceExtension->PortData += ReadSize; ClassDeviceExtension->InputCount += ReadSize; - KeReleaseSpinLock(&ClassDeviceExtension->SpinLock, OldIrql); (*ConsumedCount) += ReadSize; } else @@ -436,6 +437,8 @@ ClassCallback( DPRINT("ClassCallBack() entered, InputCount = %lu - DOING NOTHING\n", InputCount); } + KeReleaseSpinLock(&ClassDeviceExtension->SpinLock, OldIrql); + if (Irp != NULL) { IoStartNextPacket(ClassDeviceObject, FALSE); @@ -575,11 +578,17 @@ ClassStartIo( KeAcquireSpinLock(&DeviceExtension->SpinLock, &oldIrql); + DPRINT("Mdl: %x, UserBuffer: %x, InputCount: %d, Data: %x\n", + Irp->MdlAddress, + Irp->UserBuffer, + DeviceExtension->InputCount, + (DeviceExtension->PortData-DeviceExtension->InputCount)->MakeCode); + /* FIXME: use SEH */ RtlCopyMemory( - Irp->MdlAddress ? MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority) : Irp->UserBuffer, - DeviceExtension->PortData - DeviceExtension->InputCount, - sizeof(KEYBOARD_INPUT_DATA)); + Irp->AssociatedIrp.SystemBuffer, + DeviceExtension->PortData - DeviceExtension->InputCount, + sizeof(KEYBOARD_INPUT_DATA)); if (DeviceExtension->InputCount > 1) {