aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/net/ncm.c
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2015-02-10 13:45:57 +0000
committerMichael Brown <mcb30@ipxe.org>2015-02-10 13:49:27 +0000
commit58c3e7f74771dd4748983cc47ed53241ac1864f1 (patch)
treee5baedb5b58a1abadf5ea3811fa66e87d14d40d7 /src/drivers/net/ncm.c
parent17aceb34da3bad166cab8579a3616806fff8e05b (diff)
downloadipxe-58c3e7f74771dd4748983cc47ed53241ac1864f1.tar.gz
[usb] Allow usb_stream() to enforce a terminating short packet
Some USB endpoints require that a short packet be used to terminate transfers, since they have no other way to determine message boundaries. If the message length happens to be an exact multiple of the USB packet size, then this requires the use of an additional zero-length packet. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/drivers/net/ncm.c')
-rw-r--r--src/drivers/net/ncm.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/drivers/net/ncm.c b/src/drivers/net/ncm.c
index 0fc3ab794..e05559bb8 100644
--- a/src/drivers/net/ncm.c
+++ b/src/drivers/net/ncm.c
@@ -145,7 +145,7 @@ static int ncm_rx_refill ( struct ncm_device *ncm, struct ncm_rx_ring *ring ) {
iob_put ( iobuf, ( ring->mtu - iob_len ( iobuf ) ) );
/* Enqueue I/O buffer */
- if ( ( rc = usb_stream ( &ring->ep, iobuf ) ) != 0 ) {
+ if ( ( rc = usb_stream ( &ring->ep, iobuf, 0 ) ) != 0 ) {
DBGC ( ncm, "NCM %p could not enqueue %s: %s\n", ncm,
ncm_rx_name ( ncm, ring ), strerror ( rc ) );
/* Leave in recycled list and wait for next refill */
@@ -548,7 +548,7 @@ static int ncm_out_transmit ( struct ncm_device *ncm,
memset ( &header->desc[1], 0, sizeof ( header->desc[1] ) );
/* Enqueue I/O buffer */
- if ( ( rc = usb_stream ( &ncm->out.ep, iobuf ) ) != 0 )
+ if ( ( rc = usb_stream ( &ncm->out.ep, iobuf, 0 ) ) != 0 )
return rc;
/* Increment sequence number */