Skip to content

Commit 1c0db87

Browse files
authored
Merge pull request #3064 from TimShererWithAquent/us500250-13
Freshness Edit: Windows hardware drivers: USB Type-C® connector system software interface (UCSI) driver
2 parents db09f1f + 2712f55 commit 1c0db87

2 files changed

Lines changed: 39 additions & 39 deletions

File tree

3.41 KB
Loading
Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
---
22
title: USB-C Connector System Software Interface (UCSI) Driver
3-
description: Microsoft provides a USB Type-C Connector System Software Interface (UCSI) specification-compliant driver for an Advanced Configuration and Power Interface (ACPI) transport.
4-
ms.date: 12/04/2024
3+
description: Learn about the USB Type-C Connector System Software Interface specification-compliant driver for an Advanced Configuration and Power Interface transport.
4+
ms.date: 11/03/2025
55
ms.topic: concept-article
6+
#customer intent: As a driver developer, I want to understand about the UCSI specification-compliant driver to support an embedded controller with ACPI transport.
67
---
78

89
# USB Type-C® connector system software interface (UCSI) driver
@@ -11,33 +12,29 @@ Microsoft provides a USB Type-C® Connector System Software Interface (UCSI)
1112

1213
If your UCSI-compliant hardware uses a transport other than ACPI, you need to [write a UCSI client driver](write-a-ucsi-driver.md).
1314

14-
## Drivers for supporting USB Type-C components for systems with embedded controllers
15+
## Drivers to support USB Type-C components for systems with embedded controllers
1516

1617
Here's an example of a system with an embedded controller.
1718

1819
:::image type="content" source="images/ucsiarch.png" alt-text="Diagram of USB Type-C software components.":::
1920

20-
In the preceding example, USB role switching is handled in the firmware of the system and USB Role Switch driver stack isn't loaded. In another system, the driver stack might not get loaded because dual role isn't supported.
21+
USB role switching is handled in the firmware of the system. The USB Role Switch driver stack isn't loaded. In another system, the driver stack might not get loaded because dual role isn't supported.
2122

22-
In the preceding image,
23+
- USB device-side drivers
2324

24-
- **USB device-side drivers**
25+
The [USB device-side drivers](usb-device-side-drivers-in-windows.md) service the function/device/peripheral. The USB function controller class extension supports Media Transfer Protocol (MTP) and charging using BC 1.2 chargers. Microsoft provides in-box client drivers for Synopsys USB 3.0 and ChipIdea USB 2.0 controllers. You can write a custom client driver for your function controller by using [USB function controller client driver programming interfaces](/previous-versions/windows/hardware/drivers/mt188010(v=vs.85)). For more information, see [Developing Windows drivers for USB function controllers](developing-windows-drivers-for-usb-function-controllers.md).
2526

26-
The [USB device-side drivers](usb-device-side-drivers-in-windows.md) service the function/device/peripheral. The USB function controller class extension supports MTP (Media Transfer Protocol) and charging using BC 1.2 chargers. Microsoft provides in-box client drivers for Synopsys USB 3.0 and ChipIdea USB 2.0 controllers. You can write a custom client driver for your function controller by using [USB function controller client driver programming interfaces](/previous-versions/windows/hardware/drivers/mt188010(v=vs.85)). For more information, see [Developing Windows drivers for USB function controllers](developing-windows-drivers-for-usb-function-controllers.md).
27+
The SoC vendor might provide you with the USB function lower filter driver for charger detection. If you're using the in-box Synopsys USB 3.0 or ChipIdea USB 2.0 client driver, you can implement your own filter driver.
2728

28-
The SoC vendor might provide you with the USB function lower filter driver for charger detection. You can implement your own filter driver if you're using the in-box Synopsys USB 3.0 or ChipIdea USB 2.0 client driver.
29+
- USB host-side drivers
2930

