[ros-diffs] [jgardou] 53130: [I8042PRT] - fix formatting

jgardou at svn.reactos.org jgardou at svn.reactos.org
Sun Aug 7 22:45:18 UTC 2011


Author: jgardou
Date: Sun Aug  7 22:45:17 2011
New Revision: 53130

URL: http://svn.reactos.org/svn/reactos?rev=53130&view=rev
Log:
[I8042PRT]
- fix formatting

Modified:
    trunk/reactos/drivers/input/i8042prt/pnp.c

Modified: trunk/reactos/drivers/input/i8042prt/pnp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/i8042prt/pnp.c?rev=53130&r1=53129&r2=53130&view=diff
==============================================================================
--- trunk/reactos/drivers/input/i8042prt/pnp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/input/i8042prt/pnp.c [iso-8859-1] Sun Aug  7 22:45:17 2011
@@ -33,687 +33,687 @@
  */
 BOOLEAN
 i8042ChangeMode(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension,
-	IN UCHAR FlagsToDisable,
-	IN UCHAR FlagsToEnable)
-{
-	UCHAR Value;
-	NTSTATUS Status;
-
-	if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_READ_MODE))
-	{
-		WARN_(I8042PRT, "Can't read i8042 mode\n");
-		return FALSE;
-	}
-
-	Status = i8042ReadDataWait(DeviceExtension, &Value);
-	if (!NT_SUCCESS(Status))
-	{
-		WARN_(I8042PRT, "No response after read i8042 mode\n");
-		return FALSE;
-	}
-
-	Value &= ~FlagsToDisable;
-	Value |= FlagsToEnable;
-
-	if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_WRITE_MODE))
-	{
-		WARN_(I8042PRT, "Can't set i8042 mode\n");
-		return FALSE;
-	}
-
-	if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
-	{
-		WARN_(I8042PRT, "Can't send i8042 mode\n");
-		return FALSE;
-	}
-
-	return TRUE;
+    IN PPORT_DEVICE_EXTENSION DeviceExtension,
+    IN UCHAR FlagsToDisable,
+    IN UCHAR FlagsToEnable)
+{
+    UCHAR Value;
+    NTSTATUS Status;
+
+    if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_READ_MODE))
+    {
+        WARN_(I8042PRT, "Can't read i8042 mode\n");
+        return FALSE;
+    }
+
+    Status = i8042ReadDataWait(DeviceExtension, &Value);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN_(I8042PRT, "No response after read i8042 mode\n");
+        return FALSE;
+    }
+
+    Value &= ~FlagsToDisable;
+    Value |= FlagsToEnable;
+
+    if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, KBD_WRITE_MODE))
+    {
+        WARN_(I8042PRT, "Can't set i8042 mode\n");
+        return FALSE;
+    }
+
+    if (!i8042Write(DeviceExtension, DeviceExtension->DataPort, Value))
+    {
+        WARN_(I8042PRT, "Can't send i8042 mode\n");
+        return FALSE;
+    }
+
+    return TRUE;
 }
 
 static NTSTATUS
 i8042BasicDetect(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension)
-{
-	NTSTATUS Status;
-	ULONG ResendIterations;
-	UCHAR Value = 0;
-
-	/* Don't enable keyboard and mouse interrupts, disable keyboard/mouse */
-	i8042Flush(DeviceExtension);
-	if (!i8042ChangeMode(DeviceExtension, CCB_KBD_INT_ENAB | CCB_MOUSE_INT_ENAB, CCB_KBD_DISAB | CCB_MOUSE_DISAB))
-		return STATUS_IO_DEVICE_ERROR;
-
-	i8042Flush(DeviceExtension);
-
-	/* Issue a CTRL_SELF_TEST command to check if this is really an i8042 controller */
-	ResendIterations = DeviceExtension->Settings.ResendIterations + 1;
-	while (ResendIterations--)
-	{
-		if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST))
-		{
-			WARN_(I8042PRT, "Writing CTRL_SELF_TEST command failed\n");
-			return STATUS_IO_TIMEOUT;
-		}
-
-		Status = i8042ReadDataWait(DeviceExtension, &Value);
-		if (!NT_SUCCESS(Status))
-		{
-			WARN_(I8042PRT, "Failed to read CTRL_SELF_TEST response, status 0x%08lx\n", Status);
-			return Status;
-		}
-
-		if (Value == KBD_SELF_TEST_OK)
-		{
-			INFO_(I8042PRT, "CTRL_SELF_TEST completed successfully!\n");
-			break;
-		}
-		else if (Value == KBD_RESEND)
-		{
-			TRACE_(I8042PRT, "Resending...\n", Value);
-			KeStallExecutionProcessor(50);
-		}
-		else
-		{
-			WARN_(I8042PRT, "Got 0x%02x instead of 0x55\n", Value);
-			return STATUS_IO_DEVICE_ERROR;
-		}
-	}
-
-	return STATUS_SUCCESS;
+    IN PPORT_DEVICE_EXTENSION DeviceExtension)
+{
+    NTSTATUS Status;
+    ULONG ResendIterations;
+    UCHAR Value = 0;
+
+    /* Don't enable keyboard and mouse interrupts, disable keyboard/mouse */
+    i8042Flush(DeviceExtension);
+    if (!i8042ChangeMode(DeviceExtension, CCB_KBD_INT_ENAB | CCB_MOUSE_INT_ENAB, CCB_KBD_DISAB | CCB_MOUSE_DISAB))
+        return STATUS_IO_DEVICE_ERROR;
+
+    i8042Flush(DeviceExtension);
+
+    /* Issue a CTRL_SELF_TEST command to check if this is really an i8042 controller */
+    ResendIterations = DeviceExtension->Settings.ResendIterations + 1;
+    while (ResendIterations--)
+    {
+        if (!i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST))
+        {
+            WARN_(I8042PRT, "Writing CTRL_SELF_TEST command failed\n");
+            return STATUS_IO_TIMEOUT;
+        }
+
+        Status = i8042ReadDataWait(DeviceExtension, &Value);
+        if (!NT_SUCCESS(Status))
+        {
+            WARN_(I8042PRT, "Failed to read CTRL_SELF_TEST response, status 0x%08lx\n", Status);
+            return Status;
+        }
+
+        if (Value == KBD_SELF_TEST_OK)
+        {
+            INFO_(I8042PRT, "CTRL_SELF_TEST completed successfully!\n");
+            break;
+        }
+        else if (Value == KBD_RESEND)
+        {
+            TRACE_(I8042PRT, "Resending...\n", Value);
+            KeStallExecutionProcessor(50);
+        }
+        else
+        {
+            WARN_(I8042PRT, "Got 0x%02x instead of 0x55\n", Value);
+            return STATUS_IO_DEVICE_ERROR;
+        }
+    }
+
+    return STATUS_SUCCESS;
 }
 
 static VOID
 i8042DetectKeyboard(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension)
