Ignore:
File:
1 edited

Legend:

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

    r1dc4a5e rd57122c  
    4141
    4242#include "uhci.h"
    43 #include "iface.h"
    4443#include "pci.h"
    4544
     
    8786/** Operations supported by the HC driver */
    8887static ddf_dev_ops_t hc_ops = {
    89         .interfaces[USBHC_DEV_IFACE] = &hc_iface, /* see iface.h/c */
    90 };
    91 /*----------------------------------------------------------------------------*/
    92 /** Get address of the device identified by handle.
    93  *
    94  * @param[in] fun DDF instance of the function to use.
    95  * @param[in] handle DDF handle of the driver seeking its USB address.
    96  * @param[out] address Found address.
    97  */
    98 static int usb_iface_get_address(
    99     ddf_fun_t *fun, devman_handle_t handle, usb_address_t *address)
    100 {
    101         assert(fun);
    102         usb_device_keeper_t *manager = &dev_to_uhci(fun->dev)->hc.manager;
    103         usb_address_t addr = usb_device_keeper_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 }
     88        .interfaces[USBHC_DEV_IFACE] = &hcd_iface, /* see iface.h/c */
     89};
    11590/*----------------------------------------------------------------------------*/
    11691/** Gets handle of the respective hc.
     
    134109static usb_iface_t usb_iface = {
    135110        .get_hc_handle = usb_iface_get_hc_handle,
    136         .get_address = usb_iface_get_address
    137111};
    138112/*----------------------------------------------------------------------------*/
     
    174148int device_setup_uhci(ddf_dev_t *device)
    175149{
    176         assert(device);
    177         uhci_t *instance = malloc(sizeof(uhci_t));
     150        if (!device)
     151                return EBADMEM;
     152
     153        uhci_t *instance = ddf_dev_data_alloc(device, sizeof(uhci_t));
    178154        if (instance == NULL) {
    179155                usb_log_error("Failed to allocate OHCI driver.\n");
     
    184160if (ret != EOK) { \
    185161        if (instance->hc_fun) \
    186                 instance->hc_fun->ops = NULL; \
    187162                instance->hc_fun->driver_data = NULL; \
    188163                ddf_fun_destroy(instance->hc_fun); \
    189164        if (instance->rh_fun) {\
    190                 instance->rh_fun->ops = NULL; \
    191165                instance->rh_fun->driver_data = NULL; \
    192166                ddf_fun_destroy(instance->rh_fun); \
    193167        } \
    194         free(instance); \
    195         device->driver_data = NULL; \
    196168        usb_log_error(message); \
    197169        return ret; \
     
    203175        CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI HC function.\n");
    204176        instance->hc_fun->ops = &hc_ops;
    205         instance->hc_fun->driver_data = &instance->hc;
     177        instance->hc_fun->driver_data = &instance->hc.generic;
    206178
    207179        instance->rh_fun = ddf_fun_create(device, fun_inner, "uhci_rh");
     
    226198            "Failed to disable legacy USB: %s.\n", str_error(ret));
    227199
    228         const size_t cmd_count = hc_irq_cmd_count();
    229         irq_cmd_t irq_cmds[cmd_count];
    230         ret =
    231             hc_get_irq_commands(irq_cmds, sizeof(irq_cmds), reg_base, reg_size);
     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);
    232206        CHECK_RET_DEST_FREE_RETURN(ret,
    233207            "Failed to generate IRQ commands: %s.\n", str_error(ret));
    234208
    235         irq_code_t irq_code = { .cmdcount = cmd_count, .cmds = irq_cmds };
     209        irq_code_t irq_code = {
     210                .rangecount = ranges_count,
     211                .ranges = irq_ranges,
     212                .cmdcount = cmds_count,
     213                .cmds = irq_cmds
     214        };
    236215
    237216        /* Register handler to avoid interrupt lockup */
     
    254233            "Failed to init uhci_hcd: %s.\n", str_error(ret));
    255234
    256         device->driver_data = instance;
    257 
    258235#define CHECK_RET_FINI_RETURN(ret, message...) \
    259236if (ret != EOK) { \
Note: See TracChangeset for help on using the changeset viewer.