Author: janderwald
Date: Mon May 30 06:55:32 2011
New Revision: 52004

URL: http://svn.reactos.org/svn/reactos?rev=52004&view=rev
Log:
[USBOHCI]
- More traces to fix isochronous problem
- Fix broken assert found by mjmartin

Modified:
    branches/usb-bringup/drivers/usb/usbohci/hardware.cpp
    branches/usb-bringup/drivers/usb/usbohci/hardware.h
    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/hardware.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci/hardware.cpp?rev=52004&r1=52003&r2=52004&view=diff
==============================================================================
--- branches/usb-bringup/drivers/usb/usbohci/hardware.cpp [iso-8859-1] 
(original)
+++ branches/usb-bringup/drivers/usb/usbohci/hardware.cpp [iso-8859-1] Mon May 
30 06:55:32 2011
@@ -545,12 +545,15 @@
     //
     ASSERT((Control & OHCI_HC_FUNCTIONAL_STATE_MASK) == 
OHCI_HC_FUNCTIONAL_STATE_OPERATIONAL);
     ASSERT((Control & OHCI_ENABLE_LIST) == OHCI_ENABLE_LIST);
+    DPRINT1("Control %x\n", Control);
 
     //
     // get frame interval
     //
-    FrameInterval = (READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + 
OHCI_FRAME_INTERVAL_OFFSET)) & OHCI_FRAME_INTERVAL_TOGGLE) ^ 
OHCI_FRAME_INTERVAL_TOGGLE;
+    FrameInterval = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + 
OHCI_FRAME_INTERVAL_OFFSET));
+    DPRINT1("FrameInterval %x IntervalValue %x\n", FrameInterval, 
m_IntervalValue);
     FrameInterval |= OHCI_FSMPS(m_IntervalValue) | m_IntervalValue;
+    DPRINT1("FrameInterval %x\n", FrameInterval);
 
     //
     // write frame interval
@@ -562,7 +565,7 @@
     //
     Periodic = OHCI_PERIODIC(m_IntervalValue);
     WRITE_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + 
OHCI_PERIODIC_START_OFFSET), Periodic);
-
+    DPRINT1("Periodic Start %x\n", Periodic);
 
     //
     // read descriptor
@@ -918,6 +921,8 @@
     // store interval value for later
     //
     m_IntervalValue = OHCI_GET_INTERVAL_VALUE(FrameInterval);
+
+    DPRINT1("FrameInterval %x Interval %x\n", FrameInterval, m_IntervalValue);
 
     //
     // now reset controller
@@ -1206,10 +1211,30 @@
 CUSBHardwareDevice::GetCurrentFrameNumber(
     PULONG FrameNumber)
 {
+    ULONG Control;
+    ULONG Number;
+
+
+    Number = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + 
OHCI_FRAME_INTERVAL_NUMBER_OFFSET));
+    DPRINT1("FrameNumberInterval %x Frame %x\n", Number, 
m_HCCA->CurrentFrameNumber);
+
+    //
+    // remove reserved bits
+    //
+    Number &= 0xFFFF;
+
     //
     // store frame number
     //
-    *FrameNumber = m_HCCA->CurrentFrameNumber;
+    *FrameNumber = Number;
+
+    //
+    // is the controller started
+    //
+    Control = READ_REGISTER_ULONG((PULONG)((PUCHAR)m_Base + 
OHCI_CONTROL_OFFSET));
+    ASSERT((Control & OHCI_ENABLE_LIST) == OHCI_ENABLE_LIST);
+
+
 }
 
 VOID
@@ -1339,7 +1364,7 @@
     //
     // defer processing
     //
-    DPRINT("Status %x Acknowledge %x\n", Status, Acknowledge);
+    DPRINT1("Status %x Acknowledge %x FrameNumber %x\n", Status, Acknowledge, 
This->m_HCCA->CurrentFrameNumber);
     KeInsertQueueDpc(&This->m_IntDpcObject, (PVOID)Status, (PVOID)(DoneHead & 
~1));
 
     //

Modified: branches/usb-bringup/drivers/usb/usbohci/hardware.h
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci/hardware.h?rev=52004&r1=52003&r2=52004&view=diff
==============================================================================
--- branches/usb-bringup/drivers/usb/usbohci/hardware.h [iso-8859-1] (original)
+++ branches/usb-bringup/drivers/usb/usbohci/hardware.h [iso-8859-1] Mon May 30 
06:55:32 2011
@@ -99,6 +99,11 @@
 #define OHCI_FRAME_INTERVAL_TOGGLE          0x80000000
 
 //
