Changes in uspace/lib/usbhost/src/ddf_helpers.c [68e5406:cccd60c3] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/ddf_helpers.c
r68e5406 rcccd60c3 481 481 }}; 482 482 483 usb_address_t address; 484 ret = hcd_request_address(hcd, speed, &address); 485 if (ret != EOK) { 483 const usb_address_t address = hcd_request_address(hcd, speed); 484 if (address < 0) { 486 485 usb_log_error("Failed to reserve new address: %s.", 487 str_error( ret));488 return ret;486 str_error(address)); 487 return address; 489 488 } 490 489 … … 519 518 usb_log_debug("Device(%d): Requesting first 8B of device descriptor.", 520 519 address); 521 size_t got; 522 ret = hcd_send_batch_sync(hcd, default_target, USB_DIRECTION_IN, 520 ssize_t got = hcd_send_batch_sync(hcd, default_target, USB_DIRECTION_IN, 523 521 &desc, CTRL_PIPE_MIN_PACKET_SIZE, *(uint64_t *)&get_device_desc_8, 524 "read first 8 bytes of dev descriptor", &got); 525 526 if (ret == EOK && got != CTRL_PIPE_MIN_PACKET_SIZE) { 527 ret = EOVERFLOW; 528 } 529 530 if (ret != EOK) { 522 "read first 8 bytes of dev descriptor"); 523 524 if (got != CTRL_PIPE_MIN_PACKET_SIZE) { 525 ret = got < 0 ? got : EOVERFLOW; 531 526 usb_log_error("Device(%d): Failed to get 8B of dev descr: %s.", 532 527 address, str_error(ret)); … … 557 552 558 553 usb_log_debug("Device(%d): Setting USB address.", address); 559 ret = hcd_send_batch_sync(hcd, default_target, USB_DIRECTION_OUT,560 NULL, 0, *(uint64_t *)&set_address, "set address" , &got);554 got = hcd_send_batch_sync(hcd, default_target, USB_DIRECTION_OUT, 555 NULL, 0, *(uint64_t *)&set_address, "set address"); 561 556 562 557 usb_log_debug("Device(%d): Removing default (0:0) EP.", address); 563 558 hcd_remove_ep(hcd, default_target, USB_DIRECTION_BOTH); 564 559 565 if ( ret != EOK) {560 if (got != 0) { 566 561 usb_log_error("Device(%d): Failed to set new address: %s.", 567 address, str_error( ret));562 address, str_error(got)); 568 563 hcd_remove_ep(hcd, target, USB_DIRECTION_BOTH); 569 564 hcd_release_address(hcd, address); 570 return ret;565 return got; 571 566 } 572 567 … … 577 572 usb_log_debug("Device(%d): Requesting full device descriptor.", 578 573 address); 579 ret = hcd_send_batch_sync(hcd, target, USB_DIRECTION_IN,574 got = hcd_send_batch_sync(hcd, target, USB_DIRECTION_IN, 580 575 &desc, sizeof(desc), *(uint64_t *)&get_device_desc, 581 "read device descriptor" , &got);576 "read device descriptor"); 582 577 if (ret != EOK) { 583 578 usb_log_error("Device(%d): Failed to set get dev descriptor: %s", … … 747 742 * @param[in] gen_irq_code IRQ code generator. 748 743 * 749 * @param[out] handle IRQ capability handle on success. 750 * 751 * @return Error code. 744 * @return IRQ capability handle on success. 745 * @return Negative error code. 752 746 */ 753 747 int hcd_ddf_setup_interrupts(ddf_dev_t *device, 754 748 const hw_res_list_parsed_t *hw_res, 755 749 interrupt_handler_t handler, 756 int (*gen_irq_code)(irq_code_t *, const hw_res_list_parsed_t *, int *), 757 cap_handle_t *handle) 750 int (*gen_irq_code)(irq_code_t *, const hw_res_list_parsed_t *hw_res)) 758 751 { 759 752 … … 764 757 irq_code_t irq_code = {0}; 765 758 766 int irq; 767 int ret = gen_irq_code(&irq_code, hw_res, &irq); 768 if (ret != EOK) { 759 const int irq = gen_irq_code(&irq_code, hw_res); 760 if (irq < 0) { 769 761 usb_log_error("Failed to generate IRQ code: %s.\n", 770 str_error( ret));771 return ret;762 str_error(irq)); 763 return irq; 772 764 } 773 765 774 766 /* Register handler to avoid interrupt lockup */ 775 ret= register_interrupt_handler(device, irq, handler,776 &irq_code , handle);767 const int irq_cap = register_interrupt_handler(device, irq, handler, 768 &irq_code); 777 769 irq_code_clean(&irq_code); 770 if (irq_cap < 0) { 771 usb_log_error("Failed to register interrupt handler: %s.\n", 772 str_error(irq_cap)); 773 return irq_cap; 774 } 775 776 /* Enable interrupts */ 777 int ret = hcd_ddf_enable_interrupt(device, irq); 778 778 if (ret != EOK) { 779 779 usb_log_error("Failed to register interrupt handler: %s.\n", 780 780 str_error(ret)); 781 return ret; 782 } 783 784 /* Enable interrupts */ 785 ret = hcd_ddf_enable_interrupt(device, irq); 786 if (ret != EOK) { 787 usb_log_error("Failed to register interrupt handler: %s.\n", 788 str_error(ret)); 789 unregister_interrupt_handler(device, *handle); 790 } 791 return ret; 781 unregister_interrupt_handler(device, irq_cap); 782 return ret; 783 } 784 return irq_cap; 792 785 } 793 786 … … 795 788 * 796 789 * @param[in] dev DDF instance of the device to use. 790 * @param[in] iid (Unused). 797 791 * @param[in] call Pointer to the call from kernel. 798 792 */ 799 void ddf_hcd_gen_irq_handler(ipc_call _t *call, ddf_dev_t *dev)793 void ddf_hcd_gen_irq_handler(ipc_callid_t iid, ipc_call_t *call, ddf_dev_t *dev) 800 794 { 801 795 assert(dev); … … 883 877 interrupt_handler_t *irq_handler = 884 878 driver->irq_handler ? driver->irq_handler : ddf_hcd_gen_irq_handler; 885 int irq_cap; 886 ret = hcd_ddf_setup_interrupts(device, &hw_res, 887 irq_handler, driver->irq_code_gen, &irq_cap); 888 bool irqs_enabled = (ret == EOK); 879 const int irq_cap = hcd_ddf_setup_interrupts(device, &hw_res, 880 irq_handler, driver->irq_code_gen); 881 bool irqs_enabled = !(irq_cap < 0); 889 882 if (irqs_enabled) { 890 883 usb_log_debug("Hw interrupts enabled.\n"); 891 884 } 892 885 893 if (driver->claim) {886 if (driver->claim) 894 887 ret = driver->claim(device); 895 if (ret != EOK) { 896 usb_log_error("Failed to claim `%s' for driver `%s'", 897 ddf_dev_get_name(device), driver->name); 898 return ret; 899 } 888 if (ret != EOK) { 889 usb_log_error("Failed to claim `%s' for driver `%s'", 890 ddf_dev_get_name(device), driver->name); 891 return ret; 900 892 } 901 893
Note:
See TracChangeset
for help on using the changeset viewer.