blob: 585218db0b549d5068a6526e7ea8c5e33feaf210 [file] [log] [blame]
// 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;
}