Ignore:
File:
1 edited

Legend:

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

    rb2dca8de rb7fd2a0  
    22 * Copyright (c) 2011 Jan Vesely
    33 * Copyright (c) 2011 Vojtech Horky
    4  * Copyright (c) 2018 Ondrej Hlavaty, Petr Manek
    54 * All rights reserved.
    65 *
     
    4039#include <errno.h>
    4140#include <io/log.h>
    42 #include <io/logctl.h>
    4341#include <str_error.h>
    4442
    4543#include <usb/debug.h>
     44#include <usb/host/ddf_helpers.h>
    4645
    4746#include "hc.h"
    48 #include "ohci_bus.h"
    4947
    5048#define NAME "ohci"
     49static errno_t ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *, bool);
     50static void ohci_driver_fini(hcd_t *);
    5151
    52 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 errno_t 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 errno_t 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 errno_t 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 = {
    53114        .name = NAME,
    54         .hc_device_size = sizeof(hc_t),
    55 
    56         .hc_add = hc_add,
    57         .irq_code_gen = hc_gen_irq_code,
    58         .claim = hc_gain_control,
    59         .start = hc_start,
    60         .setup_root_hub = hc_setup_roothub,
    61         .hc_gone = hc_gone,
     115        .driver_ops = &ohci_driver_ops
    62116};
    63117
     
    73127{
    74128        log_init(NAME);
    75         logctl_set_log_level(NAME, LVL_NOTE);
    76         return hc_driver_main(&ohci_driver);
     129        return ddf_driver_main(&ohci_driver);
    77130}
    78131
Note: See TracChangeset for help on using the changeset viewer.