Lines Matching refs:xfer
290 struct usb_xfer* xfer = new usb_xfer; in usbd_transfer_setup() local
291 xfer->mutex = xfer_mtx; in usbd_transfer_setup()
292 xfer->priv_sc = priv_sc; in usbd_transfer_setup()
293 xfer->priv = NULL; in usbd_transfer_setup()
294 xfer->callback = setup->callback; in usbd_transfer_setup()
295 xfer->flags = setup->flags; in usbd_transfer_setup()
296 xfer->max_data_length = setup->bufsize; in usbd_transfer_setup()
298 xfer->device = (usb_device)udev->haiku_usb_device; in usbd_transfer_setup()
299 xfer->type = setup->type; in usbd_transfer_setup()
301 xfer->pipe = -1; in usbd_transfer_setup()
306 if (UE_GET_XFERTYPE(udev->endpoints[i].edesc->bmAttributes) != xfer->type) in usbd_transfer_setup()
318 xfer->pipe = iface->endpoint[i].handle; in usbd_transfer_setup()
321 if (xfer->pipe == -1) in usbd_transfer_setup()
324 xfer->nframes = setup->frames; in usbd_transfer_setup()
325 if (xfer->nframes == 0) in usbd_transfer_setup()
326 xfer->nframes = 1; in usbd_transfer_setup()
327 xfer->max_frame_count = xfer->nframes; in usbd_transfer_setup()
328 xfer->frames = (iovec*)calloc(xfer->max_frame_count, sizeof(iovec)); in usbd_transfer_setup()
329 xfer->buffers = NULL; in usbd_transfer_setup()
331 xfer->usb_state = USB_ST_SETUP; in usbd_transfer_setup()
332 xfer->in_progress = false; in usbd_transfer_setup()
333 xfer->transferred_length = 0; in usbd_transfer_setup()
334 cv_init(&xfer->condition, "FreeBSD USB transfer"); in usbd_transfer_setup()
336 if (xfer->flags.proxy_buffer) in usbd_transfer_setup()
339 ppxfer[setup - setup_start] = xfer; in usbd_transfer_setup()
350 struct usb_xfer* xfer = pxfer[i]; in usbd_transfer_unsetup() local
351 usbd_transfer_drain(xfer); in usbd_transfer_unsetup()
352 cv_destroy(&xfer->condition); in usbd_transfer_unsetup()
354 if (xfer->buffers != NULL) { in usbd_transfer_unsetup()
355 for (int i = 0; i < xfer->max_frame_count; i++) in usbd_transfer_unsetup()
356 free(xfer->buffers[i].buffer); in usbd_transfer_unsetup()
357 free(xfer->buffers); in usbd_transfer_unsetup()
359 free(xfer->frames); in usbd_transfer_unsetup()
360 delete xfer; in usbd_transfer_unsetup()
366 usbd_xfer_max_len(struct usb_xfer* xfer) in usbd_xfer_max_len() argument
368 return xfer->max_data_length; in usbd_xfer_max_len()
373 usbd_xfer_softc(struct usb_xfer* xfer) in usbd_xfer_softc() argument
375 return xfer->priv_sc; in usbd_xfer_softc()
380 usbd_xfer_get_priv(struct usb_xfer* xfer) in usbd_xfer_get_priv() argument
382 return xfer->priv; in usbd_xfer_get_priv()
387 usbd_xfer_set_priv(struct usb_xfer* xfer, void* ptr) in usbd_xfer_set_priv() argument
389 xfer->priv = ptr; in usbd_xfer_set_priv()
394 usbd_xfer_state(struct usb_xfer* xfer) in usbd_xfer_state() argument
396 return xfer->usb_state; in usbd_xfer_state()
401 usbd_xfer_set_frames(struct usb_xfer* xfer, usb_frcount_t n) in usbd_xfer_set_frames() argument
403 KASSERT(n <= uint32_t(xfer->max_frame_count), ("frame index overflow")); in usbd_xfer_set_frames()
404 xfer->nframes = n; in usbd_xfer_set_frames()
409 usbd_xfer_set_frame_data(struct usb_xfer* xfer, in usbd_xfer_set_frame_data() argument
412 KASSERT(frindex < uint32_t(xfer->nframes), ("frame index overflow")); in usbd_xfer_set_frame_data()
414 xfer->frames[frindex].iov_base = ptr; in usbd_xfer_set_frame_data()
415 xfer->frames[frindex].iov_len = len; in usbd_xfer_set_frame_data()
420 usbd_xfer_set_frame_len(struct usb_xfer* xfer, in usbd_xfer_set_frame_len() argument
423 KASSERT(frindex < uint32_t(xfer->nframes), ("frame index overflow")); in usbd_xfer_set_frame_len()
424 KASSERT(len <= uint32_t(xfer->max_data_length), ("length overflow")); in usbd_xfer_set_frame_len()
427 if (xfer->frames[frindex].iov_base == NULL) in usbd_xfer_set_frame_len()
428 usbd_xfer_get_frame(xfer, frindex); in usbd_xfer_set_frame_len()
430 xfer->frames[frindex].iov_len = len; in usbd_xfer_set_frame_len()
435 usbd_xfer_get_frame(struct usb_xfer* xfer, usb_frcount_t frindex) in usbd_xfer_get_frame() argument
437 KASSERT(frindex < uint32_t(xfer->max_frame_count), ("frame index overflow")); in usbd_xfer_get_frame()
438 if (xfer->buffers == NULL) in usbd_xfer_get_frame()
439 xfer->buffers = (usb_page_cache*)calloc(xfer->max_frame_count, sizeof(usb_page_cache)); in usbd_xfer_get_frame()
441 usb_page_cache* cache = &xfer->buffers[frindex]; in usbd_xfer_get_frame()
443 cache->buffer = malloc(xfer->max_data_length); in usbd_xfer_get_frame()
444 cache->length = xfer->max_data_length; in usbd_xfer_get_frame()
447 xfer->frames[frindex].iov_base = cache->buffer; in usbd_xfer_get_frame()
488 usbd_xfer_set_stall(struct usb_xfer *xfer) in usbd_xfer_set_stall() argument
497 struct usb_xfer* xfer = (struct usb_xfer*)arg; in usbd_invoker() local
498 mtx_lock(xfer->mutex); in usbd_invoker()
499 xfer->in_progress = false; in usbd_invoker()
500 xfer->usb_state = (xfer->result == B_OK) ? USB_ST_TRANSFERRED : USB_ST_ERROR; in usbd_invoker()
501 xfer->callback(xfer, map_usb_error(xfer->result)); in usbd_invoker()
502 mtx_unlock(xfer->mutex); in usbd_invoker()
503 cv_signal(&xfer->condition); in usbd_invoker()
510 struct usb_xfer* xfer = (struct usb_xfer*)arg; in usbd_callback() local
511 xfer->result = status; in usbd_callback()
512 xfer->transferred_length = actualLength; in usbd_callback()
514 TASK_INIT(&xfer->invoker, 0, usbd_invoker, xfer); in usbd_callback()
515 taskqueue_enqueue(sUSBTaskqueue, &xfer->invoker); in usbd_callback()
520 usbd_transfer_start(struct usb_xfer* xfer) in usbd_transfer_start() argument
522 if (xfer->in_progress) in usbd_transfer_start()
525 xfer->usb_state = USB_ST_SETUP; in usbd_transfer_start()
526 xfer->callback(xfer, USB_ERR_NOT_STARTED); in usbd_transfer_start()
531 usbd_transfer_submit(struct usb_xfer* xfer) in usbd_transfer_submit() argument
533 KASSERT(!xfer->in_progress, ("cannot submit in-progress transfer!")); in usbd_transfer_submit()
535 xfer->transferred_length = 0; in usbd_transfer_submit()
536 xfer->in_progress = true; in usbd_transfer_submit()
538 switch (xfer->type) { in usbd_transfer_submit()
540 status = sUSB->queue_bulk_v(xfer->pipe, xfer->frames, xfer->nframes, usbd_callback, xfer); in usbd_transfer_submit()
544 KASSERT(xfer->nframes == 1, ("invalid frame count for interrupt transfer")); in usbd_transfer_submit()
545 status = sUSB->queue_interrupt(xfer->pipe, in usbd_transfer_submit()
546 xfer->frames[0].iov_base, xfer->frames[0].iov_len, in usbd_transfer_submit()
547 usbd_callback, xfer); in usbd_transfer_submit()
551 panic("unhandled pipe type %d", xfer->type); in usbd_transfer_submit()
555 usbd_callback(xfer, status, NULL, 0); in usbd_transfer_submit()
560 usbd_transfer_stop(struct usb_xfer* xfer) in usbd_transfer_stop() argument
562 if (xfer == NULL) in usbd_transfer_stop()
564 mtx_assert(xfer->mutex, MA_OWNED); in usbd_transfer_stop()
566 if (!xfer->in_progress) in usbd_transfer_stop()
570 sUSB->cancel_queued_transfers(xfer->pipe); in usbd_transfer_stop()
575 usbd_transfer_drain(struct usb_xfer* xfer) in usbd_transfer_drain() argument
577 if (xfer == NULL) in usbd_transfer_drain()
580 mtx_lock(xfer->mutex); in usbd_transfer_drain()
581 usbd_transfer_stop(xfer); in usbd_transfer_drain()
582 while (xfer->in_progress) in usbd_transfer_drain()
583 cv_wait(&xfer->condition, xfer->mutex); in usbd_transfer_drain()
584 mtx_unlock(xfer->mutex); in usbd_transfer_drain()
589 usbd_xfer_status(struct usb_xfer* xfer, int* actlen, int* sumlen, int* aframes, int* nframes) in usbd_xfer_status() argument
592 *actlen = xfer->transferred_length; in usbd_xfer_status()
595 for (int i = 0; i < xfer->nframes; i++) in usbd_xfer_status()
596 sum += xfer->frames[i].iov_len; in usbd_xfer_status()
600 int length = xfer->transferred_length; in usbd_xfer_status()
602 for (int i = 0; i < xfer->nframes && length > 0; i++) { in usbd_xfer_status()
603 length -= xfer->frames[i].iov_len; in usbd_xfer_status()
610 *nframes = xfer->nframes; in usbd_xfer_status()