# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig LOG
	bool "Logging"
	select PRINTK if USERSPACE
	help
	  Global switch for the logger, when turned off log calls will not be
	  compiled in.

if LOG

config LOG_MINIMAL
	bool "Enable minimal-footprint logging"
	imply PRINTK
	help
	  Enable minimal logging implementation. This has very little footprint
	  overhead on top of the printk() implementation for standard
	  logging macros. Hexdump macros are also supported, with a small
	  amount of code pulled in if used. Build time filtering is supported,
	  but not runtime filtering. There are no timestamps, prefixes,
	  colors, or asynchronous logging, and all messages are simply
	  sent to printk().

config LOG_RUNTIME_FILTERING
	bool "Enable runtime reconfiguration of the logger"
	depends on !LOG_FRONTEND && !LOG_MINIMAL
	help
	  Allow runtime configuration of maximal, independent severity
	  level for instance.

config LOG_DEFAULT_LEVEL
	int "Default log level"
	default 3
	range 0 4
	help
	  Sets log level for modules which don't specify it explicitly. When
	  set to 0 it means log will not be activated for those modules.
	  Levels are:

	  - 0 OFF, do not write by default
	  - 1 ERROR, default to only write LOG_LEVEL_ERR
	  - 2 WARNING, default to write LOG_LEVEL_WRN
	  - 3 INFO, default to write LOG_LEVEL_INFO
	  - 4 DEBUG, default to write LOG_LEVEL_DBG

config LOG_OVERRIDE_LEVEL
	int "Override lowest log level"
	default 0
	range 0 4
	help
	  Forces a minimum log level for all modules. Modules use their
	  specified level if it is greater than this option, otherwise they use
	  the level specified by this option instead of their default or
	  whatever was manually set.
	  Levels are:

	  - 0 OFF, do not override
	  - 1 ERROR, override to write LOG_LEVEL_ERR
	  - 2 WARNING, override to write LOG_LEVEL_WRN
	  - 3 INFO, override to write LOG_LEVEL_INFO
	  - 4 DEBUG, override to write LOG_LEVEL_DBG

config LOG_MAX_LEVEL
	int "Maximal log level compiled in the system"
	default 4
	range 0 4
	help
	  Forces a maximal log level for all modules. Modules saturates their
	  specified level if it is greater than this option, otherwise they use
	  the level specified by this option instead of their default or
	  whatever was manually set.
	  Levels are:

	  - 0 OFF, logging is turned off
	  - 1 ERROR, maximal level set to LOG_LEVEL_ERR
	  - 2 WARNING, maximal level set to LOG_LEVEL_WRN
	  - 3 INFO, maximal level set to LOG_LEVEL_INFO
	  - 4 DEBUG, maximal level set to LOG_LEVEL_DBG

config LOG_MIPI_SYST_ENABLE
	bool "Enable mipi syst format output"
	select MIPI_SYST_LIB
	help
	  Enable mipi syst format output for the logger system.

if !LOG_MINIMAL

menu "Prepend log message with function name"
	depends on !LOG_FRONTEND

config LOG_FUNC_NAME_PREFIX_ERR
	bool "Error messages prepended"

config LOG_FUNC_NAME_PREFIX_WRN
	bool "Warning messages prepended"

config LOG_FUNC_NAME_PREFIX_INF
	bool "Info messages prepended"

config LOG_FUNC_NAME_PREFIX_DBG
	bool "Debug messages prepended"
	default y

endmenu

config LOG_PRINTK
	bool "Enable processing of printk messages."
	help
	  LOG_PRINTK messages are formatted in place and logged unconditionally.

config LOG_PRINTK_MAX_STRING_LENGTH
	int "Maximum string length supported by LOG_PRINTK"
	depends on LOG_PRINTK
	depends on (!LOG_IMMEDIATE || USERSPACE)
	default 128
	help
	  Array is allocated on the stack.

config LOG_IMMEDIATE
	bool "Enable synchronous processing"
	help
	  When enabled log is processed in the context of the call. It impacts
	  performance of the system since time consuming operations are
	  performed in the context of the log entry (e.g. high priority
	  interrupt).Logger backends must support exclusive access to work
	  flawlessly in that mode because one log operation can be interrupted
	  by another one in the higher priority context.

