[ros-diffs] [janderwald] 55552: [USBEHCI] - Enable async park mode when available - Use correct type for the pipe handle - Implement URB_FUNCTION_GET_STATUS_FROM_INTERFACE, URB_FUNCTION_GET_STATUS_FROM_ENDPOIN...

janderwald at svn.reactos.org janderwald at svn.reactos.org
Sun Feb 12 00:49:19 UTC 2012


Author: janderwald
Date: Sun Feb 12 00:49:18 2012
New Revision: 55552

URL: http://svn.reactos.org/svn/reactos?rev=55552&view=rev
Log:
[USBEHCI]
- Enable async park mode when available
- Use correct type for the pipe handle
- Implement  URB_FUNCTION_GET_STATUS_FROM_INTERFACE,  URB_FUNCTION_GET_STATUS_FROM_ENDPOINT
- Verify that there is buffer provided in SubmitSetupPacket
[KBDCLASS]
- Forward requests to lower device

Modified:
    branches/usb-bringup-trunk/drivers/input/kbdclass/kbdclass.c
    branches/usb-bringup-trunk/drivers/usb/usbehci/hardware.cpp
    branches/usb-bringup-trunk/drivers/usb/usbehci/hub_controller.cpp
    branches/usb-bringup-trunk/drivers/usb/usbehci/usb_device.cpp

Modified: branches/usb-bringup-trunk/drivers/input/kbdclass/kbdclass.c
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/input/kbdclass/kbdclass.c?rev=55552&r1=55551&r2=55552&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/input/kbdclass/kbdclass.c [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/input/kbdclass/kbdclass.c [iso-8859-1] Sun Feb 12 00:49:18 2012
@@ -878,7 +878,7 @@
 	}
 
 	Irp->IoStatus.Status = Status;
