# Console driver configuration options

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

# Setting shared by different subsystems

menuconfig CONSOLE
	bool "Console drivers"

if CONSOLE

config CONSOLE_INPUT_MAX_LINE_LEN
	int "Console maximum input line length"
	default 128
	help
	  This option can be used to modify the maximum length a console input
	  can be.

config CONSOLE_HAS_DRIVER
	bool
	help
	  This is an option to be enabled by console drivers to signal
	  that some kind of console exists.

config CONSOLE_HANDLER
	bool "Enable console input handler"
	depends on UART_CONSOLE && SERIAL_SUPPORT_INTERRUPT
	select UART_INTERRUPT_DRIVEN
	help
	  This option enables console input handler allowing to write simple
	  interaction between serial console and the OS.

config CONSOLE_INIT_PRIORITY
	int "Console init priority"
	default 95 if UART_MUX
	default 60 if UART_CONSOLE || XTENSA_SIM_CONSOLE
	default KERNEL_INIT_PRIORITY_DEFAULT
	help
	  Console driver device initialization priority.

config UART_CONSOLE
	bool "Use UART for console"
	depends on SERIAL && SERIAL_HAS_DRIVER
	select CONSOLE_HAS_DRIVER
	help
	  Enable this option to use one UART for console.

config UART_CONSOLE_DEBUG_SERVER_HOOKS
	bool "Debug server hooks in debug console"
	depends on UART_CONSOLE
	help
	  This option allows a debug server agent such as GDB to take over the
	  handling of traffic that goes through the console logic. The debug
	  server looks at characters received and decides to handle them itself if
	  they are some sort of control characters, or let the regular console
	  code handle them if they are of no special significance to it.

config UART_CONSOLE_MCUMGR
	bool "Enable UART console mcumgr passthrough"
	depends on UART_CONSOLE
	help
	  Enables the UART console to receive mcumgr frames for image upgrade
	  and device management.  When enabled, the UART console does not
	  process mcumgr frames, but it hands them up to a higher level module
	  (e.g., the shell).  If unset, incoming mcumgr frames are dropped.

config UART_CONSOLE_INPUT_EXPIRED
	bool "Enable support for UART console input expired mechanism"
	default y
	depends on UART_CONSOLE && PM
	help
	  This option allows a notification to the power management module that
	  the module for UART console is in use now. If the interval of console
	  module doesn't receive any input message exceeds expired timeout, such
	  as UART_CONSOLE_INPUT_EXPIRED_TIMEOUT, the power management module is
	  allowed to enter sleep/deep sleep state and turn off the clock of UART
	  console module. This mechanism gives a window in which the users can
	  organize input message if CONFIG_PM is enabled.

config UART_CONSOLE_INPUT_EXPIRED_TIMEOUT
	int "Fixed amount of time to keep the UART console in use flag true"
	default 15000
	depends on UART_CONSOLE_INPUT_EXPIRED
	help
	  Fixed amount of time which unit is milliseconds to keep the UART
	  console in use flag true.

config RAM_CONSOLE
	bool "Use RAM console"
	select CONSOLE_HAS_DRIVER
	help
	  Emit console messages to a RAM buffer "ram_console" which can
	  be examined at runtime with a debugger. Useful in board bring-up
	  if there aren't any working serial drivers.

config RAM_CONSOLE_BUFFER_SIZE
	int "Ram Console buffer size"
	default 1024
	depends on RAM_CONSOLE
	help
	  Size of the RAM console buffer. Messages will wrap around if the
	  length is exceeded.

config RTT_CONSOLE
	bool "Use RTT console"
	depends on USE_SEGGER_RTT
	select CONSOLE_HAS_DRIVER
	help
	  Emit console messages to a RAM buffer that is then read by the
	  Segger J-Link software and displayed on a computer in real-time.
	  Requires support for Segger J-Link on the companion IC onboard.

if RTT_CONSOLE

config RTT_TX_RETRY_CNT
	int "Number of TX retries"
	default 2
	help
	  Number of TX retries before dropping the byte and assuming that
	  RTT session is inactive.

config RTT_TX_RETRY_DELAY_MS
	int "Delay between TX retries in milliseconds"
	default 2
	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.

