# SPDX-License-Identifier: GPL-2.0

config HVC_DRIVER
	bool
	help
	  Generic "hypervisor virtual console" infrastructure for various
	  hypervisors (pSeries, iSeries, Xen).
	  It will automatically be selected if one of the back-end console drivers
	  is selected.

config HVC_IRQ
	bool

config HVC_CONSOLE
	bool "pSeries Hypervisor Virtual Console support"
	depends on PPC_PSERIES
	select HVC_DRIVER
	select HVC_IRQ
	help
	  pSeries machines when partitioned support a hypervisor virtual
	  console. This driver allows each pSeries partition to have a console
	  which is accessed via the HMC.

config HVC_OLD_HVSI
	bool "Old driver for pSeries serial port (/dev/hvsi*)"
	depends on HVC_CONSOLE

config HVC_OPAL
	bool "OPAL Console support"
	depends on PPC_POWERNV
	select HVC_DRIVER
	select HVC_IRQ
	default y
	help
	  PowerNV machines running under OPAL need that driver to get a console

config HVC_RTAS
	bool "IBM RTAS Console support"
	depends on PPC_RTAS
	select HVC_DRIVER
	help
	  IBM Console device driver which makes use of RTAS

config HVC_IUCV
	bool "z/VM IUCV Hypervisor console support (VM only)"
	depends on S390 && NET
	select HVC_DRIVER
	select IUCV
	default y
	help
	  This driver provides a Hypervisor console (HVC) back-end to access
	  a Linux (console) terminal via a z/VM IUCV communication path.

config HVC_XEN
	bool "Xen Hypervisor Console support"
	depends on XEN
	select HVC_DRIVER
	select HVC_IRQ
	default y
	help
	  Xen virtual console device driver

config HVC_XEN_FRONTEND
	bool "Xen Hypervisor Multiple Consoles support"
	depends on HVC_XEN
	select XEN_XENBUS_FRONTEND
	default y
	help
	  Xen driver for secondary virtual consoles

config HVC_UDBG
	bool "udbg based fake hypervisor console"
	depends on PPC
	select HVC_DRIVER
	help
	  This is meant to be used during HW bring up or debugging when
	  no other console mechanism exist but udbg, to get you a quick
	  console for userspace. Do NOT enable in production kernels.

config HVC_DCC
	bool "ARM JTAG DCC console"
	depends on ARM || ARM64
	select HVC_DRIVER
	select SERIAL_CORE_CONSOLE
	help
	  This console uses the JTAG DCC on ARM to create a console under the HVC
	  driver. This console is used through a JTAG only on ARM. If you don't have
	  a JTAG then you probably don't want this option.

config HVC_RISCV_SBI
	bool "RISC-V SBI console support"
	depends on RISCV_SBI_V01
	select HVC_DRIVER
	help
	  This enables support for console output via RISC-V SBI calls, which
	  is normally used only during boot to output printk.

	  If you don't know what do to here, say Y.

config HVCS
	tristate "IBM Hypervisor Virtual Console Server support"
	depends on PPC_PSERIES && HVC_CONSOLE
	help
	  Partitionable IBM Power5 ppc64 machines allow hosting of
	  firmware virtual consoles from one Linux partition by
	  another Linux partition.  This driver allows console data
	  from Linux partitions to be accessed through TTY device
	  interfaces in the device tree of a Linux partition running
	  this driver.

	  To compile this driver as a module, choose M here: the
	  module will be called hvcs.  Additionally, this module
	  will depend on arch specific APIs exported from hvcserver.ko
	  which will also be compiled when this driver is built as a
	  module.
