Changeset f97717d9 in mainline for uspace/drv/uhci-hcd/hc.c
- Timestamp:
- 2011-03-25T16:22:14Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- da3dafc, e6223239
- Parents:
- d8421c4 (diff), f08c560 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/hc.c
rd8421c4 rf97717d9 42 42 #include <usb_iface.h> 43 43 44 #include " uhci_hc.h"44 #include "hc.h" 45 45 46 46 static irq_cmd_t uhci_cmds[] = { … … 60 60 }; 61 61 /*----------------------------------------------------------------------------*/ 62 static int uhci_hc_init_transfer_lists(uhci_hc_t *instance);63 static int uhci_hc_init_mem_structures(uhci_hc_t *instance);64 static void uhci_hc_init_hw(uhci_hc_t *instance);65 66 static int uhci_hc_interrupt_emulator(void *arg);67 static int uhci_hc_debug_checker(void *arg);68 69 static bool allowed_usb_packet(62 static int hc_init_transfer_lists(hc_t *instance); 63 static int hc_init_mem_structures(hc_t *instance); 64 static void hc_init_hw(hc_t *instance); 65 66 static int hc_interrupt_emulator(void *arg); 67 static int hc_debug_checker(void *arg); 68 69 static bool usb_is_allowed( 70 70 bool low_speed, usb_transfer_type_t transfer, size_t size); 71 71 /*----------------------------------------------------------------------------*/ … … 82 82 * interrupt fibrils. 83 83 */ 84 int uhci_hc_init(uhci_hc_t *instance, ddf_fun_t *fun,84 int hc_init(hc_t *instance, ddf_fun_t *fun, 85 85 void *regs, size_t reg_size, bool interrupts) 86 86 { … … 112 112 io, reg_size); 113 113 114 ret = uhci_hc_init_mem_structures(instance);114 ret = hc_init_mem_structures(instance); 115 115 CHECK_RET_DEST_FUN_RETURN(ret, 116 116 "Failed to initialize UHCI memory structures.\n"); 117 117 118 uhci_hc_init_hw(instance);118 hc_init_hw(instance); 119 119 if (!interrupts) { 120 120 instance->cleaner = 121 fibril_create( uhci_hc_interrupt_emulator, instance);121 fibril_create(hc_interrupt_emulator, instance); 122 122 fibril_add_ready(instance->cleaner); 123 123 } else { … … 125 125 } 126 126 127 instance->debug_checker = fibril_create(uhci_hc_debug_checker, instance);128 fibril_add_ready(instance->debug_checker);129 130 usb_log_info("Started UHCI driver.\n"); 127 instance->debug_checker = 128 fibril_create(hc_debug_checker, instance); 129 // fibril_add_ready(instance->debug_checker); 130 131 131 return EOK; 132 132 #undef CHECK_RET_DEST_FUN_RETURN … … 138 138 * For magic values see UHCI Design Guide 139 139 */ 140 void uhci_hc_init_hw(uhci_hc_t *instance)140 void hc_init_hw(hc_t *instance) 141 141 { 142 142 assert(instance); … … 186 186 * - frame list page (needs to be one UHCI hw accessible 4K page) 187 187 */ 188 int uhci_hc_init_mem_structures(uhci_hc_t *instance)188 int hc_init_mem_structures(hc_t *instance) 189 189 { 190 190 assert(instance); … … 215 215 216 216 /* Init transfer lists */ 217 ret = uhci_hc_init_transfer_lists(instance);217 ret = hc_init_transfer_lists(instance); 218 218 CHECK_RET_DEST_CMDS_RETURN(ret, "Failed to init transfer lists.\n"); 219 219 usb_log_debug("Initialized transfer lists.\n"); … … 236 236 237 237 /* Init device keeper*/ 238 usb_device_keeper_init(&instance-> device_manager);238 usb_device_keeper_init(&instance->manager); 239 239 usb_log_debug("Initialized device manager.\n"); 240 240 … … 252 252 * USB scheduling. Sets pointer table for quick access. 253 253 */ 254 int uhci_hc_init_transfer_lists(uhci_hc_t *instance)254 int hc_init_transfer_lists(hc_t *instance) 255 255 { 256 256 assert(instance); … … 318 318 * Checks for bandwidth availability and appends the batch to the proper queue. 319 319 */ 320 int uhci_hc_schedule(uhci_hc_t *instance, usb_transfer_batch_t *batch)320 int hc_schedule(hc_t *instance, usb_transfer_batch_t *batch) 321 321 { 322 322 assert(instance); 323 323 assert(batch); 324 324 const int low_speed = (batch->speed == USB_SPEED_LOW); 325 if (! allowed_usb_packet(325 if (!usb_is_allowed( 326 326 low_speed, batch->transfer_type, batch->max_packet_size)) { 327 327 usb_log_warning( 328 "Invalid USB packetspecified %s SPEED %d %zu.\n",328 "Invalid USB transfer specified %s SPEED %d %zu.\n", 329 329 low_speed ? "LOW" : "FULL" , batch->transfer_type, 330 330 batch->max_packet_size); … … 351 351 * - resume from suspend state (not implemented) 352 352 */ 353 void uhci_hc_interrupt(uhci_hc_t *instance, uint16_t status)353 void hc_interrupt(hc_t *instance, uint16_t status) 354 354 { 355 355 assert(instance); … … 373 373 if (instance->hw_failures < UHCI_ALLOWED_HW_FAIL) { 374 374 /* reinitialize hw, this triggers virtual disconnect*/ 375 uhci_hc_init_hw(instance);375 hc_init_hw(instance); 376 376 } else { 377 377 usb_log_fatal("Too many UHCI hardware failures!.\n"); 378 uhci_hc_fini(instance);378 hc_fini(instance); 379 379 } 380 380 } … … 386 386 * @return EOK (should never return) 387 387 */ 388 int uhci_hc_interrupt_emulator(void* arg)388 int hc_interrupt_emulator(void* arg) 389 389 { 390 390 usb_log_debug("Started interrupt emulator.\n"); 391 uhci_hc_t *instance = (uhci_hc_t*)arg;391 hc_t *instance = (hc_t*)arg; 392 392 assert(instance); 393 393 … … 398 398 if (status != 0) 399 399 usb_log_debug2("UHCI status: %x.\n", status); 400 uhci_hc_interrupt(instance, status);400 hc_interrupt(instance, status); 401 401 async_usleep(UHCI_CLEANER_TIMEOUT); 402 402 } … … 409 409 * @return EOK (should never return) 410 410 */ 411 int uhci_hc_debug_checker(void *arg)412 { 413 uhci_hc_t *instance = (uhci_hc_t*)arg;411 int hc_debug_checker(void *arg) 412 { 413 hc_t *instance = (hc_t*)arg; 414 414 assert(instance); 415 415 … … 471 471 } 472 472 /*----------------------------------------------------------------------------*/ 473 /** Check transfer packets,for USB validity473 /** Check transfers for USB validity 474 474 * 475 475 * @param[in] low_speed Transfer speed. 476 476 * @param[in] transfer Transer type 477 * @param[in] size Maximum size of usedpackets477 * @param[in] size Size of data packets 478 478 * @return True if transaction is allowed by USB specs, false otherwise 479 479 */ 480 bool allowed_usb_packet(480 bool usb_is_allowed( 481 481 bool low_speed, usb_transfer_type_t transfer, size_t size) 482 482 {
Note:
See TracChangeset
for help on using the changeset viewer.