Index: uspace/lib/drv/generic/remote_usb.c
===================================================================
--- uspace/lib/drv/generic/remote_usb.c	(revision b68b27909054c76dc019f8747e5deced7215822a)
+++ uspace/lib/drv/generic/remote_usb.c	(revision 95120c34f60b564aa35d9c46f9bca43e98681681)
@@ -40,6 +40,7 @@
 
 
+static void remote_usb_get_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usb_get_interface(device_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usb_get_hc_handle(device_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usb_get_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
 //static void remote_usb(device_t *, void *, ipc_callid_t, ipc_call_t *);
 
@@ -47,4 +48,5 @@
 static remote_iface_func_ptr_t remote_usb_iface_ops [] = {
 	remote_usb_get_address,
+	remote_usb_get_interface,
 	remote_usb_get_hc_handle
 };
@@ -80,4 +82,24 @@
 }
 
+void remote_usb_get_interface(device_t *device, void *iface,
+    ipc_callid_t callid, ipc_call_t *call)
+{
+	usb_iface_t *usb_iface = (usb_iface_t *) iface;
+
+	if (usb_iface->get_interface == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	devman_handle_t handle = DEV_IPC_GET_ARG1(*call);
+
+	int iface_no;
+	int rc = usb_iface->get_interface(device, handle, &iface_no);
+	if (rc != EOK) {
+		async_answer_0(callid, rc);
+	} else {
+		async_answer_1(callid, EOK, iface_no);
+	}
+}
 
 void remote_usb_get_hc_handle(device_t *device, void *iface,
Index: uspace/lib/drv/include/usb_iface.h
===================================================================
--- uspace/lib/drv/include/usb_iface.h	(revision b68b27909054c76dc019f8747e5deced7215822a)
+++ uspace/lib/drv/include/usb_iface.h	(revision 95120c34f60b564aa35d9c46f9bca43e98681681)
@@ -52,4 +52,13 @@
 	IPC_M_USB_GET_ADDRESS,
 
+	/** Tell interface number given device can use.
+	 * Parameters
+	 * - devman handle id of the device
+	 * Answer:
+	 * - ENOTSUP - operation not supported (can also mean any interface)
+	 * - EOK - operation okay, first parameter contains interface number
+	 */
+	IPC_M_USB_GET_INTERFACE,
+
 	/** Tell devman handle of device host controller.
 	 * Parameters:
@@ -67,4 +76,5 @@
 typedef struct {
 	int (*get_address)(device_t *, devman_handle_t, usb_address_t *);
+	int (*get_interface)(device_t *, devman_handle_t, int *);
 	int (*get_hc_handle)(device_t *, devman_handle_t *);
 } usb_iface_t;
