Index: uspace/lib/drv/include/usb_iface.h
===================================================================
--- uspace/lib/drv/include/usb_iface.h	(revision c90163262531a9d6fd0787466623f8e3732fd826)
+++ uspace/lib/drv/include/usb_iface.h	(revision dfa1fc89908768ada2f867e2261572377b56e1e8)
@@ -100,38 +100,4 @@
 } usb_target_t;
 
-/** Description of an usb endpoint.
- */
-typedef struct {
-	unsigned max_burst;
-	unsigned max_streams;
-	unsigned mult;
-	unsigned bytes_per_interval;
-} usb3_endpoint_desc_t;
-
-typedef struct usb_endpoint_desc {
-	/** Endpoint number. */
-	usb_endpoint_t endpoint_no;
-
-	/** Endpoint transfer type. */
-	usb_transfer_type_t transfer_type;
-
-	/** Endpoint direction. */
-	usb_direction_t direction;
-
-	/** Maximum packet size for the endpoint. */
-	size_t max_packet_size;
-
-	/** Scheduling interval for HC. Only valid for interrupt/isoch transfer. */
-	size_t interval;
-
-	/** Number of packets per frame/uframe.
-	 * Only valid for HS INT and ISO transfers. All others should set to 1*/
-	unsigned packets;
-
-	/** Superspeed-specific information */
-	usb3_endpoint_desc_t usb3;
-} usb_endpoint_desc_t;
-
-
 extern usb_dev_session_t *usb_dev_connect(devman_handle_t);
 extern usb_dev_session_t *usb_dev_connect_to_self(ddf_dev_t *);
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision c90163262531a9d6fd0787466623f8e3732fd826)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision dfa1fc89908768ada2f867e2261572377b56e1e8)
@@ -44,4 +44,40 @@
 #include <async.h>
 
+typedef struct usb_pipe_desc {
+	/** Endpoint number. */
+	usb_endpoint_t endpoint_no;
+
+	/** Endpoint transfer type. */
+	usb_transfer_type_t transfer_type;
+
+	/** Endpoint direction. */
+	usb_direction_t direction;
+
+	/** Maximum size of one transfer */
+	size_t max_transfer_size;
+} usb_pipe_desc_t;
+
+/** This structure follows standard endpoint descriptor + superspeed companion
+ * descriptor, and exists to avoid dependency of libdrv on libusb. Keep the
+ * internal fields named exactly like their source (because we want to use the
+ * same macros to access them).
+ * Callers shall fill it with bare contents of respective descriptors (in usb endianity).
+ */
+typedef struct {
+	struct {
+		uint8_t endpoint_address;
+		uint8_t attributes;
+		uint16_t max_packet_size;
+		uint8_t poll_interval;
+	} endpoint;
+
+	/* Superspeed companion descriptor */
+	struct companion_desc_t {
+		uint8_t max_burst;
+		uint8_t attributes;
+		uint16_t bytes_per_interval;
+	} companion;
+} usb_endpoint_descriptors_t;
+
 extern int usbhc_reserve_default_address(async_exch_t *, usb_speed_t);
 extern int usbhc_release_default_address(async_exch_t *);
@@ -50,6 +86,7 @@
 extern int usbhc_device_remove(async_exch_t *, unsigned port);
 
-extern int usbhc_register_endpoint(async_exch_t *, usb_endpoint_desc_t *);
-extern int usbhc_unregister_endpoint(async_exch_t *, usb_endpoint_desc_t *);
+extern int usbhc_register_endpoint(async_exch_t *, usb_pipe_desc_t *, const usb_endpoint_descriptors_t *);
+extern int usbhc_unregister_endpoint(async_exch_t *, const usb_pipe_desc_t *);
+
 extern int usbhc_read(async_exch_t *, usb_endpoint_t, uint64_t, void *, size_t,
     size_t *);
@@ -68,6 +105,6 @@
 	int (*device_remove)(ddf_fun_t *, unsigned);
 
-	int (*register_endpoint)(ddf_fun_t *, usb_endpoint_desc_t *);
-	int (*unregister_endpoint)(ddf_fun_t *, usb_endpoint_desc_t *);
+	int (*register_endpoint)(ddf_fun_t *, usb_pipe_desc_t *, const usb_endpoint_descriptors_t *);
+	int (*unregister_endpoint)(ddf_fun_t *, const usb_pipe_desc_t *);
 
 	int (*read)(ddf_fun_t *, usb_target_t,
