Changeset 071a1ddb in mainline for uspace/lib/usbhost/src/ddf_helpers.c
- Timestamp:
- 2017-12-08T21:17:27Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0722869, 569a51a
- Parents:
- 9233e9d
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-08 00:30:18)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2017-12-08 21:17:27)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/ddf_helpers.c
r9233e9d r071a1ddb 742 742 * @param[in] gen_irq_code IRQ code generator. 743 743 * 744 * @return IRQ capability handle on success. 745 * @return Negative error code. 744 * @param[out] handle IRQ capability handle on success. 745 * 746 * @return Error code. 746 747 */ 747 748 int hcd_ddf_setup_interrupts(ddf_dev_t *device, 748 749 const hw_res_list_parsed_t *hw_res, 749 750 interrupt_handler_t handler, 750 int (*gen_irq_code)(irq_code_t *, const hw_res_list_parsed_t *hw_res)) 751 int (*gen_irq_code)(irq_code_t *, const hw_res_list_parsed_t *hw_res), 752 cap_handle_t *handle) 751 753 { 752 754 … … 765 767 766 768 /* Register handler to avoid interrupt lockup */ 767 const int irq_cap= register_interrupt_handler(device, irq, handler,768 &irq_code );769 int ret = register_interrupt_handler(device, irq, handler, 770 &irq_code, handle); 769 771 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 772 if (ret != EOK) { 779 773 usb_log_error("Failed to register interrupt handler: %s.\n", 780 774 str_error(ret)); 781 unregister_interrupt_handler(device, irq_cap); 782 return ret; 783 } 784 return irq_cap; 775 return ret; 776 } 777 778 /* Enable interrupts */ 779 ret = hcd_ddf_enable_interrupt(device, irq); 780 if (ret != EOK) { 781 usb_log_error("Failed to register interrupt handler: %s.\n", 782 str_error(ret)); 783 unregister_interrupt_handler(device, *handle); 784 } 785 return ret; 785 786 } 786 787 … … 876 877 interrupt_handler_t *irq_handler = 877 878 driver->irq_handler ? driver->irq_handler : ddf_hcd_gen_irq_handler; 878 const int irq_cap = hcd_ddf_setup_interrupts(device, &hw_res, 879 irq_handler, driver->irq_code_gen); 880 bool irqs_enabled = !(irq_cap < 0); 879 int irq_cap; 880 ret = hcd_ddf_setup_interrupts(device, &hw_res, 881 irq_handler, driver->irq_code_gen, &irq_cap); 882 bool irqs_enabled = (ret == EOK); 881 883 if (irqs_enabled) { 882 884 usb_log_debug("Hw interrupts enabled.\n"); 883 885 } 884 886 885 if (driver->claim) 887 if (driver->claim) { 886 888 ret = driver->claim(device); 887 if (ret != EOK) { 888 usb_log_error("Failed to claim `%s' for driver `%s'", 889 ddf_dev_get_name(device), driver->name); 890 return ret; 889 if (ret != EOK) { 890 usb_log_error("Failed to claim `%s' for driver `%s'", 891 ddf_dev_get_name(device), driver->name); 892 return ret; 893 } 891 894 } 892 895
Note:
See TracChangeset
for help on using the changeset viewer.