[ros-diffs] [janderwald] 55293: [USBEHCI] - Update async address everytime a new queue head is added as specified in EHCI spec section 3.2 - Add more checks - Vmware EHCI not yet working

janderwald at svn.reactos.org janderwald at svn.reactos.org
Sun Jan 29 17:30:31 UTC 2012


Author: janderwald
Date: Sun Jan 29 17:30:31 2012
New Revision: 55293

URL: http://svn.reactos.org/svn/reactos?rev=55293&view=rev
Log:
[USBEHCI]
- Update async address everytime a new queue head is added as specified in EHCI spec section 3.2
- Add more checks
- Vmware EHCI not yet working

Modified:
    branches/usb-bringup-trunk/drivers/usb/usbehci_new/interfaces.h
    branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_queue.cpp
    branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_request.cpp

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci_new/interfaces.h
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci_new/interfaces.h?rev=55293&r1=55292&r2=55293&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci_new/interfaces.h [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci_new/interfaces.h [iso-8859-1] Sun Jan 29 17:30:31 2012
@@ -301,6 +301,15 @@
 // Description: releases the device lock
 
     virtual void ReleaseDeviceLock(KIRQL OldLevel) = 0;
+
+	    // set command
+    virtual void SetCommandRegister(struct _EHCI_USBCMD_CONTENT *UsbCmd) = 0;
+
+    // get command
+    virtual void GetCommandRegister(struct _EHCI_USBCMD_CONTENT *UsbCmd) = 0;
+
+
+
 };
 
 typedef IUSBHardwareDevice *PUSBHARDWAREDEVICE;

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_queue.cpp
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_queue.cpp?rev=55293&r1=55292&r2=55293&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_queue.cpp [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_queue.cpp [iso-8859-1] Sun Jan 29 17:30:31 2012
@@ -141,6 +141,11 @@
     //
     Status = InitializeSyncSchedule(Hardware, MemManager);
 
+    //
+    // store hardware object
+    //
+    m_Hardware = Hardware;
+
     return Status;
 }
 
@@ -358,6 +363,13 @@
         KeAcquireSpinLock(m_Lock, &OldLevel);
         LinkQueueHead(AsyncListQueueHead, QueueHead);
         KeReleaseSpinLock(m_Lock, OldLevel);
+
+        EHCI_USBCMD_CONTENT UsbCmd;
+        m_Hardware->GetCommandRegister(&UsbCmd);
+        ASSERT(UsbCmd.AsyncEnable == TRUE);
+
+        m_Hardware->SetAsyncListRegister(QueueHead->PhysicalAddr);
+
     }
 
 
@@ -419,6 +431,7 @@
     //
     // Link the LIST_ENTRYs
     //
+    ASSERT(IsListEmpty(&HeadQueueHead->LinkedQueueHeads));
     InsertTailList(&HeadQueueHead->LinkedQueueHeads, &NewQueueHead->LinkedQueueHeads);
 
     //
@@ -426,6 +439,7 @@
     //
     Entry = NewQueueHead->LinkedQueueHeads.Blink;
     LastQueueHead = CONTAINING_RECORD(Entry, QUEUE_HEAD, LinkedQueueHeads);
+    ASSERT(LastQueueHead == HeadQueueHead);
     LastQueueHead->HorizontalLinkPointer = (NewQueueHead->PhysicalAddr | QH_TYPE_QH);
 
     //
@@ -435,6 +449,11 @@
     NextQueueHead = CONTAINING_RECORD(Entry, QUEUE_HEAD, LinkedQueueHeads);
     ASSERT(NextQueueHead == HeadQueueHead);
     NewQueueHead->HorizontalLinkPointer = (NextQueueHead->PhysicalAddr | QH_TYPE_QH);
+
+    //
+    // head queue head must be halted
+    //
+    PC_ASSERT(HeadQueueHead->Token.Bits.Halted == TRUE);
 }
 
 //

Modified: branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_request.cpp
URL: http://svn.reactos.org/svn/reactos/branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_request.cpp?rev=55293&r1=55292&r2=55293&view=diff
==============================================================================
--- branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_request.cpp [iso-8859-1] (original)
+++ branches/usb-bringup-trunk/drivers/usb/usbehci_new/usb_request.cpp [iso-8859-1] Sun Jan 29 17:30:31 2012
@@ -767,7 +767,14 @@
     // link transfer descriptors to queue head
     //
     QueueHead->NextPointer = m_TransferDescriptors[0]->PhysicalAddr;
-
+/*
+	if (m_TransferBufferMDL)
+	    QueueHead->AlternateNextPointer = m_TransferDescriptors[2]->PhysicalAddr;
+	else
+	    QueueHead->AlternateNextPointer = m_TransferDescriptors[1]->PhysicalAddr;
+
+	QueueHead->EndPointCapabilities.InterruptScheduleMask = 0x0;
+*/
     //
     // store result
     //




More information about the Ros-diffs mailing list