config RTT_TX_RETRY_IN_INTERRUPT
	bool "Busy wait in the interrupt context for TX retry"
	help
	  If enabled RTT console will busy wait between TX retries when console
	  assumes that RTT session is active. In case of heavy traffic data can
	  be lost and it may be necessary to increase delay or number of
	  retries.

endif

config IPM_CONSOLE_SENDER
	bool "Inter-processor Mailbox console sender"
	select CONSOLE_HAS_DRIVER
	help
	  Enable the sending side of IPM console

config IPM_CONSOLE_RECEIVER
	bool "Inter-processor Mailbox console receiver"
	select RING_BUFFER
	help
	  Enable the receiving side of IPM console

config IPM_CONSOLE_STACK_SIZE
	int "Stack size for IPM console receiver thread"
	depends on IPM_CONSOLE_RECEIVER
	default 2048 if COVERAGE
	default 512
	help
	  Each instance of the IPM console receiver driver creates a worker
	  thread to print out incoming messages from the remote CPU. Specify the
	  stack size for these threads here.

config IPM_CONSOLE
	bool "Inter-processor Mailbox console"
	depends on IPM
	select CONSOLE_HAS_DRIVER
	help
	  Enable console over Inter-processor Mailbox.

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_IPM_CONSOLE := zephyr,console

config IPM_CONSOLE_ON_DEV_NAME
	string "IPM device name used by console"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_IPM_CONSOLE))" if HAS_DTS
	default "IPM_0"
	depends on IPM_CONSOLE
	help
	  IPM device name used by IPM console driver.

config IPM_CONSOLE_LINE_BUF_LEN
	int "IPM console line buffer length"
	default 128
	depends on IPM_CONSOLE
	help
	  IPM console line buffer length specify amount of the buffer
	  where characters are stored before sending the whole line.

config UART_PIPE
	bool "Enable pipe UART driver"
	select UART_INTERRUPT_DRIVEN
	help
	  Enable pipe UART driver. This driver allows application to communicate
	  over UART with custom defined protocol. Driver doesn't inspect received
	  data (as contrary to console UART driver) and all aspects of received
	  protocol data are handled by application provided callback.

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_UART_PIPE := zephyr,uart-pipe

config UART_PIPE_ON_DEV_NAME
	string "Device Name of UART Device for pipe UART"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_UART_PIPE))" if HAS_DTS
	default "UART_0"
	depends on UART_PIPE
	help
	  This option specifies the name of UART device to be used
	  for pipe UART.

config UART_MCUMGR
	bool "Enable mcumgr UART driver"
	select UART_INTERRUPT_DRIVEN
	help
	  Enable the mcumgr UART driver. This driver allows the application to
	  communicate over UART using the mcumgr protocol for image upgrade and
	  device management. The driver doesn't inspect received data (as
	  contrary to console UART driver) and all aspects of received protocol
	  data are handled by an application provided callback.

if UART_MCUMGR

config UART_MCUMGR_RX_BUF_SIZE
	int "Size of receive buffer for mcumgr fragments received over UART, in bytes"
	default 128
	help
	  Specifies the size of the mcumgr UART receive buffer, in bytes. This
	  value must be large enough to accommodate any line sent by an mcumgr
	  client.

config UART_MCUMGR_RX_BUF_COUNT
	int "Number of receive buffers for mcumgr fragments received over UART"
	default 2
	help
	  Specifies the number of the mcumgr UART receive buffers.  Receive
	  buffers hold received mcumgr fragments prior to reassembly.  This
	  setting's value must satisfy the following relation:
	  UART_MCUMGR_RX_BUF_COUNT * UART_MCUMGR_RX_BUF_SIZE >=
	  MCUMGR_SMP_UART_MTU

endif # UART_MCUMGR

config XTENSA_SIM_CONSOLE
	bool "Use Xtensa simulator console"
	depends on SIMULATOR_XTENSA
	select CONSOLE_HAS_DRIVER
	default y
	help
	  Use simulator console to print messages.

config NATIVE_POSIX_CONSOLE
	bool "Use the host terminal for console"
	depends on ARCH_POSIX
	select CONSOLE_HAS_DRIVER
	help
	  Use the host terminal (where the native_posix binary was launched) for the
	  Zephyr console

