| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| composite xhci; |
| |
| using fuchsia.acpi; |
| using fuchsia.hardware.pci; |
| using fuchsia.hardware.usb.phy; |
| using fuchsia.hardware.platform.device; |
| using fuchsia.pci; |
| using fuchsia.pci.serial; |
| using fuchsia.pci.serial.usb; |
| using fuchsia.platform; |
| using fuchsia.hardware.sysmem; |
| using fuchsia.usb.phy; |
| using fuchsia.devicetree; |
| |
| primary node "pdev" { |
| if fuchsia.hardware.pci.Service == fuchsia.hardware.pci.Service.ZirconTransport { |
| // PCI binding support. |
| fuchsia.BIND_PCI_CLASS == fuchsia.pci.BIND_PCI_CLASS.SERIAL_BUS_CONTROLLER; |
| fuchsia.BIND_PCI_SUBCLASS == fuchsia.pci.serial.BIND_PCI_SUBCLASS.USB; |
| fuchsia.BIND_PCI_INTERFACE == fuchsia.pci.serial.usb.BIND_PCI_INTERFACE.XHCI; |
| } else { |
| // Platform bus support. |
| fuchsia.BIND_PLATFORM_DEV_VID == fuchsia.platform.BIND_PLATFORM_DEV_VID.GENERIC; |
| accept fuchsia.BIND_PLATFORM_DEV_DID { |
| fuchsia.platform.BIND_PLATFORM_DEV_DID.XHCI, |
| 0x02, // Only relevant to vim2, needs to be cleaned up. |
| fuchsia.platform.BIND_PLATFORM_DEV_DID.DEVICETREE, |
| } |
| if fuchsia.BIND_PLATFORM_DEV_DID == fuchsia.platform.BIND_PLATFORM_DEV_DID.DEVICETREE { |
| fuchsia.devicetree.FIRST_COMPATIBLE == "generic-xhci"; |
| } else { |
| fuchsia.BIND_PLATFORM_DEV_PID == fuchsia.platform.BIND_PLATFORM_DEV_PID.GENERIC; |
| if fuchsia.BIND_COMPOSITE != 1 { |
| if fuchsia.hardware.platform.device.Service == fuchsia.hardware.platform.device.Service.ZirconTransport { |
| true; |
| } else if fuchsia.BIND_PROTOCOL == fuchsia.platform.BIND_PROTOCOL.DEVICE { |
| true; |
| } else { |
| false; |
| } |
| } else { |
| true; |
| } |
| } |
| } |
| } |
| |
| optional node "xhci-phy" { |
| fuchsia.BIND_PLATFORM_DEV_VID == fuchsia.platform.BIND_PLATFORM_DEV_VID.GENERIC; |
| fuchsia.BIND_PLATFORM_DEV_PID == fuchsia.platform.BIND_PLATFORM_DEV_PID.GENERIC; |
| fuchsia.BIND_PLATFORM_DEV_DID == fuchsia.platform.BIND_PLATFORM_DEV_DID.XHCI; |
| if fuchsia.hardware.usb.phy.Service == fuchsia.hardware.usb.phy.Service.DriverTransport { |
| true; |
| } else if fuchsia.BIND_PROTOCOL == fuchsia.usb.phy.BIND_PROTOCOL.DEVICE { |
| true; |
| } else { |
| false; |
| } |
| } |
| |
| optional node "sysmem" { |
| fuchsia.hardware.sysmem.Service == fuchsia.hardware.sysmem.Service.ZirconTransport; |
| } |
| |
| optional node "acpi" { |
| fuchsia.BIND_PROTOCOL == fuchsia.acpi.BIND_PROTOCOL.DEVICE; |
| } |