if TTY

config HVC_DRIVER
	bool
	help
	  Generic "hypervisor virtual console" infrastructure for various
	  hypervisors (pSeries, iSeries, Xen, lguest).
	  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
	default n

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
	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
       default n
       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
       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 core 0"
	depends on SMP && HVC_DCC
	help
	  Some debuggers, such as Trace32 from Lauterbach GmbH, do not handle
	  reads/writes from/to DCC on more than one core.  Each core has its
	  own DCC device registers, so when a core reads or writes from/to DCC,
	  it only accesses its own DCC device.  Since kernel code can run on
	  any core, every time the kernel wants to write to the console, it
	  might write to a different DCC.

	  In SMP mode, Trace32 only uses the DCC on core 0.  In AMP mode, it
	  creates 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.

	  Selecting this option will enable code that serializes all console
	  input and output to core 0.  The DCC driver will create input and
	  output FIFOs that all cores will use.  Reads and writes from/to DCC
	  are handled by a workqueue that runs only core 0.

config HVC_BFIN_JTAG
	bool "Blackfin JTAG console"
	depends on BLACKFIN
	select HVC_DRIVER
	help
	 This console uses the Blackfin JTAG to create a console under the
	 the HVC driver.  If you don't have JTAG, then you probably don't
	 want this option.

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.

endif # TTY