30-
- **USB host-side drivers**
31+
The USB host-side drivers are a set of drivers that work with EHCI or XHCI compliant USB host controllers. If the role-switch driver enumerates the host role, the drivers are loaded. If your host controller isn't specification-compliant, you can write a custom driver by using [USB host controller extension programming interface](/previous-versions/windows/hardware/drivers/mt188009(v=vs.85)). For more information, see [Developing Windows drivers for USB host controllers](developing-windows-drivers-for-usb-host-controllers.md).
3132

32-
The USB host-side drivers are a set of drivers that work with EHCI or XHCI compliant USB host controllers. The drivers are loaded if the role-switch driver enumerates the host role. If your host controller isn't specification-compliant, then you can write a custom driver by using [USB host controller extension (UCX) programming interface](/previous-versions/windows/hardware/drivers/mt188009(v=vs.85)). For information, see [Developing Windows drivers for USB host controllers](developing-windows-drivers-for-usb-host-controllers.md).
33+
- USB connector manager
3334

34-
Not [all USB devices classes](supported-usb-classes.md) are supported on Windows 10 Mobile.
35+
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](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb-type-c-ucsi-spec.html). The specification describes the capabilities of UCSI. It explains the registers and data structures, for hardware component designers, system builders, and device driver developers.
3536

36-
- **USB connector manager**
37-
38-
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](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb-type-c-ucsi-spec.html). The specification describes the capabilities of UCSI and explains the registers and data structures, for hardware component designers, system builders, and device driver developers.
39-
40-
This driver is intended for systems with embedded controllers. This driver is a client to the Microsoft-provided USB connector manager class extension driver (Ucmcx.sys). 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.
37+
This driver is intended for systems with embedded controllers. This driver is a client to the Microsoft-provided USB connector manager class extension driver (Ucmcx.sys). 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.
4138

4239
## UCSI commands required by Windows
4340

@@ -48,21 +45,23 @@ In addition to the commands marked as **Required**, Windows requires these comma
4845
- GET_ALTERNATE_MODES
4946
- GET_CAM_SUPPORTED
5047
- GET_PDOS
51-
- SET_NOTIFICATION_ENABLE: The system or controller must support the following notifications within SET_NOTIFICATION_ENABLE:
48+
- SET_NOTIFICATION_ENABLE: The system or controller must support the following notifications in SET_NOTIFICATION_ENABLE:
5249
- Supported Provider Capabilities Change
5350
- Negotiated Power Level Change
54-
- GET_CONNECTOR_STATUS: The system or controller must support these connector status changes within GET_CONNECTOR_STATUS:
51+
- GET_CONNECTOR_STATUS: The system or controller must support these connector status changes in GET_CONNECTOR_STATUS:
5552
- Supported Provider Capabilities Change
5653
- Negotiated Power Level Change
5754

58-
For information about the tasks required to implement UCSI in the BIOS, see [Intel BIOS Implementation of UCSI](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/bios-implementation-of-ucsi.html).
55+
For more information, see [Intel BIOS Implementation of UCSI](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/bios-implementation-of-ucsi.html).
5956

6057
## UCM-UCSI ACPI device for UCSI 2.0 and greater
6158

62-
Starting in Windows 11, version 22H2 September Update, the Windows UCM-UCSI ACPI device drivers support UCSI specification version 2.0 and 2.1. The UCSI specification 2.0 has breaking changes in the memory mapping of its data structures as defined in [UCSI specification Table 3-1 Data Structures](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb-type-c-ucsi-spec.html). To maintain backward compatibility, Windows requires the UCSI PPM of specification version 2.0 or greater to implement the following _DSM function under the **UCM-UCSI ACPI device** in ACPI firmware and return a nonzero value to indicate that UCSI OPM should follow the reported UCSI specification version.
59+
Starting in Windows 11, version 22H2 September Update, the Windows UCM-UCSI ACPI device drivers support UCSI specification version 2.0 and 2.1. The UCSI specification 2.0 has breaking changes in the memory mapping of its data structures as defined in [UCSI specification Table 3-1 Data Structures](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb-type-c-ucsi-spec.html).
60+
61+
To maintain backward compatibility, Windows requires the UCSI PPM of specification version 2.0 or greater to implement the following _DSM function under the **UCM-UCSI ACPI device** in ACPI firmware and return a nonzero value to indicate that UCSI OPM should follow the reported UCSI specification version.
6362

