Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhci/uhci.c

    rd57122c r8b54fe6  
    8989};
    9090/*----------------------------------------------------------------------------*/
     91/** Get address of the device identified by handle.
     92 *
     93 * @param[in] fun DDF instance of the function to use.
     94 * @param[in] handle DDF handle of the driver seeking its USB address.
     95 * @param[out] address Found address.
     96 */
     97static int usb_iface_get_address(
     98    ddf_fun_t *fun, devman_handle_t handle, usb_address_t *address)
     99{
     100        assert(fun);
     101        usb_device_manager_t *manager =
     102            &dev_to_uhci(fun->dev)->hc.generic.dev_manager;
     103        const usb_address_t addr = usb_device_manager_find(manager, handle);
     104
     105        if (addr < 0) {
     106                return addr;
     107        }
     108
     109        if (address != NULL) {
     110                *address = addr;
     111        }
     112
     113        return EOK;
     114}
     115/*----------------------------------------------------------------------------*/
    91116/** Gets handle of the respective hc.
    92117 *
     
    109134static usb_iface_t usb_iface = {
    110135        .get_hc_handle = usb_iface_get_hc_handle,
     136        .get_address = usb_iface_get_address
    111137};
    112138/*----------------------------------------------------------------------------*/
     
    148174int device_setup_uhci(ddf_dev_t *device)
    149175{
    150         if (!device)
    151                 return EBADMEM;
    152 
    153         uhci_t *instance = ddf_dev_data_alloc(device, sizeof(uhci_t));
     176        assert(device);
     177        uhci_t *instance = malloc(sizeof(uhci_t));
    154178        if (instance == NULL) {
    155179                usb_log_error("Failed to allocate OHCI driver.\n");
     
    160184if (ret != EOK) { \
    161185        if (instance->hc_fun) \
     186                instance->hc_fun->ops = NULL; \
    162187                instance->hc_fun->driver_data = NULL; \
    163188                ddf_fun_destroy(instance->hc_fun); \
    164189        if (instance->rh_fun) {\
     190                instance->rh_fun->ops = NULL; \
    165191                instance->rh_fun->driver_data = NULL; \
    166192                ddf_fun_destroy(instance->rh_fun); \
    167193        } \
     194        device->driver_data = NULL; \
    168195        usb_log_error(message); \
    169196        return ret; \
     
    198225            "Failed to disable legacy USB: %s.\n", str_error(ret));
    199226
    200         const size_t ranges_count = hc_irq_pio_range_count();
    201         const size_t cmds_count = hc_irq_cmd_count();
    202         irq_pio_range_t irq_ranges[ranges_count];
    203         irq_cmd_t irq_cmds[cmds_count];
    204         ret = hc_get_irq_code(irq_ranges, sizeof(irq_ranges), irq_cmds,
    205             sizeof(irq_cmds), reg_base, reg_size);
     227        const size_t cmd_count = hc_irq_cmd_count();
     228        irq_cmd_t irq_cmds[cmd_count];
     229        ret =
     230            hc_get_irq_commands(irq_cmds, sizeof(irq_cmds), reg_base, reg_size);
    206231        CHECK_RET_DEST_FREE_RETURN(ret,
    207232            "Failed to generate IRQ commands: %s.\n", str_error(ret));
    208233
    209         irq_code_t irq_code = {
    210                 .rangecount = ranges_count,
    211                 .ranges = irq_ranges,
    212                 .cmdcount = cmds_count,
    213                 .cmds = irq_cmds
    214         };
     234        irq_code_t irq_code = { .cmdcount = cmd_count, .cmds = irq_cmds };
    215235
    216236        /* Register handler to avoid interrupt lockup */
     
    233253            "Failed to init uhci_hcd: %s.\n", str_error(ret));
    234254
     255        device->driver_data = instance;
     256
    235257#define CHECK_RET_FINI_RETURN(ret, message...) \
    236258if (ret != EOK) { \
Note: See TracChangeset for help on using the changeset viewer.