# 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 "Tracing Support"
	imply THREAD_NAME
	imply THREAD_STACK_INFO
	imply THREAD_MONITOR
	select INSTRUMENT_THREAD_SWITCHING
	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 PERCEPIO_TRACERECORDER
	bool "Percepio Tracealyzer support"
	select THREAD_NAME
	select INIT_STACKS
	select THREAD_MONITOR
	depends on ZEPHYR_TRACERECORDER_MODULE

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

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

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

config TRACING_USER
	bool "Tracing using user-defined functions"
	help
	  Use user-defined functions for tracing task switching and irqs

endchoice


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

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 formatted 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 "UART backend"
	depends on UART_CONSOLE

	help
	  Use UART to output tracing data.

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

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

config TRACING_BACKEND_RAM
	bool "RAM backend"
	help
	  Use a ram buffer to output tracing data which can
	  be dumped to a file at runtime with a debugger.
	  See gdb dump binary memory documentation for example.

config RAM_TRACING_BUFFER_SIZE
	int "Ram Tracing buffer size"
	default 4096
	depends on TRACING_BACKEND_RAM
	help
	  Size of the RAM trace buffer. Trace will be discarded if the
	  length is exceeded.

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 "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_OBJECT_TRACKING
	bool "Object tracking"
	default n
	help
	  Keep lists to track kernel objects.

menu "Tracing Configuration"

config TRACING_SYSCALL
	bool "Tracing Syscalls"
	default y
	help
	  Enable tracing Syscalls.

config TRACING_THREAD
	bool "Tracing Threads"
	default y
	help
	  Enable tracing Threads.

config TRACING_WORK
	bool "Tracing Work"
	default y
	help
	  Enable tracing Work and Work queue events

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

config TRACING_SEMAPHORE
	bool "Tracing Semaphores"
	default y
	help
	  Enable tracing Semaphores.

config TRACING_MUTEX
	bool "Tracing Mutexes"
	default y
	help
	  Enable tracing Mutexes.

config TRACING_CONDVAR
	bool "Tracing Condition Variables"
	default y
	help
	  Enable tracing Condition Variables

config TRACING_QUEUE
	bool "Tracing Queues"
	default y
	help
	  Enable tracing Queues.

config TRACING_FIFO
	bool "Tracing FIFO queues"
	default y
	help
	  Enable tracing FIFO queues.

config TRACING_LIFO
	bool "Tracing LIFO queues"
	default y
	help
	  Enable tracing LIFO queues.

config TRACING_STACK
	bool "Tracing Memory Stacks"
	default y
	help
	  Enable tracing Memory Stacks.

config TRACING_MESSAGE_QUEUE
	bool "Tracing Message Queues"
	default y
	help
	  Enable tracing Message Queues.

config TRACING_MAILBOX
	bool "Tracing Mailboxes"
	default y
	help
	  Enable tracing Mailboxes.

config TRACING_PIPE
	bool "Tracing Pipes"
	default y
	help
	  Enable tracing Pipes.

config TRACING_HEAP
	bool "Tracing Memory Heaps"
	default y
	help
	  Enable tracing Memory Heaps.

config TRACING_MEMORY_SLAB
	bool "Tracing Memory Slabs"
	default y
	help
	  Enable tracing Memory Slabs.

config TRACING_TIMER
	bool "Tracing Timers"
	default y
	help
	  Enable tracing Timers.

config TRACING_EVENT
	bool "Tracing Events"
	default y
	help
	  Enable tracing Events.

endmenu  # Tracing Configuration

endif

source "subsys/tracing/sysview/Kconfig"