config LOG_IMMEDIATE_CLEAN_OUTPUT
	bool "Enable clean log output"
	depends on LOG_IMMEDIATE
	help
	  If enabled, interrupts are locked during whole log message processing.
	  As a result, processing on one log message cannot be interrupted by
	  another one and output is clean, not interleaved. However, enabling
	  this option is causing interrupts locking for significant amount of
	  time (up to multiple milliseconds).

config LOG_ENABLE_FANCY_OUTPUT_FORMATTING
	depends on MINIMAL_LIBC
	bool "Format strings with minimal libc _prf() instead of _vprintk()"
	help
	  Selecting this option will choose more robust _prf() function from
	  minimal libc for handling format strings instead of the _vprintk()
	  function. Choosing this option adds around ~3K flash and ~250 bytes on
	  stack.

if !LOG_IMMEDIATE

choice
	prompt "Log full strategy"

config LOG_MODE_OVERFLOW
	bool "Oldest logs are discarded"

config LOG_MODE_NO_OVERFLOW
	bool "New logs are dropped"

endchoice

config LOG_BLOCK_IN_THREAD
	bool "On log full block in thread context"
	help
	  When enabled logger will block (if in the thread context) when
	  internal logger buffer is full and new message cannot be allocated.

config LOG_BLOCK_IN_THREAD_TIMEOUT_MS
	int "Maximum time (in milliseconds) thread can be blocked"
	default 1000
	range -1 10000
	depends on LOG_BLOCK_IN_THREAD
	help
	  If new buffer for a log message cannot be allocated in that time, log
	  message is dropped. Forever blocking (-1) is possible however may lead
	  to the logger deadlock if logging is enabled in threads used for
	  logging (e.g. logger or shell thread).

config LOG_PROCESS_TRIGGER_THRESHOLD
	int "Amount of buffered logs which triggers processing thread."
	default 10
	help
	  When number of buffered messages reaches the threshold thread is waken
	  up. Log processing thread ID is provided during log initialization.
	  Set 0 to disable the feature. If LOG_PROCESS_THREAD is enabled then
	  this threshold is used by the internal thread.

config LOG_PROCESS_THREAD
	bool "Enable internal thread for log processing"
	depends on MULTITHREADING
	default y
	help
	  When enabled thread is created by the logger subsystem. Thread is
	  waken up periodically (see LOG_PROCESS_THREAD_SLEEP_MS) and whenever
	  number of buffered messages exceeds the threshold (see
	  LOG_PROCESS_TRIGGER_THR).

if LOG_PROCESS_THREAD

config LOG_PROCESS_THREAD_SLEEP_MS
	int "Set internal log processing thread sleep period"
	default 1000
	help
	  Log processing thread sleeps for requested period given in
	  milliseconds. When waken up, thread process any buffered messages.

config LOG_PROCESS_THREAD_STACK_SIZE
	int "Stack size for the internal log processing thread"
	default 2048 if COVERAGE_GCOV
	default 1024 if NO_OPTIMIZATIONS
	default 1024 if XTENSA
	default 4096 if (X86 && X86_64)
	default 4096 if ARM64
	default 768
	help
	  Set the internal stack size for log processing thread.

endif # LOG_PROCESS_THREAD

config LOG_BUFFER_SIZE
	int "Number of bytes dedicated for the logger internal buffer."
	default 1024
	range 128 65536
	help
	  Number of bytes dedicated for the logger internal buffer.

config LOG_DETECT_MISSED_STRDUP
	bool "Detect missed handling of transient strings"
	default y if !LOG_IMMEDIATE
	help
	  If enabled, logger will assert and log error message is it detects
	  that string format specifier (%s) and string address which is not from
	  read only memory section and not from pool used for string duplicates.
	  String argument must be duplicated in that case using log_strdup().
	  Detection is performed during log processing thus it does not impact
	  logging timing.

config LOG_STRDUP_MAX_STRING
	int "Longest string that can be duplicated using log_strdup()"
	default 46 if NETWORKING
	default 32
	help
	  Longer strings are truncated.

config LOG_STRDUP_BUF_COUNT
	int "Number of buffers in the pool used by log_strdup()"
	default 4
	help
	  Number of calls to log_strdup() which can be pending before flushed
	  to output. If "<log_strdup alloc failed>" message is seen in the log
	  output, it means this value is too small and should be increased.
	  Each entry takes CONFIG_LOG_STRDUP_MAX_STRING bytes of memory plus
	  some additional fixed overhead.

config LOG_STRDUP_POOL_PROFILING
	bool "Enable profiling of pool used for log_strdup()"
	help
	  When enabled, maximal utilization of the pool is tracked. It can
	  be read out using shell command.

