Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset ffa96c2 in mainline


Ignore:
Timestamp:
2014-07-25T17:52:58Z (6 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
a861ccb3
Parents:
b5111c46
Message:

Convert libusbdev away from DDF_DATA_IMPLANT.

Location:
uspace
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/uhcirh/port.c

    rb5111c46 rffa96c2  
    269269        int ret, count = MAX_ERROR_COUNT;
    270270        do {
    271                 ret = usb_hc_new_device_wrapper(port->rh, &port->hc_connection,
     271                port->attached_device.fun = ddf_fun_create(port->rh, fun_inner,
     272                    NULL);
     273                if (port->attached_device.fun == NULL) {
     274                        ret = ENOMEM;
     275                        continue;
     276                }
     277
     278                ret = usb_hc_new_device_wrapper(port->rh,
     279                    port->attached_device.fun,
     280                    &port->hc_connection,
    272281                    speed, uhci_port_reset_enable, port,
    273                     &port->attached_device.address, NULL, NULL,
    274                     &port->attached_device.fun);
     282                    &port->attached_device.address, NULL);
     283
     284                if (ret != EOK) {
     285                        ddf_fun_destroy(port->attached_device.fun);
     286                        port->attached_device.fun = NULL;
     287                }
     288
    275289        } while (ret != EOK && count-- > 0);
    276290
  • uspace/drv/bus/usb/usbhub/port.c

    rb5111c46 rffa96c2  
    424424        ddf_fun_t *child_fun;
    425425
     426        child_fun = ddf_fun_create(data->hub->usb_device->ddf_dev,
     427            fun_inner, NULL);
     428        if (child_fun == NULL)
     429                return ENOMEM;
     430
    426431        const int rc = usb_hc_new_device_wrapper(data->hub->usb_device->ddf_dev,
    427             &data->hub->usb_device->hc_conn, data->speed, enable_port_callback,
    428             data->port, &new_address, NULL, NULL, &child_fun);
     432            child_fun, &data->hub->usb_device->hc_conn, data->speed,
     433            enable_port_callback, data->port, &new_address, NULL);
    429434
    430435        if (rc == EOK) {
     
    440445                    ddf_fun_get_handle(child_fun));
    441446        } else {
     447                ddf_fun_destroy(child_fun);
    442448                usb_log_error("Failed registering device on port %zu: %s.\n",
    443449                    data->port->port_number, str_error(rc));
  • uspace/drv/bus/usb/vhc/hub.c

    rb5111c46 rffa96c2  
    114114
    115115        ddf_fun_t *hub_dev;
    116         rc = usb_hc_new_device_wrapper(ddf_fun_get_dev(hc_dev), &hc_conn, USB_SPEED_FULL,
    117             pretend_port_rest, NULL, NULL, &rh_ops, hc_dev, &hub_dev);
     116
     117        hub_dev = ddf_fun_create(ddf_fun_get_dev(hc_dev), fun_inner, NULL);
     118        if (hub_dev == NULL) {
     119                rc = ENOMEM;
     120                usb_log_fatal("Failed to create root hub: %s.\n",
     121                    str_error(rc));
     122                return rc;
     123        }
     124
     125        rc = usb_hc_new_device_wrapper(ddf_fun_get_dev(hc_dev), hub_dev,
     126            &hc_conn, USB_SPEED_FULL, pretend_port_rest, NULL, NULL, &rh_ops);
    118127        if (rc != EOK) {
    119128                usb_log_fatal("Failed to create root hub: %s.\n",
    120129                    str_error(rc));
     130                ddf_fun_destroy(hub_dev);
    121131        }
    122132
  • uspace/lib/usbdev/include/usb/dev/hub.h

    rb5111c46 rffa96c2  
    4444#include <usb/hc.h>
    4545
    46 extern int usb_hc_new_device_wrapper(ddf_dev_t *, usb_hc_connection_t *, usb_speed_t,
    47     int (*)(void *), void *, usb_address_t *, ddf_dev_ops_t *, void *,
    48     ddf_fun_t **);
     46extern int usb_hc_new_device_wrapper(ddf_dev_t *, ddf_fun_t *,
     47    usb_hc_connection_t *, usb_speed_t, int (*)(void *), void *,
     48    usb_address_t *, ddf_dev_ops_t *);
    4949
    5050/** Info about device attached to host controller.
  • uspace/lib/usbdev/include/usb/dev/recognise.h

    rb5111c46 rffa96c2  
    5252
    5353extern int usb_device_register_child_in_devman(usb_pipe_t *ctrl_pipe,
    54     ddf_dev_t *, ddf_dev_ops_t *, void *, ddf_fun_t **);
     54    ddf_dev_t *, ddf_fun_t *, ddf_dev_ops_t *);
    5555
    5656#endif
  • uspace/lib/usbdev/src/hub.c

    rb5111c46 rffa96c2  
    155155 *      request or requests for descriptors when creating match ids).
    156156 */
    157 int usb_hc_new_device_wrapper(ddf_dev_t *parent,
     157int usb_hc_new_device_wrapper(ddf_dev_t *parent, ddf_fun_t *fun,
    158158    usb_hc_connection_t *hc_conn, usb_speed_t dev_speed,
    159159    int (*enable_port)(void *arg), void *arg, usb_address_t *assigned_address,
    160     ddf_dev_ops_t *dev_ops, void *new_dev_data, ddf_fun_t **new_fun)
     160    ddf_dev_ops_t *dev_ops)
    161161{
    162         if ((new_fun == NULL) || (hc_conn == NULL))
     162        if (hc_conn == NULL)
    163163                return EINVAL;
    164164
     
    271271        /* Register the device with devman. */
    272272        /* FIXME: create device_register that will get opened ctrl pipe. */
    273         ddf_fun_t *child_fun;
    274273        rc = usb_device_register_child_in_devman(&ctrl_pipe,
    275             parent, dev_ops, new_dev_data, &child_fun);
     274            parent, fun, dev_ops);
    276275        if (rc != EOK) {
    277276                goto leave_release_free_address;
     
    280279        const usb_hub_attached_device_t new_device = {
    281280                .address = dev_addr,
    282                 .fun = child_fun,
     281                .fun = fun,
    283282        };
    284283
     
    288287        if (rc != EOK) {
    289288                /* The child function is already created. */
    290                 ddf_fun_destroy(child_fun);
    291289                rc = EDESTADDRREQ;
    292290                goto leave_release_free_address;
     
    296294                *assigned_address = dev_addr;
    297295        }
    298 
    299         *new_fun = child_fun;
    300296
    301297        rc = EOK;
  • uspace/lib/usbdev/src/recognise.c

    rb5111c46 rffa96c2  
    3333 * Functions for recognition of attached devices.
    3434 */
    35 
    36 /** XXX Fix this */
    37 #define _DDF_DATA_IMPLANT
    3835
    3936#include <sys/types.h>
     
    318315 */
    319316int usb_device_register_child_in_devman(usb_pipe_t *ctrl_pipe,
    320     ddf_dev_t *parent, ddf_dev_ops_t *dev_ops, void *dev_data,
    321     ddf_fun_t **child_fun)
    322 {
    323         if (child_fun == NULL || ctrl_pipe == NULL)
     317    ddf_dev_t *parent, ddf_fun_t *fun, ddf_dev_ops_t *dev_ops)
     318{
     319        if (ctrl_pipe == NULL)
    324320                return EINVAL;
    325321       
    326         if (!dev_ops && dev_data) {
     322        if (!dev_ops && ddf_fun_data_get(fun) != NULL) {
    327323                usb_log_warning("Using standard fun ops with arbitrary "
    328324                    "driver data. This does not have to work.\n");
     
    334330            (size_t) atomic_preinc(&device_name_index);
    335331       
    336         ddf_fun_t *child = NULL;
    337332        int rc;
    338333       
     
    348343        }
    349344       
    350         child = ddf_fun_create(parent, fun_inner, child_name);
    351         if (child == NULL) {
    352                 rc = ENOMEM;
     345        rc = ddf_fun_set_name(fun, child_name);
     346        if (rc != EOK)
    353347                goto failure;
    354         }
    355348       
    356349        if (dev_ops != NULL)
    357                 ddf_fun_set_ops(child, dev_ops);
     350                ddf_fun_set_ops(fun, dev_ops);
    358351        else
    359                 ddf_fun_set_ops(child, &child_ops);
    360        
    361         ddf_fun_data_implant(child, dev_data);
     352                ddf_fun_set_ops(fun, &child_ops);
    362353       
    363354        /*
     
    365356         * driver data if there is no other data
    366357         */
    367         if (!dev_data) {
     358        if (ddf_fun_data_get(fun) == NULL) {
    368359                usb_hub_attached_device_t *new_device = ddf_fun_data_alloc(
    369                     child, sizeof(usb_hub_attached_device_t));
     360                    fun, sizeof(usb_hub_attached_device_t));
    370361                if (!new_device) {
    371362                        rc = ENOMEM;
     
    374365               
    375366                new_device->address = ctrl_pipe->wire->address;
    376                 new_device->fun = child;
     367                new_device->fun = fun;
    377368        }
    378369       
     
    384375       
    385376        list_foreach(match_ids.ids, link, match_id_t, match_id) {
    386                 rc = ddf_fun_add_match_id(child, match_id->id, match_id->score);
     377                rc = ddf_fun_add_match_id(fun, match_id->id, match_id->score);
    387378                if (rc != EOK) {
    388379                        clean_match_ids(&match_ids);
     
    393384        clean_match_ids(&match_ids);
    394385       
    395         rc = ddf_fun_bind(child);
     386        rc = ddf_fun_bind(fun);
    396387        if (rc != EOK)
    397388                goto failure;
    398389       
    399         *child_fun = child;
    400390        return EOK;
    401391       
    402392failure:
    403         if (child != NULL) {
    404                 /* This takes care of match_id deallocation as well. */
    405                 ddf_fun_destroy(child);
    406         }
    407        
    408393        return rc;
    409394}
Note: See TracChangeset for help on using the changeset viewer.