# Copyright 2019 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("$zx/public/gn/config/levels.gni")

declare_args() {
  # Maximum number of CPUs the kernel will run on (others will be ignored).
  smp_max_cpus = 32

  if (current_cpu == "arm64") {
    smp_max_cpus = 16
  }

  # Virtual address where the kernel is mapped statically.  This is the
  # base of addresses that appear in the kernel symbol table.  At runtime
  # KASLR relocation processing adjusts addresses in memory from this base
  # to the actual runtime virtual address.
  if (current_cpu == "arm64") {
    kernel_base = "0xffffffff00000000"
  } else if (current_cpu == "x64") {
    kernel_base = "0xffffffff80100000"  # Has KERNEL_LOAD_OFFSET baked into it.
  }

  # Virtual address where the kernel address space begins.
  # Below this is the user address space.
  if (current_cpu == "arm64") {
    kernel_aspace_base = "0xffff000000000000"
  } else if (current_cpu == "x64") {
    kernel_aspace_base = "0xffffff8000000000UL"  # -512GB
  }

  # Enable kernel lock dependency tracking.
  enable_lock_dep = false

  # Select an available scheduler.
  # Valid values are: "legacy", "fair", "unified"
  select_scheduler = "fair"

  # Enable detailed scheduler traces.
  detailed_scheduler_tracing = false

  # Enable userspace PCI and disable kernel PCI.
  enable_user_pci = false

  # Extra macro definitions for kernel code, e.g. "DISABLE_KASLR",
  # "ENABLE_KERNEL_LL_DEBUG".
  kernel_extra_defines = []

  # Enables various kernel debugging and diagnostic features.  Valid
  # values are between 0-3.  The higher the value, the more that are
  # enabled.  A value of 0 disables all of them.
  #
  # TODO(41790): This value is derived from assert_level.  Decouple
  # the two and set kernel_debug_level independently.
  kernel_debug_level = assert_level
}

declare_args() {
  # Enable kernel lock dependency tracking tests.  By default this is
  # enabled when tracking is enabled, but can also be eanbled independently
  # to assess whether the tests build and *fail correctly* when lockdep is
  # disabled.
  enable_lock_dep_tests = enable_lock_dep
}
