Author: cfinck Date: Tue Mar 18 07:00:29 2008 New Revision: 32718
URL: http://svn.reactos.org/svn/reactos?rev=3D32718&view=3Drev Log: - Simplify the code for connecting the interrupts. Don't use three code pathes (keyboard; mouse; keyboard & mouse) anymore a= nd don't check again in EnableInterrupts(), which devices are present. Instead prepare the flags for i8042ChangeMode() already in StartProcedure= () and pass them later. - Constify the result of CTRL_SELF_TEST (0x55) as KBD_SELF_TEST_OK. - Add a bug number as a reference for the system flag setting.
Modified: trunk/reactos/drivers/input/i8042prt/i8042prt.h trunk/reactos/drivers/input/i8042prt/pnp.c
Modified: trunk/reactos/drivers/input/i8042prt/i8042prt.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/i8042pr= t/i8042prt.h?rev=3D32718&r1=3D32717&r2=3D32718&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/reactos/drivers/input/i8042prt/i8042prt.h (original) +++ trunk/reactos/drivers/input/i8042prt/i8042prt.h Tue Mar 18 07:00:29 2008 @@ -240,6 +240,7 @@ * Keyboard responses * --------------------------------------------------*/ =
+#define KBD_SELF_TEST_OK 0x55 #define KBD_ACK 0xFA #define KBD_NACK 0xFC #define KBD_RESEND 0xFE
Modified: trunk/reactos/drivers/input/i8042prt/pnp.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/i8042pr= t/pnp.c?rev=3D32718&r1=3D32717&r2=3D32718&view=3Ddiff =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- trunk/reactos/drivers/input/i8042prt/pnp.c (original) +++ trunk/reactos/drivers/input/i8042prt/pnp.c Tue Mar 18 07:00:29 2008 @@ -106,7 +106,7 @@ KeStallExecutionProcessor(50); continue; } - else if (Value !=3D 0x55) + else if (Value !=3D KBD_SELF_TEST_OK) { WARN_(I8042PRT, "Got 0x%02x instead of 0x55\n", Value); return STATUS_IO_DEVICE_ERROR; @@ -156,7 +156,7 @@ 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 se= t) */ + /* Turn on translation and SF (Some machines don't reboot if SF is not se= t, see ReactOS bug #1842) */ if (!i8042ChangeMode(DeviceExtension, 0, CCB_TRANSLATE | CCB_SYSTEM_FLAG)) return FALSE; =
@@ -337,24 +337,12 @@ =
static NTSTATUS EnableInterrupts( - IN PPORT_DEVICE_EXTENSION DeviceExtension) -{ - UCHAR FlagsToDisable =3D 0; - UCHAR FlagsToEnable =3D 0; - + IN PPORT_DEVICE_EXTENSION DeviceExtension, + IN UCHAR FlagsToDisable, + IN UCHAR FlagsToEnable) +{ i8042Flush(DeviceExtension); =
- /* Select the devices we have */ - if (DeviceExtension->Flags & KEYBOARD_PRESENT) - { - FlagsToDisable |=3D CCB_KBD_DISAB; - FlagsToEnable |=3D CCB_KBD_INT_ENAB; - } - if (DeviceExtension->Flags & MOUSE_PRESENT) - { - FlagsToDisable |=3D CCB_MOUSE_DISAB; - FlagsToEnable |=3D CCB_MOUSE_INT_ENAB; - } if (!i8042ChangeMode(DeviceExtension, FlagsToDisable, FlagsToEnable)) return STATUS_UNSUCCESSFUL; =
@@ -379,6 +367,8 @@ IN PPORT_DEVICE_EXTENSION DeviceExtension) { NTSTATUS Status; + UCHAR FlagsToDisable =3D 0; + UCHAR FlagsToEnable =3D 0; =
if (DeviceExtension->DataPort =3D=3D 0) { @@ -409,58 +399,40 @@ } =
/* Connect interrupts */ + Status =3D STATUS_SUCCESS; + if (DeviceExtension->Flags & KEYBOARD_PRESENT && DeviceExtension->Flags & KEYBOARD_CONNECTED && DeviceExtension->Flags & KEYBOARD_STARTED && - !(DeviceExtension->Flags & (MOUSE_PRESENT | KEYBOARD_INITIALIZED))) - { - /* No mouse, and the keyboard is ready */ + !(DeviceExtension->Flags & KEYBOARD_INITIALIZED)) + { + /* Keyboard is ready to be initialized */ Status =3D i8042ConnectKeyboardInterrupt(DeviceExtension->KeyboardExtens= ion); if (NT_SUCCESS(Status)) { DeviceExtension->Flags |=3D KEYBOARD_INITIALIZED; - Status =3D EnableInterrupts(DeviceExtension); - } - } - else if (DeviceExtension->Flags & MOUSE_PRESENT && - DeviceExtension->Flags & MOUSE_CONNECTED && - DeviceExtension->Flags & MOUSE_STARTED && - !(DeviceExtension->Flags & (KEYBOARD_PRESENT | MOUSE_INITIALIZED= ))) - { - /* No keyboard, and the mouse is ready */ + FlagsToDisable |=3D CCB_KBD_DISAB; + FlagsToEnable |=3D CCB_KBD_INT_ENAB; + } + } + + if (DeviceExtension->Flags & MOUSE_PRESENT && + DeviceExtension->Flags & MOUSE_CONNECTED && + DeviceExtension->Flags & MOUSE_STARTED && + !(DeviceExtension->Flags & MOUSE_INITIALIZED)) + { + /* Mouse is ready to be initialized */ Status =3D i8042ConnectMouseInterrupt(DeviceExtension->MouseExtension); if (NT_SUCCESS(Status)) { DeviceExtension->Flags |=3D MOUSE_INITIALIZED; - Status =3D EnableInterrupts(DeviceExtension); - } - } - else if (DeviceExtension->Flags & KEYBOARD_PRESENT && - DeviceExtension->Flags & KEYBOARD_CONNECTED && - DeviceExtension->Flags & KEYBOARD_STARTED && - DeviceExtension->Flags & MOUSE_PRESENT && - DeviceExtension->Flags & MOUSE_CONNECTED && - DeviceExtension->Flags & MOUSE_STARTED && - !(DeviceExtension->Flags & (KEYBOARD_INITIALIZED | MOUSE_INITIAL= IZED))) - { - /* The keyboard and mouse are ready */ - Status =3D i8042ConnectKeyboardInterrupt(DeviceExtension->KeyboardExtens= ion); - if (NT_SUCCESS(Status)) - { - DeviceExtension->Flags |=3D KEYBOARD_INITIALIZED; - Status =3D i8042ConnectMouseInterrupt(DeviceExtension->MouseExtension); - if (NT_SUCCESS(Status)) - { - DeviceExtension->Flags |=3D MOUSE_INITIALIZED; - Status =3D EnableInterrupts(DeviceExtension); - } - } - } - else - { - /* Nothing to do */ - Status =3D STATUS_SUCCESS; - } + FlagsToDisable |=3D CCB_MOUSE_DISAB; + FlagsToEnable |=3D CCB_MOUSE_INT_ENAB; + } + } + + if(FlagsToEnable) + Status =3D EnableInterrupts(DeviceExtension, FlagsToDisable, Flags= ToEnable); =
return Status; }