Fix flags checking in I8042ReadData (patch by Tinus_)
Check error codes returned by IoCreateDevice
Replace ExFreePool by ExFreePoolWithTag
Modified: trunk/reactos/drivers/input/i8042prt/i8042prt.c
Modified: trunk/reactos/drivers/input/i8042prt/registry.c
_____
Modified: trunk/reactos/drivers/input/i8042prt/i8042prt.c
--- trunk/reactos/drivers/input/i8042prt/i8042prt.c 2005-05-03
23:24:26 UTC (rev 14966)
+++ trunk/reactos/drivers/input/i8042prt/i8042prt.c 2005-05-04
13:28:34 UTC (rev 14967)
@@ -80,9 +80,10 @@
// If data is available
if ((Status & KBD_OBF)) {
Data[0]=READ_PORT_UCHAR((PUCHAR)I8042_DATA_PORT);
+ DPRINT("Read: %x (status: %x)\n", Data[0], Status);
// If the data is valid (not timeout, not parity error)
- if ((~Status) & (KBD_GTO | KBD_PERR))
+ if (0 == (Status & (KBD_GTO | KBD_PERR)))
return STATUS_SUCCESS;
}
return STATUS_UNSUCCESSFUL;
@@ -613,7 +614,7 @@
DPRINT("I8042AddDevice\n");
- IoCreateDevice(DriverObject,
+ Status = IoCreateDevice(DriverObject,
sizeof(DEVICE_EXTENSION),
NULL,
FILE_DEVICE_8042_PORT,
@@ -621,6 +622,9 @@
TRUE,
&Fdo);
+ if (!NT_SUCCESS(Status))
+ return Status;
+
IoAttachDeviceToDeviceStack(Fdo, Pdo);
DevExt = Fdo->DeviceExtension;
@@ -647,7 +651,7 @@
KeInitializeTimer(&DevExt->TimerMouseTimeout);
Status = I8042Initialize(DevExt);
- if (STATUS_SUCCESS != Status) {
+ if (!NT_SUCCESS(STATUS_SUCCESS)) {
DPRINT1("Initialization failure: %x\n", Status);
return Status;
}
@@ -668,31 +672,36 @@
TRUE,
&Fdo);
- FdoDevExt = Fdo->DeviceExtension;
+ if (NT_SUCCESS(Status))
+ {
+ FdoDevExt = Fdo->DeviceExtension;
- RtlZeroMemory(FdoDevExt, sizeof(FDO_DEVICE_EXTENSION));
+ RtlZeroMemory(FdoDevExt,
sizeof(FDO_DEVICE_EXTENSION));
- FdoDevExt->PortDevExt = DevExt;
- FdoDevExt->Type = Keyboard;
- FdoDevExt->DeviceObject = Fdo;
+ FdoDevExt->PortDevExt = DevExt;
+ FdoDevExt->Type = Keyboard;
+ FdoDevExt->DeviceObject = Fdo;
- Fdo->Flags |= DO_BUFFERED_IO;
+ Fdo->Flags |= DO_BUFFERED_IO;
- DevExt->DebugWorkItem = IoAllocateWorkItem(Fdo);
- DevExt->KeyboardObject = Fdo;
+ DevExt->DebugWorkItem = IoAllocateWorkItem(Fdo);
+ DevExt->KeyboardObject = Fdo;
- DevExt->KeyboardBuffer = ExAllocatePoolWithTag(
- NonPagedPool,
-
DevExt->KeyboardAttributes.InputDataQueueLength *
- sizeof(KEYBOARD_INPUT_DATA),
- TAG_I8042);
+ DevExt->KeyboardBuffer = ExAllocatePoolWithTag(
+ NonPagedPool,
+
DevExt->KeyboardAttributes.InputDataQueueLength *
+
sizeof(KEYBOARD_INPUT_DATA),
+ TAG_I8042);
- if (!DevExt->KeyboardBuffer) {
- DPRINT1("No memory for keyboardbuffer\n");
- return STATUS_INSUFFICIENT_RESOURCES;
+ if (!DevExt->KeyboardBuffer) {
+ DPRINT1("No memory for
keyboardbuffer\n");
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ InsertTailList(&DevExt->BusDevices,
&FdoDevExt->BusDevices);
}
-
- InsertTailList(&DevExt->BusDevices,
&FdoDevExt->BusDevices);
+ else
+ DevExt->KeyboardExists = FALSE;
}
if (DevExt->MouseExists) {
@@ -711,30 +720,35 @@
TRUE,
&Fdo);
- FdoDevExt = Fdo->DeviceExtension;
+ if (NT_SUCCESS(Status))
+ {
+ FdoDevExt = Fdo->DeviceExtension;
- RtlZeroMemory(FdoDevExt, sizeof(FDO_DEVICE_EXTENSION));
+ RtlZeroMemory(FdoDevExt,
sizeof(FDO_DEVICE_EXTENSION));
- FdoDevExt->PortDevExt = DevExt;
- FdoDevExt->Type = Mouse;
- FdoDevExt->DeviceObject = Fdo;
+ FdoDevExt->PortDevExt = DevExt;
+ FdoDevExt->Type = Mouse;
+ FdoDevExt->DeviceObject = Fdo;
- Fdo->Flags |= DO_BUFFERED_IO;
- DevExt->MouseObject = Fdo;
+ Fdo->Flags |= DO_BUFFERED_IO;
+ DevExt->MouseObject = Fdo;
+
+ DevExt->MouseBuffer = ExAllocatePoolWithTag(
+ NonPagedPool,
+
DevExt->MouseAttributes.InputDataQueueLength *
+
sizeof(MOUSE_INPUT_DATA),
+ TAG_I8042);
- DevExt->MouseBuffer = ExAllocatePoolWithTag(
- NonPagedPool,
-
DevExt->MouseAttributes.InputDataQueueLength *
- sizeof(MOUSE_INPUT_DATA),
- TAG_I8042);
+ if (!DevExt->MouseBuffer) {
+
ExFreePoolWithTag(DevExt->KeyboardBuffer, TAG_I8042);
+ DPRINT1("No memory for mouse buffer\n");
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
- if (!DevExt->MouseBuffer) {
- ExFreePool(DevExt->KeyboardBuffer);
- DPRINT1("No memory for mouse buffer\n");
- return STATUS_INSUFFICIENT_RESOURCES;
+ InsertTailList(&DevExt->BusDevices,
&FdoDevExt->BusDevices);
}
-
- InsertTailList(&DevExt->BusDevices,
&FdoDevExt->BusDevices);
+ else
+ DevExt->MouseExists = FALSE;
}
if (DirqlKeyboard > DirqlMouse)
_____
Modified: trunk/reactos/drivers/input/i8042prt/registry.c
--- trunk/reactos/drivers/input/i8042prt/registry.c 2005-05-03
23:24:26 UTC (rev 14966)
+++ trunk/reactos/drivers/input/i8042prt/registry.c 2005-05-04
13:28:34 UTC (rev 14967)
@@ -231,7 +231,7 @@
DPRINT1 ("Manually set defaults\n");
}
- ExFreePool(ParametersPath.Buffer);
+ ExFreePoolWithTag(ParametersPath.Buffer, TAG_I8042);
DPRINT("Done reading registry\n");
}