Lines Matching refs:urb

90 static int	usb_start_wait_urb(struct urb *, usb_timeout_t, uint16_t *);
98 static int usb_unlink_urb_sub(struct urb *, uint8_t);
401 usb_submit_urb(struct urb *urb, uint16_t mem_flags) in usb_submit_urb() argument
407 if (urb == NULL) in usb_submit_urb()
414 if (urb->endpoint == NULL) { in usb_submit_urb()
425 if (urb->kill_count != 0) { in usb_submit_urb()
430 uhe = urb->endpoint; in usb_submit_urb()
441 TAILQ_INSERT_TAIL(&uhe->bsd_urb_list, urb, bsd_urb_list); in usb_submit_urb()
443 urb->status = -EINPROGRESS; in usb_submit_urb()
450 urb->status = -EINVAL; in usb_submit_urb()
466 usb_unlink_urb(struct urb *urb) in usb_unlink_urb() argument
468 return (usb_unlink_urb_sub(urb, 0)); in usb_unlink_urb()
473 struct urb *urb, uint8_t drain) in usb_unlink_bsd() argument
479 if (xfer->priv_fifo == (void *)urb) { in usb_unlink_bsd()
492 usb_unlink_urb_sub(struct urb *urb, uint8_t drain) in usb_unlink_urb_sub() argument
499 if (urb == NULL) in usb_unlink_urb_sub()
506 urb->kill_count++; in usb_unlink_urb_sub()
508 if (urb->endpoint == NULL) { in usb_unlink_urb_sub()
512 uhe = urb->endpoint; in usb_unlink_urb_sub()
514 if (urb->bsd_urb_list.tqe_prev) { in usb_unlink_urb_sub()
516 TAILQ_REMOVE(&uhe->bsd_urb_list, urb, bsd_urb_list); in usb_unlink_urb_sub()
517 urb->bsd_urb_list.tqe_prev = NULL; in usb_unlink_urb_sub()
518 urb->status = -ECONNRESET; in usb_unlink_urb_sub()
519 urb->actual_length = 0; in usb_unlink_urb_sub()
521 for (x = 0; x < urb->number_of_packets; x++) { in usb_unlink_urb_sub()
522 urb->iso_frame_desc[x].actual_length = 0; in usb_unlink_urb_sub()
525 if (urb->complete) { in usb_unlink_urb_sub()
526 (urb->complete) (urb); in usb_unlink_urb_sub()
535 usb_unlink_bsd(uhe->bsd_xfer[0], urb, drain); in usb_unlink_urb_sub()
536 usb_unlink_bsd(uhe->bsd_xfer[1], urb, drain); in usb_unlink_urb_sub()
541 urb->kill_count--; in usb_unlink_urb_sub()
592 usb_start_wait_urb(struct urb *urb, usb_timeout_t timeout, uint16_t *p_actlen) in usb_start_wait_urb() argument
601 urb->complete = &usb_linux_wait_complete; in usb_start_wait_urb()
602 urb->timeout = timeout; in usb_start_wait_urb()
603 urb->transfer_flags |= URB_WAIT_WAKEUP; in usb_start_wait_urb()
604 urb->transfer_flags &= ~URB_IS_SLEEPING; in usb_start_wait_urb()
609 err = usb_submit_urb(urb, 0); in usb_start_wait_urb()
617 while (urb->transfer_flags & URB_WAIT_WAKEUP) { in usb_start_wait_urb()
618 urb->transfer_flags |= URB_IS_SLEEPING; in usb_start_wait_urb()
619 cv_wait(&urb->cv_wait, &Giant); in usb_start_wait_urb()
620 urb->transfer_flags &= ~URB_IS_SLEEPING; in usb_start_wait_urb()
623 err = urb->status; in usb_start_wait_urb()
632 *p_actlen = urb->actual_length; in usb_start_wait_urb()
658 struct urb *urb; in usb_control_msg() local
706 urb = usb_alloc_urb(0xFFFF, size); in usb_control_msg()
708 urb->dev = dev; in usb_control_msg()
709 urb->endpoint = uhe; in usb_control_msg()
711 memcpy(urb->setup_packet, &req, sizeof(req)); in usb_control_msg()
715 memcpy(USB_ADD_BYTES(urb->setup_packet, sizeof(req)), in usb_control_msg()
718 err = usb_start_wait_urb(urb, timeout, &actlen); in usb_control_msg()
722 bcopy(USB_ADD_BYTES(urb->setup_packet, in usb_control_msg()
726 usb_free_urb(urb); in usb_control_msg()
980 struct urb *
983 struct urb *urb; in usb_alloc_urb() local
991 size = sizeof(*urb) + sizeof(struct usb_device_request) + mem_flags; in usb_alloc_urb()
993 size = sizeof(*urb) + (iso_packets * sizeof(urb->iso_frame_desc[0])); in usb_alloc_urb()
996 urb = malloc(size, M_USBDEV, M_WAITOK | M_ZERO); in usb_alloc_urb()
998 cv_init(&urb->cv_wait, "URBWAIT"); in usb_alloc_urb()
1000 urb->setup_packet = (void *)(urb + 1); in usb_alloc_urb()
1001 urb->transfer_buffer = (void *)(urb->setup_packet + in usb_alloc_urb()
1004 urb->number_of_packets = iso_packets; in usb_alloc_urb()
1006 return (urb); in usb_alloc_urb()
1215 usb_free_urb(struct urb *urb) in usb_free_urb() argument
1217 if (urb == NULL) { in usb_free_urb()
1221 usb_kill_urb(urb); in usb_free_urb()
1224 cv_destroy(&urb->cv_wait); in usb_free_urb()
1227 free(urb, M_USBDEV); in usb_free_urb()
1238 usb_init_urb(struct urb *urb) in usb_init_urb() argument
1240 if (urb == NULL) { in usb_init_urb()
1243 memset(urb, 0, sizeof(*urb)); in usb_init_urb()
1250 usb_kill_urb(struct urb *urb) in usb_kill_urb() argument
1252 usb_unlink_urb_sub(urb, 1); in usb_kill_urb()
1301 usb_linux_wait_complete(struct urb *urb) in usb_linux_wait_complete() argument
1303 if (urb->transfer_flags & URB_IS_SLEEPING) { in usb_linux_wait_complete()
1304 cv_signal(&urb->cv_wait); in usb_linux_wait_complete()
1306 urb->transfer_flags &= ~URB_WAIT_WAKEUP; in usb_linux_wait_complete()
1315 struct urb *urb; in usb_linux_complete() local
1317 urb = usbd_xfer_get_priv(xfer); in usb_linux_complete()
1319 if (urb->complete) { in usb_linux_complete()
1320 (urb->complete) (urb); in usb_linux_complete()
1338 struct urb *urb = usbd_xfer_get_priv(xfer); in usb_linux_isoc_callback() local
1347 if (urb->bsd_isread) { in usb_linux_isoc_callback()
1352 for (x = 0; x < urb->number_of_packets; x++) { in usb_linux_isoc_callback()
1353 uipd = urb->iso_frame_desc + x; in usb_linux_isoc_callback()
1355 if (urb->transfer_flags & URB_SHORT_NOT_OK) { in usb_linux_isoc_callback()
1367 USB_ADD_BYTES(urb->transfer_buffer, in usb_linux_isoc_callback()
1373 for (x = 0; x < urb->number_of_packets; x++) { in usb_linux_isoc_callback()
1374 uipd = urb->iso_frame_desc + x; in usb_linux_isoc_callback()
1380 urb->actual_length = xfer->actlen; in usb_linux_isoc_callback()
1385 if (urb->transfer_flags & URB_SHORT_NOT_OK) { in usb_linux_isoc_callback()
1387 urb->status = -EPIPE; in usb_linux_isoc_callback()
1389 urb->status = 0; in usb_linux_isoc_callback()
1393 urb->status = 0; in usb_linux_isoc_callback()
1404 urb = TAILQ_FIRST(&uhe->bsd_urb_list); in usb_linux_isoc_callback()
1405 if (urb == NULL) { in usb_linux_isoc_callback()
1409 TAILQ_REMOVE(&uhe->bsd_urb_list, urb, bsd_urb_list); in usb_linux_isoc_callback()
1410 urb->bsd_urb_list.tqe_prev = NULL; in usb_linux_isoc_callback()
1413 if (urb->number_of_packets > x) { in usb_linux_isoc_callback()
1415 urb->number_of_packets = x; in usb_linux_isoc_callback()
1421 urb = usbd_xfer_get_priv(xfer); in usb_linux_isoc_callback()
1424 urb->bsd_isread = (uhe->desc.bEndpointAddress & UE_DIR_IN) ? 1 : 0; in usb_linux_isoc_callback()
1428 usbd_xfer_set_frame_data(xfer, 0, urb->transfer_buffer, 0); in usb_linux_isoc_callback()
1430 if (!(urb->bsd_isread)) { in usb_linux_isoc_callback()
1435 for (x = 0; x < urb->number_of_packets; x++) { in usb_linux_isoc_callback()
1436 uipd = urb->iso_frame_desc + x; in usb_linux_isoc_callback()
1440 USB_ADD_BYTES(urb->transfer_buffer, in usb_linux_isoc_callback()
1451 offset = urb->number_of_packets * max_frame; in usb_linux_isoc_callback()
1455 for (x = 0; x < urb->number_of_packets; x++) { in usb_linux_isoc_callback()
1456 uipd = urb->iso_frame_desc + x; in usb_linux_isoc_callback()
1460 usbd_xfer_set_priv(xfer, urb); in usb_linux_isoc_callback()
1462 xfer->timeout = urb->timeout; in usb_linux_isoc_callback()
1463 xfer->nframes = urb->number_of_packets; in usb_linux_isoc_callback()
1469 urb->status = -ECONNRESET; in usb_linux_isoc_callback()
1471 urb->status = -EPIPE; /* stalled */ in usb_linux_isoc_callback()
1475 urb->actual_length = 0; in usb_linux_isoc_callback()
1478 for (x = 0; x < urb->number_of_packets; x++) { in usb_linux_isoc_callback()
1479 urb->iso_frame_desc[x].actual_length = 0; in usb_linux_isoc_callback()
1480 urb->iso_frame_desc[x].status = urb->status; in usb_linux_isoc_callback()
1509 struct urb *urb = usbd_xfer_get_priv(xfer); in usb_linux_non_isoc_callback() local
1525 if (urb->bsd_isread && (!xfer->flags.ext_buffer)) { in usb_linux_non_isoc_callback()
1528 urb->bsd_data_ptr, xfer->frlengths[data_frame]); in usb_linux_non_isoc_callback()
1530 urb->bsd_length_rem -= xfer->frlengths[data_frame]; in usb_linux_non_isoc_callback()
1531 urb->bsd_data_ptr += xfer->frlengths[data_frame]; in usb_linux_non_isoc_callback()
1532 urb->actual_length += xfer->frlengths[data_frame]; in usb_linux_non_isoc_callback()
1536 urb->bsd_length_rem = 0; in usb_linux_non_isoc_callback()
1539 if (urb->transfer_flags & URB_SHORT_NOT_OK) { in usb_linux_non_isoc_callback()
1540 urb->status = -EPIPE; in usb_linux_non_isoc_callback()
1542 urb->status = 0; in usb_linux_non_isoc_callback()
1546 if (urb->bsd_length_rem > 0) { in usb_linux_non_isoc_callback()
1550 urb->status = 0; in usb_linux_non_isoc_callback()
1559 urb = TAILQ_FIRST(&uhe->bsd_urb_list); in usb_linux_non_isoc_callback()
1560 if (urb == NULL) { in usb_linux_non_isoc_callback()
1564 TAILQ_REMOVE(&uhe->bsd_urb_list, urb, bsd_urb_list); in usb_linux_non_isoc_callback()
1565 urb->bsd_urb_list.tqe_prev = NULL; in usb_linux_non_isoc_callback()
1567 usbd_xfer_set_priv(xfer, urb); in usb_linux_non_isoc_callback()
1569 xfer->timeout = urb->timeout; in usb_linux_non_isoc_callback()
1578 urb->setup_packet, REQ_SIZE); in usb_linux_non_isoc_callback()
1583 urb->setup_packet, REQ_SIZE); in usb_linux_non_isoc_callback()
1586 ptr = urb->setup_packet; in usb_linux_non_isoc_callback()
1589 urb->bsd_isread = (ptr[0] & UT_READ) ? 1 : 0; in usb_linux_non_isoc_callback()
1590 urb->bsd_length_rem = ptr[6] | (ptr[7] << 8); in usb_linux_non_isoc_callback()
1595 urb->bsd_length_rem = urb->transfer_buffer_length; in usb_linux_non_isoc_callback()
1596 urb->bsd_isread = (uhe->desc.bEndpointAddress & in usb_linux_non_isoc_callback()
1600 urb->bsd_data_ptr = urb->transfer_buffer; in usb_linux_non_isoc_callback()
1601 urb->actual_length = 0; in usb_linux_non_isoc_callback()
1604 if (max_bulk > urb->bsd_length_rem) { in usb_linux_non_isoc_callback()
1605 max_bulk = urb->bsd_length_rem; in usb_linux_non_isoc_callback()
1609 if ((max_bulk == urb->bsd_length_rem) && in usb_linux_non_isoc_callback()
1610 (urb->transfer_flags & URB_ZERO_PACKET) && in usb_linux_non_isoc_callback()
1619 urb->bsd_data_ptr, max_bulk); in usb_linux_non_isoc_callback()
1620 } else if (!urb->bsd_isread) { in usb_linux_non_isoc_callback()
1623 urb->bsd_data_ptr, max_bulk); in usb_linux_non_isoc_callback()
1640 urb->status = -ECONNRESET; in usb_linux_non_isoc_callback()
1642 urb->status = -EPIPE; in usb_linux_non_isoc_callback()
1646 urb->actual_length = 0; in usb_linux_non_isoc_callback()
1663 usb_fill_bulk_urb(struct urb *urb, struct usb_device *udev, in usb_fill_bulk_urb() argument
1667 urb->dev = udev; in usb_fill_bulk_urb()
1668 urb->endpoint = uhe; in usb_fill_bulk_urb()
1669 urb->transfer_buffer = buf; in usb_fill_bulk_urb()
1670 urb->transfer_buffer_length = length; in usb_fill_bulk_urb()
1671 urb->complete = callback; in usb_fill_bulk_urb()
1672 urb->context = arg; in usb_fill_bulk_urb()
1688 struct urb *urb; in usb_bulk_msg() local
1700 urb = usb_alloc_urb(0, 0); in usb_bulk_msg()
1702 usb_fill_bulk_urb(urb, udev, uhe, data, len, in usb_bulk_msg()
1705 err = usb_start_wait_urb(urb, timeout, pactlen); in usb_bulk_msg()
1707 usb_free_urb(urb); in usb_bulk_msg()