Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision 632ed688370ac3e1722e8dde56df6047bb6ff7fa)
+++ uspace/app/usbinfo/info.c	(revision b00849e82cbb38db4b639f04db025046a35c00a7)
@@ -38,8 +38,23 @@
 #include <errno.h>
 #include <usb/usbdrv.h>
+#include <usb/pipes.h>
+#include <usb/request.h>
 #include "usbinfo.h"
 
-int dump_device(int hc_phone, usb_address_t address)
+int dump_device(devman_handle_t hc_handle, usb_address_t address)
 {
+	int rc;
+	usb_device_connection_t wire;
+	usb_endpoint_pipe_t ctrl_pipe;
+	ctrl_pipe.hc_phone = -1;
+
+	int hc_phone = devman_device_connect(hc_handle, 0);
+	if (hc_phone < 0) {
+		fprintf(stderr,
+		    NAME ": failed to connect to host controller (%zu): %s.\n",
+		        (size_t) hc_handle, str_error(hc_phone));
+		return hc_phone;
+	}
+
 	/*
 	 * Dump information about possible match ids.
@@ -47,12 +62,37 @@
 	match_id_list_t match_id_list;
 	init_match_ids(&match_id_list);
-	int rc = usb_drv_create_device_match_ids(hc_phone, &match_id_list, address);
+	rc = usb_drv_create_device_match_ids(hc_phone, &match_id_list, address);
 	if (rc != EOK) {
 		fprintf(stderr,
 		    NAME ": failed to fetch match ids of the device: %s.\n",
 		    str_error(rc));
-		return rc;
+		goto leave;
 	}
 	dump_match_ids(&match_id_list);
+
+	/*
+	 * Initialize pipes.
+	 */
+	rc = usb_device_connection_initialize(&wire, hc_handle, address);
+	if (rc != EOK) {
+		fprintf(stderr,
+		    NAME ": failed to create connection to the device: %s.\n",
+		    str_error(rc));
+		goto leave;
+	}
+	rc = usb_endpoint_pipe_initialize_default_control(&ctrl_pipe, &wire);
+	if (rc != EOK) {
+		fprintf(stderr,
+		    NAME ": failed to create default control pipe: %s.\n",
+		    str_error(rc));
+		goto leave;
+	}
+	rc = usb_endpoint_pipe_start_session(&ctrl_pipe);
+	if (rc != EOK) {
+		fprintf(stderr,
+		    NAME ": failed to start session on control pipe: %s.\n",
+		    str_error(rc));
+		goto leave;
+	}
 
 	/*
@@ -60,15 +100,10 @@
 	 */
 	usb_standard_device_descriptor_t device_descriptor;
-	usb_dprintf(NAME, 1,
-	    "usb_drv_req_get_device_descriptor(%d, %d, %p)\n",
-	    hc_phone, (int) address, &device_descriptor);
-
-	rc = usb_drv_req_get_device_descriptor(hc_phone, address,
-	    &device_descriptor);
+	rc = usb_request_get_device_descriptor(&ctrl_pipe, &device_descriptor);
 	if (rc != EOK) {
 		fprintf(stderr,
 		    NAME ": failed to fetch standard device descriptor: %s.\n",
 		    str_error(rc));
-		return rc;
+		goto leave;
 	}
 	dump_usb_descriptor((uint8_t *)&device_descriptor, sizeof(device_descriptor));
@@ -79,25 +114,16 @@
 	usb_standard_configuration_descriptor_t config_descriptor;
 	int config_index = 0;
-	usb_dprintf(NAME, 1,
-	    "usb_drv_req_get_bare_configuration_descriptor(%d, %d, %d, %p)\n",
-	    hc_phone, (int) address, config_index, &config_descriptor);
-
-	rc = usb_drv_req_get_bare_configuration_descriptor(hc_phone, address,
-	    config_index, &config_descriptor );
+	rc = usb_request_get_bare_configuration_descriptor(&ctrl_pipe,
+	    config_index, &config_descriptor);
 	if (rc != EOK) {
 		fprintf(stderr,
 		    NAME ": failed to fetch standard configuration descriptor: %s.\n",
 		    str_error(rc));
-		return rc;
+		goto leave;
 	}
 	//dump_standard_configuration_descriptor(config_index, &config_descriptor);
 
 	void *full_config_descriptor = malloc(config_descriptor.total_length);
-	usb_dprintf(NAME, 1,
-	    "usb_drv_req_get_full_configuration_descriptor(%d, %d, %d, %p, %zu)\n",
-	    hc_phone, (int) address, config_index,
-	    full_config_descriptor, config_descriptor.total_length);
-
-	rc = usb_drv_req_get_full_configuration_descriptor(hc_phone, address,
+	rc = usb_request_get_full_configuration_descriptor(&ctrl_pipe,
 	    config_index,
 	    full_config_descriptor, config_descriptor.total_length, NULL);
@@ -106,5 +132,5 @@
 		    NAME ": failed to fetch full configuration descriptor: %s.\n",
 		    str_error(rc));
-		return rc;
+		goto leave;
 	}
 
@@ -112,5 +138,11 @@
 	    config_descriptor.total_length);
 
-	return EOK;
+	rc = EOK;
+leave:
+	/* Ignoring errors here. */
+	ipc_hangup(hc_phone);
+	usb_endpoint_pipe_end_session(&ctrl_pipe);
+
+	return rc;
 }
 
