[ros-diffs] [fireball] 24369: - Change CONNECT_DATA to DEV_CONNECT_DATA - Add the last bit to the usb mouse driver to make it functional - recognition by mouclass.sys, and sending input data to it - Misc small changes Now USB mouse works in 2nd stage (you need to add usbdriver.sys as a legacy driver to the registry certainly) TODO, but not of the top priority: - Make unloading correct

fireball at svn.reactos.org fireball at svn.reactos.org
Mon Oct 2 23:23:42 CEST 2006


Author: fireball
Date: Tue Oct  3 01:23:41 2006
New Revision: 24369

URL: http://svn.reactos.org/svn/reactos?rev=24369&view=rev
Log:
- Change CONNECT_DATA to DEV_CONNECT_DATA
- Add the last bit to the usb mouse driver to make it functional - recognition by mouclass.sys, and sending input data to it
- Misc small changes

Now USB mouse works in 2nd stage (you need to add usbdriver.sys as a legacy driver to the registry certainly)

TODO, but not of the top priority:
- Make unloading correct

Modified:
    trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h
    trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c
    trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c Tue Oct  3 01:23:41 2006
@@ -24,7 +24,7 @@
 
 VOID compdev_set_cfg_completion(PURB purb, PVOID context);
 VOID compdev_select_driver(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
-BOOLEAN compdev_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle);
+BOOLEAN compdev_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle);
 BOOLEAN compdev_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 BOOLEAN compdev_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 
@@ -72,7 +72,7 @@
 }
 
 BOOLEAN
-compdev_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle)
+compdev_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle)
 {
     PURB purb;
     PUSB_CTRL_SETUP_PACKET psetup;
@@ -403,7 +403,7 @@
         if (credit)
         {
             // ok, we find one
-            CONNECT_DATA param;
+            DEV_CONNECT_DATA param;
 
             if (pcand->disp_tbl.dev_connect)
             {

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c Tue Oct  3 01:23:41 2006
@@ -1080,9 +1080,9 @@
     DEV_HANDLE dev_handle;
     NTSTATUS status;
     PUSB_DRIVER pdriver;
-    PCONNECT_DATA pcd = (PCONNECT_DATA) Parameter;
+    PDEV_CONNECT_DATA pcd = (PDEV_CONNECT_DATA) Parameter;
     PUSB_DEV_MANAGER dev_mgr;
-    CONNECT_DATA param;
+    DEV_CONNECT_DATA param;
 
     if (pcd == NULL)
         return FALSE;
@@ -1111,7 +1111,7 @@
     PUSB_DRIVER pdriver, pcand;
     LONG credit, match, i;
     DEV_HANDLE handle = 0;
-    CONNECT_DATA cd;
+    DEV_CONNECT_DATA cd;
 
     USE_BASIC_NON_PENDING_IRQL;
 

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h Tue Oct  3 01:23:41 2006
@@ -1,16 +1,16 @@
 #ifndef __DEVMGR_H__
 #define __DEVMGR_H__
 
-typedef struct _CONNECT_DATA
+typedef struct _DEV_CONNECT_DATA
 {
 	DEV_HANDLE 	dev_handle;
 	struct _USB_DRIVER *pdriver;
 	struct _USB_DEV_MANAGER *dev_mgr;
 	PUSB_INTERFACE_DESC if_desc;
 
-} CONNECT_DATA, *PCONNECT_DATA;
-
-typedef BOOLEAN ( *PDEV_CONNECT_EX )( PCONNECT_DATA init_param, DEV_HANDLE dev_handle );
+} DEV_CONNECT_DATA, *PDEV_CONNECT_DATA;
+
+typedef BOOLEAN ( *PDEV_CONNECT_EX )( PDEV_CONNECT_DATA init_param, DEV_HANDLE dev_handle );
 typedef BOOLEAN ( *PDEV_CONNECT )( struct _USB_DEV_MANAGER *dev_mgr, DEV_HANDLE dev_handle );
 typedef BOOLEAN ( *PDRVR_INIT )( struct _USB_DEV_MANAGER *dev_mgr, struct _USB_DRIVER *pdriver );
 

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c Tue Oct  3 01:23:41 2006
@@ -75,7 +75,7 @@
 
 VOID gendrv_set_cfg_completion(PURB purb, PVOID context);
 
-BOOLEAN gendrv_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle);
+BOOLEAN gendrv_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle);
 
 BOOLEAN gendrv_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 
@@ -168,7 +168,7 @@
 }
 
 BOOLEAN
