summaryrefslogtreecommitdiff
path: root/hw/usb/dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/usb/dump.c')
-rw-r--r--hw/usb/dump.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/hw/usb/dump.c b/hw/usb/dump.c
index 672204d9c1..26af6dff59 100644
--- a/hw/usb/dump.c
+++ b/hw/usb/dump.c
@@ -260,6 +260,8 @@ static void init_from_usbpacket(UsbDumpState *s, struct usbmon_packet *u,
}
/* int32_t - 48: Only for Interrupt and ISO */
+ /* NOTE: the value filled in here is the upper bound, the OS determines the
+ * actual value. */
u->interval = get_ep_interval(p->ep);
/* int32_t - 52: For ISO */
@@ -290,7 +292,8 @@ void usb_dump_submit(UsbDumpState *s, const USBPacket *p)
}
if (ep_type == USB_ENDPOINT_XFER_CONTROL) {
- // cannot get called for OUT
+ /* PID is IN because this is the status stage for OUT, it cannot get
+ * called for OUT (that would be the data packet themselves) */
assert(pid == USB_TOKEN_IN || pid == USB_TOKEN_SETUP);
if (pid == USB_TOKEN_IN) {
@@ -326,6 +329,7 @@ void usb_dump_complete(UsbDumpState *s, const USBPacket *p)
assert(pid == USB_TOKEN_IN || pid == USB_TOKEN_SETUP);
if (pid == USB_TOKEN_SETUP) {
+ /* this was an IN request, data is now available. */
assert(dev->setup_buf[0] & USB_DIR_IN);
datalen = p->actual_length;
}
@@ -428,6 +432,9 @@ int usb_dump_init(UsbDumpState *s, const char *filename)
s->fd = fd;
s->pcap_caplen = snaplen;
+ // FIXME: timing is incorrect, this should be set to the start time of the
+ // host, not the current time. Otherwise the clock is completely off when
+ // adding a device in the monitor.
s->start_ts = qemu_clock_get_us(QEMU_CLOCK_HOST);
return 0;