-	if (NT_SUCCESS(Status))
+	if (NT_SUCCESS(Status) || Status == STATUS_NOT_SUPPORTED)
 	{
 		IoSkipCurrentIrpStackLocation(Irp);
 		return IoCallDriver(DeviceExtension->LowerDevice, Irp);

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci/hardware.cpp
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci/hardware.cpp?rev=55552&r1=55551&r2=55552&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci/hardware.cpp [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci/hardware.cpp [iso-8859-1] Sun Feb 12 00:49:18 2012
@@ -737,7 +737,18 @@
     UsbCmd.IntThreshold = 0x8; //1ms
     UsbCmd.Run = TRUE;
     UsbCmd.FrameListSize = 0x0; //1024
+
+    if (m_Capabilities.HCCParams.ParkMode)
+    {
+        //
+        // enable async park mode
+        //
+        UsbCmd.AsyncParkEnable = TRUE;
+        UsbCmd.AsyncParkCount = 3;
+    }
+
     SetCommandRegister(&UsbCmd);
+
 
     //
     // Wait for execution to start

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci/hub_controller.cpp
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci/hub_controller.cpp?rev=55552&r1=55551&r2=55552&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci/hub_controller.cpp [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci/hub_controller.cpp [iso-8859-1] Sun Feb 12 00:49:18 2012
@@ -827,7 +827,7 @@
     PURB Urb)
 {
     PUSBDEVICE UsbDevice;
-    PUSB_ENDPOINT_DESCRIPTOR EndPointDesc = NULL;
+    PUSB_ENDPOINT EndPointDesc = NULL;
     //
     // First check if the request is for the Status Change Endpoint
     //
@@ -856,13 +856,13 @@
     //
     // Check PipeHandle to determine if this is a Bulk or Interrupt Transfer Request
     //
-    EndPointDesc = (PUSB_ENDPOINT_DESCRIPTOR)Urb->UrbBulkOrInterruptTransfer.PipeHandle;
+    EndPointDesc = (PUSB_ENDPOINT)Urb->UrbBulkOrInterruptTransfer.PipeHandle;
 
     //
     // sanity checks
     //
     ASSERT(EndPointDesc);
-    ASSERT((EndPointDesc->bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_BULK || (EndPointDesc->bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_INTERRUPT);
+    ASSERT((EndPointDesc->EndPointDescriptor.bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_BULK || (EndPointDesc->EndPointDescriptor.bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_INTERRUPT);
 
     //
     // check if this is a valid usb device handle
@@ -881,7 +881,6 @@
     // get device
     //
     UsbDevice = PUSBDEVICE(Urb->UrbHeader.UsbdDeviceHandle);
-
     return UsbDevice->SubmitIrp(Irp);
 }
 
@@ -1171,7 +1170,6 @@
     //
     // sanity checks
     //
-    PC_ASSERT(Urb->UrbControlGetStatusRequest.Index == 0);
     PC_ASSERT(Urb->UrbControlGetStatusRequest.TransferBufferLength >= sizeof(USHORT));
     PC_ASSERT(Urb->UrbControlGetStatusRequest.TransferBuffer);
 
@@ -1215,9 +1213,25 @@
      CtrlSetup.bRequest = USB_REQUEST_GET_STATUS;
      CtrlSetup.wValue.LowByte = 0;
      CtrlSetup.wValue.HiByte = 0;
-     CtrlSetup.wIndex.W = Urb->UrbControlGetStatusRequest.Index; 
+     CtrlSetup.wIndex.W = Urb->UrbControlGetStatusRequest.Index;
      CtrlSetup.wLength = (USHORT)Urb->UrbControlGetStatusRequest.TransferBufferLength;
      CtrlSetup.bmRequestType.B = 0x80;
+
+
+     if (Urb->UrbHeader.Function == URB_FUNCTION_GET_STATUS_FROM_INTERFACE)
+     {
+         //
+         // add interface type
+         //
+         CtrlSetup.bmRequestType.B |= 0x01;
+     }
+     else if (Urb->UrbHeader.Function == URB_FUNCTION_GET_STATUS_FROM_ENDPOINT)
+     {
+         //
+         // add interface type
+         //
+         CtrlSetup.bmRequestType.B |= 0x02;
+     }
 
     //
     // submit setup packet
@@ -2030,6 +2044,8 @@
                     Status = HandleClassDevice(Irp, Urb);
                     break;
                 case URB_FUNCTION_GET_STATUS_FROM_DEVICE:
+                case URB_FUNCTION_GET_STATUS_FROM_INTERFACE:
+                case URB_FUNCTION_GET_STATUS_FROM_ENDPOINT:
                     Status = HandleGetStatusFromDevice(Irp, Urb);
                     break;
                 case URB_FUNCTION_SELECT_CONFIGURATION:
@@ -2523,7 +2539,7 @@
     //
     // now initialize device
     //
-    Status = NewUsbDevice->Initialize(PHUBCONTROLLER(Controller), Controller->GetUsbHardware(),PVOID(Controller), PortNumber, PortStatus);
+    Status = NewUsbDevice->Initialize(PHUBCONTROLLER(Controller), Controller->GetUsbHardware(), HubDeviceHandle, PortNumber, PortStatus);
 
     //
     // check for success

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci/usb_device.cpp
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci/usb_device.cpp?rev=55552&r1=55551&r2=55552&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci/usb_device.cpp [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci/usb_device.cpp [iso-8859-1] Sun Feb 12 00:49:18 2012
@@ -1038,27 +1038,40 @@
     OUT PVOID Buffer)
 {
     NTSTATUS Status;
-    PMDL Mdl;
-
-    //
-    // allocate mdl
-    //
-    Mdl = IoAllocateMdl(Buffer, BufferLength, FALSE, FALSE, 0);
-
-    //
-    // HACK HACK HACK: assume the buffer is build from non paged pool
-    //
-    MmBuildMdlForNonPagedPool(Mdl);
+    PMDL Mdl = NULL;
+
+    if (BufferLength)
+    {
+        //
+        // allocate mdl
+        //
+        Mdl = IoAllocateMdl(Buffer, BufferLength, FALSE, FALSE, 0);
+        if (!Mdl)
+        {
+            //
+            // no memory
+            //
+            return STATUS_INSUFFICIENT_RESOURCES;
+        }
+
+        //
+        // HACK HACK HACK: assume the buffer is build from non paged pool
+        //
+        MmBuildMdlForNonPagedPool(Mdl);
+    }
 
     //
     // commit setup packet
     //
     Status = CommitSetupPacket(SetupPacket, 0, BufferLength, Mdl);
 
-    //
-    // free mdl
-    //
-    IoFreeMdl(Mdl);
+    if (Mdl != NULL)
+    {
+        //
+        // free mdl
+        //
+        IoFreeMdl(Mdl);
+    }
 
     //
     // done




More information about the Ros-diffs mailing list