Changeset e4d7363 in mainline for uspace/drv/bus/usb/ohci/main.c


Ignore:
Timestamp:
2017-06-22T21:34:39Z (7 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
91ca111
Parents:
cb89430
Message:

usbhost: refactor the initialization

Before that, drivers had to setup MMIO range multiple times, or even parse hw
resources themselves again. The former init method was split in half - init and
start. Init shall allocate and initialize inner structures, start shall start
the HC.

In the XHCI it is demonstrated how to isolate inner HC implementation from the
fact this driver is using libusbhost. It adds some boilerplate code, but
I think it leads to cleaner design.

File:
1 edited

Legend:

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

    rcb89430 re4d7363  
    4747
    4848#define NAME "ohci"
    49 static int ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *, bool);
     49static int ohci_driver_init(hcd_t *, const hw_res_list_parsed_t *);
     50static int ohci_driver_start(hcd_t *, bool);
     51static int ohci_driver_claim(hcd_t *, ddf_dev_t *);
    5052static void ohci_driver_fini(hcd_t *);
    5153
     
    5456        .irq_code_gen = ohci_hc_gen_irq_code,
    5557        .init = ohci_driver_init,
     58        .claim = ohci_driver_claim,
     59        .start = ohci_driver_start,
    5660        .fini = ohci_driver_fini,
    5761        .name = "OHCI",
     
    6670
    6771
    68 static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
     72static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res)
    6973{
    7074        assert(hcd);
     
    7579                return ENOMEM;
    7680
    77         const int ret = hc_init(instance, res, irq);
     81        const int ret = hc_init(instance, res);
    7882        if (ret == EOK) {
    7983                hcd_set_implementation(hcd, instance, &ohci_hc_driver.ops);
     
    8286        }
    8387        return ret;
     88}
     89
     90static int ohci_driver_claim(hcd_t *hcd, ddf_dev_t *dev)
     91{
     92        hc_t *hc = hcd_get_driver_data(hcd);
     93        assert(hc);
     94
     95        hc_gain_control(hc);
     96
     97        return EOK;
     98}
     99
     100static int ohci_driver_start(hcd_t *hcd, bool interrupts)
     101{
     102        hc_t *hc = hcd_get_driver_data(hcd);
     103        assert(hc);
     104
     105        hc->hw_interrupts = interrupts;
     106        hc_start(hc);
     107        return EOK;
    84108}
    85109
Note: See TracChangeset for help on using the changeset viewer.