# SPDX-License-Identifier: GPL-2.0

menu "UML Character Devices"

config STDERR_CONSOLE
	bool "stderr console"
	default y
	help
	  console driver which dumps all printk messages to stderr.

config SSL
	bool "Virtual serial line"
	help
	  The User-Mode Linux environment allows you to create virtual serial
	  lines on the UML that are usually made to show up on the host as
	  ttys or ptys.

	  See <http://user-mode-linux.sourceforge.net/old/input.html> for more
	  information and command line examples of how to use this facility.

	  Unless you have a specific reason for disabling this, say Y.

config NULL_CHAN
	bool "null channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to a device similar to /dev/null.  Data written to it disappears
	  and there is never any data to be read.

config PORT_CHAN
	bool "port channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host portals.  They may be accessed with 'telnet <host>
	  <port number>'.  Any number of consoles and serial lines may be
	  attached to a single portal, although what UML device you get when
	  you telnet to that portal will be unpredictable.
	  It is safe to say 'Y' here.

config PTY_CHAN
	bool "pty channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host pseudo-terminals.  Access to both traditional
	  pseudo-terminals (/dev/pty*) and pts pseudo-terminals are controlled
	  with this option.  The assignment of UML devices to host devices
	  will be announced in the kernel message log.
	  It is safe to say 'Y' here.

config TTY_CHAN
	bool "tty channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to host terminals.  Access to both virtual consoles
	  (/dev/tty*) and the slave side of pseudo-terminals (/dev/ttyp* and
	  /dev/pts/*) are controlled by this option.
	  It is safe to say 'Y' here.

config XTERM_CHAN
	bool "xterm channel support"
	help
	  This option enables support for attaching UML consoles and serial
	  lines to xterms.  Each UML device so assigned will be brought up in
	  its own xterm.
	  It is safe to say 'Y' here.

config XTERM_CHAN_DEFAULT_EMULATOR
	string "xterm channel default terminal emulator"
	depends on XTERM_CHAN
	default "xterm"
	help
	  This option allows changing the default terminal emulator.

config NOCONFIG_CHAN
	bool
	default !(XTERM_CHAN && TTY_CHAN && PTY_CHAN && PORT_CHAN && NULL_CHAN)

config CON_ZERO_CHAN
	string "Default main console channel initialization"
	default "fd:0,fd:1"
	help
	  This is the string describing the channel to which the main console
	  will be attached by default.  This value can be overridden from the
	  command line.  The default value is "fd:0,fd:1", which attaches the
	  main console to stdin and stdout.
	  It is safe to leave this unchanged.

config CON_CHAN
	string "Default console channel initialization"
	default "xterm"
	help
	  This is the string describing the channel to which all consoles
	  except the main console will be attached by default.  This value can
	  be overridden from the command line.  The default value is "xterm",
	  which brings them up in xterms.
	  It is safe to leave this unchanged, although you may wish to change
	  this if you expect the UML that you build to be run in environments
	  which don't have X or xterm available.

config SSL_CHAN
	string "Default serial line channel initialization"
	default "pty"
	help
	  This is the string describing the channel to which the serial lines
	  will be attached by default.  This value can be overridden from the
	  command line.  The default value is "pty", which attaches them to
	  traditional pseudo-terminals.
	  It is safe to leave this unchanged, although you may wish to change
	  this if you expect the UML that you build to be run in environments
	  which don't have a set of /dev/pty* devices.

config UML_SOUND
	tristate "Sound support"
	depends on SOUND
	select SOUND_OSS_CORE
	help
	  This option enables UML sound support.  If enabled, it will pull in
	  the UML hostaudio relay, which acts as a intermediary
	  between the host's dsp and mixer devices and the UML sound system.
	  It is safe to say 'Y' here.

endmenu

menu "UML Network Devices"
	depends on NET

config UML_NET_VECTOR
	bool "Vector I/O high performance network devices"
	select MAY_HAVE_RUNTIME_DEPS
	help
	  This User-Mode Linux network driver uses multi-message send
	  and receive functions. The host running the UML guest must have
	  a linux kernel version above 3.0 and a libc version > 2.13.
	  This driver provides tap, raw, gre and l2tpv3 network transports.

	  For more information, including explanations of the networking
	  and sample configurations, see
	  <file:Documentation/virt/uml/user_mode_linux_howto_v2.rst>.

endmenu

config VIRTIO_UML
	bool "UML driver for virtio devices"
	select VIRTIO
	help
	  This driver provides support for virtio based paravirtual device
	  drivers over vhost-user sockets.

config UML_RTC
	bool "UML RTC driver"
	depends on RTC_CLASS
	# there's no use in this if PM_SLEEP isn't enabled ...
	depends on PM_SLEEP
	help
	  When PM_SLEEP is configured, it may be desirable to wake up using
	  rtcwake, especially in time-travel mode. This driver enables that
	  by providing a fake RTC clock that causes a wakeup at the right
	  time.

config UML_PCI
	bool
	select FORCE_PCI
	select IRQ_MSI_LIB
	select UML_IOMEM_EMULATION
	select UML_DMA_EMULATION
	select PCI_MSI
	select PCI_LOCKLESS_CONFIG

config UML_PCI_OVER_VIRTIO
	bool "Enable PCI over VIRTIO device simulation"
	# in theory, just VIRTIO is enough, but that causes recursion
	depends on VIRTIO_UML
	select UML_PCI

config UML_PCI_OVER_VIRTIO_DEVICE_ID
	int "set the virtio device ID for PCI emulation"
	default -1
	depends on UML_PCI_OVER_VIRTIO
	help
	  There's no official device ID assigned (yet), set the one you
	  wish to use for experimentation here. The default of -1 is
	  not valid and will cause the driver to fail at probe.

config UML_PCI_OVER_VFIO
	bool "Enable VFIO-based PCI passthrough"
	select UML_PCI
	help
	  This driver provides support for VFIO-based PCI passthrough.
	  Currently, only MSI-X capable devices are supported, and it
	  is assumed that drivers will use MSI-X.
