Index: uspace/drv/nic/virtio-net/virtio-net.c
===================================================================
--- uspace/drv/nic/virtio-net/virtio-net.c	(revision 96c30c81327e058d9ccd42a8628f09c4f75b398a)
+++ uspace/drv/nic/virtio-net/virtio-net.c	(revision 331d0243dfc79a4cd67e3055edf1869962139770)
@@ -122,62 +122,4 @@
 		buf[0] = NULL;
 	}
-}
-
-/** Create free descriptor list from the unused VIRTIO descriptors
- *
- * @param vdev[in]   VIRTIO device for which the free list will be created.
- * @param num[in]    Index of the virtqueue for which the free list will be
- *                   created.
- * @param size[in]   Number of descriptors on the free list. The free list will
- *                   contain descriptors starting from 0 to \a size - 1.
- * @param head[out]  Variable that will hold the VIRTIO descriptor at the head
- *                   of the free list.
- */
-static void virtio_net_create_desc_free_list(virtio_dev_t *vdev, uint16_t num,
-    uint16_t size, uint16_t *head)
-{
-	for (unsigned i = 0; i < size; i++) {
-		virtio_virtq_desc_set(vdev, num, i, 0, 0,
-		    VIRTQ_DESC_F_NEXT, (i + 1 == size) ? -1U : i + 1);
-	}
-	*head = 0;
-}
-
-/** Allocate a descriptor from the free list
- *
- * @param vdev[in]      VIRTIO device with the free list.
- * @param num[in]       Index of the virtqueue with free list.
- * @param head[in,out]  Head of the free list.
- *
- * @return  Allocated descriptor or 0xFFFF if the list is empty.
- */
-static uint16_t virtio_net_alloc_desc(virtio_dev_t *vdev, uint16_t num,
-    uint16_t *head)
-{
-	virtq_t *q = &vdev->queues[num];
-	fibril_mutex_lock(&q->lock);
-	uint16_t descno = *head;
-	if (descno != (uint16_t) -1U)
-		*head = virtio_virtq_desc_get_next(vdev, num, descno);
-	fibril_mutex_unlock(&q->lock);
-	return descno;
-}
-
-/** Free a descriptor into the free list
- *
- * @param vdev[in]      VIRTIO device with the free list.
- * @param num[in]       Index of the virtqueue with free list.
- * @param head[in,out]  Head of the free list.
- * @param descno[in]    The freed descriptor.
- */
-static void virtio_net_free_desc(virtio_dev_t *vdev, uint16_t num,
-    uint16_t *head, uint16_t descno)
-{
-	virtq_t *q = &vdev->queues[num];
-	fibril_mutex_lock(&q->lock);
-	virtio_virtq_desc_set(vdev, num, descno, 0, 0, VIRTQ_DESC_F_NEXT,
-	    *head);
-	*head = descno;
-	fibril_mutex_unlock(&q->lock);
 }
 
@@ -214,10 +156,10 @@
 
 	while (virtio_virtq_consume_used(vdev, TX_QUEUE_1, &descno, &len)) {
-		virtio_net_free_desc(vdev, TX_QUEUE_1,
-		    &virtio_net->tx_free_head, descno);
+		virtio_free_desc(vdev, TX_QUEUE_1, &virtio_net->tx_free_head,
+		    descno);
 	}
 	while (virtio_virtq_consume_used(vdev, CT_QUEUE_1, &descno, &len)) {
-		virtio_net_free_desc(vdev, CT_QUEUE_1,
-		    &virtio_net->ct_free_head, descno);
+		virtio_free_desc(vdev, CT_QUEUE_1, &virtio_net->ct_free_head,
+		    descno);
 	}
 }
@@ -379,7 +321,7 @@
 	 * Put all TX and CT buffers on a free list
 	 */
