Changeset eaf1e3d in mainline for uspace/drv/ohci/hc.c


Ignore:
Timestamp:
2011-04-10T21:42:14Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7628050
Parents:
78d4e1f
Message:

Fix TD data direction values

Only check transfer queues if there are retired TDs (WDH interrupt event)
OHCI control transfers work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ohci/hc.c

    r78d4e1f reaf1e3d  
    160160{
    161161        assert(instance);
    162 //      if ((status & ~IS_SF) == 0) /* ignore sof status */
    163 //              return;
     162        if ((status & ~IS_SF) == 0) /* ignore sof status */
     163                return;
    164164        if (status & IS_RHSC)
    165165                rh_interrupt(&instance->rh);
    166166
    167         usb_log_fatal("OHCI interrupt: %x.\n", status);
    168 
    169 
    170         LIST_INITIALIZE(done);
    171         transfer_list_remove_finished(&instance->transfers_interrupt, &done);
    172         transfer_list_remove_finished(&instance->transfers_isochronous, &done);
    173         transfer_list_remove_finished(&instance->transfers_control, &done);
    174         transfer_list_remove_finished(&instance->transfers_bulk, &done);
    175 
    176         while (!list_empty(&done)) {
    177                 link_t *item = done.next;
    178                 list_remove(item);
    179                 usb_transfer_batch_t *batch =
    180                     list_get_instance(item, usb_transfer_batch_t, link);
    181                 usb_transfer_batch_finish(batch);
     167        usb_log_debug("OHCI interrupt: %x.\n", status);
     168
     169
     170        if (status & IS_WDH) {
     171                LIST_INITIALIZE(done);
     172                transfer_list_remove_finished(
     173                    &instance->transfers_interrupt, &done);
     174                transfer_list_remove_finished(
     175                    &instance->transfers_isochronous, &done);
     176                transfer_list_remove_finished(
     177                    &instance->transfers_control, &done);
     178                transfer_list_remove_finished(
     179                    &instance->transfers_bulk, &done);
     180
     181                while (!list_empty(&done)) {
     182                        link_t *item = done.next;
     183                        list_remove(item);
     184                        usb_transfer_batch_t *batch =
     185                            list_get_instance(item, usb_transfer_batch_t, link);
     186                        usb_transfer_batch_finish(batch);
     187                }
    182188        }
    183189}
     
    191197                instance->registers->interrupt_status = status;
    192198                hc_interrupt(instance, status);
    193                 async_usleep(2000000);
     199                async_usleep(10000);
    194200        }
    195201        return EOK;
Note: See TracChangeset for help on using the changeset viewer.