Changeset 7013b14 in mainline for uspace/drv/ohci/hc.c


Ignore:
Timestamp:
2011-04-13T14:19:12Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d6522dd
Parents:
9a6fde4
Message:

Batch processing implemented to use static EDs.

File:
1 edited

Legend:

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

    r9a6fde4 r7013b14  
    109109            ret, str_error(ret));
    110110
    111         instance->ddf_instance = fun;
    112111        usb_device_keeper_init(&instance->manager);
    113112        ret = usb_endpoint_manager_init(&instance->ep_manager,
     
    130129                fibril_add_ready(instance->interrupt_emulator);
    131130        }
     131
     132        list_initialize(&instance->pending_batches);
    132133#undef CHECK_RET_RETURN
    133134        return EOK;
     
    262263                return rh_request(&instance->rh, batch);
    263264        }
    264 #if 0
     265
    265266        fibril_mutex_lock(&instance->guard);
     267        list_append(&batch->link, &instance->pending_batches);
     268        batch_commit(batch);
    266269        switch (batch->ep->transfer_type) {
    267270        case USB_TRANSFER_CONTROL:
    268                 instance->registers->control &= ~C_CLE;
    269                 transfer_list_add_batch(
    270                     instance->transfers[batch->ep->transfer_type], batch);
    271271                instance->registers->command_status |= CS_CLF;
    272                 usb_log_debug2("Set CS control transfer filled: %x.\n",
    273                         instance->registers->command_status);
    274                 instance->registers->control_current = 0;
    275                 instance->registers->control |= C_CLE;
    276272                break;
    277273        case USB_TRANSFER_BULK:
    278                 instance->registers->control &= ~C_BLE;
    279                 transfer_list_add_batch(
    280                     instance->transfers[batch->ep->transfer_type], batch);
    281274                instance->registers->command_status |= CS_BLF;
    282                 usb_log_debug2("Set bulk transfer filled: %x.\n",
    283                         instance->registers->command_status);
    284                 instance->registers->control |= C_BLE;
    285                 break;
    286         case USB_TRANSFER_INTERRUPT:
    287         case USB_TRANSFER_ISOCHRONOUS:
    288                 instance->registers->control &= (~C_PLE & ~C_IE);
    289                 transfer_list_add_batch(
    290                     instance->transfers[batch->ep->transfer_type], batch);
    291                 instance->registers->control |= C_PLE | C_IE;
    292                 usb_log_debug2("Added periodic transfer: %x.\n",
    293                     instance->registers->periodic_current);
    294275                break;
    295276        default:
    296277                break;
    297278        }
     279
    298280        fibril_mutex_unlock(&instance->guard);
    299 #endif
    300281        return EOK;
    301282}
     
    317298                usb_log_debug2("Periodic current: %p.\n",
    318299                    instance->registers->periodic_current);
    319 #if 0
    320                 LIST_INITIALIZE(done);
    321                 transfer_list_remove_finished(
    322                     &instance->transfers_interrupt, &done);
    323                 transfer_list_remove_finished(
    324                     &instance->transfers_isochronous, &done);
    325                 transfer_list_remove_finished(
    326                     &instance->transfers_control, &done);
    327                 transfer_list_remove_finished(
    328                     &instance->transfers_bulk, &done);
    329 
    330                 while (!list_empty(&done)) {
    331                         link_t *item = done.next;
    332                         list_remove(item);
     300
     301                link_t *current = instance->pending_batches.next;
     302                while (current != &instance->pending_batches) {
     303                        link_t *next = current->next;
    333304                        usb_transfer_batch_t *batch =
    334                             list_get_instance(item, usb_transfer_batch_t, link);
    335                         usb_transfer_batch_finish(batch);
     305                            usb_transfer_batch_from_link(current);
     306
     307                        if (batch_is_complete(batch)) {
     308                                usb_transfer_batch_finish(batch);
     309                        }
     310                        current = next;
    336311                }
    337312                fibril_mutex_unlock(&instance->guard);
    338 #endif
    339313        }
    340314}
Note: See TracChangeset for help on using the changeset viewer.