Changeset 5e2b1ae6 in mainline for uspace/lib/usbhost/src/usb2_bus.c


Ignore:
Timestamp:
2018-01-07T01:54:45Z (6 years ago)
Author:
Ondřej Hlavatý <aearsis@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
3dc3f99
Parents:
63431db
Message:

usbhost: reserve default speed in library

File:
1 edited

Legend:

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

    r63431db r5e2b1ae6  
    100100 * @param bus usb_device_manager
    101101 * @param addr Pointer to requested address value, place to store new address
    102  * @parma strict Fail if the requested address is not available.
    103102 * @return Error code.
    104103 * @note Default address is only available in strict mode.
    105104 */
    106 static int request_address(usb2_bus_t *bus, usb_address_t *addr, bool strict)
     105static int request_address(usb2_bus_t *bus, usb_address_t *addr)
    107106{
    108107        int err;
     
    114113                return EINVAL;
    115114
    116         /* Only grant default address to strict requests */
    117         if ((*addr == USB_ADDRESS_DEFAULT) && !strict) {
    118                 if ((err = get_free_address(bus, addr)))
    119                         return err;
    120         }
    121         else if (bus->address_occupied[*addr]) {
    122                 if (strict) {
    123                         return ENOENT;
    124                 }
    125                 if ((err = get_free_address(bus, addr)))
    126                         return err;
    127         }
     115        if ((err = get_free_address(bus, addr)))
     116                return err;
    128117
    129118        assert(usb_address_is_valid(*addr));
    130119        assert(bus->address_occupied[*addr] == false);
    131         assert(*addr != USB_ADDRESS_DEFAULT || strict);
     120        assert(*addr != USB_ADDRESS_DEFAULT);
    132121
    133122        bus->address_occupied[*addr] = true;
     
    152141        /** Reserve address early, we want pretty log messages */
    153142        usb_address_t address = USB_ADDRESS_DEFAULT;
    154         if ((err = request_address(bus, &address, false))) {
     143        if ((err = request_address(bus, &address))) {
    155144                usb_log_error("Failed to reserve new address: %s.",
    156145                    str_error(err));
     
    231220         * default address.
    232221         */
    233         dev->speed = bus->default_address_speed;
     222        dev->speed = bus->base.default_address_speed;
    234223        usb_log_debug("Found new %s speed USB device.", usb_str_speed(dev->speed));
    235224
     
    301290}
    302291
    303 static int usb2_bus_register_default_address(bus_t *bus_base, usb_speed_t speed)
    304 {
    305         usb2_bus_t *bus = bus_to_usb2_bus(bus_base);
    306         usb_address_t addr = USB_ADDRESS_DEFAULT;
    307         const int err = request_address(bus, &addr, true);
    308         if (err)
    309                 return err;
    310         bus->default_address_speed = speed;
    311         return EOK;
    312 }
    313 
    314 static int usb2_bus_release_default_address(bus_t *bus_base)
    315 {
    316         usb2_bus_t *bus = bus_to_usb2_bus(bus_base);
    317         return release_address(bus, USB_ADDRESS_DEFAULT);
    318 }
    319 
    320292const bus_ops_t usb2_bus_ops = {
    321         .reserve_default_address = usb2_bus_register_default_address,
    322         .release_default_address = usb2_bus_release_default_address,
    323293        .device_enumerate = usb2_bus_device_enumerate,
    324294        .endpoint_create = usb2_bus_create_ep,
     
    334304 * @return Error code.
    335305 */
    336 int usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth)
     306void usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth)
    337307{
    338308        assert(bus);
     
    342312
    343313        bus->free_bw = available_bandwidth;
    344 
    345         return EOK;
    346314}
    347315/**
Note: See TracChangeset for help on using the changeset viewer.