# Debug configuration options

# Copyright (c) 2015 Wind River Systems, Inc.
# SPDX-License-Identifier: Apache-2.0

DT_CHOSEN_Z_CONSOLE := zephyr,console

config TRACING
	bool "Enabling Tracing"
	imply THREAD_NAME
	imply THREAD_STACK_INFO
	imply THREAD_MONITOR
	help
	  Enable system tracing. This requires a backend such as SEGGER
	  Systemview to be enabled as well.

if TRACING

config TRACING_CORE
	bool
	help
	  Automatically selected by formats that require the core
	  tracing infrastructure.

choice
	prompt "Tracing Format"
	default TRACING_NONE

config TRACING_NONE
	bool "No tracing format selected"
	help
	  None of the available tracing formats is selected.

config SEGGER_SYSTEMVIEW
	bool "Segger SystemView support"
	select CONSOLE
	select RTT_CONSOLE
	select USE_SEGGER_RTT

config TRACING_CTF
	bool "Tracing via Common Trace Format support"
	select TRACING_CORE
	help
	  Enable tracing to a Common Trace Format stream.

config TRACING_CPU_STATS
	bool "Enable CPU usage tracing"
	select TRACING_CORE
	help
	  Module provides information about percent of CPU usage based on
	  tracing hooks for threads switching in and out, interrupts enters
	  and exits (only distinguishes between idle thread, non idle thread
	  and scheduler). Use provided API or enable automatic logging to
	  get values.

config TRACING_TEST
	bool "Tracing for test usage"
	select TRACING_CORE
	help
	  Enable tracing for testing kinds of format purpose. It must
	  implement the tracing hooks defined in tracing_test.h

endchoice


config TRACING_CTF_TIMESTAMP
	bool "Enable CTF internal timestamp"
	default y
	depends on TRACING_CTF
	help
	  Timestamp prefix will be added to the beginning of CTF
	  event internally.

config TRACING_CPU_STATS_LOG
	bool "Enable current CPU usage logging"
	depends on TRACING_CPU_STATS
	help
	  Periodically displays information about CPU usage.

config TRACING_CPU_STATS_INTERVAL
	int "Logging interval for CPU measurements [ms]"
	default 2000
	depends on TRACING_CPU_STATS_LOG
	help
	  Time period of displaying information about CPU usage.


choice
	prompt "Tracing Method"
	default TRACING_ASYNC

config TRACING_SYNC
	bool "Synchronous Tracing"
	select RING_BUFFER
	help
	  Enable synchronous tracing. This requires the backend to be
	  very low-latency.

config TRACING_ASYNC
	bool "Asynchronous Tracing"
	select RING_BUFFER
	help
	  Enable asynchronous tracing. This will buffer all the tracing
	  packets to the ring buffer first, tracing thread will try to
	  output as much data as possible from the buffer when tracing
	  thread get scheduled.

endchoice

config TRACING_THREAD_STACK_SIZE
	int "Stack size of tracing thread"
	default 1024
	depends on TRACING_ASYNC
	help
	  Stack size of tracing thread.

config TRACING_THREAD_WAIT_THRESHOLD
	int "Tracing thread waiting threshold"
	default 100
	depends on TRACING_ASYNC
	help
	  Tracing thread waiting period given in milliseconds after
	  every first packet put to tracing buffer.

config TRACING_BUFFER_SIZE
	int "Size of tracing buffer"
	default 2048 if TRACING_ASYNC
	default TRACING_PACKET_MAX_SIZE if TRACING_SYNC
	range 32 65536
	help
	  Size of tracing buffer. If TRACING_ASYNC is enabled, tracing buffer
	  is used as a ring buffer to buffer data packet and string packet. If
	  TRACING_SYNC is enabled, the buffer is used to hold the formated data.

config TRACING_PACKET_MAX_SIZE
	int "Max size of one tracing packet"
	default 32
	help
	  Max size of one tracing packet.

choice
	prompt "Tracing Backend"
	default TRACING_BACKEND_UART

config TRACING_BACKEND_UART
	bool "Enable UART backend"
	depends on UART_CONSOLE
	depends on TRACING_ASYNC
	help
	  Use UART to output tracing data.

config TRACING_BACKEND_USB
	bool "Enable USB backend"
	depends on USB
	depends on TRACING_ASYNC
	help
	  Use USB to output tracing data.

config TRACING_BACKEND_POSIX
	bool "Enable posix architecture (native) backend"
	depends on TRACING_SYNC
	depends on ARCH_POSIX
	help
	  Use posix architecture to output tracing data to file system.

endchoice

config TRACING_BACKEND_UART_NAME
	string "Device Name of UART Device for UART backend"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_CONSOLE))" if HAS_DTS
	default "UART_0"
	depends on TRACING_BACKEND_UART
	help
	  This option specifies the name of UART device to be used for
	  tracing backend.

config TRACING_USB_MPS
	int "USB backend max packet size"
	default 64
	depends on TRACING_BACKEND_USB
	help
	  USB tracing backend max packet size(endpoint MPS).

config TRACING_HANDLE_HOST_CMD
	bool "Enable host command handle"
	select UART_INTERRUPT_DRIVEN if TRACING_BACKEND_UART
	help
	  When enabled tracing will handle cmd from host to dynamically
	  enable and disable tracing to have host capture tracing stream
	  data conveniently.

config TRACING_CMD_BUFFER_SIZE
	int "Size of tracing command buffer"
	default 32
	range 32 128
	help
	  Size of tracing command buffer.

config TRACING_ISR
	bool "Enable tracing ISRs"
	default y
	help
	  Enable tracing ISRs. This requires the backend to be
	  very low-latency.

endif

source "subsys/tracing/sysview/Kconfig"
