Changeset 56fd7cf in mainline for uspace/drv/bus/usb


Ignore:
Timestamp:
2012-08-17T11:37:03Z (13 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d5a540
Parents:
be2a38ad
Message:

Make ddf_dev_t and ddf_fun_t opaque. This further tighthens the DDF interface.

Location:
uspace/drv/bus/usb
Files:
32 edited

Legend:

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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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

    rbe2a38ad r56fd7cf  
    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.