Changeset 3f3afb9 in mainline for uspace/drv/ohci/iface.c
- Timestamp:
- 2011-04-11T20:38:37Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1324ff3, a39cfb8
- Parents:
- 58226b4 (diff), d91645ab (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/ohci/iface.c
r58226b4 r3f3afb9 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 65 68 const size_t bw = bandwidth_count_usb11( 66 69 ep->speed, ep->transfer_type, size, ep->max_packet_size); … … 68 71 usb_log_error("Endpoint(%d:%d) %s needs %zu bw " 69 72 "but only %zu is reserved.\n", 70 name, target.address, target.endpoint, bw, res_bw);73 target.address, target.endpoint, name, bw, res_bw); 71 74 return ENOSPC; 72 75 } 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) 76 77 *batch = batch_get( 78 fun, ep, data, size, setup_data, setup_size, in, out, arg); 79 if (!*batch) 85 80 return ENOMEM; 86 return EOK;87 }88 89 90 /** Reserve default address interface function91 *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 0105 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 #endif123 }124 /*----------------------------------------------------------------------------*/125 /** Release default address interface function126 *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);139 81 return EOK; 140 82 } … … 216 158 hc_t *hc = fun_to_hc(fun); 217 159 assert(hc); 218 if (address == hc->rh.address) 219 return EOK; 160 220 161 usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, address); 221 162 if (speed >= USB_SPEED_MAX) { 222 163 speed = ep_speed; 223 164 } 224 const size_t size = 225 (transfer_type == USB_TRANSFER_INTERRUPT 226 || transfer_type == USB_TRANSFER_ISOCHRONOUS) ? 227 max_packet_size : 0; 165 const size_t size = max_packet_size; 228 166 int ret; 167 168 usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n", 169 address, endpoint, usb_str_transfer_type(transfer_type), 170 usb_str_speed(speed), direction, size, max_packet_size, interval); 229 171 230 172 endpoint_t *ep = malloc(sizeof(endpoint_t)); … … 238 180 } 239 181 240 usb_log_debug("Register endpoint %d:%d %s %s(%d) %zu(%zu) %u.\n",241 address, endpoint, usb_str_transfer_type(transfer_type),242 usb_str_speed(speed), direction, size, max_packet_size, interval);243 244 182 ret = usb_endpoint_manager_register_ep(&hc->ep_manager, ep, size); 245 183 if (ret != EOK) { 246 184 endpoint_destroy(ep); 247 } else {248 usb_device_keeper_add_ep(&hc->manager, address, ep);249 185 } 250 186 return ret; … … 259 195 usb_log_debug("Unregister endpoint %d:%d %d.\n", 260 196 address, endpoint, direction); 261 endpoint_t *ep = usb_endpoint_manager_get_ep(&hc->ep_manager,262 address, endpoint, direction, NULL);263 if (ep != NULL) {264 usb_device_keeper_del_ep(&hc->manager, address, ep);265 }266 197 return usb_endpoint_manager_unregister_ep(&hc->ep_manager, address, 267 198 endpoint, direction); … … 435 366 if (ret != EOK) 436 367 return ret; 437 usb_ device_keeper_reset_if_need(&hc->manager, target, setup_data);368 usb_endpoint_manager_reset_if_need(&hc->ep_manager, target, setup_data); 438 369 batch_control_write(batch); 439 370 ret = hc_schedule(hc, batch); … … 484 415 /*----------------------------------------------------------------------------*/ 485 416 usbhc_iface_t hc_iface = { 486 .reserve_default_address = reserve_default_address,487 .release_default_address = release_default_address,488 417 .request_address = request_address, 489 418 .bind_address = bind_address,
Note:
See TracChangeset
for help on using the changeset viewer.