# 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

  # Enables kernel tracing of futex interactions
  futex_tracing_enabled = false

  # Enables tracing of wait queue depths.  Used for post-processing analysis of
  # how deep wait queues tend to be under various loads, as well as how
  # frequently the change depth.
  wait_queue_depth_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.
  # 2 = Adds duration events related to accessed faults and page faults.
  # 3 = Adds duration events for PMM allocations and frees.
  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

  # Enables the use of a virtually managed kernel heap instead of one managed
  # directly out of the physmap. The virtual heap may have some performance and
  # memory usage overheads, but will not exhaust due to fragmentation.
  enable_virtual_heap = false

  # Controls the granularity of allocation of the global pool of persistent RAM.
  # All features which wish to use persistent RAM to preserve data across reboot
  # must operate in allocations which are a multiple of this value.  The value
  # should be a power of two, and typically should be a multiple of the
  # cacheline size of the target architecture.
  persistent_ram_allocation_granularity = 128

  # Please refer to https://fuchsia.dev/fuchsia-src/development/debugging/jtrace
  # for a description of these configuration options.
  #
  # Note that the special value "auto" is used only by the default definitions
  # of the entries (below).  It acts as a special value which automatically
  # chooses a default based on whether or not JTRACE is configured for
  # persistent tracing, while still allowing a user to explicitly override the
  # value regardless of whether persistent tracing is enabled or not.
  jtrace_enabled = false
  jtrace_last_entry_storage = 0
  jtrace_target_buffer_size = "auto"
  jtrace_use_large_entries = "auto"
}

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
}
