Changes in uspace/drv/uhci-hcd/hc.c [ea993d18:4c28d17] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/hc.c
rea993d18 r4c28d17 66 66 static int hc_interrupt_emulator(void *arg); 67 67 static int hc_debug_checker(void *arg); 68 #if 0 69 static bool usb_is_allowed( 70 bool low_speed, usb_transfer_type_t transfer, size_t size); 71 #endif 68 72 /*----------------------------------------------------------------------------*/ 69 73 /** Initialize UHCI hcd driver structure … … 85 89 int ret; 86 90 87 #define CHECK_RET_ RETURN(ret, message...) \91 #define CHECK_RET_DEST_FUN_RETURN(ret, message...) \ 88 92 if (ret != EOK) { \ 89 93 usb_log_error(message); \ 94 if (instance->ddf_instance) \ 95 ddf_fun_destroy(instance->ddf_instance); \ 90 96 return ret; \ 91 97 } else (void) 0 … … 93 99 instance->hw_interrupts = interrupts; 94 100 instance->hw_failures = 0; 101 102 /* Setup UHCI function. */ 103 instance->ddf_instance = fun; 95 104 96 105 /* allow access to hc control registers */ 97 106 regs_t *io; 98 107 ret = pio_enable(regs, reg_size, (void**)&io); 99 CHECK_RET_ RETURN(ret,108 CHECK_RET_DEST_FUN_RETURN(ret, 100 109 "Failed(%d) to gain access to registers at %p: %s.\n", 101 ret, io, str_error(ret));110 ret, str_error(ret), io); 102 111 instance->registers = io; 103 112 usb_log_debug("Device registers at %p(%u) accessible.\n", … … 105 114 106 115 ret = hc_init_mem_structures(instance); 107 CHECK_RET_RETURN(ret, 108 "Failed(%d) to initialize UHCI memory structures: %s.\n", 109 ret, str_error(ret)); 116 CHECK_RET_DEST_FUN_RETURN(ret, 117 "Failed to initialize UHCI memory structures.\n"); 110 118 111 119 hc_init_hw(instance); 112 120 if (!interrupts) { 113 instance-> interrupt_emulator =121 instance->cleaner = 114 122 fibril_create(hc_interrupt_emulator, instance); 115 fibril_add_ready(instance->interrupt_emulator); 116 } 117 (void)hc_debug_checker; 123 fibril_add_ready(instance->cleaner); 124 } else { 125 /* TODO: enable interrupts here */ 126 } 127 128 instance->debug_checker = 129 fibril_create(hc_debug_checker, instance); 130 // fibril_add_ready(instance->debug_checker); 118 131 119 132 return EOK; … … 215 228 /* Set all frames to point to the first queue head */ 216 229 const uint32_t queue = 217 LINK_POINTER_QH(addr_to_phys(218 instance->transfers_interrupt.queue_head));230 instance->transfers_interrupt.queue_head_pa 231 | LINK_POINTER_QUEUE_HEAD_FLAG; 219 232 220 233 unsigned i = 0; … … 223 236 } 224 237 225 /* Init device keeper 238 /* Init device keeper*/ 226 239 usb_device_keeper_init(&instance->manager); 227 240 usb_log_debug("Initialized device manager.\n"); … … 316 329 317 330 transfer_list_t *list = 318 instance->transfers[batch-> ep->speed][batch->ep->transfer_type];331 instance->transfers[batch->speed][batch->transfer_type]; 319 332 assert(list); 320 333 transfer_list_add_batch(list, batch); … … 466 479 #undef QH 467 480 } 481 /*----------------------------------------------------------------------------*/ 482 /** Check transfers for USB validity 483 * 484 * @param[in] low_speed Transfer speed. 485 * @param[in] transfer Transer type 486 * @param[in] size Size of data packets 487 * @return True if transaction is allowed by USB specs, false otherwise 488 */ 489 #if 0 490 bool usb_is_allowed( 491 bool low_speed, usb_transfer_type_t transfer, size_t size) 492 { 493 /* see USB specification chapter 5.5-5.8 for magic numbers used here */ 494 switch(transfer) 495 { 496 case USB_TRANSFER_ISOCHRONOUS: 497 return (!low_speed && size < 1024); 498 case USB_TRANSFER_INTERRUPT: 499 return size <= (low_speed ? 8 : 64); 500 case USB_TRANSFER_CONTROL: /* device specifies its own max size */ 501 return (size <= (low_speed ? 8 : 64)); 502 case USB_TRANSFER_BULK: /* device specifies its own max size */ 503 return (!low_speed && size <= 64); 504 } 505 return false; 506 } 507 #endif 468 508 /** 469 509 * @}
Note:
See TracChangeset
for help on using the changeset viewer.