# 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("//build/config/zircon/levels.gni")

# TODO(fxbug.dev/67356): Get rid of zircon_kernel_disable_asserts
import("//build/zircon/build_args.gni")
_kernel_debug_level = zx_assert_level
if (zircon_kernel_disable_asserts) {
  _kernel_debug_level = 0
}

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 = _kernel_debug_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
}