-gendrv_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle)
+gendrv_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle)
 {
     PURB purb;
     PUSB_CTRL_SETUP_PACKET psetup;
@@ -717,7 +717,7 @@
 
 
 BOOLEAN
-gendrv_if_connect(PCONNECT_DATA params, DEV_HANDLE if_handle)
+gendrv_if_connect(PDEV_CONNECT_DATA params, DEV_HANDLE if_handle)
 {
     //
     // try to search the registry to find one driver.

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c Tue Oct  3 01:23:41 2006
@@ -79,7 +79,7 @@
 
 NTSTATUS hub_start_int_request(PUSB_DEV pdev);
 
-BOOLEAN hub_connect(PCONNECT_DATA init_param, DEV_HANDLE dev_handle);
+BOOLEAN hub_connect(PDEV_CONNECT_DATA init_param, DEV_HANDLE dev_handle);
 
 BOOLEAN hub_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 
@@ -1908,7 +1908,7 @@
 }
 
 BOOLEAN
-hub_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle)
+hub_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle)
 {
     URB urb, *purb;
     CHAR buf[512];

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c Tue Oct  3 01:23:41 2006
@@ -8,6 +8,7 @@
 
 #include "usbdriver.h"
 #include "ntddmou.h"
+#include "kbdmou.h"
 
 //FIXME: is it needed at all?
 typedef struct _USBMP_DEVICE_EXTENSION
@@ -15,10 +16,14 @@
     BOOLEAN IsFDO;
 } USBMP_DEVICE_EXTENSION, *PUSBMP_DEVICE_EXTENSION;
 
+/* Data for embedded drivers */
+//CONNECT_DATA KbdClassInformation;
+CONNECT_DATA MouseClassInformation;
+
 PDEVICE_OBJECT MouseFdo = NULL;
 
 
-BOOLEAN mouse_connect(PCONNECT_DATA dev_mgr, DEV_HANDLE dev_handle);
+BOOLEAN mouse_connect(PDEV_CONNECT_DATA dev_mgr, DEV_HANDLE dev_handle);
 BOOLEAN mouse_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 BOOLEAN mouse_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 VOID mouse_irq(PURB purb, PVOID pcontext);
@@ -63,6 +68,9 @@
     pdriver->disp_tbl.dev_disconnect = mouse_disconnect;
     pdriver->disp_tbl.dev_stop = mouse_stop;
     pdriver->disp_tbl.dev_reserved = NULL;
+
+    // Zero out the class information structure
+    RtlZeroMemory(&MouseClassInformation, sizeof(CONNECT_DATA));
 
     // Create the device
     MouseCreateDevice(dev_mgr->usb_driver_obj);
@@ -91,7 +99,7 @@
 }
 
 BOOLEAN
-mouse_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle)
+mouse_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle)
 {
     PURB purb;
     NTSTATUS status;
@@ -219,7 +227,7 @@
 mouse_irq(PURB purb, PVOID pcontext)
 {
     MOUSE_INPUT_DATA MouseInputData;
-    //ULONG InputDataConsumed;
+    ULONG InputDataConsumed;
     NTSTATUS status;
     PMOUSE_DRVR_EXTENSION pdev_ext = (PMOUSE_DRVR_EXTENSION)pcontext;
     signed char *data = pdev_ext->mouse_data;
@@ -275,18 +283,18 @@
     }
 
     // Commit the input data somewhere...
-    /*if (UsbPortInterface.MouseConnectData->ClassService)
+    if (MouseClassInformation.ClassService)
     {
         KIRQL OldIrql;
 
         KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
-        (*(PSERVICE_CALLBACK_ROUTINE)UsbPortInterface.MouseConnectData->ClassService)(
-            UsbPortInterface.MouseConnectData->ClassDeviceObject,
+        (*(PSERVICE_CALLBACK_ROUTINE)MouseClassInformation.ClassService)(
+            MouseClassInformation.ClassDeviceObject,
             &MouseInputData,
             (&MouseInputData)+1,
             &InputDataConsumed);
         KeLowerIrql(OldIrql);
-    }*/
+    }
 
     // Save old button data
     pdev_ext->btn_old = data[0];
