Author: janderwald
Date: Tue May 24 18:29:57 2011
New Revision: 51892
URL: 
http://svn.reactos.org/svn/reactos?rev=51892&view=rev
Log:
[USBOHCI]
- Don't allocate buffer twice
- Cleanup endpoint / general transfer descriptors
Modified:
    branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp
    branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp
Modified: branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci…
==============================================================================
--- branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp [iso-8859-1] Tue May 24
18:29:57 2011
@@ -167,6 +167,8 @@
         //
         // request not supported, please try later
         //
+        DPRINT1("Request Type %x not supported\n", Type);
+        ASSERT(FALSE);
         return Status;
     }
@@ -389,7 +391,7 @@
         //
         // FIXME: check if complete
         //
-
+        ASSERT(Request->IsRequestComplete());
         //
         // release request
         //
Modified: branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp
URL:
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci…
==============================================================================
--- branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp [iso-8859-1] Tue May 24
18:29:57 2011
@@ -706,7 +706,7 @@
         //
         // now create the data descriptor
         //
-        Status = CreateGeneralTransferDescriptor(&DataDescriptor,
m_TransferBufferLength);
+        Status = CreateGeneralTransferDescriptor(&DataDescriptor, 0);
         if (!NT_SUCCESS(Status))
         {
             //
@@ -924,6 +924,8 @@
 CUSBRequest::CompletionCallback(
     struct _OHCI_ENDPOINT_DESCRIPTOR * OutDescriptor)
 {
+    POHCI_GENERAL_TD TransferDescriptor, NextTransferDescriptor;
+
     DPRINT1("CUSBRequest::CompletionCallback\n");
     //
@@ -937,6 +939,45 @@
     //
     // FIXME: cleanup descriptors
     //
+
+    //
+    // get first general transfer descriptor
+    //
+    TransferDescriptor = (POHCI_GENERAL_TD)OutDescriptor->HeadLogicalDescriptor;
+
+    while(TransferDescriptor)
+    {
+        //
+        // get next
+        //
+        NextTransferDescriptor =
(POHCI_GENERAL_TD)TransferDescriptor->NextLogicalDescriptor;
+
+        //
+        // is there a buffer associated
+        //
+        if (TransferDescriptor->BufferSize)
+        {
+            //
+            // release buffer
+            //
+            m_DmaManager->Release(TransferDescriptor->BufferLogical,
TransferDescriptor->BufferSize);
+        }
+
+        //
+        // release descriptor
+        //
+        m_DmaManager->Release(TransferDescriptor, sizeof(OHCI_GENERAL_TD));
+
+        //
+        // move to next
+        //
+        TransferDescriptor = NextTransferDescriptor;
+    }
+
+    //
+    // release endpoint descriptor
+    //
+    m_DmaManager->Release(OutDescriptor, sizeof(OHCI_ENDPOINT_DESCRIPTOR));
     //
     // signal completion event