Changeset 51a51be in mainline for uspace/drv/bus/usb/usbhub/port.c


Ignore:
Timestamp:
2018-01-16T21:19:37Z (8 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
1d218bf
Parents:
4603b35
Message:

usbhub: aggregate requests for default address

File:
1 edited

Legend:

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

    r4603b35 r51a51be  
    243243        }
    244244
    245         /* Reserve default address
    246          * TODO: Make the request synchronous.
    247          */
    248         while ((err = usbhc_reserve_default_address(exch)) == EAGAIN) {
    249                 fibril_condvar_wait_timeout(&port->state_cv, &port->guard, 500000);
    250                 if (port->state != PORT_CONNECTED) {
    251                         assert(port->state == PORT_ERROR);
    252                         port_change_state(port, PORT_DISABLED);
    253                         goto out_exch;
    254                 }
    255         }
     245        /* Reserve default address */
     246        err = usb_hub_reserve_default_address(port->hub, exch, &port->guard);
    256247        if (err != EOK) {
    257248                port_log(error, port, "Failed to reserve default address: %s", str_error(err));
     249                port_change_state(port, PORT_DISABLED);
     250                goto out_exch;
     251        }
     252
     253        /* Reservation of default address could have blocked */
     254        if (port->state != PORT_CONNECTED) {
     255                assert(port->state == PORT_ERROR);
     256                port_change_state(port, PORT_DISABLED);
    258257                goto out_exch;
    259258        }
     
    282281        if (port->state != PORT_ENABLED)
    283282                usb_hub_clear_port_feature(port->hub, port->port_number, USB_HUB_FEATURE_C_PORT_ENABLE);
    284 
    285283out_address:
    286         if ((err = usbhc_release_default_address(exch)))
    287                 port_log(error, port, "Failed to release default address: %s", str_error(err));
    288 
     284        usb_hub_release_default_address(port->hub, exch);
    289285out_exch:
    290286        usb_device_bus_exchange_end(exch);
    291 
    292287out:
    293288        assert(port->state == PORT_ENABLED || port->state == PORT_DISABLED);
Note: See TracChangeset for help on using the changeset viewer.