Changeset 9efad54 in mainline for uspace/lib/usbdev/src/pipes.c
- Timestamp:
- 2018-01-06T21:15:48Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 56257ba
- Parents:
- c901632
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbdev/src/pipes.c
rc901632 r9efad54 272 272 * @param pipe Endpoint pipe to be initialized. 273 273 * @param bus_session Endpoint pipe to be initialized. 274 * @param ep_desc Prepared endpoint descriptor 275 * @return Error code. 276 */ 277 int usb_pipe_initialize(usb_pipe_t *pipe, 278 usb_dev_session_t *bus_session, 279 const usb_endpoint_desc_t *ep_desc) 280 { 281 int ret = EOK; 282 assert(pipe); 283 284 pipe->desc = *ep_desc; 274 * @return Error code. 275 */ 276 int usb_pipe_initialize(usb_pipe_t *pipe, usb_dev_session_t *bus_session, usb_transfer_type_t transfer_type) 277 { 278 assert(pipe); 279 285 280 pipe->auto_reset_halt = false; 286 281 pipe->bus_session = bus_session; 287 282 288 if ( pipe->desc.transfer_type == USB_TRANSFER_ISOCHRONOUS) {289 ret =usb_isoch_session_initialize(pipe);290 } 291 292 return ret; 293 } 294 295 static const usb_endpoint_desc_t default_control_ep_desc = { 296 . max_packet_size = CTRL_PIPE_MIN_PACKET_SIZE,283 if (transfer_type == USB_TRANSFER_ISOCHRONOUS) 284 return usb_isoch_session_initialize(pipe); 285 286 return EOK; 287 } 288 289 static const usb_pipe_desc_t default_control_pipe = { 290 .endpoint_no = 0, 291 .transfer_type = USB_TRANSFER_CONTROL, 297 292 .direction = USB_DIRECTION_BOTH, 298 . packets = 1,293 .max_transfer_size = CTRL_PIPE_MIN_PACKET_SIZE, 299 294 }; 300 295 301 /** Initialize USB endpoint pipe as the default zero control pipe. 296 /** Initialize USB default control pipe. 297 * 298 * This one is special because it must not be registered, it is registered automatically. 302 299 * 303 300 * @param pipe Endpoint pipe to be initialized. 304 * @param bus_session 301 * @param bus_session Endpoint pipe to be initialized. 305 302 * @return Error code. 306 303 */ 307 304 int usb_pipe_initialize_default_control(usb_pipe_t *pipe, usb_dev_session_t *bus_session) 308 305 { 309 return usb_pipe_initialize(pipe, bus_session, &default_control_ep_desc); 306 const int ret = usb_pipe_initialize(pipe, bus_session, USB_TRANSFER_CONTROL); 307 if (ret) 308 return ret; 309 310 pipe->desc = default_control_pipe; 311 312 return EOK; 310 313 } 311 314 … … 313 316 * 314 317 * @param pipe Pipe to be registered. 315 * @param interval Polling interval. 316 * @return Error code. 317 */ 318 int usb_pipe_register(usb_pipe_t *pipe) 318 * @param ep_desc Matched endpoint descriptor 319 * @param comp_desc Matched superspeed companion descriptro, if any 320 * @return Error code. 321 */ 322 int usb_pipe_register(usb_pipe_t *pipe, const usb_standard_endpoint_descriptor_t *ep_desc, const usb_superspeed_endpoint_companion_descriptor_t *comp_desc) 319 323 { 320 324 assert(pipe); 321 325 assert(pipe->bus_session); 326 assert(ep_desc); 322 327 323 328 async_exch_t *exch = async_exchange_begin(pipe->bus_session); … … 325 330 return ENOMEM; 326 331 327 const int ret = usbhc_register_endpoint(exch, &pipe->desc); 328 332 usb_endpoint_descriptors_t descriptors; 333 334 #define COPY(field) descriptors.endpoint.field = ep_desc->field 335 COPY(endpoint_address); 336 COPY(attributes); 337 COPY(max_packet_size); 338 COPY(poll_interval); 339 #undef COPY 340 341 #define COPY(field) descriptors.companion.field = comp_desc->field 342 if (comp_desc) { 343 COPY(max_burst); 344 COPY(attributes); 345 COPY(bytes_per_interval); 346 } 347 #undef COPY 348 349 const int ret = usbhc_register_endpoint(exch, &pipe->desc, &descriptors); 329 350 async_exchange_end(exch); 330 351 return ret;
Note:
See TracChangeset
for help on using the changeset viewer.