Changeset 5e2b1ae6 in mainline for uspace/lib/usbhost/src
- Timestamp:
- 2018-01-07T01:54:45Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 3dc3f99
- Parents:
- 63431db2
- Location:
- uspace/lib/usbhost/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/bus.c
r63431db2 r5e2b1ae6 54 54 fibril_mutex_initialize(&bus->guard); 55 55 bus->device_size = device_size; 56 bus->default_address_speed = USB_SPEED_MAX; 56 57 } 57 58 … … 239 240 assert(bus); 240 241 241 const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, reserve_default_address);242 if (!ops)243 return ENOTSUP;244 245 242 fibril_mutex_lock(&bus->guard); 246 const int r = ops->reserve_default_address(bus, speed); 247 fibril_mutex_unlock(&bus->guard); 248 return r; 249 } 250 251 int bus_release_default_address(bus_t *bus) 243 if (bus->default_address_speed != USB_SPEED_MAX) { 244 fibril_mutex_unlock(&bus->guard); 245 return EAGAIN; 246 } else { 247 bus->default_address_speed = speed; 248 fibril_mutex_unlock(&bus->guard); 249 return EOK; 250 } 251 } 252 253 void bus_release_default_address(bus_t *bus) 252 254 { 253 255 assert(bus); 254 255 const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, release_default_address); 256 if (!ops) 257 return ENOTSUP; 258 259 fibril_mutex_lock(&bus->guard); 260 const int r = ops->release_default_address(bus); 261 fibril_mutex_unlock(&bus->guard); 262 return r; 256 bus->default_address_speed = USB_SPEED_MAX; 263 257 } 264 258 -
uspace/lib/usbhost/src/ddf_helpers.c
r63431db2 r5e2b1ae6 137 137 138 138 usb_log_debug("Device %d released default address\n", dev->address); 139 return bus_release_default_address(hcd->bus); 139 bus_release_default_address(hcd->bus); 140 141 return EOK; 140 142 } 141 143 -
uspace/lib/usbhost/src/usb2_bus.c
r63431db2 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.