My name is Jane Lawrence, and in this blog post, Philip Ries and I will describe the details of the Busport-0048 Windows Logo Kit (WLK) requirement that has been in effect since Dec 1, 2010. The Busport-0048 requirement states “xHCI add-in cards must map USB 3.0 and USB 2.0 ports consistently”. The requirement targets manufacturers of USB xHCI add-in host controllers. An add-in host controller is a card that is not integrated onto the motherboard. In this blog post, we will describe a case study that includes two theoretical examples of the add-in controller designs (one approved and the other with the disallowed configuration).
The goal of the Busport-0048 requirement is for add-in host controllers to provide information to the USB driver stack about the ports available on the controller in a consistent way. Based on the information, the USB driver stack manages the ports appropriately. For systems with embedded controllers, there is a similar WLK requirement (Sysfund-226); however, the method for obtaining the information is different because integrated controllers use Advanced Configuration and Power Interface (ACPI) to define port mapping. The xHCI specification outlines an example of an embedded controller that uses ACPI information to communicate the port mapping. The example does not provide details about how that mapping should be reported by add-in controllers, which is the focus of our post.
If your add-in host controller does not contain an internal hub (integrated or embedded, defined in the xHCI specification), then you should follow the xHCI specification to map the ports. In certain scenarios, there might be a need to design add-in cards with hubs to allow for more external ports or as a way to support USB Low, Full and High Speed. . The Busport-0048 requirement describes an intuitive default mapping that allows internal hubs. In the absence of ACPI, that mapping should be followed by hardware and assumed by software. ACPI is required for describing more complex port mapping such as:
The design to meet the Busport-0048 requirement becomes complex, if your add-in host controller implements integrated hubs, embedded hubs, or both. In those cases, consider the following:
To begin mapping ports to connectors, provide a default mapping as follows for your reference:
This case study describes the example outlined in Appendix D in the xHCI specification.
Figure 1: Disallowed Configuration for an Add-in Host Controller
The port mapping illustrated in Figure 1 violates the Busport-0048 requirement because of the following reasons:
To avoid software malfunction, the port mappings (in the example) must be described in ACPI when the controller is embedded in the system.
The following diagram modifies the previous example and shows a valid port mapping.
Figure 2: Allowed Configuration for an Add-in Host Controller
In Figure 2, the port mappings meet the Busport-0048 requirement.
Another thing to point out is that the upstream ports of the embedded USB 3.0 hub should be marked as non-removable by setting a field in the hub descriptor of the integrated hub. For the USB 2.0 portion, set the DeviceRemovable field of the hub descriptor; for the USB 3.0 portion, set the DR field of the PORTSC register for HCP3.
The Windows Logo Kit team is updating the details of the Busport-0048 requirement to include the full design details for add-in host controllers with internal hubs. We encourage you to read the final requirement for additional information. In the meantime, we hope this post has provided more clarity about how to ensure that your design complies with the requirement.
Thanks for reading!
Jane Lawrence (USB WLK Program Manager) & Philip Ries (USB Developer)