Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usb/src/recognise.c

    r0f21c0c r3f0ef89d  
    3434 */
    3535#include <sys/types.h>
     36#include <fibril_synch.h>
    3637#include <usb/pipes.h>
    3738#include <usb/recognise.h>
     
    4142#include <stdio.h>
    4243#include <errno.h>
     44#include <assert.h>
    4345
    4446static size_t device_name_index = 0;
    4547static FIBRIL_MUTEX_INITIALIZE(device_name_index_mutex);
    4648
    47 device_ops_t child_ops = {
     49ddf_dev_ops_t child_ops = {
    4850        .interfaces[USB_DEV_IFACE] = &usb_iface_hub_child_impl
    4951};
     
    308310        }
    309311
    310         /*
    311          * As a fallback, provide the simplest match id possible.
    312          */
    313         ADD_MATCHID_OR_RETURN(matches, 1, "usb&fallback");
    314 
    315312        return EOK;
    316313}
     
    326323int usb_device_register_child_in_devman(usb_address_t address,
    327324    devman_handle_t hc_handle,
    328     device_t *parent, devman_handle_t *child_handle)
     325    ddf_dev_t *parent, devman_handle_t *child_handle,
     326    ddf_dev_ops_t *dev_ops, void *dev_data, ddf_fun_t **child_fun)
    329327{
    330328        size_t this_device_name_index;
     
    335333        fibril_mutex_unlock(&device_name_index_mutex);
    336334
    337         device_t *child = NULL;
     335        ddf_fun_t *child = NULL;
    338336        char *child_name = NULL;
    339337        int rc;
     
    352350        }
    353351
    354         child = create_device();
     352        /*
     353         * TODO: Once the device driver framework support persistent
     354         * naming etc., something more descriptive could be created.
     355         */
     356        rc = asprintf(&child_name, "usbdev%02zu", this_device_name_index);
     357        if (rc < 0) {
     358                goto failure;
     359        }
     360
     361        child = ddf_fun_create(parent, fun_inner, child_name);
    355362        if (child == NULL) {
    356363                rc = ENOMEM;
     
    358365        }
    359366
    360         /*
    361          * TODO: Once the device driver framework support persistent
    362          * naming etc., something more descriptive could be created.
    363          */
    364         rc = asprintf(&child_name, "usbdev%02zu", this_device_name_index);
    365         if (rc < 0) {
    366                 goto failure;
    367         }
    368         child->parent = parent;
    369         child->name = child_name;
    370         child->ops = &child_ops;
     367        if (dev_ops != NULL) {
     368                child->ops = dev_ops;
     369        } else {
     370                child->ops = &child_ops;
     371        }
     372
     373        child->driver_data = dev_data;
    371374
    372375        rc = usb_endpoint_pipe_start_session(&ctrl_pipe);
     
    385388        }
    386389
    387         rc = child_device_register(child, parent);
     390        rc = ddf_fun_bind(child);
    388391        if (rc != EOK) {
    389392                goto failure;
     
    392395        if (child_handle != NULL) {
    393396                *child_handle = child->handle;
     397        }
     398
     399        if (child_fun != NULL) {
     400                *child_fun = child;
    394401        }
    395402
     
    400407                child->name = NULL;
    401408                /* This takes care of match_id deallocation as well. */
    402                 delete_device(child);
     409                ddf_fun_destroy(child);
    403410        }
    404411        if (child_name != NULL) {
Note: See TracChangeset for help on using the changeset viewer.