Index: uspace/drv/vhc/hub/hub.c
===================================================================
--- uspace/drv/vhc/hub/hub.c	(revision cea3fca1b5fe5acf120cd2cfce8a7be20ef69281)
+++ uspace/drv/vhc/hub/hub.c	(revision 70e5ad5772087eb14245a665e4ff2827fb0091c7)
@@ -31,5 +31,5 @@
  */
 /** @file
- * @brief Virtual USB hub.
+ * @brief Representation of an USB hub (implementation).
  */
 #include <usb/classes/classes.h>
@@ -338,4 +338,11 @@
 }
 
+/** Create hub status change bitmap.
+ *
+ * @warning This function assumes that the whole bitmap fits into 8 bits.
+ *
+ * @param hub Hub in question.
+ * @return Hub status change bitmap.
+ */
 uint8_t hub_get_status_change_bitmap(hub_t *hub)
 {
@@ -361,4 +368,11 @@
  */
 
+/** Find a port in a hub.
+ *
+ * @param hub Hub in question.
+ * @param port Port index (zero based).
+ * @return Port structure.
+ * @retval NULL Invalid port index.
+ */
 static hub_port_t *get_hub_port(hub_t *hub, size_t port)
 {
@@ -370,4 +384,9 @@
 }
 
+/** Adds a port status change to a port.
+ *
+ * @param port The port with status change.
+ * @param change Change to be added to the status.
+ */
 static void set_port_status_change(hub_port_t *port,
     hub_status_change_t change)
@@ -377,4 +396,9 @@
 }
 
+/** Clears a port status change on a port.
+ *
+ * @param port The port with status change.
+ * @param change Change to be removed from the status.
+ */
 static void clear_port_status_change(hub_port_t *port,
     uint16_t change)
@@ -384,12 +408,23 @@
 }
 
+/** Structure for automatic (delayed) port state change. */
 struct delay_port_state_change {
+	/** Delay in microseconds. */
 	suseconds_t delay;
+	/** Old state of the port. */
 	hub_port_state_t old_state;
+	/** New state of the port. */
 	hub_port_state_t new_state;
+	/** Port index (zero based). */
 	size_t port;
+	/** Hub. */
 	hub_t *hub;
 };
 
+/** Fibril responsible for delayed port state change.
+ *
+ * @param arg Pointer to delay_port_state_change.
+ * @return Always EOK.
+ */
 static int set_port_state_delayed_fibril(void *arg)
 {
@@ -416,4 +451,15 @@
 }
 
+/** Change port state with a delay.
+ *
+ * @warning If the port state changes during the waiting phase, the state
+ * is not changed.
+ *
+ * @param hub Hub in question.
+ * @param port_index Port index (zero based).
+ * @param delay_time_ms Delay time in miliseconds.
+ * @param old_state Old (current) state of the port.
+ * @param new_state New state of the port.
+ */
 static void set_port_state_delayed(hub_t *hub, size_t port_index,
     suseconds_t delay_time_ms,
Index: uspace/drv/vhc/hub/hub.h
===================================================================
--- uspace/drv/vhc/hub/hub.h	(revision cea3fca1b5fe5acf120cd2cfce8a7be20ef69281)
+++ uspace/drv/vhc/hub/hub.h	(revision 70e5ad5772087eb14245a665e4ff2827fb0091c7)
@@ -31,5 +31,5 @@
  */
 /** @file
- * @brief
+ * @brief Representation of an USB hub.
  */
 #ifndef VHC_HUB_HUB_H_
@@ -72,7 +72,11 @@
 /** Hub port information. */
 typedef struct {
+	/** Custom pointer to connected device. */
 	void *connected_device;
+	/** Port index (one based). */
 	size_t index;
+	/** Port state. */
 	hub_port_state_t state;
+	/** Status change bitmap. */
 	uint16_t status_change;
 } hub_port_t;
@@ -80,6 +84,9 @@
 /** Hub device type. */
 typedef struct {
+	/** Hub ports. */
 	hub_port_t ports[HUB_PORT_COUNT];
+	/** Custom hub data. */
 	void *custom_data;
+	/** Access guard to the whole hub. */
 	fibril_mutex_t guard;
 } hub_t;
Index: uspace/drv/vhc/hub/virthub.c
===================================================================
--- uspace/drv/vhc/hub/virthub.c	(revision cea3fca1b5fe5acf120cd2cfce8a7be20ef69281)
+++ uspace/drv/vhc/hub/virthub.c	(revision 70e5ad5772087eb14245a665e4ff2827fb0091c7)
@@ -72,4 +72,5 @@
 };
 
+/** Hub descriptor. */
 hub_descriptor_t hub_descriptor = {
 	.length = sizeof(hub_descriptor_t),
@@ -140,4 +141,9 @@
 };
 
+/** Initializes virtual hub device.
+ *
+ * @param dev Virtual USB device backend.
+ * @return Error code.
+ */
 int virthub_init(usbvirt_device_t *dev)
 {
@@ -163,4 +169,10 @@
 }
 