6463
- **Arg0**: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
65-
- **Arg1**: Revision ID = 0
64+
- **Arg1**: Revision ID = 0
6665
- **Arg2**: Function index = 5
6766
- **Arg3**: Empty package (not used)
6867

@@ -73,18 +72,20 @@ Return value:
7372
| UsePpmReportedUcsiVersion | Integer (32-bit) | 0x00000000 (Default): If the `VERSION` structure as defined in *UCSI specification Table 3-1 Data Structures* has the value 2.0 or greater, UCSI OPM still follows UCSI specification 1.2. Otherwise, UCSI OPM follows the UCSI specification as per the value in the `VERSION` structure. |
7473

7574
> [!NOTE]
76-
> For UCM-UCSI ACPI devices, this is a new function in an existing _DSM method. Other functions of this _DSM method should have been implemented per the [Intel BIOS implementation of UCSI](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/bios-implementation-of-ucsi.html) document. Function 0, which returns a bitmask of all the supported functions, should be updated accordingly, as well.
75+
> For UCM-UCSI ACPI devices, this function is new in an existing _DSM method. Other functions of this _DSM method should have been implemented per the [Intel BIOS implementation of UCSI](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/bios-implementation-of-ucsi.html) document. Function 0, which returns a bitmask of all the supported functions, should be updated accordingly, as well.
7776
7877
## Example flow for UCSI
7978

80-
The examples given in this section describe interaction between the USB Type-C hardware/firmware, UCSI driver, and the operating system.
79+
The examples in this section describe interaction between the USB Type-C hardware/firmware, UCSI driver, and the operating system.
8180

8281
### DRP role detection
8382

84-
1. USB Type-C hardware/firmware detects a device-attach event and the Windows 10 system DRP system initially becomes the UFP role.
85-
1. The firmware sends a notification indicating a change in the connector.
86-
1. The UCSI driver sends a ​ GET_CONNECTOR_STATUS request.
87-
1. The firmware responds that its Connect Status = 1​ and Connector Partner Type = DFP. ​
83+
1. USB Type-C hardware/firmware detects a device-attach event. The Windows 10 system DRP system initially becomes the UFP role.
84+
85+
1. The firmware sends a notification indicating a change in the connector.
86+
1. The UCSI driver sends a​ GET_CONNECTOR_STATUS request.
87+
1. The firmware responds that its Connect Status = `1`​ and Connector Partner Type = `DFP`.
88+
8889
1. The drivers in the USB function stack respond to the enumeration.
8990
1. The USB connector manager class extension recognizes that the USB function stack is loaded, so the system is in the wrong state. It tells the UCSI driver to send **Set USB Operation Role** and **Set Power Direction Role** requests to the firmware.
9091
1. USB Type-C hardware/firmware initiates the role-swap operation with the DFP​.
@@ -93,30 +94,31 @@ The examples given in this section describe interaction between the USB Type-C h
9394

9495
1. USB Type-C hardware/firmware detects that a charger is connected and negotiates a default power contract. It also observes that the charger isn't providing sufficient power to the system.
9596
1. USB Type-C hardware/firmware sets the slow charging bit.
97+
9698
1. The firmware sends a notification indicating a change in the connector.
97-
1. The UCSI driver sends a GET_CONNECTOR_STATUS request.
98-
1. The firmware responds with Connect Status = 1​, Connector Partner Type=DFP, and Battery Charging Status = Slow/Trickle.
99+
1. The UCSI driver sends a GET_CONNECTOR_STATUS request.
100+
1. The firmware responds with Connect Status = `1`​, Connector Partner Type = `DFP`, and Battery Charging Status = `Slow/Trickle`.
99101

