# Copyright 2019 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

import("$zx_build_config/levels.gni")

if (zx == "/") {
  _zx_assert_level = assert_level
} else {
  _zx_assert_level = zx_assert_level
}

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

  # Enable kernel lock dependency tracking.
  enable_lock_dep = false

  # The level of detail for scheduler traces when enabled. Values greater than
  # zero add increasing details at the cost of increased trace buffer use.
  #
  # 0 = Default kernel:sched tracing.
  # 1 = Adds duration traces for key scheduler operations.
  # 2 = Adds flow events from wakeup to running state.
  # 3 = Adds detailed internal durations and probes.
  scheduler_tracing_level = 0

  # Enables scheduler queue tracing for trace-based scheduler performance
  # analysis.
  scheduler_queue_tracing_enabled = false

  # The level of detail for traces emitted by the VM system. Values greater than
  # zero add increasing details at the cost of increased trace buffer use.
  #
  # 0 = Default kernel:* tracing.
  # 1 = Adds flow events for asynchronous page requests.
  vm_tracing_level = 0

  # Disable kernel PCI driver support. A counterpart of the the build
  # flag platform_enable_user_pci in //src/devices/bus/drivers/pci/pci.gni.
  disable_kernel_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(fxbug.dev/41790): This value is derived from assert_level.  Decouple
  # the two and set kernel_debug_level independently.
  kernel_debug_level = _zx_assert_level

  # Controls the verbosity of kernel dprintf messages. The higher the value,
  # the more dprintf messages emitted. Valid values are 0-2 (inclusive):
  #   0 - CRITCAL / ALWAYS
  #   1 - INFO
  #   2 - SPEW
  kernel_debug_print_level = 2
}

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
}
