# Serial driver configuration options

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

menuconfig SERIAL
	bool "Serial drivers"
	help
	  Enable options for serial drivers.

if SERIAL

comment "Capabilities"

config SERIAL_HAS_DRIVER
	bool
	help
	  This is an option to be enabled by individual serial driver
	  to signal that there is a serial driver. This is being used
	  by other drivers which are dependent on serial.

config SERIAL_SUPPORT_ASYNC
	bool
	help
	  This is an option to be enabled by individual serial driver
	  to signal that the driver and hardware supports async operation.

config SERIAL_SUPPORT_INTERRUPT
	bool
	help
	  This is an option to be enabled by individual serial driver
	  to signal that the driver and hardware supports interrupts.

config SERIAL_INIT_PRIORITY
	int "Serial init priority"
	default KERNEL_INIT_PRIORITY_DEVICE
	help
	  Serial driver device initialization priority.

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

config SERIAL_SUPPORT_WIDE_DATA
	bool
	help
	  This is an option to be enabled by individual serial driver
	  to signal that the driver and hardware support data longer
	  than 8-bit.

config UART_USE_RUNTIME_CONFIGURE
	bool "Runtime configuration for UART controllers"
	default y
	help
	  Enable runtime configuration of UART controllers.
	  This allows applications to call uart_configure() to
	  configure the UART controllers at runtime, and calling
	  uart_config_get() to retrieve configuration. If this is
	  disabled, UART controllers rely on UART driver's
	  initialization function to properly configure
	  the controller.

	  Say y if unsure. Disable this to reduce footprint for
	  applications that do not require runtime UART configuration.

config UART_ASYNC_API
	bool "Asynchronous UART API"
	depends on SERIAL_SUPPORT_ASYNC
	help
	  This option enables asynchronous UART API.

config UART_INTERRUPT_DRIVEN
	bool "UART Interrupt support"
	depends on SERIAL_SUPPORT_INTERRUPT
	help
	  This option enables interrupt support for UART allowing console
	  input and other UART based drivers.

config UART_EXCLUSIVE_API_CALLBACKS
	bool "Use exclusive callbacks for multiple APIs"
	depends on UART_ASYNC_API && UART_INTERRUPT_DRIVEN
	default y
	help
	  When multiple set of APIs support callbacks, enabling this
	  option will result in only the callbacks of one set of API
	  being active at a time. Setting a new callback to one set of
	  API will remove callbacks to other set of APIs. For example,
	  calling uart_callback_set() would disable the callback
	  previously set via uart_irq_callback_set().

	  Says yes unless you are absolutely sure you know what you are
	  doing and promise not to file bug when things do not work out.

config UART_LINE_CTRL
	bool "Serial Line Control API"
	help
	  This enables the API for apps to control the serial line,
	  such as baud rate, CTS and RTS.

	  Implementation is up to individual driver.

	  Says no if not sure.

config UART_DRV_CMD
	bool "Driver commands API"
	help
	  This enables the API to send extra commands to drivers.
	  This allows drivers to expose hardware specific functions.

	  Says no if not sure.

config UART_WIDE_DATA
	bool "API to support data longer than 8-bit"
	help
	  This enables the API to process data longer than 8-bit.
	  This is up to the driver to implement the necessary functions
	  to properly support this.

config UART_PIPE
	bool "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.

config UART_ASYNC_RX_HELPER
	bool "Helper for UART asynchronous reception"
	help
	  Module implements handling of reception of variable length data using
	  Asynchronous UART API. It can be used in cases where received data processing
	  is delayed. Module implements zero-copy approach with multiple reception
	  buffers.

config UART_ASYNC_TO_INT_DRIVEN_API
	bool
	select UART_ASYNC_RX_HELPER
	help
	  Asynchronous to Interrupt driven adaptation layer. When enabled device
	  which implements only asynchronous API can be used with interrupt driven
	  API implemented by the generic adaptation layer.

config UART_ASYNC_TO_INT_DRIVEN_RX_TIMEOUT
	int "Receiver timeout (in bauds)"
	depends on UART_ASYNC_TO_INT_DRIVEN_API
	default 100
	help
	  Receiver inactivity timeout. It is used to calculate timeout in microseconds.

comment "Serial Drivers"

rsource "Kconfig.b91"

rsource "Kconfig.ns16550"

rsource "Kconfig.mcux"

rsource "Kconfig.mcux_flexcomm"

rsource "Kconfig.mcux_iuart"

rsource "Kconfig.mcux_lpsci"

rsource "Kconfig.mcux_lpuart"

rsource "Kconfig.miv"

rsource "Kconfig.imx"

rsource "Kconfig.it8xxx2"

rsource "Kconfig.stellaris"

rsource "Kconfig.native_posix"

rsource "Kconfig.usart_sam"

rsource "Kconfig.uart_sam"

rsource "Kconfig.stm32"

rsource "Kconfig.nrfx"

rsource "Kconfig.altera_jtag"

rsource "Kconfig.cc13xx_cc26xx"

rsource "Kconfig.cc32xx"

rsource "Kconfig.cmsdk_apb"

rsource "Kconfig.sifive"

rsource "Kconfig.esp32"

rsource "Kconfig.gecko"

rsource "Kconfig.leuart_gecko"

rsource "Kconfig.msp432p4xx"

rsource "Kconfig.numicro"

rsource "Kconfig.sam0"

rsource "Kconfig.psoc6"

rsource "Kconfig.pl011"

rsource "Kconfig.ql_usbserialport_s3b"

rsource "Kconfig.rv32m1_lpuart"

rsource "Kconfig.rpi_pico"

rsource "Kconfig.litex"

rsource "Kconfig.rtt"

rsource "Kconfig.bt"

rsource "Kconfig.xlnx"

rsource "Kconfig.xmc4xxx"

rsource "Kconfig.lpc11u6x"

rsource "Kconfig.npcx"

rsource "Kconfig.apbuart"

rsource "Kconfig.rcar"

rsource "Kconfig.xec"

rsource "Kconfig.gd32"

rsource "Kconfig.test"

rsource "Kconfig.neorv32"

rsource "Kconfig.xen"

rsource "Kconfig.ifx_cat1"

rsource "Kconfig.smartbond"

rsource "Kconfig.nxp_s32"

rsource "Kconfig.cdns"

rsource "Kconfig.opentitan"

rsource "Kconfig.altera"

rsource "Kconfig.hostlink"

rsource "Kconfig.emul"

rsource "Kconfig.native_tty"

rsource "Kconfig.numaker"

rsource "Kconfig.efinix_sapphire"

rsource "Kconfig.sedi"

rsource "Kconfig.max32"

rsource "Kconfig.bcm2711"

rsource "Kconfig.intel_lw"

rsource "Kconfig.renesas_ra"

rsource "Kconfig.ene"

rsource "Kconfig.rzt2m"

source "drivers/serial/Kconfig.renesas_ra8"

endif # SERIAL
