Ignore:
File:
1 edited

Legend:

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

    r56fd7cf r795448f  
    3333 * @brief UHCI driver
    3434 */
    35 
    36 /* XXX Fix this */
    37 #define _DDF_DATA_IMPLANT
    38 
    3935#include <errno.h>
    4036#include <str_error.h>
     
    6460} uhci_t;
    6561
    66 static inline uhci_t *dev_to_uhci(ddf_dev_t *dev)
    67 {
    68         return ddf_dev_data_get(dev);
    69 }
    70 
     62static inline uhci_t * dev_to_uhci(const ddf_dev_t *dev)
     63{
     64        assert(dev);
     65        return dev->driver_data;
     66}
     67/*----------------------------------------------------------------------------*/
    7168/** IRQ handling callback, forward status from call to diver structure.
    7269 *
     
    8683        hc_interrupt(&uhci->hc, status);
    8784}
    88 
     85/*----------------------------------------------------------------------------*/
    8986/** Operations supported by the HC driver */
    9087static ddf_dev_ops_t hc_ops = {
    9188        .interfaces[USBHC_DEV_IFACE] = &hcd_iface, /* see iface.h/c */
    9289};
    93 
     90/*----------------------------------------------------------------------------*/
    9491/** Gets handle of the respective hc.
    9592 *
     
    10097static int usb_iface_get_hc_handle(ddf_fun_t *fun, devman_handle_t *handle)
    10198{
    102         ddf_fun_t *hc_fun = dev_to_uhci(ddf_fun_get_dev(fun))->hc_fun;
     99        assert(fun);
     100        ddf_fun_t *hc_fun = dev_to_uhci(fun->dev)->hc_fun;
    103101        assert(hc_fun);
    104102
    105103        if (handle != NULL)
    106                 *handle = ddf_fun_get_handle(hc_fun);
     104                *handle = hc_fun->handle;
    107105        return EOK;
    108106}
    109 
     107/*----------------------------------------------------------------------------*/
    110108/** USB interface implementation used by RH */
    111109static usb_iface_t usb_iface = {
    112110        .get_hc_handle = usb_iface_get_hc_handle,
    113111};
    114 
     112/*----------------------------------------------------------------------------*/
    115113/** Get root hub hw resources (I/O registers).
    116114 *
     
    120118static hw_resource_list_t *get_resource_list(ddf_fun_t *fun)
    121119{
    122         rh_t *rh = ddf_fun_data_get(fun);
     120        assert(fun);
     121        rh_t *rh = fun->driver_data;
    123122        assert(rh);
    124123        return &rh->resource_list;
    125124}
    126 
     125/*----------------------------------------------------------------------------*/
    127126/** Interface to provide the root hub driver with hw info */
    128127static hw_res_ops_t hw_res_iface = {
     
    130129        .enable_interrupt = NULL,
    131130};
    132 
     131/*----------------------------------------------------------------------------*/
    133132/** RH function support for uhci_rhd */
    134133static ddf_dev_ops_t rh_ops = {
     
    136135        .interfaces[HW_RES_DEV_IFACE] = &hw_res_iface
    137136};
    138 
     137/*----------------------------------------------------------------------------*/
    139138/** Initialize hc and rh DDF structures and their respective drivers.
    140139 *
     
    161160if (ret != EOK) { \
    162161        if (instance->hc_fun) \
     162                instance->hc_fun->driver_data = NULL; \
    163163                ddf_fun_destroy(instance->hc_fun); \
    164164        if (instance->rh_fun) {\
     165                instance->rh_fun->driver_data = NULL; \
    165166                ddf_fun_destroy(instance->rh_fun); \
    166167        } \
     
    173174        int ret = (instance->hc_fun == NULL) ? ENOMEM : EOK;
    174175        CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI HC function.\n");
    175         ddf_fun_set_ops(instance->hc_fun, &hc_ops);
    176         ddf_fun_data_implant(instance->hc_fun, &instance->hc.generic);
     176        instance->hc_fun->ops = &hc_ops;
     177        instance->hc_fun->driver_data = &instance->hc.generic;
    177178
    178179        instance->rh_fun = ddf_fun_create(device, fun_inner, "uhci_rh");
    179180        ret = (instance->rh_fun == NULL) ? ENOMEM : EOK;
    180181        CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI RH function.\n");
    181         ddf_fun_set_ops(instance->rh_fun, &rh_ops);
    182         ddf_fun_data_implant(instance->rh_fun, &instance->rh);
     182        instance->rh_fun->ops = &rh_ops;
     183        instance->rh_fun->driver_data = &instance->rh;
    183184
    184185        uintptr_t reg_base = 0;
     
    189190        CHECK_RET_DEST_FREE_RETURN(ret,
    190191            "Failed to get I/O addresses for %" PRIun ": %s.\n",
    191             ddf_dev_get_handle(device), str_error(ret));
     192            device->handle, str_error(ret));
    192193        usb_log_debug("I/O regs at 0x%p (size %zu), IRQ %d.\n",
    193194            (void *) reg_base, reg_size, irq);
Note: See TracChangeset for help on using the changeset viewer.