config NATIVE_POSIX_STDIN_CONSOLE
	bool "Use the host terminal stdin"
	depends on NATIVE_POSIX_CONSOLE
	help
	  No current use. Kept only as there is plans to start using these
	  drivers with the shell

config NATIVE_STDIN_POLL_PERIOD
	int "Polling period for stdin"
	depends on NATIVE_POSIX_STDIN_CONSOLE
	default 20
	help
	  In ms, polling period for stdin

config NATIVE_POSIX_STDOUT_CONSOLE
	bool "Print to the host terminal stdout"
	depends on NATIVE_POSIX_CONSOLE
	default y
	help
	  Zephyr's printk messages will be directed to the host terminal stdout.

config NATIVE_POSIX_CONSOLE_INIT_PRIORITY
	int "Init priority"
	default 99
	depends on NATIVE_POSIX_CONSOLE
	help
	  Device driver initialization priority.

config SEMIHOST_CONSOLE
	bool "Use semihosting for console"
	select CONSOLE_HAS_DRIVER
	depends on CPU_CORTEX_M || ARM64
	help
	  Enable this option to use semihosting for console.
	  Semihosting is a mechanism that enables code running on an ARM target
	  to communicate and use the Input/Output facilities on a host computer
	  that is running a debugger.
	  Additional information can be found in:
	  https://developer.arm.com/docs/dui0471/k/what-is-semihosting/what-is-semihosting
	  This option is compatible with hardware and with QEMU, through the
	  (automatic) use of the -semihosting-config switch when invoking it.

module = UART_CONSOLE
module-str = UART console
source "subsys/logging/Kconfig.template.log_config"

source "drivers/console/Kconfig.gsm_mux"

config UART_MUX
	bool "Enable UART muxing (GSM 07.10) support [EXPERIMENTAL]"
	depends on SERIAL_SUPPORT_INTERRUPT && GSM_MUX
	select UART_INTERRUPT_DRIVEN
	select EXPERIMENTAL
	help
	  Enable this option to create UART muxer that run over a physical
	  UART. The GSM 07.10 muxing protocol is used to separate the data
	  between these muxed UARTs.

if UART_MUX

config UART_MUX_DEVICE_NAME
	string "UART mux device name template"
	default "GSM"
	help
	  Device name template for the UART mux Devices. First device would
	  have name $(UART_MUX_DEVICE_NAME)_0, etc. User will access muxed
	  UART using this name.

config UART_MUX_RINGBUF_SIZE
	int "UART mux ring buffer size"
	default 256
	help
	  UART mux ring buffer size when passing data from RX ISR to worker
	  thread that will do the unmuxing.

config UART_MUX_TEMP_BUF_SIZE
	int "Size of the temp buffer when reading data from real UART"
	default 32
	help
	  Size of the temporary RX buffer in receiving ISR.

config UART_MUX_DEVICE_COUNT
	int "Number of UART mux devices (DLCIs)"
	default GSM_MUX_DLCI_MAX
	range 1 64
	help
	  Number of instances of UART muxes. Default value is set by
	  maximum number of DLCIs (Data Link Connection Identifiers)
	  configured in the system.

config UART_MUX_REAL_DEVICE_COUNT
	int "Number of real UART devices"
	default 1
	help
	  Tells how many real UART devices there are. Typically there is
	  only one UART and the muxed UARTs are run on top of that. If you have
	  two modems for example, then you would need to increase this to two.

config UART_MUX_RX_STACK_SIZE
	int "Size of the stack allocated for receiving data from UART"
	default 512
	help
	  Sets the stack size which will be used by the PPP RX workqueue.

config UART_MUX_RX_PRIORITY
	int "RX workqueue thread priority"
	default 7
	help
	  Sets the priority of the RX workqueue thread.

module = UART_MUX
module-str = UART mux
source "subsys/logging/Kconfig.template.log_config"

endif # UART_MUX

config UART_MUX_VERBOSE_DEBUG
	bool "Print hexdump of sent and received packets"
	depends on UART_MUX_LOG_LEVEL_DBG
	help
	  As there might be lot of debug output printed, only enable
	  this if really needed.


endif # CONSOLE
