Changeset 5e2b1ae6 in mainline for uspace/lib/usbhost/src/usb2_bus.c
- Timestamp:
- 2018-01-07T01:54:45Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3dc3f99
- Parents:
- 63431db
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/usb2_bus.c
r63431db r5e2b1ae6 100 100 * @param bus usb_device_manager 101 101 * @param addr Pointer to requested address value, place to store new address 102 * @parma strict Fail if the requested address is not available.103 102 * @return Error code. 104 103 * @note Default address is only available in strict mode. 105 104 */ 106 static int request_address(usb2_bus_t *bus, usb_address_t *addr , bool strict)105 static int request_address(usb2_bus_t *bus, usb_address_t *addr) 107 106 { 108 107 int err; … … 114 113 return EINVAL; 115 114 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; 128 117 129 118 assert(usb_address_is_valid(*addr)); 130 119 assert(bus->address_occupied[*addr] == false); 131 assert(*addr != USB_ADDRESS_DEFAULT || strict);120 assert(*addr != USB_ADDRESS_DEFAULT); 132 121 133 122 bus->address_occupied[*addr] = true; … … 152 141 /** Reserve address early, we want pretty log messages */ 153 142 usb_address_t address = USB_ADDRESS_DEFAULT; 154 if ((err = request_address(bus, &address , false))) {143 if ((err = request_address(bus, &address))) { 155 144 usb_log_error("Failed to reserve new address: %s.", 156 145 str_error(err)); … … 231 220 * default address. 232 221 */ 233 dev->speed = bus-> default_address_speed;222 dev->speed = bus->base.default_address_speed; 234 223 usb_log_debug("Found new %s speed USB device.", usb_str_speed(dev->speed)); 235 224 … … 301 290 } 302 291 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 320 292 const bus_ops_t usb2_bus_ops = { 321 .reserve_default_address = usb2_bus_register_default_address,322 .release_default_address = usb2_bus_release_default_address,323 293 .device_enumerate = usb2_bus_device_enumerate, 324 294 .endpoint_create = usb2_bus_create_ep, … … 334 304 * @return Error code. 335 305 */ 336 intusb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth)306 void usb2_bus_init(usb2_bus_t *bus, size_t available_bandwidth) 337 307 { 338 308 assert(bus); … … 342 312 343 313 bus->free_bw = available_bandwidth; 344 345 return EOK;346 314 } 347 315 /**
Note:
See TracChangeset
for help on using the changeset viewer.