summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2012-08-28 09:43:18 +0200
committerHans de Goede <hdegoede@redhat.com>2012-08-29 10:51:26 +0200
commite5b5df4e37ae7285f58d4879524d6fe240fbacf3 (patch)
tree2da582a80b3f4c342df05bd7f38aade22d738d32
parentd12852b812323e58abb4a3d5d67bd9e3d3577454 (diff)
usb-core: Add a usb_ep_find_packet_by_id() helper function
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-rw-r--r--hw/usb.h2
-rw-r--r--hw/usb/core.c14
2 files changed, 16 insertions, 0 deletions
diff --git a/hw/usb.h b/hw/usb.h
index b8fceec89..684e3f4b5 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -377,6 +377,8 @@ void usb_ep_set_max_packet_size(USBDevice *dev, int pid, int ep,
uint16_t raw);
int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int ep);
void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled);
+USBPacket *usb_ep_find_packet_by_id(USBDevice *dev, int pid, int ep,
+ uint64_t id);
void usb_attach(USBPort *port);
void usb_detach(USBPort *port);
diff --git a/hw/usb/core.c b/hw/usb/core.c
index 2da38e7fd..981ee9aff 100644
--- a/hw/usb/core.c
+++ b/hw/usb/core.c
@@ -724,3 +724,17 @@ void usb_ep_set_pipeline(USBDevice *dev, int pid, int ep, bool enabled)
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
uep->pipeline = enabled;
}
+
+USBPacket *usb_ep_find_packet_by_id(USBDevice *dev, int pid, int ep,
+ uint64_t id)
+{
+ struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
+ USBPacket *p;
+
+ while ((p = QTAILQ_FIRST(&uep->queue)) != NULL) {
+ if (p->id == id)
+ return p;
+ }
+
+ return NULL;
+}