-{
-	NTSTATUS Status;
-
-	/* Set LEDs (that is not fatal if some error occurs) */
-	Status = i8042SynchWritePort(DeviceExtension, 0, KBD_CMD_SET_LEDS, TRUE);
-	if (NT_SUCCESS(Status))
-	{
-		Status = i8042SynchWritePort(DeviceExtension, 0, 0, TRUE);
-		if (!NT_SUCCESS(Status))
-		{
-			WARN_(I8042PRT, "Can't finish SET_LEDS (0x%08lx)\n", Status);
-			return;
-		}
-	}
-	else
-	{
-		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, see ReactOS bug #1842) */
-	if (!i8042ChangeMode(DeviceExtension, 0, CCB_TRANSLATE | CCB_SYSTEM_FLAG))
-		return;
-
-	/*
-	 * We used to send a KBD_LINE_TEST (0xAB) command, but on at least HP
-	 * Pavilion notebooks the response to that command was incorrect.
-	 * So now we just assume that a keyboard is attached.
-	 */
-	DeviceExtension->Flags |= KEYBOARD_PRESENT;
-
-	INFO_(I8042PRT, "Keyboard detected\n");
+    IN PPORT_DEVICE_EXTENSION DeviceExtension)
+{
+    NTSTATUS Status;
+
+    /* Set LEDs (that is not fatal if some error occurs) */
+    Status = i8042SynchWritePort(DeviceExtension, 0, KBD_CMD_SET_LEDS, TRUE);
+    if (NT_SUCCESS(Status))
+    {
+        Status = i8042SynchWritePort(DeviceExtension, 0, 0, TRUE);
+        if (!NT_SUCCESS(Status))
+        {
+            WARN_(I8042PRT, "Can't finish SET_LEDS (0x%08lx)\n", Status);
+            return;
+        }
+    }
+    else
+    {
+        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, see ReactOS bug #1842) */
+    if (!i8042ChangeMode(DeviceExtension, 0, CCB_TRANSLATE | CCB_SYSTEM_FLAG))
+        return;
+
+    /*
+     * We used to send a KBD_LINE_TEST (0xAB) command, but on at least HP
+     * Pavilion notebooks the response to that command was incorrect.
+     * So now we just assume that a keyboard is attached.
+     */
+    DeviceExtension->Flags |= KEYBOARD_PRESENT;
+
+    INFO_(I8042PRT, "Keyboard detected\n");
 }
 
 static VOID
 i8042DetectMouse(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension)
-{
-	NTSTATUS Status;
-	UCHAR Value;
-	UCHAR ExpectedReply[] = { MOUSE_ACK, 0xAA };
-	UCHAR ReplyByte;
-
-	/* First do a mouse line test */
-	if (i8042Write(DeviceExtension, DeviceExtension->ControlPort, MOUSE_LINE_TEST))
-	{
-		Status = i8042ReadDataWait(DeviceExtension, &Value);
-
-		if (!NT_SUCCESS(Status) || Value != 0)
-		{
-			WARN_(I8042PRT, "Mouse line test failed\n");
-			goto failure;
-		}
-	}
-
-	/* Now reset the mouse */
-	i8042Flush(DeviceExtension);
-
-	if(!i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE))
-	{
-		WARN_(I8042PRT, "Failed to write reset command to mouse\n");
-		goto failure;
-	}
-
-	/* The implementation of the "Mouse Reset" command differs much from chip to chip.
-
-	   By default, the first byte is an ACK, when the mouse is plugged in and working and NACK when it's not.
-	   On success, the next bytes are 0xAA and 0x00.
-
-	   But on some systems (like ECS K7S5A Pro, SiS 735 chipset), we always get an ACK and 0xAA.
-	   Only the last byte indicates, whether a mouse is plugged in.
-	   It is either sent or not, so there is no byte, which indicates a failure here.
-
-	   After the Mouse Reset command was issued, it usually takes some time until we get a response.
-	   So get the first two bytes in a loop. */
-	for (ReplyByte = 0;
-	     ReplyByte < sizeof(ExpectedReply) / sizeof(ExpectedReply[0]);
-	     ReplyByte++)
-	{
-		ULONG Counter = 500;
-
-		do
-		{
-			Status = i8042ReadDataWait(DeviceExtension, &Value);
-
-			if(!NT_SUCCESS(Status))
-			{
-				/* Wait some time before trying again */
-				KeStallExecutionProcessor(50);
-			}
-		} while (Status == STATUS_IO_TIMEOUT && Counter--);
-
-		if (!NT_SUCCESS(Status))
-		{
-			WARN_(I8042PRT, "No ACK after mouse reset, status 0x%08lx\n", Status);
-			goto failure;
-		}
-		else if (Value != ExpectedReply[ReplyByte])
-		{
-			WARN_(I8042PRT, "Unexpected reply: 0x%02x (expected 0x%02x)\n", Value, ExpectedReply[ReplyByte]);
-			goto failure;
-		}
-	}
-
-	/* Finally get the third byte, but only try it one time (see above).
-	   Otherwise this takes around 45 seconds on a K7S5A Pro, when no mouse is plugged in. */
-	Status = i8042ReadDataWait(DeviceExtension, &Value);
-
-	if(!NT_SUCCESS(Status))
-	{
-		WARN_(I8042PRT, "Last byte was not transmitted after mouse reset, status 0x%08lx\n", Status);
-		goto failure;
-	}
-	else if(Value != 0x00)
-	{
-		WARN_(I8042PRT, "Last byte after mouse reset was not 0x00, but 0x%02x\n", Value);
-		goto failure;
-	}
-
-	DeviceExtension->Flags |= MOUSE_PRESENT;
-	INFO_(I8042PRT, "Mouse detected\n");
-	return;
+    IN PPORT_DEVICE_EXTENSION DeviceExtension)
+{
+    NTSTATUS Status;
+    UCHAR Value;
+    UCHAR ExpectedReply[] = { MOUSE_ACK, 0xAA };
+    UCHAR ReplyByte;
+
+    /* First do a mouse line test */
+    if (i8042Write(DeviceExtension, DeviceExtension->ControlPort, MOUSE_LINE_TEST))
+    {
+        Status = i8042ReadDataWait(DeviceExtension, &Value);
+
+        if (!NT_SUCCESS(Status) || Value != 0)
+        {
+            WARN_(I8042PRT, "Mouse line test failed\n");
+            goto failure;
+        }
+    }
+
+    /* Now reset the mouse */
+    i8042Flush(DeviceExtension);
+
+    if(!i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE))
+    {
+        WARN_(I8042PRT, "Failed to write reset command to mouse\n");
+        goto failure;
+    }
+
+    /* The implementation of the "Mouse Reset" command differs much from chip to chip.
+
+       By default, the first byte is an ACK, when the mouse is plugged in and working and NACK when it's not.
+       On success, the next bytes are 0xAA and 0x00.
+
+       But on some systems (like ECS K7S5A Pro, SiS 735 chipset), we always get an ACK and 0xAA.
+       Only the last byte indicates, whether a mouse is plugged in.
+       It is either sent or not, so there is no byte, which indicates a failure here.
+
+       After the Mouse Reset command was issued, it usually takes some time until we get a response.
+       So get the first two bytes in a loop. */
+    for (ReplyByte = 0;
+         ReplyByte < sizeof(ExpectedReply) / sizeof(ExpectedReply[0]);
+         ReplyByte++)
+    {
+        ULONG Counter = 500;
+
+        do
+        {
+            Status = i8042ReadDataWait(DeviceExtension, &Value);
+
+            if(!NT_SUCCESS(Status))
+            {
+                /* Wait some time before trying again */
+                KeStallExecutionProcessor(50);
+            }
+        } while (Status == STATUS_IO_TIMEOUT && Counter--);
+
+        if (!NT_SUCCESS(Status))
+        {
+            WARN_(I8042PRT, "No ACK after mouse reset, status 0x%08lx\n", Status);
+            goto failure;
+        }
+        else if (Value != ExpectedReply[ReplyByte])
+        {
+            WARN_(I8042PRT, "Unexpected reply: 0x%02x (expected 0x%02x)\n", Value, ExpectedReply[ReplyByte]);
+            goto failure;
+        }
+    }
+
+    /* Finally get the third byte, but only try it one time (see above).
+       Otherwise this takes around 45 seconds on a K7S5A Pro, when no mouse is plugged in. */
+    Status = i8042ReadDataWait(DeviceExtension, &Value);
+
+    if(!NT_SUCCESS(Status))
+    {
+        WARN_(I8042PRT, "Last byte was not transmitted after mouse reset, status 0x%08lx\n", Status);
+        goto failure;
+    }
+    else if(Value != 0x00)
+    {
+        WARN_(I8042PRT, "Last byte after mouse reset was not 0x00, but 0x%02x\n", Value);
+        goto failure;
+    }
+
+    DeviceExtension->Flags |= MOUSE_PRESENT;
+    INFO_(I8042PRT, "Mouse detected\n");
+    return;
 
 failure:
-	/* There is probably no mouse present. On some systems,
-	   the probe locks the entire keyboard controller. Let's
-	   try to get access to the keyboard again by sending a
-	   reset */
-	i8042Flush(DeviceExtension);
-	i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST);
-	i8042ReadDataWait(DeviceExtension, &Value);
-	i8042Flush(DeviceExtension);
-
-	INFO_(I8042PRT, "Mouse not detected\n");
+    /* There is probably no mouse present. On some systems,
+       the probe locks the entire keyboard controller. Let's
+       try to get access to the keyboard again by sending a
+       reset */
+    i8042Flush(DeviceExtension);
+    i8042Write(DeviceExtension, DeviceExtension->ControlPort, CTRL_SELF_TEST);
+    i8042ReadDataWait(DeviceExtension, &Value);
+    i8042Flush(DeviceExtension);
+
+    INFO_(I8042PRT, "Mouse not detected\n");
 }
 
 static NTSTATUS
 i8042ConnectKeyboardInterrupt(
-	IN PI8042_KEYBOARD_EXTENSION DeviceExtension)
-{
-	PPORT_DEVICE_EXTENSION PortDeviceExtension;
-	KIRQL DirqlMax;
-	NTSTATUS Status;
-
-	TRACE_(I8042PRT, "i8042ConnectKeyboardInterrupt()\n");
-
-	PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
-	DirqlMax = MAX(
-		PortDeviceExtension->KeyboardInterrupt.Dirql,
-		PortDeviceExtension->MouseInterrupt.Dirql);
-
-	INFO_(I8042PRT, "KeyboardInterrupt.Vector         %lu\n",
-		PortDeviceExtension->KeyboardInterrupt.Vector);
-	INFO_(I8042PRT, "KeyboardInterrupt.Dirql          %lu\n",
-		PortDeviceExtension->KeyboardInterrupt.Dirql);
-	INFO_(I8042PRT, "KeyboardInterrupt.DirqlMax       %lu\n",
-		DirqlMax);
-	INFO_(I8042PRT, "KeyboardInterrupt.InterruptMode  %s\n",
-		PortDeviceExtension->KeyboardInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
-	INFO_(I8042PRT, "KeyboardInterrupt.ShareInterrupt %s\n",
-		PortDeviceExtension->KeyboardInterrupt.ShareInterrupt ? "yes" : "no");
-	INFO_(I8042PRT, "KeyboardInterrupt.Affinity       0x%lx\n",
-		PortDeviceExtension->KeyboardInterrupt.Affinity);
-	Status = IoConnectInterrupt(
-		&PortDeviceExtension->KeyboardInterrupt.Object,
-		i8042KbdInterruptService,
-		DeviceExtension, &PortDeviceExtension->SpinLock,
-		PortDeviceExtension->KeyboardInterrupt.Vector, PortDeviceExtension->KeyboardInterrupt.Dirql, DirqlMax,
-		PortDeviceExtension->KeyboardInterrupt.InterruptMode, PortDeviceExtension->KeyboardInterrupt.ShareInterrupt,
-		PortDeviceExtension->KeyboardInterrupt.Affinity, FALSE);
-	if (!NT_SUCCESS(Status))
-	{
-		WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
-		return Status;
-	}
-
-	if (DirqlMax == PortDeviceExtension->KeyboardInterrupt.Dirql)
-		PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->KeyboardInterrupt.Object;
-	PortDeviceExtension->Flags |= KEYBOARD_INITIALIZED;
-	return STATUS_SUCCESS;
+    IN PI8042_KEYBOARD_EXTENSION DeviceExtension)
+{
+    PPORT_DEVICE_EXTENSION PortDeviceExtension;
+    KIRQL DirqlMax;
+    NTSTATUS Status;
+
+    TRACE_(I8042PRT, "i8042ConnectKeyboardInterrupt()\n");
+
+    PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
+    DirqlMax = MAX(
+        PortDeviceExtension->KeyboardInterrupt.Dirql,
+        PortDeviceExtension->MouseInterrupt.Dirql);
+
+    INFO_(I8042PRT, "KeyboardInterrupt.Vector         %lu\n",
+        PortDeviceExtension->KeyboardInterrupt.Vector);
+    INFO_(I8042PRT, "KeyboardInterrupt.Dirql          %lu\n",
+        PortDeviceExtension->KeyboardInterrupt.Dirql);
+    INFO_(I8042PRT, "KeyboardInterrupt.DirqlMax       %lu\n",
+        DirqlMax);
+    INFO_(I8042PRT, "KeyboardInterrupt.InterruptMode  %s\n",
+        PortDeviceExtension->KeyboardInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
+    INFO_(I8042PRT, "KeyboardInterrupt.ShareInterrupt %s\n",
+        PortDeviceExtension->KeyboardInterrupt.ShareInterrupt ? "yes" : "no");
+    INFO_(I8042PRT, "KeyboardInterrupt.Affinity       0x%lx\n",
+        PortDeviceExtension->KeyboardInterrupt.Affinity);
+    Status = IoConnectInterrupt(
+        &PortDeviceExtension->KeyboardInterrupt.Object,
+        i8042KbdInterruptService,
+        DeviceExtension, &PortDeviceExtension->SpinLock,
+        PortDeviceExtension->KeyboardInterrupt.Vector, PortDeviceExtension->KeyboardInterrupt.Dirql, DirqlMax,
+        PortDeviceExtension->KeyboardInterrupt.InterruptMode, PortDeviceExtension->KeyboardInterrupt.ShareInterrupt,
+        PortDeviceExtension->KeyboardInterrupt.Affinity, FALSE);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
+        return Status;
+    }
+
+    if (DirqlMax == PortDeviceExtension->KeyboardInterrupt.Dirql)
+        PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->KeyboardInterrupt.Object;
+    PortDeviceExtension->Flags |= KEYBOARD_INITIALIZED;
+    return STATUS_SUCCESS;
 }
 
 static NTSTATUS
 i8042ConnectMouseInterrupt(
-	IN PI8042_MOUSE_EXTENSION DeviceExtension)
-{
-	PPORT_DEVICE_EXTENSION PortDeviceExtension;
-	KIRQL DirqlMax;
-	NTSTATUS Status;
-
-	TRACE_(I8042PRT, "i8042ConnectMouseInterrupt()\n");
-
-	Status = i8042MouInitialize(DeviceExtension);
-	if (!NT_SUCCESS(Status))
-		return Status;
-
-	PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
-	DirqlMax = MAX(
-		PortDeviceExtension->KeyboardInterrupt.Dirql,
-		PortDeviceExtension->MouseInterrupt.Dirql);
-
-	INFO_(I8042PRT, "MouseInterrupt.Vector         %lu\n",
-		PortDeviceExtension->MouseInterrupt.Vector);
-	INFO_(I8042PRT, "MouseInterrupt.Dirql          %lu\n",
-		PortDeviceExtension->MouseInterrupt.Dirql);
-	INFO_(I8042PRT, "MouseInterrupt.DirqlMax       %lu\n",
-		DirqlMax);
-	INFO_(I8042PRT, "MouseInterrupt.InterruptMode  %s\n",
-		PortDeviceExtension->MouseInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
-	INFO_(I8042PRT, "MouseInterrupt.ShareInterrupt %s\n",
-		PortDeviceExtension->MouseInterrupt.ShareInterrupt ? "yes" : "no");
-	INFO_(I8042PRT, "MouseInterrupt.Affinity       0x%lx\n",
-		PortDeviceExtension->MouseInterrupt.Affinity);
-	Status = IoConnectInterrupt(
-		&PortDeviceExtension->MouseInterrupt.Object,
-		i8042MouInterruptService,
-		DeviceExtension, &PortDeviceExtension->SpinLock,
-		PortDeviceExtension->MouseInterrupt.Vector, PortDeviceExtension->MouseInterrupt.Dirql, DirqlMax,
-		PortDeviceExtension->MouseInterrupt.InterruptMode, PortDeviceExtension->MouseInterrupt.ShareInterrupt,
-		PortDeviceExtension->MouseInterrupt.Affinity, FALSE);
-	if (!NT_SUCCESS(Status))
-	{
-		WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
-		goto cleanup;
-	}
-
-	if (DirqlMax == PortDeviceExtension->MouseInterrupt.Dirql)
-		PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->MouseInterrupt.Object;
-
-	PortDeviceExtension->Flags |= MOUSE_INITIALIZED;
-	Status = STATUS_SUCCESS;
+    IN PI8042_MOUSE_EXTENSION DeviceExtension)
+{
+    PPORT_DEVICE_EXTENSION PortDeviceExtension;
+    KIRQL DirqlMax;
+    NTSTATUS Status;
+
+    TRACE_(I8042PRT, "i8042ConnectMouseInterrupt()\n");
+
+    Status = i8042MouInitialize(DeviceExtension);
+    if (!NT_SUCCESS(Status))
+        return Status;
+
+    PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
+    DirqlMax = MAX(
+        PortDeviceExtension->KeyboardInterrupt.Dirql,
+        PortDeviceExtension->MouseInterrupt.Dirql);
+
+    INFO_(I8042PRT, "MouseInterrupt.Vector         %lu\n",
+        PortDeviceExtension->MouseInterrupt.Vector);
+    INFO_(I8042PRT, "MouseInterrupt.Dirql          %lu\n",
+        PortDeviceExtension->MouseInterrupt.Dirql);
+    INFO_(I8042PRT, "MouseInterrupt.DirqlMax       %lu\n",
+        DirqlMax);
+    INFO_(I8042PRT, "MouseInterrupt.InterruptMode  %s\n",
+        PortDeviceExtension->MouseInterrupt.InterruptMode == LevelSensitive ? "LevelSensitive" : "Latched");
+    INFO_(I8042PRT, "MouseInterrupt.ShareInterrupt %s\n",
+        PortDeviceExtension->MouseInterrupt.ShareInterrupt ? "yes" : "no");
+    INFO_(I8042PRT, "MouseInterrupt.Affinity       0x%lx\n",
+        PortDeviceExtension->MouseInterrupt.Affinity);
+    Status = IoConnectInterrupt(
+        &PortDeviceExtension->MouseInterrupt.Object,
+        i8042MouInterruptService,
+        DeviceExtension, &PortDeviceExtension->SpinLock,
+        PortDeviceExtension->MouseInterrupt.Vector, PortDeviceExtension->MouseInterrupt.Dirql, DirqlMax,
+        PortDeviceExtension->MouseInterrupt.InterruptMode, PortDeviceExtension->MouseInterrupt.ShareInterrupt,
+        PortDeviceExtension->MouseInterrupt.Affinity, FALSE);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN_(I8042PRT, "IoConnectInterrupt() failed with status 0x%08x\n", Status);
+        goto cleanup;
+    }
+
+    if (DirqlMax == PortDeviceExtension->MouseInterrupt.Dirql)
+        PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->MouseInterrupt.Object;
+
+    PortDeviceExtension->Flags |= MOUSE_INITIALIZED;
+    Status = STATUS_SUCCESS;
 
 cleanup:
-	if (!NT_SUCCESS(Status))
-	{
-		PortDeviceExtension->Flags &= ~MOUSE_INITIALIZED;
-		if (PortDeviceExtension->MouseInterrupt.Object)
-		{
-			IoDisconnectInterrupt(PortDeviceExtension->MouseInterrupt.Object);
-			PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->KeyboardInterrupt.Object;
-		}
-	}
-	return Status;
+    if (!NT_SUCCESS(Status))
+    {
+        PortDeviceExtension->Flags &= ~MOUSE_INITIALIZED;
+        if (PortDeviceExtension->MouseInterrupt.Object)
+        {
+            IoDisconnectInterrupt(PortDeviceExtension->MouseInterrupt.Object);
+            PortDeviceExtension->HighestDIRQLInterrupt = PortDeviceExtension->KeyboardInterrupt.Object;
+        }
+    }
+    return Status;
 }
 
 static NTSTATUS
 EnableInterrupts(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension,
-	IN UCHAR FlagsToDisable,
-	IN UCHAR FlagsToEnable)
-{
-	i8042Flush(DeviceExtension);
-
-	if (!i8042ChangeMode(DeviceExtension, FlagsToDisable, FlagsToEnable))
-		return STATUS_UNSUCCESSFUL;
-
-	/* Reset the mouse (if any) to start the detection */
-	if (DeviceExtension->Flags & MOUSE_PRESENT)
-	{
-		KIRQL Irql;
-
-		Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt);
-		i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE);
-		KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql);
-	}
-
-	return STATUS_SUCCESS;
+    IN PPORT_DEVICE_EXTENSION DeviceExtension,
+    IN UCHAR FlagsToDisable,
+    IN UCHAR FlagsToEnable)
+{
+    i8042Flush(DeviceExtension);
+
+    if (!i8042ChangeMode(DeviceExtension, FlagsToDisable, FlagsToEnable))
+        return STATUS_UNSUCCESSFUL;
+
+    /* Reset the mouse (if any) to start the detection */
+    if (DeviceExtension->Flags & MOUSE_PRESENT)
+    {
+        KIRQL Irql;
+
+        Irql = KeAcquireInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt);
+        i8042IsrWritePort(DeviceExtension, MOU_CMD_RESET, CTRL_WRITE_MOUSE);
+        KeReleaseInterruptSpinLock(DeviceExtension->HighestDIRQLInterrupt, Irql);
+    }
+
+    return STATUS_SUCCESS;
 }
 
 static NTSTATUS
 StartProcedure(
-	IN PPORT_DEVICE_EXTENSION DeviceExtension)
-{
-	NTSTATUS Status;
-	UCHAR FlagsToDisable = 0;
-	UCHAR FlagsToEnable = 0;
-
-	if (DeviceExtension->DataPort == 0)
-	{
-		/* Unable to do something at the moment */
-		return STATUS_SUCCESS;
-	}
-
-	if (!(DeviceExtension->Flags & (KEYBOARD_PRESENT | MOUSE_PRESENT)))
-	{
-		/* Try to detect them */
-		TRACE_(I8042PRT, "Check if the controller is really a i8042\n");
-		Status = i8042BasicDetect(DeviceExtension);
-		if (!NT_SUCCESS(Status))
-		{
-			WARN_(I8042PRT, "i8042BasicDetect() failed with status 0x%08lx\n", Status);
-			return STATUS_UNSUCCESSFUL;
-		}
-
-		/* First detect the mouse and then the keyboard!
-		   If we do it the other way round, some systems throw away settings like the keyboard translation, when detecting the mouse.
-		
-		   Don't detect the mouse if we're in 1st stage setup! */
-		if(!IsFirstStageSetup())
-		{
-			TRACE_(I8042PRT, "Detecting mouse\n");
-			i8042DetectMouse(DeviceExtension);
-		}
-
-		TRACE_(I8042PRT, "Detecting keyboard\n");
-		i8042DetectKeyboard(DeviceExtension);
-
-		INFO_(I8042PRT, "Keyboard present: %s\n", DeviceExtension->Flags & KEYBOARD_PRESENT ? "YES" : "NO");
-		INFO_(I8042PRT, "Mouse present   : %s\n", DeviceExtension->Flags & MOUSE_PRESENT ? "YES" : "NO");
-	}
-
-	/* Connect interrupts */
-	if (DeviceExtension->Flags & KEYBOARD_PRESENT &&
-	    DeviceExtension->Flags & KEYBOARD_CONNECTED &&
-	    DeviceExtension->Flags & KEYBOARD_STARTED &&
-	    !(DeviceExtension->Flags & KEYBOARD_INITIALIZED))
-	{
-		/* Keyboard is ready to be initialized */
-		Status = i8042ConnectKeyboardInterrupt(DeviceExtension->KeyboardExtension);
-		if (NT_SUCCESS(Status))
-		{
-			DeviceExtension->Flags |= KEYBOARD_INITIALIZED;
-			FlagsToDisable |= CCB_KBD_DISAB;
-			FlagsToEnable |= 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 = i8042ConnectMouseInterrupt(DeviceExtension->MouseExtension);
-		if (NT_SUCCESS(Status))
-		{
-			DeviceExtension->Flags |= MOUSE_INITIALIZED;
-			FlagsToDisable |= CCB_MOUSE_DISAB;
-			FlagsToEnable |= CCB_MOUSE_INT_ENAB;
-		}
-	}
-
-	if (FlagsToEnable)
-		Status = EnableInterrupts(DeviceExtension, FlagsToDisable, FlagsToEnable);
-	else
-		Status = STATUS_SUCCESS;
-
-	return Status;
+    IN PPORT_DEVICE_EXTENSION DeviceExtension)
+{
+    NTSTATUS Status;
+    UCHAR FlagsToDisable = 0;
+    UCHAR FlagsToEnable = 0;
+
+    if (DeviceExtension->DataPort == 0)
+    {
+        /* Unable to do something at the moment */
+        return STATUS_SUCCESS;
+    }
+
+    if (!(DeviceExtension->Flags & (KEYBOARD_PRESENT | MOUSE_PRESENT)))
+    {
+        /* Try to detect them */
+        TRACE_(I8042PRT, "Check if the controller is really a i8042\n");
+        Status = i8042BasicDetect(DeviceExtension);
+        if (!NT_SUCCESS(Status))
+        {
+            WARN_(I8042PRT, "i8042BasicDetect() failed with status 0x%08lx\n", Status);
+            return STATUS_UNSUCCESSFUL;
+        }
+
+        /* First detect the mouse and then the keyboard!
+           If we do it the other way round, some systems throw away settings like the keyboard translation, when detecting the mouse.
+        
+           Don't detect the mouse if we're in 1st stage setup! */
+        if(!IsFirstStageSetup())
+        {
+            TRACE_(I8042PRT, "Detecting mouse\n");
+            i8042DetectMouse(DeviceExtension);
+        }
+
+        TRACE_(I8042PRT, "Detecting keyboard\n");
+        i8042DetectKeyboard(DeviceExtension);
+
+        INFO_(I8042PRT, "Keyboard present: %s\n", DeviceExtension->Flags & KEYBOARD_PRESENT ? "YES" : "NO");
+        INFO_(I8042PRT, "Mouse present   : %s\n", DeviceExtension->Flags & MOUSE_PRESENT ? "YES" : "NO");
+    }
+
+    /* Connect interrupts */
+    if (DeviceExtension->Flags & KEYBOARD_PRESENT &&
+        DeviceExtension->Flags & KEYBOARD_CONNECTED &&
+        DeviceExtension->Flags & KEYBOARD_STARTED &&
+        !(DeviceExtension->Flags & KEYBOARD_INITIALIZED))
+    {
+        /* Keyboard is ready to be initialized */
+        Status = i8042ConnectKeyboardInterrupt(DeviceExtension->KeyboardExtension);
+        if (NT_SUCCESS(Status))
+        {
+            DeviceExtension->Flags |= KEYBOARD_INITIALIZED;
+            FlagsToDisable |= CCB_KBD_DISAB;
+            FlagsToEnable |= 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 = i8042ConnectMouseInterrupt(DeviceExtension->MouseExtension);
+        if (NT_SUCCESS(Status))
+        {
+            DeviceExtension->Flags |= MOUSE_INITIALIZED;
+            FlagsToDisable |= CCB_MOUSE_DISAB;
+            FlagsToEnable |= CCB_MOUSE_INT_ENAB;
+        }
+    }
+
+    if (FlagsToEnable)
+        Status = EnableInterrupts(DeviceExtension, FlagsToDisable, FlagsToEnable);
+    else
+        Status = STATUS_SUCCESS;
+
+    return Status;
 }
 
 static NTSTATUS
 i8042PnpStartDevice(
-	IN PDEVICE_OBJECT DeviceObject,
-	IN PCM_RESOURCE_LIST AllocatedResources,
-	IN PCM_RESOURCE_LIST AllocatedResourcesTranslated)
-{
-	PFDO_DEVICE_EXTENSION DeviceExtension;
-	PPORT_DEVICE_EXTENSION PortDeviceExtension;
-	PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptor, ResourceDescriptorTranslated;
-	INTERRUPT_DATA InterruptData;
-	BOOLEAN FoundDataPort = FALSE;
-	BOOLEAN FoundControlPort = FALSE;
-	BOOLEAN FoundIrq = FALSE;
-	ULONG i;
-	NTSTATUS Status;
-
-	TRACE_(I8042PRT, "i8042PnpStartDevice(%p)\n", DeviceObject);
-	DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-	PortDeviceExtension = DeviceExtension->PortDeviceExtension;
-
-	ASSERT(DeviceExtension->PnpState == dsStopped);
-
-	if (!AllocatedResources)
-	{
-		WARN_(I8042PRT, "No allocated resources sent to driver\n");
-		return STATUS_INSUFFICIENT_RESOURCES;
-	}
-	if (AllocatedResources->Count != 1)
-	{
-		WARN_(I8042PRT, "Wrong number of allocated resources sent to driver\n");
-		return STATUS_INSUFFICIENT_RESOURCES;
-	}
-	if (AllocatedResources->List[0].PartialResourceList.Version != 1
-	 || AllocatedResources->List[0].PartialResourceList.Revision != 1
-	 || AllocatedResourcesTranslated->List[0].PartialResourceList.Version != 1
-	 || AllocatedResourcesTranslated->List[0].PartialResourceList.Revision != 1)
-	{
-		WARN_(I8042PRT, "Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
-			AllocatedResources->List[0].PartialResourceList.Version,
-			AllocatedResources->List[0].PartialResourceList.Revision,
-			AllocatedResourcesTranslated->List[0].PartialResourceList.Version,
-			AllocatedResourcesTranslated->List[0].PartialResourceList.Revision);
-		return STATUS_REVISION_MISMATCH;
-	}
-
-	/* Get Irq and optionally control port and data port */
-	for (i = 0; i < AllocatedResources->List[0].PartialResourceList.Count; i++)
-	{
-		ResourceDescriptor = &AllocatedResources->List[0].PartialResourceList.PartialDescriptors[i];
-		ResourceDescriptorTranslated = &AllocatedResourcesTranslated->List[0].PartialResourceList.PartialDescriptors[i];
-		switch (ResourceDescriptor->Type)
-		{
-			case CmResourceTypePort:
-			{
-				if (ResourceDescriptor->u.Port.Length == 1)
-				{
-					/* We assume that the first ressource will
-					 * be the control port and the second one
-					 * will be the data port...
-					 */
-					if (!FoundDataPort)
-					{
-						PortDeviceExtension->DataPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
-						INFO_(I8042PRT, "Found data port: %p\n", PortDeviceExtension->DataPort);
-						FoundDataPort = TRUE;
-					}
-					else if (!FoundControlPort)
-					{
-						PortDeviceExtension->ControlPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
-						INFO_(I8042PRT, "Found control port: %p\n", PortDeviceExtension->ControlPort);
-						FoundControlPort = TRUE;
-					}
-					else
-					{
-						WARN_(I8042PRT, "Too much I/O ranges provided: 0x%lx\n", ResourceDescriptor->u.Port.Length);
-						return STATUS_INVALID_PARAMETER;
-					}
-				}
-				else
-					WARN_(I8042PRT, "Invalid I/O range length: 0x%lx\n", ResourceDescriptor->u.Port.Length);
-				break;
-			}
-			case CmResourceTypeInterrupt:
-			{
-				if (FoundIrq)
-					return STATUS_INVALID_PARAMETER;
-				InterruptData.Dirql = (KIRQL)ResourceDescriptorTranslated->u.Interrupt.Level;
-				InterruptData.Vector = ResourceDescriptorTranslated->u.Interrupt.Vector;
-				InterruptData.Affinity = ResourceDescriptorTranslated->u.Interrupt.Affinity;
-				if (ResourceDescriptorTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED)
-					InterruptData.InterruptMode = Latched;
-				else
-					InterruptData.InterruptMode = LevelSensitive;
-				InterruptData.ShareInterrupt = (ResourceDescriptorTranslated->ShareDisposition == CmResourceShareShared);
-				INFO_(I8042PRT, "Found irq resource: %lu\n", ResourceDescriptor->u.Interrupt.Level);
-				FoundIrq = TRUE;
-				break;
-			}
-			default:
-				WARN_(I8042PRT, "Unknown resource descriptor type 0x%x\n", ResourceDescriptor->Type);
-		}
-	}
-
-	if (!FoundIrq)
-	{
-		WARN_(I8042PRT, "Interrupt resource was not found in allocated resources list\n");
-		return STATUS_INSUFFICIENT_RESOURCES;
-	}
-	else if (DeviceExtension->Type == Keyboard && (!FoundDataPort || !FoundControlPort))
-	{
-		WARN_(I8042PRT, "Some required resources were not found in allocated resources list\n");
-		return STATUS_INSUFFICIENT_RESOURCES;
-	}
-	else if (DeviceExtension->Type == Mouse && (FoundDataPort || FoundControlPort))
-	{
-		WARN_(I8042PRT, "Too much resources were provided in allocated resources list\n");
-		return STATUS_INVALID_PARAMETER;
-	}
-
-	switch (DeviceExtension->Type)
-	{
-		case Keyboard:
-		{
-			RtlCopyMemory(
-				&PortDeviceExtension->KeyboardInterrupt,
-				&InterruptData,
-				sizeof(INTERRUPT_DATA));
-			PortDeviceExtension->Flags |= KEYBOARD_STARTED;
-			Status = StartProcedure(PortDeviceExtension);
-			break;
-		}
-		case Mouse:
-		{
-			RtlCopyMemory(
-				&PortDeviceExtension->MouseInterrupt,
-				&InterruptData,
-				sizeof(INTERRUPT_DATA));
-			PortDeviceExtension->Flags |= MOUSE_STARTED;
-			Status = StartProcedure(PortDeviceExtension);
-			break;
-		}
-		default:
-		{
-			WARN_(I8042PRT, "Unknown FDO type %u\n", DeviceExtension->Type);
-			ASSERT(!(PortDeviceExtension->Flags & KEYBOARD_CONNECTED) || !(PortDeviceExtension->Flags & MOUSE_CONNECTED));
-			Status = STATUS_INVALID_DEVICE_REQUEST;
-		}
-	}
-
-	if (NT_SUCCESS(Status))
-		DeviceExtension->PnpState = dsStarted;
-
-	return Status;
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PCM_RESOURCE_LIST AllocatedResources,
+    IN PCM_RESOURCE_LIST AllocatedResourcesTranslated)
+{
+    PFDO_DEVICE_EXTENSION DeviceExtension;
+    PPORT_DEVICE_EXTENSION PortDeviceExtension;
+    PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptor, ResourceDescriptorTranslated;
+    INTERRUPT_DATA InterruptData;
+    BOOLEAN FoundDataPort = FALSE;
+    BOOLEAN FoundControlPort = FALSE;
+    BOOLEAN FoundIrq = FALSE;
+    ULONG i;
+    NTSTATUS Status;
+
+    TRACE_(I8042PRT, "i8042PnpStartDevice(%p)\n", DeviceObject);
+    DeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+    PortDeviceExtension = DeviceExtension->PortDeviceExtension;
+
+    ASSERT(DeviceExtension->PnpState == dsStopped);
+
+    if (!AllocatedResources)
+    {
+        WARN_(I8042PRT, "No allocated resources sent to driver\n");
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+    if (AllocatedResources->Count != 1)
+    {
+        WARN_(I8042PRT, "Wrong number of allocated resources sent to driver\n");
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+    if (AllocatedResources->List[0].PartialResourceList.Version != 1
+     || AllocatedResources->List[0].PartialResourceList.Revision != 1
+     || AllocatedResourcesTranslated->List[0].PartialResourceList.Version != 1
+     || AllocatedResourcesTranslated->List[0].PartialResourceList.Revision != 1)
+    {
+        WARN_(I8042PRT, "Revision mismatch: %u.%u != 1.1 or %u.%u != 1.1\n",
+            AllocatedResources->List[0].PartialResourceList.Version,
+            AllocatedResources->List[0].PartialResourceList.Revision,
+            AllocatedResourcesTranslated->List[0].PartialResourceList.Version,
+            AllocatedResourcesTranslated->List[0].PartialResourceList.Revision);
+        return STATUS_REVISION_MISMATCH;
+    }
+
+    /* Get Irq and optionally control port and data port */
+    for (i = 0; i < AllocatedResources->List[0].PartialResourceList.Count; i++)
+    {
+        ResourceDescriptor = &AllocatedResources->List[0].PartialResourceList.PartialDescriptors[i];
+        ResourceDescriptorTranslated = &AllocatedResourcesTranslated->List[0].PartialResourceList.PartialDescriptors[i];
+        switch (ResourceDescriptor->Type)
+        {
+            case CmResourceTypePort:
+            {
+                if (ResourceDescriptor->u.Port.Length == 1)
+                {
+                    /* We assume that the first ressource will
+                     * be the control port and the second one
+                     * will be the data port...
+                     */
+                    if (!FoundDataPort)
+                    {
+                        PortDeviceExtension->DataPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
+                        INFO_(I8042PRT, "Found data port: %p\n", PortDeviceExtension->DataPort);
+                        FoundDataPort = TRUE;
+                    }
+                    else if (!FoundControlPort)
+                    {
+                        PortDeviceExtension->ControlPort = ULongToPtr(ResourceDescriptor->u.Port.Start.u.LowPart);
+                        INFO_(I8042PRT, "Found control port: %p\n", PortDeviceExtension->ControlPort);
+                        FoundControlPort = TRUE;
+                    }
+                    else
+                    {
+                        WARN_(I8042PRT, "Too much I/O ranges provided: 0x%lx\n", ResourceDescriptor->u.Port.Length);
+                        return STATUS_INVALID_PARAMETER;
+                    }
+                }
+                else
+                    WARN_(I8042PRT, "Invalid I/O range length: 0x%lx\n", ResourceDescriptor->u.Port.Length);
+                break;
+            }
+            case CmResourceTypeInterrupt:
+            {
+                if (FoundIrq)
+                    return STATUS_INVALID_PARAMETER;
+                InterruptData.Dirql = (KIRQL)ResourceDescriptorTranslated->u.Interrupt.Level;
+                InterruptData.Vector = ResourceDescriptorTranslated->u.Interrupt.Vector;
+                InterruptData.Affinity = ResourceDescriptorTranslated->u.Interrupt.Affinity;
+                if (ResourceDescriptorTranslated->Flags & CM_RESOURCE_INTERRUPT_LATCHED)
+                    InterruptData.InterruptMode = Latched;
+                else
+                    InterruptData.InterruptMode = LevelSensitive;
+                InterruptData.ShareInterrupt = (ResourceDescriptorTranslated->ShareDisposition == CmResourceShareShared);
+                INFO_(I8042PRT, "Found irq resource: %lu\n", ResourceDescriptor->u.Interrupt.Level);
+                FoundIrq = TRUE;
+                break;
+            }
+            default:
+                WARN_(I8042PRT, "Unknown resource descriptor type 0x%x\n", ResourceDescriptor->Type);
+        }
+    }
+
+    if (!FoundIrq)
+    {
+        WARN_(I8042PRT, "Interrupt resource was not found in allocated resources list\n");
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+    else if (DeviceExtension->Type == Keyboard && (!FoundDataPort || !FoundControlPort))
+    {
+        WARN_(I8042PRT, "Some required resources were not found in allocated resources list\n");
+        return STATUS_INSUFFICIENT_RESOURCES;
+    }
+    else if (DeviceExtension->Type == Mouse && (FoundDataPort || FoundControlPort))
+    {
+        WARN_(I8042PRT, "Too much resources were provided in allocated resources list\n");
+        return STATUS_INVALID_PARAMETER;
+    }
+
+    switch (DeviceExtension->Type)
+    {
+        case Keyboard:
+        {
+            RtlCopyMemory(
+                &PortDeviceExtension->KeyboardInterrupt,
+                &InterruptData,
+                sizeof(INTERRUPT_DATA));
+            PortDeviceExtension->Flags |= KEYBOARD_STARTED;
+            Status = StartProcedure(PortDeviceExtension);
+            break;
+        }
+        case Mouse:
+        {
+            RtlCopyMemory(
+                &PortDeviceExtension->MouseInterrupt,
+                &InterruptData,
+                sizeof(INTERRUPT_DATA));
+            PortDeviceExtension->Flags |= MOUSE_STARTED;
+            Status = StartProcedure(PortDeviceExtension);
+            break;
+        }
+        default:
+        {
+            WARN_(I8042PRT, "Unknown FDO type %u\n", DeviceExtension->Type);
+            ASSERT(!(PortDeviceExtension->Flags & KEYBOARD_CONNECTED) || !(PortDeviceExtension->Flags & MOUSE_CONNECTED));
+            Status = STATUS_INVALID_DEVICE_REQUEST;
+        }
+    }
+
+    if (NT_SUCCESS(Status))
+        DeviceExtension->PnpState = dsStarted;
+
+    return Status;
 }
 
 NTSTATUS NTAPI
 i8042Pnp(
-	IN PDEVICE_OBJECT DeviceObject,
-	IN PIRP Irp)
-{
-	PIO_STACK_LOCATION Stack;
-	ULONG MinorFunction;
-	I8042_DEVICE_TYPE DeviceType;
-	ULONG_PTR Information = 0;
-	NTSTATUS Status;
-
-	Stack = IoGetCurrentIrpStackLocation(Irp);
-	MinorFunction = Stack->MinorFunction;
-	DeviceType = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->Type;
-
-	switch (MinorFunction)
-	{
-		case IRP_MN_START_DEVICE: /* 0x00 */
-		{
-			TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
-
-			/* Call lower driver (if any) */
-			if (DeviceType != PhysicalDeviceObject)
-			{
-				Status = ForwardIrpAndWait(DeviceObject, Irp);
-				if (NT_SUCCESS(Status))
-					Status = i8042PnpStartDevice(
-						DeviceObject,
-						Stack->Parameters.StartDevice.AllocatedResources,
-						Stack->Parameters.StartDevice.AllocatedResourcesTranslated);
-			}
-			else
-				Status = STATUS_SUCCESS;
-			break;
-		}
-		case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x07 */
-		{
-			switch (Stack->Parameters.QueryDeviceRelations.Type)
-			{
-				case BusRelations:
-				{
-					PDEVICE_RELATIONS DeviceRelations;
-
-					TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
-					DeviceRelations = ExAllocatePool(PagedPool, sizeof(DEVICE_RELATIONS));
-					if (DeviceRelations)
-					{
-						DeviceRelations->Count = 0;
-						Information = (ULONG_PTR)DeviceRelations;
-						Status = STATUS_SUCCESS;
-					}
-					else
-						Status = STATUS_INSUFFICIENT_RESOURCES;
-					break;
-				}
-				case RemovalRelations:
-				{
-					TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
-					return ForwardIrpAndForget(DeviceObject, Irp);
-				}
-				default:
-					ERR_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
-						Stack->Parameters.QueryDeviceRelations.Type);
-					ASSERT(FALSE);
-					return ForwardIrpAndForget(DeviceObject, Irp);
-			}
-			break;
-		}
-		case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* (optional) 0x0d */
-		{
-			TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
-			/* Nothing to do */
-			Status = Irp->IoStatus.Status;
-			break;
-		}
-		default:
-		{
-			ERR_(I8042PRT, "IRP_MJ_PNP / unknown minor function 0x%x\n", MinorFunction);
-			return ForwardIrpAndForget(DeviceObject, Irp);
-		}
-	}
-
-	Irp->IoStatus.Information = Information;
-	Irp->IoStatus.Status = Status;
-	IoCompleteRequest(Irp, IO_NO_INCREMENT);
-	return Status;
-}
+    IN PDEVICE_OBJECT DeviceObject,
+    IN PIRP Irp)
+{
+    PIO_STACK_LOCATION Stack;
+    ULONG MinorFunction;
+    I8042_DEVICE_TYPE DeviceType;
+    ULONG_PTR Information = 0;
+    NTSTATUS Status;
+
+    Stack = IoGetCurrentIrpStackLocation(Irp);
+    MinorFunction = Stack->MinorFunction;
+    DeviceType = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->Type;
+
+    switch (MinorFunction)
+    {
+        case IRP_MN_START_DEVICE: /* 0x00 */
+        {
+            TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
+
+            /* Call lower driver (if any) */
+            if (DeviceType != PhysicalDeviceObject)
+            {
+                Status = ForwardIrpAndWait(DeviceObject, Irp);
+                if (NT_SUCCESS(Status))
+                    Status = i8042PnpStartDevice(
+                        DeviceObject,
+                        Stack->Parameters.StartDevice.AllocatedResources,
+                        Stack->Parameters.StartDevice.AllocatedResourcesTranslated);
+            }
+            else
+                Status = STATUS_SUCCESS;
+            break;
+        }
+        case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x07 */
+        {
+            switch (Stack->Parameters.QueryDeviceRelations.Type)
+            {
+                case BusRelations:
+                {
+                    PDEVICE_RELATIONS DeviceRelations;
+
+                    TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
+                    DeviceRelations = ExAllocatePool(PagedPool, sizeof(DEVICE_RELATIONS));
+                    if (DeviceRelations)
+                    {
+                        DeviceRelations->Count = 0;
+                        Information = (ULONG_PTR)DeviceRelations;
+                        Status = STATUS_SUCCESS;
+                    }
+                    else
+                        Status = STATUS_INSUFFICIENT_RESOURCES;
+                    break;
+                }
+                case RemovalRelations:
+                {
+                    TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
+                    return ForwardIrpAndForget(DeviceObject, Irp);
+                }
+                default:
+                    ERR_(I8042PRT, "IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
+                        Stack->Parameters.QueryDeviceRelations.Type);
+                    ASSERT(FALSE);
+                    return ForwardIrpAndForget(DeviceObject, Irp);
+            }
+            break;
+        }
+        case IRP_MN_FILTER_RESOURCE_REQUIREMENTS: /* (optional) 0x0d */
+        {
+            TRACE_(I8042PRT, "IRP_MJ_PNP / IRP_MN_FILTER_RESOURCE_REQUIREMENTS\n");
+            /* Nothing to do */
+            Status = Irp->IoStatus.Status;
+            break;
+        }
+        default:
+        {
+            ERR_(I8042PRT, "IRP_MJ_PNP / unknown minor function 0x%x\n", MinorFunction);
+            return ForwardIrpAndForget(DeviceObject, Irp);
+        }
+    }
+
+    Irp->IoStatus.Information = Information;
+    Irp->IoStatus.Status = Status;
+    IoCompleteRequest(Irp, IO_NO_INCREMENT);
+    return Status;
+}




More information about the Ros-diffs mailing list