Lines Matching refs:dev

60 #define I2USBEP(d, i) (usb_ep_get(&(d)->dev, \
81 USBRedirDevice *dev; member
107 USBRedirDevice *dev; member
114 USBDevice dev; member
189 static void usbredir_handle_status(USBRedirDevice *dev, USBPacket *p,
200 if (dev->debug >= usbredirparser_error) { \
206 if (dev->debug >= usbredirparser_warning) { \
212 if (dev->debug >= usbredirparser_info) { \
218 if (dev->debug >= usbredirparser_debug) { \
224 if (dev->debug >= usbredirparser_debug_data) { \
231 USBRedirDevice *dev = priv; in usbredir_log() local
233 if (dev->debug < level) { in usbredir_log()
240 static void usbredir_log_data(USBRedirDevice *dev, const char *desc, in usbredir_log_data() argument
243 if (dev->debug < usbredirparser_debug_data) { in usbredir_log_data()
255 USBRedirDevice *dev = priv; in usbredir_read() local
257 if (dev->read_buf_size < count) { in usbredir_read()
258 count = dev->read_buf_size; in usbredir_read()
261 memcpy(data, dev->read_buf, count); in usbredir_read()
263 dev->read_buf_size -= count; in usbredir_read()
264 if (dev->read_buf_size) { in usbredir_read()
265 dev->read_buf += count; in usbredir_read()
267 dev->read_buf = NULL; in usbredir_read()
276 USBRedirDevice *dev = opaque; in usbredir_write_unblocked() local
278 dev->watch = 0; in usbredir_write_unblocked()
279 usbredirparser_do_write(dev->parser); in usbredir_write_unblocked()
286 USBRedirDevice *dev = priv; in usbredir_write() local
289 if (!qemu_chr_fe_backend_open(&dev->cs)) { in usbredir_write()
299 if (dev->in_write) { in usbredir_write()
303 dev->in_write = true; in usbredir_write()
305 r = qemu_chr_fe_write(&dev->cs, data, count); in usbredir_write()
307 if (!dev->watch) { in usbredir_write()
308 dev->watch = qemu_chr_fe_add_watch(&dev->cs, G_IO_OUT | G_IO_HUP, in usbredir_write()
309 usbredir_write_unblocked, dev); in usbredir_write()
315 dev->in_write = false; in usbredir_write()
324 USBRedirDevice *dev, const char *name) in packet_id_queue_init() argument
326 q->dev = dev; in packet_id_queue_init()
334 USBRedirDevice *dev = q->dev; in packet_id_queue_add() local
347 USBRedirDevice *dev = q->dev; in packet_id_queue_remove() local
365 USBRedirDevice *dev = q->dev; in packet_id_queue_empty() local
379 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_cancel_packet() local
387 if (dev->endpoint[i].pending_async_packet) { in usbredir_cancel_packet()
388 assert(dev->endpoint[i].pending_async_packet == p); in usbredir_cancel_packet()
389 dev->endpoint[i].pending_async_packet = NULL; in usbredir_cancel_packet()
393 packet_id_queue_add(&dev->cancelled, p->id); in usbredir_cancel_packet()
394 usbredirparser_send_cancel_data_packet(dev->parser, p->id); in usbredir_cancel_packet()
395 usbredirparser_do_write(dev->parser); in usbredir_cancel_packet()
398 static int usbredir_is_cancelled(USBRedirDevice *dev, uint64_t id) in usbredir_is_cancelled() argument
400 if (!dev->dev.attached) { in usbredir_is_cancelled()
403 return packet_id_queue_remove(&dev->cancelled, id); in usbredir_is_cancelled()
406 static void usbredir_fill_already_in_flight_from_ep(USBRedirDevice *dev, 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()
422 packet_id_queue_add(&dev->already_in_flight, p->id); in usbredir_fill_already_in_flight_from_ep()
427 static void usbredir_fill_already_in_flight(USBRedirDevice *dev) in usbredir_fill_already_in_flight() argument
430 struct USBDevice *udev = &dev->dev; in usbredir_fill_already_in_flight()
432 usbredir_fill_already_in_flight_from_ep(dev, &udev->ep_ctl); 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()
440 static int usbredir_already_in_flight(USBRedirDevice *dev, uint64_t id) in usbredir_already_in_flight() argument
442 return packet_id_queue_remove(&dev->already_in_flight, id); in usbredir_already_in_flight()
445 static USBPacket *usbredir_find_packet_by_id(USBRedirDevice *dev, in usbredir_find_packet_by_id() argument
450 if (usbredir_is_cancelled(dev, id)) { in usbredir_find_packet_by_id()
454 p = usb_ep_find_packet_by_id(&dev->dev, in usbredir_find_packet_by_id()
463 static int bufp_alloc(USBRedirDevice *dev, uint8_t *data, uint16_t len, 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()
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()
496 static void bufp_free(USBRedirDevice *dev, struct buf_packet *bufp, 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()
520 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_handle_reset() local
523 usbredirparser_send_reset(dev->parser); in usbredir_handle_reset()
524 usbredirparser_do_write(dev->parser); in usbredir_handle_reset()
527 static void usbredir_handle_iso_data(USBRedirDevice *dev, USBPacket *p, 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()
538 if (dev->dev.speed == USB_SPEED_HIGH) { 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()
568 usbredirparser_send_start_iso_stream(dev->parser, 0, &start_iso); in usbredir_handle_iso_data()
569 usbredirparser_do_write(dev->parser); 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()
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()
602 isop->status, isop->len, dev->endpoint[EP2I(ep)].bufpq_size); in usbredir_handle_iso_data()
613 bufp_free(dev, isop, ep); in usbredir_handle_iso_data()
614 usbredir_handle_status(dev, p, status); in usbredir_handle_iso_data()
618 if (dev->endpoint[EP2I(ep)].iso_started) { in usbredir_handle_iso_data()
626 usbredirparser_send_iso_packet(dev->parser, 0, &iso_packet, in usbredir_handle_iso_data()
628 usbredirparser_do_write(dev->parser); 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()
634 usbredir_handle_status(dev, p, status); in usbredir_handle_iso_data()
638 static void usbredir_stop_iso_stream(USBRedirDevice *dev, uint8_t ep) in usbredir_stop_iso_stream() argument
643 if (dev->endpoint[EP2I(ep)].iso_started) { in usbredir_stop_iso_stream()
644 usbredirparser_send_stop_iso_stream(dev->parser, 0, &stop_iso_stream); 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()
657 static void usbredir_buffered_bulk_add_data_to_packet(USBRedirDevice *dev, in usbredir_buffered_bulk_add_data_to_packet() argument
664 usbredir_handle_status(dev, p, bulkp->status); in usbredir_buffered_bulk_add_data_to_packet()
665 bufp_free(dev, bulkp, ep); in usbredir_buffered_bulk_add_data_to_packet()
669 static void usbredir_buffered_bulk_in_complete_raw(USBRedirDevice *dev, 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()
685 static void usbredir_buffered_bulk_in_complete_ftdi(USBRedirDevice *dev, 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()
722 static void usbredir_buffered_bulk_in_complete(USBRedirDevice *dev, in usbredir_buffered_bulk_in_complete() argument
726 dev->buffered_bulk_in_complete(dev, p, ep); in usbredir_buffered_bulk_in_complete()
731 static void usbredir_handle_buffered_bulk_in_data(USBRedirDevice *dev, in usbredir_handle_buffered_bulk_in_data() argument
735 if (!dev->endpoint[EP2I(ep)].bulk_receiving_started) { 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()
748 usbredirparser_send_start_bulk_receiving(dev->parser, 0, &start); in usbredir_handle_buffered_bulk_in_data()
749 usbredirparser_do_write(dev->parser); 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()
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
775 if (dev->endpoint[EP2I(ep)].bulk_receiving_started) { in usbredir_stop_bulk_receiving()
776 usbredirparser_send_stop_bulk_receiving(dev->parser, 0, &stop_bulk); 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()
783 static void usbredir_handle_bulk_data(USBRedirDevice *dev, USBPacket *p, in usbredir_handle_bulk_data() argument
788 const int maxp = dev->endpoint[EP2I(ep)].max_packet_size; in usbredir_handle_bulk_data()
790 if (usbredir_already_in_flight(dev, p->id)) { 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()
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()
814 usbredirparser_peer_has_cap(dev->parser, in usbredir_handle_bulk_data()
818 usbredirparser_send_bulk_packet(dev->parser, p->id, in usbredir_handle_bulk_data()
823 usbredir_log_data(dev, "bulk data out:", buf, size); in usbredir_handle_bulk_data()
824 usbredirparser_send_bulk_packet(dev->parser, p->id, in usbredir_handle_bulk_data()
827 usbredirparser_do_write(dev->parser); in usbredir_handle_bulk_data()
831 static void usbredir_handle_interrupt_in_data(USBRedirDevice *dev, 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()
844 usbredirparser_send_start_interrupt_receiving(dev->parser, 0, in usbredir_handle_interrupt_in_data()
846 usbredirparser_do_write(dev->parser); 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()
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()
870 usbredir_handle_status(dev, p, status); 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()
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()
912 usbredir_handle_status(dev, p, status); in usbredir_handle_interrupt_in_data()
922 static void usbredir_handle_interrupt_out_data(USBRedirDevice *dev, in usbredir_handle_interrupt_out_data() argument
935 usbredir_log_data(dev, "interrupt data out:", buf, p->iov.size); in usbredir_handle_interrupt_out_data()
936 usbredirparser_send_interrupt_packet(dev->parser, p->id, in usbredir_handle_interrupt_out_data()
938 usbredirparser_do_write(dev->parser); in usbredir_handle_interrupt_out_data()
941 static void usbredir_stop_interrupt_receiving(USBRedirDevice *dev, in usbredir_stop_interrupt_receiving() argument
947 if (dev->endpoint[EP2I(ep)].interrupt_started) { in usbredir_stop_interrupt_receiving()
948 usbredirparser_send_stop_interrupt_receiving(dev->parser, 0, 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()
959 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_handle_data() local
967 switch (dev->endpoint[EP2I(ep)].type) { 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()
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()
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
1004 static void usbredir_stop_ep(USBRedirDevice *dev, int i) in usbredir_stop_ep() argument
1008 switch (dev->endpoint[i].type) { 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()
1019 usbredir_stop_interrupt_receiving(dev, ep); in usbredir_stop_ep()
1023 usbredir_free_bufpq(dev, ep); in usbredir_stop_ep()
1028 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_ep_stopped() local
1030 usbredir_stop_ep(dev, USBEP2I(uep)); in usbredir_ep_stopped()
1031 usbredirparser_do_write(dev->parser); in usbredir_ep_stopped()
1034 static void usbredir_set_config(USBRedirDevice *dev, USBPacket *p, in usbredir_set_config() argument
1043 usbredir_stop_ep(dev, i); in usbredir_set_config()
1047 usbredirparser_send_set_configuration(dev->parser, p->id, &set_config); in usbredir_set_config()
1048 usbredirparser_do_write(dev->parser); in usbredir_set_config()
1052 static void usbredir_get_config(USBRedirDevice *dev, USBPacket *p) in usbredir_get_config() argument
1056 usbredirparser_send_get_configuration(dev->parser, p->id); in usbredir_get_config()
1057 usbredirparser_do_write(dev->parser); in usbredir_get_config()
1061 static void usbredir_set_interface(USBRedirDevice *dev, USBPacket *p, in usbredir_set_interface() argument
1070 if (dev->endpoint[i].interface == interface) { in usbredir_set_interface()
1071 usbredir_stop_ep(dev, i); in usbredir_set_interface()
1077 usbredirparser_send_set_alt_setting(dev->parser, p->id, &set_alt); in usbredir_set_interface()
1078 usbredirparser_do_write(dev->parser); in usbredir_set_interface()
1082 static void usbredir_get_interface(USBRedirDevice *dev, USBPacket *p, in usbredir_get_interface() argument
1090 usbredirparser_send_get_alt_setting(dev->parser, p->id, &get_alt); in usbredir_get_interface()
1091 usbredirparser_do_write(dev->parser); in usbredir_get_interface()
1098 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_handle_control() local
1101 if (usbredir_already_in_flight(dev, p->id)) { in usbredir_handle_control()
1110 dev->dev.addr = value; in usbredir_handle_control()
1113 usbredir_set_config(dev, p, value & 0xff); in usbredir_handle_control()
1116 usbredir_get_config(dev, p); in usbredir_handle_control()
1119 usbredir_set_interface(dev, p, index, value); in usbredir_handle_control()
1122 usbredir_get_interface(dev, p, index); in usbredir_handle_control()
1139 usbredirparser_send_control_packet(dev->parser, p->id, in usbredir_handle_control()
1142 usbredir_log_data(dev, "ctrl data out:", data, length); in usbredir_handle_control()
1143 usbredirparser_send_control_packet(dev->parser, p->id, in usbredir_handle_control()
1146 usbredirparser_do_write(dev->parser); in usbredir_handle_control()
1153 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_alloc_streams() local
1158 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_alloc_streams()
1174 usbredirparser_send_alloc_bulk_streams(dev->parser, 0, &alloc_streams); in usbredir_alloc_streams()
1175 usbredirparser_do_write(dev->parser); in usbredir_alloc_streams()
1184 qemu_bh_schedule(dev->device_reject_bh); in usbredir_alloc_streams()
1192 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_free_streams() local
1196 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_free_streams()
1205 usbredirparser_send_free_bulk_streams(dev->parser, 0, &free_streams); in usbredir_free_streams()
1206 usbredirparser_do_write(dev->parser); in usbredir_free_streams()
1219 USBRedirDevice *dev = opaque; in usbredir_chardev_close_bh() local
1221 qemu_bh_cancel(dev->device_reject_bh); in usbredir_chardev_close_bh()
1222 usbredir_device_disconnect(dev); in usbredir_chardev_close_bh()
1224 if (dev->parser) { in usbredir_chardev_close_bh()
1226 usbredirparser_destroy(dev->parser); in usbredir_chardev_close_bh()
1227 dev->parser = NULL; in usbredir_chardev_close_bh()
1229 if (dev->watch) { in usbredir_chardev_close_bh()
1230 g_source_remove(dev->watch); in usbredir_chardev_close_bh()
1231 dev->watch = 0; in usbredir_chardev_close_bh()
1235 static void usbredir_create_parser(USBRedirDevice *dev) in usbredir_create_parser() argument
1242 dev->parser = usbredirparser_create(); in usbredir_create_parser()
1243 if (!dev->parser) { in usbredir_create_parser()
1247 dev->parser->priv = dev; in usbredir_create_parser()
1248 dev->parser->log_func = usbredir_log; in usbredir_create_parser()
1249 dev->parser->read_func = usbredir_read; in usbredir_create_parser()
1250 dev->parser->write_func = usbredir_write; in usbredir_create_parser()
1251 dev->parser->hello_func = usbredir_hello; in usbredir_create_parser()
1252 dev->parser->device_connect_func = usbredir_device_connect; in usbredir_create_parser()
1253 dev->parser->device_disconnect_func = usbredir_device_disconnect; in usbredir_create_parser()
1254 dev->parser->interface_info_func = usbredir_interface_info; in usbredir_create_parser()
1255 dev->parser->ep_info_func = usbredir_ep_info; in usbredir_create_parser()
1256 dev->parser->configuration_status_func = usbredir_configuration_status; in usbredir_create_parser()
1257 dev->parser->alt_setting_status_func = usbredir_alt_setting_status; in usbredir_create_parser()
1258 dev->parser->iso_stream_status_func = usbredir_iso_stream_status; in usbredir_create_parser()
1259 dev->parser->interrupt_receiving_status_func = in usbredir_create_parser()
1261 dev->parser->bulk_streams_status_func = usbredir_bulk_streams_status; in usbredir_create_parser()
1262 dev->parser->bulk_receiving_status_func = usbredir_bulk_receiving_status; in usbredir_create_parser()
1263 dev->parser->control_packet_func = usbredir_control_packet; in usbredir_create_parser()
1264 dev->parser->bulk_packet_func = usbredir_bulk_packet; in usbredir_create_parser()
1265 dev->parser->iso_packet_func = usbredir_iso_packet; in usbredir_create_parser()
1266 dev->parser->interrupt_packet_func = usbredir_interrupt_packet; in usbredir_create_parser()
1267 dev->parser->buffered_bulk_packet_func = usbredir_buffered_bulk_packet; in usbredir_create_parser()
1268 dev->read_buf = NULL; in usbredir_create_parser()
1269 dev->read_buf_size = 0; in usbredir_create_parser()
1278 if (dev->enable_streams) { in usbredir_create_parser()
1286 usbredirparser_init(dev->parser, VERSION, caps, USB_REDIR_CAPS_SIZE, in usbredir_create_parser()
1288 usbredirparser_do_write(dev->parser); in usbredir_create_parser()
1291 static void usbredir_reject_device(USBRedirDevice *dev) in usbredir_reject_device() argument
1293 usbredir_device_disconnect(dev); in usbredir_reject_device()
1294 if (usbredirparser_peer_has_cap(dev->parser, usb_redir_cap_filter)) { in usbredir_reject_device()
1295 usbredirparser_send_filter_reject(dev->parser); in usbredir_reject_device()
1296 usbredirparser_do_write(dev->parser); in usbredir_reject_device()
1306 USBRedirDevice *dev = opaque; in usbredir_device_reject_bh() local
1308 usbredir_reject_device(dev); in usbredir_device_reject_bh()
1313 USBRedirDevice *dev = opaque; in usbredir_do_attach() local
1317 if ((dev->dev.port->speedmask & USB_SPEED_MASK_SUPER) && !( in usbredir_do_attach()
1318 usbredirparser_peer_has_cap(dev->parser, in usbredir_do_attach()
1320 usbredirparser_peer_has_cap(dev->parser, in usbredir_do_attach()
1322 usbredirparser_peer_has_cap(dev->parser, in usbredir_do_attach()
1325 usbredir_reject_device(dev); in usbredir_do_attach()
1329 usb_device_attach(&dev->dev, &local_err); in usbredir_do_attach()
1333 usbredir_reject_device(dev); in usbredir_do_attach()
1343 USBRedirDevice *dev = opaque; in usbredir_chardev_can_read() local
1345 if (!dev->parser) { in usbredir_chardev_can_read()
1361 USBRedirDevice *dev = opaque; in usbredir_chardev_read() local
1364 assert(dev->read_buf == NULL); in usbredir_chardev_read()
1366 dev->read_buf = buf; in usbredir_chardev_read()
1367 dev->read_buf_size = size; in usbredir_chardev_read()
1369 usbredirparser_do_read(dev->parser); in usbredir_chardev_read()
1371 usbredirparser_do_write(dev->parser); in usbredir_chardev_read()
1376 USBRedirDevice *dev = opaque; in usbredir_chardev_event() local
1382 usbredir_chardev_close_bh(dev); in usbredir_chardev_event()
1383 qemu_bh_cancel(dev->chardev_close_bh); in usbredir_chardev_event()
1384 usbredir_create_parser(dev); in usbredir_chardev_event()
1388 qemu_bh_schedule(dev->chardev_close_bh); in usbredir_chardev_event()
1404 USBRedirDevice *dev = priv; in usbredir_vm_state_change() local
1406 if (running && dev->parser != NULL) { in usbredir_vm_state_change()
1407 usbredirparser_do_write(dev->parser); /* Flush any pending writes */ in usbredir_vm_state_change()
1411 static void usbredir_init_endpoints(USBRedirDevice *dev) in usbredir_init_endpoints() argument
1415 usb_ep_init(&dev->dev); in usbredir_init_endpoints()
1416 memset(dev->endpoint, 0, sizeof(dev->endpoint)); in usbredir_init_endpoints()
1418 dev->endpoint[i].dev = dev; in usbredir_init_endpoints()
1419 QTAILQ_INIT(&dev->endpoint[i].bufpq); in usbredir_init_endpoints()
1425 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_realize() local
1428 if (!qemu_chr_fe_backend_connected(&dev->cs)) { in usbredir_realize()
1433 if (dev->filter_str) { in usbredir_realize()
1434 i = usbredirfilter_string_to_rules(dev->filter_str, ":", "|", in usbredir_realize()
1435 &dev->filter_rules, in usbredir_realize()
1436 &dev->filter_rules_count); in usbredir_realize()
1444 dev->chardev_close_bh = qemu_bh_new_guarded(usbredir_chardev_close_bh, dev, in usbredir_realize()
1445 &DEVICE(dev)->mem_reentrancy_guard); in usbredir_realize()
1446 dev->device_reject_bh = qemu_bh_new_guarded(usbredir_device_reject_bh, dev, in usbredir_realize()
1447 &DEVICE(dev)->mem_reentrancy_guard); in usbredir_realize()
1448 dev->attach_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, usbredir_do_attach, dev); in usbredir_realize()
1450 packet_id_queue_init(&dev->cancelled, dev, "cancelled"); in usbredir_realize()
1451 packet_id_queue_init(&dev->already_in_flight, dev, "already-in-flight"); in usbredir_realize()
1452 usbredir_init_endpoints(dev); in usbredir_realize()
1458 dev->compatible_speedmask = USB_SPEED_MASK_FULL | USB_SPEED_MASK_HIGH; in usbredir_realize()
1461 qemu_chr_fe_set_handlers(&dev->cs, usbredir_chardev_can_read, in usbredir_realize()
1463 NULL, dev, NULL, true); in usbredir_realize()
1465 dev->vmstate = in usbredir_realize()
1466 qemu_add_vm_change_state_handler(usbredir_vm_state_change, dev); in usbredir_realize()
1469 static void usbredir_cleanup_device_queues(USBRedirDevice *dev) in usbredir_cleanup_device_queues() argument
1473 packet_id_queue_empty(&dev->cancelled); in usbredir_cleanup_device_queues()
1474 packet_id_queue_empty(&dev->already_in_flight); in usbredir_cleanup_device_queues()
1476 usbredir_free_bufpq(dev, I2EP(i)); in usbredir_cleanup_device_queues()
1482 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_unrealize() local
1484 qemu_chr_fe_deinit(&dev->cs, true); in usbredir_unrealize()
1487 qemu_bh_delete(dev->chardev_close_bh); in usbredir_unrealize()
1488 qemu_bh_delete(dev->device_reject_bh); in usbredir_unrealize()
1490 timer_free(dev->attach_timer); in usbredir_unrealize()
1492 usbredir_cleanup_device_queues(dev); in usbredir_unrealize()
1494 if (dev->parser) { in usbredir_unrealize()
1495 usbredirparser_destroy(dev->parser); in usbredir_unrealize()
1497 if (dev->watch) { in usbredir_unrealize()
1498 g_source_remove(dev->watch); in usbredir_unrealize()
1501 free(dev->filter_rules); in usbredir_unrealize()
1502 qemu_del_vm_change_state_handler(dev->vmstate); in usbredir_unrealize()
1505 static int usbredir_check_filter(USBRedirDevice *dev) in usbredir_check_filter() argument
1507 if (dev->interface_info.interface_count == NO_INTERFACE_INFO) { in usbredir_check_filter()
1512 if (dev->filter_rules) { in usbredir_check_filter()
1513 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_check_filter()
1521 dev->filter_rules, in usbredir_check_filter()
1522 dev->filter_rules_count, in usbredir_check_filter()
1523 dev->device_info.device_class, in usbredir_check_filter()
1524 dev->device_info.device_subclass, in usbredir_check_filter()
1525 dev->device_info.device_protocol, in usbredir_check_filter()
1526 dev->interface_info.interface_class, in usbredir_check_filter()
1527 dev->interface_info.interface_subclass, in usbredir_check_filter()
1528 dev->interface_info.interface_protocol, in usbredir_check_filter()
1529 dev->interface_info.interface_count, in usbredir_check_filter()
1530 dev->device_info.vendor_id, in usbredir_check_filter()
1531 dev->device_info.product_id, in usbredir_check_filter()
1532 dev->device_info.device_version_bcd, in usbredir_check_filter()
1541 usbredir_reject_device(dev); in usbredir_check_filter()
1545 static void usbredir_check_bulk_receiving(USBRedirDevice *dev) in usbredir_check_bulk_receiving() argument
1549 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_check_bulk_receiving()
1555 dev->endpoint[i].bulk_receiving_enabled = 0; in usbredir_check_bulk_receiving()
1558 if (dev->interface_info.interface_count == NO_INTERFACE_INFO) { in usbredir_check_bulk_receiving()
1562 for (i = 0; i < dev->interface_info.interface_count; i++) { in usbredir_check_bulk_receiving()
1563 quirks = usb_get_quirks(dev->device_info.vendor_id, in usbredir_check_bulk_receiving()
1564 dev->device_info.product_id, in usbredir_check_bulk_receiving()
1565 dev->interface_info.interface_class[i], in usbredir_check_bulk_receiving()
1566 dev->interface_info.interface_subclass[i], in usbredir_check_bulk_receiving()
1567 dev->interface_info.interface_protocol[i]); in usbredir_check_bulk_receiving()
1572 dev->buffered_bulk_in_complete = in usbredir_check_bulk_receiving()
1575 dev->buffered_bulk_in_complete = in usbredir_check_bulk_receiving()
1580 if (dev->endpoint[j].interface == in usbredir_check_bulk_receiving()
1581 dev->interface_info.interface[i] && in usbredir_check_bulk_receiving()
1582 dev->endpoint[j].type == USB_ENDPOINT_XFER_BULK && in usbredir_check_bulk_receiving()
1583 dev->endpoint[j].max_packet_size != 0) { in usbredir_check_bulk_receiving()
1584 dev->endpoint[j].bulk_receiving_enabled = 1; in usbredir_check_bulk_receiving()
1589 I2USBEP(dev, j)->pipeline = false; in usbredir_check_bulk_receiving()
1600 static void usbredir_handle_status(USBRedirDevice *dev, USBPacket *p, in usbredir_handle_status() argument
1633 USBRedirDevice *dev = priv; in usbredir_hello() local
1636 if (usbredirparser_peer_has_cap(dev->parser, usb_redir_cap_filter) && in usbredir_hello()
1637 dev->filter_rules) { in usbredir_hello()
1638 usbredirparser_send_filter_filter(dev->parser, dev->filter_rules, in usbredir_hello()
1639 dev->filter_rules_count); in usbredir_hello()
1640 usbredirparser_do_write(dev->parser); in usbredir_hello()
1647 USBRedirDevice *dev = priv; in usbredir_device_connect() local
1650 if (timer_pending(dev->attach_timer) || dev->dev.attached) { in usbredir_device_connect()
1658 dev->dev.speed = USB_SPEED_LOW; in usbredir_device_connect()
1659 dev->compatible_speedmask &= ~USB_SPEED_MASK_FULL; in usbredir_device_connect()
1660 dev->compatible_speedmask &= ~USB_SPEED_MASK_HIGH; in usbredir_device_connect()
1664 dev->dev.speed = USB_SPEED_FULL; in usbredir_device_connect()
1665 dev->compatible_speedmask &= ~USB_SPEED_MASK_HIGH; in usbredir_device_connect()
1669 dev->dev.speed = USB_SPEED_HIGH; in usbredir_device_connect()
1673 dev->dev.speed = USB_SPEED_SUPER; in usbredir_device_connect()
1677 dev->dev.speed = USB_SPEED_FULL; in usbredir_device_connect()
1680 if (usbredirparser_peer_has_cap(dev->parser, in usbredir_device_connect()
1695 dev->dev.speedmask = (1 << dev->dev.speed) | dev->compatible_speedmask; in usbredir_device_connect()
1696 dev->device_info = *device_connect; in usbredir_device_connect()
1698 if (usbredir_check_filter(dev)) { in usbredir_device_connect()
1704 usbredir_check_bulk_receiving(dev); in usbredir_device_connect()
1705 timer_mod(dev->attach_timer, dev->next_attach_time); in usbredir_device_connect()
1710 USBRedirDevice *dev = priv; in usbredir_device_disconnect() local
1713 timer_del(dev->attach_timer); in usbredir_device_disconnect()
1715 if (dev->dev.attached) { in usbredir_device_disconnect()
1717 usb_device_detach(&dev->dev); in usbredir_device_disconnect()
1722 dev->next_attach_time = qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 200; in usbredir_device_disconnect()
1726 usbredir_cleanup_device_queues(dev); in usbredir_device_disconnect()
1727 usbredir_init_endpoints(dev); in usbredir_device_disconnect()
1728 dev->interface_info.interface_count = NO_INTERFACE_INFO; in usbredir_device_disconnect()
1729 dev->dev.addr = 0; in usbredir_device_disconnect()
1730 dev->dev.speed = 0; in usbredir_device_disconnect()
1731 dev->compatible_speedmask = USB_SPEED_MASK_FULL | USB_SPEED_MASK_HIGH; in usbredir_device_disconnect()
1737 USBRedirDevice *dev = priv; in usbredir_interface_info() local
1739 dev->interface_info = *interface_info; in usbredir_interface_info()
1745 if (timer_pending(dev->attach_timer) || dev->dev.attached) { in usbredir_interface_info()
1746 usbredir_check_bulk_receiving(dev); in usbredir_interface_info()
1747 if (usbredir_check_filter(dev)) { in usbredir_interface_info()
1754 static void usbredir_mark_speed_incompatible(USBRedirDevice *dev, int speed) in usbredir_mark_speed_incompatible() argument
1756 dev->compatible_speedmask &= ~(1 << speed); in usbredir_mark_speed_incompatible()
1757 dev->dev.speedmask = (1 << dev->dev.speed) | dev->compatible_speedmask; in usbredir_mark_speed_incompatible()
1760 static void usbredir_set_pipeline(USBRedirDevice *dev, struct USBEndpoint *uep) in usbredir_set_pipeline() argument
1769 usbredirparser_peer_has_cap(dev->parser, in usbredir_set_pipeline()
1775 static void usbredir_setup_usb_eps(USBRedirDevice *dev) in usbredir_setup_usb_eps() argument
1781 usb_ep = I2USBEP(dev, i); in usbredir_setup_usb_eps()
1782 usb_ep->type = dev->endpoint[i].type; in usbredir_setup_usb_eps()
1783 usb_ep->ifnum = dev->endpoint[i].interface; in usbredir_setup_usb_eps()
1784 usb_ep->max_packet_size = dev->endpoint[i].max_packet_size; in usbredir_setup_usb_eps()
1785 usb_ep->max_streams = dev->endpoint[i].max_streams; in usbredir_setup_usb_eps()
1786 usbredir_set_pipeline(dev, usb_ep); in usbredir_setup_usb_eps()
1793 USBRedirDevice *dev = priv; in usbredir_ep_info() local
1796 assert(dev != NULL); in usbredir_ep_info()
1798 dev->endpoint[i].type = ep_info->type[i]; in usbredir_ep_info()
1799 dev->endpoint[i].interval = ep_info->interval[i]; in usbredir_ep_info()
1800 dev->endpoint[i].interface = ep_info->interface[i]; in usbredir_ep_info()
1801 if (usbredirparser_peer_has_cap(dev->parser, in usbredir_ep_info()
1803 dev->endpoint[i].max_packet_size = ep_info->max_packet_size[i]; in usbredir_ep_info()
1806 if (usbredirparser_peer_has_cap(dev->parser, in usbredir_ep_info()
1808 dev->endpoint[i].max_streams = ep_info->max_streams[i]; in usbredir_ep_info()
1811 switch (dev->endpoint[i].type) { in usbredir_ep_info()
1815 usbredir_mark_speed_incompatible(dev, USB_SPEED_FULL); in usbredir_ep_info()
1816 usbredir_mark_speed_incompatible(dev, USB_SPEED_HIGH); in usbredir_ep_info()
1819 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_ep_info()
1822 usbredir_mark_speed_incompatible(dev, USB_SPEED_FULL); in usbredir_ep_info()
1824 if (!usbredirparser_peer_has_cap(dev->parser, in usbredir_ep_info()
1827 usbredir_mark_speed_incompatible(dev, USB_SPEED_HIGH); in usbredir_ep_info()
1829 if (dev->endpoint[i].interval == 0) { in usbredir_ep_info()
1831 usbredir_reject_device(dev); in usbredir_ep_info()
1838 dev->endpoint[i].type, dev->endpoint[i].interface); in usbredir_ep_info()
1842 usbredir_reject_device(dev); in usbredir_ep_info()
1847 if (dev->dev.attached && in usbredir_ep_info()
1848 !(dev->dev.port->speedmask & dev->dev.speedmask)) { in usbredir_ep_info()
1851 usbredir_reject_device(dev); in usbredir_ep_info()
1854 usbredir_setup_usb_eps(dev); in usbredir_ep_info()
1855 usbredir_check_bulk_receiving(dev); in usbredir_ep_info()
1861 USBRedirDevice *dev = priv; in usbredir_configuration_status() local
1867 p = usbredir_find_packet_by_id(dev, 0, id); in usbredir_configuration_status()
1869 if (dev->dev.setup_buf[0] & USB_DIR_IN) { in usbredir_configuration_status()
1870 dev->dev.data_buf[0] = config_status->configuration; in usbredir_configuration_status()
1873 usbredir_handle_status(dev, p, config_status->status); in usbredir_configuration_status()
1874 usb_generic_async_ctrl_complete(&dev->dev, p); in usbredir_configuration_status()
1881 USBRedirDevice *dev = priv; in usbredir_alt_setting_status() local
1888 p = usbredir_find_packet_by_id(dev, 0, id); in usbredir_alt_setting_status()
1890 if (dev->dev.setup_buf[0] & USB_DIR_IN) { in usbredir_alt_setting_status()
1891 dev->dev.data_buf[0] = alt_setting_status->alt; in usbredir_alt_setting_status()
1894 usbredir_handle_status(dev, p, alt_setting_status->status); in usbredir_alt_setting_status()
1895 usb_generic_async_ctrl_complete(&dev->dev, p); in usbredir_alt_setting_status()
1902 USBRedirDevice *dev = priv; in usbredir_iso_stream_status() local
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()
1915 dev->endpoint[EP2I(ep)].iso_started = 0; in usbredir_iso_stream_status()
1923 USBRedirDevice *dev = priv; in usbredir_interrupt_receiving_status() local
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()
1937 dev->endpoint[EP2I(ep)].interrupt_started = 0; in usbredir_interrupt_receiving_status()
1945 USBRedirDevice *dev = priv; in usbredir_bulk_streams_status() local
1955 usbredir_reject_device(dev); in usbredir_bulk_streams_status()
1963 USBRedirDevice *dev = priv; in usbredir_bulk_receiving_status() local
1969 if (!dev->dev.attached || !dev->endpoint[EP2I(ep)].bulk_receiving_started) { in usbredir_bulk_receiving_status()
1975 dev->endpoint[EP2I(ep)].bulk_receiving_started = 0; in usbredir_bulk_receiving_status()
1983 USBRedirDevice *dev = priv; in usbredir_control_packet() local
1992 if (dev->dev.speed == USB_SPEED_SUPER && in usbredir_control_packet()
1993 !((dev->dev.port->speedmask & USB_SPEED_MASK_SUPER)) && in usbredir_control_packet()
2001 p = usbredir_find_packet_by_id(dev, 0, id); in usbredir_control_packet()
2003 usbredir_handle_status(dev, p, control_packet->status); in usbredir_control_packet()
2005 usbredir_log_data(dev, "ctrl data in:", data, data_len); in usbredir_control_packet()
2006 if (data_len > sizeof(dev->dev.data_buf)) { in usbredir_control_packet()
2008 data_len, sizeof(dev->dev.data_buf)); in usbredir_control_packet()
2010 data_len = len = sizeof(dev->dev.data_buf); in usbredir_control_packet()
2012 memcpy(dev->dev.data_buf, data, data_len); in usbredir_control_packet()
2020 if (dev->suppress_remote_wake && in usbredir_control_packet()
2026 len > 7 && (dev->dev.data_buf[7] & USB_CFG_ATT_WAKEUP)) { in usbredir_control_packet()
2028 dev->device_info.vendor_id, in usbredir_control_packet()
2029 dev->device_info.product_id); in usbredir_control_packet()
2030 dev->dev.data_buf[7] &= ~USB_CFG_ATT_WAKEUP; in usbredir_control_packet()
2032 usb_generic_async_ctrl_complete(&dev->dev, p); in usbredir_control_packet()
2041 USBRedirDevice *dev = priv; in usbredir_bulk_packet() local
2049 p = usbredir_find_packet_by_id(dev, ep, id); in usbredir_bulk_packet()
2052 usbredir_handle_status(dev, p, bulk_packet->status); in usbredir_bulk_packet()
2054 usbredir_log_data(dev, "bulk data in:", data, data_len); in usbredir_bulk_packet()
2065 usb_combined_input_packet_complete(&dev->dev, p); in usbredir_bulk_packet()
2067 usb_packet_complete(&dev->dev, p); in usbredir_bulk_packet()
2077 USBRedirDevice *dev = priv; in usbredir_iso_packet() local
2083 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_ISOC) { in usbredir_iso_packet()
2089 if (dev->endpoint[EP2I(ep)].iso_started == 0) { in usbredir_iso_packet()
2096 bufp_alloc(dev, data, data_len, iso_packet->status, ep, data); in usbredir_iso_packet()
2103 USBRedirDevice *dev = priv; in usbredir_interrupt_packet() local
2109 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_INT) { in usbredir_interrupt_packet()
2116 if (dev->endpoint[EP2I(ep)].interrupt_started == 0) { 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()
2143 USBRedirDevice *dev = priv; in usbredir_buffered_bulk_packet() local
2151 if (dev->endpoint[EP2I(ep)].type != USB_ENDPOINT_XFER_BULK) { in usbredir_buffered_bulk_packet()
2157 if (dev->endpoint[EP2I(ep)].bulk_receiving_started == 0) { 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()
2185 usb_packet_complete(&dev->dev, p); in usbredir_buffered_bulk_packet()
2195 USBRedirDevice *dev = priv; in usbredir_pre_save() local
2197 usbredir_fill_already_in_flight(dev); in usbredir_pre_save()
2204 USBRedirDevice *dev = priv; in usbredir_post_load() local
2206 if (dev == NULL || dev->parser == NULL) { in usbredir_post_load()
2210 switch (dev->device_info.speed) { in usbredir_post_load()
2212 dev->dev.speed = USB_SPEED_LOW; in usbredir_post_load()
2215 dev->dev.speed = USB_SPEED_FULL; in usbredir_post_load()
2218 dev->dev.speed = USB_SPEED_HIGH; in usbredir_post_load()
2221 dev->dev.speed = USB_SPEED_SUPER; in usbredir_post_load()
2224 dev->dev.speed = USB_SPEED_FULL; in usbredir_post_load()
2226 dev->dev.speedmask = (1 << dev->dev.speed); in usbredir_post_load()
2228 usbredir_setup_usb_eps(dev); in usbredir_post_load()
2229 usbredir_check_bulk_receiving(dev); in usbredir_post_load()
2238 USBRedirDevice *dev = priv; in usbredir_put_parser() local
2242 if (dev->parser == NULL) { in usbredir_put_parser()
2247 usbredirparser_serialize(dev->parser, &data, &len); in usbredir_put_parser()
2264 USBRedirDevice *dev = priv; in usbredir_get_parser() local
2281 if (dev->parser == NULL) { in usbredir_get_parser()
2283 usbredir_create_parser(dev); in usbredir_get_parser()
2284 qemu_bh_schedule(dev->chardev_close_bh); in usbredir_get_parser()
2290 ret = usbredirparser_unserialize(dev->parser, data, len); in usbredir_get_parser()
2309 USBRedirDevice *dev = endp->dev; in usbredir_put_bufpq() local
2332 USBRedirDevice *dev = endp->dev; in usbredir_get_bufpq() local
2441 USBRedirDevice *dev = q->dev; in usbredir_put_packet_id_q() local
2460 USBRedirDevice *dev = q->dev; in usbredir_get_packet_id_q() local
2547 VMSTATE_USB_DEVICE(dev, USBRedirDevice),
2610 USBRedirDevice *dev = USB_REDIRECT(udev); in usbredir_instance_init() local
2612 device_add_bootindex_property(obj, &dev->bootindex, in usbredir_instance_init()