Home
Microsoft

USB Type-C Connector System Software Interface (UCSI) defines the commands and notifications to manage a platform that exposes one or more USB Type-C connectors. The combination of hardware and firmware and any vendor-provided OS software that provides this interface is referred to as the Platform Policy Manager or the PPM. UCSI PPM is typically implemented by an Embedded Controller (EC) which may either implement Power Delivery (PD) state machines or interface a PD controller. An OEM may interface with EC over the physical transport of their choice. Historically, this transport has been ACPI but we have recently seen an upsurge of PCI, UART, I2C, USB being adopted as means to connect an EC in the system.

Windows has for several releases had inbox support for UCSI over ACPI using UcmUcsi.sys. This was a client driver to USB Connector Manager Class Extension or UcmCx. However, starting with the RS5 release (or Windows 10 October 2018 update), Windows includes UCSI Class Extension (UCSI Cx, binary name: UcmUcsiCx.sys) which is a transport agnostic implementation of UCSI logic. This update also includes inbox ACPI client (binary name: UcmUcsiAcpiClient.sys) support for this class extension. UCSI_old_new_architecture.jpg

UCSI Cx implements the OPM (OS Policy Manager) state machines that decide which UCSI command to be sent to the PPM and when. The client to this class extension is expected to be thin and has the following responsibilities:

  • Initialize connectors with UCSI Cx.
  • Notify UCSI Cx of start and stop of the PPM using DDIs.
  • Receive a UCSI data block from the Cx using IOCTLs and send it to the EC over the transport that it supports.
  • Relay a UCSI notification from EC to the Cx.
  • Become the power policy owner for the driver.

 If you are bringing up support for a system that has UCSI EC connected over a non-ACPI transport, we would recommend you develop your transport specific USCI Cx client driver. This document is a good place to start.