Index: uspace/lib/usbdev/src/altiface.c
===================================================================
--- uspace/lib/usbdev/src/altiface.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/altiface.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -88,5 +88,5 @@
  * @return Error code.
  */
-int usb_alternate_interfaces_init(usb_alternate_interfaces_t *alternates,
+errno_t usb_alternate_interfaces_init(usb_alternate_interfaces_t *alternates,
     const uint8_t *config_descr, size_t config_descr_size, int interface_number)
 {
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/devdrv.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -141,5 +141,5 @@
  * @return Error code.
  */
-int usb_device_select_interface(usb_device_t *usb_dev,
+errno_t usb_device_select_interface(usb_device_t *usb_dev,
     uint8_t alternate_setting, const usb_endpoint_description_t **endpoints)
 {
@@ -151,5 +151,5 @@
 
 	/* Change the interface itself. */
-	int rc = usb_request_set_interface(&usb_dev->ctrl_pipe,
+	errno_t rc = usb_request_set_interface(&usb_dev->ctrl_pipe,
 	    usb_dev->interface_no, alternate_setting);
 	if (rc != EOK) {
@@ -175,5 +175,5 @@
  * @return Error code.
  */
-static int usb_device_retrieve_descriptors(usb_device_t *usb_dev)
+static errno_t usb_device_retrieve_descriptors(usb_device_t *usb_dev)
 {
 	assert(usb_dev);
@@ -181,5 +181,5 @@
 
 	/* Get the device descriptor. */
-	int rc = usb_request_get_device_descriptor(&usb_dev->ctrl_pipe,
+	errno_t rc = usb_request_get_device_descriptor(&usb_dev->ctrl_pipe,
 	    &usb_dev->descriptors.device);
 	if (rc != EOK) {
@@ -227,5 +227,5 @@
  * @return Error code.
  */
-int usb_device_create_pipes(usb_device_t *usb_dev,
+errno_t usb_device_create_pipes(usb_device_t *usb_dev,
     const usb_endpoint_description_t **endpoints)
 {
@@ -255,5 +255,5 @@
 
 	/* Find the mapping from configuration descriptor. */
-	int rc = usb_pipe_initialize_from_configuration(pipes, pipe_count,
+	errno_t rc = usb_pipe_initialize_from_configuration(pipes, pipe_count,
 	    usb_dev->descriptors.full_config,
 	    usb_dev->descriptors.full_config_size,
@@ -429,5 +429,5 @@
  * @return Error code.
  */
-static int usb_device_init(usb_device_t *usb_dev, ddf_dev_t *ddf_dev,
+static errno_t usb_device_init(usb_device_t *usb_dev, ddf_dev_t *ddf_dev,
     const usb_endpoint_description_t **endpoints, const char **errstr_ptr)
 {
@@ -453,5 +453,5 @@
 	/* This pipe was registered by the hub driver,
 	 * during device initialization. */
-	int rc = usb_pipe_initialize_default_control(&usb_dev->ctrl_pipe, usb_dev->bus_session);
+	errno_t rc = usb_pipe_initialize_default_control(&usb_dev->ctrl_pipe, usb_dev->bus_session);
 	if (rc != EOK) {
 		usb_dev_disconnect(usb_dev->bus_session);
@@ -489,5 +489,5 @@
 }
 
-static int usb_device_get_info(async_sess_t *sess, usb_device_t *dev)
+static errno_t usb_device_get_info(async_sess_t *sess, usb_device_t *dev)
 {
 	assert(dev);
@@ -498,5 +498,5 @@
 
 	usb_device_desc_t dev_desc;
-	const int ret = usb_get_my_description(exch, &dev_desc);
+	const errno_t ret = usb_get_my_description(exch, &dev_desc);
 
 	if (ret == EOK) {
@@ -512,5 +512,5 @@
 }
 
-int usb_device_create_ddf(ddf_dev_t *ddf_dev,
+errno_t usb_device_create_ddf(ddf_dev_t *ddf_dev,
     const usb_endpoint_description_t **desc, const char **err)
 {
@@ -529,5 +529,5 @@
 	}
 
-	const int ret = usb_device_get_info(sess, usb_dev);
+	const errno_t ret = usb_device_get_info(sess, usb_dev);
 	if (ret != EOK)
 		return ret;
@@ -552,5 +552,5 @@
 
 	async_sess_t *sess = devman_device_connect(handle, IPC_FLAG_BLOCKING);
-	int ret = usb_device_get_info(sess, usb_dev);
+	errno_t ret = usb_device_get_info(sess, usb_dev);
 	if (sess)
 		async_hangup(sess);
Index: uspace/lib/usbdev/src/devpoll.c
===================================================================
--- uspace/lib/usbdev/src/devpoll.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/devpoll.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -103,5 +103,5 @@
  * @return Always EOK.
  */
-static int polling_fibril(void *arg)
+static errno_t polling_fibril(void *arg)
 {
 	assert(arg);
@@ -130,5 +130,5 @@
 	while (failed_attempts <= polling->max_failures) {
 		size_t actual_size;
-		const int rc = usb_pipe_read(pipe, polling->buffer,
+		const errno_t rc = usb_pipe_read(pipe, polling->buffer,
 		    polling->request_size, &actual_size);
 
@@ -233,5 +233,5 @@
  * @retval EOK New fibril polling the device was already started.
  */
-int usb_polling_start(usb_polling_t *polling)
+errno_t usb_polling_start(usb_polling_t *polling)
 {
 	if (!polling || !polling->device || !polling->ep_mapping || !polling->on_data)
@@ -272,7 +272,7 @@
  *  @retval EOK Polling fibril has been successfully terminated.
  */
-int usb_polling_join(usb_polling_t *polling)
-{
-	int rc;
+errno_t usb_polling_join(usb_polling_t *polling)
+{
+	errno_t rc;
 	if (!polling)
 		return EBADMEM;
Index: uspace/lib/usbdev/src/driver.c
===================================================================
--- uspace/lib/usbdev/src/driver.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/driver.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -52,5 +52,5 @@
  * @return Error code.
  */
-static int generic_device_add(ddf_dev_t *gen_dev)
+static errno_t generic_device_add(ddf_dev_t *gen_dev)
 {
 	assert(driver);
@@ -60,5 +60,5 @@
 	/* Initialize generic USB driver data. */
 	const char *err_msg = NULL;
-	int rc = usb_device_create_ddf(gen_dev, driver->endpoints, &err_msg);
+	errno_t rc = usb_device_create_ddf(gen_dev, driver->endpoints, &err_msg);
 	if (rc != EOK) {
 		usb_log_error("USB device `%s' init failed (%s): %s.",
@@ -81,5 +81,5 @@
  * @return Error code.
  */
-static int generic_device_remove(ddf_dev_t *gen_dev)
+static errno_t generic_device_remove(ddf_dev_t *gen_dev)
 {
 	assert(driver);
@@ -90,5 +90,5 @@
 	/* Just tell the driver to stop whatever it is doing */
 	usb_device_t *usb_dev = ddf_dev_data_get(gen_dev);
-	int ret = driver->ops->device_remove(usb_dev);
+	const errno_t ret = driver->ops->device_remove(usb_dev);
 	if (ret != EOK)
 		return ret;
@@ -105,5 +105,5 @@
  * @return Error code.
  */
-static int generic_device_gone(ddf_dev_t *gen_dev)
+static errno_t generic_device_gone(ddf_dev_t *gen_dev)
 {
 	assert(driver);
@@ -112,5 +112,5 @@
 		return ENOTSUP;
 	usb_device_t *usb_dev = ddf_dev_data_get(gen_dev);
-	const int ret = driver->ops->device_gone(usb_dev);
+	const errno_t ret = driver->ops->device_gone(usb_dev);
 	if (ret == EOK)
 		usb_device_destroy_ddf(gen_dev);
Index: uspace/lib/usbdev/src/pipes.c
===================================================================
--- uspace/lib/usbdev/src/pipes.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/pipes.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -36,4 +36,5 @@
 #include <usb/dev/request.h>
 #include <usb/usb.h>
+#include <usb/dma_buffer.h>
 
 #include <assert.h>
@@ -73,5 +74,5 @@
  * @return Error code.
  */
-int usb_pipe_control_read(usb_pipe_t *pipe,
+errno_t usb_pipe_control_read(usb_pipe_t *pipe,
     const void *setup_buffer, size_t setup_buffer_size,
     void *buffer, size_t buffer_size, size_t *transferred_size)
@@ -97,5 +98,5 @@
 	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
 	size_t act_size = 0;
-	const int rc = usbhc_read(exch, pipe->desc.endpoint_no, setup_packet, buffer,
+	const errno_t rc = usbhc_read(exch, pipe->desc.endpoint_no, setup_packet, buffer,
 	    buffer_size, &act_size);
 	async_exchange_end(exch);
@@ -123,5 +124,5 @@
  * @return Error code.
  */
-int usb_pipe_control_write(usb_pipe_t *pipe,
+errno_t usb_pipe_control_write(usb_pipe_t *pipe,
     const void *setup_buffer, size_t setup_buffer_size,
     const void *buffer, size_t buffer_size)
@@ -150,5 +151,5 @@
 
 	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
-	const int rc = usbhc_write(exch,
+	const errno_t rc = usbhc_write(exch,
 	    pipe->desc.endpoint_no, setup_packet, buffer, buffer_size);
 	async_exchange_end(exch);
@@ -159,4 +160,29 @@
 
 	return rc;
+}
+
+/**
+ * Allocate a buffer for data transmission, that satisfies the constraints
+ * imposed by the host controller.
+ *
+ * @param[in] pipe Pipe for which the buffer is allocated
+ * @param[in] size Size of the required buffer
+ */
+void *usb_pipe_alloc_buffer(usb_pipe_t *pipe, size_t size)
+{
+	// FIXME: Do not use the default policy, but the one required by HC.
+
+	dma_buffer_t buf;
+	if (dma_buffer_alloc(&buf, size))
+		return NULL;
+
+	return buf.virt;
+}
+
+void usb_pipe_free_buffer(usb_pipe_t *pipe, void *buffer)
+{
+	dma_buffer_t buf;
+	buf.virt = buffer;
+	dma_buffer_free(&buf);
 }
 
@@ -169,5 +195,5 @@
  * @return Error code.
  */
-int usb_pipe_read(usb_pipe_t *pipe,
+errno_t usb_pipe_read(usb_pipe_t *pipe,
     void *buffer, size_t size, size_t *size_transferred)
 {
@@ -192,5 +218,5 @@
 	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
 	size_t act_size = 0;
-	const int rc =
+	const errno_t rc =
 	    usbhc_read(exch, pipe->desc.endpoint_no, 0, buffer, size, &act_size);
 	async_exchange_end(exch);
@@ -210,5 +236,5 @@
  * @return Error code.
  */
-int usb_pipe_write(usb_pipe_t *pipe, const void *buffer, size_t size)
+errno_t usb_pipe_write(usb_pipe_t *pipe, const void *buffer, size_t size)
 {
 	assert(pipe);
@@ -227,5 +253,67 @@
 
 	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
-	const int rc = usbhc_write(exch, pipe->desc.endpoint_no, 0, buffer, size);
+	const errno_t rc = usbhc_write(exch, pipe->desc.endpoint_no, 0, buffer, size);
+	async_exchange_end(exch);
+	return rc;
+}
+
+/**
+ * Request a read (in) transfer on an endpoint pipe, declaring that buffer
+ * is pointing to a memory area previously allocated by usb_pipe_alloc_buffer.
+ *
+ * @param[in] pipe Pipe used for the transfer.
+ * @param[in] buffer Buffer, previously allocated with usb_pipe_alloc_buffer.
+ * @param[in] size Size of the buffer (in bytes).
+ * @param[out] size_transferred Number of bytes that were actually transferred.
+ * @return Error code.
+ */
+errno_t usb_pipe_read_dma(usb_pipe_t *pipe, void *buffer, size_t size,
+    size_t *size_transferred)
+{
+	assert(pipe);
+
+	if (buffer == NULL || size == 0)
+		return EINVAL;
+
+	if (pipe->desc.direction != USB_DIRECTION_IN
+	    || pipe->desc.transfer_type == USB_TRANSFER_CONTROL)
+		return EBADF;
+
+	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
+	if (!exch)
+		return ENOMEM;
+
+	const errno_t rc = usbhc_transfer(exch, pipe->desc.endpoint_no,
+	    USB_DIRECTION_IN, 0, buffer, size, size_transferred);
+	async_exchange_end(exch);
+	return rc;
+}
+
+/**
+ * Request a write (out) transfer on an endpoint pipe, declaring that buffer
+ * is pointing to a memory area previously allocated by usb_pipe_alloc_buffer.
+ *
+ * @param[in] pipe Pipe used for the transfer.
+ * @param[in] buffer Buffer, previously allocated with usb_pipe_alloc_buffer.
+ * @param[in] size Size of the buffer (in bytes).
+ * @return Error code.
+ */
+errno_t usb_pipe_write_dma(usb_pipe_t *pipe, void *buffer, size_t size)
+{
+	assert(pipe);
+
+	if (buffer == NULL || size == 0) {
+		return EINVAL;
+	}
+
+	if (pipe->desc.direction != USB_DIRECTION_OUT
+	    || pipe->desc.transfer_type == USB_TRANSFER_CONTROL)
+		return EBADF;
+
+	async_exch_t *exch = async_exchange_begin(pipe->bus_session);
+	if (!exch)
+		return ENOMEM;
+
+	const errno_t rc = usbhc_transfer(exch, pipe->desc.endpoint_no, USB_DIRECTION_OUT, 0, buffer, size, NULL);
 	async_exchange_end(exch);
 	return rc;
@@ -238,5 +326,5 @@
  * @return Error code.
  */
-int usb_pipe_initialize(usb_pipe_t *pipe, usb_dev_session_t *bus_session)
+errno_t usb_pipe_initialize(usb_pipe_t *pipe, usb_dev_session_t *bus_session)
 {
 	assert(pipe);
@@ -263,7 +351,7 @@
  * @return Error code.
  */
-int usb_pipe_initialize_default_control(usb_pipe_t *pipe, usb_dev_session_t *bus_session)
-{
-	const int ret = usb_pipe_initialize(pipe, bus_session);
+errno_t usb_pipe_initialize_default_control(usb_pipe_t *pipe, usb_dev_session_t *bus_session)
+{
+	const errno_t ret = usb_pipe_initialize(pipe, bus_session);
 	if (ret)
 		return ret;
@@ -282,5 +370,5 @@
  * @return Error code.
  */
-int usb_pipe_register(usb_pipe_t *pipe, const usb_standard_endpoint_descriptor_t *ep_desc, const usb_superspeed_endpoint_companion_descriptor_t *comp_desc)
+errno_t usb_pipe_register(usb_pipe_t *pipe, const usb_standard_endpoint_descriptor_t *ep_desc, const usb_superspeed_endpoint_companion_descriptor_t *comp_desc)
 {
 	assert(pipe);
@@ -309,5 +397,5 @@
 #undef COPY
 
-	const int ret = usbhc_register_endpoint(exch, &pipe->desc, &descriptors);
+	const errno_t ret = usbhc_register_endpoint(exch, &pipe->desc, &descriptors);
 	async_exchange_end(exch);
 	return ret;
@@ -319,5 +407,5 @@
  * @return Error code.
  */
-int usb_pipe_unregister(usb_pipe_t *pipe)
+errno_t usb_pipe_unregister(usb_pipe_t *pipe)
 {
 	assert(pipe);
@@ -327,5 +415,5 @@
 		return ENOMEM;
 
-	const int ret = usbhc_unregister_endpoint(exch, &pipe->desc);
+	const errno_t ret = usbhc_unregister_endpoint(exch, &pipe->desc);
 
 	async_exchange_end(exch);
Index: uspace/lib/usbdev/src/pipesinit.c
===================================================================
--- uspace/lib/usbdev/src/pipesinit.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/pipesinit.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -167,5 +167,5 @@
  * @return Error code.
  */
-static int process_endpoint(
+static errno_t process_endpoint(
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     usb_standard_interface_descriptor_t *interface,
@@ -202,5 +202,5 @@
 	}
 
-	int err = usb_pipe_initialize(&ep_mapping->pipe, bus_session);
+	errno_t err = usb_pipe_initialize(&ep_mapping->pipe, bus_session);
 	if (err)
 		return err;
@@ -223,5 +223,5 @@
  * @return Error code.
  */
-static int process_interface(
+static errno_t process_interface(
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     const usb_dp_parser_t *parser, const usb_dp_parser_data_t *parser_data,
@@ -293,5 +293,5 @@
  * @return Error code.
  */
-int usb_pipe_initialize_from_configuration(
+errno_t usb_pipe_initialize_from_configuration(
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     const uint8_t *config_descriptor, size_t config_descriptor_size,
Index: uspace/lib/usbdev/src/recognise.c
===================================================================
--- uspace/lib/usbdev/src/recognise.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/recognise.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -60,6 +60,6 @@
  * @return Error code.
  */
-static int usb_add_match_id(match_id_list_t *matches, int score,
-    const char *match_str)
+static errno_t usb_add_match_id(match_id_list_t *matches, int score,
+    char *match_str)
 {
 	assert(matches);
@@ -88,10 +88,12 @@
 		char *str = NULL; \
 		int __rc = asprintf(&str, format, ##__VA_ARGS__); \
-		if (__rc > 0) { \
-			__rc = usb_add_match_id((match_ids), (score), str); \
-		} \
-		if (__rc != EOK) { \
-			free(str); \
-			return __rc; \
+		if (__rc >= 0) { \
+			errno_t __rc = usb_add_match_id((match_ids), (score), str); \
+			if (__rc != EOK) { \
+				free(str); \
+				return __rc; \
+			} \
+		} else { \
+			return ENOMEM; \
 		} \
 	} while (0)
@@ -106,5 +108,5 @@
  * @retval ENOENT Device class is not "use interface".
  */
-int usb_device_create_match_ids_from_interface(
+errno_t usb_device_create_match_ids_from_interface(
     const usb_standard_device_descriptor_t *desc_device,
     const usb_standard_interface_descriptor_t *desc_interface,
@@ -218,5 +220,5 @@
  * @return Error code.
  */
-int usb_device_create_match_ids_from_device_descriptor(
+errno_t usb_device_create_match_ids_from_device_descriptor(
     const usb_standard_device_descriptor_t *device_descriptor,
     match_id_list_t *matches)
@@ -262,9 +264,9 @@
  * @return Error code.
  */
-int usb_device_create_match_ids(usb_pipe_t *ctrl_pipe,
+errno_t usb_device_create_match_ids(usb_pipe_t *ctrl_pipe,
     match_id_list_t *matches)
 {
 	assert(ctrl_pipe);
-	int rc;
+	errno_t rc;
 	/*
 	 * Retrieve device descriptor and add matches from it.
Index: uspace/lib/usbdev/src/request.c
===================================================================
--- uspace/lib/usbdev/src/request.c	(revision 1a2227dd48e5aa6c8c9a405d3d2af5380b443736)
+++ uspace/lib/usbdev/src/request.c	(revision be01eb379a65399d13f7e4a0b6b5a403268d76dc)
@@ -68,5 +68,5 @@
  *
  */
-int usb_control_request_set(usb_pipe_t *pipe,
+errno_t usb_control_request_set(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint8_t request, uint16_t value, uint16_t index,
@@ -127,5 +127,5 @@
  *
  */
-int usb_control_request_get(usb_pipe_t *pipe,
+errno_t usb_control_request_get(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint8_t request, uint16_t value, uint16_t index,
@@ -170,5 +170,5 @@
  * @return Error code.
  */
-int usb_request_get_status(usb_pipe_t *pipe,
+errno_t usb_request_get_status(usb_pipe_t *pipe,
     usb_request_recipient_t recipient, uint16_t index,
     uint16_t *status)
@@ -184,5 +184,5 @@
 	uint16_t status_usb_endianess;
 	size_t data_transferred_size;
-	int rc = usb_control_request_get(pipe, USB_REQUEST_TYPE_STANDARD,
+	errno_t rc = usb_control_request_get(pipe, USB_REQUEST_TYPE_STANDARD,
 	    recipient, USB_DEVREQ_GET_STATUS, 0, uint16_host2usb(index),
 	    &status_usb_endianess, 2, &data_transferred_size);
@@ -208,5 +208,5 @@
  * @return Error code.
  */
-int usb_request_clear_feature(usb_pipe_t *pipe,
+errno_t usb_request_clear_feature(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint16_t feature_selector, uint16_t index)
@@ -232,5 +232,5 @@
  * @return Error code.
  */
-int usb_request_set_feature(usb_pipe_t *pipe,
+errno_t usb_request_set_feature(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint16_t feature_selector, uint16_t index)
@@ -260,5 +260,5 @@
  * @return Error code.
  */
-int usb_request_get_descriptor(usb_pipe_t *pipe,
+errno_t usb_request_get_descriptor(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint8_t descriptor_type, uint8_t descriptor_index,
@@ -298,5 +298,5 @@
  * @return
  */
-int usb_request_get_descriptor_alloc(usb_pipe_t * pipe,
+errno_t usb_request_get_descriptor_alloc(usb_pipe_t * pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint8_t descriptor_type, uint8_t descriptor_index,
@@ -308,5 +308,5 @@
 	}
 
-	int rc;
+	errno_t rc;
 
 	/*
@@ -364,5 +364,5 @@
  * @return Error code.
  */
-int usb_request_get_device_descriptor(usb_pipe_t *pipe,
+errno_t usb_request_get_device_descriptor(usb_pipe_t *pipe,
     usb_standard_device_descriptor_t *descriptor)
 {
@@ -373,5 +373,5 @@
 	size_t actually_transferred = 0;
 	usb_standard_device_descriptor_t descriptor_tmp;
-	int rc = usb_request_get_descriptor(pipe,
+	errno_t rc = usb_request_get_descriptor(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE,
 	    USB_DESCTYPE_DEVICE, 0, 0, &descriptor_tmp, sizeof(descriptor_tmp),
@@ -404,5 +404,5 @@
  * @return Error code.
  */
-int usb_request_get_bare_configuration_descriptor(usb_pipe_t *pipe,
+errno_t usb_request_get_bare_configuration_descriptor(usb_pipe_t *pipe,
     int index, usb_standard_configuration_descriptor_t *descriptor)
 {
@@ -417,5 +417,5 @@
 	size_t actually_transferred = 0;
 	usb_standard_configuration_descriptor_t descriptor_tmp;
-	const int rc = usb_request_get_descriptor(pipe,
+	const errno_t rc = usb_request_get_descriptor(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE,
 	    USB_DESCTYPE_CONFIGURATION, index, 0,
@@ -448,5 +448,5 @@
  * @return Error code.
  */
-int usb_request_get_full_configuration_descriptor(usb_pipe_t *pipe,
+errno_t usb_request_get_full_configuration_descriptor(usb_pipe_t *pipe,
     int index, void *descriptor, size_t descriptor_size, size_t *actual_size)
 {
@@ -473,9 +473,9 @@
  * @return Error code.
  */
-int usb_request_get_full_configuration_descriptor_alloc(
+errno_t usb_request_get_full_configuration_descriptor_alloc(
     usb_pipe_t *pipe, int index,
-    const void **descriptor_ptr, size_t *descriptor_size)
-{
-	int rc;
+    void **descriptor_ptr, size_t *descriptor_size)
+{
+	errno_t rc;
 
 	if (descriptor_ptr == NULL) {
@@ -539,5 +539,5 @@
  * @return Error code.
  */
-int usb_request_set_descriptor(usb_pipe_t *pipe,
+errno_t usb_request_set_descriptor(usb_pipe_t *pipe,
     usb_request_type_t request_type, usb_request_recipient_t recipient,
     uint8_t descriptor_type, uint8_t descriptor_index,
@@ -565,5 +565,5 @@
  * @return Error code.
  */
-int usb_request_get_configuration(usb_pipe_t *pipe,
+errno_t usb_request_get_configuration(usb_pipe_t *pipe,
     uint8_t *configuration_value)
 {
@@ -571,5 +571,5 @@
 	size_t actual_size;
 
-	const int rc = usb_control_request_get(pipe,
+	const errno_t rc = usb_control_request_get(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE,
 	    USB_DEVREQ_GET_CONFIGURATION, 0, 0, &value, 1, &actual_size);
@@ -595,5 +595,5 @@
  * @return Error code.
  */
-int usb_request_set_configuration(usb_pipe_t *pipe,
+errno_t usb_request_set_configuration(usb_pipe_t *pipe,
     uint8_t configuration_value)
 {
@@ -614,5 +614,5 @@
  * @return Error code.
  */
-int usb_request_get_interface(usb_pipe_t *pipe,
+errno_t usb_request_get_interface(usb_pipe_t *pipe,
     uint8_t interface_index, uint8_t *alternate_setting)
 {
@@ -620,5 +620,5 @@
 	size_t actual_size;
 
-	const int rc = usb_control_request_get(pipe,
+	const errno_t rc = usb_control_request_get(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_INTERFACE,
 	    USB_DEVREQ_GET_INTERFACE,
@@ -647,5 +647,5 @@
  * @return Error code.
  */
-int usb_request_set_interface(usb_pipe_t *pipe,
+errno_t usb_request_set_interface(usb_pipe_t *pipe,
     uint8_t interface_index, uint8_t alternate_setting)
 {
@@ -666,5 +666,5 @@
  * @return Error code.
  */
-int usb_request_get_supported_languages(usb_pipe_t *pipe,
+errno_t usb_request_get_supported_languages(usb_pipe_t *pipe,
     l18_win_locales_t **languages_ptr, size_t *languages_count)
 {
@@ -675,5 +675,5 @@
 	uint8_t *string_descriptor = NULL;
 	size_t string_descriptor_size = 0;
-	const int rc = usb_request_get_descriptor_alloc(pipe,
+	const errno_t rc = usb_request_get_descriptor_alloc(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE,
 	    USB_DESCTYPE_STRING, 0, 0,
@@ -733,5 +733,5 @@
  * @return Error code.
  */
-int usb_request_get_string(usb_pipe_t *pipe,
+errno_t usb_request_get_string(usb_pipe_t *pipe,
     size_t index, l18_win_locales_t lang, char **string_ptr)
 {
@@ -751,5 +751,5 @@
 	}
 
-	int rc;
+	errno_t rc;
 
 	/* Prepare dynamically allocated variables. */
@@ -824,5 +824,5 @@
  * @return Error code.
  */
-static int usb_request_clear_endpoint_halt(usb_pipe_t *pipe, uint16_t ep_index)
+static errno_t usb_request_clear_endpoint_halt(usb_pipe_t *pipe, uint16_t ep_index)
 {
 	return usb_request_clear_feature(pipe,
@@ -838,5 +838,5 @@
  * @return Error code.
  */
-int usb_pipe_clear_halt(usb_pipe_t *ctrl_pipe, usb_pipe_t *target_pipe)
+errno_t usb_pipe_clear_halt(usb_pipe_t *ctrl_pipe, usb_pipe_t *target_pipe)
 {
 	if ((ctrl_pipe == NULL) || (target_pipe == NULL)) {
@@ -856,10 +856,10 @@
  * @return Error code.
  */
-int usb_request_get_endpoint_status(usb_pipe_t *ctrl_pipe, usb_pipe_t *pipe,
+errno_t usb_request_get_endpoint_status(usb_pipe_t *ctrl_pipe, usb_pipe_t *pipe,
     uint16_t *status)
 {
 	uint16_t status_tmp;
 	uint16_t pipe_index = (uint16_t) pipe->desc.endpoint_no;
-	int rc = usb_request_get_status(ctrl_pipe,
+	errno_t rc = usb_request_get_status(ctrl_pipe,
 	    USB_REQUEST_RECIPIENT_ENDPOINT, uint16_host2usb(pipe_index),
 	    &status_tmp);
