Changeset 9a818a9 in mainline for uspace/drv/uhci-hcd/uhci.c
- Timestamp:
- 2011-02-07T12:49:19Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- e2172cf8
- Parents:
- da17cf0
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/uhci.c
rda17cf0 r9a818a9 86 86 87 87 const uintptr_t pa = (uintptr_t)addr_to_phys(instance->frame_list); 88 89 88 pio_write_32(&instance->registers->flbaseadd, (uint32_t)pa); 89 90 list_initialize(&instance->tracker_list); 90 91 91 92 instance->cleaner = fibril_create(uhci_clean_finished, instance); … … 209 210 return EOK; 210 211 } 211 /*---------------------------------------------------------------------------*/ 212 /*----------------------------------------------------------------------------*/ 213 int uhci_schedule(uhci_t *instance, tracker_t *tracker) 214 { 215 assert(instance); 216 assert(tracker); 217 const int low_speed = (tracker->speed == LOW_SPEED); 218 if (!allowed_usb_packet( 219 low_speed, tracker->transfer_type, tracker->packet_size)) { 220 usb_log_warning("Invalid USB packet specified %s SPEED %d %zu.\n", 221 low_speed ? "LOW" : "FULL" , tracker->transfer_type, 222 tracker->packet_size); 223 return ENOTSUP; 224 } 225 /* TODO: check available bandwith here */ 226 227 transfer_list_t *list = 228 instance->transfers[low_speed][tracker->transfer_type]; 229 assert(list); 230 transfer_list_add_tracker(list, tracker); 231 list_append(&tracker->link, &instance->tracker_list); 232 233 return EOK; 234 } 235 /*----------------------------------------------------------------------------*/ 212 236 int uhci_clean_finished(void* arg) 213 237 { … … 217 241 218 242 while(1) { 219 usb_log_debug("Running cleaning fibril on: %p.\n", instance); 243 /* tracker iteration */ 244 link_t *current = instance->tracker_list.next; 245 while (current != &instance->tracker_list) 246 { 247 link_t *next = current->next; 248 tracker_t *tracker = list_get_instance(current, tracker_t, link); 249 assert(current == &tracker->link); 250 if (!transfer_descriptor_is_active(tracker->td)) { 251 usb_log_debug("Found inactive tracker.\n"); 252 list_remove(current); 253 tracker->next_step(tracker); 254 } 255 current = next; 256 } 220 257 /* iterate all transfer queues */ 221 258 transfer_list_t *current_list = &instance->transfers_interrupt;
Note:
See TracChangeset
for help on using the changeset viewer.