[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 6/8] xhci: add & use xhci_kick_epctx()
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PATCH 6/8] xhci: add & use xhci_kick_epctx() |
Date: |
Tue, 27 Sep 2016 10:32:50 +0200 |
xhci_kick_epctx is a xhci_kick_ep variant which takes an XHCIEPContext
as input instead of slotid and epid. So in case we have a XHCIEPContext
at hand at the callsite we can just pass it directly.
Signed-off-by: Gerd Hoffmann <address@hidden>
---
hw/usb/hcd-xhci.c | 43 ++++++++++++++++++++++++++-----------------
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index da249f7..4e557c2 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -507,6 +507,7 @@ enum xhci_flags {
static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid,
unsigned int epid, unsigned int streamid);
+static void xhci_kick_epctx(XHCIEPContext *epctx, unsigned int streamid);
static TRBCCode xhci_disable_ep(XHCIState *xhci, unsigned int slotid,
unsigned int epid);
static void xhci_xfer_report(XHCITransfer *xfer);
@@ -1352,7 +1353,7 @@ static void xhci_set_ep_state(XHCIState *xhci,
XHCIEPContext *epctx,
static void xhci_ep_kick_timer(void *opaque)
{
XHCIEPContext *epctx = opaque;
- xhci_kick_ep(epctx->xhci, epctx->slotid, epctx->epid, 0);
+ xhci_kick_epctx(epctx, 0);
}
static XHCIEPContext *xhci_alloc_epctx(XHCIState *xhci,
@@ -1998,7 +1999,7 @@ static int xhci_fire_ctl_transfer(XHCIState *xhci,
XHCITransfer *xfer)
xhci_complete_packet(xfer);
if (!xfer->running_async && !xfer->running_retry) {
- xhci_kick_ep(xhci, xfer->slotid, xfer->epid, 0);
+ xhci_kick_epctx(xfer->epctx, 0);
}
return 0;
}
@@ -2102,7 +2103,7 @@ static int xhci_submit(XHCIState *xhci, XHCITransfer
*xfer, XHCIEPContext *epctx
xhci_complete_packet(xfer);
if (!xfer->running_async && !xfer->running_retry) {
- xhci_kick_ep(xhci, xfer->slotid, xfer->epid, xfer->streamid);
+ xhci_kick_epctx(xfer->epctx, xfer->streamid);
}
return 0;
}
@@ -2116,16 +2117,8 @@ static int xhci_fire_transfer(XHCIState *xhci,
XHCITransfer *xfer, XHCIEPContext
static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid,
unsigned int epid, unsigned int streamid)
{
- XHCIStreamContext *stctx;
XHCIEPContext *epctx;
- XHCITransfer *xfer;
- XHCIRing *ring;
- USBEndpoint *ep = NULL;
- uint64_t mfindex;
- int length;
- int i;
- trace_usb_xhci_ep_kick(slotid, epid, streamid);
assert(slotid >= 1 && slotid <= xhci->numslots);
assert(epid >= 1 && epid <= 31);
@@ -2140,11 +2133,27 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int
slotid,
return;
}
+ xhci_kick_epctx(epctx, streamid);
+}
+
+static void xhci_kick_epctx(XHCIEPContext *epctx, unsigned int streamid)
+{
+ XHCIState *xhci = epctx->xhci;
+ XHCIStreamContext *stctx;
+ XHCITransfer *xfer;
+ XHCIRing *ring;
+ USBEndpoint *ep = NULL;
+ uint64_t mfindex;
+ int length;
+ int i;
+
+ trace_usb_xhci_ep_kick(epctx->slotid, epctx->epid, streamid);
+
/* If the device has been detached, but the guest has not noticed this
yet the 2 above checks will succeed, but we must NOT continue */
- if (!xhci->slots[slotid - 1].uport ||
- !xhci->slots[slotid - 1].uport->dev ||
- !xhci->slots[slotid - 1].uport->dev->attached) {
+ if (!xhci->slots[epctx->slotid - 1].uport ||
+ !xhci->slots[epctx->slotid - 1].uport->dev ||
+ !xhci->slots[epctx->slotid - 1].uport->dev->attached) {
return;
}
@@ -2225,7 +2234,7 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int
slotid,
}
xfer->streamid = streamid;
- if (epid == 1) {
+ if (epctx->epid == 1) {
xhci_fire_ctl_transfer(xhci, xfer);
} else {
xhci_fire_transfer(xhci, xfer, epctx);
@@ -2245,7 +2254,7 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int
slotid,
}
}
- ep = xhci_epid_to_usbep(xhci, slotid, epid);
+ ep = xhci_epid_to_usbep(xhci, epctx->slotid, epctx->epid);
if (ep) {
usb_device_flush_ep_queue(ep->dev, ep);
}
@@ -3476,7 +3485,7 @@ static void xhci_complete(USBPort *port, USBPacket
*packet)
return;
}
xhci_complete_packet(xfer);
- xhci_kick_ep(xfer->epctx->xhci, xfer->slotid, xfer->epid, xfer->streamid);
+ xhci_kick_epctx(xfer->epctx, xfer->streamid);
if (xfer->complete) {
xhci_ep_free_xfer(xfer);
}
--
1.8.3.1
- [Qemu-devel] [PATCH 0/8] xhci: stream transfer fixes, cleanups, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 3/8] xhci: drop unused comp_xfer field, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 2/8] xhci: decouple EV_QUEUE from TD_QUEUE, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 5/8] xhci: drop XHCITransfer->xhci, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 7/8] xhci: drop XHCITransfer->{slotid,epid}, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 1/8] [debug] uas: use 32 streams, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 8/8] xhci: make xhci_epid_to_usbep accept XHCIEPContext, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 4/8] xhci: use linked list for transfers, Gerd Hoffmann, 2016/09/27
- [Qemu-devel] [PATCH 6/8] xhci: add & use xhci_kick_epctx(),
Gerd Hoffmann <=