# 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.

import("//build/bind/bind.gni")

visibility = [ "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/*" ]

# This BUILD.gn defines the Fuchsia-specific platform support library for the iwlwifi driver.

# Platform-support library for the iwlwifi driver.
source_set("platform") {
  sources = [
    "compiler.cc",
    "debug.cc",
    "device.cc",
    "ieee80211.cc",
    "irq.cc",
    "memory.cc",
    "module.cc",
    "rcu.cc",
    "task-internal.cc",
    "task.cc",
    "time.cc",
  ]
  public = [
    "compiler.h",
    "debug.h",
    "device.h",
    "ieee80211.h",
    "irq.h",
    "kernel.h",
    "memory.h",
    "module.h",
    "pci.h",
    "rcu.h",
    "task-internal.h",
    "task.h",
    "time.h",
  ]
  deps = [
    ":driver_inspector",
    ":rcu_manager",
    "//sdk/lib/stdcompat",
    "//zircon/system/ulib/async:async-cpp",
  ]
  public_deps = [
    "//sdk/banjo/fuchsia.hardware.pci:fuchsia.hardware.pci_banjo_c",
    "//sdk/banjo/fuchsia.hardware.wlan.phyinfo:fuchsia.hardware.wlan.phyinfo_banjo_c",
    "//sdk/banjo/fuchsia.hardware.wlan.softmac:fuchsia.hardware.wlan.softmac_banjo_c",
    "//sdk/fidl/fuchsia.wlan.common:fuchsia.wlan.common_banjo_c",
    "//src/connectivity/wlan/lib/common/cpp:common",
    "//src/lib/ddk",
    "//zircon/system/public",
    "//zircon/system/ulib/async",
  ]
  public_configs = [
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi:fuchsia_config",
  ]
}

# Support for exporting driver data from the Inspect tree.
source_set("driver_inspector") {
  sources = [ "driver-inspector.cc" ]
  public = [ "driver-inspector.h" ]
  public_deps = [
    "//sdk/lib/stdcompat",
    "//zircon/system/public",
    "//zircon/system/ulib/inspect",
  ]
}

# Support for RCU synchronization.
source_set("rcu_manager") {
  sources = [ "rcu-manager.cc" ]
  public = [ "rcu-manager.h" ]
  deps = [
    "//zircon/system/public",
    "//zircon/system/ulib/async:async-cpp",
  ]
  public_deps = [ "//zircon/system/ulib/async" ]
}

driver_bind_rules("fuchsia_bind") {
  rules = "iwlwifi.bind"
  header_output = "iwlwifi-bind.h"
  tests = "iwlwifi-bind-tests.json"
  deps = [ "//src/devices/bind/fuchsia.pci" ]
}

# Fuchsia DDK device bindings for the iwlwifi driver.
source_set("fuchsia_device") {
  sources = [
    "bind.cc",
    "mvm-mlme.cc",
    "mvm-mlme.h",
    "mvm-sta.cc",
    "mvm-sta.h",
    "pcie-device.cc",
    "pcie-device.h",
    "scoped_utils.h",
    "wlan-softmac-device.cc",
    "wlan-softmac-device.h",
    "wlanphy-impl-device.cc",
    "wlanphy-impl-device.h",
  ]
  deps = [
    ":driver_inspector",
    ":fuchsia_bind",
    ":platform",
    ":rcu_manager",
    "//sdk/banjo/fuchsia.hardware.wlan.phyinfo:fuchsia.hardware.wlan.phyinfo_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.wlan.softmac:fuchsia.hardware.wlan.softmac_banjo_cpp",
    "//sdk/banjo/fuchsia.hardware.wlanphyimpl:fuchsia.hardware.wlanphyimpl_banjo_cpp",
    "//sdk/fidl/fuchsia.wlan.common:fuchsia.wlan.common_banjo_cpp",
    "//sdk/fidl/fuchsia.wlan.ieee80211:fuchsia.wlan.ieee80211_llcpp",
    "//sdk/fidl/fuchsia.wlan.internal:fuchsia.wlan.internal_banjo_cpp",
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi:core",
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/cfg",
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/mvm",
    "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/pcie",
    "//src/connectivity/wlan/lib/common/cpp:common",
    "//src/devices/lib/driver",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/system/public",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  friend =
      [ "//src/connectivity/wlan/drivers/third_party/intel/iwlwifi/test:*" ]

  # TODO(https://fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}
