Index: uspace/lib/usb/include/usb/host/endpoint.h
===================================================================
--- uspace/lib/usb/include/usb/host/endpoint.h	(revision a82889e4e6ee60d20cce9b88169a48cb3e6b1a04)
+++ uspace/lib/usb/include/usb/host/endpoint.h	(revision 6a32665dcadd5b1be567dad953c6c8ad45104b65)
@@ -39,4 +39,6 @@
 #include <bool.h>
 #include <adt/list.h>
+#include <fibril_synch.h>
+
 #include <usb/usb.h>
 
@@ -48,6 +50,8 @@
 	usb_speed_t speed;
 	size_t max_packet_size;
+	unsigned toggle:1;
+	fibril_mutex_t guard;
+	fibril_condvar_t avail;
 	bool active;
-	unsigned toggle:1;
 	link_t same_device_eps;
 } endpoint_t;
@@ -58,4 +62,8 @@
 
 void endpoint_destroy(endpoint_t *instance);
+
+void endpoint_use(endpoint_t *instance);
+
+void endpoint_release(endpoint_t *instance);
 
 int endpoint_toggle_get(endpoint_t *instance);
Index: uspace/lib/usb/src/host/endpoint.c
===================================================================
--- uspace/lib/usb/src/host/endpoint.c	(revision a82889e4e6ee60d20cce9b88169a48cb3e6b1a04)
+++ uspace/lib/usb/src/host/endpoint.c	(revision 6a32665dcadd5b1be567dad953c6c8ad45104b65)
@@ -34,4 +34,5 @@
  */
 
+#include <assert.h>
 #include <errno.h>
 #include <usb/host/endpoint.h>
@@ -49,4 +50,7 @@
 	instance->max_packet_size = max_packet_size;
 	instance->toggle = 0;
+	instance->active = false;
+	fibril_mutex_initialize(&instance->guard);
+	fibril_condvar_initialize(&instance->avail);
 	link_initialize(&instance->same_device_eps);
 	return EOK;
@@ -58,4 +62,23 @@
 	list_remove(&instance->same_device_eps);
 	free(instance);
+}
+/*----------------------------------------------------------------------------*/
+void endpoint_use(endpoint_t *instance)
+{
+	assert(instance);
+	fibril_mutex_lock(&instance->guard);
+	while (instance->active)
+		fibril_condvar_wait(&instance->avail, &instance->guard);
+	instance->active = true;
+	fibril_mutex_unlock(&instance->guard);
+}
+/*----------------------------------------------------------------------------*/
+void endpoint_release(endpoint_t *instance)
+{
+	assert(instance);
+	fibril_mutex_lock(&instance->guard);
+	instance->active = false;
+	fibril_condvar_signal(&instance->avail);
+	fibril_mutex_unlock(&instance->guard);
 }
 /*----------------------------------------------------------------------------*/
