summaryrefslogtreecommitdiffstats
path: root/src/drivers/usb/xhci.c
diff options
context:
space:
mode:
authorMichael Brown2015-09-13 01:49:56 +0200
committerMichael Brown2015-09-13 13:54:30 +0200
commitf9e192605c7095497438398c2653ede3c78ebe1b (patch)
tree10ee45b16836a8e4bebbce1eb0d506bb98d29620 /src/drivers/usb/xhci.c
parent[tcpip] Avoid generating positive zero for transmitted UDP checksums (diff)
downloadipxe-f9e192605c7095497438398c2653ede3c78ebe1b.tar.gz
ipxe-f9e192605c7095497438398c2653ede3c78ebe1b.tar.xz
ipxe-f9e192605c7095497438398c2653ede3c78ebe1b.zip
[usb] Generalise zero-length packet generation logic
The decision on whether or not a zero-length packet needs to be transmitted is independent of the host controller and belongs in the USB core. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/usb/xhci.c')
-rw-r--r--src/drivers/usb/xhci.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/drivers/usb/xhci.c b/src/drivers/usb/xhci.c
index 49e67316..f0f8eb1d 100644
--- a/src/drivers/usb/xhci.c
+++ b/src/drivers/usb/xhci.c
@@ -2546,11 +2546,11 @@ static int xhci_endpoint_message ( struct usb_endpoint *ep,
*
* @v ep USB endpoint
* @v iobuf I/O buffer
- * @v terminate Terminate using a short packet
+ * @v zlp Append a zero-length packet
* @ret rc Return status code
*/
static int xhci_endpoint_stream ( struct usb_endpoint *ep,
- struct io_buffer *iobuf, int terminate ) {
+ struct io_buffer *iobuf, int zlp ) {
struct xhci_endpoint *endpoint = usb_endpoint_get_hostdata ( ep );
union xhci_trb trbs[ 1 /* Normal */ + 1 /* Possible zero-length */ ];
union xhci_trb *trb = trbs;
@@ -2567,7 +2567,7 @@ static int xhci_endpoint_stream ( struct usb_endpoint *ep,
normal->data = cpu_to_le64 ( virt_to_phys ( iobuf->data ) );
normal->len = cpu_to_le32 ( len );
normal->type = XHCI_TRB_NORMAL;
- if ( terminate && ( ( len & ( ep->mtu - 1 ) ) == 0 ) ) {
+ if ( zlp ) {
normal->flags = XHCI_TRB_CH;
normal = &(trb++)->normal;
normal->type = XHCI_TRB_NORMAL;