qemu/hw/usb
Jakub Jelen 8030dca376 hw/usb/dev-smartcard-reader: Handle 64 B USB packets
The current code was not correctly handling 64 B (Max USB 1.1 payload size)
packets and therefore preventing some of the messages from smart card to
pass through to the guest.

If the smart card in host responded with 34 B of data in APDU layer, the
CCID headers added up to 64 B. The packet was send, but not correctly
committed per USB specification (8.5.3.2  Variable-length Data Stage):

>   When all of the data structure is returned to the host, the function
> should indicate that the Data stage is ended by returning a packet
> that is shorter than the MaxPacketSize for the pipe.  If the data
> structure is an exact multiple of wMaxPacketSize for the pipe, the
> function will return a zero-length packet to indicate the end of the
> Data stage.

This lead the guest applications to timeout while waiting for the rest
of data (the emulation layer is answering with NAK until the timeout).

This patch is checking the current maximum packet size and if the
payload of this size is detected, the message buffer is not yet released.
With the next call, the empty buffer is sent and the message buffer
is finally released.

Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Message-id: 20180516115544.3897-2-jjelen@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2018-05-18 09:42:16 +02:00
..
bus.c hmp-commands: Remove the deprecated usb_add and usb_del 2017-12-14 10:16:52 +00:00
ccid-card-emulated.c ccid-card: include libcacard.h only 2018-04-27 10:57:09 +02:00
ccid-card-passthru.c ccid-card-passthru: fix regression in realize() 2018-05-18 09:41:17 +02:00
ccid.h usb-ccid: convert CCIDCardClass::exitfn() -> unrealize() 2018-01-26 07:59:33 +01:00
chipidea.c usb: Add basic code to emulate Chipidea USB IP 2018-02-09 10:40:30 +00:00
combined-packet.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
core.c usb: don't wakeup during coldplug 2017-05-29 14:18:09 +02:00
desc-msos.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
desc.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
desc.h all: Clean up includes 2016-02-23 12:43:05 +00:00
dev-audio.c usb: replace handle_destroy with unrealize 2017-02-23 15:40:19 +01:00
dev-bluetooth.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
dev-hid.c usb: replace handle_destroy with unrealize 2017-02-23 15:40:19 +01:00
dev-hub.c usb-hub: use DIV_ROUND_UP 2017-08-31 12:29:07 +02:00
dev-mtp.c usb-mtp: Unconditionally check for the readonly bit 2018-05-07 11:10:25 +02:00
dev-network.c usb: Remove legacy -usbdevice options (host, serial, disk and net) 2018-01-26 07:15:08 +01:00
dev-serial.c usb: Remove legacy -usbdevice options (host, serial, disk and net) 2018-01-26 07:15:08 +01:00
dev-smartcard-reader.c hw/usb/dev-smartcard-reader: Handle 64 B USB packets 2018-05-18 09:42:16 +02:00
dev-storage.c usb-storage: Fix share-rw option parsing 2018-01-26 07:58:34 +01:00
dev-uas.c scsi: move block/scsi.h to include/scsi/constants.h 2017-09-19 14:09:31 +02:00
dev-wacom.c usb: replace handle_destroy with unrealize 2017-02-23 15:40:19 +01:00
hcd-ehci-pci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-ehci-sysbus.c ehci: Add ppc4xx-ehci for the USB 2.0 controller in embedded PPC SoCs 2017-09-27 13:05:41 +10:00
hcd-ehci.c migration: pre_save return int 2017-09-27 11:35:59 +01:00
hcd-ehci.h ehci: Add ppc4xx-ehci for the USB 2.0 controller in embedded PPC SoCs 2017-09-27 13:05:41 +10:00
hcd-musb.c Replace all occurances of __FUNCTION__ with __func__ 2018-01-22 09:46:18 +01:00
hcd-ohci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-uhci.c pci: Add INTERFACE_CONVENTIONAL_PCI_DEVICE to Conventional PCI devices 2017-10-15 05:54:43 +03:00
hcd-xhci-nec.c xhci: split into multiple files 2017-05-29 14:03:35 +02:00
hcd-xhci.c pci: removed the is_express field since a uniform interface was inserted 2018-02-08 21:06:41 +02:00
hcd-xhci.h xhci: split into multiple files 2017-05-29 14:03:35 +02:00
host-libusb.c usb-host: skip open on pending postload bh 2018-05-07 11:10:42 +02:00
host-stub.c usb: Remove legacy -usbdevice options (host, serial, disk and net) 2018-01-26 07:15:08 +01:00
host.h usb-host: move legacy cmd line bits 2013-02-19 12:30:05 +01:00
libhw.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
Makefile.objs usb: Add basic code to emulate Chipidea USB IP 2018-02-09 10:40:30 +00:00
quirks-ftdi-ids.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
quirks-pl2303-ids.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
quirks.c usb: Clean up includes 2016-01-29 15:07:23 +00:00
quirks.h usbredir: Add support for buffered bulk input (v2) 2013-01-08 10:56:58 +01:00
redirect.c usbredir: reorder fields in USBRedirDevice to reduce padding 2018-03-12 11:43:49 +01:00
trace-events trace-events: fix code style: print 0x before hex numbers 2017-08-01 12:13:07 +01:00
tusb6010.c hw/usb/tusb6010: Convert away from old_mmio 2018-05-04 18:05:50 +01:00
xen-usb.c qobject: Replace qobject_incref/QINCREF qobject_decref/QDECREF 2018-05-04 08:27:53 +02:00