endif # !LOG_IMMEDIATE

config LOG_DOMAIN_ID
	int "Domain ID"
	default 0
	range 0 7
	help
	  In multicore system each application/core must have unique domain ID.

config LOG_CMDS
	bool "Enable shell commands"
	depends on SHELL
	default y if SHELL

config LOG_FRONTEND
	bool "Enable frontend"
	select LOG_IMMEDIATE
	help
	  When enabled, logs are redirected to a custom frontend instead
	  of being processed by the logger.

config LOG_BACKEND_UART
	bool "Enable UART backend"
	depends on UART_CONSOLE
	default y if !SHELL_BACKEND_SERIAL
	help
	  When enabled backend is using UART to output logs.

config LOG_BACKEND_UART_SYST_ENABLE
	bool "Enable UART syst backend"
	depends on LOG_BACKEND_UART
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using UART to output syst format logs.

config LOG_BACKEND_SWO
	bool "Enable Serial Wire Output (SWO) backend"
	depends on HAS_SWO
	help
	  When enabled, backend will use SWO for logging.

if LOG_BACKEND_SWO

config LOG_BACKEND_SWO_FREQ_HZ
	int "Set SWO output frequency"
	default 0
	help
	  Set SWO output frequency. Value 0 will select maximum frequency
	  supported by the given MCU. Not all debug probes support high
	  frequency SWO operation. In this case the frequency has to be set
	  manually.

	  SWO value defined by this option will be configured at boot. Most SWO
	  viewer programs will configure SWO frequency when attached to the
	  debug probe. Such configuration will persist only until the device
	  reset. To ensure flawless operation the frequency configured here and
	  by the SWO viewer program has to match.

config LOG_BACKEND_SWO_SYST_ENABLE
	bool "Enable SWO syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using SWO to output syst format logs.

endif # LOG_BACKEND_SWO

config LOG_BACKEND_RTT
	bool "Enable Segger J-Link RTT backend"
	depends on USE_SEGGER_RTT
	default y if !SHELL_BACKEND_RTT
	help
	  When enabled, backend will use RTT for logging. This backend works on a per
	  message basis. Only a whole message (terminated with a carriage return: '\r')
	  is transferred to up-buffer at once depending on available space and
	  selected mode.
	  In panic mode backend always blocks and waits until there is space
	  in up-buffer for a message and message is transferred to host.

if LOG_BACKEND_RTT

choice
	prompt "Logger behavior"
	default LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_MODE_DROP
	bool "Drop messages that do not fit in up-buffer."
	help
	  If there is not enough space in up-buffer for a message, drop it.
	  Number of dropped messages will be logged.
	  Increase up-buffer size helps to reduce dropping of messages.

config LOG_BACKEND_RTT_MODE_BLOCK
	bool "Block until message is transferred to host."
	help
	  Waits until there is enough space in the up-buffer for a message.

config LOG_BACKEND_RTT_SYST_ENABLE
	bool "Enable RTT syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using RTT to output syst format logs.

endchoice

config LOG_BACKEND_RTT_MESSAGE_SIZE
	int "Size of internal buffer for storing messages."
	range 32 256
	default 128
	depends on LOG_BACKEND_RTT_MODE_DROP
	help
	  This option defines maximum message size transferable to up-buffer.

if LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE
	int "Size of the output buffer"
	default 16
	help
	  Buffer is used by log_output module for preparing output data (e.g.
	  string formatting).

config LOG_BACKEND_RTT_RETRY_CNT
	int "Number of retries"
	default 4
	help
	  Number of TX retries before dropping the data and assuming that
	  RTT session is inactive.

config LOG_BACKEND_RTT_RETRY_DELAY_MS
	int "Delay between TX retries in milliseconds"
	default 5
	help
	  Sleep period between TX retry attempts. During RTT session, host pulls
	  data periodically. Period starts from 1-2 milliseconds and can be
	  increased if traffic on RTT increases (also from host to device). In
	  case of heavy traffic data can be lost and it may be necessary to
	  increase delay or number of retries.

endif # LOG_BACKEND_RTT_MODE_BLOCK

config LOG_BACKEND_RTT_BUFFER
	int "Buffer number used for logger output."
	range 0 SEGGER_RTT_MAX_NUM_UP_BUFFERS
	default 0
	help
	  Select index of up-buffer used for logger output, by default it uses
	  terminal up-buffer and its settings.

