Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ehci/main.c

    r7de1988c r8d40181  
    3333 * Main routines of EHCI driver.
    3434 */
    35 
    3635#include <ddf/driver.h>
    3736#include <ddf/interrupt.h>
    3837#include <device/hw_res.h>
    3938#include <errno.h>
    40 #include <stdbool.h>
    4139#include <str_error.h>
    4240
    4341#include <usb_iface.h>
    44 #include <usb/ddfiface.h>
    4542#include <usb/debug.h>
    46 #include <usb/host/hcd.h>
     43#include <usb/host/ddf_helpers.h>
    4744
    4845#include "res.h"
     
    6057        .driver_ops = &ehci_driver_ops
    6158};
    62 static ddf_dev_ops_t hc_ops = {
    63         .interfaces[USBHC_DEV_IFACE] = &hcd_iface,
    64 };
    6559
    6660
     
    7266static int ehci_dev_add(ddf_dev_t *device)
    7367{
    74         ddf_fun_t *hc_fun = NULL;
    75         bool fun_bound = false;
    76 
    7768        assert(device);
    78 
    79         addr_range_t reg_range;
    80         int irq = 0;
    81 
    82         int rc = get_my_registers(device, &reg_range, &irq);
    83         if (rc != EOK) {
    84                 usb_log_error("Failed to get memory addresses for %" PRIun
    85                     ": %s.\n", ddf_dev_get_handle(device), str_error(rc));
    86                 goto error;
     69        hw_res_list_parsed_t hw_res;
     70        int ret = hcd_ddf_get_registers(device, &hw_res);
     71        if (ret != EOK ||
     72            hw_res.irqs.count != 1 || hw_res.mem_ranges.count != 1) {
     73                usb_log_error("Failed to get register memory addresses "
     74                    "for %" PRIun ": %s.\n", ddf_dev_get_handle(device),
     75                    str_error(ret));
     76                return ret;
    8777        }
     78        addr_range_t regs = hw_res.mem_ranges.ranges[0];
     79        const int irq = hw_res.irqs.irqs[0];
     80        hw_res_list_parsed_clean(&hw_res);
    8881
    8982        usb_log_info("Memory mapped regs at %p (size %zu), IRQ %d.\n",
    90             RNGABSPTR(reg_range), RNGSZ(reg_range), irq);
     83            RNGABSPTR(regs), RNGSZ(regs), irq);
    9184
    92         rc = disable_legacy(device, &reg_range);
    93         if (rc != EOK) {
     85        ret = disable_legacy(device, &regs);
     86        if (ret != EOK) {
    9487                usb_log_error("Failed to disable legacy USB: %s.\n",
    95                     str_error(rc));
    96                 goto error;
    97         }
    98 
    99         hc_fun = ddf_fun_create(device, fun_exposed, "ehci_hc");
    100         if (hc_fun == NULL) {
    101                 usb_log_error("Failed to create EHCI function.\n");
    102                 rc = ENOMEM;
    103                 goto error;
    104         }
    105 
    106         hcd_t *ehci_hc = ddf_fun_data_alloc(hc_fun, sizeof(hcd_t));
    107         if (ehci_hc == NULL) {
    108                 usb_log_error("Failed to alloc generic HC driver.\n");
    109                 rc = ENOMEM;
    110                 goto error;
     88                    str_error(ret));
     89                return ret;
    11190        }
    11291
    11392        /* High Speed, no bandwidth */
    114         hcd_init(ehci_hc, USB_SPEED_HIGH, 0, NULL);
    115         ddf_fun_set_ops(hc_fun,  &hc_ops);
    116 
    117         rc = ddf_fun_bind(hc_fun);
    118         if (rc != EOK) {
    119                 usb_log_error("Failed to bind EHCI function: %s.\n",
    120                     str_error(rc));
    121                 goto error;
    122         }
    123 
    124         fun_bound = true;
    125 
    126         rc = ddf_fun_add_to_category(hc_fun, USB_HC_CATEGORY);
    127         if (rc != EOK) {
    128                 usb_log_error("Failed to add EHCI to HC class: %s.\n",
    129                     str_error(rc));
    130                 goto error;
     93        ret = hcd_ddf_setup_hc(device, USB_SPEED_HIGH, 0, NULL);
     94        if (ret != EOK) {
     95                usb_log_error("Failed to init generci hcd driver: %s\n",
     96                    str_error(ret));
     97                return ret;
    13198        }
    13299
     
    135102
    136103        return EOK;
    137 error:
    138         if (fun_bound)
    139                 ddf_fun_unbind(hc_fun);
    140         if (hc_fun != NULL)
    141                 ddf_fun_destroy(hc_fun);
    142         return rc;
    143104}
    144105
Note: See TracChangeset for help on using the changeset viewer.