# 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_DCC_SERIALIZE_SMP
	bool "Use DCC only on CPU core 0"
	depends on SMP && HVC_DCC
	help
	  This is a DEBUG option to serialize all console input and output to CPU 0.
	  Some external debuggers, do not handle reads/writes from/to DCC on more
	  than one CPU core. Each core has its own DCC device registers, so when a
	  CPU core reads or writes from/to DCC, it only accesses its own DCC device.
	  Since kernel code can run on any CPU core, every time the kernel wants to
	  write to the console, it might write to a different DCC.

	  In SMP mode, external debuggers create multiple windows, and each window
	  shows the DCC output only from that core's DCC. The result is that
	  console output is either lost or scattered across windows.

	  Enable this option only if you are sure that you do not need features like
	  CPU hotplug to work. For example, during early chipset bringups without
	  debug serial console support. If unsure, say N.

config HVC_RISCV_SBI
	bool "RISC-V SBI console support"
	depends on RISCV_SBI && NONPORTABLE
	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.  This driver
	  conflicts with real console drivers and should not be enabled on
	  systems that directly access the console.

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

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.
