Changes in uspace/drv/uhci-hcd/iface.c [0ede0c3:1998bcd] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/uhci-hcd/iface.c
r0ede0c3 r1998bcd 63 63 } 64 64 65 usb_log_debug("%s %d:%d %zu(%zu).\n",66 name, target.address, target.endpoint, size, ep->max_packet_size);67 68 65 const size_t bw = bandwidth_count_usb11( 69 66 ep->speed, ep->transfer_type, size, ep->max_packet_size); … … 71 68 usb_log_error("Endpoint(%d:%d) %s needs %zu bw " 72 69 "but only %zu is reserved.\n", 73 target.address, target.endpoint, name, bw, res_bw);70 name, target.address, target.endpoint, bw, res_bw); 74 71 return ENOSPC; 75 72 } 76 77 *batch = batch_get( 78 fun, ep, data, size, setup_data, setup_size, in, out, arg); 79 if (!*batch) 73 usb_log_debug("%s %d:%d %zu(%zu).\n", 74 name, target.address, target.endpoint, size, ep->max_packet_size); 75 76 // assert(ep->speed == 77 // usb_device_keeper_get_speed(&(*hc)->manager, target.address)); 78 // assert(ep->max_packet_size == max_packet_size); 79 // assert(ep->transfer_type == USB_TRANSFER_CONTROL); 80 81 *batch = 82 batch_get(fun, ep, data, size, setup_data, setup_size, 83 in, out, arg); 84 if (!batch) 80 85 return ENOMEM; 86 return EOK; 87 } 88 89 90 /** Reserve default address interface function 91 * 92 * @param[in] fun DDF function that was called. 93 * @param[in] speed Speed to associate with the new default address. 94 * @return Error code. 95 */ 96 static int reserve_default_address(ddf_fun_t *fun, usb_speed_t speed) 97 { 98 assert(fun); 99 hc_t *hc = fun_to_hc(fun); 100 assert(hc); 101 usb_log_debug("Default address request with speed %d.\n", speed); 102 usb_device_keeper_reserve_default_address(&hc->manager, speed); 103 return EOK; 104 #if 0 105 endpoint_t *ep = malloc(sizeof(endpoint_t)); 106 if (ep == NULL) 107 return ENOMEM; 108 const size_t max_packet_size = speed == USB_SPEED_LOW ? 8 : 64; 109 endpoint_init(ep, USB_TRANSFER_CONTROL, speed, max_packet_size); 110 int ret; 111 try_retgister: 112 ret = usb_endpoint_manager_register_ep(&hc->ep_manager, 113 USB_ADDRESS_DEFAULT, 0, USB_DIRECTION_BOTH, ep, endpoint_destroy, 0); 114 if (ret == EEXISTS) { 115 async_usleep(1000); 116 goto try_retgister; 117 } 118 if (ret != EOK) { 119 endpoint_destroy(ep); 120 } 121 return ret; 122 #endif 123 } 124 /*----------------------------------------------------------------------------*/ 125 /** Release default address interface function 126 * 127 * @param[in] fun DDF function that was called. 128 * @return Error code. 129 */ 130 static int release_default_address(ddf_fun_t *fun) 131 { 132 assert(fun); 133 hc_t *hc = fun_to_hc(fun); 134 assert(hc); 135 usb_log_debug("Default address release.\n"); 136 // return usb_endpoint_manager_unregister_ep(&hc->ep_manager, 137 // USB_ADDRESS_DEFAULT, 0, USB_DIRECTION_BOTH); 138 usb_device_keeper_release_default_address(&hc->manager); 81 139 return EOK; 82 140 } … … 147 205 hc_t *hc = fun_to_hc(fun); 148 206 assert(hc); 149 const size_t size = max_packet_size;150 int ret;151 207 usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, address); 152 208 if (speed >= USB_SPEED_MAX) { 153 209 speed = ep_speed; 154 210 } 155 usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n", 156 address, endpoint, usb_str_transfer_type(transfer_type), 157 usb_str_speed(speed), direction, size, max_packet_size, interval); 158 211 const size_t size = 212 (transfer_type == USB_TRANSFER_INTERRUPT 213 || transfer_type == USB_TRANSFER_ISOCHRONOUS) ? 214 max_packet_size : 0; 215 int ret; 159 216 160 217 endpoint_t *ep = malloc(sizeof(endpoint_t)); … … 168 225 } 169 226 227 usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n", 228 address, endpoint, usb_str_transfer_type(transfer_type), 229 usb_str_speed(speed), direction, size, max_packet_size, interval); 230 170 231 ret = usb_endpoint_manager_register_ep(&hc->ep_manager, ep, size); 171 232 if (ret != EOK) { 172 233 endpoint_destroy(ep); 234 } else { 235 usb_device_keeper_add_ep(&hc->manager, address, ep); 173 236 } 174 237 return ret; … … 183 246 usb_log_debug("Unregister endpoint %d:%d %d.\n", 184 247 address, endpoint, direction); 248 endpoint_t *ep = usb_endpoint_manager_get_ep(&hc->ep_manager, 249 address, endpoint, direction, NULL); 250 if (ep != NULL) { 251 usb_device_keeper_del_ep(&hc->manager, address, ep); 252 } 185 253 return usb_endpoint_manager_unregister_ep(&hc->ep_manager, address, 186 254 endpoint, direction); … … 323 391 if (ret != EOK) 324 392 return ret; 325 usb_ endpoint_manager_reset_if_need(&hc->ep_manager, target, setup_data);393 usb_device_keeper_reset_if_need(&hc->manager, target, setup_data); 326 394 batch_control_write(batch); 327 395 ret = hc_schedule(hc, batch); … … 365 433 /*----------------------------------------------------------------------------*/ 366 434 usbhc_iface_t hc_iface = { 435 .reserve_default_address = reserve_default_address, 436 .release_default_address = release_default_address, 367 437 .request_address = request_address, 368 438 .bind_address = bind_address,
Note:
See TracChangeset
for help on using the changeset viewer.