Ignore:
File:
1 edited

Legend:

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

    r61727bf r9f9b31ad  
    178178 * error codes than those listed as return codes by this function itself).
    179179 *
    180  * The @p connection representing connection with host controller does not
    181  * need to be started.
    182  * This function duplicates the connection to allow simultaneous calls of
    183  * this function (i.e. from different fibrils).
    184  *
    185180 * @param[in] parent Parent device (i.e. the hub device).
    186  * @param[in] connection Connection to host controller.
     181 * @param[in] connection Opened connection to host controller.
    187182 * @param[in] dev_speed New device speed.
    188183 * @param[in] enable_port Function for enabling signaling through the port the
     
    211206    ddf_dev_ops_t *dev_ops, void *new_dev_data, ddf_fun_t **new_fun)
    212207{
    213         assert(connection != NULL);
    214         // FIXME: this is awful, we are accessing directly the structure.
    215         usb_hc_connection_t hc_conn = {
    216                 .hc_handle = connection->hc_handle,
    217                 .hc_phone = -1
    218         };
     208        CHECK_CONNECTION(connection);
     209
     210        /*
     211         * Request new address.
     212         */
     213        usb_address_t dev_addr = usb_hc_request_address(connection, dev_speed);
     214        if (dev_addr < 0) {
     215                return EADDRNOTAVAIL;
     216        }
    219217
    220218        int rc;
    221219
    222         rc = usb_hc_connection_open(&hc_conn);
    223         if (rc != EOK) {
    224                 return rc;
    225         }
    226 
    227 
    228         /*
    229          * Request new address.
    230          */
    231         usb_address_t dev_addr = usb_hc_request_address(&hc_conn, dev_speed);
    232         if (dev_addr < 0) {
    233                 usb_hc_connection_close(&hc_conn);
    234                 return EADDRNOTAVAIL;
    235         }
    236 
    237 
    238220        /*
    239221         * Reserve the default address.
    240222         */
    241         rc = usb_hc_reserve_default_address(&hc_conn, dev_speed);
     223        rc = usb_hc_reserve_default_address(connection, dev_speed);
    242224        if (rc != EOK) {
    243225                rc = EBUSY;
     
    259241        usb_device_connection_t dev_conn;
    260242        rc = usb_device_connection_initialize_on_default_address(&dev_conn,
    261             &hc_conn);
     243            connection);
    262244        if (rc != EOK) {
    263245                rc = ENOTCONN;
     
    276258         * endpoint.
    277259         */
    278         rc = usb_pipe_register(&ctrl_pipe, 0, &hc_conn);
     260        rc = usb_pipe_register(&ctrl_pipe, 0, connection);
    279261        if (rc != EOK) {
    280262                rc = EREFUSED;
     
    304286         * Register the control endpoint for the new device.
    305287         */
    306         rc = usb_pipe_register(&ctrl_pipe, 0, &hc_conn);
     288        rc = usb_pipe_register(&ctrl_pipe, 0, connection);
    307289        if (rc != EOK) {
    308290                rc = EREFUSED;
     
    313295         * Release the original endpoint.
    314296         */
    315         unregister_control_endpoint_on_default_address(&hc_conn);
     297        unregister_control_endpoint_on_default_address(connection);
    316298
    317299        /*
    318300         * Once the address is changed, we can return the default address.
    319301         */
    320         usb_hc_release_default_address(&hc_conn);
     302        usb_hc_release_default_address(connection);
    321303
    322304
     
    343325                .handle = child_handle
    344326        };
    345         rc = usb_hc_register_device(&hc_conn, &new_device);
     327        rc = usb_hc_register_device(connection, &new_device);
    346328        if (rc != EOK) {
    347329                rc = EDESTADDRREQ;
     
    372354
    373355leave_unregister_endpoint:
    374         usb_pipe_unregister(&ctrl_pipe, &hc_conn);
     356        usb_pipe_unregister(&ctrl_pipe, connection);
    375357
    376358leave_release_default_address:
    377         usb_hc_release_default_address(&hc_conn);
     359        usb_hc_release_default_address(connection);
    378360
    379361leave_release_free_address:
    380         usb_hc_unregister_device(&hc_conn, dev_addr);
    381 
    382         usb_hc_connection_close(&hc_conn);
     362        usb_hc_unregister_device(connection, dev_addr);
    383363
    384364        return rc;
Note: See TracChangeset for help on using the changeset viewer.