Generally, Intel has two EHCI and one xhci on the motherboard that supports USB 3.0 host controllers. This type of motherboard generally has 14 ports, and port 0-3 is shared by EHCI and xhci, that is, port 0-3 has four switches, and the control registers of these four switches are located in the xhci PCI (PCI-E) configuration space, the four switches on the PC are configured in the BIOS. Because many boards are not enabled by default, after you buy a computer, although the computer has a blue USB port, however, if you want to connect your blue USB port to a speeding device, make sure that your motherboard is integrated with the xhci controller, the xhci port routing function is enabled in the bios, as shown in figure 1.
In Linux, EHCI and xhci port 0-3 can be switched in the kernel. For code, see the usb_enable_xhci_ports () and usb_disable_xhci_ports () functions in the pci-quirks.c.
Intel also provides a port switch driver in Windows. The driver names are iusb3hcs. sys and iusb3hcs. inf (Intel USB 3.0 host controller switch driver ).
Figure 1
As shown in figure 2 of the xhci controller's roothub configuration, the xhci controller actually has two roothub instances, one of which is roothub 2.0 and the other is roothub 3.0. Finally, the computer manufacturers decided to export several USB 2.0 and USB 3.0 ports.
Because of this xhci feature, in the Linux kernel, if xhci controller is found on the PCI (PCI-E) bus, the driver registers two roothub controllers to the USB core subsystem, one of which is roothub 2.0, one is the roothub 3.0. For code, see the xhci_pci_probe () function in the xhci-pci.c. This code was written by an Intel girl named Sarah sharp, a super Nb.
Figure 2