CORE-13048. [I8042PRT] keyboard.c: Restore 1 "Irql =" (which was lost in r30000)...
[reactos.git] / drivers / input / i8042prt / keyboard.c
index 0827a2f..198ec8f 100644 (file)
@@ -218,7 +218,7 @@ i8042PowerWorkItem(
 
                if (DeviceExtension->PowerInterfaceName.MaximumLength == 0)
                {
-                       /* We have never registred this interface ; do it */
+                       /* We have never registered this interface ; do it */
                        Status = IoRegisterDeviceInterface(
                                DeviceExtension->Common.Pdo,
                                &GUID_DEVICE_SYS_BUTTON,
@@ -247,7 +247,7 @@ i8042PowerWorkItem(
                                return;
                        }
                }
-               /* Enable the interface. This leads to receving a IOCTL_GET_SYS_BUTTON_CAPS,
+               /* Enable the interface. This leads to receiving a IOCTL_GET_SYS_BUTTON_CAPS,
                 * so we can report new capability */
                Status = IoSetDeviceInterfaceState(
                                &DeviceExtension->PowerInterfaceName,
@@ -369,7 +369,10 @@ i8042KbdDpcRoutine(
                DeviceExtension->KeyboardBuffer + KeysInBufferCopy,
                &KeysTransferred);
 
-       KeAcquireInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt);
+       /* Validate that the callback didn't change the Irql. */
+       ASSERT(KeGetCurrentIrql() == Irql);
+
+       Irql = KeAcquireInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt);
        DeviceExtension->KeysInBuffer -= KeysTransferred;
        KeReleaseInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt, Irql);
 }
@@ -467,11 +470,11 @@ i8042KbdDeviceControl(
                }
        }
 
-       Irp->IoStatus.Status = Status;
-       if (Status == STATUS_PENDING)
-               IoMarkIrpPending(Irp);
-       else
+       if (Status != STATUS_PENDING)
+       {
+               Irp->IoStatus.Status = Status;
                IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       }
 
        return Status;
 }
@@ -694,7 +697,7 @@ cleanup:
                {
                        TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATORS\n");
 
-                       if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
+                       if (Stack->Parameters.DeviceIoControl.OutputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
                        {
                                Status = STATUS_BUFFER_TOO_SMALL;
                        }
@@ -738,9 +741,11 @@ cleanup:
                }
        }
 
-       Irp->IoStatus.Status = Status;
        if (Status != STATUS_PENDING)
+       {
+               Irp->IoStatus.Status = Status;
                IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       }
        return Status;
 }
 
@@ -855,13 +860,14 @@ i8042KbdInterruptService(
             if (InputData->MakeCode == 0x25)
             {
                 /* k - Breakpoint */
-                DbgBreakPoint();
+                DbgBreakPointWithStatus(DBG_STATUS_SYSRQ);
             }
             else if (InputData->MakeCode == 0x30)
             {
                 /* b - Bugcheck */
                 KeBugCheck(MANUALLY_INITIATED_CRASH);
             }
+#if defined(KDBG)
             else
             {
                            /* Send request to the kernel debugger.
@@ -874,6 +880,7 @@ i8042KbdInterruptService(
                                                 NULL,
                                                 KernelMode);
             }
+#endif
                }
        }