[ros-diffs] [mjmartin] 45647: [usb/usbehci] - Add missing break's in CompletePendingURBRequest that caused crashes.- Add some debugging for Urb Function URB_FUNCTION_CLASS_OTHER. - Implement IOCTL_INTERNAL_USB_GET_HUB_COUNT returning only 0 Hubs for now. - Implement RootHubInitNotification. - Misc cleanup.

mjmartin at svn.reactos.org mjmartin at svn.reactos.org
Sun Feb 21 12:34:54 CET 2010


Author: mjmartin
Date: Sun Feb 21 12:34:54 2010
New Revision: 45647

URL: http://svn.reactos.org/svn/reactos?rev=45647&view=rev
Log:
[usb/usbehci]
- Add missing break's in CompletePendingURBRequest that caused crashes.- Add some debugging for Urb Function URB_FUNCTION_CLASS_OTHER.
- Implement IOCTL_INTERNAL_USB_GET_HUB_COUNT returning only 0 Hubs for now.
- Implement RootHubInitNotification.
- Misc cleanup.


Modified:
    trunk/reactos/drivers/usb/usbehci/common.c
    trunk/reactos/drivers/usb/usbehci/fdo.c
    trunk/reactos/drivers/usb/usbehci/irp.c
    trunk/reactos/drivers/usb/usbehci/pdo.c
    trunk/reactos/drivers/usb/usbehci/usbehci.c
    trunk/reactos/drivers/usb/usbehci/usbehci.h
    trunk/reactos/drivers/usb/usbehci/usbehci.rbuild
    trunk/reactos/drivers/usb/usbehci/usbiffn.c

Modified: trunk/reactos/drivers/usb/usbehci/common.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/common.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/common.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/common.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -103,7 +103,6 @@
     PDEVICE_OBJECT LowerDevice;
 
     LowerDevice = ((PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->LowerDevice;
-DPRINT1("DeviceObject %x, LowerDevice %x\n", DeviceObject, LowerDevice);
     ASSERT(LowerDevice);
 
     IoSkipCurrentIrpStackLocation(Irp);

Modified: trunk/reactos/drivers/usb/usbehci/fdo.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/fdo.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/fdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/fdo.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -84,7 +84,7 @@
                     DPRINT("port tmp %x\n", tmp);
                     GetDeviceDescriptor(FdoDeviceExtension, 0, 0, FALSE);
                     PdoDeviceExtension->ChildDeviceCount++;
-                    //CompletePendingURBRequest(PdoDeviceExtension);
+                    //PdoDeviceExtension->CallbackRoutine(PdoDeviceExtension->CallbackContext);
                 }
                 else
                 {

Modified: trunk/reactos/drivers/usb/usbehci/irp.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/irp.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/irp.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/irp.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -81,6 +81,7 @@
 
         DPRINT1("TransferBuffer %x\n", Urb->UrbControlDescriptorRequest.TransferBuffer);
         DPRINT1("TransferBufferLength %x\n", Urb->UrbControlDescriptorRequest.TransferBufferLength);
+        DPRINT1("UsbdDeviceHandle = %x\n", Urb->UrbHeader.UsbdDeviceHandle);
 
         UsbDevice = Urb->UrbHeader.UsbdDeviceHandle;
         /* UsbdDeviceHandle of 0 is root hub */
@@ -145,12 +146,14 @@
                     case USB_STRING_DESCRIPTOR_TYPE:
                     {
                         DPRINT1("Usb String Descriptor not implemented\n");
+                        break;
                     }
                     default:
                     {
                         DPRINT1("Descriptor Type %x not supported!\n", Urb->UrbControlDescriptorRequest.DescriptorType);
                     }
                 }
+                break;
             }
             case URB_FUNCTION_SELECT_CONFIGURATION:
             {
@@ -318,13 +321,82 @@
                         Urb->UrbHeader.UsbdDeviceHandle = UsbDevice;
                         Urb->UrbHeader.UsbdFlags = 0;
                         /* Stop handling the URBs now as its not coded yet */
-                        DeviceExtension->HaltUrbHandling = TRUE;
+                        //DeviceExtension->HaltUrbHandling = TRUE;
                         break;
                     }
                     default:
                     {
                         DPRINT1("Unhandled URB request for class device\n");
                         Urb->UrbHeader.Status = USBD_STATUS_INVALID_URB_FUNCTION;
+                    }
+                }
+                break;
+            }
+            case URB_FUNCTION_CLASS_OTHER:
+            {
+                switch (Urb->UrbControlVendorClassRequest.Request)
+                {
+                    case USB_REQUEST_GET_STATUS:
+                    {
+                        DPRINT1("USB_REQUEST_GET_STATUS\n");
+                        break;
+                    }
+                    case USB_REQUEST_CLEAR_FEATURE:
+                    {
+                        DPRINT1("USB_REQUEST_CLEAR_FEATURE\n");
+                        break;
+                    }
+                    case USB_REQUEST_SET_FEATURE:
+                    {
+                        DPRINT1("USB_REQUEST_SET_FEATURE value %x\n", Urb->UrbControlVendorClassRequest.Value);
+                        switch(Urb->UrbControlVendorClassRequest.Value)
+                        {
+                            /* FIXME: Needs research */
+                            case 0x01:
+                            {
+                            }
+                        }
+                        break;
+                    }
+                    case USB_REQUEST_SET_ADDRESS:
+                    {
+                        DPRINT1("USB_REQUEST_SET_ADDRESS\n");
+                        break;
+                    }
+                    case USB_REQUEST_GET_DESCRIPTOR:
+                    {
+                        DPRINT1("USB_REQUEST_GET_DESCRIPTOR\n");
+                        break;
+                    }
+                    case USB_REQUEST_SET_DESCRIPTOR:
+                    {
+                        DPRINT1("USB_REQUEST_SET_DESCRIPTOR\n");
+                        break;
+                    }
+                    case USB_REQUEST_GET_CONFIGURATION:
+                    {
+                        DPRINT1("USB_REQUEST_GET_CONFIGURATION\n");
+                        break;
+                    }
+                    case USB_REQUEST_SET_CONFIGURATION:
+                    {
+                        DPRINT1("USB_REQUEST_SET_CONFIGURATION\n");
+                        break;
+                    }
+                    case USB_REQUEST_GET_INTERFACE:
+                    {
+                        DPRINT1("USB_REQUEST_GET_INTERFACE\n");
+                        break;
+                    }
+                    case USB_REQUEST_SET_INTERFACE:
+                    {
+                        DPRINT1("USB_REQUEST_SET_INTERFACE\n");
+                        break;
+                    }
+                    case USB_REQUEST_SYNC_FRAME:
+                    {
+                        DPRINT1("USB_REQUEST_SYNC_FRAME\n");
+                        break;
                     }
                 }
                 break;

Modified: trunk/reactos/drivers/usb/usbehci/pdo.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/pdo.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/pdo.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/pdo.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -82,6 +82,7 @@
     while (PdoDeviceExtension->HaltUrbHandling == FALSE)
     {
         CompletePendingURBRequest(PdoDeviceExtension);
+        KeStallExecutionProcessor(10);
     }
     DPRINT1("Thread terminated\n");
 }
