Code cleanup:
authorHervé Poussineau <hpoussin@reactos.org>
Sat, 6 May 2006 14:36:52 +0000 (14:36 +0000)
committerHervé Poussineau <hpoussin@reactos.org>
Sat, 6 May 2006 14:36:52 +0000 (14:36 +0000)
- Move IRP_MJ_CREATE, IRP_MJ_CLOSE and IRP_MJ_CLEANUP to fdo.c and pdo.c
- Implement IRP_MJ_PNP / IRP_MN_QUERY_BUS_INFORMATION for PDOs
- IRP_MJ_POWER now returns STATUS_NOT_SUPPORTED instead of STATUS_SUCCESS
- Replace STDCALL by NTAPI
- Delete useless white space

=> USB keyboard and mice are working, even if they require one reboot after the installation of the USB controller

svn path=/trunk/; revision=21812

reactos/drivers/usb/miniport/common/cleanup.c [deleted file]
reactos/drivers/usb/miniport/common/close.c [deleted file]
reactos/drivers/usb/miniport/common/common.rbuild
reactos/drivers/usb/miniport/common/create.c [deleted file]
reactos/drivers/usb/miniport/common/fdo.c
reactos/drivers/usb/miniport/common/main.c
reactos/drivers/usb/miniport/common/misc.c
reactos/drivers/usb/miniport/common/pdo.c
reactos/drivers/usb/miniport/common/usbcommon.h

diff --git a/reactos/drivers/usb/miniport/common/cleanup.c b/reactos/drivers/usb/miniport/common/cleanup.c
deleted file mode 100644 (file)
index 57b5534..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/cleanup.c
- * PURPOSE:         IRP_MJ_CLEANUP operations
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org)
- */
-
-#define NDEBUG
-#include <debug.h>
-
-#include "usbcommon.h"
-
-NTSTATUS STDCALL
-UsbMpCleanup(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp)
-{
-       DPRINT("USBMP: IRP_MJ_CLEANUP\n");
-
-       Irp->IoStatus.Information = 0;
-       Irp->IoStatus.Status = STATUS_SUCCESS;
-       IoCompleteRequest(Irp, IO_NO_INCREMENT);
-       return STATUS_SUCCESS;
-}
diff --git a/reactos/drivers/usb/miniport/common/close.c b/reactos/drivers/usb/miniport/common/close.c
deleted file mode 100644 (file)
index a9af428..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/close.c
- * PURPOSE:         IRP_MJ_CLOSE operations
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org)
- */
-
-#define NDEBUG
-#include <debug.h>
-
-#include "usbcommon.h"
-
-NTSTATUS STDCALL
-UsbMpClose(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp)
-{
-       PUSBMP_DEVICE_EXTENSION pDeviceExtension;
-
-       DPRINT("USBMP: IRP_MJ_CLOSE\n");
-       pDeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-       InterlockedDecrement((PLONG)&pDeviceExtension->DeviceOpened);
-
-       Irp->IoStatus.Information = 0;
-       Irp->IoStatus.Status = STATUS_SUCCESS;
-       IoCompleteRequest(Irp, IO_NO_INCREMENT);
-       return STATUS_SUCCESS;
-}
index 163e15c..715d2dc 100644 (file)
@@ -2,9 +2,6 @@
        <define name="__USE_W32API" />
        <include>../linux</include>
        <include base="usbport">.</include>
-       <file>cleanup.c</file>
-       <file>close.c</file>
-       <file>create.c</file>
        <file>fdo.c</file>
        <file>main.c</file>
        <file>misc.c</file>
diff --git a/reactos/drivers/usb/miniport/common/create.c b/reactos/drivers/usb/miniport/common/create.c
deleted file mode 100644 (file)
index 908fb9d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/create.c
- * PURPOSE:         IRP_MJ_CREATE operations
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org)
- */
-
-#define NDEBUG
-#include <debug.h>
-
-#include "usbcommon.h"
-
-NTSTATUS STDCALL
-UsbMpCreate(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp)
-{
-       PIO_STACK_LOCATION Stack;
-       PUSBMP_DEVICE_EXTENSION DeviceExtension;
-       NTSTATUS Status;
-
-       DPRINT("USBMP: IRP_MJ_CREATE\n");
-       Stack = IoGetCurrentIrpStackLocation(Irp);
-       DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-
-       if (Stack->Parameters.Create.Options & FILE_DIRECTORY_FILE)
-       {
-               CHECKPOINT;
-               Status = STATUS_NOT_A_DIRECTORY;
-               goto ByeBye;
-       }
-
-       InterlockedIncrement((PLONG)&DeviceExtension->DeviceOpened);
-       Status = STATUS_SUCCESS;
-
-ByeBye:
-       Irp->IoStatus.Status = Status;
-       Irp->IoStatus.Information = 0;
-       IoCompleteRequest(Irp, IO_NO_INCREMENT);
-       return Status;
-}
index ed642ce..ff0c4aa 100644 (file)
@@ -1,11 +1,10 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/fdo.c
- * PURPOSE:         IRP_MJ_PNP/IRP_MJ_DEVICE_CONTROL operations for FDOs
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org),
- *                  James Tabor (jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net)
+ * PROJECT:     ReactOS USB miniport driver (Cromwell type)
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        drivers/usb/miniport/common/fdo.c
+ * PURPOSE:     Operations on FDOs
+ * PROGRAMMERS: Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
+ *              Copyright James Tabor (jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net)
  */
 
 #define NDEBUG
@@ -48,7 +47,67 @@ UsbMpGetUserBuffers(
        }
 }
 
-NTSTATUS STDCALL
+NTSTATUS
+UsbMpFdoCreate(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       PIO_STACK_LOCATION Stack;
+       PUSBMP_DEVICE_EXTENSION DeviceExtension;
+       NTSTATUS Status;
+
+       DPRINT("IRP_MJ_CREATE\n");
+       Stack = IoGetCurrentIrpStackLocation(Irp);
+       DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+
+       if (Stack->Parameters.Create.Options & FILE_DIRECTORY_FILE)
+       {
+               CHECKPOINT;
+               Status = STATUS_NOT_A_DIRECTORY;
+               goto ByeBye;
+       }
+
+       InterlockedIncrement((PLONG)&DeviceExtension->DeviceOpened);
+       Status = STATUS_SUCCESS;
+
+ByeBye:
+       Irp->IoStatus.Status = Status;
+       Irp->IoStatus.Information = 0;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return Status;
+}
+
+NTSTATUS
+UsbMpFdoClose(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       PUSBMP_DEVICE_EXTENSION pDeviceExtension;
+
+       DPRINT("IRP_MJ_CLOSE\n");
+       pDeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
+       InterlockedDecrement((PLONG)&pDeviceExtension->DeviceOpened);
+
+       Irp->IoStatus.Information = 0;
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return STATUS_SUCCESS;
+}
+
+NTSTATUS
+UsbMpFdoCleanup(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       DPRINT("IRP_MJ_CLEANUP\n");
+
+       Irp->IoStatus.Information = 0;
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return STATUS_SUCCESS;
+}
+
+static NTSTATUS
 UsbMpFdoStartDevice(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
@@ -136,9 +195,9 @@ UsbMpFdoStartDevice(
                        }
                }
        }
