Ignore:
File:
1 edited

Legend:

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

    re0a5d4c rb7fd2a0  
    11/*
    22 * Copyright (c) 2011 Vojtech Horky, Jan Vesely
    3  * Copyright (c) 2018 Ondrej Hlavaty, Petr Manek
    43 * All rights reserved.
    54 *
     
    4443#include <str_error.h>
    4544#include <usb/debug.h>
    46 #include <usb/host/utility.h>
     45#include <usb/host/ddf_helpers.h>
    4746
    4847#include "hc.h"
     
    5049#define NAME "uhci"
    5150
    52 static errno_t disable_legacy(hc_device_t *);
     51static errno_t uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *, bool);
     52static void uhci_driver_fini(hcd_t *);
     53static errno_t disable_legacy(ddf_dev_t *);
    5354
    54 static const hc_driver_t uhci_driver = {
    55         .name = NAME,
    56         .hc_device_size = sizeof(hc_t),
    57         .claim = disable_legacy,
    58         .irq_code_gen = hc_gen_irq_code,
    59         .hc_add = hc_add,
    60         .start = hc_start,
    61         .setup_root_hub = hc_setup_roothub,
    62         .hc_gone = hc_gone,
     55static const ddf_hc_driver_t uhci_hc_driver = {
     56        .claim = disable_legacy,
     57        .hc_speed = USB_SPEED_FULL,
     58        .irq_code_gen = uhci_hc_gen_irq_code,
     59        .init = uhci_driver_init,
     60        .fini = uhci_driver_fini,
     61        .name = "UHCI",
     62        .ops = {
     63                .schedule    = uhci_hc_schedule,
     64                .irq_hook    = uhci_hc_interrupt,
     65                .status_hook = uhci_hc_status,
     66        },
    6367};
     68
     69static errno_t uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
     70{
     71        assert(hcd);
     72        assert(hcd_get_driver_data(hcd) == NULL);
     73
     74        hc_t *instance = malloc(sizeof(hc_t));
     75        if (!instance)
     76                return ENOMEM;
     77
     78        const errno_t ret = hc_init(instance, res, irq);
     79        if (ret == EOK) {
     80                hcd_set_implementation(hcd, instance, &uhci_hc_driver.ops);
     81        } else {
     82                free(instance);
     83        }
     84        return ret;
     85}
     86
     87static void uhci_driver_fini(hcd_t *hcd)
     88{
     89        assert(hcd);
     90        hc_t *hc = hcd_get_driver_data(hcd);
     91        if (hc)
     92                hc_fini(hc);
     93
     94        hcd_set_implementation(hcd, NULL, NULL);
     95        free(hc);
     96}
    6497
    6598/** Call the PCI driver with a request to clear legacy support register
     
    68101 * @return Error code.
    69102 */
    70 static errno_t disable_legacy(hc_device_t *hcd)
     103static errno_t disable_legacy(ddf_dev_t *device)
    71104{
    72         assert(hcd);
     105        assert(device);
    73106
    74         async_sess_t *parent_sess = ddf_dev_parent_sess_get(hcd->ddf_dev);
     107        async_sess_t *parent_sess = ddf_dev_parent_sess_get(device);
    75108        if (parent_sess == NULL)
    76109                return ENOMEM;
     
    80113        return pci_config_space_write_16(parent_sess, 0xc0, 0xaf00);
    81114}
     115
     116/** Initialize a new ddf driver instance for uhci hc and hub.
     117 *
     118 * @param[in] device DDF instance of the device to initialize.
     119 * @return Error code.
     120 */
     121static errno_t uhci_dev_add(ddf_dev_t *device)
     122{
     123        usb_log_debug2("uhci_dev_add() called\n");
     124        assert(device);
     125        return hcd_ddf_add_hc(device, &uhci_hc_driver);
     126}
     127
     128static const driver_ops_t uhci_driver_ops = {
     129        .dev_add = uhci_dev_add,
     130};
     131
     132static const driver_t uhci_driver = {
     133        .name = NAME,
     134        .driver_ops = &uhci_driver_ops
     135};
     136
    82137
    83138/** Initialize global driver structures (NONE).
     
    94149        log_init(NAME);
    95150        logctl_set_log_level(NAME, LVL_NOTE);
    96         return hc_driver_main(&uhci_driver);
     151        return ddf_driver_main(&uhci_driver);
    97152}
    98153/**
Note: See TracChangeset for help on using the changeset viewer.