+// frame interval
+//
+#define OHCI_FRAME_INTERVAL_NUMBER_OFFSET          0x3C
+
+//
 // periodic start register
 //
 #define OHCI_PERIODIC_START_OFFSET             0x40

Modified: branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci/usb_queue.cpp?rev=52004&r1=52003&r2=52004&view=diff
==============================================================================
--- 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] Mon May 
30 06:55:32 2011
@@ -278,6 +278,16 @@
             //
             CurrentDescriptor = CurrentDescriptor->NextLogicalDescriptor;
         }
+
+        //
+        // get current frame number
+        //
+        m_Hardware->GetCurrentFrameNumber(&FrameNumber);
+
+        DPRINT1("Hardware 1ms %p Iso %p\n",m_InterruptEndpoints[0], 
m_IsoHeadEndpointDescriptor);
+               ASSERT(m_InterruptEndpoints[0]->NextPhysicalEndpoint == 
m_IsoHeadEndpointDescriptor->PhysicalAddress.LowPart);
+
+        PrintEndpointList(m_IsoHeadEndpointDescriptor);
     }
 
     //
@@ -699,7 +709,7 @@
     //
     // sanity check
     //
-    ASSERT(InterruptInterval < OHCI_BIGGEST_INTERVAL);
+    ASSERT(InterruptInterval <= OHCI_BIGGEST_INTERVAL);
 
     //
     // find interrupt index

Modified: branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/usb-bringup/drivers/usb/usbohci/usb_request.cpp?rev=52004&r1=52003&r2=52004&view=diff
==============================================================================
--- 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] Mon 
May 30 06:55:32 2011
@@ -628,7 +628,7 @@
     //
     // initialize descriptor, hardware part
     //
-    Descriptor->Flags = OHCI_ITD_SET_FRAME_COUNT(FrameCount) | 
OHCI_ITD_SET_DELAY_INTERRUPT(OHCI_TD_INTERRUPT_NONE) |  
OHCI_TD_SET_CONDITION_CODE(OHCI_TD_CONDITION_NOT_ACCESSED);
+    Descriptor->Flags = OHCI_ITD_SET_FRAME_COUNT(FrameCount) | 
OHCI_ITD_SET_DELAY_INTERRUPT(OHCI_TD_INTERRUPT_NONE);// |  
OHCI_TD_SET_CONDITION_CODE(OHCI_TD_CONDITION_NOT_ACCESSED);
     Descriptor->BufferPhysical = 0;
     Descriptor->NextPhysicalDescriptor = 0;
     Descriptor->LastPhysicalByteAddress = 0;
@@ -661,6 +661,7 @@
     PVOID Buffer;
     PIO_STACK_LOCATION IoStack;
     PURB Urb;
+    PHYSICAL_ADDRESS Address;
 
     //
     // get current irp stack location
@@ -704,6 +705,10 @@
     //
     
ASSERT(ADDRESS_AND_SIZE_TO_SPAN_PAGES(MmGetMdlVirtualAddress(m_TransferBufferMDL),
 MmGetMdlByteCount(m_TransferBufferMDL)) <= 2);
 
+    Status = m_DmaManager->Allocate(m_TransferBufferLength, &Buffer, &Address);
+    ASSERT(Status == STATUS_SUCCESS);
+
+
     while(Index < Urb->UrbIsochronousTransfer.NumberOfPackets)
     {
         //
@@ -732,7 +737,7 @@
         //
         // get page offset
         //
-        PageOffset = MmGetMdlByteOffset(m_TransferBufferMDL);
+        PageOffset = BYTE_OFFSET(Page);
 
         //
         // initialize descriptor
@@ -935,6 +940,8 @@
     Descriptor->Flags |= OHCI_ENDPOINT_SET_DEVICE_ADDRESS(GetDeviceAddress());
     Descriptor->Flags |= 
OHCI_ENDPOINT_SET_ENDPOINT_NUMBER(GetEndpointAddress());
     Descriptor->Flags |= OHCI_ENDPOINT_SET_MAX_PACKET_SIZE(GetMaxPacketSize());
+
+    DPRINT1("Flags %x DeviceAddress %x EndpointAddress %x PacketSize %x\n", 
Descriptor->Flags, GetDeviceAddress(), GetEndpointAddress(), 
GetMaxPacketSize());
 
     //
     // is there an endpoint descriptor


Reply via email to