+/** Connect a device to a virtual hub.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param conn Device to be connected.
+ * @return Port device was connected to.
+ */
 int virthub_connect_device(usbvirt_device_t *dev, virtdev_connection_t *conn)
 {
@@ -177,4 +189,10 @@
 }
 
+/** Disconnect a device from a virtual hub.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param conn Device to be disconnected.
+ * @return Error code.
+ */
 int virthub_disconnect_device(usbvirt_device_t *dev, virtdev_connection_t *conn)
 {
@@ -185,4 +203,5 @@
 
 	hub_acquire(hub);
+	/* TODO: implement. */
 	hub_release(hub);
 
@@ -190,4 +209,10 @@
 }
 
+/** Whether trafic is propagated to given device.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param conn Connected device.
+ * @return Whether port is signalling to the device.
+ */
 bool virthub_is_device_enabled(usbvirt_device_t *dev, virtdev_connection_t *conn)
 {
@@ -209,4 +234,10 @@
 }
 
+/** Format status of a virtual hub.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param[out] status Hub status information.
+ * @param[in] len Size of the @p status buffer.
+ */
 void virthub_get_status(usbvirt_device_t *dev, char *status, size_t len)
 {
Index: uspace/drv/vhc/hub/virthub.h
===================================================================
--- uspace/drv/vhc/hub/virthub.h	(revision cea3fca1b5fe5acf120cd2cfce8a7be20ef69281)
+++ uspace/drv/vhc/hub/virthub.h	(revision 70e5ad5772087eb14245a665e4ff2827fb0091c7)
@@ -31,5 +31,5 @@
  */
 /** @file
- * @brief
+ * @brief USB hub as a virtual USB device.
  */
 #ifndef VHC_HUB_VIRTHUB_H_
Index: uspace/drv/vhc/hub/virthubops.c
===================================================================
--- uspace/drv/vhc/hub/virthubops.c	(revision cea3fca1b5fe5acf120cd2cfce8a7be20ef69281)
+++ uspace/drv/vhc/hub/virthubops.c	(revision 70e5ad5772087eb14245a665e4ff2827fb0091c7)
@@ -86,5 +86,11 @@
 }
 
-
+/** Handle ClearHubFeature request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_clear_hub_feature(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -94,4 +100,11 @@
 }
 
+/** Handle ClearPortFeature request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_clear_port_feature(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -167,4 +180,11 @@
 }
 
+/** Handle GetBusState request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_get_bus_state(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -174,4 +194,11 @@
 }
 
+/** Handle GetDescriptor request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_get_descriptor(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -188,4 +215,11 @@
 }
 
+/** Handle GetHubStatus request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_get_hub_status(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -198,4 +232,11 @@
 }
 
+/** Handle GetPortStatus request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_get_port_status(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -213,4 +254,11 @@
 }
 
+/** Handle SetHubFeature request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_set_hub_feature(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -220,4 +268,11 @@
 }
 
+/** Handle SetPortFeature request.
+ *
+ * @param dev Virtual device representing the hub.
+ * @param request The SETUP packet of the control request.
+ * @param data Extra data (when DATA stage present).
+ * @return Error code.
+ */
 static int req_set_port_feature(usbvirt_device_t *dev,
     usb_device_request_setup_packet_t *request,
@@ -265,17 +320,28 @@
 
 
-
+/** IN class request. */
 #define CLASS_REQ_IN(recipient) \
 	USBVIRT_MAKE_CONTROL_REQUEST_TYPE(USB_DIRECTION_IN, \
 	USBVIRT_REQUEST_TYPE_CLASS, recipient)
+/** OUT class request. */
 #define CLASS_REQ_OUT(recipient) \
 	USBVIRT_MAKE_CONTROL_REQUEST_TYPE(USB_DIRECTION_OUT, \
 	USBVIRT_REQUEST_TYPE_CLASS, recipient)
 
+/** Recipient: other. */
 #define REC_OTHER USBVIRT_REQUEST_RECIPIENT_OTHER
+/** Recipient: device. */
 #define REC_DEVICE USBVIRT_REQUEST_RECIPIENT_DEVICE
+/** Direction: in. */
 #define DIR_IN USB_DIRECTION_IN
+/** Direction: out. */
 #define DIR_OUT USB_DIRECTION_OUT
 
+/** Create a class request.
+ *
+ * @param direction Request direction.
+ * @param recipient Request recipient.
+ * @param req Request code.
+ */
 #define CLASS_REQ(direction, recipient, req) \
 	.request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(direction, \
@@ -283,4 +349,10 @@
 	.request = req
 
+/** Create a standard request.
+ *
+ * @param direction Request direction.
+ * @param recipient Request recipient.
+ * @param req Request code.
+ */
 #define STD_REQ(direction, recipient, req) \
 	.request_type = USBVIRT_MAKE_CONTROL_REQUEST_TYPE(direction, \
