Index: uspace/drv/bus/usb/ohci/root_hub.c
===================================================================
--- uspace/drv/bus/usb/ohci/root_hub.c	(revision 2963a0dbe97de3f8a4205b4f7af0995a193112ad)
+++ uspace/drv/bus/usb/ohci/root_hub.c	(revision b25199bc69eed1b4bd7db431c481b362c5b8fef7)
@@ -487,5 +487,6 @@
 	case USB_DESCTYPE_HUB:
 		usb_log_debug2("USB_DESCTYPE_HUB\n");
-		/* Hub descriptor was generated locally */
+		/* Hub descriptor was generated locally.
+		 * Class specific request. */
 		TRANSFER_END_DATA(request, instance->descriptors.hub,
 		    instance->hub_descriptor_size);
@@ -493,5 +494,7 @@
 	case USB_DESCTYPE_DEVICE:
 		usb_log_debug2("USB_DESCTYPE_DEVICE\n");
-		/* Device descriptor is shared (No one should ask for it) */
+		/* Device descriptor is shared
+		 * (No one should ask for it, as the device is already setup)
+		 * Standard USB device request. */
 		TRANSFER_END_DATA(request, &ohci_rh_device_descriptor,
 		    sizeof(ohci_rh_device_descriptor));
@@ -500,5 +503,5 @@
 		usb_log_debug2("USB_DESCTYPE_CONFIGURATION\n");
 		/* Start with configuration and add others depending on
-		 * request size */
+		 * request size. Standard USB request. */
 		TRANSFER_END_DATA(request, &instance->descriptors,
 		    instance->descriptors.configuration.total_length);
@@ -507,5 +510,6 @@
 		usb_log_debug2("USB_DESCTYPE_INTERFACE\n");
 		/* Use local interface descriptor. There is one and it
-		 * might be modified */
+		 * might be modified. Hub driver should not ask or this
+		 * descriptor as it is not part of standard requests set. */
 		TRANSFER_END_DATA(request, &instance->descriptors.interface,
 		    sizeof(instance->descriptors.interface));
@@ -513,5 +517,7 @@
 	case USB_DESCTYPE_ENDPOINT:
 		/* Use local endpoint descriptor. There is one
-		 * it might have max_packet_size field modified*/
+		 * it might have max_packet_size field modified. Hub driver
+		 * should not ask for this descriptor as it is not part
+		 * of standard requests set. */
 		usb_log_debug2("USB_DESCTYPE_ENDPOINT\n");
 		TRANSFER_END_DATA(request, &instance->descriptors.endpoint,
@@ -658,8 +664,9 @@
 		usb_log_error("Invalid HUB set feature request.\n");
 		TRANSFER_END(request, ENOTSUP);
+	//TODO: Consider standard USB requests: REMOTE WAKEUP, ENDPOINT STALL
 	default:
 		usb_log_error("Invalid set feature request type: %d\n",
 		    setup_request->request_type);
-		TRANSFER_END(request, EINVAL);
+		TRANSFER_END(request, ENOTSUP);
 	}
 }
@@ -703,8 +710,9 @@
 			TRANSFER_END(request, EOK);
 		}
+	//TODO: Consider standard USB requests: REMOTE WAKEUP, ENDPOINT STALL
 	default:
 		usb_log_error("Invalid clear feature request type: %d\n",
 		    setup_request->request_type);
-		TRANSFER_END(request, EINVAL);
+		TRANSFER_END(request, ENOTSUP);
 	}
 }
@@ -777,15 +785,27 @@
 
 	case USB_DEVREQ_SET_ADDRESS:
-		usb_log_debug("USB_DEVREQ_SET_ADDRESS\n");
+		usb_log_debug("USB_DEVREQ_SET_ADDRESS: %u\n",
+		    setup_request->value);
+		if (uint16_usb2host(setup_request->value) > 127)
+			TRANSFER_END(request, EINVAL);
+
 		instance->address = setup_request->value;
 		TRANSFER_END(request, EOK);
 
 	case USB_DEVREQ_SET_CONFIGURATION:
-		usb_log_debug("USB_DEVREQ_SET_CONFIGURATION\n");
-		/* We don't need to do anything */
+		usb_log_debug("USB_DEVREQ_SET_CONFIGURATION: %u\n",
+		    setup_request->value);
+		/* We have only one configuration, it's number is 1 */
+		if (uint16_usb2host(setup_request->value) != 1)
+			TRANSFER_END(request, EINVAL);
 		TRANSFER_END(request, EOK);
 
-	case USB_DEVREQ_SET_DESCRIPTOR: /* Not supported by OHCI RH */
+	/* Both class specific and std is optional for hubs */
+	case USB_DEVREQ_SET_DESCRIPTOR:
+	/* Hubs have only one interface GET/SET is not supported */
+	case USB_DEVREQ_GET_INTERFACE:
+	case USB_DEVREQ_SET_INTERFACE:
 	default:
+		/* Hub class GET_STATE(2) falls in here too. */
 		usb_log_error("Received unsupported request: %d.\n",
 		    setup_request->request);
