mirror of
https://github.com/reactos/reactos.git
synced 2024-10-03 07:53:49 +00:00
Use kernel facilities to change debug level at runtime
svn path=/trunk/; revision=31287
This commit is contained in:
parent
4cf058de4c
commit
7fd1284a89
|
@ -17,7 +17,7 @@ i8042Create(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_CREATE\n");
|
TRACE_(I8042PRT, "IRP_MJ_CREATE\n");
|
||||||
|
|
||||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
|
@ -30,7 +30,7 @@ i8042Cleanup(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_CLEANUP\n");
|
TRACE_(I8042PRT, "IRP_MJ_CLEANUP\n");
|
||||||
|
|
||||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
|
@ -43,7 +43,7 @@ i8042Close(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_CLOSE\n");
|
TRACE_(I8042PRT, "IRP_MJ_CLOSE\n");
|
||||||
|
|
||||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
|
|
|
@ -33,7 +33,7 @@ i8042AddDevice(
|
||||||
ULONG DeviceExtensionSize;
|
ULONG DeviceExtensionSize;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042AddDevice(%p %p)\n", DriverObject, Pdo);
|
TRACE_(I8042PRT, "i8042AddDevice(%p %p)\n", DriverObject, Pdo);
|
||||||
|
|
||||||
DriverExtension = (PI8042_DRIVER_EXTENSION)IoGetDriverObjectExtension(DriverObject, DriverObject);
|
DriverExtension = (PI8042_DRIVER_EXTENSION)IoGetDriverObjectExtension(DriverObject, DriverObject);
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ i8042AddDevice(
|
||||||
&Fdo);
|
&Fdo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoCreateDevice() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoCreateDevice() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ i8042AddDevice(
|
||||||
Status = IoAttachDeviceToDeviceStackSafe(Fdo, Pdo, &DeviceExtension->LowerDevice);
|
Status = IoAttachDeviceToDeviceStackSafe(Fdo, Pdo, &DeviceExtension->LowerDevice);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoAttachDeviceToDeviceStackSafe() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +107,7 @@ i8042SendHookWorkItem(
|
||||||
PIRP NewIrp;
|
PIRP NewIrp;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042SendHookWorkItem(%p %p)\n", DeviceObject, Context);
|
TRACE_(I8042PRT, "i8042SendHookWorkItem(%p %p)\n", DeviceObject, Context);
|
||||||
|
|
||||||
WorkItemData = (PI8042_HOOK_WORKITEM)Context;
|
WorkItemData = (PI8042_HOOK_WORKITEM)Context;
|
||||||
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
@ -135,7 +135,7 @@ i8042SendHookWorkItem(
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT1("Unknown FDO type %u\n", FdoDeviceExtension->Type);
|
ERR_(I8042PRT, "Unknown FDO type %u\n", FdoDeviceExtension->Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
WorkItemData->Irp->IoStatus.Status = STATUS_INTERNAL_ERROR;
|
WorkItemData->Irp->IoStatus.Status = STATUS_INTERNAL_ERROR;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -158,7 +158,7 @@ i8042SendHookWorkItem(
|
||||||
|
|
||||||
if (!NewIrp)
|
if (!NewIrp)
|
||||||
{
|
{
|
||||||
DPRINT("IoBuildDeviceIoControlRequest() failed\n");
|
WARN_(I8042PRT, "IoBuildDeviceIoControlRequest() failed\n");
|
||||||
WorkItemData->Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
|
WorkItemData->Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -176,7 +176,7 @@ i8042SendHookWorkItem(
|
||||||
}
|
}
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoCallDriver() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoCallDriver() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ i8042SendHookWorkItem(
|
||||||
FALSE);
|
FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("KeyboardHook.InitializationRoutine() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "KeyboardHook.InitializationRoutine() failed with status 0x%08lx\n", Status);
|
||||||
WorkItemData->Irp->IoStatus.Status = Status;
|
WorkItemData->Irp->IoStatus.Status = Status;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ i8042StartIo(
|
||||||
i8042KbdStartIo(DeviceObject, Irp);
|
i8042KbdStartIo(DeviceObject, Irp);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unknown FDO type %u\n", DeviceExtension->Type);
|
ERR_(I8042PRT, "Unknown FDO type %u\n", DeviceExtension->Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -251,7 +251,7 @@ i8042PacketWrite(
|
||||||
Port))
|
Port))
|
||||||
{
|
{
|
||||||
/* something is really wrong! */
|
/* something is really wrong! */
|
||||||
DPRINT1("Failed to send packet byte!\n");
|
WARN_(I8042PRT, "Failed to send packet byte!\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -343,7 +343,7 @@ i8042StartPacket(
|
||||||
case Keyboard: DeviceExtension->PacketPort = 0; break;
|
case Keyboard: DeviceExtension->PacketPort = 0; break;
|
||||||
case Mouse: DeviceExtension->PacketPort = CTRL_WRITE_MOUSE; break;
|
case Mouse: DeviceExtension->PacketPort = CTRL_WRITE_MOUSE; break;
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unknown FDO type %u\n", FdoDeviceExtension->Type);
|
ERR_(I8042PRT, "Unknown FDO type %u\n", FdoDeviceExtension->Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
Status = STATUS_INTERNAL_ERROR;
|
Status = STATUS_INTERNAL_ERROR;
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -401,7 +401,7 @@ i8042DeviceControl(
|
||||||
PFDO_DEVICE_EXTENSION DeviceExtension;
|
PFDO_DEVICE_EXTENSION DeviceExtension;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042DeviceControl(%p %p)\n", DeviceObject, Irp);
|
TRACE_(I8042PRT, "i8042DeviceControl(%p %p)\n", DeviceObject, Irp);
|
||||||
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
switch (DeviceExtension->Type)
|
switch (DeviceExtension->Type)
|
||||||
|
@ -425,7 +425,7 @@ i8042InternalDeviceControl(
|
||||||
ULONG ControlCode;
|
ULONG ControlCode;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042InternalDeviceControl(%p %p)\n", DeviceObject, Irp);
|
TRACE_(I8042PRT, "i8042InternalDeviceControl(%p %p)\n", DeviceObject, Irp);
|
||||||
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
|
|
||||||
switch (DeviceExtension->Type)
|
switch (DeviceExtension->Type)
|
||||||
|
@ -442,7 +442,7 @@ i8042InternalDeviceControl(
|
||||||
Status = i8042MouInternalDeviceControl(DeviceObject, Irp);
|
Status = i8042MouInternalDeviceControl(DeviceObject, Irp);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unknown IO control code 0x%lx\n", ControlCode);
|
ERR_(I8042PRT, "Unknown IO control code 0x%lx\n", ControlCode);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
Status = STATUS_INVALID_DEVICE_REQUEST;
|
Status = STATUS_INVALID_DEVICE_REQUEST;
|
||||||
break;
|
break;
|
||||||
|
@ -456,7 +456,7 @@ i8042InternalDeviceControl(
|
||||||
Status = i8042MouInternalDeviceControl(DeviceObject, Irp);
|
Status = i8042MouInternalDeviceControl(DeviceObject, Irp);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unknown FDO type %u\n", DeviceExtension->Type);
|
ERR_(I8042PRT, "Unknown FDO type %u\n", DeviceExtension->Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
Status = STATUS_INTERNAL_ERROR;
|
Status = STATUS_INTERNAL_ERROR;
|
||||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
@ -482,7 +482,7 @@ DriverEntry(
|
||||||
(PVOID*)&DriverExtension);
|
(PVOID*)&DriverExtension);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoAllocateDriverObjectExtension() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoAllocateDriverObjectExtension() failed with status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
RtlZeroMemory(DriverExtension, sizeof(I8042_DRIVER_EXTENSION));
|
RtlZeroMemory(DriverExtension, sizeof(I8042_DRIVER_EXTENSION));
|
||||||
|
@ -496,14 +496,14 @@ DriverEntry(
|
||||||
&DriverExtension->RegistryPath);
|
&DriverExtension->RegistryPath);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("DuplicateUnicodeString() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "DuplicateUnicodeString() failed with status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ReadRegistryEntries(RegistryPath, &DriverExtension->Port.Settings);
|
Status = ReadRegistryEntries(RegistryPath, &DriverExtension->Port.Settings);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("ReadRegistryEntries() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "ReadRegistryEntries() failed with status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -523,5 +523,13 @@ DriverEntry(
|
||||||
if (IsFirstStageSetup())
|
if (IsFirstStageSetup())
|
||||||
return i8042AddLegacyKeyboard(DriverObject, RegistryPath);
|
return i8042AddLegacyKeyboard(DriverObject, RegistryPath);
|
||||||
|
|
||||||
|
/* ROS Hack: ideally, we shouldn't have to initialize debug level this way */
|
||||||
|
#ifndef NDEBUG
|
||||||
|
DbgSetDebugFilterState(
|
||||||
|
DPFLTR_I8042PRT_ID,
|
||||||
|
DPFLTR_ERROR_LEVEL | DPFLTR_WARNING_LEVEL | DPFLTR_TRACE_LEVEL | DPFLTR_INFO_LEVEL,
|
||||||
|
TRUE);
|
||||||
|
#endif
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ i8042DebugWorkItem(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PVOID Key)
|
IN PVOID Key)
|
||||||
{
|
{
|
||||||
DPRINT("Debug key: %p\n", Key);
|
INFO_(I8042PRT, "Debug key: p\n", Key);
|
||||||
|
|
||||||
if (!Key)
|
if (!Key)
|
||||||
return;
|
return;
|
||||||
|
@ -85,11 +85,11 @@ i8042KbdQueuePacket(
|
||||||
DeviceExtension->KeysInBuffer++;
|
DeviceExtension->KeysInBuffer++;
|
||||||
if (DeviceExtension->KeysInBuffer > DeviceExtension->Common.PortDeviceExtension->Settings.KeyboardDataQueueSize)
|
if (DeviceExtension->KeysInBuffer > DeviceExtension->Common.PortDeviceExtension->Settings.KeyboardDataQueueSize)
|
||||||
{
|
{
|
||||||
DPRINT1("Keyboard buffer overflow\n");
|
WARN_(I8042PRT, "Keyboard buffer overflow\n");
|
||||||
DeviceExtension->KeysInBuffer--;
|
DeviceExtension->KeysInBuffer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Irq completes key\n");
|
TRACE_(I8042PRT, "Irq completes key\n");
|
||||||
KeInsertQueueDpc(&DeviceExtension->DpcKeyboard, NULL, NULL);
|
KeInsertQueueDpc(&DeviceExtension->DpcKeyboard, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ i8042KbdStartIo(
|
||||||
{
|
{
|
||||||
case IOCTL_KEYBOARD_SET_INDICATORS:
|
case IOCTL_KEYBOARD_SET_INDICATORS:
|
||||||
{
|
{
|
||||||
DPRINT("IOCTL_KEYBOARD_SET_INDICATORS\n");
|
TRACE_(I8042PRT, "IOCTL_KEYBOARD_SET_INDICATORS\n");
|
||||||
|
|
||||||
PortDeviceExtension->PacketBuffer[0] = KBD_CMD_SET_LEDS;
|
PortDeviceExtension->PacketBuffer[0] = KBD_CMD_SET_LEDS;
|
||||||
PortDeviceExtension->PacketBuffer[1] = 0;
|
PortDeviceExtension->PacketBuffer[1] = 0;
|
||||||
|
@ -153,7 +153,7 @@ i8042KbdStartIo(
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT("Unknown ioctl code 0x%lx\n",
|
ERR_(I8042PRT, "Unknown ioctl code 0x%lx\n",
|
||||||
Stack->Parameters.DeviceIoControl.IoControlCode);
|
Stack->Parameters.DeviceIoControl.IoControlCode);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
}
|
}
|
||||||
|
@ -234,7 +234,7 @@ i8042PowerWorkItem(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* We can't do more yet, ignore the keypress... */
|
/* We can't do more yet, ignore the keypress... */
|
||||||
DPRINT("IoRegisterDeviceInterface(GUID_DEVICE_SYS_BUTTON) failed with status 0x%08lx\n",
|
WARN_(I8042PRT, "IoRegisterDeviceInterface(GUID_DEVICE_SYS_BUTTON) failed with status 0x%08lx\n",
|
||||||
Status);
|
Status);
|
||||||
DeviceExtension->PowerInterfaceName.MaximumLength = 0;
|
DeviceExtension->PowerInterfaceName.MaximumLength = 0;
|
||||||
return;
|
return;
|
||||||
|
@ -249,7 +249,7 @@ i8042PowerWorkItem(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Ignore the key press... */
|
/* Ignore the key press... */
|
||||||
DPRINT("Disabling interface %wZ failed with status 0x%08lx\n",
|
WARN_(I8042PRT, "Disabling interface %wZ failed with status 0x%08lx\n",
|
||||||
&DeviceExtension->PowerInterfaceName, Status);
|
&DeviceExtension->PowerInterfaceName, Status);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -262,7 +262,7 @@ i8042PowerWorkItem(
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
/* Ignore the key press... */
|
/* Ignore the key press... */
|
||||||
DPRINT("Enabling interface %wZ failed with status 0x%08lx\n",
|
WARN_(I8042PRT, "Enabling interface %wZ failed with status 0x%08lx\n",
|
||||||
&DeviceExtension->PowerInterfaceName, Status);
|
&DeviceExtension->PowerInterfaceName, Status);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -379,12 +379,12 @@ i8042KbdDpcRoutine(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Send a key\n");
|
TRACE_(I8042PRT, "Send a key\n");
|
||||||
|
|
||||||
if (!DeviceExtension->KeyboardData.ClassService)
|
if (!DeviceExtension->KeyboardData.ClassService)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DPRINT("Sending %lu key(s)\n", KeysInBufferCopy);
|
INFO_(I8042PRT, "Sending %lu key(s)\n", KeysInBufferCopy);
|
||||||
(*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->KeyboardData.ClassService)(
|
(*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->KeyboardData.ClassService)(
|
||||||
DeviceExtension->KeyboardData.ClassDeviceObject,
|
DeviceExtension->KeyboardData.ClassDeviceObject,
|
||||||
DeviceExtension->KeyboardBuffer,
|
DeviceExtension->KeyboardBuffer,
|
||||||
|
@ -418,7 +418,7 @@ i8042KbdDeviceControl(
|
||||||
{
|
{
|
||||||
/* Part of GUID_DEVICE_SYS_BUTTON interface */
|
/* Part of GUID_DEVICE_SYS_BUTTON interface */
|
||||||
PULONG pCaps;
|
PULONG pCaps;
|
||||||
DPRINT("IOCTL_GET_SYS_BUTTON_CAPS\n");
|
TRACE_(I8042PRT, "IOCTL_GET_SYS_BUTTON_CAPS\n");
|
||||||
|
|
||||||
if (Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(ULONG))
|
if (Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(ULONG))
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
|
@ -436,7 +436,7 @@ i8042KbdDeviceControl(
|
||||||
{
|
{
|
||||||
/* Part of GUID_DEVICE_SYS_BUTTON interface */
|
/* Part of GUID_DEVICE_SYS_BUTTON interface */
|
||||||
PIRP WaitingIrp;
|
PIRP WaitingIrp;
|
||||||
DPRINT("IOCTL_GET_SYS_BUTTON_EVENT\n");
|
TRACE_(I8042PRT, "IOCTL_GET_SYS_BUTTON_EVENT\n");
|
||||||
|
|
||||||
if (Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(ULONG))
|
if (Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(ULONG))
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
|
@ -450,7 +450,7 @@ i8042KbdDeviceControl(
|
||||||
if (WaitingIrp)
|
if (WaitingIrp)
|
||||||
{
|
{
|
||||||
/* Unable to have a 2nd pending IRP for this IOCTL */
|
/* Unable to have a 2nd pending IRP for this IOCTL */
|
||||||
DPRINT1("Unable to pend a second IRP for IOCTL_GET_SYS_BUTTON_EVENT\n");
|
WARN_(I8042PRT, "Unable to pend a second IRP for IOCTL_GET_SYS_BUTTON_EVENT\n");
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
Irp->IoStatus.Status = Status;
|
Irp->IoStatus.Status = Status;
|
||||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||||
|
@ -470,7 +470,7 @@ i8042KbdDeviceControl(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT("Pending IOCTL_GET_SYS_BUTTON_EVENT\n");
|
TRACE_(I8042PRT, "Pending IOCTL_GET_SYS_BUTTON_EVENT\n");
|
||||||
Status = STATUS_PENDING;
|
Status = STATUS_PENDING;
|
||||||
Irp->IoStatus.Status = Status;
|
Irp->IoStatus.Status = Status;
|
||||||
IoMarkIrpPending(Irp);
|
IoMarkIrpPending(Irp);
|
||||||
|
@ -482,7 +482,7 @@ i8042KbdDeviceControl(
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
ERR_(I8042PRT, "IRP_MJ_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
||||||
Stack->Parameters.DeviceIoControl.IoControlCode);
|
Stack->Parameters.DeviceIoControl.IoControlCode);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
|
@ -522,7 +522,7 @@ i8042KbdInternalDeviceControl(
|
||||||
PIO_WORKITEM WorkItem = NULL;
|
PIO_WORKITEM WorkItem = NULL;
|
||||||
PI8042_HOOK_WORKITEM WorkItemData = NULL;
|
PI8042_HOOK_WORKITEM WorkItemData = NULL;
|
||||||
|
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_KEYBOARD_CONNECT\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_KEYBOARD_CONNECT\n");
|
||||||
if (Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(CONNECT_DATA))
|
if (Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(CONNECT_DATA))
|
||||||
{
|
{
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
|
@ -536,7 +536,7 @@ i8042KbdInternalDeviceControl(
|
||||||
WorkItem = IoAllocateWorkItem(DeviceObject);
|
WorkItem = IoAllocateWorkItem(DeviceObject);
|
||||||
if (!WorkItem)
|
if (!WorkItem)
|
||||||
{
|
{
|
||||||
DPRINT("IoAllocateWorkItem() failed\n");
|
WARN_(I8042PRT, "IoAllocateWorkItem() failed\n");
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -546,7 +546,7 @@ i8042KbdInternalDeviceControl(
|
||||||
I8042PRT_TAG);
|
I8042PRT_TAG);
|
||||||
if (!WorkItemData)
|
if (!WorkItemData)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -562,7 +562,7 @@ i8042KbdInternalDeviceControl(
|
||||||
I8042PRT_TAG);
|
I8042PRT_TAG);
|
||||||
if (!DeviceExtension->KeyboardBuffer)
|
if (!DeviceExtension->KeyboardBuffer)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -574,14 +574,14 @@ i8042KbdInternalDeviceControl(
|
||||||
DeviceExtension->PowerWorkItem = IoAllocateWorkItem(DeviceObject);
|
DeviceExtension->PowerWorkItem = IoAllocateWorkItem(DeviceObject);
|
||||||
if (!DeviceExtension->PowerWorkItem)
|
if (!DeviceExtension->PowerWorkItem)
|
||||||
{
|
{
|
||||||
DPRINT("IoAllocateWorkItem() failed\n");
|
WARN_(I8042PRT, "IoAllocateWorkItem() failed\n");
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
DeviceExtension->DebugWorkItem = IoAllocateWorkItem(DeviceObject);
|
DeviceExtension->DebugWorkItem = IoAllocateWorkItem(DeviceObject);
|
||||||
if (!DeviceExtension->DebugWorkItem)
|
if (!DeviceExtension->DebugWorkItem)
|
||||||
{
|
{
|
||||||
DPRINT("IoAllocateWorkItem() failed\n");
|
WARN_(I8042PRT, "IoAllocateWorkItem() failed\n");
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -614,7 +614,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
|
case IOCTL_INTERNAL_KEYBOARD_DISCONNECT:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_KEYBOARD_DISCONNECT\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_KEYBOARD_DISCONNECT\n");
|
||||||
/* MSDN says that operation is to implemented.
|
/* MSDN says that operation is to implemented.
|
||||||
* To implement it, we just have to do:
|
* To implement it, we just have to do:
|
||||||
* DeviceExtension->KeyboardData.ClassService = NULL;
|
* DeviceExtension->KeyboardData.ClassService = NULL;
|
||||||
|
@ -624,14 +624,14 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_INTERNAL_I8042_HOOK_KEYBOARD:
|
case IOCTL_INTERNAL_I8042_HOOK_KEYBOARD:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_I8042_HOOK_KEYBOARD\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_I8042_HOOK_KEYBOARD\n");
|
||||||
/* Nothing to do here */
|
/* Nothing to do here */
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION:
|
case IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION\n");
|
||||||
|
|
||||||
/* We should check the UnitID, but it's kind of pointless as
|
/* We should check the UnitID, but it's kind of pointless as
|
||||||
* all keyboards are supposed to have the same one
|
* all keyboards are supposed to have the same one
|
||||||
|
@ -653,7 +653,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_KEYBOARD_QUERY_INDICATORS:
|
case IOCTL_KEYBOARD_QUERY_INDICATORS:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_QUERY_INDICATORS\n");
|
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.InputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
|
||||||
{
|
{
|
||||||
|
@ -672,7 +672,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_KEYBOARD_SET_INDICATORS:
|
case IOCTL_KEYBOARD_SET_INDICATORS:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_SET_INDICATORS\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_KEYBOARD_SET_INDICATORS\n");
|
||||||
|
|
||||||
if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
|
if (Stack->Parameters.DeviceIoControl.InputBufferLength < sizeof(KEYBOARD_INDICATOR_PARAMETERS))
|
||||||
{
|
{
|
||||||
|
@ -692,7 +692,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
ERR_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
||||||
Stack->Parameters.DeviceIoControl.IoControlCode);
|
Stack->Parameters.DeviceIoControl.IoControlCode);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
|
@ -765,7 +765,7 @@ i8042KbdInterruptService(
|
||||||
Status = i8042ReadStatus(PortDeviceExtension, &PortStatus);
|
Status = i8042ReadStatus(PortDeviceExtension, &PortStatus);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("i8042ReadStatus() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "i8042ReadStatus() failed with status 0x%08lx\n", Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Status = i8042ReadKeyboardData(PortDeviceExtension, &Output);
|
Status = i8042ReadKeyboardData(PortDeviceExtension, &Output);
|
||||||
|
@ -776,11 +776,11 @@ i8042KbdInterruptService(
|
||||||
}
|
}
|
||||||
if (Counter == 0)
|
if (Counter == 0)
|
||||||
{
|
{
|
||||||
DPRINT("Spurious i8042 keyboard interrupt\n");
|
WARN_(I8042PRT, "Spurious i8042 keyboard interrupt\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Got: 0x%02x\n", Output);
|
INFO_(I8042PRT, "Got: 0x%02x\n", Output);
|
||||||
|
|
||||||
if (PortDeviceExtension->Settings.CrashOnCtrlScroll)
|
if (PortDeviceExtension->Settings.CrashOnCtrlScroll)
|
||||||
{
|
{
|
||||||
|
@ -806,14 +806,14 @@ i8042KbdInterruptService(
|
||||||
{
|
{
|
||||||
if (PortDeviceExtension->PacketComplete)
|
if (PortDeviceExtension->PacketComplete)
|
||||||
{
|
{
|
||||||
DPRINT("Packet complete\n");
|
TRACE_(I8042PRT, "Packet complete\n");
|
||||||
KeInsertQueueDpc(&DeviceExtension->DpcKeyboard, NULL, NULL);
|
KeInsertQueueDpc(&DeviceExtension->DpcKeyboard, NULL, NULL);
|
||||||
}
|
}
|
||||||
DPRINT("Irq eaten by packet\n");
|
TRACE_(I8042PRT, "Irq eaten by packet\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Irq is keyboard input\n");
|
TRACE_(I8042PRT, "Irq is keyboard input\n");
|
||||||
|
|
||||||
if (DeviceExtension->KeyboardScanState == Normal)
|
if (DeviceExtension->KeyboardScanState == Normal)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12,45 +12,19 @@
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
static IO_COMPLETION_ROUTINE ForwardIrpAndWaitCompletion;
|
|
||||||
|
|
||||||
static NTSTATUS NTAPI
|
|
||||||
ForwardIrpAndWaitCompletion(
|
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
|
||||||
IN PIRP Irp,
|
|
||||||
IN PVOID Context)
|
|
||||||
{
|
|
||||||
if (Irp->PendingReturned)
|
|
||||||
KeSetEvent((PKEVENT)Context, IO_NO_INCREMENT, FALSE);
|
|
||||||
return STATUS_MORE_PROCESSING_REQUIRED;
|
|
||||||
}
|
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
ForwardIrpAndWait(
|
ForwardIrpAndWait(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
PDEVICE_OBJECT LowerDevice = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice;
|
PDEVICE_OBJECT LowerDevice = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice;
|
||||||
KEVENT Event;
|
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
ASSERT(LowerDevice);
|
ASSERT(LowerDevice);
|
||||||
|
|
||||||
KeInitializeEvent(&Event, NotificationEvent, FALSE);
|
if (!IoForwardIrpSynchronously(LowerDevice, Irp))
|
||||||
IoCopyCurrentIrpStackLocationToNext(Irp);
|
return STATUS_UNSUCCESSFUL;
|
||||||
|
|
||||||
DPRINT("Calling lower device %p\n", LowerDevice);
|
return Irp->IoStatus.Status;
|
||||||
IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE);
|
|
||||||
|
|
||||||
Status = IoCallDriver(LowerDevice, Irp);
|
|
||||||
if (Status == STATUS_PENDING)
|
|
||||||
{
|
|
||||||
Status = KeWaitForSingleObject(&Event, Suspended, KernelMode, FALSE, NULL);
|
|
||||||
if (NT_SUCCESS(Status))
|
|
||||||
Status = Irp->IoStatus.Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS NTAPI
|
NTSTATUS NTAPI
|
||||||
|
|
|
@ -50,11 +50,11 @@ i8042MouQueuePacket(
|
||||||
DeviceExtension->MouseInBuffer++;
|
DeviceExtension->MouseInBuffer++;
|
||||||
if (DeviceExtension->MouseInBuffer > DeviceExtension->Common.PortDeviceExtension->Settings.MouseDataQueueSize)
|
if (DeviceExtension->MouseInBuffer > DeviceExtension->Common.PortDeviceExtension->Settings.MouseDataQueueSize)
|
||||||
{
|
{
|
||||||
DPRINT1("Mouse buffer overflow\n");
|
WARN_(I8042PRT, "Mouse buffer overflow\n");
|
||||||
DeviceExtension->MouseInBuffer--;
|
DeviceExtension->MouseInBuffer--;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Irq completes mouse packet\n");
|
TRACE_(I8042PRT, "Irq completes mouse packet\n");
|
||||||
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ i8042MouHandle(
|
||||||
* might be lucky and get in sync again
|
* might be lucky and get in sync again
|
||||||
*/
|
*/
|
||||||
if (!(Output & 8)) {
|
if (!(Output & 8)) {
|
||||||
DPRINT1("Bad input, dropping..\n");
|
WARN_(I8042PRT, "Bad input, dropping..\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ i8042MouHandle(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unexpected state 0x%u!\n", DeviceExtension->MouseState);
|
ERR_(I8042PRT, "Unexpected state 0x%u!\n", DeviceExtension->MouseState);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ i8042MouHandleButtons(
|
||||||
(((~(NewButtonData)) << 1) & (ButtonDiff << 1)) |
|
(((~(NewButtonData)) << 1) & (ButtonDiff << 1)) |
|
||||||
(MouseInput->RawButtons & 0xfc00);
|
(MouseInput->RawButtons & 0xfc00);
|
||||||
|
|
||||||
DPRINT("Left raw/up/down: %u/%u/%u\n",
|
INFO_(I8042PRT, "Left raw/up/down: %u/%u/%u\n",
|
||||||
MouseInput->RawButtons & MOUSE_LEFT_BUTTON_DOWN,
|
MouseInput->RawButtons & MOUSE_LEFT_BUTTON_DOWN,
|
||||||
MouseInput->ButtonFlags & MOUSE_LEFT_BUTTON_DOWN,
|
MouseInput->ButtonFlags & MOUSE_LEFT_BUTTON_DOWN,
|
||||||
MouseInput->ButtonFlags & MOUSE_LEFT_BUTTON_UP);
|
MouseInput->ButtonFlags & MOUSE_LEFT_BUTTON_UP);
|
||||||
|
@ -291,12 +291,12 @@ i8042MouDpcRoutine(
|
||||||
|
|
||||||
KeReleaseInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt, Irql);
|
KeReleaseInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt, Irql);
|
||||||
|
|
||||||
DPRINT("Send a mouse packet\n");
|
TRACE_(I8042PRT, "Send a mouse packet\n");
|
||||||
|
|
||||||
if (!DeviceExtension->MouseData.ClassService)
|
if (!DeviceExtension->MouseData.ClassService)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
DPRINT("Sending %lu mouse move(s)\n", MouseInBufferCopy);
|
INFO_(I8042PRT, "Sending %lu mouse move(s)\n", MouseInBufferCopy);
|
||||||
(*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->MouseData.ClassService)(
|
(*(PSERVICE_CALLBACK_ROUTINE)DeviceExtension->MouseData.ClassService)(
|
||||||
DeviceExtension->MouseData.ClassDeviceObject,
|
DeviceExtension->MouseData.ClassDeviceObject,
|
||||||
DeviceExtension->MouseBuffer,
|
DeviceExtension->MouseBuffer,
|
||||||
|
@ -333,7 +333,7 @@ i8042DpcRoutineMouseTimeout(
|
||||||
|
|
||||||
Irql = KeAcquireInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt);
|
Irql = KeAcquireInterruptSpinLock(PortDeviceExtension->HighestDIRQLInterrupt);
|
||||||
|
|
||||||
DPRINT1("Mouse initialization timeout! (substate %x). Disabling mouse.\n",
|
WARN_(I8042PRT, "Mouse initialization timeout! (substate %x). Disabling mouse.\n",
|
||||||
DeviceExtension->MouseResetState);
|
DeviceExtension->MouseResetState);
|
||||||
|
|
||||||
i8042Flush(PortDeviceExtension);
|
i8042Flush(PortDeviceExtension);
|
||||||
|
@ -369,7 +369,7 @@ i8042MouInternalDeviceControl(
|
||||||
PIO_WORKITEM WorkItem = NULL;
|
PIO_WORKITEM WorkItem = NULL;
|
||||||
PI8042_HOOK_WORKITEM WorkItemData = NULL;
|
PI8042_HOOK_WORKITEM WorkItemData = NULL;
|
||||||
|
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_MOUSE_CONNECT\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_MOUSE_CONNECT\n");
|
||||||
if (Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(CONNECT_DATA))
|
if (Stack->Parameters.DeviceIoControl.InputBufferLength != sizeof(CONNECT_DATA))
|
||||||
{
|
{
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
|
@ -383,7 +383,7 @@ i8042MouInternalDeviceControl(
|
||||||
WorkItem = IoAllocateWorkItem(DeviceObject);
|
WorkItem = IoAllocateWorkItem(DeviceObject);
|
||||||
if (!WorkItem)
|
if (!WorkItem)
|
||||||
{
|
{
|
||||||
DPRINT("IoAllocateWorkItem() failed\n");
|
WARN_(I8042PRT, "IoAllocateWorkItem() failed\n");
|
||||||
Status = STATUS_INSUFFICIENT_RESOURCES;
|
Status = STATUS_INSUFFICIENT_RESOURCES;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -393,7 +393,7 @@ i8042MouInternalDeviceControl(
|
||||||
I8042PRT_TAG);
|
I8042PRT_TAG);
|
||||||
if (!WorkItemData)
|
if (!WorkItemData)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -409,7 +409,7 @@ i8042MouInternalDeviceControl(
|
||||||
I8042PRT_TAG);
|
I8042PRT_TAG);
|
||||||
if (!DeviceExtension->MouseBuffer)
|
if (!DeviceExtension->MouseBuffer)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -452,7 +452,7 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_INTERNAL_MOUSE_DISCONNECT:
|
case IOCTL_INTERNAL_MOUSE_DISCONNECT:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_MOUSE_DISCONNECT\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_MOUSE_DISCONNECT\n");
|
||||||
/* MSDN says that operation is to implemented.
|
/* MSDN says that operation is to implemented.
|
||||||
* To implement it, we just have to do:
|
* To implement it, we just have to do:
|
||||||
* DeviceExtension->MouseData.ClassService = NULL;
|
* DeviceExtension->MouseData.ClassService = NULL;
|
||||||
|
@ -462,14 +462,14 @@ cleanup:
|
||||||
}
|
}
|
||||||
case IOCTL_INTERNAL_I8042_HOOK_MOUSE:
|
case IOCTL_INTERNAL_I8042_HOOK_MOUSE:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_I8042_HOOK_MOUSE\n");
|
TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / IOCTL_INTERNAL_I8042_HOOK_MOUSE\n");
|
||||||
/* Nothing to do here */
|
/* Nothing to do here */
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_INTERNAL_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
ERR_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / unknown ioctl code 0x%lx\n",
|
||||||
Stack->Parameters.DeviceIoControl.IoControlCode);
|
Stack->Parameters.DeviceIoControl.IoControlCode);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
|
@ -509,7 +509,7 @@ i8042MouInputTestTimeout(
|
||||||
if (Now.QuadPart - DeviceExtension->MousePacketStartTime.QuadPart >
|
if (Now.QuadPart - DeviceExtension->MousePacketStartTime.QuadPart >
|
||||||
DeviceExtension->Common.PortDeviceExtension->Settings.MouseSynchIn100ns)
|
DeviceExtension->Common.PortDeviceExtension->Settings.MouseSynchIn100ns)
|
||||||
{
|
{
|
||||||
DPRINT("Mouse input packet timeout\n");
|
WARN_(I8042PRT, "Mouse input packet timeout\n");
|
||||||
DeviceExtension->MouseState = MouseIdle;
|
DeviceExtension->MouseState = MouseIdle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -588,7 +588,7 @@ i8042MouResetIsr(
|
||||||
{
|
{
|
||||||
PortDeviceExtension->Flags &= ~MOUSE_PRESENT;
|
PortDeviceExtension->Flags &= ~MOUSE_PRESENT;
|
||||||
DeviceExtension->MouseState = MouseIdle;
|
DeviceExtension->MouseState = MouseIdle;
|
||||||
DPRINT("Mouse returned bad reset reply: %x (expected aa)\n", Value);
|
WARN_(I8042PRT, "Mouse returned bad reset reply: %x (expected aa)\n", Value);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case ExpectingResetId:
|
case ExpectingResetId:
|
||||||
|
@ -602,7 +602,7 @@ i8042MouResetIsr(
|
||||||
{
|
{
|
||||||
PortDeviceExtension->Flags &= ~MOUSE_PRESENT;
|
PortDeviceExtension->Flags &= ~MOUSE_PRESENT;
|
||||||
DeviceExtension->MouseState = MouseIdle;
|
DeviceExtension->MouseState = MouseIdle;
|
||||||
DPRINT1("Mouse returned bad reset reply part two: %x (expected 0)\n", Value);
|
WARN_(I8042PRT, "Mouse returned bad reset reply part two: %x (expected 0)\n", Value);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
case ExpectingGetDeviceIdACK:
|
case ExpectingGetDeviceIdACK:
|
||||||
|
@ -614,7 +614,7 @@ i8042MouResetIsr(
|
||||||
{
|
{
|
||||||
DeviceExtension->MouseResetState++;
|
DeviceExtension->MouseResetState++;
|
||||||
/* Act as if 00 (normal mouse) was received */
|
/* Act as if 00 (normal mouse) was received */
|
||||||
DPRINT("Mouse doesn't support 0xd2, (returns %x, expected %x), faking\n", Value, MOUSE_ACK);
|
WARN_(I8042PRT, "Mouse doesn't support 0xd2, (returns %x, expected %x), faking\n", Value, MOUSE_ACK);
|
||||||
i8042MouResetIsr(DeviceExtension, Status, 0);
|
i8042MouResetIsr(DeviceExtension, Status, 0);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -787,7 +787,7 @@ i8042MouResetIsr(
|
||||||
DeviceExtension->MouseHook.IsrWritePort(
|
DeviceExtension->MouseHook.IsrWritePort(
|
||||||
DeviceExtension->MouseHook.CallContext,
|
DeviceExtension->MouseHook.CallContext,
|
||||||
(UCHAR)(PortDeviceExtension->Settings.MouseResolution & 0xff));
|
(UCHAR)(PortDeviceExtension->Settings.MouseResolution & 0xff));
|
||||||
DPRINT("Mouse resolution %lu\n",
|
INFO_(I8042PRT, "Mouse resolution %lu\n",
|
||||||
PortDeviceExtension->Settings.MouseResolution);
|
PortDeviceExtension->Settings.MouseResolution);
|
||||||
DeviceExtension->MouseResetState = ExpectingFinalResolutionValueACK;
|
DeviceExtension->MouseResetState = ExpectingFinalResolutionValueACK;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -798,11 +798,11 @@ i8042MouResetIsr(
|
||||||
case ExpectingEnableACK:
|
case ExpectingEnableACK:
|
||||||
DeviceExtension->MouseState = MouseIdle;
|
DeviceExtension->MouseState = MouseIdle;
|
||||||
DeviceExtension->MouseTimeoutState = TimeoutCancel;
|
DeviceExtension->MouseTimeoutState = TimeoutCancel;
|
||||||
DPRINT("Mouse type = %u\n", DeviceExtension->MouseType);
|
INFO_(I8042PRT, "Mouse type = %u\n", DeviceExtension->MouseType);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
default:
|
default:
|
||||||
if (DeviceExtension->MouseResetState < 100 || DeviceExtension->MouseResetState > 999)
|
if (DeviceExtension->MouseResetState < 100 || DeviceExtension->MouseResetState > 999)
|
||||||
DPRINT1("MouseResetState went out of range: %lu\n", DeviceExtension->MouseResetState);
|
ERR_(I8042PRT, "MouseResetState went out of range: %lu\n", DeviceExtension->MouseResetState);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -827,7 +827,7 @@ i8042MouInterruptService(
|
||||||
Status = i8042ReadStatus(PortDeviceExtension, &PortStatus);
|
Status = i8042ReadStatus(PortDeviceExtension, &PortStatus);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("i8042ReadStatus() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "i8042ReadStatus() failed with status 0x%08lx\n", Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Status = i8042ReadMouseData(PortDeviceExtension, &Output);
|
Status = i8042ReadMouseData(PortDeviceExtension, &Output);
|
||||||
|
@ -838,30 +838,30 @@ i8042MouInterruptService(
|
||||||
}
|
}
|
||||||
if (Counter == 0)
|
if (Counter == 0)
|
||||||
{
|
{
|
||||||
DPRINT("Spurious i8042 mouse interrupt\n");
|
WARN_(I8042PRT, "Spurious i8042 mouse interrupt\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Got: 0x%02x\n", Output);
|
INFO_(I8042PRT, "Got: 0x%02x\n", Output);
|
||||||
|
|
||||||
if (i8042PacketIsr(PortDeviceExtension, Output))
|
if (i8042PacketIsr(PortDeviceExtension, Output))
|
||||||
{
|
{
|
||||||
if (PortDeviceExtension->PacketComplete)
|
if (PortDeviceExtension->PacketComplete)
|
||||||
{
|
{
|
||||||
DPRINT("Packet complete\n");
|
TRACE_(I8042PRT, "Packet complete\n");
|
||||||
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
||||||
}
|
}
|
||||||
DPRINT("Irq eaten by packet\n");
|
TRACE_(I8042PRT, "Irq eaten by packet\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Irq is mouse input\n");
|
TRACE_(I8042PRT, "Irq is mouse input\n");
|
||||||
|
|
||||||
i8042MouInputTestTimeout(DeviceExtension);
|
i8042MouInputTestTimeout(DeviceExtension);
|
||||||
|
|
||||||
if (i8042MouResetIsr(DeviceExtension, PortStatus, Output))
|
if (i8042MouResetIsr(DeviceExtension, PortStatus, Output))
|
||||||
{
|
{
|
||||||
DPRINT("Handled by ResetIsr or hooked Isr\n");
|
TRACE_(I8042PRT, "Handled by ResetIsr or hooked Isr\n");
|
||||||
if (NoChange != DeviceExtension->MouseTimeoutState) {
|
if (NoChange != DeviceExtension->MouseTimeoutState) {
|
||||||
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
KeInsertQueueDpc(&DeviceExtension->DpcMouse, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
@ -1035,10 +1035,10 @@ static BOOLEAN SetupMouse(
|
||||||
|
|
||||||
if (TestMouse(DeviceExtension))
|
if (TestMouse(DeviceExtension))
|
||||||
{
|
{
|
||||||
DPRINT("Detected Mouse\n");
|
TRACE_(I8042PRT, "Detected Mouse\n");
|
||||||
|
|
||||||
if (SendCommand(DeviceExtension, NULL, PSMOUSE_CMD_ENABLE))
|
if (SendCommand(DeviceExtension, NULL, PSMOUSE_CMD_ENABLE))
|
||||||
DPRINT1("Failed to enable mouse!\n");
|
WARN_(I8042PRT, "Failed to enable mouse!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -41,14 +41,14 @@ i8042ChangeMode(
|
||||||
|
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_READ_MODE))
|
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_READ_MODE))
|
||||||
{
|
{
|
||||||
DPRINT1("Can't read i8042 mode\n");
|
WARN_(I8042PRT, "Can't read i8042 mode\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = i8042ReadDataWait(DeviceExtension, &Value);
|
Status = i8042ReadDataWait(DeviceExtension, &Value);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("No response after read i8042 mode\n");
|
WARN_(I8042PRT, "No response after read i8042 mode\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,13 +57,13 @@ i8042ChangeMode(
|
||||||
|
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_WRITE_MODE))
|
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_WRITE_MODE))
|
||||||
{
|
{
|
||||||
DPRINT1("Can't set i8042 mode\n");
|
WARN_(I8042PRT, "Can't set i8042 mode\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
|
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
|
||||||
{
|
{
|
||||||
DPRINT1("Can't send i8042 mode\n");
|
WARN_(I8042PRT, "Can't send i8042 mode\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,20 +85,20 @@ i8042BasicDetect(
|
||||||
|
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST))
|
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST))
|
||||||
{
|
{
|
||||||
DPRINT1("Writing CTRL_SELF_TEST command failed\n");
|
WARN_(I8042PRT, "Writing CTRL_SELF_TEST command failed\n");
|
||||||
return STATUS_IO_TIMEOUT;
|
return STATUS_IO_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = i8042ReadDataWait(DeviceExtension, &Value);
|
Status = i8042ReadDataWait(DeviceExtension, &Value);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to read CTRL_SELF_TEST response, status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "Failed to read CTRL_SELF_TEST response, status 0x%08lx\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Value != 0x55)
|
if (Value != 0x55)
|
||||||
{
|
{
|
||||||
DPRINT1("Got 0x%02x instead of 0x55\n", Value);
|
WARN_(I8042PRT, "Got 0x%02x instead of 0x55\n", Value);
|
||||||
return STATUS_IO_DEVICE_ERROR;
|
return STATUS_IO_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,13 +136,13 @@ i8042DetectKeyboard(
|
||||||
Status = i8042SynchWritePort(DeviceExtension, 0, 0, TRUE);
|
Status = i8042SynchWritePort(DeviceExtension, 0, 0, TRUE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("Can't finish SET_LEDS (0x%08lx)\n", Status);
|
WARN_(I8042PRT, "Can't finish SET_LEDS (0x%08lx)\n", Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT("Warning: can't write SET_LEDS (0x%08lx)\n", Status);
|
WARN_(I8042PRT, "Warning: can't write SET_LEDS (0x%08lx)\n", Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Turn on translation and SF (Some machines don't reboot if SF is not set) */
|
/* Turn on translation and SF (Some machines don't reboot if SF is not set) */
|
||||||
|
@ -167,7 +167,7 @@ i8042DetectMouse(
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_WRITE_MOUSE)
|
if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_WRITE_MOUSE)
|
||||||
||!i8042Write(DeviceExtension, DeviceExtension->DataPort, MOU_CMD_RESET))
|
||!i8042Write(DeviceExtension, DeviceExtension->DataPort, MOU_CMD_RESET))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to write reset command to mouse\n");
|
WARN_(I8042PRT, "Failed to write reset command to mouse\n");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,12 +184,12 @@ i8042DetectMouse(
|
||||||
|
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("No ACK after mouse reset, status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "No ACK after mouse reset, status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
else if (Value != ExpectedReply[ReplyByte])
|
else if (Value != ExpectedReply[ReplyByte])
|
||||||
{
|
{
|
||||||
DPRINT1("Unexpected reply: 0x%02x (expected 0x%02x)\n",
|
WARN_(I8042PRT, "Unexpected reply: 0x%02x (expected 0x%02x)\n",
|
||||||
Value, ExpectedReply[ReplyByte]);
|
Value, ExpectedReply[ReplyByte]);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -210,7 +210,7 @@ cleanup:
|
||||||
i8042Flush(DeviceExtension);
|
i8042Flush(DeviceExtension);
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Mouse %sdetected\n", Ok ? "" : "not ");
|
INFO_(I8042PRT, "Mouse %sdetected\n", Ok ? "" : "not ");
|
||||||
|
|
||||||
return Ok;
|
return Ok;
|
||||||
}
|
}
|
||||||
|
@ -223,24 +223,24 @@ i8042ConnectKeyboardInterrupt(
|
||||||
KIRQL DirqlMax;
|
KIRQL DirqlMax;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042ConnectKeyboardInterrupt()\n");
|
TRACE_(I8042PRT, "i8042ConnectKeyboardInterrupt()\n");
|
||||||
|
|
||||||
PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
|
PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
|
||||||
DirqlMax = MAX(
|
DirqlMax = MAX(
|
||||||
PortDeviceExtension->KeyboardInterrupt.Dirql,
|
PortDeviceExtension->KeyboardInterrupt.Dirql,
|
||||||
PortDeviceExtension->MouseInterrupt.Dirql);
|
PortDeviceExtension->MouseInterrupt.Dirql);
|
||||||
|
|
||||||
DPRINT("KeyboardInterrupt.Vector %lu\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.Vector %lu\n",
|
||||||
PortDeviceExtension->KeyboardInterrupt.Vector);
|
PortDeviceExtension->KeyboardInterrupt.Vector);
|
||||||
DPRINT("KeyboardInterrupt.Dirql %lu\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.Dirql %lu\n",
|
||||||
PortDeviceExtension->KeyboardInterrupt.Dirql);
|
PortDeviceExtension->KeyboardInterrupt.Dirql);
|
||||||
DPRINT("KeyboardInterrupt.DirqlMax %lu\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.DirqlMax %lu\n",
|
||||||
DirqlMax);
|
DirqlMax);
|
||||||
DPRINT("KeyboardInterrupt.InterruptMode %s\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.InterruptMode %s\n",
|
||||||
PortDeviceExtension->KeyboardInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
|
PortDeviceExtension->KeyboardInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
|
||||||
DPRINT("KeyboardInterrupt.ShareInterrupt %s\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.ShareInterrupt %s\n",
|
||||||
PortDeviceExtension->KeyboardInterrupt.ShareInterrupt ? "yes" : "no");
|
PortDeviceExtension->KeyboardInterrupt.ShareInterrupt ? "yes" : "no");
|
||||||
DPRINT("KeyboardInterrupt.Affinity 0x%lx\n",
|
INFO_(I8042PRT, "KeyboardInterrupt.Affinity 0x%lx\n",
|
||||||
PortDeviceExtension->KeyboardInterrupt.Affinity);
|
PortDeviceExtension->KeyboardInterrupt.Affinity);
|
||||||
Status = IoConnectInterrupt(
|
Status = IoConnectInterrupt(
|
||||||
&PortDeviceExtension->KeyboardInterrupt.Object,
|
&PortDeviceExtension->KeyboardInterrupt.Object,
|
||||||
|
@ -251,7 +251,7 @@ i8042ConnectKeyboardInterrupt(
|
||||||
PortDeviceExtension->KeyboardInterrupt.Affinity, FALSE);
|
PortDeviceExtension->KeyboardInterrupt.Affinity, FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoConnectInterrupt() failed with status 0x%08x\n", Status);
|
WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ i8042ConnectMouseInterrupt(
|
||||||
KIRQL DirqlMax;
|
KIRQL DirqlMax;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042ConnectMouseInterrupt()\n");
|
TRACE_(I8042PRT, "i8042ConnectMouseInterrupt()\n");
|
||||||
|
|
||||||
Status = i8042MouInitialize(DeviceExtension);
|
Status = i8042MouInitialize(DeviceExtension);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -280,17 +280,17 @@ i8042ConnectMouseInterrupt(
|
||||||
PortDeviceExtension->KeyboardInterrupt.Dirql,
|
PortDeviceExtension->KeyboardInterrupt.Dirql,
|
||||||
PortDeviceExtension->MouseInterrupt.Dirql);
|
PortDeviceExtension->MouseInterrupt.Dirql);
|
||||||
|
|
||||||
DPRINT("MouseInterrupt.Vector %lu\n",
|
INFO_(I8042PRT, "MouseInterrupt.Vector %lu\n",
|
||||||
PortDeviceExtension->MouseInterrupt.Vector);
|
PortDeviceExtension->MouseInterrupt.Vector);
|
||||||
DPRINT("MouseInterrupt.Dirql %lu\n",
|
INFO_(I8042PRT, "MouseInterrupt.Dirql %lu\n",
|
||||||
PortDeviceExtension->MouseInterrupt.Dirql);
|
PortDeviceExtension->MouseInterrupt.Dirql);
|
||||||
DPRINT("MouseInterrupt.DirqlMax %lu\n",
|
INFO_(I8042PRT, "MouseInterrupt.DirqlMax %lu\n",
|
||||||
DirqlMax);
|
DirqlMax);
|
||||||
DPRINT("MouseInterrupt.InterruptMode %s\n",
|
INFO_(I8042PRT, "MouseInterrupt.InterruptMode %s\n",
|
||||||
PortDeviceExtension->MouseInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
|
PortDeviceExtension->MouseInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
|
||||||
DPRINT("MouseInterrupt.ShareInterrupt %s\n",
|
INFO_(I8042PRT, "MouseInterrupt.ShareInterrupt %s\n",
|
||||||
PortDeviceExtension->MouseInterrupt.ShareInterrupt ? "yes" : "no");
|
PortDeviceExtension->MouseInterrupt.ShareInterrupt ? "yes" : "no");
|
||||||
DPRINT("MouseInterrupt.Affinity 0x%lx\n",
|
INFO_(I8042PRT, "MouseInterrupt.Affinity 0x%lx\n",
|
||||||
PortDeviceExtension->MouseInterrupt.Affinity);
|
PortDeviceExtension->MouseInterrupt.Affinity);
|
||||||
Status = IoConnectInterrupt(
|
Status = IoConnectInterrupt(
|
||||||
&PortDeviceExtension->MouseInterrupt.Object,
|
&PortDeviceExtension->MouseInterrupt.Object,
|
||||||
|
@ -301,7 +301,7 @@ i8042ConnectMouseInterrupt(
|
||||||
PortDeviceExtension->MouseInterrupt.Affinity, FALSE);
|
PortDeviceExtension->MouseInterrupt.Affinity, FALSE);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoConnectInterrupt() failed with status 0x%08x\n", Status);
|
WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,21 +378,21 @@ StartProcedure(
|
||||||
if (!(DeviceExtension->Flags & (KEYBOARD_PRESENT | MOUSE_PRESENT)))
|
if (!(DeviceExtension->Flags & (KEYBOARD_PRESENT | MOUSE_PRESENT)))
|
||||||
{
|
{
|
||||||
/* Try to detect them */
|
/* Try to detect them */
|
||||||
DPRINT("Check if the controller is really a i8042\n");
|
TRACE_(I8042PRT, "Check if the controller is really a i8042\n");
|
||||||
Status = i8042BasicDetect(DeviceExtension);
|
Status = i8042BasicDetect(DeviceExtension);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("i8042BasicDetect() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "i8042BasicDetect() failed with status 0x%08lx\n", Status);
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
}
|
}
|
||||||
DPRINT("Detecting keyboard\n");
|
TRACE_(I8042PRT, "Detecting keyboard\n");
|
||||||
if (!i8042DetectKeyboard(DeviceExtension))
|
if (!i8042DetectKeyboard(DeviceExtension))
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
DPRINT("Detecting mouse\n");
|
TRACE_(I8042PRT, "Detecting mouse\n");
|
||||||
if (!i8042DetectMouse(DeviceExtension))
|
if (!i8042DetectMouse(DeviceExtension))
|
||||||
return STATUS_UNSUCCESSFUL;
|
return STATUS_UNSUCCESSFUL;
|
||||||
DPRINT("Keyboard present: %s\n", DeviceExtension->Flags & KEYBOARD_PRESENT ? "YES" : "NO");
|
INFO_(I8042PRT, "Keyboard present: %s\n", DeviceExtension->Flags & KEYBOARD_PRESENT ? "YES" : "NO");
|
||||||
DPRINT("Mouse present : %s\n", DeviceExtension->Flags & MOUSE_PRESENT ? "YES" : "NO");
|
INFO_(I8042PRT, "Mouse present : %s\n", DeviceExtension->Flags & MOUSE_PRESENT ? "YES" : "NO");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Connect interrupts */
|
/* Connect interrupts */
|
||||||
|
@ -468,7 +468,7 @@ i8042PnpStartDevice(
|
||||||
ULONG i;
|
ULONG i;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042PnpStartDevice(%p)\n", DeviceObject);
|
TRACE_(I8042PRT, "i8042PnpStartDevice(%p)\n", DeviceObject);
|
||||||
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
|
||||||
PortDeviceExtension = DeviceExtension->PortDeviceExtension;
|
PortDeviceExtension = DeviceExtension->PortDeviceExtension;
|
||||||
|
|
||||||
|
@ -476,12 +476,12 @@ i8042PnpStartDevice(
|
||||||
|
|
||||||
if (!AllocatedResources)
|
if (!AllocatedResources)
|
||||||
{
|
{
|
||||||
DPRINT("No allocated resources sent to driver\n");
|
WARN_(I8042PRT, "No allocated resources sent to driver\n");
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
if (AllocatedResources->Count != 1)
|
if (AllocatedResources->Count != 1)
|
||||||
{
|
{
|
||||||
DPRINT("Wrong number of allocated resources sent to driver\n");
|
WARN_(I8042PRT, "Wrong number of allocated resources sent to driver\n");
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
if (AllocatedResources->List[0].PartialResourceList.Version != 1
|
if (AllocatedResources->List[0].PartialResourceList.Version != 1
|
||||||
|
@ -489,7 +489,7 @@ i8042PnpStartDevice(
|
||||||
|| AllocatedResourcesTranslated->List[0].PartialResourceList.Version != 1
|
|| AllocatedResourcesTranslated->List[0].PartialResourceList.Version != 1
|
||||||
|| AllocatedResourcesTranslated->List[0].PartialResourceList.Revision != 1)
|
|| AllocatedResourcesTranslated->List[0].PartialResourceList.Revision != 1)
|
||||||
{
|
{
|
||||||
DPRINT("Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
|
WARN_(I8042PRT, "Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
|
||||||
AllocatedResources->List[0].PartialResourceList.Version,
|
AllocatedResources->List[0].PartialResourceList.Version,
|
||||||
AllocatedResources->List[0].PartialResourceList.Revision,
|
AllocatedResources->List[0].PartialResourceList.Revision,
|
||||||
AllocatedResourcesTranslated->List[0].PartialResourceList.Version,
|
AllocatedResourcesTranslated->List[0].PartialResourceList.Version,
|
||||||
|
@ -515,23 +515,23 @@ i8042PnpStartDevice(
|
||||||
if (!FoundDataPort)
|
if (!FoundDataPort)
|
||||||
{
|
{
|
||||||
PortDeviceExtension->DataPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
|
PortDeviceExtension->DataPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
|
||||||
DPRINT("Found data port: %p\n", PortDeviceExtension->DataPort);
|
INFO_(I8042PRT, "Found data port: %p\n", PortDeviceExtension->DataPort);
|
||||||
FoundDataPort = TRUE;
|
FoundDataPort = TRUE;
|
||||||
}
|
}
|
||||||
else if (!FoundControlPort)
|
else if (!FoundControlPort)
|
||||||
{
|
{
|
||||||
PortDeviceExtension->ControlPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
|
PortDeviceExtension->ControlPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
|
||||||
DPRINT("Found control port: %p\n", PortDeviceExtension->ControlPort);
|
INFO_(I8042PRT, "Found control port: %p\n", PortDeviceExtension->ControlPort);
|
||||||
FoundControlPort = TRUE;
|
FoundControlPort = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DPRINT("Too much I/O ranges provided: 0x%lx\n", ResourceDescriptor->u.Port.Length);
|
WARN_(I8042PRT, "Too much I/O ranges provided: 0x%lx\n", ResourceDescriptor->u.Port.Length);
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DPRINT1("Invalid I/O range length: 0x%lx\n", ResourceDescriptor->u.Port.Length);
|
WARN_(I8042PRT, "Invalid I/O range length: 0x%lx\n", ResourceDescriptor->u.Port.Length);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CmResourceTypeInterrupt:
|
case CmResourceTypeInterrupt:
|
||||||
|
@ -546,28 +546,28 @@ i8042PnpStartDevice(
|
||||||
else
|
else
|
||||||
InterruptData.InterruptMode = LevelSensitive;
|
InterruptData.InterruptMode = LevelSensitive;
|
||||||
InterruptData.ShareInterrupt = (ResourceDescriptorTranslated->ShareDisposition == CmResourceShareShared);
|
InterruptData.ShareInterrupt = (ResourceDescriptorTranslated->ShareDisposition == CmResourceShareShared);
|
||||||
DPRINT("Found irq resource: %lu\n", ResourceDescriptor->u.Interrupt.Level);
|
INFO_(I8042PRT, "Found irq resource: %lu\n", ResourceDescriptor->u.Interrupt.Level);
|
||||||
FoundIrq = TRUE;
|
FoundIrq = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
DPRINT("Unknown resource descriptor type 0x%x\n", ResourceDescriptor->Type);
|
WARN_(I8042PRT, "Unknown resource descriptor type 0x%x\n", ResourceDescriptor->Type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!FoundIrq)
|
if (!FoundIrq)
|
||||||
{
|
{
|
||||||
DPRINT("Interrupt resource was not found in allocated resources list\n");
|
WARN_(I8042PRT, "Interrupt resource was not found in allocated resources list\n");
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
else if (DeviceExtension->Type == Keyboard && (!FoundDataPort || !FoundControlPort))
|
else if (DeviceExtension->Type == Keyboard && (!FoundDataPort || !FoundControlPort))
|
||||||
{
|
{
|
||||||
DPRINT("Some required resources were not found in allocated resources list\n");
|
WARN_(I8042PRT, "Some required resources were not found in allocated resources list\n");
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
else if (DeviceExtension->Type == Mouse && (FoundDataPort || FoundControlPort))
|
else if (DeviceExtension->Type == Mouse && (FoundDataPort || FoundControlPort))
|
||||||
{
|
{
|
||||||
DPRINT("Too much resources were provided in allocated resources list\n");
|
WARN_(I8042PRT, "Too much resources were provided in allocated resources list\n");
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -595,7 +595,7 @@ i8042PnpStartDevice(
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT1("Unknown FDO type %u\n", DeviceExtension->Type);
|
ERR_(I8042PRT, "Unknown FDO type %u\n", DeviceExtension->Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
Status = STATUS_INVALID_DEVICE_REQUEST;
|
Status = STATUS_INVALID_DEVICE_REQUEST;
|
||||||
}
|
}
|
||||||
|
@ -626,7 +626,7 @@ i8042Pnp(
|
||||||
{
|
{
|
||||||
case IRP_MN_START_DEVICE: /* 0x00 */
|
case IRP_MN_START_DEVICE: /* 0x00 */
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
|
TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
|
||||||
|
|
||||||
/* Call lower driver (if any) */
|
/* Call lower driver (if any) */
|
||||||
if (DeviceType != PhysicalDeviceObject)
|
if (DeviceType != PhysicalDeviceObject)
|
||||||
|
@ -650,7 +650,7 @@ i8042Pnp(
|
||||||
{
|
{
|
||||||
PDEVICE_RELATIONS DeviceRelations;
|
PDEVICE_RELATIONS DeviceRelations;
|
||||||
|
|
||||||
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
|
TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
|
||||||
DeviceRelations = ExAllocatePoolWithTag(PagedPool, sizeof(DEVICE_RELATIONS), I8042PRT_TAG);
|
DeviceRelations = ExAllocatePoolWithTag(PagedPool, sizeof(DEVICE_RELATIONS), I8042PRT_TAG);
|
||||||
if (DeviceRelations)
|
if (DeviceRelations)
|
||||||
{
|
{
|
||||||
|
@ -664,11 +664,11 @@ i8042Pnp(
|
||||||
}
|
}
|
||||||
case RemovalRelations:
|
case RemovalRelations:
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
|
TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
|
ERR_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
|
||||||
Stack->Parameters.QueryDeviceRelations.Type);
|
Stack->Parameters.QueryDeviceRelations.Type);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
|
@ -677,14 +677,14 @@ i8042Pnp(
|
||||||
}
|
}
|
||||||
case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* (optional) 0x0d */
|
case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* (optional) 0x0d */
|
||||||
{
|
{
|
||||||
DPRINT("IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
|
TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
|
||||||
/* Nothing to do */
|
/* Nothing to do */
|
||||||
Status = Irp->IoStatus.Status;
|
Status = Irp->IoStatus.Status;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
DPRINT1("IRP_MJ_PNP / unknown minor function 0x%x\n", MinorFunction);
|
ERR_(I8042PRT, "IRP_MJ_PNP / unknown minor function 0x%x\n", MinorFunction);
|
||||||
ASSERT(FALSE);
|
ASSERT(FALSE);
|
||||||
return ForwardIrpAndForget(DeviceObject, Irp);
|
return ForwardIrpAndForget(DeviceObject, Irp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ i8042MouHandlePs2pp(
|
||||||
(((DeviceExtension->MouseLogiBuffer[1] & 0x0C) >> 2) !=
|
(((DeviceExtension->MouseLogiBuffer[1] & 0x0C) >> 2) !=
|
||||||
(DeviceExtension->MouseLogiBuffer[2] & 0x03)))
|
(DeviceExtension->MouseLogiBuffer[2] & 0x03)))
|
||||||
{
|
{
|
||||||
DPRINT1("Ps2pp packet fails sanity checks\n");
|
WARN_(I8042PRT, "Ps2pp packet fails sanity checks\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,6 +133,6 @@ i8042MouHandlePs2pp(
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
DPRINT1("Unexpected input state for ps2pp!\n");
|
WARN_(I8042PRT, "Unexpected input state for ps2pp!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ i8042Flush(
|
||||||
UCHAR Ignore;
|
UCHAR Ignore;
|
||||||
|
|
||||||
while (NT_SUCCESS(i8042ReadData(DeviceExtension, KBD_OBF | MOU_OBF, &Ignore))) {
|
while (NT_SUCCESS(i8042ReadData(DeviceExtension, KBD_OBF | MOU_OBF, &Ignore))) {
|
||||||
DPRINT("Data flushed\n"); /* drop */
|
INFO_(I8042PRT, "Data flushed\n"); /* drop */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ i8042ReadData(
|
||||||
if (PortStatus & StatusFlags)
|
if (PortStatus & StatusFlags)
|
||||||
{
|
{
|
||||||
*Data = READ_PORT_UCHAR(DeviceExtension->DataPort);
|
*Data = READ_PORT_UCHAR(DeviceExtension->DataPort);
|
||||||
DPRINT("Read: 0x%02x (status: 0x%x)\n", Data[0], PortStatus);
|
INFO_(I8042PRT, "Read: 0x%02x (status: 0x%x)\n", Data[0], PortStatus);
|
||||||
|
|
||||||
// If the data is valid (not timeout, not parity error)
|
// If the data is valid (not timeout, not parity error)
|
||||||
if ((PortStatus & KBD_PERR) == 0)
|
if ((PortStatus & KBD_PERR) == 0)
|
||||||
|
@ -146,13 +146,13 @@ i8042SynchWritePort(
|
||||||
if (Port)
|
if (Port)
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Port))
|
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Port))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to write Port\n");
|
WARN_(I8042PRT, "Failed to write Port\n");
|
||||||
return STATUS_IO_TIMEOUT;
|
return STATUS_IO_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
|
if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to write Value\n");
|
WARN_(I8042PRT, "Failed to write Value\n");
|
||||||
return STATUS_IO_TIMEOUT;
|
return STATUS_IO_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,19 +161,19 @@ i8042SynchWritePort(
|
||||||
Status = i8042ReadDataWait(DeviceExtension, &Ack);
|
Status = i8042ReadDataWait(DeviceExtension, &Ack);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Failed to read Ack\n");
|
WARN_(I8042PRT, "Failed to read Ack\n");
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
if (Ack == KBD_ACK)
|
if (Ack == KBD_ACK)
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
else if (Ack == KBD_RESEND)
|
else if (Ack == KBD_RESEND)
|
||||||
DPRINT("i8042 asks for a data resend\n");
|
INFO_(I8042PRT, "i8042 asks for a data resend\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
DPRINT("Reiterating\n");
|
TRACE_(I8042PRT, "Reiterating\n");
|
||||||
ResendIterations--;
|
ResendIterations--;
|
||||||
} while (ResendIterations);
|
} while (ResendIterations);
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ i8042Write(
|
||||||
if (ResendIterations)
|
if (ResendIterations)
|
||||||
{
|
{
|
||||||
WRITE_PORT_UCHAR(addr, data);
|
WRITE_PORT_UCHAR(addr, data);
|
||||||
DPRINT("Sent 0x%x to port %p\n", data, addr);
|
INFO_(I8042PRT, "Sent 0x%x to port %p\n", data, addr);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -200,7 +200,7 @@ ReadRegistryEntries(
|
||||||
if (!RtlCreateUnicodeString(&Settings->KeyboardDeviceBaseName, DefaultKeyboardDeviceBaseName)
|
if (!RtlCreateUnicodeString(&Settings->KeyboardDeviceBaseName, DefaultKeyboardDeviceBaseName)
|
||||||
|| !RtlCreateUnicodeString(&Settings->PointerDeviceBaseName, DefaultPointerDeviceBaseName))
|
|| !RtlCreateUnicodeString(&Settings->PointerDeviceBaseName, DefaultPointerDeviceBaseName))
|
||||||
{
|
{
|
||||||
DPRINT("RtlCreateUnicodeString() failed\n");
|
WARN_(I8042PRT, "RtlCreateUnicodeString() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -211,20 +211,20 @@ ReadRegistryEntries(
|
||||||
|
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("KeyboardDataQueueSize : 0x%lx\n", Settings->KeyboardDataQueueSize);
|
INFO_(I8042PRT, "KeyboardDataQueueSize : 0x%lx\n", Settings->KeyboardDataQueueSize);
|
||||||
DPRINT("KeyboardDeviceBaseName : %wZ\n", &Settings->KeyboardDeviceBaseName);
|
INFO_(I8042PRT, "KeyboardDeviceBaseName : %wZ\n", &Settings->KeyboardDeviceBaseName);
|
||||||
DPRINT("MouseDataQueueSize : 0x%lx\n", Settings->MouseDataQueueSize);
|
INFO_(I8042PRT, "MouseDataQueueSize : 0x%lx\n", Settings->MouseDataQueueSize);
|
||||||
DPRINT("MouseResolution : 0x%lx\n", Settings->MouseResolution);
|
INFO_(I8042PRT, "MouseResolution : 0x%lx\n", Settings->MouseResolution);
|
||||||
DPRINT("MouseSynchIn100ns : %lu\n", Settings->MouseSynchIn100ns);
|
INFO_(I8042PRT, "MouseSynchIn100ns : %lu\n", Settings->MouseSynchIn100ns);
|
||||||
DPRINT("NumberOfButtons : 0x%lx\n", Settings->NumberOfButtons);
|
INFO_(I8042PRT, "NumberOfButtons : 0x%lx\n", Settings->NumberOfButtons);
|
||||||
DPRINT("PointerDeviceBaseName : %wZ\n", &Settings->PointerDeviceBaseName);
|
INFO_(I8042PRT, "PointerDeviceBaseName : %wZ\n", &Settings->PointerDeviceBaseName);
|
||||||
DPRINT("PollStatusIterations : 0x%lx\n", Settings->PollStatusIterations);
|
INFO_(I8042PRT, "PollStatusIterations : 0x%lx\n", Settings->PollStatusIterations);
|
||||||
DPRINT("OverrideKeyboardType : 0x%lx\n", Settings->OverrideKeyboardType);
|
INFO_(I8042PRT, "OverrideKeyboardType : 0x%lx\n", Settings->OverrideKeyboardType);
|
||||||
DPRINT("OverrideKeyboardSubtype : 0x%lx\n", Settings->OverrideKeyboardSubtype);
|
INFO_(I8042PRT, "OverrideKeyboardSubtype : 0x%lx\n", Settings->OverrideKeyboardSubtype);
|
||||||
DPRINT("PollingIterations : 0x%lx\n", Settings->PollingIterations);
|
INFO_(I8042PRT, "PollingIterations : 0x%lx\n", Settings->PollingIterations);
|
||||||
DPRINT("PollingIterationsMaximum : %lu\n", Settings->PollingIterationsMaximum);
|
INFO_(I8042PRT, "PollingIterationsMaximum : %lu\n", Settings->PollingIterationsMaximum);
|
||||||
DPRINT("ResendIterations : 0x%lx\n", Settings->ResendIterations);
|
INFO_(I8042PRT, "ResendIterations : 0x%lx\n", Settings->ResendIterations);
|
||||||
DPRINT("SampleRate : %lu\n", Settings->SampleRate);
|
INFO_(I8042PRT, "SampleRate : %lu\n", Settings->SampleRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -42,7 +42,7 @@ IsFirstStageSetup(
|
||||||
|
|
||||||
if (hSetupKey != (HANDLE)NULL)
|
if (hSetupKey != (HANDLE)NULL)
|
||||||
ZwClose(hSetupKey);
|
ZwClose(hSetupKey);
|
||||||
DPRINT("IsFirstStageSetup() returns %s\n", ret ? "YES" : "NO");
|
INFO_(I8042PRT, "IsFirstStageSetup() returns %s\n", ret ? "YES" : "NO");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,14 +64,14 @@ SendStartDevice(
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
Pdo = (PDEVICE_OBJECT)Context;
|
Pdo = (PDEVICE_OBJECT)Context;
|
||||||
DPRINT("SendStartDevice(%p)\n", Pdo);
|
TRACE_(I8042PRT, "SendStartDevice(%p)\n", Pdo);
|
||||||
|
|
||||||
/* Create default resource list */
|
/* Create default resource list */
|
||||||
ResourceListSize = sizeof(CM_RESOURCE_LIST) + 3 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
|
ResourceListSize = sizeof(CM_RESOURCE_LIST) + 3 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
|
||||||
AllocatedResources = ExAllocatePoolWithTag(PagedPool, ResourceListSize, I8042PRT_TAG);
|
AllocatedResources = ExAllocatePoolWithTag(PagedPool, ResourceListSize, I8042PRT_TAG);
|
||||||
if (!AllocatedResources)
|
if (!AllocatedResources)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +105,7 @@ SendStartDevice(
|
||||||
AllocatedResourcesTranslated = ExAllocatePoolWithTag(PagedPool, ResourceListSize, I8042PRT_TAG);
|
AllocatedResourcesTranslated = ExAllocatePoolWithTag(PagedPool, ResourceListSize, I8042PRT_TAG);
|
||||||
if (!AllocatedResourcesTranslated)
|
if (!AllocatedResourcesTranslated)
|
||||||
{
|
{
|
||||||
DPRINT("ExAllocatePoolWithTag() failed\n");
|
WARN_(I8042PRT, "ExAllocatePoolWithTag() failed\n");
|
||||||
Status = STATUS_NO_MEMORY;
|
Status = STATUS_NO_MEMORY;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ SendStartDevice(
|
||||||
}
|
}
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoCallDriver() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoCallDriver() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ AddRegistryEntry(
|
||||||
Status = ZwOpenKey(&hDeviceMapKey, 0, &ObjectAttributes);
|
Status = ZwOpenKey(&hDeviceMapKey, 0, &ObjectAttributes);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("ZwOpenKey() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "ZwOpenKey() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -189,14 +189,14 @@ AddRegistryEntry(
|
||||||
Status = ZwCreateKey(&hPortKey, KEY_SET_VALUE, &ObjectAttributes, 0, NULL, REG_OPTION_VOLATILE, NULL);
|
Status = ZwCreateKey(&hPortKey, KEY_SET_VALUE, &ObjectAttributes, 0, NULL, REG_OPTION_VOLATILE, NULL);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("ZwCreateKey() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "ZwCreateKey() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL));
|
Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL));
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("ZwSetValueKey() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "ZwSetValueKey() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ i8042AddLegacyKeyboard(
|
||||||
PDEVICE_OBJECT Pdo = NULL;
|
PDEVICE_OBJECT Pdo = NULL;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("i8042AddLegacyKeyboard()\n");
|
TRACE_(I8042PRT, "i8042AddLegacyKeyboard()\n");
|
||||||
|
|
||||||
/* Create a named PDO */
|
/* Create a named PDO */
|
||||||
Status = IoCreateDevice(
|
Status = IoCreateDevice(
|
||||||
|
@ -233,7 +233,7 @@ i8042AddLegacyKeyboard(
|
||||||
&Pdo);
|
&Pdo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("IoCreateDevice() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "IoCreateDevice() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +247,7 @@ i8042AddLegacyKeyboard(
|
||||||
Status = i8042AddDevice(DriverObject, Pdo);
|
Status = i8042AddDevice(DriverObject, Pdo);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT("i8042AddDevice() failed with status 0x%08lx\n", Status);
|
WARN_(I8042PRT, "i8042AddDevice() failed with status 0x%08lx\n", Status);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue