diff options
author | Michael Brown | 2015-09-13 01:49:56 +0200 |
---|---|---|
committer | Michael Brown | 2015-09-13 13:54:30 +0200 |
commit | f9e192605c7095497438398c2653ede3c78ebe1b (patch) | |
tree | 10ee45b16836a8e4bebbce1eb0d506bb98d29620 /src/drivers/usb/xhci.c | |
parent | [tcpip] Avoid generating positive zero for transmitted UDP checksums (diff) | |
download | ipxe-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.c | 6 |
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; |