Changeset eeca8a6 in mainline for uspace/lib/usbhost/src/bus.c


Ignore:
Timestamp:
2018-01-16T19:22:58Z (7 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4603b35
Parents:
47e9494
Message:

usb: speed moved from default address reservation to enumeration callback

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/usbhost/src/bus.c

    r47e9494 reeca8a6  
    6060        fibril_mutex_initialize(&bus->guard);
    6161        bus->device_size = device_size;
    62         bus->default_address_speed = USB_SPEED_MAX;
    6362}
    6463
     
    495494 * The speed is then used for devices enumerated while the address is reserved.
    496495 */
    497 int bus_reserve_default_address(bus_t *bus, usb_speed_t speed)
     496int bus_reserve_default_address(bus_t *bus, device_t *dev)
    498497{
    499498        assert(bus);
    500499
     500        int err;
    501501        fibril_mutex_lock(&bus->guard);
    502         if (bus->default_address_speed != USB_SPEED_MAX) {
    503                 fibril_mutex_unlock(&bus->guard);
    504                 return EAGAIN;
     502        if (bus->default_address_owner != NULL) {
     503                err = (bus->default_address_owner == dev) ? EINVAL : EAGAIN;
    505504        } else {
    506                 bus->default_address_speed = speed;
    507                 fibril_mutex_unlock(&bus->guard);
    508                 return EOK;
    509         }
     505                bus->default_address_owner = dev;
     506                err = EOK;
     507        }
     508        fibril_mutex_unlock(&bus->guard);
     509        return err;
    510510}
    511511
     
    513513 * Release the default address.
    514514 */
    515 void bus_release_default_address(bus_t *bus)
     515void bus_release_default_address(bus_t *bus, device_t *dev)
    516516{
    517517        assert(bus);
    518         bus->default_address_speed = USB_SPEED_MAX;
     518
     519        fibril_mutex_lock(&bus->guard);
     520        if (bus->default_address_owner != dev) {
     521                usb_log_error("Device %d tried to release address, which is not reserved for it.", dev->address);
     522        } else {
     523                bus->default_address_owner = NULL;
     524        }
     525        fibril_mutex_unlock(&bus->guard);
    519526}
    520527
Note: See TracChangeset for help on using the changeset viewer.