Ignore:
File:
1 edited

Legend:

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

    rb500d60a r795448f  
    4141
    4242#include "uhci.h"
    43 #include "pci.h"
    44 
     43
     44#include "res.h"
    4545#include "hc.h"
    4646#include "root_hub.h"
     
    4949 * and USB root hub */
    5050typedef struct uhci {
    51         /** Pointer to DDF represenation of UHCI host controller */
     51        /** Pointer to DDF representation of UHCI host controller */
    5252        ddf_fun_t *hc_fun;
    53         /** Pointer to DDF represenation of UHCI root hub */
     53        /** Pointer to DDF representation of UHCI root hub */
    5454        ddf_fun_t *rh_fun;
    5555
    56         /** Internal driver's represenation of UHCI host controller */
     56        /** Internal driver's representation of UHCI host controller */
    5757        hc_t hc;
    58         /** Internal driver's represenation of UHCI root hub */
     58        /** Internal driver's representation of UHCI root hub */
    5959        rh_t rh;
    6060} uhci_t;
     
    148148int device_setup_uhci(ddf_dev_t *device)
    149149{
    150         assert(device);
    151         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));
    152154        if (instance == NULL) {
    153155                usb_log_error("Failed to allocate OHCI driver.\n");
     
    158160if (ret != EOK) { \
    159161        if (instance->hc_fun) \
    160                 instance->hc_fun->ops = NULL; \
    161162                instance->hc_fun->driver_data = NULL; \
    162163                ddf_fun_destroy(instance->hc_fun); \
    163164        if (instance->rh_fun) {\
    164                 instance->rh_fun->ops = NULL; \
    165165                instance->rh_fun->driver_data = NULL; \
    166166                ddf_fun_destroy(instance->rh_fun); \
    167167        } \
    168         device->driver_data = NULL; \
    169168        usb_log_error(message); \
    170169        return ret; \
     
    188187        int irq = 0;
    189188
    190         ret = pci_get_my_registers(device, &reg_base, &reg_size, &irq);
     189        ret = get_my_registers(device, &reg_base, &reg_size, &irq);
    191190        CHECK_RET_DEST_FREE_RETURN(ret,
    192191            "Failed to get I/O addresses for %" PRIun ": %s.\n",
     
    195194            (void *) reg_base, reg_size, irq);
    196195
    197         ret = pci_disable_legacy(device);
     196        ret = disable_legacy(device);
    198197        CHECK_RET_DEST_FREE_RETURN(ret,
    199198            "Failed to disable legacy USB: %s.\n", str_error(ret));
    200199
    201         const size_t cmd_count = hc_irq_cmd_count();
    202         irq_cmd_t irq_cmds[cmd_count];
    203         ret =
    204             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);
    205206        CHECK_RET_DEST_FREE_RETURN(ret,
    206207            "Failed to generate IRQ commands: %s.\n", str_error(ret));
    207208
    208         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        };
    209215
    210216        /* Register handler to avoid interrupt lockup */
     
    214220
    215221        bool interrupts = false;
    216         ret = pci_enable_interrupts(device);
     222        ret = enable_interrupts(device);
    217223        if (ret != EOK) {
    218224                usb_log_warning("Failed to enable interrupts: %s."
     
    227233            "Failed to init uhci_hcd: %s.\n", str_error(ret));
    228234
    229         device->driver_data = instance;
    230 
    231235#define CHECK_RET_FINI_RETURN(ret, message...) \
    232236if (ret != EOK) { \
Note: See TracChangeset for help on using the changeset viewer.