Ignore:
File:
1 edited

Legend:

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

    r920d0fc r2ef8023  
    3333 * Main routines of OHCI driver.
    3434 */
     35
     36#include <assert.h>
    3537#include <ddf/driver.h>
    3638#include <errno.h>
     39#include <io/log.h>
    3740#include <str_error.h>
    3841
    3942#include <usb/debug.h>
     43#include <usb/host/ddf_helpers.h>
    4044
    41 #include "ohci.h"
     45#include "hc.h"
    4246
    4347#define NAME "ohci"
     48// TODO: This should be merged to hc_interrupt
     49static void ohci_interrupt(hcd_t *hcd, uint32_t status)
     50{
     51        assert(hcd);
     52        if (hcd->driver.data)
     53                hc_interrupt(hcd->driver.data, status);
     54}
     55
     56static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
     57{
     58        assert(hcd);
     59        assert(hcd->driver.data == NULL);
     60
     61        hc_t *instance = malloc(sizeof(hc_t));
     62        if (!instance)
     63                return ENOMEM;
     64
     65        const int ret =  hc_init(instance, res, irq);
     66        if (ret == EOK)
     67                hcd_set_implementation(hcd, instance, hc_schedule,
     68                    ohci_endpoint_init, ohci_endpoint_fini, ohci_interrupt);
     69        return ret;
     70}
     71
     72static void ohci_driver_fini(hcd_t *hcd)
     73{
     74        assert(hcd);
     75        if (hcd->driver.data)
     76                hc_fini(hcd->driver.data);
     77
     78        free(hcd->driver.data);
     79        hcd_set_implementation(hcd, NULL, NULL, NULL, NULL, NULL);
     80}
    4481
    4582/** Initializes a new ddf driver instance of OHCI hcd.
     
    5390        assert(device);
    5491
    55         int ret = device_setup_ohci(device);
     92        const int ret = ddf_hcd_device_setup_all(device, USB_SPEED_FULL,
     93            BANDWIDTH_AVAILABLE_USB11, bandwidth_count_usb11,
     94            ddf_hcd_gen_irq_handler, hc_gen_irq_code,
     95            ohci_driver_init, ohci_driver_fini);
    5696        if (ret != EOK) {
    5797                usb_log_error("Failed to initialize OHCI driver: %s.\n",
    5898                    str_error(ret));
    59                 return ret;
    6099        }
    61         usb_log_info("Controlling new OHCI device '%s'.\n", ddf_dev_get_name(device));
     100        usb_log_info("Controlling new OHCI device '%s'.\n",
     101            ddf_dev_get_name(device));
    62102
    63         return EOK;
     103        return ret;
    64104}
    65105
    66 static driver_ops_t ohci_driver_ops = {
     106static const driver_ops_t ohci_driver_ops = {
    67107        .dev_add = ohci_dev_add,
    68108};
    69109
    70 static driver_t ohci_driver = {
     110static const driver_t ohci_driver = {
    71111        .name = NAME,
    72112        .driver_ops = &ohci_driver_ops
Note: See TracChangeset for help on using the changeset viewer.