Lines Matching refs:ep

380     int i = USBEP2I(p->ep);  in usbredir_cancel_packet()
407 struct USBEndpoint *ep) in usbredir_fill_already_in_flight_from_ep() argument
412 if (dev->endpoint[USBEP2I(ep)].bulk_receiving_started) { in usbredir_fill_already_in_flight_from_ep()
416 QTAILQ_FOREACH(p, &ep->queue, queue) { in usbredir_fill_already_in_flight_from_ep()
429 int ep; in usbredir_fill_already_in_flight() local
434 for (ep = 0; ep < USB_MAX_ENDPOINTS; ep++) { in usbredir_fill_already_in_flight()
435 usbredir_fill_already_in_flight_from_ep(dev, &udev->ep_in[ep]); in usbredir_fill_already_in_flight()
436 usbredir_fill_already_in_flight_from_ep(dev, &udev->ep_out[ep]); in usbredir_fill_already_in_flight()
446 uint8_t ep, uint64_t id) in usbredir_find_packet_by_id() argument
455 (ep & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT, in usbredir_find_packet_by_id()
456 ep & 0x0f, id); in usbredir_find_packet_by_id()
464 uint8_t status, uint8_t ep, void *free_on_destroy) in bufp_alloc() argument
468 if (!dev->endpoint[EP2I(ep)].bufpq_dropping_packets && in bufp_alloc()
469 dev->endpoint[EP2I(ep)].bufpq_size > in bufp_alloc()
470 2 * dev->endpoint[EP2I(ep)].bufpq_target_size) { in bufp_alloc()
471 DPRINTF("bufpq overflow, dropping packets ep %02X\n", ep); in bufp_alloc()
472 dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 1; in bufp_alloc()
476 if (dev->endpoint[EP2I(ep)].bufpq_dropping_packets) { in bufp_alloc()
477 if (dev->endpoint[EP2I(ep)].bufpq_size > in bufp_alloc()
478 dev->endpoint[EP2I(ep)].bufpq_target_size) { in bufp_alloc()
482 dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0; in bufp_alloc()
491 QTAILQ_INSERT_TAIL(&dev->endpoint[EP2I(ep)].bufpq, bufp, next); in bufp_alloc()
492 dev->endpoint[EP2I(ep)].bufpq_size++; in bufp_alloc()
497 uint8_t ep) in bufp_free() argument
499 QTAILQ_REMOVE(&dev->endpoint[EP2I(ep)].bufpq, bufp, next); in bufp_free()
500 dev->endpoint[EP2I(ep)].bufpq_size--; in bufp_free()
505 static void usbredir_free_bufpq(USBRedirDevice *dev, uint8_t ep) in usbredir_free_bufpq() argument
509 QTAILQ_FOREACH_SAFE(buf, &dev->endpoint[EP2I(ep)].bufpq, next, buf_next) { in usbredir_free_bufpq()
510 bufp_free(dev, buf, ep); in usbredir_free_bufpq()
528 uint8_t ep) in usbredir_handle_iso_data() argument
531 if (!dev->endpoint[EP2I(ep)].iso_started && in usbredir_handle_iso_data()
532 !dev->endpoint[EP2I(ep)].iso_error) { in usbredir_handle_iso_data()
534 .endpoint = ep, in usbredir_handle_iso_data()
539 pkts_per_sec = 8000 / dev->endpoint[EP2I(ep)].interval; in usbredir_handle_iso_data()
541 pkts_per_sec = 1000 / dev->endpoint[EP2I(ep)].interval; in usbredir_handle_iso_data()
544 dev->endpoint[EP2I(ep)].bufpq_target_size = (pkts_per_sec * 60) / 1000; in usbredir_handle_iso_data()
556 dev->endpoint[EP2I(ep)].bufpq_target_size, in usbredir_handle_iso_data()
560 if (!(ep & USB_DIR_IN)) { in usbredir_handle_iso_data()
571 pkts_per_sec, start_iso.pkts_per_urb, start_iso.no_urbs, ep); in usbredir_handle_iso_data()
572 dev->endpoint[EP2I(ep)].iso_started = 1; in usbredir_handle_iso_data()
573 dev->endpoint[EP2I(ep)].bufpq_prefilled = 0; in usbredir_handle_iso_data()
574 dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0; in usbredir_handle_iso_data()
577 if (ep & USB_DIR_IN) { in usbredir_handle_iso_data()
580 if (dev->endpoint[EP2I(ep)].iso_started && in usbredir_handle_iso_data()
581 !dev->endpoint[EP2I(ep)].bufpq_prefilled) { in usbredir_handle_iso_data()
582 if (dev->endpoint[EP2I(ep)].bufpq_size < in usbredir_handle_iso_data()
583 dev->endpoint[EP2I(ep)].bufpq_target_size) { in usbredir_handle_iso_data()
586 dev->endpoint[EP2I(ep)].bufpq_prefilled = 1; in usbredir_handle_iso_data()
589 isop = QTAILQ_FIRST(&dev->endpoint[EP2I(ep)].bufpq); in usbredir_handle_iso_data()
592 ep, dev->endpoint[EP2I(ep)].iso_error); in usbredir_handle_iso_data()
594 dev->endpoint[EP2I(ep)].bufpq_prefilled = 0; in usbredir_handle_iso_data()
596 status = dev->endpoint[EP2I(ep)].iso_error; in usbredir_handle_iso_data()
597 dev->endpoint[EP2I(ep)].iso_error = 0; in usbredir_handle_iso_data()
601 DPRINTF2("iso-token-in ep %02X status %d len %d queue-size: %d\n", ep, in usbredir_handle_iso_data()
602 isop->status, isop->len, dev->endpoint[EP2I(ep)].bufpq_size); in usbredir_handle_iso_data()
608 ep, len, (int)p->iov.size); in usbredir_handle_iso_data()
613 bufp_free(dev, isop, ep); in usbredir_handle_iso_data()
618 if (dev->endpoint[EP2I(ep)].iso_started) { in usbredir_handle_iso_data()
620 .endpoint = ep, in usbredir_handle_iso_data()
630 status = dev->endpoint[EP2I(ep)].iso_error; in usbredir_handle_iso_data()
631 dev->endpoint[EP2I(ep)].iso_error = 0; in usbredir_handle_iso_data()
632 DPRINTF2("iso-token-out ep %02X status %d len %zd\n", ep, status, in usbredir_handle_iso_data()
638 static void usbredir_stop_iso_stream(USBRedirDevice *dev, uint8_t ep) in usbredir_stop_iso_stream() argument
641 .endpoint = ep in usbredir_stop_iso_stream()
643 if (dev->endpoint[EP2I(ep)].iso_started) { in usbredir_stop_iso_stream()
645 DPRINTF("iso stream stopped ep %02X\n", ep); in usbredir_stop_iso_stream()
646 dev->endpoint[EP2I(ep)].iso_started = 0; in usbredir_stop_iso_stream()
648 dev->endpoint[EP2I(ep)].iso_error = 0; in usbredir_stop_iso_stream()
649 usbredir_free_bufpq(dev, ep); in usbredir_stop_iso_stream()
658 struct buf_packet *bulkp, int count, USBPacket *p, uint8_t ep) in usbredir_buffered_bulk_add_data_to_packet() argument
665 bufp_free(dev, bulkp, ep); in usbredir_buffered_bulk_add_data_to_packet()
670 USBPacket *p, uint8_t ep) in usbredir_buffered_bulk_in_complete_raw() argument
675 while ((bulkp = QTAILQ_FIRST(&dev->endpoint[EP2I(ep)].bufpq)) && in usbredir_buffered_bulk_in_complete_raw()
681 usbredir_buffered_bulk_add_data_to_packet(dev, bulkp, count, p, ep); in usbredir_buffered_bulk_in_complete_raw()
686 USBPacket *p, uint8_t ep) in usbredir_buffered_bulk_in_complete_ftdi() argument
688 const int maxp = dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_buffered_bulk_in_complete_ftdi()
693 while ((bulkp = QTAILQ_FIRST(&dev->endpoint[EP2I(ep)].bufpq)) && in usbredir_buffered_bulk_in_complete_ftdi()
697 bufp_free(dev, bulkp, ep); in usbredir_buffered_bulk_in_complete_ftdi()
718 usbredir_buffered_bulk_add_data_to_packet(dev, bulkp, count, p, ep); in usbredir_buffered_bulk_in_complete_ftdi()
723 USBPacket *p, uint8_t ep) in usbredir_buffered_bulk_in_complete() argument
726 dev->buffered_bulk_in_complete(dev, p, ep); in usbredir_buffered_bulk_in_complete()
728 ep, p->status, p->actual_length, p->id); in usbredir_buffered_bulk_in_complete()
732 USBPacket *p, uint8_t ep) in usbredir_handle_buffered_bulk_in_data() argument
735 if (!dev->endpoint[EP2I(ep)].bulk_receiving_started) { in usbredir_handle_buffered_bulk_in_data()
738 .endpoint = ep, in usbredir_handle_buffered_bulk_in_data()
743 bpt = 512 + dev->endpoint[EP2I(ep)].max_packet_size - 1; in usbredir_handle_buffered_bulk_in_data()
744 bpt /= dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_handle_buffered_bulk_in_data()
745 bpt *= dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_handle_buffered_bulk_in_data()
751 start.bytes_per_transfer, start.no_transfers, ep); in usbredir_handle_buffered_bulk_in_data()
752 dev->endpoint[EP2I(ep)].bulk_receiving_started = 1; in usbredir_handle_buffered_bulk_in_data()
755 dev->endpoint[EP2I(ep)].bufpq_target_size = 5000; in usbredir_handle_buffered_bulk_in_data()
756 dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0; in usbredir_handle_buffered_bulk_in_data()
759 if (QTAILQ_EMPTY(&dev->endpoint[EP2I(ep)].bufpq)) { in usbredir_handle_buffered_bulk_in_data()
760 DPRINTF("bulk-token-in ep %02X, no bulkp\n", ep); in usbredir_handle_buffered_bulk_in_data()
761 assert(dev->endpoint[EP2I(ep)].pending_async_packet == NULL); in usbredir_handle_buffered_bulk_in_data()
762 dev->endpoint[EP2I(ep)].pending_async_packet = p; in usbredir_handle_buffered_bulk_in_data()
766 usbredir_buffered_bulk_in_complete(dev, p, ep); in usbredir_handle_buffered_bulk_in_data()
769 static void usbredir_stop_bulk_receiving(USBRedirDevice *dev, uint8_t ep) in usbredir_stop_bulk_receiving() argument
772 .endpoint = ep, in usbredir_stop_bulk_receiving()
775 if (dev->endpoint[EP2I(ep)].bulk_receiving_started) { in usbredir_stop_bulk_receiving()
777 DPRINTF("bulk receiving stopped ep %02X\n", ep); in usbredir_stop_bulk_receiving()
778 dev->endpoint[EP2I(ep)].bulk_receiving_started = 0; in usbredir_stop_bulk_receiving()
780 usbredir_free_bufpq(dev, ep); in usbredir_stop_bulk_receiving()
784 uint8_t ep) in usbredir_handle_bulk_data() argument
788 const int maxp = dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_handle_bulk_data()
795 if (dev->endpoint[EP2I(ep)].bulk_receiving_enabled) { in usbredir_handle_bulk_data()
797 usbredir_handle_buffered_bulk_in_data(dev, p, ep); in usbredir_handle_bulk_data()
800 WARNING("bulk recv invalid size %zd ep %02x, disabling\n", size, ep); in usbredir_handle_bulk_data()
801 assert(dev->endpoint[EP2I(ep)].pending_async_packet == NULL); in usbredir_handle_bulk_data()
802 usbredir_stop_bulk_receiving(dev, ep); in usbredir_handle_bulk_data()
803 dev->endpoint[EP2I(ep)].bulk_receiving_enabled = 0; in usbredir_handle_bulk_data()
807 ep, p->stream, size, p->id); in usbredir_handle_bulk_data()
809 bulk_packet.endpoint = ep; in usbredir_handle_bulk_data()
817 if (ep & USB_DIR_IN || size == 0) { in usbredir_handle_bulk_data()
832 USBPacket *p, uint8_t ep) in usbredir_handle_interrupt_in_data() argument
838 if (!dev->endpoint[EP2I(ep)].interrupt_started && in usbredir_handle_interrupt_in_data()
839 !dev->endpoint[EP2I(ep)].interrupt_error) { in usbredir_handle_interrupt_in_data()
841 .endpoint = ep, in usbredir_handle_interrupt_in_data()
847 DPRINTF("interrupt recv started ep %02X\n", ep); in usbredir_handle_interrupt_in_data()
848 dev->endpoint[EP2I(ep)].interrupt_started = 1; in usbredir_handle_interrupt_in_data()
851 dev->endpoint[EP2I(ep)].bufpq_target_size = 1000; in usbredir_handle_interrupt_in_data()
852 dev->endpoint[EP2I(ep)].bufpq_dropping_packets = 0; in usbredir_handle_interrupt_in_data()
857 QTAILQ_FOREACH(intp, &dev->endpoint[EP2I(ep)].bufpq, next) { in usbredir_handle_interrupt_in_data()
859 if (intp->len < dev->endpoint[EP2I(ep)].max_packet_size || in usbredir_handle_interrupt_in_data()
865 DPRINTF2("interrupt-token-in ep %02X, no intp, buffered %d\n", ep, sum); in usbredir_handle_interrupt_in_data()
867 status = dev->endpoint[EP2I(ep)].interrupt_error; in usbredir_handle_interrupt_in_data()
868 dev->endpoint[EP2I(ep)].interrupt_error = 0; in usbredir_handle_interrupt_in_data()
881 QTAILQ_FOREACH(intp, &dev->endpoint[EP2I(ep)].bufpq, next) { in usbredir_handle_interrupt_in_data()
883 bufp_free(dev, intp_to_free, ep); in usbredir_handle_interrupt_in_data()
885 DPRINTF("interrupt-token-in ep %02X fragment status %d len %d\n", ep, in usbredir_handle_interrupt_in_data()
894 ERROR("received int data is larger then packet ep %02X\n", ep); in usbredir_handle_interrupt_in_data()
903 if (intp->len < dev->endpoint[EP2I(ep)].max_packet_size || in usbredir_handle_interrupt_in_data()
908 bufp_free(dev, intp_to_free, ep); in usbredir_handle_interrupt_in_data()
910 DPRINTF("interrupt-token-in ep %02X summary status %d len %d\n", ep, in usbredir_handle_interrupt_in_data()
923 USBPacket *p, uint8_t ep) in usbredir_handle_interrupt_out_data() argument
928 DPRINTF("interrupt-out ep %02X len %zd id %"PRIu64"\n", ep, in usbredir_handle_interrupt_out_data()
931 interrupt_packet.endpoint = ep; in usbredir_handle_interrupt_out_data()
942 uint8_t ep) in usbredir_stop_interrupt_receiving() argument
945 .endpoint = ep in usbredir_stop_interrupt_receiving()
947 if (dev->endpoint[EP2I(ep)].interrupt_started) { in usbredir_stop_interrupt_receiving()
950 DPRINTF("interrupt recv stopped ep %02X\n", ep); in usbredir_stop_interrupt_receiving()
951 dev->endpoint[EP2I(ep)].interrupt_started = 0; in usbredir_stop_interrupt_receiving()
953 dev->endpoint[EP2I(ep)].interrupt_error = 0; in usbredir_stop_interrupt_receiving()
954 usbredir_free_bufpq(dev, ep); in usbredir_stop_interrupt_receiving()
960 uint8_t ep; in usbredir_handle_data() local
962 ep = p->ep->nr; in usbredir_handle_data()
964 ep |= USB_DIR_IN; in usbredir_handle_data()
967 switch (dev->endpoint[EP2I(ep)].type) { in usbredir_handle_data()
969 ERROR("handle_data called for control transfer on ep %02X\n", ep); in usbredir_handle_data()
974 p->ep->pipeline) { in usbredir_handle_data()
978 usbredir_handle_bulk_data(dev, p, ep); in usbredir_handle_data()
981 usbredir_handle_iso_data(dev, p, ep); in usbredir_handle_data()
984 if (ep & USB_DIR_IN) { in usbredir_handle_data()
985 usbredir_handle_interrupt_in_data(dev, p, ep); in usbredir_handle_data()
987 usbredir_handle_interrupt_out_data(dev, p, ep); in usbredir_handle_data()
991 ERROR("handle_data ep %02X has unknown type %d\n", ep, in usbredir_handle_data()
992 dev->endpoint[EP2I(ep)].type); in usbredir_handle_data()
997 static void usbredir_flush_ep_queue(USBDevice *dev, USBEndpoint *ep) in usbredir_flush_ep_queue() argument
999 if (ep->pid == USB_TOKEN_IN && ep->pipeline) { in usbredir_flush_ep_queue()
1000 usb_ep_combine_input_packets(ep); in usbredir_flush_ep_queue()
1006 uint8_t ep = I2EP(i); in usbredir_stop_ep() local
1010 if (ep & USB_DIR_IN) { in usbredir_stop_ep()
1011 usbredir_stop_bulk_receiving(dev, ep); in usbredir_stop_ep()
1015 usbredir_stop_iso_stream(dev, ep); in usbredir_stop_ep()
1018 if (ep & USB_DIR_IN) { in usbredir_stop_ep()
1019 usbredir_stop_interrupt_receiving(dev, ep); in usbredir_stop_ep()
1023 usbredir_free_bufpq(dev, ep); in usbredir_stop_ep()
1903 uint8_t ep = iso_stream_status->endpoint; in usbredir_iso_stream_status() local
1906 ep, id); in usbredir_iso_stream_status()
1908 if (!dev->dev.attached || !dev->endpoint[EP2I(ep)].iso_started) { in usbredir_iso_stream_status()
1912 dev->endpoint[EP2I(ep)].iso_error = iso_stream_status->status; in usbredir_iso_stream_status()
1914 DPRINTF("iso stream stopped by peer ep %02X\n", ep); in usbredir_iso_stream_status()
1915 dev->endpoint[EP2I(ep)].iso_started = 0; in usbredir_iso_stream_status()
1924 uint8_t ep = interrupt_receiving_status->endpoint; in usbredir_interrupt_receiving_status() local
1927 interrupt_receiving_status->status, ep, id); in usbredir_interrupt_receiving_status()
1929 if (!dev->dev.attached || !dev->endpoint[EP2I(ep)].interrupt_started) { in usbredir_interrupt_receiving_status()
1933 dev->endpoint[EP2I(ep)].interrupt_error = in usbredir_interrupt_receiving_status()
1936 DPRINTF("interrupt receiving stopped by peer ep %02X\n", ep); in usbredir_interrupt_receiving_status()
1937 dev->endpoint[EP2I(ep)].interrupt_started = 0; in usbredir_interrupt_receiving_status()
1964 uint8_t ep = bulk_receiving_status->endpoint; in usbredir_bulk_receiving_status() local
1967 bulk_receiving_status->status, ep, id); in usbredir_bulk_receiving_status()
1969 if (!dev->dev.attached || !dev->endpoint[EP2I(ep)].bulk_receiving_started) { in usbredir_bulk_receiving_status()
1974 DPRINTF("bulk receiving stopped by peer ep %02X\n", ep); in usbredir_bulk_receiving_status()
1975 dev->endpoint[EP2I(ep)].bulk_receiving_started = 0; in usbredir_bulk_receiving_status()
2042 uint8_t ep = bulk_packet->endpoint; in usbredir_bulk_packet() local
2047 bulk_packet->status, ep, bulk_packet->stream_id, len, id); in usbredir_bulk_packet()
2049 p = usbredir_find_packet_by_id(dev, ep, id); in usbredir_bulk_packet()
2064 if (p->pid == USB_TOKEN_IN && p->ep->pipeline) { in usbredir_bulk_packet()
2078 uint8_t ep = iso_packet->endpoint; in usbredir_iso_packet() local
2081 iso_packet->status, ep, data_len, id); in usbredir_iso_packet()
2083 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_ISOC) { in usbredir_iso_packet()
2084 ERROR("received iso packet for non iso endpoint %02X\n", ep); in usbredir_iso_packet()
2089 if (dev->endpoint[EP2I(ep)].iso_started == 0) { in usbredir_iso_packet()
2090 DPRINTF("received iso packet for non started stream ep %02X\n", ep); in usbredir_iso_packet()
2096 bufp_alloc(dev, data, data_len, iso_packet->status, ep, data); in usbredir_iso_packet()
2104 uint8_t ep = interrupt_packet->endpoint; in usbredir_interrupt_packet() local
2107 interrupt_packet->status, ep, data_len, id); in usbredir_interrupt_packet()
2109 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_INT) { in usbredir_interrupt_packet()
2110 ERROR("received int packet for non interrupt endpoint %02X\n", ep); in usbredir_interrupt_packet()
2115 if (ep & USB_DIR_IN) { in usbredir_interrupt_packet()
2116 if (dev->endpoint[EP2I(ep)].interrupt_started == 0) { in usbredir_interrupt_packet()
2117 DPRINTF("received int packet while not started ep %02X\n", ep); in usbredir_interrupt_packet()
2123 bufp_alloc(dev, data, data_len, interrupt_packet->status, ep, data); in usbredir_interrupt_packet()
2126 usb_wakeup(usb_ep_get(&dev->dev, USB_TOKEN_IN, ep & 0x0f), 0); in usbredir_interrupt_packet()
2134 interrupt_packet->status, ep, id); in usbredir_interrupt_packet()
2144 uint8_t status, ep = buffered_bulk_packet->endpoint; in usbredir_buffered_bulk_packet() local
2149 buffered_bulk_packet->status, ep, data_len, id); in usbredir_buffered_bulk_packet()
2151 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_BULK) { in usbredir_buffered_bulk_packet()
2152 ERROR("received buffered-bulk packet for non bulk ep %02X\n", ep); in usbredir_buffered_bulk_packet()
2157 if (dev->endpoint[EP2I(ep)].bulk_receiving_started == 0) { in usbredir_buffered_bulk_packet()
2158 DPRINTF("received buffered-bulk packet on not started ep %02X\n", ep); in usbredir_buffered_bulk_packet()
2164 len = dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_buffered_bulk_packet()
2175 r = bufp_alloc(dev, data + i, len, status, ep, free_on_destroy); in usbredir_buffered_bulk_packet()
2181 if (dev->endpoint[EP2I(ep)].pending_async_packet) { in usbredir_buffered_bulk_packet()
2182 USBPacket *p = dev->endpoint[EP2I(ep)].pending_async_packet; in usbredir_buffered_bulk_packet()
2183 dev->endpoint[EP2I(ep)].pending_async_packet = NULL; in usbredir_buffered_bulk_packet()
2184 usbredir_buffered_bulk_in_complete(dev, p, ep); in usbredir_buffered_bulk_packet()