Changeset 50114ef in mainline for uspace/drv/uhci-hcd/hc.c
- Timestamp:
- 2011-03-24T13:45:48Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 915a851
- Parents:
- 5f80527 (diff), e18e0d6 (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
r5f80527 r50114ef 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); 127 instance->debug_checker = 128 fibril_create(hc_debug_checker, instance); 129 // fibril_add_ready(instance->debug_checker); 129 130 130 131 return EOK; … … 137 138 * For magic values see UHCI Design Guide 138 139 */ 139 void uhci_hc_init_hw(uhci_hc_t *instance)140 void hc_init_hw(hc_t *instance) 140 141 { 141 142 assert(instance); … … 185 186 * - frame list page (needs to be one UHCI hw accessible 4K page) 186 187 */ 187 int uhci_hc_init_mem_structures(uhci_hc_t *instance)188 int hc_init_mem_structures(hc_t *instance) 188 189 { 189 190 assert(instance); … … 214 215 215 216 /* Init transfer lists */ 216 ret = uhci_hc_init_transfer_lists(instance);217 ret = hc_init_transfer_lists(instance); 217 218 CHECK_RET_DEST_CMDS_RETURN(ret, "Failed to init transfer lists.\n"); 218 219 usb_log_debug("Initialized transfer lists.\n"); … … 235 236 236 237 /* Init device keeper*/ 237 usb_device_keeper_init(&instance-> device_manager);238 usb_device_keeper_init(&instance->manager); 238 239 usb_log_debug("Initialized device manager.\n"); 239 240 … … 251 252 * USB scheduling. Sets pointer table for quick access. 252 253 */ 253 int uhci_hc_init_transfer_lists(uhci_hc_t *instance)254 int hc_init_transfer_lists(hc_t *instance) 254 255 { 255 256 assert(instance); … … 317 318 * Checks for bandwidth availability and appends the batch to the proper queue. 318 319 */ 319 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) 320 321 { 321 322 assert(instance); 322 323 assert(batch); 323 324 const int low_speed = (batch->speed == USB_SPEED_LOW); 324 if (! allowed_usb_packet(325 if (!usb_is_allowed( 325 326 low_speed, batch->transfer_type, batch->max_packet_size)) { 326 327 usb_log_warning( 327 "Invalid USB packetspecified %s SPEED %d %zu.\n",328 "Invalid USB transfer specified %s SPEED %d %zu.\n", 328 329 low_speed ? "LOW" : "FULL" , batch->transfer_type, 329 330 batch->max_packet_size); … … 350 351 * - resume from suspend state (not implemented) 351 352 */ 352 void uhci_hc_interrupt(uhci_hc_t *instance, uint16_t status)353 void hc_interrupt(hc_t *instance, uint16_t status) 353 354 { 354 355 assert(instance); … … 372 373 if (instance->hw_failures < UHCI_ALLOWED_HW_FAIL) { 373 374 /* reinitialize hw, this triggers virtual disconnect*/ 374 uhci_hc_init_hw(instance);375 hc_init_hw(instance); 375 376 } else { 376 377 usb_log_fatal("Too many UHCI hardware failures!.\n"); 377 uhci_hc_fini(instance);378 hc_fini(instance); 378 379 } 379 380 } … … 385 386 * @return EOK (should never return) 386 387 */ 387 int uhci_hc_interrupt_emulator(void* arg)388 int hc_interrupt_emulator(void* arg) 388 389 { 389 390 usb_log_debug("Started interrupt emulator.\n"); 390 uhci_hc_t *instance = (uhci_hc_t*)arg;391 hc_t *instance = (hc_t*)arg; 391 392 assert(instance); 392 393 … … 397 398 if (status != 0) 398 399 usb_log_debug2("UHCI status: %x.\n", status); 399 uhci_hc_interrupt(instance, status);400 hc_interrupt(instance, status); 400 401 async_usleep(UHCI_CLEANER_TIMEOUT); 401 402 } … … 408 409 * @return EOK (should never return) 409 410 */ 410 int uhci_hc_debug_checker(void *arg)411 { 412 uhci_hc_t *instance = (uhci_hc_t*)arg;411 int hc_debug_checker(void *arg) 412 { 413 hc_t *instance = (hc_t*)arg; 413 414 assert(instance); 414 415 … … 470 471 } 471 472 /*----------------------------------------------------------------------------*/ 472 /** Check transfer packets,for USB validity473 /** Check transfers for USB validity 473 474 * 474 475 * @param[in] low_speed Transfer speed. 475 476 * @param[in] transfer Transer type 476 * @param[in] size Maximum size of usedpackets477 * @param[in] size Size of data packets 477 478 * @return True if transaction is allowed by USB specs, false otherwise 478 479 */ 479 bool allowed_usb_packet(480 bool usb_is_allowed( 480 481 bool low_speed, usb_transfer_type_t transfer, size_t size) 481 482 {
Note:
See TracChangeset
for help on using the changeset viewer.