@@ -338,7 +346,7 @@
 NTSTATUS
 MouseDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp)
 {
-    //NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
+    NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
 
     usb_dbg_print(DBGLVL_MAXIMUM, ("MouseDispatch(DO %p, code 0x%lx) called\n",
         DeviceObject,
@@ -356,7 +364,7 @@
         {
         case IOCTL_INTERNAL_KEYBOARD_CONNECT:
             DPRINT("IOCTL_INTERNAL_KEYBOARD_CONNECT\n");
-            if (Stk->Parameters.DeviceIoControl.InputBufferLength <	sizeof(CONNECT_DATA)) {
+            if (Stk->Parameters.DeviceIoControl.InputBufferLength <	sizeof(DEV_CONNECT_DATA)) {
                 DPRINT1("Keyboard IOCTL_INTERNAL_KEYBOARD_CONNECT "
                     "invalid buffer size\n");
                 Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
@@ -365,7 +373,7 @@
 
             RtlCopyMemory(&KbdClassInformation,
                 Stk->Parameters.DeviceIoControl.Type3InputBuffer,
-                sizeof(CONNECT_DATA));
+                sizeof(DEV_CONNECT_DATA));
 
             Irp->IoStatus.Status = STATUS_SUCCESS;
             break;
@@ -484,7 +492,9 @@
 intcontfailure:
         Status = Irp->IoStatus.Status;
     }
-    else if (DeviceObject == MouseFdo)
+    else 
+#endif
+    if (DeviceObject == MouseFdo)
     {
         // it's mouse's IOCTL
         PIO_STACK_LOCATION Stk;
@@ -495,10 +505,10 @@
         switch (Stk->Parameters.DeviceIoControl.IoControlCode)
         {
         case IOCTL_INTERNAL_MOUSE_CONNECT:
-            DPRINT("IOCTL_INTERNAL_MOUSE_CONNECT\n");
+            usb_dbg_print(DBGLVL_MAXIMUM, ("IOCTL_INTERNAL_MOUSE_CONNECT\n"));
             if (Stk->Parameters.DeviceIoControl.InputBufferLength <	sizeof(CONNECT_DATA)) {
-                DPRINT1("IOCTL_INTERNAL_MOUSE_CONNECT: "
-                    "invalid buffer size\n");
+                usb_dbg_print(DBGLVL_MINIMUM, ("IOCTL_INTERNAL_MOUSE_CONNECT: "
+                    "invalid buffer size\n"));
                 Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
                 goto intcontfailure2;
             }
@@ -517,28 +527,16 @@
 intcontfailure2:
         Status = Irp->IoStatus.Status;
     }
-    else
-    {
-        return UsbMpPdoInternalDeviceControlCore(DeviceObject, Irp);
-    }
-
-
-    if (Status == STATUS_INVALID_DEVICE_REQUEST) {
-        DPRINT1("Invalid internal device request!\n");
+
+    if (Status == STATUS_INVALID_DEVICE_REQUEST)
+    {
+        usb_dbg_print(DBGLVL_MINIMUM, ("Invalid internal device request!\n"));
     }
 
     if (Status != STATUS_PENDING)
         IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
     return Status;
-
-#endif
-
-    // Default handler
-    Irp->IoStatus.Information = 0;
-    Irp->IoStatus.Status = STATUS_NOT_SUPPORTED;
-    IoCompleteRequest(Irp, IO_NO_INCREMENT);
-    return STATUS_NOT_SUPPORTED;
 }
 
 NTSTATUS
@@ -571,7 +569,7 @@
         goto cleanup;
     }
 
-    Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL));
+    Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, (ULONG)(wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL)));
     if (!NT_SUCCESS(Status))
     {
         usb_dbg_print(DBGLVL_MINIMUM, ("ZwSetValueKey() failed with status 0x%08lx\n", Status));

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c Tue Oct  3 01:23:41 2006
@@ -128,7 +128,7 @@
 
 extern VOID rh_timer_svc_int_completion(PUSB_DEV dev, PVOID context);
 
-ULONG debug_level = DBGLVL_MAXIMUM;
+ULONG debug_level = DBGLVL_MINIMUM;//DBGLVL_MAXIMUM;
 PDRIVER_OBJECT usb_driver_obj = NULL;
 extern USB_DEV_MANAGER g_dev_mgr;
 

Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c?rev=24369&r1=24368&r2=24369&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c (original)
+++ trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c Tue Oct  3 01:23:41 2006
@@ -65,7 +65,7 @@
 
 VOID NTAPI umss_start_io(IN PDEVICE_OBJECT dev_obj, IN PIRP irp);
 NTSTATUS umss_port_dispatch_routine(PDEVICE_OBJECT pdev_obj, PIRP irp);
-BOOLEAN umss_connect(PCONNECT_DATA dev_mgr, DEV_HANDLE dev_handle);
+BOOLEAN umss_connect(PDEV_CONNECT_DATA dev_mgr, DEV_HANDLE dev_handle);
 BOOLEAN umss_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 BOOLEAN umss_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
 NTSTATUS umss_dispatch_routine(PDEVICE_OBJECT pdev_obj, PIRP irp);
@@ -384,7 +384,7 @@
 }
 
 BOOLEAN
-umss_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle)
+umss_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle)
 {
     PURB purb;
     NTSTATUS status;
@@ -1475,7 +1475,7 @@
 }
 
 BOOLEAN
-umss_if_connect(PCONNECT_DATA params, DEV_HANDLE if_handle)
+umss_if_connect(PDEV_CONNECT_DATA params, DEV_HANDLE if_handle)
 {
     PURB purb;
     LONG if_idx, i;




More information about the Ros-diffs mailing list