100102
1. The USB connector manager class extension sends notification to the UI to display the charger mismatch troubleshoot message.
101103

102104
## How to test UCSI
103105

104-
There are many ways to test your UCSI implementation. To test individual commands in your UCSI BIOS/EC implementation, use UCSIControl.exe, which is provided in the [MUTT Software Pack](mutt-software-package.md). To test your complete UCSI implementation, use both the UCSI tests that can be found in the Windows Hardware Lab Kit (HLK) and the steps in the [Type-C Manual Interop Procedures](./index.md).
106+
There are many ways to test your UCSI implementation. To test individual commands in your UCSI BIOS/EC implementation, use UCSIControl.exe, which is provided in the [Microsoft USB Test Tool (MUTT) software package](mutt-software-package.md). To test your complete UCSI implementation, use both the UCSI tests that can be found in the Windows Hardware Lab Kit (HLK) and the steps in the [Type-C Manual Interop Procedures](./index.md).
105107

106108
### UCSIControl.exe
107109

108-
You can test individual commands in your UCSI BIOS/EC implementation by using UCSIControl.exe. This tool enables you to send UCSI commands to the firmware through the UCSI driver. It requires the driver to be loaded and running, and also have the test interface to the driver enabled. By default, this interface isn't enabled so as to prevent it from being accessible to unauthorized users on a retail system.
110+
You can test individual commands in your UCSI BIOS/EC implementation by using UCSIControl.exe. This tool enables you to send UCSI commands to the firmware through the UCSI driver. It requires the driver to be loaded and running. You also have the test interface to the driver enabled. By default, this interface isn't enabled so as to prevent it from being accessible to unauthorized users on a retail system.
109111

110112
1. Locate the device node in Device Manager (devmgmt.msc) named **UCSI USB Connector Manager**. The node is under the **Universal Serial Bus controllers** category.
111-
1. Select and hold (or right-click) on the device, and select **Properties** and open the **Details** tab.
112-
1. Select **Device Instance Path** from the drop-down and note the property value.
113+
1. Select and hold or right-click the device. Select **Properties** and open the **Details** tab.
114+
1. Select **Device Instance Path** from the dropdown menu and note the property value.
113115
1. Open Registry Editor (regedit.exe).
114116
1. Navigate to the device instance path under this key.
115117

116-
HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Enum\\\<device-instance-path>\\Device Parameters
118+
`HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Device Parameters`
117119

118120
1. Create a DWORD value named **TestInterfaceEnabled** and set the value to 0x1.
119-
1. Restart the device by selecting the **Disable** option on the device node in Device Manager, and then selecting **Enable**. Alternatively, you can restart the PC.
121+
1. To restart the device, on the device node in Device Manager, select **Disable**, then select **Enable**. Alternatively, you can restart the PC.
120122

121123
You can view the help by running **UcsiControl.exe /?**.
122124

@@ -136,9 +138,7 @@ Here are the common commands:
136138
| Get Connector Status | **UcsiControl.exe Send 0 010012** |
137139
| Get Error Status | **UcsiControl.exe Send 0 13** |
138140

139-
## Related topics
141+
## Related content
140142

141143
- [Architecture: USB Type-C design for a Windows system](architecture--usb-type-c-in-a-windows-system.md)
142-
- [Intel BIOS implementation of UCSI](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/bios-implementation-of-ucsi.html)
143-
- [USB Type-C Connector System Software Interface Specification](https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb-type-c-ucsi-spec.html)
144-
- [Hardware design: USB Type-C components for systems with embedded controllers](hardware-design-of-a-usb-type-c-system.md#usb-type-c-system-design-with-an-embedded-controller)
144+
- [USB Type-C system design with an embedded controller](hardware-design-of-a-usb-type-c-system.md#usb-type-c-system-design-with-an-embedded-controller)

0 commit comments

Comments
 (0)