[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 16/20] usb: add pipelining option to usb endpoints
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 16/20] usb: add pipelining option to usb endpoints |
Date: |
Wed, 7 Mar 2012 14:05:16 +0100 |
With this patch applied USB drivers can enable pipelining per endpoint.
With pipelining enabled the usb core will continue submitting packets
even when there are still async transfers in flight instead of passing
them on one by one.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb.c | 11 ++++++++++-
hw/usb.h | 2 ++
2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/hw/usb.c b/hw/usb.c
index fc41d62..800d912 100644
--- a/hw/usb.c
+++ b/hw/usb.c
@@ -323,7 +323,7 @@ int usb_handle_packet(USBDevice *dev, USBPacket *p)
assert(p->state == USB_PACKET_SETUP);
assert(p->ep != NULL);
- if (QTAILQ_EMPTY(&p->ep->queue)) {
+ if (QTAILQ_EMPTY(&p->ep->queue) || p->ep->pipeline) {
ret = usb_process_one(p);
if (ret == USB_RET_ASYNC) {
usb_packet_set_state(p, USB_PACKET_ASYNC);
@@ -468,6 +468,7 @@ void usb_ep_init(USBDevice *dev)
dev->ep_ctl.type = USB_ENDPOINT_XFER_CONTROL;
dev->ep_ctl.ifnum = 0;
dev->ep_ctl.dev = dev;
+ dev->ep_ctl.pipeline = false;
QTAILQ_INIT(&dev->ep_ctl.queue);
for (ep = 0; ep < USB_MAX_ENDPOINTS; ep++) {
dev->ep_in[ep].nr = ep + 1;
@@ -480,6 +481,8 @@ void usb_ep_init(USBDevice *dev)
dev->ep_out[ep].ifnum = 0;
dev->ep_in[ep].dev = dev;
dev->ep_out[ep].dev = dev;
+ dev->ep_in[ep].pipeline = false;
+ dev->ep_out[ep].pipeline = false;
QTAILQ_INIT(&dev->ep_in[ep].queue);
QTAILQ_INIT(&dev->ep_out[ep].queue);
}
@@ -593,3 +596,9 @@ int usb_ep_get_max_packet_size(USBDevice *dev, int pid, int
ep)
struct USBEndpoint *uep = usb_ep_get(dev, pid, ep);
return uep->max_packet_size;
}
+
+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;
+}
diff --git a/hw/usb.h b/hw/usb.h
index 1a30ebb..f6df0ad 100644
--- a/hw/usb.h
+++ b/hw/usb.h
@@ -177,6 +177,7 @@ struct USBEndpoint {
uint8_t type;
uint8_t ifnum;
int max_packet_size;
+ bool pipeline;
USBDevice *dev;
QTAILQ_HEAD(, USBPacket) queue;
};
@@ -364,6 +365,7 @@ void usb_ep_set_ifnum(USBDevice *dev, int pid, int ep,
uint8_t ifnum);
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);
void usb_attach(USBPort *port);
void usb_detach(USBPort *port);
--
1.7.1
- [Qemu-devel] [PATCH 08/20] usb-ehci: Fix cerr tracking, (continued)
- [Qemu-devel] [PATCH 08/20] usb-ehci: Fix cerr tracking, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 20/20] xhci: fix port status, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 10/20] usb-ehci: Fix and simplify nakcnt handling, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 14/20] uhci_fill_queue: zap debug printf, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 07/20] usb-ehci: Any packet completion except for NAK should set the interrupt, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 09/20] usb-ehci: Remove dead nakcnt code, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 17/20] usb-host: enable pipelineing for bulk endpoints., Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 02/20] usb-ehci: Never follow table entries with the T-bit set, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 11/20] usb-ehci: Cleanup itd error handling, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 18/20] usb: add shortcut for control transfers, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 16/20] usb: add pipelining option to usb endpoints,
Gerd Hoffmann <=
- [Qemu-devel] [PATCH 06/20] usb-ehci: Rip the queues when the async or period schedule is halted, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 19/20] xhci: fix control xfers, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 15/20] usb: queue can have async packets, Gerd Hoffmann, 2012/03/07
- [Qemu-devel] [PATCH 01/20] usb-redir: Set ep type and interface, Gerd Hoffmann, 2012/03/07
- Re: [Qemu-devel] [PULL 00/20] usb patch queue, Anthony Liguori, 2012/03/09