-       
+
        /* Print assigned resources */
-       DPRINT("USBMP: Interrupt Vector 0x%lx, %S base 0x%lx, Length 0x%lx\n",
+       DPRINT("Interrupt Vector 0x%lx, %S base 0x%lx, Length 0x%lx\n",
                DeviceExtension->InterruptVector,
                ((struct hc_driver *)pci_ids->driver_data)->flags & HCD_MEMORY ? L"Memory" : L"I/O",
                DeviceExtension->BaseAddress,
@@ -155,11 +214,11 @@ UsbMpFdoStartDevice(
 
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoGetDeviceProperty DevicePropertyBusNumber failed\n");
+               DPRINT1("IoGetDeviceProperty DevicePropertyBusNumber failed\n");
                DeviceExtension->SystemIoBusNumber = 0;
        }
 
-       DPRINT("USBMP: Busnumber %d\n", DeviceExtension->SystemIoBusNumber);
+       DPRINT("Busnumber %d\n", DeviceExtension->SystemIoBusNumber);
 
        /* Init wrapper with this object */
        return InitLinuxWrapper(DeviceObject);
@@ -173,9 +232,9 @@ UsbMpFdoQueryBusRelations(
        PUSBMP_DEVICE_EXTENSION DeviceExtension;
        PDEVICE_RELATIONS DeviceRelations;
        NTSTATUS Status = STATUS_SUCCESS;
-       
+
        DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-       
+
        /* Handling this IRP is easy, as we only
         * have one child: the root hub
         */
@@ -184,18 +243,18 @@ UsbMpFdoQueryBusRelations(
                sizeof(DEVICE_RELATIONS));
        if (!DeviceRelations)
                return STATUS_INSUFFICIENT_RESOURCES;
-       
+
        /* Fill returned structure */
        DeviceRelations->Count = 1;
        ObReferenceObject(DeviceExtension->RootHubPdo);
        DeviceRelations->Objects[0] = DeviceExtension->RootHubPdo;
-       
+
        *pDeviceRelations = DeviceRelations;
        return Status;
 }
 
-NTSTATUS STDCALL
-UsbMpPnpFdo(
+NTSTATUS
+UsbMpFdoPnp(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
 {
@@ -203,7 +262,7 @@ UsbMpPnpFdo(
        NTSTATUS Status;
        ULONG MinorFunction;
        ULONG_PTR Information = 0;
-       
+
        IrpSp = IoGetCurrentIrpStackLocation(Irp);
        MinorFunction = IrpSp->MinorFunction;
 
@@ -255,18 +314,18 @@ UsbMpPnpFdo(
                                case BusRelations:
                                {
                                        PDEVICE_RELATIONS DeviceRelations = NULL;
-                                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
+                                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
                                        Status = UsbMpFdoQueryBusRelations(DeviceObject, &DeviceRelations);
                                        Information = (ULONG_PTR)DeviceRelations;
                                        break;
                                }
                                case RemovalRelations:
                                {
-                                       DPRINT1("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
+                                       DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
                                        return ForwardIrpAndForget(DeviceObject, Irp);
                                }
                                default:
-                                       DPRINT1("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
+                                       DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
                                                IrpSp->Parameters.QueryDeviceRelations.Type);
                                        return ForwardIrpAndForget(DeviceObject, Irp);
                        }
@@ -275,7 +334,7 @@ UsbMpPnpFdo(
 
                default:
                {
-                       DPRINT1("USBMP: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction);
+                       DPRINT1("IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction);
                        return ForwardIrpAndForget(DeviceObject, Irp);
                }
        }
@@ -286,7 +345,7 @@ UsbMpPnpFdo(
 }
 
 NTSTATUS
-UsbMpDeviceControlFdo(
+UsbMpFdoDeviceControl(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
 {
@@ -298,7 +357,7 @@ UsbMpDeviceControlFdo(
        PVOID BufferIn, BufferOut;
        NTSTATUS Status;
 
-       DPRINT("USBMP: UsbDeviceControlFdo() called\n");
+       DPRINT("UsbDeviceControlFdo() called\n");
 
        Stack = IoGetCurrentIrpStackLocation(Irp);
        LengthIn = Stack->Parameters.DeviceIoControl.InputBufferLength;
@@ -311,7 +370,7 @@ UsbMpDeviceControlFdo(
        {
                case IOCTL_GET_HCD_DRIVERKEY_NAME:
                {
-                       DPRINT("USBMP: IOCTL_GET_HCD_DRIVERKEY_NAME\n");
+                       DPRINT("IOCTL_GET_HCD_DRIVERKEY_NAME\n");
                        if (LengthOut < sizeof(USB_HCD_DRIVERKEY_NAME))
                                Status = STATUS_BUFFER_TOO_SMALL;
                        else if (BufferOut == NULL)
@@ -338,7 +397,7 @@ UsbMpDeviceControlFdo(
                }
                case IOCTL_USB_GET_ROOT_HUB_NAME:
                {
-                       DPRINT("USBMP: IOCTL_USB_GET_ROOT_HUB_NAME\n");
+                       DPRINT("IOCTL_USB_GET_ROOT_HUB_NAME\n");
                        if (LengthOut < sizeof(USB_ROOT_HUB_NAME))
                                Status = STATUS_BUFFER_TOO_SMALL;
                        else if (BufferOut == NULL)
@@ -360,7 +419,7 @@ UsbMpDeviceControlFdo(
                                                RootHubInterfaceName->Buffer,
                                                RootHubInterfaceName->Length);
                                        StringDescriptor->RootHubName[RootHubInterfaceName->Length / sizeof(WCHAR)] = UNICODE_NULL;
-                                       DPRINT("USBMP: IOCTL_USB_GET_ROOT_HUB_NAME returns '%S'\n", StringDescriptor->RootHubName);
+                                       DPRINT("IOCTL_USB_GET_ROOT_HUB_NAME returns '%S'\n", StringDescriptor->RootHubName);
                                        Information = StringDescriptor->ActualLength;
                                }
                                else
@@ -373,7 +432,7 @@ UsbMpDeviceControlFdo(
                default:
                {
                        /* Pass Irp to lower driver */
-                       DPRINT1("USBMP: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode);
+                       DPRINT1("Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode);
                        IoSkipCurrentIrpStackLocation(Irp);
                        return IoCallDriver(DeviceExtension->NextDeviceObject, Irp);
                }
@@ -384,218 +443,3 @@ UsbMpDeviceControlFdo(
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return Status;
 }
-
-NTSTATUS
-UsbMpInternalDeviceControlFdo(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp)
-{
-       NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
-
-       DPRINT("USBMP: UsbMpDeviceInternalControlFdo(DO %p, code 0x%lx) called\n",
-               DeviceObject,
-               IoGetCurrentIrpStackLocation(Irp)->Parameters.DeviceIoControl.IoControlCode);
-
-       if (DeviceObject == KeyboardFdo)
-       {
-               // it's keyboard's IOCTL
-               PIO_STACK_LOCATION Stk;
-
-               Irp->IoStatus.Information = 0;
-               Stk = IoGetCurrentIrpStackLocation(Irp);
-
-               switch (Stk->Parameters.DeviceIoControl.IoControlCode)
-               {
-                       case IOCTL_INTERNAL_KEYBOARD_CONNECT:
-                               DPRINT("USBMP: IOCTL_INTERNAL_KEYBOARD_CONNECT\n");
-                               if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) {
-                                       DPRINT1("USBMP: Keyboard IOCTL_INTERNAL_KEYBOARD_CONNECT "
-                                                       "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
-                                       goto intcontfailure;
-                               }
-
-                               RtlCopyMemory(&KbdClassInformation,
-                                       Stk->Parameters.DeviceIoControl.Type3InputBuffer,
-                                       sizeof(CONNECT_DATA));
-       
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-
-               case IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER:
-                       DPRINT("USBMP: IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER\n");
-                       if (Stk->Parameters.DeviceIoControl.InputBufferLength < 1) {
-                               Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
-                               goto intcontfailure;
-                       }
-/*                     if (!DevExt->KeyboardInterruptObject) {
-                               Irp->IoStatus.Status = STATUS_DEVICE_NOT_READY;
-                               goto intcontfailure;
-                       }*/
-
-                       Irp->IoStatus.Status = STATUS_SUCCESS;
-                       break;
-               case IOCTL_KEYBOARD_QUERY_ATTRIBUTES:
-                       DPRINT("USBMP: IOCTL_KEYBOARD_QUERY_ATTRIBUTES\n");
-                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
-                               sizeof(KEYBOARD_ATTRIBUTES)) {
-                                       DPRINT("USBMP: Keyboard IOCTL_KEYBOARD_QUERY_ATTRIBUTES "
-                                               "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
-                                       &DevExt->KeyboardAttributes,
-                                       sizeof(KEYBOARD_ATTRIBUTES));*/
-
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-               case IOCTL_KEYBOARD_QUERY_INDICATORS:
-                       DPRINT("USBMP: IOCTL_KEYBOARD_QUERY_INDICATORS\n");
-                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
-                               sizeof(KEYBOARD_INDICATOR_PARAMETERS)) {
-                                       DPRINT("USBMP: Keyboard IOCTL_KEYBOARD_QUERY_INDICATORS "
-                                               "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
-                                       &DevExt->KeyboardIndicators,
-                                       sizeof(KEYBOARD_INDICATOR_PARAMETERS));*/
-
-                               Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
-                               break;
-               case IOCTL_KEYBOARD_QUERY_TYPEMATIC:
-                       DPRINT("USBMP: IOCTL_KEYBOARD_QUERY_TYPEMATIC\n");
-                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
-                               sizeof(KEYBOARD_TYPEMATIC_PARAMETERS)) {
-                                       DPRINT("USBMP: Keyboard IOCTL_KEYBOARD_QUERY_TYPEMATIC  "
-                                               "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
-                                       &DevExt->KeyboardTypematic,
-                                       sizeof(KEYBOARD_TYPEMATIC_PARAMETERS));*/
-
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-               case IOCTL_KEYBOARD_SET_INDICATORS:
-                       DPRINT("USBMP: IOCTL_KEYBOARD_SET_INDICATORS\n");
-                       if (Stk->Parameters.DeviceIoControl.InputBufferLength <
-                               sizeof(KEYBOARD_INDICATOR_PARAMETERS)) {
-                                       DPRINT("USBMP: Keyboard IOCTL_KEYBOARD_SET_INDICTATORS  "
-                                               "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-
-                               /*RtlCopyMemory(&DevExt->KeyboardIndicators,
-                                       Irp->AssociatedIrp.SystemBuffer,
-                                       sizeof(KEYBOARD_INDICATOR_PARAMETERS));*/
-
-                               //DPRINT("%x\n", DevExt->KeyboardIndicators.LedFlags);
-
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-               case IOCTL_KEYBOARD_SET_TYPEMATIC:
-                       DPRINT("USBMP: IOCTL_KEYBOARD_SET_TYPEMATIC\n");
-                       if (Stk->Parameters.DeviceIoControl.InputBufferLength <
-                               sizeof(KEYBOARD_TYPEMATIC_PARAMETERS)) {
-                                       DPRINT("USBMP: Keyboard IOCTL_KEYBOARD_SET_TYPEMATIC "
-                                               "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-
-                               /*RtlCopyMemory(&DevExt->KeyboardTypematic,
-                                       Irp->AssociatedIrp.SystemBuffer,
-                                       sizeof(KEYBOARD_TYPEMATIC_PARAMETERS));*/
-
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-               case IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION:
-                       /* We should check the UnitID, but it's kind of pointless as
-                       * all keyboards are supposed to have the same one
-                       */
-#if 0
-                       DPRINT("USBMP: IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION\n");
-                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
-                               sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION)) {
-                                       DPRINT("USBMP: IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION:      "
-                                               "invalid buffer size (expected)\n");
-                                       /* It's to query the buffer size */
-                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
-                                       goto intcontfailure;
-                               }
-                               Irp->IoStatus.Information =
-                                       sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION);
-#endif
-                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
-                                       &IndicatorTranslation,
-                                       sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION));*/
-
-                               Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
-                               break;
-               case IOCTL_INTERNAL_I8042_HOOK_KEYBOARD:
-                       /* Nothing to do here */
-                       Irp->IoStatus.Status = STATUS_SUCCESS;
-                       break;
-               default:
-                       Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
-                       break;
-               }
-
-       intcontfailure:
-                       Status = Irp->IoStatus.Status;
-       }
-       else if (DeviceObject == MouseFdo)
-       {
-               // it's mouse's IOCTL
-               PIO_STACK_LOCATION Stk;
-
-               Irp->IoStatus.Information = 0;
-               Stk = IoGetCurrentIrpStackLocation(Irp);
-
-               switch (Stk->Parameters.DeviceIoControl.IoControlCode)
-               {
-                       case IOCTL_INTERNAL_MOUSE_CONNECT:
-                               DPRINT("USBMP: IOCTL_INTERNAL_MOUSE_CONNECT\n");
-                               if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) {
-                                       DPRINT1("USBMP: IOCTL_INTERNAL_MOUSE_CONNECT "
-                                                       "invalid buffer size\n");
-                                       Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
-                                       goto intcontfailure2;
-                               }
-
-                               RtlCopyMemory(&MouseClassInformation,
-                                       Stk->Parameters.DeviceIoControl.Type3InputBuffer,
-                                       sizeof(CONNECT_DATA));
-       
-                               Irp->IoStatus.Status = STATUS_SUCCESS;
-                               break;
-
-               default:
-                       Irp->IoStatus.Status = STATUS_SUCCESS;//STATUS_INVALID_DEVICE_REQUEST;
-                       break;
-               }
-       intcontfailure2:
-               Status = Irp->IoStatus.Status;
-       }
-       else
-       {
-               DPRINT("USBMP: We got IOCTL for UsbCore\n");
-               IoCompleteRequest(Irp, IO_NO_INCREMENT);
-               return STATUS_SUCCESS;
-       }
-
-
-       if (Status == STATUS_INVALID_DEVICE_REQUEST) {
-               DPRINT1("USBMP: Invalid internal device request!\n");
-       }
-
-       if (Status != STATUS_PENDING)
-               IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
-       return Status;
-}
index e42f795..e85401c 100644 (file)
@@ -1,11 +1,11 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/main.c
- * PURPOSE:         Driver entry
- *
- * PROGRAMMERS:     Aleksey Bragin (aleksey@reactos.com)
- *                  Hervé Poussineau (hpoussin@reactos.org),
+ * PROJECT:     ReactOS USB miniport driver (Cromwell type)
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        drivers/usb/miniport/common/main.c
+ * PURPOSE:     Driver entry
+ * PROGRAMMERS: Copyright Aleksey Bragin (aleksey@reactos.org)
+ *              Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
+ *              Copyright James Tabor (jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net)
  *
  * Some parts of code are inspired (or even just copied) from
  * ReactOS Videoport driver (drivers/video/videoprt)
@@ -33,7 +33,7 @@ CreateRootHubPdo(
        PUSBMP_DEVICE_EXTENSION DeviceExtension;
        NTSTATUS Status;
 
-       DPRINT("USBMP: CreateRootHubPdo()\n");
+       DPRINT("CreateRootHubPdo()\n");
 
        Status = IoCreateDevice(
                DriverObject,
@@ -45,7 +45,7 @@ CreateRootHubPdo(
                &Pdo);
        if (!NT_SUCCESS(Status))
        {
-               DPRINT("USBMP: IoCreateDevice() call failed with status 0x%08x\n", Status);
+               DPRINT("IoCreateDevice() call failed with status 0x%08x\n", Status);
                return Status;
        }
 
@@ -125,7 +125,7 @@ AddDevice_Keyboard(
        Status = AddRegistryEntry(L"KeyboardPort", &DeviceName, L"REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Services\\usbport");
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: AddRegistryEntry() for usb keyboard driver failed with status 0x%08lx\n", Status);
+               DPRINT1("AddRegistryEntry() for usb keyboard driver failed with status 0x%08lx\n", Status);
                return Status;
        }
 
@@ -139,15 +139,15 @@ AddDevice_Keyboard(
 
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoCreateDevice() for usb keyboard driver failed with status 0x%08lx\n", Status);
+               DPRINT1("IoCreateDevice() for usb keyboard driver failed with status 0x%08lx\n", Status);
                return Status;
        }
        DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
        RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
-       DeviceExtension->IsFDO = TRUE;
+       DeviceExtension->IsFDO = FALSE;
        KeyboardFdo = Fdo;
        Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
-       DPRINT("USBMP: Created keyboard Fdo: %p\n", Fdo);
+       DPRINT("Created keyboard Fdo: %p\n", Fdo);
 
        return STATUS_SUCCESS;
 }
@@ -165,7 +165,7 @@ AddDevice_Mouse(
        Status = AddRegistryEntry(L"PointerPort", &DeviceName, L"REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\Services\\usbport");
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: AddRegistryEntry() for usb mouse driver failed with status 0x%08lx\n", Status);
+               DPRINT1("AddRegistryEntry() for usb mouse driver failed with status 0x%08lx\n", Status);
                return Status;
        }
 
@@ -179,20 +179,20 @@ AddDevice_Mouse(
 
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoCreateDevice() for usb mouse driver failed with status 0x%08lx\n", Status);
+               DPRINT1("IoCreateDevice() for usb mouse driver failed with status 0x%08lx\n", Status);
                return Status;
        }
        DeviceExtension = (PUSBMP_DEVICE_EXTENSION)Fdo->DeviceExtension;
        RtlZeroMemory(DeviceExtension, sizeof(USBMP_DEVICE_EXTENSION));
-       DeviceExtension->IsFDO = TRUE;
+       DeviceExtension->IsFDO = FALSE;
        MouseFdo = Fdo;
        Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
-       DPRINT("USBMP: Created mouse Fdo: %p\n", Fdo);
+       DPRINT("Created mouse Fdo: %p\n", Fdo);
 
        return STATUS_SUCCESS;
 }
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 AddDevice(
        IN PDRIVER_OBJECT DriverObject,
        IN PDEVICE_OBJECT pdo)
@@ -220,7 +220,7 @@ AddDevice(
 
                if (!NT_SUCCESS(Status))
                {
-                       DPRINT1("USBMP: Allocating DriverObjectExtension failed.\n");
+                       DPRINT1("Allocating DriverObjectExtension failed.\n");
                        goto cleanup;
                }
        }
@@ -259,7 +259,7 @@ AddDevice(
 
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoCreateDevice call failed with status 0x%08lx\n", Status);
+               DPRINT1("IoCreateDevice call failed with status 0x%08lx\n", Status);
                goto cleanup;
        }
 
@@ -271,7 +271,7 @@ AddDevice(
        Status = CreateRootHubPdo(DriverObject, fdo, &DeviceExtension->RootHubPdo);
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: CreateRootHubPdo() failed with status 0x%08lx\n", Status);
+               DPRINT1("CreateRootHubPdo() failed with status 0x%08lx\n", Status);
                goto cleanup;
        }
 
@@ -283,7 +283,7 @@ AddDevice(
                &DeviceExtension->HcdInterfaceName);
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status);
+               DPRINT1("IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status);
                goto cleanup;
        }
 
@@ -305,7 +305,7 @@ AddDevice(
        Status = IoCreateSymbolicLink(&LinkDeviceName, &DeviceName);
        if (!NT_SUCCESS(Status))
        {
-               DPRINT1("USBMP: IoCreateSymbolicLink() call failed with status 0x%08x\n", Status);
+               DPRINT1("IoCreateSymbolicLink() call failed with status 0x%08x\n", Status);
                goto cleanup;
        }
 
@@ -319,7 +319,7 @@ cleanup:
        return Status;
 }
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 IrpStub(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
@@ -328,7 +328,7 @@ IrpStub(
 
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
        {
-               DPRINT1("USBMP: FDO stub for major function 0x%lx\n",
+               DPRINT1("FDO stub for major function 0x%lx\n",
                        IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
                ASSERT(FALSE);
                return ForwardIrpAndForget(DeviceObject, Irp);
@@ -338,7 +338,7 @@ IrpStub(
                /* We can't forward request to the lower driver, because
                 * we are a Pdo, so we don't have lower driver...
                 */
-               DPRINT1("USBMP: PDO stub for major function 0x%lx\n",
+               DPRINT1("PDO stub for major function 0x%lx\n",
                        IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
                ASSERT(FALSE);
        }
@@ -348,74 +348,74 @@ IrpStub(
        return Status;
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpCreate(DeviceObject, Irp);
+               return UsbMpFdoCreate(DeviceObject, Irp);
        else
-               return IrpStub(DeviceObject, Irp);
+               return UsbMpPdoCreate(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchClose(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpClose(DeviceObject, Irp);
+               return UsbMpFdoClose(DeviceObject, Irp);
        else
-               return IrpStub(DeviceObject, Irp);
+               return UsbMpPdoClose(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpCleanup(DeviceObject, Irp);
+               return UsbMpFdoCleanup(DeviceObject, Irp);
        else
-               return IrpStub(DeviceObject, Irp);
+               return UsbMpPdoCleanup(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpDeviceControlFdo(DeviceObject, Irp);
+               return UsbMpFdoDeviceControl(DeviceObject, Irp);
        else
-               return UsbMpDeviceControlPdo(DeviceObject, Irp);
+               return UsbMpPdoDeviceControl(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchInternalDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpInternalDeviceControlFdo(DeviceObject, Irp);
-       else
                return IrpStub(DeviceObject, Irp);
+       else
+               return UsbMpPdoInternalDeviceControl(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL
+static NTSTATUS NTAPI
 DispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
        if (((PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->IsFDO)
-               return UsbMpPnpFdo(DeviceObject, Irp);
+               return UsbMpFdoPnp(DeviceObject, Irp);
        else
-               return UsbMpPnpPdo(DeviceObject, Irp);
+               return UsbMpPdoPnp(DeviceObject, Irp);
 }
 
-static NTSTATUS STDCALL 
+static NTSTATUS NTAPI 
 DispatchPower(PDEVICE_OBJECT fido, PIRP Irp)
 {
-       DPRINT1("USBMP: IRP_MJ_POWER unimplemented\n");
+       DPRINT1("IRP_MJ_POWER unimplemented\n");
        Irp->IoStatus.Information = 0;
-       Irp->IoStatus.Status = STATUS_SUCCESS;
+       Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
-       return STATUS_SUCCESS;
+       return STATUS_NOT_SUPPORTED;
 }
 
 /*
  * Standard DriverEntry method.
  */
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegPath)
 {
        USBPORT_INTERFACE UsbPortInterface;
index 93d2600..475beb0 100644 (file)
@@ -1,10 +1,9 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/misc.c
- * PURPOSE:         Misceallenous operations
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org),
+ * PROJECT:     ReactOS USB miniport driver (Cromwell type)
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        drivers/usb/miniport/common/misc.c
+ * PURPOSE:     Misceallenous operations
+ * PROGRAMMERS: Copyright 2005 Hervé Poussineau (hpoussin@reactos.org)
  */
 
 #define NDEBUG
@@ -13,7 +12,7 @@
 #include "usbcommon.h"
 #include <stdarg.h>
 
-NTSTATUS STDCALL
+NTSTATUS NTAPI
 ForwardIrpAndWaitCompletion(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp,
@@ -38,7 +37,7 @@ ForwardIrpAndWait(
        KeInitializeEvent(&Event, NotificationEvent, FALSE);
        IoCopyCurrentIrpStackLocationToNext(Irp);
 
-       DPRINT("USBMP: Calling lower device %p [%wZ]\n", LowerDevice, &LowerDevice->DriverObject->DriverName);
+       DPRINT("Calling lower device %p [%wZ]\n", LowerDevice, &LowerDevice->DriverObject->DriverName);
        IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE);
 
        Status = IoCallDriver(LowerDevice, Irp);
@@ -52,7 +51,7 @@ ForwardIrpAndWait(
        return Status;
 }
 
-NTSTATUS STDCALL
+NTSTATUS
 ForwardIrpAndForget(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
index abdda03..e4854fc 100644 (file)
@@ -1,43 +1,85 @@
 /*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS USB miniport driver (Cromwell type)
- * FILE:            drivers/usb/miniport/common/pdo.c
- * PURPOSE:         IRP_MJ_PNP/IRP_MJ_DEVICE_CONTROL operations for PDOs
- *
- * PROGRAMMERS:     Hervé Poussineau (hpoussin@reactos.org),
- *                  James Tabor (jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net)
+ * PROJECT:     ReactOS USB miniport driver (Cromwell type)
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        drivers/usb/miniport/common/pdo.c
+ * PURPOSE:     Operations on PDOs
+ * PROGRAMMERS: Copyright 2005-2006 Hervé Poussineau (hpoussin@reactos.org)
+ *              Copyright James Tabor (jimtabor@adsl-64-217-116-74.dsl.hstntx.swbell.net)
  */
 
 #define NDEBUG
 #include <debug.h>
 
 #include "usbcommon.h"
+#include <wdmguid.h>
 
 extern struct usb_driver hub_driver;
 
 #define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003)
 
 NTSTATUS
-UsbMpDeviceControlPdo(
+UsbMpPdoCreate(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       DPRINT("IRP_MJ_CREATE\n");
+
+       /* Nothing to do */
+       Irp->IoStatus.Information = 0;
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return STATUS_SUCCESS;
+}
+
+NTSTATUS
+UsbMpPdoClose(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       DPRINT("IRP_MJ_CLOSE\n");
+
+       /* Nothing to do */
+       Irp->IoStatus.Information = 0;
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return STATUS_SUCCESS;
+}
+
+NTSTATUS
+UsbMpPdoCleanup(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       DPRINT("IRP_MJ_CLEANUP\n");
+
+       /* Nothing to do */
+       Irp->IoStatus.Information = 0;
+       Irp->IoStatus.Status = STATUS_SUCCESS;
+       IoCompleteRequest(Irp, IO_NO_INCREMENT);
+       return STATUS_SUCCESS;
+}
+
+NTSTATUS
+UsbMpPdoDeviceControl(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
 {
        PIO_STACK_LOCATION Stack;
        ULONG_PTR Information = 0;
        NTSTATUS Status;
-       
-       DPRINT("USBMP: UsbMpDeviceControlPdo() called\n");
-       
+
+       DPRINT("UsbMpDeviceControlPdo() called\n");
+
        Stack = IoGetCurrentIrpStackLocation(Irp);
        Status = Irp->IoStatus.Status;
-       
+
        switch (Stack->Parameters.DeviceIoControl.IoControlCode)
        {
                case IOCTL_INTERNAL_USB_GET_ROOT_USB_DEVICE:
                {
                        PUSBMP_DEVICE_EXTENSION DeviceExtension;
-                       
-                       DPRINT("USBMP: IOCTL_INTERNAL_USB_GET_ROOT_USB_DEVICE\n");
+
+                       DPRINT("IOCTL_INTERNAL_USB_GET_ROOT_USB_DEVICE\n");
                        if (Irp->AssociatedIrp.SystemBuffer == NULL
                                || Stack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(PVOID))
                        {
@@ -48,7 +90,7 @@ UsbMpDeviceControlPdo(
                                PVOID* pRootHubPointer;
                                DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
                                DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceExtension->FunctionalDeviceObject->DeviceExtension;
-                               
+
                                pRootHubPointer = (PVOID*)Irp->AssociatedIrp.SystemBuffer;
                                *pRootHubPointer = ((struct usb_hcd*)DeviceExtension->pdev->data)->self.root_hub;
                                Information = sizeof(PVOID);
@@ -58,12 +100,12 @@ UsbMpDeviceControlPdo(
                }
                default:
                {
-                       DPRINT1("USBMP: Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode);
+                       DPRINT1("Unknown IOCTL code 0x%lx\n", Stack->Parameters.DeviceIoControl.IoControlCode);
                        Information = Irp->IoStatus.Information;
                        Status = Irp->IoStatus.Status;
                }
        }
-       
+
        Irp->IoStatus.Information = Information;
        Irp->IoStatus.Status = Status;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
@@ -71,7 +113,7 @@ UsbMpDeviceControlPdo(
 }
 
 static NTSTATUS
-UsbMpPdoQueryId(
+QueryId(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp,
        OUT ULONG_PTR* Information)
@@ -93,7 +135,7 @@ UsbMpPdoQueryId(
        {
                case BusQueryDeviceID:
                {
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryDeviceID\n");
                        if (roothub->speed == USB_SPEED_LOW || roothub->speed == USB_SPEED_FULL)
                                RtlInitUnicodeString(&SourceString, L"USB\\ROOT_HUB"); /* USB 1.1 */
                        else
@@ -109,7 +151,7 @@ UsbMpPdoQueryId(
                        ULONG ret;
                        PDEVICE_OBJECT Pdo;
 
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryHardwareIDs\n");
 
                        Pdo = DeviceExtension->PhysicalDeviceObject;
                        Status = IoGetDeviceProperty(
@@ -120,7 +162,7 @@ UsbMpPdoQueryId(
                                &ret);
                        if (!NT_SUCCESS(Status))
                        {
-                               DPRINT("USBMP: IoGetDeviceProperty() failed with status 0x%08lx\n", Status);
+                               DPRINT("IoGetDeviceProperty() failed with status 0x%08lx\n", Status);
                                break;
                        }
 
@@ -132,7 +174,7 @@ UsbMpPdoQueryId(
                                &ret);
                        if (!NT_SUCCESS(Status))
                        {
-                               DPRINT("USBMP: IoGetDeviceProperty() failed with status 0x%08lx\n", Status);
+                               DPRINT("IoGetDeviceProperty() failed with status 0x%08lx\n", Status);
                                break;
                        }
 
@@ -144,7 +186,7 @@ UsbMpPdoQueryId(
                                PCI_COMMON_HDR_LENGTH);
                        if (ret != PCI_COMMON_HDR_LENGTH)
                        {
-                               DPRINT("USBMP: HalGetBusDataByOffset() failed (ret = %ld)\n", ret);
+                               DPRINT("HalGetBusDataByOffset() failed (ret = %ld)\n", ret);
                                Status = STATUS_IO_DEVICE_ERROR;
                                break;
                        }
@@ -163,18 +205,18 @@ UsbMpPdoQueryId(
                        break;
                }
                case BusQueryCompatibleIDs:
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryCompatibleIDs\n");
                        /* No compatible ID */
                        *Information = 0;
                        return STATUS_NOT_SUPPORTED;
                case BusQueryInstanceID:
                {
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_ID / BusQueryInstanceID\n");
                        *Information = 0;
                        return Status;
                }
                default:
-                       DPRINT1("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n", IdType);
+                       DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_ID / unknown query id type 0x%lx\n", IdType);
                        return STATUS_NOT_SUPPORTED;
        }
 
@@ -190,14 +232,33 @@ UsbMpPdoQueryId(
 }
 
 static NTSTATUS
-UsbMpPnpStartDevice(
+QueryBusInformation(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp,
+       OUT ULONG_PTR* Information)
+{
+       PPNP_BUS_INFORMATION BusInformation;
+
+       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_BUS_INFORMATION\n");
+
+       BusInformation = ExAllocatePool(PagedPool, sizeof(PNP_BUS_INFORMATION));
+       if (!BusInformation)
+               return STATUS_INSUFFICIENT_RESOURCES;
+       BusInformation->BusTypeGuid = GUID_BUS_TYPE_USB;
+       BusInformation->LegacyBusType = PNPBus;
+       BusInformation->BusNumber = 0; /* FIXME */
+       return STATUS_SUCCESS;
+}
+
+static NTSTATUS
+StartDevice(
        IN PDEVICE_OBJECT DeviceObject)
 {
        PUSBMP_DEVICE_EXTENSION DeviceExtension;
        NTSTATUS Status;
-       
+
        DeviceExtension = (PUSBMP_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-       
+
        /* Register device interface for root hub */
        Status = IoRegisterDeviceInterface(
                DeviceObject,
@@ -206,15 +267,15 @@ UsbMpPnpStartDevice(
                &DeviceExtension->HcdInterfaceName);
        if (!NT_SUCCESS(Status))
        {
-               DPRINT("USBMP: IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status);
+               DPRINT("IoRegisterDeviceInterface() failed with status 0x%08lx\n", Status);
                return Status;
        }
-       
+
        return Status;
 }
 
-NTSTATUS STDCALL
-UsbMpPnpPdo(
+NTSTATUS
+UsbMpPdoPnp(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp)
 {
@@ -222,7 +283,7 @@ UsbMpPnpPdo(
        PIO_STACK_LOCATION Stack;
        ULONG_PTR Information = 0;
        NTSTATUS Status;
-       
+
        Stack = IoGetCurrentIrpStackLocation(Irp);
        MinorFunction = Stack->MinorFunction;
 
@@ -230,15 +291,15 @@ UsbMpPnpPdo(
        {
                case IRP_MN_START_DEVICE: /* 0x00 */
                {
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
-                       Status = UsbMpPnpStartDevice(DeviceObject);
+                       DPRINT("IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
+                       Status = StartDevice(DeviceObject);
                        break;
                }
                case IRP_MN_QUERY_CAPABILITIES: /* 0x09 */
                {
                        PDEVICE_CAPABILITIES DeviceCapabilities;
                        ULONG i;
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_CAPABILITIES\n");
 
                        DeviceCapabilities = (PDEVICE_CAPABILITIES)Stack->Parameters.DeviceCapabilities.Capabilities;
                        /* FIXME: capabilities can change with connected device */
@@ -264,7 +325,7 @@ UsbMpPnpPdo(
                }
                case IRP_MN_QUERY_RESOURCES: /* 0x0a */
                {
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCES\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_RESOURCES\n");
                        /* Root buses don't need resources, except the ones of
                         * the usb controller. This PDO is the root bus PDO, so
                         * report no resource by not changing Information and
@@ -276,7 +337,7 @@ UsbMpPnpPdo(
                }
                case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: /* 0x0b */
                {
-                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
+                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_RESOURCE_REQUIREMENTS\n");
                        /* Root buses don't need resources, except the ones of
                         * the usb controller. This PDO is the root bus PDO, so
                         * report no resource by not changing Information and
@@ -294,9 +355,9 @@ UsbMpPnpPdo(
                                {
                                        UNICODE_STRING SourceString = RTL_CONSTANT_STRING(L"Root USB hub");
                                        UNICODE_STRING Description;
-                                       
-                                       DPRINT("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
-                                       
+
+                                       DPRINT("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / DeviceTextDescription\n");
+
                                        Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, &SourceString, &Description);
                                        if (NT_SUCCESS(Status))
                                                Information = (ULONG_PTR)Description.Buffer;
@@ -313,8 +374,9 @@ UsbMpPnpPdo(
                                }
                                default:
                                {
-                                       DPRINT1("USBMP: IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / unknown type 0x%lx\n",
+                                       DPRINT1("IRP_MJ_PNP / IRP_MN_QUERY_DEVICE_TEXT / unknown type 0x%lx\n",
                                                Stack->Parameters.QueryDeviceText.DeviceTextType);
+                                       ASSERT(FALSE);
                                        Status = STATUS_NOT_SUPPORTED;
                                }
                        }
@@ -322,7 +384,12 @@ UsbMpPnpPdo(
                }
                case IRP_MN_QUERY_ID: /* 0x13 */
                {
-                       Status = UsbMpPdoQueryId(DeviceObject, Irp, &Information);
+                       Status = QueryId(DeviceObject, Irp, &Information);
+                       break;
+               }
+               case IRP_MN_QUERY_BUS_INFORMATION: /* 0x15 */
+               {
+                       Status = QueryBusInformation(DeviceObject, Irp, &Information);
                        break;
                }
                default:
@@ -330,9 +397,10 @@ UsbMpPnpPdo(
                        /* We can't forward request to the lower driver, because
                         * we are a Pdo, so we don't have lower driver...
                         */
-                       DPRINT1("USBMP: IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction);
+                       DPRINT1("IRP_MJ_PNP / unknown minor function 0x%lx\n", MinorFunction);
                        Information = Irp->IoStatus.Information;
                        Status = Irp->IoStatus.Status;
+                       ASSERT(FALSE);
                }
        }
 
@@ -342,3 +410,217 @@ UsbMpPnpPdo(
        return Status;
 }
 
+NTSTATUS
+UsbMpPdoInternalDeviceControl(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp)
+{
+       NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
+
+       DPRINT("UsbMpDeviceInternalControlPdo(DO %p, code 0x%lx) called\n",
+               DeviceObject,
+               IoGetCurrentIrpStackLocation(Irp)->Parameters.DeviceIoControl.IoControlCode);
+
+       if (DeviceObject == KeyboardFdo)
+       {
+               // it's keyboard's IOCTL
+               PIO_STACK_LOCATION Stk;
+
+               Irp->IoStatus.Information = 0;
+               Stk = IoGetCurrentIrpStackLocation(Irp);
+
+               switch (Stk->Parameters.DeviceIoControl.IoControlCode)
+               {
+                       case IOCTL_INTERNAL_KEYBOARD_CONNECT:
+                               DPRINT("IOCTL_INTERNAL_KEYBOARD_CONNECT\n");
+                               if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) {
+                                       DPRINT1("Keyboard IOCTL_INTERNAL_KEYBOARD_CONNECT "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+                                       goto intcontfailure;
+                               }
+
+                               RtlCopyMemory(&KbdClassInformation,
+                                       Stk->Parameters.DeviceIoControl.Type3InputBuffer,
+                                       sizeof(CONNECT_DATA));
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+
+               case IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER:
+                       DPRINT("IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER\n");
+                       if (Stk->Parameters.DeviceIoControl.InputBufferLength < 1) {
+                               Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+                               goto intcontfailure;
+                       }
+/*                     if (!DevExt->KeyboardInterruptObject) {
+                               Irp->IoStatus.Status = STATUS_DEVICE_NOT_READY;
+                               goto intcontfailure;
+                       }*/
+
+                       Irp->IoStatus.Status = STATUS_SUCCESS;
+                       break;
+               case IOCTL_KEYBOARD_QUERY_ATTRIBUTES:
+                       DPRINT("IOCTL_KEYBOARD_QUERY_ATTRIBUTES\n");
+                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
+                               sizeof(KEYBOARD_ATTRIBUTES)) {
+                                       DPRINT("Keyboard IOCTL_KEYBOARD_QUERY_ATTRIBUTES: "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
+                                       &DevExt->KeyboardAttributes,
+                                       sizeof(KEYBOARD_ATTRIBUTES));*/
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+               case IOCTL_KEYBOARD_QUERY_INDICATORS:
+                       DPRINT("IOCTL_KEYBOARD_QUERY_INDICATORS\n");
+                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
+                               sizeof(KEYBOARD_INDICATOR_PARAMETERS)) {
+                                       DPRINT("Keyboard IOCTL_KEYBOARD_QUERY_INDICATORS: "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
+                                       &DevExt->KeyboardIndicators,
+                                       sizeof(KEYBOARD_INDICATOR_PARAMETERS));*/
+
+                               Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+                               break;
+               case IOCTL_KEYBOARD_QUERY_TYPEMATIC:
+                       DPRINT("IOCTL_KEYBOARD_QUERY_TYPEMATIC\n");
+                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
+                               sizeof(KEYBOARD_TYPEMATIC_PARAMETERS)) {
+                                       DPRINT("Keyboard IOCTL_KEYBOARD_QUERY_TYPEMATIC: "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
+                                       &DevExt->KeyboardTypematic,
+                                       sizeof(KEYBOARD_TYPEMATIC_PARAMETERS));*/
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+               case IOCTL_KEYBOARD_SET_INDICATORS:
+                       DPRINT("IOCTL_KEYBOARD_SET_INDICATORS\n");
+                       if (Stk->Parameters.DeviceIoControl.InputBufferLength <
+                               sizeof(KEYBOARD_INDICATOR_PARAMETERS)) {
+                                       DPRINT("Keyboard IOCTL_KEYBOARD_SET_INDICTATORS: "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+
+                               /*RtlCopyMemory(&DevExt->KeyboardIndicators,
+                                       Irp->AssociatedIrp.SystemBuffer,
+                                       sizeof(KEYBOARD_INDICATOR_PARAMETERS));*/
+
+                               //DPRINT("%x\n", DevExt->KeyboardIndicators.LedFlags);
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+               case IOCTL_KEYBOARD_SET_TYPEMATIC:
+                       DPRINT("IOCTL_KEYBOARD_SET_TYPEMATIC\n");
+                       if (Stk->Parameters.DeviceIoControl.InputBufferLength <
+                               sizeof(KEYBOARD_TYPEMATIC_PARAMETERS)) {
+                                       DPRINT("Keyboard IOCTL_KEYBOARD_SET_TYPEMATIC "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+
+                               /*RtlCopyMemory(&DevExt->KeyboardTypematic,
+                                       Irp->AssociatedIrp.SystemBuffer,
+                                       sizeof(KEYBOARD_TYPEMATIC_PARAMETERS));*/
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+               case IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION:
+                       /* We should check the UnitID, but it's kind of pointless as
+                       * all keyboards are supposed to have the same one
+                       */
+#if 0
+                       DPRINT("IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION\n");
+                       if (Stk->Parameters.DeviceIoControl.OutputBufferLength <
+                               sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION)) {
+                                       DPRINT("IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION: "
+                                               "invalid buffer size (expected)\n");
+                                       /* It's to query the buffer size */
+                                       Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
+                                       goto intcontfailure;
+                               }
+                               Irp->IoStatus.Information =
+                                       sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION);
+#endif
+                               /*RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,
+                                       &IndicatorTranslation,
+                                       sizeof(LOCAL_KEYBOARD_INDICATOR_TRANSLATION));*/
+
+                               Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
+                               break;
+               case IOCTL_INTERNAL_I8042_HOOK_KEYBOARD:
+                       /* Nothing to do here */
+                       Irp->IoStatus.Status = STATUS_SUCCESS;
+                       break;
+               default:
+                       Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
+                       break;
+               }
+
+       intcontfailure:
+                       Status = Irp->IoStatus.Status;
+       }
+       else if (DeviceObject == MouseFdo)
+       {
+               // it's mouse's IOCTL
+               PIO_STACK_LOCATION Stk;
+
+               Irp->IoStatus.Information = 0;
+               Stk = IoGetCurrentIrpStackLocation(Irp);
+
+               switch (Stk->Parameters.DeviceIoControl.IoControlCode)
+               {
+                       case IOCTL_INTERNAL_MOUSE_CONNECT:
+                               DPRINT("IOCTL_INTERNAL_MOUSE_CONNECT\n");
+                               if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) {
+                                       DPRINT1("IOCTL_INTERNAL_MOUSE_CONNECT: "
+                                               "invalid buffer size\n");
+                                       Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+                                       goto intcontfailure2;
+                               }
+
+                               RtlCopyMemory(&MouseClassInformation,
+                                       Stk->Parameters.DeviceIoControl.Type3InputBuffer,
+                                       sizeof(CONNECT_DATA));
+
+                               Irp->IoStatus.Status = STATUS_SUCCESS;
+                               break;
+
+               default:
+                       Irp->IoStatus.Status = STATUS_SUCCESS;//STATUS_INVALID_DEVICE_REQUEST;
+                       break;
+               }
+       intcontfailure2:
+               Status = Irp->IoStatus.Status;
+       }
+       else
+       {
+               DPRINT("We got IOCTL for UsbCore\n");
+               IoCompleteRequest(Irp, IO_NO_INCREMENT);
+               return STATUS_SUCCESS;
+       }
+
+
+       if (Status == STATUS_INVALID_DEVICE_REQUEST) {
+               DPRINT1("Invalid internal device request!\n");
+       }
+
+       if (Status != STATUS_PENDING)
+               IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+       return Status;
+}
index dc22e22..2f5090e 100644 (file)
@@ -20,37 +20,29 @@ extern CONNECT_DATA MouseClassInformation;
 extern PDEVICE_OBJECT KeyboardFdo;
 extern PDEVICE_OBJECT MouseFdo;
 
-/* cleanup.c */
-NTSTATUS STDCALL
-UsbMpCleanup(
-       IN PDEVICE_OBJECT DeviceObject,
-       IN PIRP Irp);
-
-/* close.c */
-NTSTATUS STDCALL
-UsbMpClose(
+/* fdo.c */
+NTSTATUS
+UsbMpFdoCreate(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
-/* create.c */
-NTSTATUS STDCALL
-UsbMpCreate(
+NTSTATUS
+UsbMpFdoClose(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
-/* fdo.c */
-NTSTATUS STDCALL
-UsbMpPnpFdo(
+NTSTATUS
+UsbMpFdoCleanup(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
 NTSTATUS
-UsbMpDeviceControlFdo(
+UsbMpFdoPnp(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
 NTSTATUS
-UsbMpInternalDeviceControlFdo(
+UsbMpFdoDeviceControl(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
@@ -60,7 +52,7 @@ ForwardIrpAndWait(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
-NTSTATUS STDCALL
+NTSTATUS
 ForwardIrpAndForget(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
@@ -77,18 +69,41 @@ UsbMpInitMultiSzString(
        ... /* list of PCSZ */);
 
 /* pdo.c */
-NTSTATUS STDCALL
-UsbMpPnpPdo(
+NTSTATUS
+UsbMpPdoCreate(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+NTSTATUS
+UsbMpPdoClose(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+NTSTATUS
+UsbMpPdoCleanup(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+NTSTATUS
+UsbMpPdoPnp(
+       IN PDEVICE_OBJECT DeviceObject,
+       IN PIRP Irp);
+
+NTSTATUS
+UsbMpPdoDeviceControl(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
 NTSTATUS
-UsbMpDeviceControlPdo(
+UsbMpPdoInternalDeviceControl(
        IN PDEVICE_OBJECT DeviceObject,
        IN PIRP Irp);
 
-/* Needed by this object library */
-VOID STDCALL 
+/*
+ * Needed by this object library, but not
+ * present in any file of this library
+ */
+VOID NTAPI 
 DriverUnload(PDRIVER_OBJECT DriverObject);
 
 NTSTATUS