Changes in uspace/lib/usbhost/src/iface.c [549ff23:8b54fe6] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhost/src/iface.c
r549ff23 r8b54fe6 49 49 assert(hcd); 50 50 51 endpoint_t *ep = usb_endpoint_manager_find_ep(&hcd->ep_manager, 52 target.address, target.endpoint, direction); 51 int ret; 52 53 size_t res_bw; 54 endpoint_t *ep = usb_endpoint_manager_get_ep(&hcd->ep_manager, 55 target.address, target.endpoint, direction, &res_bw); 53 56 if (ep == NULL) { 54 57 usb_log_error("Endpoint(%d:%d) not registered for %s.\n", … … 62 65 const size_t bw = bandwidth_count_usb11( 63 66 ep->speed, ep->transfer_type, size, ep->max_packet_size); 64 /* Check if we have enough bandwidth reserved */ 65 if (ep->bandwidth < bw) { 67 if (res_bw < bw) { 66 68 usb_log_error("Endpoint(%d:%d) %s needs %zu bw " 67 69 "but only %zu is reserved.\n", 68 ep->address, ep->endpoint, name, bw, ep->bandwidth);70 target.address, target.endpoint, name, bw, res_bw); 69 71 return ENOSPC; 70 72 } … … 76 78 /* No private data and no private data dtor */ 77 79 usb_transfer_batch_t *batch = 78 usb_transfer_batch_ create(ep, data, size, setup_data,80 usb_transfer_batch_get(ep, data, size, setup_data, 79 81 in, out, arg, fun, NULL, NULL); 80 82 if (!batch) { … … 82 84 } 83 85 84 const intret = hcd->schedule(hcd, batch);86 ret = hcd->schedule(hcd, batch); 85 87 if (ret != EOK) 86 usb_transfer_batch_d estroy(batch);88 usb_transfer_batch_dispose(batch); 87 89 88 90 return ret; … … 128 130 129 131 usb_log_debug("Address bind %d-%" PRIun ".\n", address, handle); 130 return usb_device_manager_bind(&hcd->dev_manager, address, handle); 132 usb_device_manager_bind(&hcd->dev_manager, address, handle); 133 return EOK; 131 134 } 132 135 /*----------------------------------------------------------------------------*/ … … 144 147 hcd_t *hcd = fun_to_hcd(fun); 145 148 assert(hcd); 146 return usb_device_manager_get_info_by_address( 147 &hcd->dev_manager, address, handle, NULL); 149 const bool found = 150 usb_device_manager_find_by_address(&hcd->dev_manager, address, handle); 151 return found ? EOK : ENOENT; 148 152 } 149 153 /*----------------------------------------------------------------------------*/ … … 162 166 usb_device_manager_release(&hcd->dev_manager, address); 163 167 return EOK; 164 }165 /*----------------------------------------------------------------------------*/166 static int register_helper(endpoint_t *ep, void *arg)167 {168 hcd_t *hcd = arg;169 assert(ep);170 assert(hcd);171 if (hcd->ep_add_hook)172 return hcd->ep_add_hook(hcd, ep);173 return EOK;174 }175 /*----------------------------------------------------------------------------*/176 static void unregister_helper(endpoint_t *ep, void *arg)177 {178 hcd_t *hcd = arg;179 assert(ep);180 assert(hcd);181 if (hcd->ep_remove_hook)182 hcd->ep_remove_hook(hcd, ep);183 168 } 184 169 /*----------------------------------------------------------------------------*/ … … 195 180 /* Default address is not bound or registered, 196 181 * thus it does not provide speed info. */ 197 usb_speed_t speed = ep_speed; 198 /* NOTE The function will return EINVAL and won't 199 * touch speed variable for default address */ 200 usb_device_manager_get_info_by_address( 201 &hcd->dev_manager, address, NULL, &speed); 182 const usb_speed_t speed = (address == 0) ? ep_speed : 183 usb_device_manager_get_speed(&hcd->dev_manager, address); 202 184 203 185 usb_log_debug("Register endpoint %d:%d %s-%s %s %zuB %ums.\n", … … 206 188 max_packet_size, interval); 207 189 208 return usb_endpoint_manager_add_ep(&hcd->ep_manager, address, endpoint, 209 direction, transfer_type, speed, max_packet_size, size, 210 register_helper, hcd); 190 endpoint_t *ep = endpoint_get( 191 address, endpoint, direction, transfer_type, speed, max_packet_size); 192 if (!ep) 193 return ENOMEM; 194 int ret = EOK; 195 196 if (hcd->ep_add_hook) { 197 ret = hcd->ep_add_hook(hcd, ep); 198 } 199 if (ret != EOK) { 200 endpoint_destroy(ep); 201 return ret; 202 } 203 204 ret = usb_endpoint_manager_register_ep(&hcd->ep_manager, ep, size); 205 if (ret != EOK) { 206 endpoint_destroy(ep); 207 } 208 return ret; 211 209 } 212 210 /*----------------------------------------------------------------------------*/ … … 220 218 usb_log_debug("Unregister endpoint %d:%d %s.\n", 221 219 address, endpoint, usb_str_direction(direction)); 222 return usb_endpoint_manager_ remove_ep(&hcd->ep_manager, address,223 endpoint, direction , unregister_helper, hcd);220 return usb_endpoint_manager_unregister_ep(&hcd->ep_manager, address, 221 endpoint, direction); 224 222 } 225 223 /*----------------------------------------------------------------------------*/
Note:
See TracChangeset
for help on using the changeset viewer.