Ehci hand-off
ASRock X99 and USB 3.0/2.0 and the EHCI/xHCI host controllers
I am having a bit of a frustrating problem related to USB on the ASRock X99 Extreme4 motherboard across both internal USB headers and external USB ports. I suspect this is the same across all of the ASRock Extreme series. In my case, attaching a USB device through virtualbox is what really brought this to my attention because I could only get devices to properly connect (and stay connected without errors) to the guest when connected through a USB 1.1 hub (IOGear GUH174), but then speed suffered substantially as a result. I also experienced various device compatibility issues which worked without issue on my older system (and work when I disable USB 3.0).
When I purchased this motherboard, I expected the USB 2.0 (black) ports to be connected to the EHCI USB host controller when USB 3.0 for the blue ports is enabled. Unfortunately, it seems that when USB 3.0 is enabled, ALL ports are connected to the xHCI host controller and when it is disabled, ALL ports are connected to the EHCI host controller and I only get 30MBps transfer speeds on USB 3.0 devices as a result. Both the EHCI and xHCI controllers are available as devices when USB 3.0 is enabled, but no USB ports get attached through the EHCI controller. When USB 2.0 is enabled, the xHCI device is no longer present.
Is it technically possible to tweak the UEFI settings such that the USB 2.0 (black) ports are connected to the EHCI host controller at the same time that the USB 3.0 ports (blue) are connected to the xHCI host controller for both backward-compatibility and performance? I tried varying a few things, but trying out every combination would be a chore. If this is not possible through the existing UEFI setting combinations, is this something that ASRock would have to change in the firmware to support and is it even possible at the chipset level to support something like this? I guess I would have to open a troubleshooting ticket to submit a request like this if the settings don’t already support something like this.
UEFI: USB 3.0 Disabled All USB ports (3.0 + 2.0) are mapped through the C610/X99 chipset EHCI host controller.
UEFI: USB 3.0 Enabled All USB ports (3.0 + 2.0) are mapped through the Intel USB 3.0 extensible host controller (xHCI).
To check this in windows 7/8/8.1, open up device manager and select View | Devices by Connection. In my case (8.1), the host controller is under ACPI x64-based PC | Microsoft ACPI-compliant system | PCI Express Root Complex. Reference Intel post about how to check: Intel USB 3.0 eXtensible Host Controller Driver — How to Check Connected USB 3.0 Devices Status?
Side note: it would also be nice to have some more detail of what the different USB options actually change under the covers in some posts or supporting documentation. Smart Auto vs Auto vs Enabled? USB Compatibility Patch?
Принцип работы
Всем пользователям персонального компьютера, наверное, прекрасно известна шина USB, которая предоставляет возможность для подключения разнообразных периферийных устройств Plug-and-Play. Спецификация 2.0 шины, увидевшая свет в 2000 г., позволила устройствам передавать данные по ней с высокой скоростью – до 480 Мбит/c.
Работой USB управляет контроллер, расположенный на материнской плате. В частности, для реализации возможностей USB спецификации 2.0 был разработан контроллер шины, получивший название EHCI (Enhanced Host Controller Interface, расширенный интерфейс хост-контроллера).
В большинстве современных операционных систем существуют драйверы, которые позволяют ОС самостоятельно управлять контроллером USB. Однако до загрузки операционной системы контроллером данной шины управляет не сама ОС, а БИОС. Управление контроллером шины до загрузки может понадобиться, в частности, для использования накопителей USB, а также устройств ввода-вывода, таких, как мышь и клавиатура. Во время загрузки операционной системы осуществляется передача управления шиной от БИОС к ОС. Для этой цели в контроллере EHCI предусмотрен специальный механизм.
В старых операционных системах, например, в операционных системах, более ранних, чем Windows XP, существовали проблемы с передачей управления контроллером USB 2.0 от BIOS к операционной системе. Эти проблемы могли приводить к тому, что шиной могли управлять одновременно и драйвер BIOS, и драйвер ОС. Излишне говорить, что подобная ситуация нередко приводила к ошибкам в работе устройств, подключаемых к шине, вплоть до зависания ОС и появления «экрана смерти».
Описываемая опция запрещает передачу управления от BIOS к OC, что исключает конфликты, которые могут возникнуть при работе устройств USB. Данная проблема были исправлена с выходом обновления Windows XP – Service Pack 2. Кроме того, от этой проблемы были избавлены и последующие версии Windows, поэтому при использовании современных версий операционных систем Windows надобность во включении этой опции отпадает.
Опцию обычно можно найти в BIOS Setup в специальном разделе, отведенном для настройки параметров USB, который может называться USB Configuration (Конфигурация USB), или иметь подобное этому название.