Changeset 83c439c in mainline for uspace/drv/uhci-hcd/transfer_list.c
- Timestamp:
- 2011-02-12T02:12:52Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2806cd2
- Parents:
- 7dd3318
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/transfer_list.c
r7dd3318 r83c439c 51 51 52 52 queue_head_init(instance->queue_head); 53 list_initialize(&instance-> tracker_list);53 list_initialize(&instance->batch_list); 54 54 return EOK; 55 55 } … … 64 64 } 65 65 /*----------------------------------------------------------------------------*/ 66 void transfer_list_add_ tracker(transfer_list_t *instance, tracker_t *tracker)66 void transfer_list_add_batch(transfer_list_t *instance, batch_t *batch) 67 67 { 68 68 assert(instance); 69 assert( tracker);69 assert(batch); 70 70 71 uint32_t pa = (uintptr_t)addr_to_phys( tracker->qh);71 uint32_t pa = (uintptr_t)addr_to_phys(batch->qh); 72 72 assert((pa & LINK_POINTER_ADDRESS_MASK) == pa); 73 73 pa |= LINK_POINTER_QUEUE_HEAD_FLAG; … … 76 76 if ((instance->queue_head->element & LINK_POINTER_TERMINATE_FLAG) != 0) { 77 77 /* there is nothing scheduled */ 78 list_append(& tracker->link, &instance->tracker_list);78 list_append(&batch->link, &instance->batch_list); 79 79 instance->queue_head->element = pa; 80 usb_log_debug2("Added tracker(%p) to queue %s first.\n",81 tracker, instance->name);80 usb_log_debug2("Added batch(%p) to queue %s first.\n", 81 batch, instance->name); 82 82 return; 83 83 } 84 84 /* now we can be sure that there is someting scheduled */ 85 assert(!list_empty(&instance-> tracker_list));86 tracker_t *first = list_get_instance(87 instance-> tracker_list.next, tracker_t, link);88 tracker_t *last = list_get_instance(89 instance-> tracker_list.prev, tracker_t, link);85 assert(!list_empty(&instance->batch_list)); 86 batch_t *first = list_get_instance( 87 instance->batch_list.next, batch_t, link); 88 batch_t *last = list_get_instance( 89 instance->batch_list.prev, batch_t, link); 90 90 queue_head_append_qh(last->qh, pa); 91 list_append(& tracker->link, &instance->tracker_list);92 usb_log_debug2("Added tracker(%p) to queue %s last, first is %p.\n",93 tracker, instance->name, first );91 list_append(&batch->link, &instance->batch_list); 92 usb_log_debug2("Added batch(%p) to queue %s last, first is %p.\n", 93 batch, instance->name, first ); 94 94 } 95 95 /*----------------------------------------------------------------------------*/ 96 static void transfer_list_remove_ tracker(97 transfer_list_t *instance, tracker_t *tracker)96 static void transfer_list_remove_batch( 97 transfer_list_t *instance, batch_t *batch) 98 98 { 99 99 assert(instance); 100 assert( tracker);100 assert(batch); 101 101 assert(instance->queue_head); 102 assert( tracker->qh);102 assert(batch->qh); 103 103 104 104 /* I'm the first one here */ 105 if ( tracker->link.next == &instance->tracker_list) {105 if (batch->link.next == &instance->batch_list) { 106 106 usb_log_debug("Removing tracer %p was first, next element %x.\n", 107 tracker, tracker->qh->next_queue);108 instance->queue_head->element = tracker->qh->next_queue;107 batch, batch->qh->next_queue); 108 instance->queue_head->element = batch->qh->next_queue; 109 109 } else { 110 110 usb_log_debug("Removing tracer %p was NOT first, next element %x.\n", 111 tracker, tracker->qh->next_queue);112 tracker_t *prev = list_get_instance(tracker->link.prev, tracker_t, link);113 prev->qh->next_queue = tracker->qh->next_queue;111 batch, batch->qh->next_queue); 112 batch_t *prev = list_get_instance(batch->link.prev, batch_t, link); 113 prev->qh->next_queue = batch->qh->next_queue; 114 114 } 115 list_remove(& tracker->link);115 list_remove(&batch->link); 116 116 } 117 117 /*----------------------------------------------------------------------------*/ … … 119 119 { 120 120 assert(instance); 121 link_t *current = instance-> tracker_list.next;122 while (current != &instance-> tracker_list) {121 link_t *current = instance->batch_list.next; 122 while (current != &instance->batch_list) { 123 123 link_t *next = current->next; 124 tracker_t *tracker = list_get_instance(current, tracker_t, link);124 batch_t *batch = list_get_instance(current, batch_t, link); 125 125 126 if ( tracker_is_complete(tracker)) {127 transfer_list_remove_ tracker(instance, tracker);128 tracker->next_step(tracker);126 if (batch_is_complete(batch)) { 127 transfer_list_remove_batch(instance, batch); 128 batch->next_step(batch); 129 129 } 130 130 current = next;
Note:
See TracChangeset
for help on using the changeset viewer.