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

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

config UART_XEN_HVC_CONSOLEIO
	bool "Xen hypervisor consoleio UART driver"
	select SERIAL_HAS_DRIVER
	depends on XEN_DOM0 || XEN_DOM0LESS
	default y
	help
	  Enable Xen hypervisor console driver. Used for Zephyr as
	  privileged domain (Dom0) or for Zephyr DomU in Dom0less
	  configuration. Dom0less configuration does not have
	  privileged domain. Thus, there is no console daemon and Xen
	  manages all domain outputs through the consoleio interface.

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 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.
