

In addition to the commands marked as "Required", Windows requires these commands: See the UCSI specification for commands that are "Required" in all UCSI implementations. The driver handles tasks such as initiating a request to the firmware to change the data or power roles and getting information needed to provide troubleshooting messages to the user. This driver is a client to the Microsoft-provided USB connector manager class extension driver (Ucmcx.sys). This driver is intended for systems with embedded controllers. The specification describes the capabilities of UCSI and explains the registers and data structures, for hardware component designers, system builders, and device driver developers. Microsoft provides a UCSI in-box driver with Windows (UcmUcsiCx.sys) that implements the features defined in the USB Type-C Connector System Software Interface Specification. Not all USB devices classes are supported on Windows 10 Mobile. For information, see Developing Windows drivers for USB host controllers. If your host controller is not specification-compliant, then you can write a custom driver by using USB host controller extension (UCX) programming interface. The drivers are loaded if the role-switch driver enumerates the host role. The USB host-side drivers are a set of drivers that work with EHCI or XHCI compliant USB host controllers. You can implement your own filter driver if you are using the in-box Synopsys USB 3.0 or ChipIdea USB 2.0 client driver. The SoC vendor might provide you with the USB function lower filter driver for charger detection. For more information, see Developing Windows drivers for USB function controllers. You can write a custom client driver for your function controller by using USB function controller client driver programming interfaces. Microsoft provides in-box client drivers for Synopsys USB 3.0 and ChipIdea USB 2.0 controllers. The USB function controller class extension supports MTP (Media Transfer Protocol) and charging using BC 1.2 chargers. The USB device-side drivers service the function/device/peripheral. In another system, the driver stack may not get loaded because dual role is not supported.

In the preceding example, USB role switching is handled in the firmware of the system and USB Role Switch driver stack is not loaded. Here is an example of a system with an embedded controller.

Drivers for supporting USB Type-C components for systems with embedded controllers

If your UCSI-compliant hardware uses a transport other than ACPI, you need to write a UCSI client driver. If your design includes an embedded controller with ACPI transport, implement UCSI in your system's BIOS/EC and load the in-box UCSI driver (UcmUcsiCx.sys and UcmUcsiAcpiClient.sys). Microsoft provides a USB Type-C Connector System Software Interface (UCSI) specification-compliant driver for ACPI transport.
