Changeset 25565

Show
Ignore:
Timestamp:
05/19/08 16:41:58 (6 months ago)
Author:
mmlr
Message:

* Correct removal of failed transfers by applying the address mask. As the head

pointer also contains the toggle carry and the halt bit (which was obviously
always set as the endpoint had an error) the address comparison failed and
the head was dead in the water with all further transfers timing out until
a subsequet cancel cleaned the mess up again.

* Add the OHCI host controller driver to the image as it should now be fully

functional except for isochronous transfers.

Location:
haiku/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • haiku/trunk/build/jam/HaikuImage

    r25536 r25565  
    150150        : ahci ; 
    151151AddFilesToHaikuImage beos system add-ons kernel busses usb 
    152         : <usb>uhci <usb>ehci ; 
     152        : <usb>uhci <usb>ohci <usb>ehci ; 
    153153AddFilesToHaikuImage beos system add-ons kernel console : vga_text ; 
    154154AddFilesToHaikuImage beos system add-ons kernel debugger 
  • haiku/trunk/src/add-ons/kernel/busses/usb/ohci.cpp

    r25558 r25565  
    993993                        // break the descriptor chain on the last descriptor 
    994994                        transfer->last_descriptor->next_logical_descriptor = NULL; 
    995                         TRACE(("usb_ohci: transfer %p done\n", transfer)); 
     995                        TRACE(("usb_ohci: transfer %p done with status 0x%08lx\n", 
     996                                transfer, callbackStatus)); 
    996997 
    997998                        // if canceled the callback has already been called 
     
    12411242        ohci_general_td *descriptor = transfer->first_descriptor; 
    12421243        while (descriptor) { 
    1243                 if (endpoint->head_physical_descriptor == descriptor->physical_address) { 
     1244                if ((endpoint->head_physical_descriptor & OHCI_ENDPOINT_HEAD_MASK) 
     1245                        == descriptor->physical_address) { 
    12441246                        // This descriptor caused the halt. Advance the head pointer. This 
    12451247                        // will either move the head to the next valid transfer that can