Changeset 56257ba in mainline for uspace/lib/usbhost/src/bus.c
- Timestamp:
- 2018-01-07T01:01:42Z (6 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 63431db
- Parents:
- 9efad54
- git-author:
- Ondřej Hlavatý <aearsis@…> (2018-01-07 01:01:41)
- git-committer:
- Ondřej Hlavatý <aearsis@…> (2018-01-07 01:01:42)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/bus.c
r9efad54 r56257ba 99 99 100 100 const bus_ops_t *ops = BUS_OPS_LOOKUP(dev->bus->ops, device_remove); 101 102 101 if (!ops) 103 102 return ENOTSUP; … … 162 161 163 162 fibril_mutex_lock(&bus->guard); 164 err = register_ops->endpoint_register(ep); 165 fibril_mutex_unlock(&bus->guard); 163 if (!device->online && ep->endpoint != 0) { 164 err = EAGAIN; 165 } else if (device->endpoints[ep->endpoint] != NULL) { 166 err = EEXIST; 167 } else { 168 err = register_ops->endpoint_register(ep); 169 if (!err) 170 device->endpoints[ep->endpoint] = ep; 171 } 172 fibril_mutex_unlock(&bus->guard); 173 if (err) { 174 endpoint_del_ref(ep); 175 return err; 176 } 166 177 167 178 if (out_ep) { … … 171 182 } 172 183 173 return err;184 return EOK; 174 185 } 175 186 176 187 /** Searches for an endpoint. Returns a reference. 177 188 */ 178 endpoint_t *bus_find_endpoint(device_t *device, usb_ target_t endpoint, usb_direction_t dir)189 endpoint_t *bus_find_endpoint(device_t *device, usb_endpoint_t endpoint) 179 190 { 180 191 assert(device); … … 182 193 bus_t *bus = device->bus; 183 194 184 const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, device_find_endpoint); 185 if (!ops) 186 return NULL; 187 188 fibril_mutex_lock(&bus->guard); 189 endpoint_t *ep = ops->device_find_endpoint(device, endpoint, dir); 195 fibril_mutex_lock(&bus->guard); 196 endpoint_t *ep = device->endpoints[endpoint]; 190 197 if (ep) { 191 198 /* Exporting reference */ 192 199 endpoint_add_ref(ep); 193 200 } 194 195 201 fibril_mutex_unlock(&bus->guard); 196 202 return ep; … … 201 207 assert(ep); 202 208 assert(ep->device); 203 assert(ep->device->bus);204 assert(ep->device->bus->ops);205 209 206 210 bus_t *bus = endpoint_get_bus(ep); … … 218 222 fibril_mutex_lock(&bus->guard); 219 223 const int r = ops->endpoint_unregister(ep); 224 if (!r) 225 ep->device->endpoints[ep->endpoint] = NULL; 220 226 fibril_mutex_unlock(&bus->guard); 221 227 … … 253 259 fibril_mutex_lock(&bus->guard); 254 260 const int r = ops->release_default_address(bus); 255 fibril_mutex_unlock(&bus->guard);256 return r;257 }258 259 int bus_reset_toggle(bus_t *bus, usb_target_t target, bool all)260 {261 assert(bus);262 263 const bus_ops_t *ops = BUS_OPS_LOOKUP(bus->ops, reset_toggle);264 if (!ops)265 return ENOTSUP;266 267 fibril_mutex_lock(&bus->guard);268 const int r = ops->reset_toggle(bus, target, all);269 261 fibril_mutex_unlock(&bus->guard); 270 262 return r; … … 288 280 289 281 /* Temporary reference */ 290 endpoint_t *ep = bus_find_endpoint(device, target , direction);282 endpoint_t *ep = bus_find_endpoint(device, target.endpoint); 291 283 if (ep == NULL) { 292 284 usb_log_error("Endpoint(%d:%d) not registered for %s.\n",
Note:
See TracChangeset
for help on using the changeset viewer.