Changeset 7dd3318 in mainline for uspace/drv/uhci-hcd/uhci.c


Ignore:
Timestamp:
2011-02-12T02:00:54Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
83c439c
Parents:
f6309b6
Message:

Add support for batch processing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-hcd/uhci.c

    rf6309b6 r7dd3318  
    158158        const int low_speed = (tracker->speed == LOW_SPEED);
    159159        if (!allowed_usb_packet(
    160             low_speed, tracker->transfer_type, tracker->packet_size)) {
     160            low_speed, tracker->transfer_type, tracker->max_packet_size)) {
    161161                usb_log_warning("Invalid USB packet specified %s SPEED %d %zu.\n",
    162162                          low_speed ? "LOW" : "FULL" , tracker->transfer_type,
    163                     tracker->packet_size);
     163                    tracker->max_packet_size);
    164164                return ENOTSUP;
    165165        }
    166166        /* TODO: check available bandwith here */
    167 
    168         usb_log_debug2("Scheduler(%d) acquiring tracker list mutex.\n",
    169             fibril_get_id());
    170         fibril_mutex_lock(&instance->tracker_list_mutex);
    171         usb_log_debug2("Scheduler(%d) acquired tracker list mutex.\n",
    172             fibril_get_id());
    173167
    174168        transfer_list_t *list =
     
    176170        assert(list);
    177171        transfer_list_add_tracker(list, tracker);
    178         list_append(&tracker->link, &instance->tracker_list);
    179 
    180         tracker->scheduled_list = list;
    181 
    182         usb_log_debug2("Scheduler(%d) releasing tracker list mutex.\n",
    183             fibril_get_id());
    184         fibril_mutex_unlock(&instance->tracker_list_mutex);
    185         usb_log_debug2("Scheduler(%d) released tracker list mutex.\n",
    186             fibril_get_id());
    187172
    188173        return EOK;
     
    196181
    197182        while(1) {
    198                 LIST_INITIALIZE(done_trackers);
    199                 /* tracker iteration */
    200 
    201                 usb_log_debug2("Cleaner(%d) acquiring tracker list mutex.\n",
    202                     fibril_get_id());
    203                 fibril_mutex_lock(&instance->tracker_list_mutex);
    204                 usb_log_debug2("Cleaner(%d) acquired tracker list mutex.\n",
    205                     fibril_get_id());
    206 
    207                 link_t *current = instance->tracker_list.next;
    208                 while (current != &instance->tracker_list)
    209                 {
    210 
    211                         link_t *next = current->next;
    212                         tracker_t *tracker = list_get_instance(current, tracker_t, link);
    213 
    214                         assert(current == &tracker->link);
    215                         assert(tracker);
    216                         assert(tracker->next_step);
    217                         assert(tracker->td);
    218 
    219                         if (!transfer_descriptor_is_active(tracker->td)) {
    220                                 usb_log_info("Found inactive tracker with status: %x:%x.\n",
    221                                     tracker->td->status, tracker->td->device);
    222                                 list_remove(current);
    223                                 list_append(current, &done_trackers);
    224                         }
    225                         current = next;
    226                 }
    227 
    228                 usb_log_debug2("Cleaner(%d) releasing tracker list mutex.\n",
    229                     fibril_get_id());
    230                 fibril_mutex_unlock(&instance->tracker_list_mutex);
    231                 usb_log_debug2("Cleaner(%d) released tracker list mutex.\n",
    232                     fibril_get_id());
    233 
    234                 while (!list_empty(&done_trackers)) {
    235                         tracker_t *tracker = list_get_instance(
    236                           done_trackers.next, tracker_t, link);
    237                         list_remove(&tracker->link);
    238                         tracker->next_step(tracker);
    239                 }
     183                transfer_list_check(&instance->transfers_interrupt);
     184                transfer_list_check(&instance->transfers_control_slow);
     185                transfer_list_check(&instance->transfers_control_full);
     186                transfer_list_check(&instance->transfers_bulk_full);
    240187                async_usleep(UHCI_CLEANER_TIMEOUT);
    241188        }
Note: See TracChangeset for help on using the changeset viewer.