Ignore:
File:
1 edited

Legend:

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

    r129b821f r58563585  
    3939#include <errno.h>
    4040#include <io/log.h>
    41 #include <io/logctl.h>
    4241#include <str_error.h>
    4342
    4443#include <usb/debug.h>
     44#include <usb/host/ddf_helpers.h>
    4545
    4646#include "hc.h"
    47 #include "ohci_bus.h"
    4847
    4948#define NAME "ohci"
     49static int ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *, bool);
     50static void ohci_driver_fini(hcd_t *);
    5051
    51 static const hc_driver_t ohci_driver = {
     52static const ddf_hc_driver_t ohci_hc_driver = {
     53        .hc_speed = USB_SPEED_FULL,
     54        .irq_code_gen = ohci_hc_gen_irq_code,
     55        .init = ohci_driver_init,
     56        .fini = ohci_driver_fini,
     57        .name = "OHCI",
     58        .ops = {
     59                .schedule       = ohci_hc_schedule,
     60                .ep_add_hook    = ohci_endpoint_init,
     61                .ep_remove_hook = ohci_endpoint_fini,
     62                .irq_hook       = ohci_hc_interrupt,
     63                .status_hook    = ohci_hc_status,
     64        },
     65};
     66
     67
     68static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
     69{
     70        assert(hcd);
     71        assert(hcd_get_driver_data(hcd) == NULL);
     72
     73        hc_t *instance = malloc(sizeof(hc_t));
     74        if (!instance)
     75                return ENOMEM;
     76
     77        const int ret = hc_init(instance, res, irq);
     78        if (ret == EOK) {
     79                hcd_set_implementation(hcd, instance, &ohci_hc_driver.ops);
     80        } else {
     81                free(instance);
     82        }
     83        return ret;
     84}
     85
     86static void ohci_driver_fini(hcd_t *hcd)
     87{
     88        assert(hcd);
     89        hc_t *hc = hcd_get_driver_data(hcd);
     90        if (hc)
     91                hc_fini(hc);
     92
     93        hcd_set_implementation(hcd, NULL, NULL);
     94        free(hc);
     95}
     96
     97/** Initializes a new ddf driver instance of OHCI hcd.
     98 *
     99 * @param[in] device DDF instance of the device to initialize.
     100 * @return Error code.
     101 */
     102static int ohci_dev_add(ddf_dev_t *device)
     103{
     104        usb_log_debug("ohci_dev_add() called\n");
     105        assert(device);
     106        return hcd_ddf_add_hc(device, &ohci_hc_driver);
     107}
     108
     109static const driver_ops_t ohci_driver_ops = {
     110        .dev_add = ohci_dev_add,
     111};
     112
     113static const driver_t ohci_driver = {
    52114        .name = NAME,
    53         .hc_device_size = sizeof(hc_t),
    54 
    55         .hc_add = hc_add,
    56         .irq_code_gen = hc_gen_irq_code,
    57         .claim = hc_gain_control,
    58         .start = hc_start,
    59         .setup_root_hub = hc_setup_roothub,
    60         .hc_gone = hc_gone,
     115        .driver_ops = &ohci_driver_ops
    61116};
    62117
     
    72127{
    73128        log_init(NAME);
    74         logctl_set_log_level(NAME, LVL_DEBUG2);
    75         return hc_driver_main(&ohci_driver);
     129        return ddf_driver_main(&ohci_driver);
    76130}
    77131
Note: See TracChangeset for help on using the changeset viewer.