Ignore:
File:
1 edited

Legend:

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

    r53a309e rc910ecf  
    4949#define NAME "uhci"
    5050
    51 static int uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *, bool);
     51static int uhci_driver_init(hcd_t *, const hw_res_list_parsed_t *, ddf_dev_t *);
     52static int uhci_driver_start(hcd_t *, bool);
    5253static void uhci_driver_fini(hcd_t *);
    53 static int disable_legacy(ddf_dev_t *);
     54static int disable_legacy(hcd_t *, ddf_dev_t *);
    5455
    5556static const ddf_hc_driver_t uhci_hc_driver = {
    5657        .claim = disable_legacy,
    57         .hc_speed = USB_SPEED_FULL,
    5858        .irq_code_gen = uhci_hc_gen_irq_code,
    5959        .init = uhci_driver_init,
     60        .start = uhci_driver_start,
     61        .setup_root_hub = hcd_setup_virtual_root_hub,
    6062        .fini = uhci_driver_fini,
    6163        .name = "UHCI",
     
    6769};
    6870
    69 static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
     71static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, ddf_dev_t *device)
    7072{
     73        int err;
     74
    7175        assert(hcd);
    7276        assert(hcd_get_driver_data(hcd) == NULL);
     
    7680                return ENOMEM;
    7781
    78         const int 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;
     82        if ((err = hc_init(instance, res)) != EOK)
     83                goto err;
     84
     85        hcd_set_implementation(hcd, instance, &uhci_hc_driver.ops, &instance->bus.base);
     86
     87        return EOK;
     88
     89err:
     90        free(instance);
     91        return err;
     92}
     93
     94static int uhci_driver_start(hcd_t *hcd, bool interrupts)
     95{
     96        assert(hcd);
     97        hc_t *hc = hcd_get_driver_data(hcd);
     98
     99        hc->hw_interrupts = interrupts;
     100        hc_start(hc);
     101        return EOK;
    85102}
    86103
     
    92109                hc_fini(hc);
    93110
    94         hcd_set_implementation(hcd, NULL, NULL);
     111        hcd_set_implementation(hcd, NULL, NULL, NULL);
    95112        free(hc);
    96113}
     
    101118 * @return Error code.
    102119 */
    103 static int disable_legacy(ddf_dev_t *device)
     120static int disable_legacy(hcd_t *hcd, ddf_dev_t *device)
    104121{
    105122        assert(device);
     
    126143}
    127144
     145static int uhci_fun_online(ddf_fun_t *fun)
     146{
     147        return hcd_ddf_device_online(fun);
     148}
     149
     150static int uhci_fun_offline(ddf_fun_t *fun)
     151{
     152        return hcd_ddf_device_offline(fun);
     153}
     154
    128155static const driver_ops_t uhci_driver_ops = {
    129156        .dev_add = uhci_dev_add,
     157        .fun_online = uhci_fun_online,
     158        .fun_offline = uhci_fun_offline
    130159};
    131160
     
    148177        printf(NAME ": HelenOS UHCI driver.\n");
    149178        log_init(NAME);
    150         logctl_set_log_level(NAME, LVL_NOTE);
     179        logctl_set_log_level(NAME, LVL_DEBUG2);
    151180        return ddf_driver_main(&uhci_driver);
    152181}
Note: See TracChangeset for help on using the changeset viewer.