Ignore:
Timestamp:
2017-12-08T21:17:27Z (6 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
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)
Message:

Return IRQ handles via a separate out parameter in all uspace code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhost/src/ddf_helpers.c

    r9233e9d r071a1ddb  
    742742 * @param[in] gen_irq_code IRQ code generator.
    743743 *
    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.
    746747 */
    747748int hcd_ddf_setup_interrupts(ddf_dev_t *device,
    748749    const hw_res_list_parsed_t *hw_res,
    749750    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)
    751753{
    752754
     
    765767
    766768        /* 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);
    769771        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);
    778772        if (ret != EOK) {
    779773                usb_log_error("Failed to register interrupt handler: %s.\n",
    780774                    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;
    785786}
    786787
     
    876877        interrupt_handler_t *irq_handler =
    877878            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);
    881883        if (irqs_enabled) {
    882884                usb_log_debug("Hw interrupts enabled.\n");
    883885        }
    884886
    885         if (driver->claim)
     887        if (driver->claim) {
    886888                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                }
    891894        }
    892895
Note: See TracChangeset for help on using the changeset viewer.