Changeset 2568c94 in mainline for uspace/drv/bus


Ignore:
Timestamp:
2012-08-17T17:15:19Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1789023
Parents:
4f351432 (diff), 01e397ac (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

Location:
uspace/drv/bus
Files:
34 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/isa/isa.c

    r4f351432 r2568c94  
    7373#define CHILD_FUN_CONF_PATH "/drv/isa/isa.dev"
    7474
    75 /** Obtain soft-state from device node */
    76 #define ISA_BUS(dev) ((isa_bus_t *) ((dev)->driver_data))
    77 
    78 /** Obtain soft-state from function node */
    79 #define ISA_FUN(fun) ((isa_fun_t *) ((fun)->driver_data))
    80 
    8175#define ISA_MAX_HW_RES 5
    8276
     
    9589} isa_fun_t;
    9690
     91/** Obtain soft-state from device node */
     92static isa_bus_t *isa_bus(ddf_dev_t *dev)
     93{
     94        return ddf_dev_data_get(dev);
     95}
     96
     97/** Obtain soft-state from function node */
     98static isa_fun_t *isa_fun(ddf_fun_t *fun)
     99{
     100        return ddf_fun_data_get(fun);
     101}
     102
    97103static hw_resource_list_t *isa_get_fun_resources(ddf_fun_t *fnode)
    98104{
    99         isa_fun_t *fun = ISA_FUN(fnode);
     105        isa_fun_t *fun = isa_fun(fnode);
    100106        assert(fun != NULL);
    101107
     
    107113        /* This is an old ugly way, copied from pci driver */
    108114        assert(fnode);
    109         isa_fun_t *isa_fun = fnode->driver_data;
     115        isa_fun_t *fun = isa_fun(fnode);
    110116
    111117        sysarg_t apic;
     
    123129                return false;
    124130
    125         assert(isa_fun);
    126         const hw_resource_list_t *res = &isa_fun->hw_resources;
     131        const hw_resource_list_t *res = &fun->hw_resources;
    127132        assert(res);
    128133        for (size_t i = 0; i < res->count; ++i) {
     
    150155{
    151156        assert(fnode);
    152         isa_fun_t *isa_fun = fnode->driver_data;
    153         const hw_resource_list_t *res = &isa_fun->hw_resources;
     157        isa_fun_t *fun = isa_fun(fnode);
     158        const hw_resource_list_t *res = &fun->hw_resources;
    154159        assert(res);
    155160       
     
    339344
    340345                ddf_msg(LVL_NOTE, "Added irq 0x%x to function %s", irq,
    341                     fun->fnode->name);
     346                    ddf_fun_get_name(fun->fnode));
    342347        }
    343348}
     
    355360                        fun->hw_resources.count++;
    356361                        ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,
    357                             fun->fnode->name);
     362                            ddf_fun_get_name(fun->fnode));
    358363                       
    359364                        return;
     
    366371                        fun->hw_resources.count++;
    367372                        ddf_msg(LVL_NOTE, "Added dma 0x%x to function %s", dma,
    368                             fun->fnode->name);
     373                            ddf_fun_get_name(fun->fnode));
    369374                       
    370375                        return;
     
    372377               
    373378                ddf_msg(LVL_WARN, "Skipped dma 0x%x for function %s", dma,
    374                     fun->fnode->name);
     379                    ddf_fun_get_name(fun->fnode));
    375380        }
    376381}
     
    391396                ddf_msg(LVL_NOTE, "Added io range (addr=0x%x, size=0x%x) to "
    392397                    "function %s", (unsigned int) addr, (unsigned int) len,
    393                     fun->fnode->name);
     398                    ddf_fun_get_name(fun->fnode));
    394399        }
    395400}
     
    463468        if (val == end) {
    464469                ddf_msg(LVL_ERROR, "Cannot read match score for function "
    465                     "%s.", fun->fnode->name);
     470                    "%s.", ddf_fun_get_name(fun->fnode));
    466471                return;
    467472        }
     
    471476        if (id == NULL) {
    472477                ddf_msg(LVL_ERROR, "Cannot read match ID for function %s.",
    473                     fun->fnode->name);
     478                    ddf_fun_get_name(fun->fnode));
    474479                return;
    475480        }
    476481
    477482        ddf_msg(LVL_DEBUG, "Adding match id '%s' with score %d to "
    478             "function %s", id, score, fun->fnode->name);
     483            "function %s", id, score, ddf_fun_get_name(fun->fnode));
    479484
    480485        rc = ddf_fun_add_match_id(fun->fnode, id, score);
     
    579584
    580585        /* Set device operations to the device. */
    581         fun->fnode->ops = &isa_fun_ops;
    582 
    583         ddf_msg(LVL_DEBUG, "Binding function %s.", fun->fnode->name);
     586        ddf_fun_set_ops(fun->fnode, &isa_fun_ops);
     587
     588        ddf_msg(LVL_DEBUG, "Binding function %s.", ddf_fun_get_name(fun->fnode));
    584589
    585590        /* XXX Handle error */
     
    614619
    615620        ddf_msg(LVL_DEBUG, "isa_dev_add, device handle = %d",
    616             (int) dev->handle);
     621            (int) ddf_dev_get_handle(dev));
    617622
    618623        isa = ddf_dev_data_alloc(dev, sizeof(isa_bus_t));
     
    652657static int isa_dev_remove(ddf_dev_t *dev)
    653658{
    654         isa_bus_t *isa = ISA_BUS(dev);
     659        isa_bus_t *isa = isa_bus(dev);
    655660        int rc;
    656661
     
    664669                if (rc != EOK) {
    665670                        fibril_mutex_unlock(&isa->mutex);
    666                         ddf_msg(LVL_ERROR, "Failed offlining %s", fun->fnode->name);
     671                        ddf_msg(LVL_ERROR, "Failed offlining %s", ddf_fun_get_name(fun->fnode));
    667672                        return rc;
    668673                }
     
    671676                if (rc != EOK) {
    672677                        fibril_mutex_unlock(&isa->mutex);
    673                         ddf_msg(LVL_ERROR, "Failed unbinding %s", fun->fnode->name);
     678                        ddf_msg(LVL_ERROR, "Failed unbinding %s", ddf_fun_get_name(fun->fnode));
    674679                        return rc;
    675680                }
  • uspace/drv/bus/pci/pciintel/pci.c

    r4f351432 r2568c94  
    5050#include <ddf/driver.h>
    5151#include <ddf/log.h>
    52 #include <devman.h>
    53 #include <ipc/devman.h>
    5452#include <ipc/dev_iface.h>
    5553#include <ipc/irc.h>
     
    7169
    7270/** Obtain PCI function soft-state from DDF function node */
    73 #define PCI_FUN(fnode) ((pci_fun_t *) (fnode)->driver_data)
     71static pci_fun_t *pci_fun(ddf_fun_t *fnode)
     72{
     73        return ddf_fun_data_get(fnode);
     74}
    7475
    7576/** Obtain PCI bus soft-state from DDF device node */
    76 #define PCI_BUS(dnode) ((pci_bus_t *) (dnode)->driver_data)
     77#if 0
     78static pci_bus_t *pci_bus(ddf_dev_t *dnode)
     79{
     80        return ddf_dev_data_get(dnode);
     81}
     82#endif
    7783
    7884/** Obtain PCI bus soft-state from function soft-state */
    79 #define PCI_BUS_FROM_FUN(fun) ((fun)->busptr)
     85static pci_bus_t *pci_bus_from_fun(pci_fun_t *fun)
     86{
     87        return fun->busptr;
     88}
    8089
    8190/** Max is 47, align to something nice. */
     
    8493static hw_resource_list_t *pciintel_get_resources(ddf_fun_t *fnode)
    8594{
    86         pci_fun_t *fun = PCI_FUN(fnode);
     95        pci_fun_t *fun = pci_fun(fnode);
    8796       
    8897        if (fun == NULL)
     
    95104        /* This is an old ugly way */
    96105        assert(fnode);
    97         pci_fun_t *dev_data = (pci_fun_t *) fnode->driver_data;
     106        pci_fun_t *dev_data = pci_fun(fnode);
    98107       
    99108        sysarg_t apic;
     
    138147        if (address > 252)
    139148                return EINVAL;
    140         pci_conf_write_32(PCI_FUN(fun), address, data);
     149        pci_conf_write_32(pci_fun(fun), address, data);
    141150        return EOK;
    142151}
     
    147156        if (address > 254)
    148157                return EINVAL;
    149         pci_conf_write_16(PCI_FUN(fun), address, data);
     158        pci_conf_write_16(pci_fun(fun), address, data);
    150159        return EOK;
    151160}
     
    156165        if (address > 255)
    157166                return EINVAL;
    158         pci_conf_write_8(PCI_FUN(fun), address, data);
     167        pci_conf_write_8(pci_fun(fun), address, data);
    159168        return EOK;
    160169}
     
    165174        if (address > 252)
    166175                return EINVAL;
    167         *data = pci_conf_read_32(PCI_FUN(fun), address);
     176        *data = pci_conf_read_32(pci_fun(fun), address);
    168177        return EOK;
    169178}
     
    174183        if (address > 254)
    175184                return EINVAL;
    176         *data = pci_conf_read_16(PCI_FUN(fun), address);
     185        *data = pci_conf_read_16(pci_fun(fun), address);
    177186        return EOK;
    178187}
     
    183192        if (address > 255)
    184193                return EINVAL;
    185         *data = pci_conf_read_8(PCI_FUN(fun), address);
     194        *data = pci_conf_read_8(pci_fun(fun), address);
    186195        return EOK;
    187196}
     
    225234static void pci_conf_read(pci_fun_t *fun, int reg, uint8_t *buf, size_t len)
    226235{
    227         pci_bus_t *bus = PCI_BUS_FROM_FUN(fun);
     236        pci_bus_t *bus = pci_bus_from_fun(fun);
    228237       
    229238        fibril_mutex_lock(&bus->conf_mutex);
     
    252261static void pci_conf_write(pci_fun_t *fun, int reg, uint8_t *buf, size_t len)
    253262{
    254         pci_bus_t *bus = PCI_BUS_FROM_FUN(fun);
     263        pci_bus_t *bus = pci_bus_from_fun(fun);
    255264       
    256265        fibril_mutex_lock(&bus->conf_mutex);
     
    480489        if (range_addr != 0) {
    481490                ddf_msg(LVL_DEBUG, "Function %s : address = %" PRIx64
    482                     ", size = %x", fun->fnode->name, range_addr,
     491                    ", size = %x", ddf_fun_get_name(fun->fnode), range_addr,
    483492                    (unsigned int) range_size);
    484493        }
     
    506515        hw_res_list->count++;
    507516       
    508         ddf_msg(LVL_NOTE, "Function %s uses irq %x.", fun->fnode->name, irq);
     517        ddf_msg(LVL_NOTE, "Function %s uses irq %x.", ddf_fun_get_name(fun->fnode), irq);
    509518}
    510519
     
    523532void pci_bus_scan(pci_bus_t *bus, int bus_num)
    524533{
    525         ddf_fun_t *fnode;
    526534        pci_fun_t *fun;
     535        int rc;
    527536       
    528537        int child_bus = 0;
     
    531540        uint8_t header_type;
    532541       
    533         fun = pci_fun_new(bus);
    534        
    535542        for (dnum = 0; dnum < 32; dnum++) {
    536543                multi = true;
    537544                for (fnum = 0; multi && fnum < 8; fnum++) {
     545                        fun = pci_fun_new(bus);
     546                       
    538547                        pci_fun_init(fun, bus_num, dnum, fnum);
    539548                        if (fun->vendor_id == 0xffff) {
     549                                pci_fun_delete(fun);
    540550                                /*
    541551                                 * The device is not present, go on scanning the
     
    559569                        if (fun_name == NULL) {
    560570                                ddf_msg(LVL_ERROR, "Out of memory.");
     571                                pci_fun_delete(fun);
    561572                                return;
    562573                        }
    563574                       
    564                         fnode = ddf_fun_create(bus->dnode, fun_inner, fun_name);
     575                        rc = ddf_fun_set_name(fun->fnode, fun_name);
    565576                        free(fun_name);
    566                         if (fnode == NULL) {
    567                                 ddf_msg(LVL_ERROR, "Failed creating function.");
     577                        if (rc != EOK) {
     578                                ddf_msg(LVL_ERROR, "Failed setting function name.");
     579                                pci_fun_delete(fun);
    568580                                return;
    569581                        }
    570                        
    571                         fun->fnode = fnode;
    572582                       
    573583                        pci_alloc_resource_list(fun);
     
    575585                        pci_read_interrupt(fun);
    576586                       
    577                         fnode->ops = &pci_fun_ops;
    578                         fnode->driver_data = fun;
     587                        ddf_fun_set_ops(fun->fnode, &pci_fun_ops);
    579588                       
    580589                        ddf_msg(LVL_DEBUG, "Adding new function %s.",
    581                             fnode->name);
     590                            ddf_fun_get_name(fun->fnode));
    582591                       
    583592                        pci_fun_create_match_ids(fun);
    584593                       
    585                         if (ddf_fun_bind(fnode) != EOK) {
     594                        if (ddf_fun_bind(fun->fnode) != EOK) {
    586595                                pci_clean_resource_list(fun);
    587                                 clean_match_ids(&fnode->match_ids);
    588                                 free((char *) fnode->name);
    589                                 fnode->name = NULL;
     596                                pci_fun_delete(fun);
    590597                                continue;
    591598                        }
     
    601608                                        pci_bus_scan(bus, child_bus);
    602609                        }
    603                        
    604                         fun = pci_fun_new(bus);
    605610                }
    606         }
    607        
    608         if (fun->vendor_id == 0xffff) {
    609                 /* Free the auxiliary function structure. */
    610                 pci_fun_delete(fun);
    611611        }
    612612}
     
    617617        ddf_fun_t *ctl = NULL;
    618618        bool got_res = false;
     619        async_sess_t *sess;
    619620        int rc;
    620621       
    621622        ddf_msg(LVL_DEBUG, "pci_dev_add");
    622         dnode->parent_sess = NULL;
    623623       
    624624        bus = ddf_dev_data_alloc(dnode, sizeof(pci_bus_t));
     
    631631
    632632        bus->dnode = dnode;
    633         dnode->driver_data = bus;
    634        
    635         dnode->parent_sess = devman_parent_device_connect(EXCHANGE_SERIALIZE,
    636             dnode->handle, IPC_FLAG_BLOCKING);
    637         if (!dnode->parent_sess) {
     633       
     634        sess = ddf_dev_parent_sess_create(dnode, EXCHANGE_SERIALIZE);
     635        if (sess == NULL) {
    638636                ddf_msg(LVL_ERROR, "pci_dev_add failed to connect to the "
    639637                    "parent driver.");
     
    644642        hw_resource_list_t hw_resources;
    645643       
    646         rc = hw_res_get_resource_list(dnode->parent_sess, &hw_resources);
     644        rc = hw_res_get_resource_list(sess, &hw_resources);
    647645        if (rc != EOK) {
    648646                ddf_msg(LVL_ERROR, "pci_dev_add failed to get hw resources "
     
    708706       
    709707fail:
    710         if (dnode->parent_sess)
    711                 async_hangup(dnode->parent_sess);
    712        
    713708        if (got_res)
    714709                hw_res_clean_resource_list(&hw_resources);
     
    742737{
    743738        pci_fun_t *fun;
    744        
    745         fun = (pci_fun_t *) calloc(1, sizeof(pci_fun_t));
     739        ddf_fun_t *fnode;
     740       
     741        fnode = ddf_fun_create(bus->dnode, fun_inner, NULL);
     742        if (fnode == NULL)
     743                return NULL;
     744
     745        fun = ddf_fun_data_alloc(fnode, sizeof(pci_fun_t));
    746746        if (fun == NULL)
    747747                return NULL;
    748748
    749749        fun->busptr = bus;
     750        fun->fnode = fnode;
    750751        return fun;
    751752}
     
    766767void pci_fun_delete(pci_fun_t *fun)
    767768{
    768         assert(fun != NULL);
    769769        hw_res_clean_resource_list(&fun->hw_resources);
    770         free(fun);
     770        if (fun->fnode != NULL)
     771                ddf_fun_destroy(fun->fnode);
    771772}
    772773
  • uspace/drv/bus/usb/ehci/main.c

    r4f351432 r2568c94  
    8484        CHECK_RET_RETURN(ret,
    8585            "Failed to get memory addresses for %" PRIun ": %s.\n",
    86             device->handle, str_error(ret));
     86            ddf_dev_get_handle(device), str_error(ret));
    8787        usb_log_info("Memory mapped regs at 0x%" PRIxn " (size %zu), IRQ %d.\n",
    8888            reg_base, reg_size, irq);
     
    104104        /* High Speed, no bandwidth */
    105105        hcd_init(ehci_hc, USB_SPEED_HIGH, 0, NULL);
    106         hc_fun->ops = &hc_ops;
     106        ddf_fun_set_ops(hc_fun,  &hc_ops);
    107107
    108108        ret = ddf_fun_bind(hc_fun);
     
    116116
    117117        usb_log_info("Controlling new EHCI device `%s' (handle %" PRIun ").\n",
    118             device->name, device->handle);
     118            ddf_dev_get_name(device), ddf_dev_get_handle(device));
    119119
    120120        return EOK;
  • uspace/drv/bus/usb/ehci/res.c

    r4f351432 r2568c94  
    7676 * @return Error code.
    7777 */
    78 int get_my_registers(const ddf_dev_t *dev,
     78int get_my_registers(ddf_dev_t *dev,
    7979    uintptr_t *mem_reg_address, size_t *mem_reg_size, int *irq_no)
    8080{
     
    8282       
    8383        async_sess_t *parent_sess = devman_parent_device_connect(
    84             EXCHANGE_SERIALIZE, dev->handle, IPC_FLAG_BLOCKING);
     84            EXCHANGE_SERIALIZE, ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING);
    8585        if (!parent_sess)
    8686                return ENOMEM;
     
    115115 * @return Error code.
    116116 */
    117 int enable_interrupts(const ddf_dev_t *device)
     117int enable_interrupts(ddf_dev_t *device)
    118118{
    119119        async_sess_t *parent_sess = devman_parent_device_connect(
    120             EXCHANGE_SERIALIZE, device->handle, IPC_FLAG_BLOCKING);
     120            EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
    121121        if (!parent_sess)
    122122                return ENOMEM;
     
    134134 * @return Error code.
    135135 */
    136 static int disable_extended_caps(const ddf_dev_t *device, unsigned eecp)
     136static int disable_extended_caps(ddf_dev_t *device, unsigned eecp)
    137137{
    138138        /* nothing to do */
     
    141141
    142142        async_sess_t *parent_sess = devman_parent_device_connect(
    143             EXCHANGE_SERIALIZE, device->handle, IPC_FLAG_BLOCKING);
     143            EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
    144144        if (!parent_sess)
    145145                return ENOMEM;
     
    234234}
    235235
    236 int disable_legacy(const ddf_dev_t *device, uintptr_t reg_base, size_t reg_size)
     236int disable_legacy(ddf_dev_t *device, uintptr_t reg_base, size_t reg_size)
    237237{
    238238        assert(device);
  • uspace/drv/bus/usb/ehci/res.h

    r4f351432 r2568c94  
    3838#include <ddf/driver.h>
    3939
    40 int get_my_registers(const ddf_dev_t *, uintptr_t *, size_t *, int *);
    41 int enable_interrupts(const ddf_dev_t *);
    42 int disable_legacy(const ddf_dev_t *, uintptr_t, size_t);
     40int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *);
     41int enable_interrupts(ddf_dev_t *);
     42int disable_legacy(ddf_dev_t *, uintptr_t, size_t);
    4343
    4444#endif
  • uspace/drv/bus/usb/ohci/hc.c

    r4f351432 r2568c94  
    187187
    188188        ret = usb_device_manager_bind_address(&instance->generic.dev_manager,
    189             instance->rh.address, hub_fun->handle);
     189            instance->rh.address, ddf_fun_get_handle(hub_fun));
    190190        if (ret != EOK)
    191191                usb_log_warning("Failed to bind root hub address: %s.\n",
  • uspace/drv/bus/usb/ohci/main.c

    r4f351432 r2568c94  
    5959                return ret;
    6060        }
    61         usb_log_info("Controlling new OHCI device '%s'.\n", device->name);
     61        usb_log_info("Controlling new OHCI device '%s'.\n", ddf_dev_get_name(device));
    6262
    6363        return EOK;
  • uspace/drv/bus/usb/ohci/ohci.c

    r4f351432 r2568c94  
    3333 * @brief OHCI driver
    3434 */
     35
     36/* XXX Fix this */
     37#define _DDF_DATA_IMPLANT
     38
    3539#include <errno.h>
    3640#include <str_error.h>
     
    5256} ohci_t;
    5357
    54 static inline ohci_t * dev_to_ohci(ddf_dev_t *dev)
    55 {
    56         assert(dev);
    57         return dev->driver_data;
     58static inline ohci_t *dev_to_ohci(ddf_dev_t *dev)
     59{
     60        return ddf_dev_data_get(dev);
    5861}
    5962/** IRQ handling callback, identifies device
     
    8790
    8891        if (address != NULL) {
    89                 *address = dev_to_ohci(fun->dev)->hc.rh.address;
     92                *address = dev_to_ohci(ddf_fun_get_dev(fun))->hc.rh.address;
    9093        }
    9194
     
    103106{
    104107        assert(fun);
    105         ddf_fun_t *hc_fun = dev_to_ohci(fun->dev)->hc_fun;
     108        ddf_fun_t *hc_fun = dev_to_ohci(ddf_fun_get_dev(fun))->hc_fun;
    106109        assert(hc_fun);
    107110
    108111        if (handle != NULL)
    109                 *handle = hc_fun->handle;
     112                *handle = ddf_fun_get_handle(hc_fun);
    110113        return EOK;
    111114}
     
    152155if (ret != EOK) { \
    153156        if (instance->hc_fun) { \
    154                 instance->hc_fun->driver_data = NULL; \
    155157                ddf_fun_destroy(instance->hc_fun); \
    156158        } \
    157159        if (instance->rh_fun) { \
    158                 instance->rh_fun->driver_data = NULL; \
    159160                ddf_fun_destroy(instance->rh_fun); \
    160161        } \
     
    167168        CHECK_RET_DEST_FREE_RETURN(ret,
    168169            "Failed to create OHCI HC function: %s.\n", str_error(ret));
    169         instance->hc_fun->ops = &hc_ops;
    170         instance->hc_fun->driver_data = &instance->hc;
     170        ddf_fun_set_ops(instance->hc_fun, &hc_ops);
     171        ddf_fun_data_implant(instance->hc_fun, &instance->hc);
    171172
    172173        instance->rh_fun = ddf_fun_create(device, fun_inner, "ohci_rh");
     
    174175        CHECK_RET_DEST_FREE_RETURN(ret,
    175176            "Failed to create OHCI RH function: %s.\n", str_error(ret));
    176         instance->rh_fun->ops = &rh_ops;
     177        ddf_fun_set_ops(instance->rh_fun, &rh_ops);
    177178
    178179        uintptr_t reg_base = 0;
     
    183184        CHECK_RET_DEST_FREE_RETURN(ret,
    184185            "Failed to get register memory addresses for %" PRIun ": %s.\n",
    185             device->handle, str_error(ret));
     186            ddf_dev_get_handle(device), str_error(ret));
    186187        usb_log_debug("Memory mapped regs at %p (size %zu), IRQ %d.\n",
    187188            (void *) reg_base, reg_size, irq);
  • uspace/drv/bus/usb/ohci/res.c

    r4f351432 r2568c94  
    5353 * @return Error code.
    5454 */
    55 int get_my_registers(const ddf_dev_t *dev,
     55int get_my_registers(ddf_dev_t *dev,
    5656    uintptr_t *mem_reg_address, size_t *mem_reg_size, int *irq_no)
    5757{
     
    5959
    6060        async_sess_t *parent_sess =
    61             devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,
    62             IPC_FLAG_BLOCKING);
     61            devman_parent_device_connect(EXCHANGE_SERIALIZE,
     62            ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING);
    6363        if (!parent_sess)
    6464                return ENOMEM;
     
    9494 * @return Error code.
    9595 */
    96 int enable_interrupts(const ddf_dev_t *device)
     96int enable_interrupts(ddf_dev_t *device)
    9797{
    9898        async_sess_t *parent_sess =
    99             devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,
    100             IPC_FLAG_BLOCKING);
     99            devman_parent_device_connect(EXCHANGE_SERIALIZE,
     100            ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
    101101        if (!parent_sess)
    102102                return ENOMEM;
  • uspace/drv/bus/usb/ohci/res.h

    r4f351432 r2568c94  
    3737#include <ddf/driver.h>
    3838
    39 int get_my_registers(const ddf_dev_t *, uintptr_t *, size_t *, int *);
    40 int enable_interrupts(const ddf_dev_t *);
     39int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *);
     40int enable_interrupts(ddf_dev_t *);
    4141
    4242#endif
  • uspace/drv/bus/usb/uhci/main.c

    r4f351432 r2568c94  
    7070        } else {
    7171                usb_log_info("Controlling new UHCI device '%s'.\n",
    72                     device->name);
     72                    ddf_dev_get_name(device));
    7373        }
    7474
  • uspace/drv/bus/usb/uhci/res.c

    r4f351432 r2568c94  
    5151 * @return Error code.
    5252 */
    53 int get_my_registers(const ddf_dev_t *dev,
     53int get_my_registers(ddf_dev_t *dev,
    5454    uintptr_t *io_reg_address, size_t *io_reg_size, int *irq_no)
    5555{
     
    5757
    5858        async_sess_t *parent_sess =
    59             devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,
    60             IPC_FLAG_BLOCKING);
     59            devman_parent_device_connect(EXCHANGE_SERIALIZE,
     60            ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING);
    6161        if (!parent_sess)
    6262                return ENOMEM;
     
    9292 * @return Error code.
    9393 */
    94 int enable_interrupts(const ddf_dev_t *device)
     94int enable_interrupts(ddf_dev_t *device)
    9595{
    9696        async_sess_t *parent_sess =
    97             devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle,
    98             IPC_FLAG_BLOCKING);
     97            devman_parent_device_connect(EXCHANGE_SERIALIZE,
     98            ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
    9999        if (!parent_sess)
    100100                return ENOMEM;
     
    111111 * @return Error code.
    112112 */
    113 int disable_legacy(const ddf_dev_t *device)
     113int disable_legacy(ddf_dev_t *device)
    114114{
    115115        assert(device);
    116116
    117117        async_sess_t *parent_sess = devman_parent_device_connect(
    118             EXCHANGE_SERIALIZE, device->handle, IPC_FLAG_BLOCKING);
     118            EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
    119119        if (!parent_sess)
    120120                return ENOMEM;
  • uspace/drv/bus/usb/uhci/res.h

    r4f351432 r2568c94  
    3838#include <ddf/driver.h>
    3939
    40 int get_my_registers(const ddf_dev_t *, uintptr_t *, size_t *, int *);
    41 int enable_interrupts(const ddf_dev_t *);
    42 int disable_legacy(const ddf_dev_t *);
     40int get_my_registers(ddf_dev_t *, uintptr_t *, size_t *, int *);
     41int enable_interrupts(ddf_dev_t *);
     42int disable_legacy(ddf_dev_t *);
    4343
    4444#endif
  • uspace/drv/bus/usb/uhci/uhci.c

    r4f351432 r2568c94  
    3333 * @brief UHCI driver
    3434 */
     35
     36/* XXX Fix this */
     37#define _DDF_DATA_IMPLANT
     38
    3539#include <errno.h>
    3640#include <str_error.h>
     
    6064} uhci_t;
    6165
    62 static inline uhci_t * dev_to_uhci(const ddf_dev_t *dev)
    63 {
    64         assert(dev);
    65         return dev->driver_data;
     66static inline uhci_t *dev_to_uhci(ddf_dev_t *dev)
     67{
     68        return ddf_dev_data_get(dev);
    6669}
    6770
     
    97100static int usb_iface_get_hc_handle(ddf_fun_t *fun, devman_handle_t *handle)
    98101{
    99         assert(fun);
    100         ddf_fun_t *hc_fun = dev_to_uhci(fun->dev)->hc_fun;
     102        ddf_fun_t *hc_fun = dev_to_uhci(ddf_fun_get_dev(fun))->hc_fun;
    101103        assert(hc_fun);
    102104
    103105        if (handle != NULL)
    104                 *handle = hc_fun->handle;
     106                *handle = ddf_fun_get_handle(hc_fun);
    105107        return EOK;
    106108}
     
    118120static hw_resource_list_t *get_resource_list(ddf_fun_t *fun)
    119121{
    120         assert(fun);
    121         rh_t *rh = fun->driver_data;
     122        rh_t *rh = ddf_fun_data_get(fun);
    122123        assert(rh);
    123124        return &rh->resource_list;
     
    160161if (ret != EOK) { \
    161162        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; \
    166165                ddf_fun_destroy(instance->rh_fun); \
    167166        } \
     
    174173        int ret = (instance->hc_fun == NULL) ? ENOMEM : EOK;
    175174        CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI HC function.\n");
    176         instance->hc_fun->ops = &hc_ops;
    177         instance->hc_fun->driver_data = &instance->hc.generic;
     175        ddf_fun_set_ops(instance->hc_fun, &hc_ops);
     176        ddf_fun_data_implant(instance->hc_fun, &instance->hc.generic);
    178177
    179178        instance->rh_fun = ddf_fun_create(device, fun_inner, "uhci_rh");
    180179        ret = (instance->rh_fun == NULL) ? ENOMEM : EOK;
    181180        CHECK_RET_DEST_FREE_RETURN(ret, "Failed to create UHCI RH function.\n");
    182         instance->rh_fun->ops = &rh_ops;
    183         instance->rh_fun->driver_data = &instance->rh;
     181        ddf_fun_set_ops(instance->rh_fun, &rh_ops);
     182        ddf_fun_data_implant(instance->rh_fun, &instance->rh);
    184183
    185184        uintptr_t reg_base = 0;
     
    190189        CHECK_RET_DEST_FREE_RETURN(ret,
    191190            "Failed to get I/O addresses for %" PRIun ": %s.\n",
    192             device->handle, str_error(ret));
     191            ddf_dev_get_handle(device), str_error(ret));
    193192        usb_log_debug("I/O regs at 0x%p (size %zu), IRQ %d.\n",
    194193            (void *) reg_base, reg_size, irq);
  • uspace/drv/bus/usb/uhcirh/main.c

    r4f351432 r2568c94  
    4848#define NAME "uhcirh"
    4949
    50 static int hc_get_my_registers(const ddf_dev_t *dev,
     50static int hc_get_my_registers(ddf_dev_t *dev,
    5151    uintptr_t *io_reg_address, size_t *io_reg_size);
    5252
     
    8888
    8989        usb_log_debug2("uhci_rh_dev_add(handle=%" PRIun ")\n",
    90             device->handle);
     90            ddf_dev_get_handle(device));
    9191
    9292        uintptr_t io_regs = 0;
     
    9898if (ret != EOK) { \
    9999        usb_log_error(message); \
    100         if (rh) \
    101                 free(rh); \
    102100        return ret; \
    103101} else (void)0
     
    109107            (void *) io_regs, io_size);
    110108
    111         rh = malloc(sizeof(uhci_root_hub_t));
     109        rh = ddf_dev_data_alloc(device, sizeof(uhci_root_hub_t));
    112110        ret = (rh == NULL) ? ENOMEM : EOK;
    113111        CHECK_RET_FREE_RH_RETURN(ret,
     
    119117            ret, str_error(ret));
    120118
    121         device->driver_data = rh;
    122119        usb_log_info("Controlling root hub '%s' (%" PRIun ").\n",
    123             device->name, device->handle);
     120            ddf_dev_get_name(device), ddf_dev_get_handle(device));
    124121        return EOK;
    125122}
     
    133130 */
    134131int hc_get_my_registers(
    135     const ddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size)
     132    ddf_dev_t *dev, uintptr_t *io_reg_address, size_t *io_reg_size)
    136133{
    137         assert(dev);
    138 
    139134        async_sess_t *parent_sess =
    140             devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle,
    141             IPC_FLAG_BLOCKING);
     135            devman_parent_device_connect(EXCHANGE_SERIALIZE,
     136            ddf_dev_get_handle(dev), IPC_FLAG_BLOCKING);
    142137        if (!parent_sess)
    143138                return ENOMEM;
  • uspace/drv/bus/usb/uhcirh/port.c

    r4f351432 r2568c94  
    279279        usb_log_info("%s: New device, address %d (handle %" PRIun ").\n",
    280280            port->id_string, port->attached_device.address,
    281             port->attached_device.fun->handle);
     281            ddf_fun_get_handle(port->attached_device.fun));
    282282        return EOK;
    283283}
  • uspace/drv/bus/usb/usbflbk/main.c

    r4f351432 r2568c94  
    6969            " (node `%s', handle %" PRIun ").\n",
    7070            dev->interface_no < 0 ? "device" : "interface",
    71             dev->ddf_dev->name, fun_name, dev->ddf_dev->handle);
     71            ddf_dev_get_name(dev->ddf_dev), fun_name, ddf_dev_get_handle(dev->ddf_dev));
    7272
    7373        return EOK;
     
    8585        const int ret = ddf_fun_unbind(ctl_fun);
    8686        if (ret != EOK) {
    87                 usb_log_error("Failed to unbind %s.\n", ctl_fun->name);
     87                usb_log_error("Failed to unbind %s.\n", ddf_fun_get_name(ctl_fun));
    8888                return ret;
    8989        }
  • uspace/drv/bus/usb/usbhid/generic/hiddev.c

    r4f351432 r2568c94  
    3535 */
    3636
     37/* XXX Fix this */
     38#define _DDF_DATA_IMPLANT
     39
    3740#include <usb/debug.h>
    3841#include <usb/classes/classes.h>
     
    8184};
    8285
     86/** Return hid_dev_t * for generic HID function node.
     87 *
     88 * For the generic HID subdriver the 'hid' function has usb_hid_gen_fun_t
     89 * as soft state. Through that we can get to the usb_hid_dev_t.
     90 */
     91static usb_hid_dev_t *fun_hid_dev(ddf_fun_t *fun)
     92{
     93        return ((usb_hid_gen_fun_t *)ddf_fun_data_get(fun))->hid_dev;
     94}
     95
    8396static size_t usb_generic_hid_get_event_length(ddf_fun_t *fun)
    8497{
    8598        usb_log_debug2("Generic HID: Get event length (fun: %p, "
    86             "fun->driver_data: %p.\n", fun, fun->driver_data);
    87 
    88         if (fun == NULL || fun->driver_data == NULL) {
    89                 return 0;
    90         }
    91 
    92         const usb_hid_dev_t *hid_dev = fun->driver_data;
     99            "fun->driver_data: %p.\n", fun, ddf_fun_data_get(fun));
     100
     101        const usb_hid_dev_t *hid_dev = fun_hid_dev(fun);
    93102
    94103        usb_log_debug2("hid_dev: %p, Max input report size (%zu).\n",
     
    103112        usb_log_debug2("Generic HID: Get event.\n");
    104113
    105         if (fun == NULL || fun->driver_data == NULL || buffer == NULL
    106             || act_size == NULL || event_nr == NULL) {
     114        if (buffer == NULL || act_size == NULL || event_nr == NULL) {
    107115                usb_log_debug("No function");
    108116                return EINVAL;
    109117        }
    110118
    111         const usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data;
     119        const usb_hid_dev_t *hid_dev = fun_hid_dev(fun);
    112120
    113121        if (hid_dev->input_report_size > size) {
     
    132140        usb_log_debug("Generic HID: Get report descriptor length.\n");
    133141
    134         if (fun == NULL || fun->driver_data == NULL) {
    135                 usb_log_debug("No function");
    136                 return EINVAL;
    137         }
    138 
    139         const usb_hid_dev_t *hid_dev = fun->driver_data;
     142        const usb_hid_dev_t *hid_dev = fun_hid_dev(fun);
    140143
    141144        usb_log_debug2("hid_dev->report_desc_size = %zu\n",
     
    150153        usb_log_debug2("Generic HID: Get report descriptor.\n");
    151154
    152         if (fun == NULL || fun->driver_data == NULL) {
    153                 usb_log_debug("No function");
    154                 return EINVAL;
    155         }
    156 
    157         const usb_hid_dev_t *hid_dev = fun->driver_data;
     155        const usb_hid_dev_t *hid_dev = fun_hid_dev(fun);
    158156
    159157        if (hid_dev->report_desc_size > size) {
     
    183181                return;
    184182        }
    185         usb_log_debug2("%s unbound.\n", fun->name);
    186         /* We did not allocate this, so leave this alone
    187          * the device would take care of it */
    188         fun->driver_data = NULL;
     183        usb_log_debug2("%s unbound.\n", ddf_fun_get_name(fun));
    189184        ddf_fun_destroy(fun);
    190185}
     
    192187int usb_generic_hid_init(usb_hid_dev_t *hid_dev, void **data)
    193188{
     189        usb_hid_gen_fun_t *hid_fun;
     190
    194191        if (hid_dev == NULL) {
    195192                return EINVAL;
     
    205202        }
    206203
    207         /* This is nasty, both device and this function have the same
    208          * driver data, thus destruction causes to double free */
    209         fun->driver_data = hid_dev;
    210         fun->ops = &usb_generic_hid_ops;
     204        /* Create softstate */
     205        hid_fun = ddf_fun_data_alloc(fun, sizeof(usb_hid_gen_fun_t));
     206        hid_fun->hid_dev = hid_dev;
     207        ddf_fun_set_ops(fun, &usb_generic_hid_ops);
    211208
    212209        int rc = ddf_fun_bind(fun);
     
    214211                usb_log_error("Could not bind DDF function: %s.\n",
    215212                    str_error(rc));
    216                 fun->driver_data = NULL;
    217213                ddf_fun_destroy(fun);
    218214                return rc;
    219215        }
    220216
    221         usb_log_debug("HID function created. Handle: %" PRIun "\n", fun->handle);
     217        usb_log_debug("HID function created. Handle: %" PRIun "\n",
     218            ddf_fun_get_handle(fun));
    222219        *data = fun;
    223220
  • uspace/drv/bus/usb/usbhid/generic/hiddev.h

    r4f351432 r2568c94  
    4747const char *HID_GENERIC_CLASS_NAME;
    4848
    49 
     49/** The USB HID generic 'hid' function softstate */
     50typedef struct {
     51        struct usb_hid_dev *hid_dev;
     52} usb_hid_gen_fun_t;
    5053
    5154int usb_generic_hid_init(struct usb_hid_dev *hid_dev, void **data);
  • uspace/drv/bus/usb/usbhid/kbd/kbddev.c

    r4f351432 r2568c94  
    3434 * USB HID keyboard device structure and API.
    3535 */
     36
     37/* XXX Fix this */
     38#define _DDF_DATA_IMPLANT
    3639
    3740#include <errno.h>
     
    162165    ipc_callid_t icallid, ipc_call_t *icall)
    163166{
    164         if (fun == NULL || fun->driver_data == NULL) {
    165                 usb_log_error("%s: Missing parameter.\n", __FUNCTION__);
    166                 async_answer_0(icallid, EINVAL);
    167                 return;
    168         }
    169 
    170167        const sysarg_t method = IPC_GET_IMETHOD(*icall);
    171         usb_kbd_t *kbd_dev = fun->driver_data;
     168        usb_kbd_t *kbd_dev = ddf_fun_data_get(fun);
    172169
    173170        switch (method) {
     
    501498        /* Store the initialized HID device and HID ops
    502499         * to the DDF function. */
    503         fun->ops = &kbdops;
    504         fun->driver_data = kbd_dev;
     500        ddf_fun_set_ops(fun, &kbdops);
     501        ddf_fun_data_implant(fun, kbd_dev);
    505502
    506503        int rc = ddf_fun_bind(fun);
     
    508505                usb_log_error("Could not bind DDF function: %s.\n",
    509506                    str_error(rc));
    510                 fun->driver_data = NULL; /* We did not allocate this. */
    511507                ddf_fun_destroy(fun);
    512508                return rc;
     
    514510
    515511        usb_log_debug("%s function created. Handle: %" PRIun "\n",
    516             HID_KBD_FUN_NAME, fun->handle);
     512            HID_KBD_FUN_NAME, ddf_fun_get_handle(fun));
    517513
    518514        usb_log_debug("Adding DDF function to category %s...\n",
     
    524520                    HID_KBD_CLASS_NAME, str_error(rc));
    525521                if (ddf_fun_unbind(fun) == EOK) {
    526                         fun->driver_data = NULL; /* We did not allocate this. */
    527522                        ddf_fun_destroy(fun);
    528523                } else {
    529524                        usb_log_error(
    530525                            "Failed to unbind `%s', will not destroy.\n",
    531                             fun->name);
     526                            ddf_fun_get_name(fun));
    532527                }
    533528                return rc;
     
    757752                if (ddf_fun_unbind(kbd_dev->fun) != EOK) {
    758753                        usb_log_warning("Failed to unbind %s.\n",
    759                             kbd_dev->fun->name);
     754                            ddf_fun_get_name(kbd_dev->fun));
    760755                } else {
    761                         usb_log_debug2("%s unbound.\n", kbd_dev->fun->name);
    762                         kbd_dev->fun->driver_data = NULL;
     756                        usb_log_debug2("%s unbound.\n",
     757                            ddf_fun_get_name(kbd_dev->fun));
    763758                        ddf_fun_destroy(kbd_dev->fun);
    764759                }
    765760        }
    766         free(kbd_dev);
    767761}
    768762
  • uspace/drv/bus/usb/usbhid/main.c

    r4f351432 r2568c94  
    103103        if (rc != EOK) {
    104104                usb_log_error("Failed to start polling fibril for `%s'.\n",
    105                     dev->ddf_dev->name);
     105                    ddf_dev_get_name(dev->ddf_dev));
    106106                usb_hid_deinit(hid_dev);
    107107                return rc;
     
    109109        hid_dev->running = true;
    110110
    111         usb_log_info("HID device `%s' ready to use.\n", dev->ddf_dev->name);
     111        usb_log_info("HID device `%s' ready to use.\n",
     112            ddf_dev_get_name(dev->ddf_dev));
    112113
    113114        return EOK;
     
    149150
    150151        usb_hid_deinit(hid_dev);
    151         usb_log_debug2("%s destruction complete.\n", dev->ddf_dev->name);
     152        usb_log_debug2("%s destruction complete.\n", ddf_dev_get_name(dev->ddf_dev));
    152153        return EOK;
    153154}
  • uspace/drv/bus/usb/usbhid/mouse/mousedev.c

    r4f351432 r2568c94  
    3434 * USB Mouse driver API.
    3535 */
     36
     37/* XXX Fix this */
     38#define _DDF_DATA_IMPLANT
    3639
    3740#include <usb/debug.h>
     
    115118    ipc_callid_t icallid, ipc_call_t *icall)
    116119{
    117         usb_mouse_t *mouse_dev = fun->driver_data;
     120        usb_mouse_t *mouse_dev = ddf_fun_data_get(fun);
    118121
    119122        if (mouse_dev == NULL) {
     
    123126        }
    124127
    125         usb_log_debug("%s: fun->name: %s\n", __FUNCTION__, fun->name);
     128        usb_log_debug("%s: fun->name: %s\n", __FUNCTION__, ddf_fun_get_name(fun));
    126129        usb_log_debug("%s: mouse_sess: %p\n",
    127130            __FUNCTION__, mouse_dev->mouse_sess);
     
    133136                        mouse_dev->mouse_sess = sess;
    134137                        usb_log_debug("Console session to %s set ok (%p).\n",
    135                             fun->name, sess);
     138                            ddf_fun_get_name(fun), sess);
    136139                        async_answer_0(icallid, EOK);
    137140                } else {
    138141                        usb_log_error("Console session to %s already set.\n",
    139                             fun->name);
     142                            ddf_fun_get_name(fun));
    140143                        async_answer_0(icallid, ELIMIT);
    141144                        async_hangup(sess);
     
    249252if (fun) { \
    250253        if (ddf_fun_unbind((fun)) == EOK) { \
    251                 (fun)->driver_data = NULL; \
    252254                ddf_fun_destroy((fun)); \
    253255        } else { \
    254256                usb_log_error("Could not unbind function `%s', it " \
    255                     "will not be destroyed.\n", (fun)->name); \
     257                    "will not be destroyed.\n", ddf_fun_get_name(fun)); \
    256258        } \
    257259} else (void)0
     
    272274        }
    273275
    274         fun->ops = &ops;
    275         fun->driver_data = mouse;
     276        ddf_fun_set_ops(fun, &ops);
     277        ddf_fun_data_implant(fun, mouse);
    276278
    277279        int rc = ddf_fun_bind(fun);
    278280        if (rc != EOK) {
    279281                usb_log_error("Could not bind DDF function `%s': %s.\n",
    280                     fun->name, str_error(rc));
    281                 fun->driver_data = NULL;
     282                    ddf_fun_get_name(fun), str_error(rc));
    282283                ddf_fun_destroy(fun);
    283284                return rc;
     
    285286
    286287        usb_log_debug("Adding DDF function `%s' to category %s...\n",
    287             fun->name, HID_MOUSE_CATEGORY);
     288            ddf_fun_get_name(fun), HID_MOUSE_CATEGORY);
    288289        rc = ddf_fun_add_to_category(fun, HID_MOUSE_CATEGORY);
    289290        if (rc != EOK) {
     
    419420
    420421        free(mouse_dev->buttons);
    421         free(mouse_dev);
    422422}
    423423
  • uspace/drv/bus/usb/usbhid/multimedia/multimedia.c

    r4f351432 r2568c94  
    8686{
    8787        usb_log_debug(NAME " default_connection_handler()\n");
    88         if (fun == NULL || fun->driver_data == NULL) {
    89                 async_answer_0(icallid, EINVAL);
    90                 return;
    91         }
    92 
    93         usb_multimedia_t *multim_dev = fun->driver_data;
     88
     89        usb_multimedia_t *multim_dev = ddf_fun_data_get(fun);
    9490
    9591        async_sess_t *sess =
     
    172168        }
    173169
    174         fun->ops = &multimedia_ops;
     170        ddf_fun_set_ops(fun, &multimedia_ops);
    175171
    176172        usb_multimedia_t *multim_dev =
     
    194190
    195191        usb_log_debug(NAME " function created (handle: %" PRIun ").\n",
    196             fun->handle);
     192            ddf_fun_get_handle(fun));
    197193
    198194        rc = ddf_fun_add_to_category(fun, "keyboard");
     
    203199                if (ddf_fun_unbind(fun) != EOK) {
    204200                        usb_log_error("Failed to unbind %s, won't destroy.\n",
    205                             fun->name);
     201                            ddf_fun_get_name(fun));
    206202                } else {
    207203                        ddf_fun_destroy(fun);
     
    220216{
    221217        ddf_fun_t *fun = data;
    222         if (fun != NULL && fun->driver_data != NULL) {
    223                 usb_multimedia_t *multim_dev = fun->driver_data;
    224                 /* Hangup session to the console */
    225                 if (multim_dev->console_sess)
    226                         async_hangup(multim_dev->console_sess);
    227                 if (ddf_fun_unbind(fun) != EOK) {
    228                         usb_log_error("Failed to unbind %s, won't destroy.\n",
    229                             fun->name);
    230                 } else {
    231                         usb_log_debug2("%s unbound.\n", fun->name);
    232                         /* This frees multim_dev too as it was stored in
    233                          * fun->data */
    234                         ddf_fun_destroy(fun);
    235                 }
     218
     219        usb_multimedia_t *multim_dev = ddf_fun_data_get(fun);
     220
     221        /* Hangup session to the console */
     222        if (multim_dev->console_sess)
     223                async_hangup(multim_dev->console_sess);
     224        if (ddf_fun_unbind(fun) != EOK) {
     225                usb_log_error("Failed to unbind %s, won't destroy.\n",
     226                    ddf_fun_get_name(fun));
    236227        } else {
    237                 usb_log_error(
    238                     "Failed to deinit multimedia subdriver, data missing.\n");
     228                usb_log_debug2("%s unbound.\n", ddf_fun_get_name(fun));
     229                /* This frees multim_dev too as it was stored in
     230                 * fun->data */
     231                ddf_fun_destroy(fun);
    239232        }
    240233}
     
    244237        // TODO: checks
    245238        ddf_fun_t *fun = data;
    246         if (hid_dev == NULL || fun == NULL || fun->driver_data == NULL) {
     239        if (hid_dev == NULL) {
    247240                return false;
    248241        }
    249242
    250         usb_multimedia_t *multim_dev = fun->driver_data;
     243        usb_multimedia_t *multim_dev = ddf_fun_data_get(fun);
    251244
    252245        usb_hid_report_path_t *path = usb_hid_report_path();
  • uspace/drv/bus/usb/usbhub/port.c

    r4f351432 r2568c94  
    436436                usb_log_info("Detected new device on `%s' (port %zu), "
    437437                    "address %d (handle %" PRIun ").\n",
    438                     data->hub->usb_device->ddf_dev->name,
    439                     data->port->port_number, new_address, child_fun->handle);
     438                    ddf_dev_get_name(data->hub->usb_device->ddf_dev),
     439                    data->port->port_number, new_address,
     440                    ddf_fun_get_handle(child_fun));
    440441        } else {
    441442                usb_log_error("Failed registering device on port %zu: %s.\n",
  • uspace/drv/bus/usb/usbhub/usbhub.c

    r4f351432 r2568c94  
    160160        hub_dev->running = true;
    161161        usb_log_info("Controlling hub '%s' (%zu ports).\n",
    162             hub_dev->usb_device->ddf_dev->name, hub_dev->port_count);
     162            ddf_dev_get_name(hub_dev->usb_device->ddf_dev), hub_dev->port_count);
    163163
    164164        usb_pipe_end_long_transfer(&usb_dev->ctrl_pipe);
  • uspace/drv/bus/usb/usbmast/main.c

    r4f351432 r2568c94  
    160160        mdev->usb_dev = dev;
    161161
    162         usb_log_info("Initializing mass storage `%s'.\n", dev->ddf_dev->name);
     162        usb_log_info("Initializing mass storage `%s'.\n", ddf_dev_get_name(dev->ddf_dev));
    163163        usb_log_debug("Bulk in endpoint: %d [%zuB].\n",
    164164            dev->pipes[BULK_IN_EP].pipe.endpoint_no,
     
    245245
    246246        /* Set up a connection handler. */
    247         fun->conn_handler = usbmast_bd_connection;
     247        ddf_fun_set_conn_handler(fun, usbmast_bd_connection);
    248248
    249249        usb_log_debug("Inquire...\n");
     
    252252        if (rc != EOK) {
    253253                usb_log_warning("Failed to inquire device `%s': %s.\n",
    254                     mdev->ddf_dev->name, str_error(rc));
     254                    ddf_dev_get_name(mdev->ddf_dev), str_error(rc));
    255255                rc = EIO;
    256256                goto error;
     
    259259        usb_log_info("Mass storage `%s' LUN %u: " \
    260260            "%s by %s rev. %s is %s (%s).\n",
    261             mdev->ddf_dev->name,
     261            ddf_dev_get_name(mdev->ddf_dev),
    262262            lun,
    263263            inquiry.product,
     
    272272        if (rc != EOK) {
    273273                usb_log_warning("Failed to read capacity, device `%s': %s.\n",
    274                     mdev->ddf_dev->name, str_error(rc));
     274                    ddf_dev_get_name(mdev->ddf_dev), str_error(rc));
    275275                rc = EIO;
    276276                goto error;
     
    310310        usbmast_fun_t *mfun;
    311311
    312         mfun = (usbmast_fun_t *) ((ddf_fun_t *)arg)->driver_data;
     312        mfun = (usbmast_fun_t *) ddf_fun_data_get((ddf_fun_t *)arg);
    313313        bd_conn(iid, icall, &mfun->bds);
    314314}
  • uspace/drv/bus/usb/usbmast/scsi_ms.c

    r4f351432 r2568c94  
    8888                if (rc != EOK) {
    8989                        usb_log_error("Inquiry transport failed, device %s: %s.\n",
    90                            mfun->mdev->ddf_dev->name, str_error(rc));
     90                           ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    9191                        return rc;
    9292                }
     
    9696
    9797                usb_log_error("SCSI command failed, device %s.\n",
    98                     mfun->mdev->ddf_dev->name);
     98                    ddf_dev_get_name(mfun->mdev->ddf_dev));
    9999
    100100                rc = usbmast_request_sense(mfun, &sense_buf, sizeof(sense_buf));
     
    147147        if (rc != EOK) {
    148148                usb_log_error("Inquiry transport failed, device %s: %s.\n",
    149                    mfun->mdev->ddf_dev->name, str_error(rc));
     149                   ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    150150                return rc;
    151151        }
     
    153153        if (cmd.status != CMDS_GOOD) {
    154154                usb_log_error("Inquiry command failed, device %s.\n",
    155                    mfun->mdev->ddf_dev->name);
     155                   ddf_dev_get_name(mfun->mdev->ddf_dev));
    156156                return EIO;
    157157        }
     
    215215        if (rc != EOK || cmd.status != CMDS_GOOD) {
    216216                usb_log_error("Request Sense failed, device %s: %s.\n",
    217                    mfun->mdev->ddf_dev->name, str_error(rc));
     217                   ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    218218                return rc;
    219219        }
     
    257257        if (rc != EOK) {
    258258                usb_log_error("Read Capacity (10) transport failed, device %s: %s.\n",
    259                    mfun->mdev->ddf_dev->name, str_error(rc));
     259                   ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    260260                return rc;
    261261        }
     
    263263        if (cmd.status != CMDS_GOOD) {
    264264                usb_log_error("Read Capacity (10) command failed, device %s.\n",
    265                    mfun->mdev->ddf_dev->name);
     265                   ddf_dev_get_name(mfun->mdev->ddf_dev));
    266266                return EIO;
    267267        }
     
    314314        if (rc != EOK) {
    315315                usb_log_error("Read (10) transport failed, device %s: %s.\n",
    316                    mfun->mdev->ddf_dev->name, str_error(rc));
     316                   ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    317317                return rc;
    318318        }
     
    320320        if (cmd.status != CMDS_GOOD) {
    321321                usb_log_error("Read (10) command failed, device %s.\n",
    322                    mfun->mdev->ddf_dev->name);
     322                   ddf_dev_get_name(mfun->mdev->ddf_dev));
    323323                return EIO;
    324324        }
     
    370370        if (rc != EOK) {
    371371                usb_log_error("Write (10) transport failed, device %s: %s.\n",
    372                    mfun->mdev->ddf_dev->name, str_error(rc));
     372                   ddf_dev_get_name(mfun->mdev->ddf_dev), str_error(rc));
    373373                return rc;
    374374        }
     
    376376        if (cmd.status != CMDS_GOOD) {
    377377                usb_log_error("Write (10) command failed, device %s.\n",
    378                    mfun->mdev->ddf_dev->name);
     378                   ddf_dev_get_name(mfun->mdev->ddf_dev));
    379379                return EIO;
    380380        }
  • uspace/drv/bus/usb/usbmid/explore.c

    r4f351432 r2568c94  
    172172                return false;
    173173        }
    174         usb_mid->ctl_fun->ops = &mid_device_ops;
     174        ddf_fun_set_ops(usb_mid->ctl_fun, &mid_device_ops);
    175175
    176176        /* Bind control function. */
  • uspace/drv/bus/usb/usbmid/main.c

    r4f351432 r2568c94  
    5151static int usbmid_device_add(usb_device_t *dev)
    5252{
    53         usb_log_info("Taking care of new MID `%s'.\n", dev->ddf_dev->name);
     53        usb_log_info("Taking care of new MID `%s'.\n", ddf_dev_get_name(dev->ddf_dev));
    5454
    5555        const bool accept = usbmid_explore_device(dev);
     
    127127        assert(usb_mid);
    128128
    129         usb_log_info("USB MID gone: `%s'.\n", dev->ddf_dev->name);
     129        usb_log_info("USB MID gone: `%s'.\n", ddf_dev_get_name(dev->ddf_dev));
    130130
    131131        /* Remove ctl function */
  • uspace/drv/bus/usb/usbmid/usbmid.c

    r4f351432 r2568c94  
    3030 * @{
    3131 */
     32
     33/* XXX Fix this */
     34#define _DDF_DATA_IMPLANT
     35
    3236/**
    3337 * @file
     
    4751static int usb_iface_get_interface_impl(ddf_fun_t *fun, int *iface_no)
    4852{
    49         assert(fun);
    50 
    51         usbmid_interface_t *iface = fun->driver_data;
     53        usbmid_interface_t *iface = ddf_fun_data_get(fun);
    5254        assert(iface);
    5355
     
    123125        }
    124126
     127        match_id_list_t match_ids;
     128        init_match_ids(&match_ids);
     129
    125130        rc = usb_device_create_match_ids_from_interface(device_descriptor,
    126             interface_descriptor, &child->match_ids);
     131            interface_descriptor, &match_ids);
    127132        if (rc != EOK) {
    128133                ddf_fun_destroy(child);
    129134                return rc;
    130135        }
     136
     137        list_foreach(match_ids.ids, link) {
     138                match_id_t *match_id = list_get_instance(link, match_id_t, link);
     139                rc = ddf_fun_add_match_id(child, match_id->id, match_id->score);
     140                if (rc != EOK) {
     141                        clean_match_ids(&match_ids);
     142                        ddf_fun_destroy(child);
     143                        return rc;
     144                }
     145        }
     146        clean_match_ids(&match_ids);
    131147
    132148        rc = ddf_fun_bind(child);
     
    138154
    139155        iface->fun = child;
    140         child->driver_data = iface;
    141         child->ops = &child_device_ops;
     156        ddf_fun_data_implant(child, iface);
     157        ddf_fun_set_ops(child, &child_device_ops);
    142158
    143159        return EOK;
  • uspace/drv/bus/usb/vhc/conndev.c

    r4f351432 r2568c94  
    9494    ipc_call_t *icall)
    9595{
    96         vhc_data_t *vhc = fun->dev->driver_data;
     96        vhc_data_t *vhc = ddf_dev_data_get(ddf_fun_get_dev(fun));
    9797       
    9898        async_sess_t *callback =
     
    125125void on_client_close(ddf_fun_t *fun)
    126126{
    127         vhc_data_t *vhc = fun->dev->driver_data;
     127        vhc_data_t *vhc = ddf_dev_data_get(ddf_fun_get_dev(fun));
    128128
    129129        if (plugged_device_handle != 0) {
  • uspace/drv/bus/usb/vhc/connhost.c

    r4f351432 r2568c94  
    4242
    4343#define GET_VHC_DATA(fun) \
    44         ((vhc_data_t *)fun->dev->driver_data)
     44        ((vhc_data_t *)ddf_dev_data_get(ddf_fun_get_dev(fun)))
    4545#define VHC_DATA(vhc, fun) \
    4646        vhc_data_t *vhc = GET_VHC_DATA(fun); assert(vhc->magic == 0xdeadbeef)
     
    483483        VHC_DATA(vhc, root_hub_fun);
    484484
    485         *handle = vhc->hc_fun->handle;
     485        *handle = ddf_fun_get_handle(vhc->hc_fun);
    486486
    487487        return EOK;
     
    492492        VHC_DATA(vhc, root_hub_fun);
    493493
    494         devman_handle_t handle = root_hub_fun->handle;
     494        devman_handle_t handle = ddf_fun_get_handle(root_hub_fun);
    495495
    496496        usb_log_debug("tell_address_rh(handle=%" PRIun ")\n", handle);
  • uspace/drv/bus/usb/vhc/hub.c

    r4f351432 r2568c94  
    100100        async_sess_t *sess;
    101101        do {
    102                 sess = devman_device_connect(EXCHANGE_SERIALIZE, hc_dev->handle, 0);
     102                sess = devman_device_connect(EXCHANGE_SERIALIZE,
     103                    ddf_fun_get_handle(hc_dev), 0);
    103104        } while (!sess);
    104105        async_hangup(sess);
     
    107108
    108109        usb_hc_connection_t hc_conn;
    109         usb_hc_connection_initialize(&hc_conn, hc_dev->handle);
     110        usb_hc_connection_initialize(&hc_conn, ddf_fun_get_handle(hc_dev));
    110111
    111112        rc = usb_hc_connection_open(&hc_conn);
     
    113114
    114115        ddf_fun_t *hub_dev;
    115         rc = usb_hc_new_device_wrapper(hc_dev->dev, &hc_conn, USB_SPEED_FULL,
     116        rc = usb_hc_new_device_wrapper(ddf_fun_get_dev(hc_dev), &hc_conn, USB_SPEED_FULL,
    116117            pretend_port_rest, NULL, NULL, &rh_ops, hc_dev, &hub_dev);
    117118        if (rc != EOK) {
     
    123124
    124125        usb_log_info("Created root hub function (handle %zu).\n",
    125             (size_t) hub_dev->handle);
     126            (size_t) ddf_fun_get_handle(hub_dev));
    126127
    127128        return 0;
  • uspace/drv/bus/usb/vhc/main.c

    r4f351432 r2568c94  
    6767        }
    6868
    69         vhc_data_t *data = malloc(sizeof(vhc_data_t));
     69        vhc_data_t *data = ddf_dev_data_alloc(dev, sizeof(vhc_data_t));
    7070        if (data == NULL) {
    7171                usb_log_fatal("Failed to allocate memory.\n");
     
    8989        }
    9090
    91         hc->ops = &vhc_ops;
     91        ddf_fun_set_ops(hc, &vhc_ops);
    9292        list_initialize(&data->devices);
    9393        fibril_mutex_initialize(&data->guard);
    9494        data->hub = &virtual_hub_device;
    9595        data->hc_fun = hc;
    96 
    97         dev->driver_data = data;
    9896
    9997        rc = ddf_fun_bind(hc);
     
    116114
    117115        usb_log_info("Virtual USB host controller ready (dev %zu, hc %zu).\n",
    118             (size_t) dev->handle, (size_t) hc->handle);
    119 
    120 
     116            (size_t) ddf_dev_get_handle(dev), (size_t) ddf_fun_get_handle(hc));
    121117
    122118        rc = vhc_virtdev_plug_hub(data, data->hub, NULL);
Note: See TracChangeset for help on using the changeset viewer.