config LOG_BACKEND_RTT_BUFFER_SIZE
	int "Size of reserved up-buffer for logger output."
	default 1024
	depends on LOG_BACKEND_RTT_BUFFER > 0
	help
	  Specify reserved size of up-buffer used for logger output.

# Enable processing of printk calls using log if terminal buffer is used.
# Same buffer is used by RTT console. If printk would go through RTT console
# that will lead to corruption of RTT data which is not protected against being
# interrupted by an interrupt.
config LOG_BACKEND_RTT_FORCE_PRINTK
	bool
	default y if LOG_BACKEND_RTT_BUFFER = 0 && RTT_CONSOLE
	select LOG_PRINTK

endif # LOG_BACKEND_RTT

config LOG_BACKEND_NATIVE_POSIX
	bool "Enable native backend"
	depends on ARCH_POSIX
	help
	  Enable backend in native_posix

config LOG_BACKEND_XTENSA_SIM
	bool "Enable xtensa simulator backend"
	depends on SOC_XTENSA_SAMPLE_CONTROLLER || SOC_INTEL_APL_ADSP
	help
	  Enable backend in xtensa simulator

config LOG_BACKEND_XTENSA_OUTPUT_BUFFER_SIZE
	int "Size of the output buffer"
	default 16
	depends on LOG_BACKEND_XTENSA_SIM
	help
	  Buffer is used by log_output module for preparing output data (e.g.
	  string formatting).

config LOG_BACKEND_NET
	bool "Enable networking backend"
	depends on NETWORKING
	select NET_CONTEXT_NET_PKT_POOL
	help
	  Send syslog messages to network server.
	  See RFC 5424 (syslog protocol) and RFC 5426 (syslog over UDP)
	  specifications for details.

if LOG_BACKEND_NET

config LOG_BACKEND_NET_SERVER
	string "Syslog server IP address"
	help
	  This can be either IPv4 or IPv6 address.
	  Server listen UDP port number can be configured here too.
	  Following syntax is supported:
	  192.0.2.1:514
	  192.0.2.42
	  [2001:db8::1]:514
	  [2001:db8::2]
	  2001:db::42

config LOG_BACKEND_NET_MAX_BUF
	int "How many network buffers to allocate for sending messages"
	range 3 256
	default 3
	help
	  Each syslog message should fit into a network packet that will be
	  sent to server. This number tells how many syslog messages can be
	  in transit to the server.

config LOG_BACKEND_NET_MAX_BUF_SIZE
	int "Max syslog message size"
	range 64 1180
	default 1180 if NET_IPV6
	default 480 if NET_IPV4
	default 256
	help
	  As each syslog message needs to fit to UDP packet, set this value
	  so that messages are not truncated.
	  The RFC 5426 recommends that for IPv4 the size is 480 octets and for
	  IPv6 the size is 1180 octets. As each buffer will use RAM, the value
	  should be selected so that typical messages will fit the buffer.

config LOG_BACKEND_NET_SYST_ENABLE
	bool "Enable networking syst backend"
	depends on LOG_MIPI_SYST_ENABLE
	help
	  When enabled backend is using networking to output syst format logs.

endif # LOG_BACKEND_NET

config LOG_BACKEND_ADSP
	bool "Enable Intel ADSP backend"
	depends on SOC_INTEL_APL_ADSP
	select RING_BUFFER
	help
	  Enable backend in APL ADSP using memory mailbox

if LOG_BACKEND_ADSP

config LOG_BACKEND_ADSP_RINGBUF_BASE
	hex "Ringbuf base address"
	help
	  Address of the ring buffer in the memory.

config LOG_BACKEND_ADSP_RINGBUF_SIZE
	hex "Size of the ring buffer"
	help
	  Size of the ring buffer.

endif # LOG_BACKEND_ADSP

config LOG_BACKEND_SHOW_COLOR
	bool "Enable colors in the backend"
	depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
	           || LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
	default y
	help
	  When enabled selected backend prints errors in red and warning in yellow.

config LOG_BACKEND_FORMAT_TIMESTAMP
	bool "Enable timestamp formatting in the backend"
	depends on LOG_BACKEND_UART || LOG_BACKEND_NATIVE_POSIX || LOG_BACKEND_RTT \
	           || LOG_BACKEND_SWO || LOG_BACKEND_XTENSA_SIM
	default y
	help
	  When enabled timestamp is formatted to hh:mm:ss:ms,us.

endif # LOG_MINIMAL
endif # LOG
