diff options
author | Hans de Goede <hdegoede@redhat.com> | 2012-10-24 18:14:09 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2012-10-25 09:08:10 +0200 |
commit | 6ba43f1f6b60159e731b1f37ffb53ab9ab59efa9 (patch) | |
tree | 50aa334531fbd3b720da7d2dd78eab7453304250 /hw/usb.h | |
parent | 0cae7b1a004d6857e3bde3d511d7efa39d3cb48a (diff) | |
download | qemu-6ba43f1f6b60159e731b1f37ffb53ab9ab59efa9.zip qemu-6ba43f1f6b60159e731b1f37ffb53ab9ab59efa9.tar.gz qemu-6ba43f1f6b60159e731b1f37ffb53ab9ab59efa9.tar.bz2 |
usb: Move short-not-ok handling to the core
After a short-not-ok packet ending short, we should not advance the queue.
Move enforcing this to the core, rather then handling it in the hcd code.
This may result in the queue now actually containing multiple input packets
(which would not happen before), and this requires special handling in
combination with pipelining, so disable pipleining for input endpoints
(for now).
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb.h')
-rw-r--r-- | hw/usb.h | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -351,6 +351,7 @@ struct USBPacket { USBEndpoint *ep; QEMUIOVector iov; uint64_t parameter; /* control transfers */ + bool short_not_ok; int result; /* transfer length or USB_RET_* status code */ /* Internal use by the USB layer. */ USBPacketState state; @@ -360,7 +361,8 @@ struct USBPacket { void usb_packet_init(USBPacket *p); void usb_packet_set_state(USBPacket *p, USBPacketState state); void usb_packet_check_state(USBPacket *p, USBPacketState expected); -void usb_packet_setup(USBPacket *p, int pid, USBEndpoint *ep, uint64_t id); +void usb_packet_setup(USBPacket *p, int pid, USBEndpoint *ep, uint64_t id, + bool short_not_ok); void usb_packet_addbuf(USBPacket *p, void *ptr, size_t len); int usb_packet_map(USBPacket *p, QEMUSGList *sgl); void usb_packet_unmap(USBPacket *p, QEMUSGList *sgl); |