// Copyright 2020 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 simple_intel;

using fuchsia.acpi;
using fuchsia.hardware.pci;
using fuchsia.pci;
using fuchsia.hardware.sysmem;

primary node "pci" {
  fuchsia.hardware.pci.Service == fuchsia.hardware.pci.Service.ZirconTransport;
  fuchsia.BIND_PCI_VID == fuchsia.pci.BIND_PCI_VID.INTEL;
  fuchsia.BIND_PCI_CLASS == fuchsia.pci.BIND_PCI_CLASS.DISPLAY;

  // Reject all device IDs that i915 binds to as well. This is necessary
  // because the simple-intel driver binds to the FIDL node published by PCI,
  // but i915 binds to the banjo node.
  // TODO(https://fxbug.dev/42171012): Remove this once i915 uses FIDL as well.
  fuchsia.BIND_PCI_DID != 0x191b;
  fuchsia.BIND_PCI_DID != 0x1912;
  fuchsia.BIND_PCI_DID != 0x191d;
  fuchsia.BIND_PCI_DID != 0x1902;
  fuchsia.BIND_PCI_DID != 0x1916;
  fuchsia.BIND_PCI_DID != 0x191e;
  fuchsia.BIND_PCI_DID != 0x1906;
  fuchsia.BIND_PCI_DID != 0x190b;
  fuchsia.BIND_PCI_DID != 0x1926;
  fuchsia.BIND_PCI_DID != 0x1927;
  fuchsia.BIND_PCI_DID != 0x1923;
  fuchsia.BIND_PCI_DID != 0x193b;
  fuchsia.BIND_PCI_DID != 0x192d;
  fuchsia.BIND_PCI_DID != 0x193d;
  fuchsia.BIND_PCI_DID != 0x5916;
  fuchsia.BIND_PCI_DID != 0x591c;
  fuchsia.BIND_PCI_DID != 0x591e;
  fuchsia.BIND_PCI_DID != 0x591b;
  fuchsia.BIND_PCI_DID != 0x5912;
  fuchsia.BIND_PCI_DID != 0x5926;
  fuchsia.BIND_PCI_DID != 0x5906;
  fuchsia.BIND_PCI_DID != 0x5927;
  fuchsia.BIND_PCI_DID != 0x5902;
  fuchsia.BIND_PCI_DID != 0x591a;
  fuchsia.BIND_PCI_DID != 0x591d;
  fuchsia.BIND_PCI_DID != 0x3ea5;
  fuchsia.BIND_PCI_DID != 0x9a49;
  fuchsia.BIND_PCI_DID != 0x9a78;
  fuchsia.BIND_PCI_DID != 0x9a40;
  fuchsia.BIND_PCI_DID != 0x9a60;
  fuchsia.BIND_PCI_DID != 0x9a68;
  fuchsia.BIND_PCI_DID != 0x9a70;
}

optional node "sysmem" {
  fuchsia.hardware.sysmem.Service == fuchsia.hardware.sysmem.Service.ZirconTransport;
}

optional node "acpi" {
  fuchsia.BIND_PROTOCOL == fuchsia.acpi.BIND_PROTOCOL.DEVICE;
}