-	virtio_net_create_desc_free_list(vdev, TX_QUEUE_1, TX_BUFFERS,
+	virtio_create_desc_free_list(vdev, TX_QUEUE_1, TX_BUFFERS,
 	    &virtio_net->tx_free_head);
-	virtio_net_create_desc_free_list(vdev, CT_QUEUE_1, CT_BUFFERS,
+	virtio_create_desc_free_list(vdev, CT_QUEUE_1, CT_BUFFERS,
 	    &virtio_net->ct_free_head);
 
@@ -446,5 +388,5 @@
 	}
 
-	uint16_t descno = virtio_net_alloc_desc(vdev, TX_QUEUE_1,
+	uint16_t descno = virtio_alloc_desc(vdev, TX_QUEUE_1,
 	    &virtio_net->tx_free_head);
 	if (descno == (uint16_t) -1U) {
Index: uspace/lib/virtio/virtio-pci.h
===================================================================
--- uspace/lib/virtio/virtio-pci.h	(revision 96c30c81327e058d9ccd42a8628f09c4f75b398a)
+++ uspace/lib/virtio/virtio-pci.h	(revision 331d0243dfc79a4cd67e3055edf1869962139770)
@@ -186,4 +186,9 @@
     uint16_t);
 
+extern void virtio_create_desc_free_list(virtio_dev_t *, uint16_t, uint16_t,
+    uint16_t *);
+extern uint16_t virtio_alloc_desc(virtio_dev_t *, uint16_t, uint16_t *);
+extern void virtio_free_desc(virtio_dev_t *, uint16_t, uint16_t *, uint16_t);
+
 extern void virtio_virtq_produce_available(virtio_dev_t *, uint16_t, uint16_t);
 extern bool virtio_virtq_consume_used(virtio_dev_t *, uint16_t, uint16_t *,
Index: uspace/lib/virtio/virtio.c
===================================================================
--- uspace/lib/virtio/virtio.c	(revision 96c30c81327e058d9ccd42a8628f09c4f75b398a)
+++ uspace/lib/virtio/virtio.c	(revision 331d0243dfc79a4cd67e3055edf1869962139770)
@@ -57,4 +57,62 @@
 	return pio_read_le16(&d->next);
 }
+
+/** Create free descriptor list from the unused VIRTIO descriptors
+ *
+ * @param vdev[in]   VIRTIO device for which the free list will be created.
+ * @param num[in]    Index of the virtqueue for which the free list will be
+ *                   created.
+ * @param size[in]   Number of descriptors on the free list. The free list will
+ *                   contain descriptors starting from 0 to \a size - 1.
+ * @param head[out]  Variable that will hold the VIRTIO descriptor at the head
+ *                   of the free list.
+ */
+void virtio_create_desc_free_list(virtio_dev_t *vdev, uint16_t num,
+    uint16_t size, uint16_t *head)
+{
+	for (unsigned i = 0; i < size; i++) {
+		virtio_virtq_desc_set(vdev, num, i, 0, 0,
+		    VIRTQ_DESC_F_NEXT, (i + 1 == size) ? -1U : i + 1);
+	}
+	*head = 0;
+}
+
+/** Allocate a descriptor from the free list
+ *
+ * @param vdev[in]      VIRTIO device with the free list.
+ * @param num[in]       Index of the virtqueue with free list.
+ * @param head[in,out]  Head of the free list.
+ *
+ * @return  Allocated descriptor or 0xFFFF if the list is empty.
+ */
+uint16_t virtio_alloc_desc(virtio_dev_t *vdev, uint16_t num, uint16_t *head)
+{
+	virtq_t *q = &vdev->queues[num];
+	fibril_mutex_lock(&q->lock);
+	uint16_t descno = *head;
+	if (descno != (uint16_t) -1U)
+		*head = virtio_virtq_desc_get_next(vdev, num, descno);
+	fibril_mutex_unlock(&q->lock);
+	return descno;
+}
+
+/** Free a descriptor into the free list
+ *
+ * @param vdev[in]      VIRTIO device with the free list.
+ * @param num[in]       Index of the virtqueue with free list.
+ * @param head[in,out]  Head of the free list.
+ * @param descno[in]    The freed descriptor.
+ */
+void virtio_free_desc(virtio_dev_t *vdev, uint16_t num, uint16_t *head,
+    uint16_t descno)
+{
+	virtq_t *q = &vdev->queues[num];
+	fibril_mutex_lock(&q->lock);
+	virtio_virtq_desc_set(vdev, num, descno, 0, 0, VIRTQ_DESC_F_NEXT,
+	    *head);
+	*head = descno;
+	fibril_mutex_unlock(&q->lock);
+}
+
 
 void virtio_virtq_produce_available(virtio_dev_t *vdev, uint16_t num,
