Changeset 83c439c in mainline
- 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
- Location:
- uspace/drv/uhci-hcd
- Files:
-
- 6 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/Makefile
r7dd3318 r83c439c 40 40 uhci_struct/transfer_descriptor.c \ 41 41 pci.c \ 42 tracker.c42 batch.c 43 43 44 44 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/uhci-hcd/batch.c
r7dd3318 r83c439c 36 36 #include <usb/debug.h> 37 37 38 #include " tracker.h"38 #include "batch.h" 39 39 #include "transfer_list.h" 40 40 #include "uhci.h" … … 43 43 #define DEFAULT_ERROR_COUNT 3 44 44 45 static int tracker_schedule(tracker_t *instance);46 47 static void tracker_call_in(tracker_t *instance);48 static void tracker_call_out(tracker_t *instance);49 static void tracker_call_in_and_dispose(tracker_t *instance);50 static void tracker_call_out_and_dispose(tracker_t *instance);51 52 53 tracker_t * tracker_get(device_t *dev, usb_target_t target,45 static int batch_schedule(batch_t *instance); 46 47 static void batch_call_in(batch_t *instance); 48 static void batch_call_out(batch_t *instance); 49 static void batch_call_in_and_dispose(batch_t *instance); 50 static void batch_call_out_and_dispose(batch_t *instance); 51 52 53 batch_t * batch_get(device_t *dev, usb_target_t target, 54 54 usb_transfer_type_t transfer_type, size_t max_packet_size, 55 55 dev_speed_t speed, char *buffer, size_t size, … … 61 61 assert(func_in != NULL || func_out != NULL); 62 62 63 tracker_t *instance = malloc(sizeof(tracker_t));63 batch_t *instance = malloc(sizeof(batch_t)); 64 64 if (instance == NULL) { 65 usb_log_error("Failed to allocate trackerinstance.\n");65 usb_log_error("Failed to allocate batch instance.\n"); 66 66 return NULL; 67 67 } … … 136 136 } 137 137 /*----------------------------------------------------------------------------*/ 138 bool tracker_is_complete(tracker_t *instance)138 bool batch_is_complete(batch_t *instance) 139 139 { 140 140 assert(instance); … … 157 157 } 158 158 /*----------------------------------------------------------------------------*/ 159 void tracker_control_write(tracker_t *instance)159 void batch_control_write(batch_t *instance) 160 160 { 161 161 assert(instance); … … 187 187 0, 1, false, instance->target, USB_PID_IN, NULL, NULL); 188 188 189 instance->next_step = tracker_call_out_and_dispose;190 tracker_schedule(instance);191 } 192 /*----------------------------------------------------------------------------*/ 193 void tracker_control_read(tracker_t *instance)189 instance->next_step = batch_call_out_and_dispose; 190 batch_schedule(instance); 191 } 192 /*----------------------------------------------------------------------------*/ 193 void batch_control_read(batch_t *instance) 194 194 { 195 195 assert(instance); … … 218 218 0, 1, false, instance->target, USB_PID_OUT, NULL, NULL); 219 219 220 instance->next_step = tracker_call_in_and_dispose;221 tracker_schedule(instance);222 } 223 /*----------------------------------------------------------------------------*/ 224 void tracker_interrupt_in(tracker_t *instance)220 instance->next_step = batch_call_in_and_dispose; 221 batch_schedule(instance); 222 } 223 /*----------------------------------------------------------------------------*/ 224 void batch_interrupt_in(batch_t *instance) 225 225 { 226 226 assert(instance); … … 240 240 } 241 241 242 instance->next_step = tracker_call_in_and_dispose;243 tracker_schedule(instance);244 } 245 /*----------------------------------------------------------------------------*/ 246 void tracker_interrupt_out(tracker_t *instance)242 instance->next_step = batch_call_in_and_dispose; 243 batch_schedule(instance); 244 } 245 /*----------------------------------------------------------------------------*/ 246 void batch_interrupt_out(batch_t *instance) 247 247 { 248 248 assert(instance); … … 264 264 } 265 265 266 instance->next_step = tracker_call_out_and_dispose;267 tracker_schedule(instance);268 } 269 /*----------------------------------------------------------------------------*/ 270 void tracker_call_in(tracker_t *instance)266 instance->next_step = batch_call_out_and_dispose; 267 batch_schedule(instance); 268 } 269 /*----------------------------------------------------------------------------*/ 270 void batch_call_in(batch_t *instance) 271 271 { 272 272 assert(instance); … … 284 284 } 285 285 /*----------------------------------------------------------------------------*/ 286 void tracker_call_out(tracker_t *instance)286 void batch_call_out(batch_t *instance) 287 287 { 288 288 assert(instance); … … 295 295 } 296 296 /*----------------------------------------------------------------------------*/ 297 void tracker_call_in_and_dispose(tracker_t *instance)298 { 299 assert(instance); 300 tracker_call_in(instance);301 usb_log_debug("Disposing tracker: %p.\n", instance);297 void batch_call_in_and_dispose(batch_t *instance) 298 { 299 assert(instance); 300 batch_call_in(instance); 301 usb_log_debug("Disposing batch: %p.\n", instance); 302 302 free32(instance->tds); 303 303 free32(instance->qh); … … 307 307 } 308 308 /*----------------------------------------------------------------------------*/ 309 void tracker_call_out_and_dispose(tracker_t *instance)310 { 311 assert(instance); 312 tracker_call_out(instance);313 usb_log_debug("Disposing tracker: %p.\n", instance);309 void batch_call_out_and_dispose(batch_t *instance) 310 { 311 assert(instance); 312 batch_call_out(instance); 313 usb_log_debug("Disposing batch: %p.\n", instance); 314 314 free32(instance->tds); 315 315 free32(instance->qh); … … 319 319 } 320 320 /*----------------------------------------------------------------------------*/ 321 int tracker_schedule(tracker_t *instance)321 int batch_schedule(batch_t *instance) 322 322 { 323 323 assert(instance); … … 328 328 /*----------------------------------------------------------------------------*/ 329 329 /* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */ 330 void tracker_control_setup_old(tracker_t *instance)330 void batch_control_setup_old(batch_t *instance) 331 331 { 332 332 assert(instance); … … 338 338 USB_PID_SETUP, instance->setup_buffer, NULL); 339 339 340 instance->next_step = tracker_call_out_and_dispose;341 tracker_schedule(instance);342 } 343 /*----------------------------------------------------------------------------*/ 344 void tracker_control_write_data_old(tracker_t *instance)340 instance->next_step = batch_call_out_and_dispose; 341 batch_schedule(instance); 342 } 343 /*----------------------------------------------------------------------------*/ 344 void batch_control_write_data_old(batch_t *instance) 345 345 { 346 346 assert(instance); 347 347 instance->packets -= 2; 348 tracker_interrupt_out(instance);349 } 350 /*----------------------------------------------------------------------------*/ 351 void tracker_control_read_data_old(tracker_t *instance)348 batch_interrupt_out(instance); 349 } 350 /*----------------------------------------------------------------------------*/ 351 void batch_control_read_data_old(batch_t *instance) 352 352 { 353 353 assert(instance); 354 354 instance->packets -= 2; 355 tracker_interrupt_in(instance);356 } 357 /*----------------------------------------------------------------------------*/ 358 void tracker_control_write_status_old(tracker_t *instance)355 batch_interrupt_in(instance); 356 } 357 /*----------------------------------------------------------------------------*/ 358 void batch_control_write_status_old(batch_t *instance) 359 359 { 360 360 assert(instance); … … 362 362 transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT, 363 363 0, 1, false, instance->target, USB_PID_IN, NULL, NULL); 364 instance->next_step = tracker_call_in_and_dispose;365 tracker_schedule(instance);366 } 367 /*----------------------------------------------------------------------------*/ 368 void tracker_control_read_status_old(tracker_t *instance)364 instance->next_step = batch_call_in_and_dispose; 365 batch_schedule(instance); 366 } 367 /*----------------------------------------------------------------------------*/ 368 void batch_control_read_status_old(batch_t *instance) 369 369 { 370 370 assert(instance); … … 372 372 transfer_descriptor_init(instance->tds, DEFAULT_ERROR_COUNT, 373 373 0, 1, false, instance->target, USB_PID_OUT, NULL, NULL); 374 instance->next_step = tracker_call_out_and_dispose;375 tracker_schedule(instance);374 instance->next_step = batch_call_out_and_dispose; 375 batch_schedule(instance); 376 376 } 377 377 /** -
uspace/drv/uhci-hcd/batch.h
r7dd3318 r83c439c 32 32 * @brief UHCI driver 33 33 */ 34 #ifndef DRV_UHCI_ TRACKER_H35 #define DRV_UHCI_ TRACKER_H34 #ifndef DRV_UHCI_BATCH_H 35 #define DRV_UHCI_BATCH_H 36 36 37 37 #include <adt/list.h> … … 48 48 } dev_speed_t; 49 49 50 typedef struct tracker50 typedef struct batch 51 51 { 52 52 link_t link; … … 71 71 queue_head_t *qh; 72 72 transfer_descriptor_t *tds; 73 void (*next_step)(struct tracker*);74 } tracker_t;73 void (*next_step)(struct batch*); 74 } batch_t; 75 75 76 tracker_t * tracker_get(device_t *dev, usb_target_t target,76 batch_t * batch_get(device_t *dev, usb_target_t target, 77 77 usb_transfer_type_t transfer_type, size_t max_packet_size, 78 78 dev_speed_t speed, char *buffer, size_t size, … … 81 81 usbhc_iface_transfer_out_callback_t func_out, void *arg); 82 82 83 bool tracker_is_complete(tracker_t *instance);83 bool batch_is_complete(batch_t *instance); 84 84 85 void tracker_control_write(tracker_t *instance);85 void batch_control_write(batch_t *instance); 86 86 87 void tracker_control_read(tracker_t *instance);87 void batch_control_read(batch_t *instance); 88 88 89 void tracker_interrupt_in(tracker_t *instance);89 void batch_interrupt_in(batch_t *instance); 90 90 91 void tracker_interrupt_out(tracker_t *instance);91 void batch_interrupt_out(batch_t *instance); 92 92 93 93 /* DEPRECATED FUNCTIONS NEEDED BY THE OLD API */ 94 void tracker_control_setup_old(tracker_t *instance);94 void batch_control_setup_old(batch_t *instance); 95 95 96 void tracker_control_write_data_old(tracker_t *instance);96 void batch_control_write_data_old(batch_t *instance); 97 97 98 void tracker_control_read_data_old(tracker_t *instance);98 void batch_control_read_data_old(batch_t *instance); 99 99 100 void tracker_control_write_status_old(tracker_t *instance);100 void batch_control_write_status_old(batch_t *instance); 101 101 102 void tracker_control_read_status_old(tracker_t *instance);102 void batch_control_read_status_old(batch_t *instance); 103 103 #endif 104 104 /** -
uspace/drv/uhci-hcd/iface.c
r7dd3318 r83c439c 109 109 dev_speed_t speed = FULL_SPEED; 110 110 111 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_INTERRUPT,111 batch_t *batch = batch_get(dev, target, USB_TRANSFER_INTERRUPT, 112 112 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 113 if (! tracker)114 return ENOMEM; 115 tracker_interrupt_out(tracker);113 if (!batch) 114 return ENOMEM; 115 batch_interrupt_out(batch); 116 116 return EOK; 117 117 } … … 124 124 dev_speed_t speed = FULL_SPEED; 125 125 126 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_INTERRUPT,126 batch_t *batch = batch_get(dev, target, USB_TRANSFER_INTERRUPT, 127 127 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg); 128 if (! tracker)129 return ENOMEM; 130 tracker_interrupt_in(tracker);128 if (!batch) 129 return ENOMEM; 130 batch_interrupt_in(batch); 131 131 return EOK; 132 132 } … … 139 139 dev_speed_t speed = FULL_SPEED; 140 140 141 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,141 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 142 142 max_packet_size, speed, data, size, setup_data, setup_size, 143 143 NULL, callback, arg); 144 if (! tracker)145 return ENOMEM; 146 tracker_control_write(tracker);144 if (!batch) 145 return ENOMEM; 146 batch_control_write(batch); 147 147 return EOK; 148 148 } … … 155 155 dev_speed_t speed = FULL_SPEED; 156 156 157 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,157 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 158 158 max_packet_size, speed, data, size, setup_data, setup_size, callback, 159 159 NULL, arg); 160 if (! tracker)161 return ENOMEM; 162 tracker_control_read(tracker);160 if (!batch) 161 return ENOMEM; 162 batch_control_read(batch); 163 163 return EOK; 164 164 } … … 172 172 173 173 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 174 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,174 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 175 175 max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg); 176 if (! tracker)177 return ENOMEM; 178 tracker_control_setup_old(tracker);176 if (!batch) 177 return ENOMEM; 178 batch_control_setup_old(batch); 179 179 return EOK; 180 180 } … … 188 188 189 189 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 190 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,190 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 191 191 max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg); 192 if (! tracker)193 return ENOMEM; 194 tracker_control_write_data_old(tracker);192 if (!batch) 193 return ENOMEM; 194 batch_control_write_data_old(batch); 195 195 return EOK; 196 196 } … … 203 203 204 204 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 205 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,205 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 206 206 max_packet_size, speed, NULL, 0, NULL, 0, callback, NULL, arg); 207 if (! tracker)208 return ENOMEM; 209 tracker_control_write_status_old(tracker);207 if (!batch) 208 return ENOMEM; 209 batch_control_write_status_old(batch); 210 210 return EOK; 211 211 } … … 219 219 220 220 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 221 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,221 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 222 222 max_packet_size, speed, NULL, 0, data, size, NULL, callback, arg); 223 if (! tracker)224 return ENOMEM; 225 tracker_control_setup_old(tracker);223 if (!batch) 224 return ENOMEM; 225 batch_control_setup_old(batch); 226 226 return EOK; 227 227 } … … 235 235 236 236 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 237 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,237 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 238 238 max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg); 239 if (! tracker)240 return ENOMEM; 241 tracker_control_read_data_old(tracker);239 if (!batch) 240 return ENOMEM; 241 batch_control_read_data_old(batch); 242 242 return EOK; 243 243 } … … 250 250 251 251 usb_log_warning("Using deprecated API %s.\n", __FUNCTION__); 252 tracker_t *tracker = tracker_get(dev, target, USB_TRANSFER_CONTROL,252 batch_t *batch = batch_get(dev, target, USB_TRANSFER_CONTROL, 253 253 max_packet_size, speed, NULL, 0, NULL, 0, NULL, callback, arg); 254 if (! tracker)255 return ENOMEM; 256 tracker_control_read_status_old(tracker);254 if (!batch) 255 return ENOMEM; 256 batch_control_read_status_old(batch); 257 257 return EOK; 258 258 } -
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; -
uspace/drv/uhci-hcd/transfer_list.h
r7dd3318 r83c439c 37 37 #include "uhci_struct/queue_head.h" 38 38 39 #include " tracker.h"39 #include "batch.h" 40 40 41 41 typedef struct transfer_list … … 45 45 struct transfer_list *next; 46 46 const char *name; 47 link_t tracker_list;47 link_t batch_list; 48 48 } transfer_list_t; 49 49 … … 60 60 void transfer_list_check(transfer_list_t *instance); 61 61 62 void transfer_list_add_ tracker(transfer_list_t *instance, tracker_t *tracker);62 void transfer_list_add_batch(transfer_list_t *instance, batch_t *batch); 63 63 #endif 64 64 /** -
uspace/drv/uhci-hcd/uhci.c
r7dd3318 r83c439c 89 89 pio_write_32(&instance->registers->flbaseadd, (uint32_t)pa); 90 90 91 list_initialize(&instance-> tracker_list);92 fibril_mutex_initialize(&instance-> tracker_list_mutex);91 list_initialize(&instance->batch_list); 92 fibril_mutex_initialize(&instance->batch_list_mutex); 93 93 94 94 instance->cleaner = fibril_create(uhci_clean_finished, instance); … … 152 152 } 153 153 /*----------------------------------------------------------------------------*/ 154 int uhci_schedule(uhci_t *instance, tracker_t *tracker)155 { 156 assert(instance); 157 assert( tracker);158 const int low_speed = ( tracker->speed == LOW_SPEED);154 int uhci_schedule(uhci_t *instance, batch_t *batch) 155 { 156 assert(instance); 157 assert(batch); 158 const int low_speed = (batch->speed == LOW_SPEED); 159 159 if (!allowed_usb_packet( 160 low_speed, tracker->transfer_type, tracker->max_packet_size)) {160 low_speed, batch->transfer_type, batch->max_packet_size)) { 161 161 usb_log_warning("Invalid USB packet specified %s SPEED %d %zu.\n", 162 low_speed ? "LOW" : "FULL" , tracker->transfer_type,163 tracker->max_packet_size);162 low_speed ? "LOW" : "FULL" , batch->transfer_type, 163 batch->max_packet_size); 164 164 return ENOTSUP; 165 165 } … … 167 167 168 168 transfer_list_t *list = 169 instance->transfers[low_speed][ tracker->transfer_type];169 instance->transfers[low_speed][batch->transfer_type]; 170 170 assert(list); 171 transfer_list_add_ tracker(list, tracker);171 transfer_list_add_batch(list, batch); 172 172 173 173 return EOK; -
uspace/drv/uhci-hcd/uhci.h
r7dd3318 r83c439c 44 44 45 45 #include "transfer_list.h" 46 #include " tracker.h"46 #include "batch.h" 47 47 48 48 typedef struct uhci_regs { … … 81 81 link_pointer_t *frame_list; 82 82 83 link_t tracker_list;84 fibril_mutex_t tracker_list_mutex;83 link_t batch_list; 84 fibril_mutex_t batch_list_mutex; 85 85 86 86 transfer_list_t transfers_bulk_full; … … 113 113 void *arg ); 114 114 115 int uhci_schedule(uhci_t *instance, tracker_t *tracker);115 int uhci_schedule(uhci_t *instance, batch_t *batch); 116 116 117 117 static inline uhci_t * dev_to_uhci(device_t *dev)
Note:
See TracChangeset
for help on using the changeset viewer.