# Xen hypervisor console via UART setup
#
# Copyright (c) 2021 EPAM Systems
# SPDX-License-Identifier: Apache-2.0
#

config UART_XEN_HVC
	bool "Xen hypervisor DomU console UART driver"
	select SERIAL_HAS_DRIVER
	select SERIAL_SUPPORT_INTERRUPT
	depends on BOARD_XENVM
	depends on !XEN_INITIAL_DOMAIN
	default y
	help
	  Enable Xen ring buffer based hypervisor console driver. Used
	  for Zephyr as unprivileged domain.

config UART_XEN_HVC_CONSOLEIO
	bool "Xen hypervisor Dom0 console UART driver"
	select SERIAL_HAS_DRIVER
	depends on BOARD_XENVM
	depends on XEN_INITIAL_DOMAIN
	default y
	help
	  Enable Xen hypervisor console driver. Used for Zephyr as
	  privileged domain (Dom0).

config XEN_HVC_INIT_PRIORITY
	int "Xen hypervisor console init priority"
	depends on UART_XEN_HVC || UART_XEN_HVC_CONSOLEIO
	default 55
	help
	  Set init priority for Xen HVC, should be inited before UART
	  console driver (HVC gets inited on PRE_KERNEL_1 stage).

config XEN_EARLY_CONSOLEIO
	bool "Early printk/stdout through console_io Xen interface"
	depends on BOARD_XENVM
	depends on UART_XEN_HVC
	help
	  Enable setting of console_io symbol hook for stdout and printk.
	  Log output will become available on PRE_KERNEL_1 stage. Requires
	  Xen, compiled with CONFIG_DEBUG flag.
