diff options
| author | Gerd Hoffmann <kraxel@redhat.com> | 2012-08-23 13:30:13 +0200 |
|---|---|---|
| committer | Gerd Hoffmann <kraxel@redhat.com> | 2012-08-31 11:57:23 +0200 |
| commit | e983395d30d1d5bfa0ed3ae9c028c130f7c498cc (patch) | |
| tree | 6377ecd839a30655f4a78eee1db5aec531804da7 /hw/usb/core.c | |
| parent | 0132b4b6595423c92f54d7e0b172b5d73aaa8375 (diff) | |
| download | focaccia-qemu-e983395d30d1d5bfa0ed3ae9c028c130f7c498cc.tar.gz focaccia-qemu-e983395d30d1d5bfa0ed3ae9c028c130f7c498cc.zip | |
usb: unique packet ids
This patch adds IDs to usb packets. Those IDs are (a) supposed to be unique for the lifecycle of a packet (from packet setup until the packet is either completed or canceled) and (b) stable across migration. uhci, ohci, ehci and xhci use the guest physical address of the transfer descriptor for this. musb needs a different approach because there is no transfer descriptor. But musb also doesn't support pipelining, so we have never more than one packet per endpoint in flight. So we go create an ID based on endpoint and device address. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb/core.c')
| -rw-r--r-- | hw/usb/core.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/hw/usb/core.c b/hw/usb/core.c index 28b840e52d..2da38e7fd0 100644 --- a/hw/usb/core.c +++ b/hw/usb/core.c @@ -520,10 +520,11 @@ void usb_packet_set_state(USBPacket *p, USBPacketState state) p->state = state; } -void usb_packet_setup(USBPacket *p, int pid, USBEndpoint *ep) +void usb_packet_setup(USBPacket *p, int pid, USBEndpoint *ep, uint64_t id) { assert(!usb_packet_is_inflight(p)); assert(p->iov.iov != NULL); + p->id = id; p->pid = pid; p->ep = ep; p->result = 0; |