Ignore:
File:
1 edited

Legend:

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

    r68e5406 rcccd60c3  
    481481        }};
    482482
    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) {
    486485                usb_log_error("Failed to reserve new address: %s.",
    487                     str_error(ret));
    488                 return ret;
     486                    str_error(address));
     487                return address;
    489488        }
    490489
     
    519518        usb_log_debug("Device(%d): Requesting first 8B of device descriptor.",
    520519            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,
    523521            &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;
    531526                usb_log_error("Device(%d): Failed to get 8B of dev descr: %s.",
    532527                    address, str_error(ret));
     
    557552
    558553        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");
    561556
    562557        usb_log_debug("Device(%d): Removing default (0:0) EP.", address);
    563558        hcd_remove_ep(hcd, default_target, USB_DIRECTION_BOTH);
    564559
    565         if (ret != EOK) {
     560        if (got != 0) {
    566561                usb_log_error("Device(%d): Failed to set new address: %s.",
    567                     address, str_error(ret));
     562                    address, str_error(got));
    568563                hcd_remove_ep(hcd, target, USB_DIRECTION_BOTH);
    569564                hcd_release_address(hcd, address);
    570                 return ret;
     565                return got;
    571566        }
    572567
     
    577572        usb_log_debug("Device(%d): Requesting full device descriptor.",
    578573            address);
    579         ret = hcd_send_batch_sync(hcd, target, USB_DIRECTION_IN,
     574        got = hcd_send_batch_sync(hcd, target, USB_DIRECTION_IN,
    580575            &desc, sizeof(desc), *(uint64_t *)&get_device_desc,
    581             "read device descriptor", &got);
     576            "read device descriptor");
    582577        if (ret != EOK) {
    583578                usb_log_error("Device(%d): Failed to set get dev descriptor: %s",
     
    747742 * @param[in] gen_irq_code IRQ code generator.
    748743 *
    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.
    752746 */
    753747int hcd_ddf_setup_interrupts(ddf_dev_t *device,
    754748    const hw_res_list_parsed_t *hw_res,
    755749    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))
    758751{
    759752
     
    764757        irq_code_t irq_code = {0};
    765758
    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) {
    769761                usb_log_error("Failed to generate IRQ code: %s.\n",
    770                     str_error(ret));
    771                 return ret;
     762                    str_error(irq));
     763                return irq;
    772764        }
    773765
    774766        /* 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);
    777769        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);
    778778        if (ret != EOK) {
    779779                usb_log_error("Failed to register interrupt handler: %s.\n",
    780780                    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;
    792785}
    793786
     
    795788 *
    796789 * @param[in] dev DDF instance of the device to use.
     790 * @param[in] iid (Unused).
    797791 * @param[in] call Pointer to the call from kernel.
    798792 */
    799 void ddf_hcd_gen_irq_handler(ipc_call_t *call, ddf_dev_t *dev)
     793void ddf_hcd_gen_irq_handler(ipc_callid_t iid, ipc_call_t *call, ddf_dev_t *dev)
    800794{
    801795        assert(dev);
     
    883877        interrupt_handler_t *irq_handler =
    884878            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);
    889882        if (irqs_enabled) {
    890883                usb_log_debug("Hw interrupts enabled.\n");
    891884        }
    892885
    893         if (driver->claim) {
     886        if (driver->claim)
    894887                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;
    900892        }
    901893
Note: See TracChangeset for help on using the changeset viewer.