Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbdev/src/devdrv.c

    rc0fdc0e r0c0f823b  
    170170                return ENOTSUP;
    171171        /* Just tell the driver to stop whatever it is doing, keep structures */
    172         const int ret = driver->ops->device_rem(gen_dev->driver_data);
    173         if (ret != EOK)
    174                 return ret;
    175         return ENOTSUP;
     172        return driver->ops->device_rem(gen_dev->driver_data);
    176173}
    177174/*----------------------------------------------------------------------------*/
     
    376373        }
    377374
     375        /* Register the endpoints with HC. */
     376        usb_hc_connection_t hc_conn;
     377        rc = usb_hc_connection_initialize_from_device(&hc_conn, dev);
     378        if (rc != EOK) {
     379                goto rollback_free_only;
     380        }
     381
     382        rc = usb_hc_connection_open(&hc_conn);
     383        if (rc != EOK) {
     384                goto rollback_free_only;
     385        }
     386
    378387        for (i = 0; i < pipe_count; i++) {
    379388                if (pipes[i].present) {
    380389                        rc = usb_pipe_register(&pipes[i].pipe,
    381                             pipes[i].descriptor->poll_interval);
     390                            pipes[i].descriptor->poll_interval, &hc_conn);
    382391                        if (rc != EOK) {
    383392                                goto rollback_unregister_endpoints;
     
    385394                }
    386395        }
     396
     397        if (usb_hc_connection_close(&hc_conn) != EOK)
     398                usb_log_warning("%s: Failed to close connection.\n",
     399                    __FUNCTION__);
    387400
    388401        *pipes_ptr = pipes;
     
    402415        for (i = 0; i < pipe_count; i++) {
    403416                if (pipes[i].present) {
    404                         usb_pipe_unregister(&pipes[i].pipe);
     417                        usb_pipe_unregister(&pipes[i].pipe, &hc_conn);
    405418                }
    406419        }
     420
     421        if (usb_hc_connection_close(&hc_conn) != EOK)
     422                usb_log_warning("usb_device_create_pipes(): "
     423                    "Failed to close connection.\n");
    407424
    408425        /*
     
    453470                    i, pipes[i].present ? "" : "not ");
    454471                if (pipes[i].present)
    455                         usb_pipe_unregister(&pipes[i].pipe);
    456         }
     472                        usb_pipe_unregister(&pipes[i].pipe, &hc_conn);
     473        }
     474
     475        if (usb_hc_connection_close(&hc_conn) != EOK)
     476                usb_log_warning("usb_device_destroy_pipes(): "
     477                    "Failed to close connection.\n");
    457478
    458479        free(pipes);
     
    484505        usb_dev->pipes = NULL;
    485506
    486         /* Initialize hc connection. */
    487         usb_hc_connection_initialize_from_device(&usb_dev->hc_conn, ddf_dev);
    488         const usb_address_t address =
    489             usb_get_address_by_handle(ddf_dev->handle);
    490 
    491507        /* Initialize backing wire and control pipe. */
    492         int rc = usb_device_connection_initialize(
    493             &usb_dev->wire, &usb_dev->hc_conn, address);
     508        int rc = usb_device_connection_initialize_from_device(
     509            &usb_dev->wire, ddf_dev);
    494510        if (rc != EOK) {
    495511                *errstr_ptr = "device connection initialization";
     
    499515        /* This pipe was registered by the hub driver,
    500516         * during device initialization. */
    501         rc = usb_pipe_initialize_default_control(
    502             &usb_dev->ctrl_pipe, &usb_dev->wire);
     517        rc = usb_pipe_initialize_default_control(&usb_dev->ctrl_pipe,
     518            &usb_dev->wire);
    503519        if (rc != EOK) {
    504520                *errstr_ptr = "default control pipe initialization";
    505                 return rc;
    506         }
    507 
    508         rc = usb_hc_connection_open(&usb_dev->hc_conn);
    509         if (rc != EOK) {
    510                 *errstr_ptr = "hc connection open";
    511521                return rc;
    512522        }
     
    514524        /* Get our interface. */
    515525        usb_dev->interface_no = usb_device_get_assigned_interface(ddf_dev);
     526
    516527        /* Retrieve standard descriptors. */
    517         rc = usb_device_retrieve_descriptors(
    518             &usb_dev->ctrl_pipe, &usb_dev->descriptors);
     528        rc = usb_device_retrieve_descriptors(&usb_dev->ctrl_pipe,
     529            &usb_dev->descriptors);
    519530        if (rc != EOK) {
    520531                *errstr_ptr = "descriptor retrieval";
    521                 usb_hc_connection_close(&usb_dev->hc_conn);
    522532                return rc;
    523533        }
     
    536546        rc = initialize_other_pipes(endpoints, usb_dev, alternate_iface);
    537547        if (rc != EOK) {
    538                 usb_hc_connection_close(&usb_dev->hc_conn);
    539548                /* Full configuration descriptor is allocated. */
    540549                usb_device_release_descriptors(&usb_dev->descriptors);
     
    545554        }
    546555
    547         usb_hc_connection_close(&usb_dev->hc_conn);
    548556        return EOK;
    549557}
Note: See TracChangeset for help on using the changeset viewer.