@@ -106,6 +107,8 @@
     UsbDevicePointer->Port = Port;
     UsbDevicePointer->ParentDevice = Parent;
 
+    UsbDevicePointer->IsHub = Hub;
+
     return UsbDevicePointer;
 }
 
@@ -175,6 +178,13 @@
         case IOCTL_INTERNAL_USB_GET_HUB_COUNT:
         {
             DPRINT1("IOCTL_INTERNAL_USB_GET_HUB_COUNT\n");
+
+            if (Stack->Parameters.Others.Argument1)
+            {
+                /* FIXME: Determine the number of hubs between the usb device and root hub */
+                /* For now return 0 */
+                *(PVOID *)Stack->Parameters.Others.Argument1 = 0;
+            }
             break;
         }
         case IOCTL_INTERNAL_USB_GET_HUB_NAME:
@@ -345,10 +355,7 @@
             FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)PdoDeviceExtension->ControllerFdo->DeviceExtension;
 
             /* Create the root hub */
-            RootHubDevice = InternalCreateUsbDevice(0, 0, NULL, TRUE);
-
-            RootHubDevice->Address = 1;
-            RootHubDevice->Port = 0;
+            RootHubDevice = InternalCreateUsbDevice(1, 0, NULL, TRUE);
 
             RtlCopyMemory(&RootHubDevice->DeviceDescriptor,
                           ROOTHUB2_DEVICE_DESCRIPTOR,

Modified: trunk/reactos/drivers/usb/usbehci/usbehci.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbehci.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbehci.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbehci.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -94,6 +94,7 @@
 DriverUnload(PDRIVER_OBJECT DriverObject)
 {
     DPRINT1("Unloading Driver\n");
+    /* FIXME: Clean up */
 }
 
 NTSTATUS NTAPI

Modified: trunk/reactos/drivers/usb/usbehci/usbehci.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbehci.h?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbehci.h [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbehci.h [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #define	NDEBUG
 #include <debug.h>
+#include "usbiffn.h"
 #include <usbioctl.h>
 #include <usb.h>
 
@@ -188,6 +189,7 @@
     UCHAR Address;
     ULONG Port;
     PVOID ParentDevice;
+    BOOLEAN IsHub;
     USB_DEVICE_DESCRIPTOR DeviceDescriptor;
     USB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor;
     USB_INTERFACE_DESCRIPTOR InterfaceDescriptor;
@@ -354,6 +356,8 @@
     HANDLE ThreadHandle;
     ULONG ChildDeviceCount;
     BOOLEAN HaltUrbHandling;
+    PVOID CallbackContext;
+    PRH_INIT_CALLBACK CallbackRoutine;
 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
 
 typedef struct _WORKITEM_DATA

Modified: trunk/reactos/drivers/usb/usbehci/usbehci.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbehci.rbuild?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbehci.rbuild [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbehci.rbuild [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -9,6 +9,6 @@
 	<file>common.c</file>
 	<file>misc.c</file>
 	<file>irp.c</file>
-      <file>usbiffn.c</file>
+	<file>usbiffn.c</file>
 	<file>urbreq.c</file>
 </module>

Modified: trunk/reactos/drivers/usb/usbehci/usbiffn.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/usbehci/usbiffn.c?rev=45647&r1=45646&r2=45647&view=diff
==============================================================================
--- trunk/reactos/drivers/usb/usbehci/usbiffn.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/usb/usbehci/usbiffn.c [iso-8859-1] Sun Feb 21 12:34:54 2010
@@ -185,7 +185,12 @@
 USB_BUSIFFN
 RootHubInitNotification(PVOID BusContext, PVOID CallbackContext, PRH_INIT_CALLBACK CallbackRoutine)
 {
-    DPRINT1("RootHubInitNotification\n");
+    PPDO_DEVICE_EXTENSION PdoDeviceExtension;
+    DPRINT1("RootHubInitNotification %x, %x, %x\n", BusContext, CallbackContext, CallbackRoutine);
+
+    PdoDeviceExtension = (PPDO_DEVICE_EXTENSION)BusContext;
+    PdoDeviceExtension->CallbackContext = CallbackContext;
+    PdoDeviceExtension->CallbackRoutine = CallbackRoutine;
     return STATUS_SUCCESS;
 }
 




More information about the Ros-diffs mailing list