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 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"
	help
          This option enables UML sound support.  If enabled, it will pull in
          soundcore and 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.

config SOUND
	tristate
	default UML_SOUND

config SOUND_OSS_CORE
	bool
	default UML_SOUND

config HOSTAUDIO
	tristate
	default UML_SOUND

endmenu
