Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision c21e6a5172262a245f7e805a5cb9885ee65024b4)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision af16ebece2cb3bc7592cffdd6e1a6da6698dc8db)
@@ -92,7 +92,4 @@
 			ep->max_transfer_size = ep->max_packet_size * ep->packets_per_uframe;
 		}
-		else {
-			ep->max_transfer_size = 200 * PAGE_SIZE;
-		}
 	}
 
Index: uspace/drv/bus/usb/xhci/trb_ring.c
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.c	(revision c21e6a5172262a245f7e805a5cb9885ee65024b4)
+++ uspace/drv/bus/usb/xhci/trb_ring.c	(revision af16ebece2cb3bc7592cffdd6e1a6da6698dc8db)
@@ -223,4 +223,8 @@
 	errno_t err;
 	assert(trbs > 0);
+
+	if (trbs > xhci_trb_ring_size(ring))
+		return ELIMIT;
+
 	fibril_mutex_lock(&ring->guard);
 
@@ -309,4 +313,9 @@
 }
 
+size_t xhci_trb_ring_size(xhci_trb_ring_t *ring)
+{
+	return ring->segment_count * SEGMENT_TRB_USEFUL_COUNT;
+}
+
 /**
  * Initializes an event ring.
Index: uspace/drv/bus/usb/xhci/trb_ring.h
===================================================================
--- uspace/drv/bus/usb/xhci/trb_ring.h	(revision c21e6a5172262a245f7e805a5cb9885ee65024b4)
+++ uspace/drv/bus/usb/xhci/trb_ring.h	(revision af16ebece2cb3bc7592cffdd6e1a6da6698dc8db)
@@ -78,4 +78,5 @@
 extern errno_t xhci_trb_ring_enqueue(xhci_trb_ring_t *, xhci_trb_t *, uintptr_t *);
 extern errno_t xhci_trb_ring_enqueue_multiple(xhci_trb_ring_t *, xhci_trb_t *, size_t, uintptr_t *);
+extern size_t xhci_trb_ring_size(xhci_trb_ring_t *);
 
 extern void xhci_trb_ring_reset_dequeue_state(xhci_trb_ring_t *ring, uintptr_t *addr);
