Index: uspace/drv/bus/usb/usbdiag/device.c
===================================================================
--- uspace/drv/bus/usb/usbdiag/device.c	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/bus/usb/usbdiag/device.c	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -64,5 +64,5 @@
 };
 
-static int device_init(usbdiag_dev_t *dev)
+static int device_init(usbdiag_dev_t *dev, const usb_endpoint_description_t **endpoints)
 {
 	int rc;
@@ -77,5 +77,5 @@
 
 #define _MAP_EP(target, ep_no) do {\
-	usb_endpoint_mapping_t *epm = usb_device_get_mapped_ep(dev->usb_dev, USBDIAG_EP_##ep_no);\
+	usb_endpoint_mapping_t *epm = usb_device_get_mapped_ep_desc(dev->usb_dev, endpoints[USBDIAG_EP_##ep_no]);\
 	if (!epm || !epm->present) {\
 		usb_log_error("Failed to map endpoint: " #ep_no ".");\
@@ -108,5 +108,5 @@
 }
 
-int usbdiag_dev_create(usb_device_t *dev, usbdiag_dev_t **out_diag_dev)
+int usbdiag_dev_create(usb_device_t *dev, usbdiag_dev_t **out_diag_dev, const usb_endpoint_description_t **endpoints)
 {
 	assert(dev);
@@ -120,5 +120,5 @@
 
 	int err;
-	if ((err = device_init(diag_dev)))
+	if ((err = device_init(diag_dev, endpoints)))
 		goto err_init;
 
Index: uspace/drv/bus/usb/usbdiag/device.h
===================================================================
--- uspace/drv/bus/usb/usbdiag/device.h	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/bus/usb/usbdiag/device.h	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -38,4 +38,5 @@
 
 #include <usb/dev/device.h>
+#include <usb/dev/driver.h>
 
 #define USBDIAG_EP_INTR_IN    1
@@ -60,5 +61,5 @@
 } usbdiag_dev_t;
 
-int usbdiag_dev_create(usb_device_t *, usbdiag_dev_t **);
+int usbdiag_dev_create(usb_device_t *, usbdiag_dev_t **, const usb_endpoint_description_t **);
 void usbdiag_dev_destroy(usbdiag_dev_t *);
 
Index: uspace/drv/bus/usb/usbdiag/main.c
===================================================================
--- uspace/drv/bus/usb/usbdiag/main.c	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/bus/usb/usbdiag/main.c	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -45,4 +45,6 @@
 #define NAME "usbdiag"
 
+static const usb_endpoint_description_t *diag_endpoints[];
+
 static int device_add(usb_device_t *dev)
 {
@@ -51,5 +53,5 @@
 
 	usbdiag_dev_t *diag_dev;
-	if ((rc = usbdiag_dev_create(dev, &diag_dev))) {
+	if ((rc = usbdiag_dev_create(dev, &diag_dev, diag_endpoints))) {
 		usb_log_error("Failed create device: %s.", str_error(rc));
 		goto err;
Index: uspace/drv/nic/ar9271/ar9271.c
===================================================================
--- uspace/drv/nic/ar9271/ar9271.c	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/nic/ar9271/ar9271.c	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -665,5 +665,5 @@
 }
 
-static int ar9271_init(ar9271_t *ar9271, usb_device_t *usb_device)
+static int ar9271_init(ar9271_t *ar9271, usb_device_t *usb_device, const usb_endpoint_description_t **endpoints)
 {
 	ar9271->starting_up = true;
@@ -679,5 +679,5 @@
 	}
 	
-	int rc = ath_usb_init(ar9271->ath_device, usb_device);
+	int rc = ath_usb_init(ar9271->ath_device, usb_device, endpoints);
 	if (rc != EOK) {
 		free(ar9271->ath_device);
@@ -850,5 +850,5 @@
 	ar9271->ddf_dev = dev;
 	
-	rc = ar9271_init(ar9271, usb_device_get(dev));
+	rc = ar9271_init(ar9271, usb_device_get(dev), endpoints);
 	if (rc != EOK) {
 		free(ar9271);
Index: uspace/drv/nic/ar9271/ath_usb.c
===================================================================
--- uspace/drv/nic/ar9271/ath_usb.c	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/nic/ar9271/ath_usb.c	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -59,5 +59,5 @@
  *
  */
-int ath_usb_init(ath_t *ath, usb_device_t *usb_device)
+int ath_usb_init(ath_t *ath, usb_device_t *usb_device, const usb_endpoint_description_t **endpoints)
 {
 	ath_usb_t *ath_usb = malloc(sizeof(ath_usb_t));
@@ -70,9 +70,22 @@
 	ath_usb->usb_device = usb_device;
 	
-	/* TODO: Assign by iterating over pipes. */
-	ath_usb->output_data_pipe_number = 0;
-	ath_usb->input_data_pipe_number = 1;
-	ath_usb->input_ctrl_pipe_number = 2;
-	ath_usb->output_ctrl_pipe_number = 3;
+	int rc;
+
+#define _MAP_EP(target, ep_no) do {\
+	usb_endpoint_mapping_t *epm = usb_device_get_mapped_ep_desc(usb_device, endpoints[ep_no]);\
+	if (!epm || !epm->present) {\
+		usb_log_error("Failed to map endpoint: " #ep_no ".");\
+		rc = ENOENT;\
+		goto err_ath_usb;\
+	}\
+	target = &epm->pipe;\
+	} while (0);
+
+	_MAP_EP(ath_usb->output_data_pipe, 0);
+	_MAP_EP(ath_usb->input_data_pipe, 1);
+	_MAP_EP(ath_usb->input_ctrl_pipe, 2);
+	_MAP_EP(ath_usb->output_ctrl_pipe, 3);
+
+#undef _MAP_EP
 	
 	ath->ctrl_response_length = 64;
@@ -83,4 +96,7 @@
 	
 	return EOK;
+err_ath_usb:
+	free(ath_usb);
+	return rc;
 }
 
@@ -98,8 +114,5 @@
 {
 	ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
-	usb_pipe_t *pipe = &usb_device_get_mapped_ep(
-	    ath_usb->usb_device, ath_usb->output_ctrl_pipe_number)->pipe;
-	
-	return usb_pipe_write(pipe, buffer, buffer_size);
+	return usb_pipe_write(ath_usb->output_ctrl_pipe, buffer, buffer_size);
 }
 
@@ -118,8 +131,5 @@
 {
 	ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
-	usb_pipe_t *pipe = &usb_device_get_mapped_ep(
-	    ath_usb->usb_device, ath_usb->input_ctrl_pipe_number)->pipe;
-	
-	return usb_pipe_read(pipe, buffer, buffer_size, transferred_size);
+	return usb_pipe_read(ath_usb->input_ctrl_pipe, buffer, buffer_size, transferred_size);
 }
 
@@ -148,8 +158,5 @@
 	
 	ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
-	usb_pipe_t *pipe = &usb_device_get_mapped_ep(
-	    ath_usb->usb_device, ath_usb->output_data_pipe_number)->pipe;
-	
-	int ret_val = usb_pipe_write(pipe, complete_buffer,
+	int ret_val = usb_pipe_write(ath_usb->output_data_pipe, complete_buffer,
 	    complete_buffer_size);
 	
@@ -173,7 +180,4 @@
 {
 	ath_usb_t *ath_usb = (ath_usb_t *) ath->specific_data;
-	usb_pipe_t *pipe = &usb_device_get_mapped_ep(
-	    ath_usb->usb_device, ath_usb->input_data_pipe_number)->pipe;
-	
-	return usb_pipe_read(pipe, buffer, buffer_size, transferred_size);
+	return usb_pipe_read(ath_usb->input_data_pipe, buffer, buffer_size, transferred_size);
 }
Index: uspace/drv/nic/ar9271/ath_usb.h
===================================================================
--- uspace/drv/nic/ar9271/ath_usb.h	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/drv/nic/ar9271/ath_usb.h	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -45,8 +45,8 @@
 typedef struct {
 	/** USB pipes indexes */
-	int input_ctrl_pipe_number;
-	int output_ctrl_pipe_number;
-	int input_data_pipe_number;
-	int output_data_pipe_number;
+	usb_pipe_t *input_ctrl_pipe;
+	usb_pipe_t *output_ctrl_pipe;
+	usb_pipe_t *input_data_pipe;
+	usb_pipe_t *output_data_pipe;
 	
 	/** Pointer to connected USB device. */
@@ -59,5 +59,5 @@
 } ath_usb_data_header_t;
 
-extern int ath_usb_init(ath_t *, usb_device_t *);
+extern int ath_usb_init(ath_t *, usb_device_t *, const usb_endpoint_description_t **endpoints);
 
 #endif  /* ATHEROS_ATH_USB_H */
Index: uspace/lib/usbdev/include/usb/dev/device.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/device.h	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/lib/usbdev/include/usb/dev/device.h	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -87,6 +87,4 @@
 usb_endpoint_mapping_t * usb_device_get_mapped_ep_desc(usb_device_t *,
     const usb_endpoint_description_t *);
-usb_endpoint_mapping_t * usb_device_get_mapped_ep(usb_device_t *,
-    usb_endpoint_t);
 int usb_device_unmap_ep(usb_endpoint_mapping_t *);
 
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 09187c6ee5a3d4c32339c65240992a9a76d267dc)
+++ uspace/lib/usbdev/src/devdrv.c	(revision b3c396907c3dfb9b7afd227215a7bd6a7416d6dd)
@@ -341,15 +341,4 @@
 }
 
-usb_endpoint_mapping_t * usb_device_get_mapped_ep(
-    usb_device_t *usb_dev, usb_endpoint_t ep)
-{
-	assert(usb_dev);
-	for (unsigned i = 0; i < usb_dev->pipes_count; ++i) {
-		if (usb_dev->pipes[i].pipe.desc.endpoint_no == ep)
-			return &usb_dev->pipes[i];
-	}
-	return NULL;
-}
-
 int usb_device_unmap_ep(usb_endpoint_mapping_t *epm)
 {
