# SPDX-License-Identifier: GPL-2.0
#
# Character device configuration
#

menu "Character devices"

source "drivers/tty/Kconfig"

config TTY_PRINTK
	tristate "TTY driver to output user messages via printk"
	depends on EXPERT && TTY
	default n
	---help---
	  If you say Y here, the support for writing user messages (i.e.
	  console messages) via printk is available.

	  The feature is useful to inline user messages with kernel
	  messages.
	  In order to use this feature, you should output user messages
	  to /dev/ttyprintk or redirect console to this TTY.

	  If unsure, say N.

config TTY_PRINTK_LEVEL
	depends on TTY_PRINTK
	int "ttyprintk log level (1-7)"
	range 1 7
	default "6"
	help
	  Printk log level to use for ttyprintk messages.

config PRINTER
	tristate "Parallel printer support"
	depends on PARPORT
	---help---
	  If you intend to attach a printer to the parallel port of your Linux
	  box (as opposed to using a serial printer; if the connector at the
	  printer has 9 or 25 holes ["female"], then it's serial), say Y.
	  Also read the Printing-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  It is possible to share one parallel port among several devices
	  (e.g. printer and ZIP drive) and it is safe to compile the
	  corresponding drivers into the kernel.

	  To compile this driver as a module, choose M here and read
	  <file:Documentation/admin-guide/parport.rst>.  The module will be called lp.

	  If you have several parallel ports, you can specify which ports to
	  use with the "lp" kernel command line option.  (Try "man bootparam"
	  or see the documentation of your boot loader (lilo or loadlin) about
	  how to pass options to the kernel at boot time.)  The syntax of the
	  "lp" command line option can be found in <file:drivers/char/lp.c>.

	  If you have more than 8 printers, you need to increase the LP_NO
	  macro in lp.c and the PARPORT_MAX macro in parport.h.

config LP_CONSOLE
	bool "Support for console on line printer"
	depends on PRINTER
	---help---
	  If you want kernel messages to be printed out as they occur, you
	  can have a console on the printer. This option adds support for
	  doing that; to actually get it to happen you need to pass the
	  option "console=lp0" to the kernel at boot time.

	  If the printer is out of paper (or off, or unplugged, or too
	  busy..) the kernel will stall until the printer is ready again.
	  By defining CONSOLE_LP_STRICT to 0 (at your own risk) you
	  can make the kernel continue when this happens,
	  but it'll lose the kernel messages.

	  If unsure, say N.

config PPDEV
	tristate "Support for user-space parallel port device drivers"
	depends on PARPORT
	---help---
	  Saying Y to this adds support for /dev/parport device nodes.  This
	  is needed for programs that want portable access to the parallel
	  port, for instance deviceid (which displays Plug-and-Play device
	  IDs).

	  This is the parallel port equivalent of SCSI generic support (sg).
	  It is safe to say N to this -- it is not needed for normal printing
	  or parallel port CD-ROM/disk support.

	  To compile this driver as a module, choose M here: the
	  module will be called ppdev.

	  If unsure, say N.

config VIRTIO_CONSOLE
	tristate "Virtio console"
	depends on VIRTIO && TTY
	select HVC_DRIVER
	help
	  Virtio console for use with hypervisors.

	  Also serves as a general-purpose serial device for data
	  transfer between the guest and host.  Character devices at
	  /dev/vportNpn will be created when corresponding ports are
	  found, where N is the device number and n is the port number
	  within that device.  If specified by the host, a sysfs
	  attribute called 'name' will be populated with a name for
	  the port which can be used by udev scripts to create a
	  symlink to the device.

config IBM_BSR
	tristate "IBM POWER Barrier Synchronization Register support"
	depends on PPC_PSERIES
	help
	  This devices exposes a hardware mechanism for fast synchronization
	  of threads across a large system which avoids bouncing a cacheline
	  between several cores on a system

config POWERNV_OP_PANEL
	tristate "IBM POWERNV Operator Panel Display support"
	depends on PPC_POWERNV
	default m
	help
	  If you say Y here, a special character device node, /dev/op_panel,
	  will be created which exposes the operator panel display on IBM
	  Power Systems machines with FSPs.

	  If you don't require access to the operator panel display from user
	  space, say N.

	  If unsure, say M here to build it as a module called powernv-op-panel.

source "drivers/char/ipmi/Kconfig"

config DS1620
	tristate "NetWinder thermometer support"
	depends on ARCH_NETWINDER
	help
	  Say Y here to include support for the thermal management hardware
	  found in the NetWinder. This driver allows the user to control the
	  temperature set points and to read the current temperature.

	  It is also possible to say M here to build it as a module (ds1620)
	  It is recommended to be used on a NetWinder, but it is not a
	  necessity.

config NWBUTTON
	tristate "NetWinder Button"
	depends on ARCH_NETWINDER
	---help---
	  If you say Y here and create a character device node /dev/nwbutton
	  with major and minor numbers 10 and 158 ("man mknod"), then every
	  time the orange button is pressed a number of times, the number of
	  times the button was pressed will be written to that device.

	  This is most useful for applications, as yet unwritten, which
	  perform actions based on how many times the button is pressed in a
	  row.

	  Do not hold the button down for too long, as the driver does not
	  alter the behaviour of the hardware reset circuitry attached to the
	  button; it will still execute a hard reset if the button is held
	  down for longer than approximately five seconds.

	  To compile this driver as a module, choose M here: the
	  module will be called nwbutton.

	  Most people will answer Y to this question and "Reboot Using Button"
	  below to be able to initiate a system shutdown from the button.

config NWBUTTON_REBOOT
	bool "Reboot Using Button"
	depends on NWBUTTON
	help
	  If you say Y here, then you will be able to initiate a system
	  shutdown and reboot by pressing the orange button a number of times.
	  The number of presses to initiate the shutdown is two by default,
	  but this can be altered by modifying the value of NUM_PRESSES_REBOOT
	  in nwbutton.h and recompiling the driver or, if you compile the
	  driver as a module, you can specify the number of presses at load
	  time with "insmod button reboot_count=<something>".

config NWFLASH
	tristate "NetWinder flash support"
	depends on ARCH_NETWINDER
	---help---
	  If you say Y here and create a character device /dev/flash with
	  major 10 and minor 160 you can manipulate the flash ROM containing
	  the NetWinder firmware. Be careful as accidentally overwriting the
	  flash contents can render your computer unbootable. On no account
	  allow random users access to this device. :-)

	  To compile this driver as a module, choose M here: the
	  module will be called nwflash.

	  If you're not sure, say N.

source "drivers/char/hw_random/Kconfig"

config DTLK
	tristate "Double Talk PC internal speech card support"
	depends on ISA
	help
	  This driver is for the DoubleTalk PC, a speech synthesizer
	  manufactured by RC Systems (<http://www.rcsys.com/>).  It is also
	  called the `internal DoubleTalk'.

	  To compile this driver as a module, choose M here: the
	  module will be called dtlk.

config XILINX_HWICAP
	tristate "Xilinx HWICAP Support"
	depends on XILINX_VIRTEX || MICROBLAZE
	help
	  This option enables support for Xilinx Internal Configuration
	  Access Port (ICAP) driver.  The ICAP is used on Xilinx Virtex
	  FPGA platforms to partially reconfigure the FPGA at runtime.

	  If unsure, say N.

config R3964
	tristate "Siemens R3964 line discipline"
	depends on TTY && BROKEN
	---help---
	  This driver allows synchronous communication with devices using the
	  Siemens R3964 packet protocol. Unless you are dealing with special
	  hardware like PLCs, you are unlikely to need this.

	  To compile this driver as a module, choose M here: the
	  module will be called n_r3964.

	  If unsure, say N.

config APPLICOM
	tristate "Applicom intelligent fieldbus card support"
	depends on PCI
	---help---
	  This driver provides the kernel-side support for the intelligent
	  fieldbus cards made by Applicom International. More information
	  about these cards can be found on the WWW at the address
	  <http://www.applicom-int.com/>, or by email from David Woodhouse
	  <dwmw2@infradead.org>.

	  To compile this driver as a module, choose M here: the
	  module will be called applicom.

	  If unsure, say N.

config SONYPI
	tristate "Sony Vaio Programmable I/O Control Device support"
	depends on X86_32 && PCI && INPUT
	---help---
	  This driver enables access to the Sony Programmable I/O Control
	  Device which can be found in many (all ?) Sony Vaio laptops.

	  If you have one of those laptops, read
	  <file:Documentation/admin-guide/laptops/sonypi.rst>, and say Y or M here.

	  To compile this driver as a module, choose M here: the
	  module will be called sonypi.

config GPIO_TB0219
	tristate "TANBAC TB0219 GPIO support"
	depends on TANBAC_TB022X
	select GPIO_VR41XX

source "drivers/char/pcmcia/Kconfig"

config MWAVE
	tristate "ACP Modem (Mwave) support"
	depends on X86 && TTY
	select SERIAL_8250
	---help---
	  The ACP modem (Mwave) for Linux is a WinModem. It is composed of a
	  kernel driver and a user level application. Together these components
	  support direct attachment to public switched telephone networks (PSTNs)
	  and support selected world wide countries.

	  This version of the ACP Modem driver supports the IBM Thinkpad 600E,
	  600, and 770 that include on board ACP modem hardware.

	  The modem also supports the standard communications port interface
	  (ttySx) and is compatible with the Hayes AT Command Set.

	  The user level application needed to use this driver can be found at
	  the IBM Linux Technology Center (LTC) web site:
	  <http://www.ibm.com/linux/ltc/>.

	  If you own one of the above IBM Thinkpads which has the Mwave chipset
	  in it, say Y.

	  To compile this driver as a module, choose M here: the
	  module will be called mwave.

config SCx200_GPIO
	tristate "NatSemi SCx200 GPIO Support"
	depends on SCx200
	select NSC_GPIO
	help
	  Give userspace access to the GPIO pins on the National
	  Semiconductor SCx200 processors.

	  If compiled as a module, it will be called scx200_gpio.

config PC8736x_GPIO
	tristate "NatSemi PC8736x GPIO Support"
	depends on X86_32 && !UML
	default SCx200_GPIO	# mostly N
	select NSC_GPIO		# needed for support routines
	help
	  Give userspace access to the GPIO pins on the National
	  Semiconductor PC-8736x (x=[03456]) SuperIO chip.  The chip
	  has multiple functional units, inc several managed by
	  hwmon/pc87360 driver.  Tested with PC-87366

	  If compiled as a module, it will be called pc8736x_gpio.

config NSC_GPIO
	tristate "NatSemi Base GPIO Support"
	depends on X86_32
	# selected by SCx200_GPIO and PC8736x_GPIO
	# what about 2 selectors differing: m != y
	help
	  Common support used (and needed) by scx200_gpio and
	  pc8736x_gpio drivers.  If those drivers are built as
	  modules, this one will be too, named nsc_gpio

config DEVMEM
	bool "/dev/mem virtual device support"
	default y
	help
	  Say Y here if you want to support the /dev/mem device.
	  The /dev/mem device is used to access areas of physical
	  memory.
	  When in doubt, say "Y".

config DEVMEM_BOOTPARAM
	bool "mem.devmem boot parameter"
	depends on DEVMEM
	default n
	help
	  This option adds a 'mem.devmem' kernel parameter which activates
	  the /dev/mem device when enabled.
	  When in doubt, say "N".

config DEVKMEM
	bool "/dev/kmem virtual device support"
	# On arm64, VMALLOC_START < PAGE_OFFSET, which confuses kmem read/write
	depends on !ARM64
	help
	  Say Y here if you want to support the /dev/kmem device. The
	  /dev/kmem device is rarely used, but can be used for certain
	  kind of kernel debugging operations.
	  When in doubt, say "N".

config NVRAM
	tristate "/dev/nvram support"
	depends on X86 || HAVE_ARCH_NVRAM_OPS
	default M68K || PPC
	---help---
	  If you say Y here and create a character special file /dev/nvram
	  with major number 10 and minor number 144 using mknod ("man mknod"),
	  you get read and write access to the non-volatile memory.

	  /dev/nvram may be used to view settings in NVRAM or to change them
	  (with some utility). It could also be used to frequently
	  save a few bits of very important data that may not be lost over
	  power-off and for which writing to disk is too insecure. Note
	  however that most NVRAM space in a PC belongs to the BIOS and you
	  should NEVER idly tamper with it. See Ralf Brown's interrupt list
	  for a guide to the use of CMOS bytes by your BIOS.

	  This memory is conventionally called "NVRAM" on PowerPC machines,
	  "CMOS RAM" on PCs, "NVRAM" on Ataris and "PRAM" on Macintoshes.

	  To compile this driver as a module, choose M here: the
	  module will be called nvram.

config RAW_DRIVER
	tristate "RAW driver (/dev/raw/rawN)"
	depends on BLOCK
	help
	  The raw driver permits block devices to be bound to /dev/raw/rawN.
	  Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
	  See the raw(8) manpage for more details.

	  Applications should preferably open the device (eg /dev/hda1)
	  with the O_DIRECT flag.

config MAX_RAW_DEVS
	int "Maximum number of RAW devices to support (1-65536)"
	depends on RAW_DRIVER
	range 1 65536
	default "256"
	help
	  The maximum number of RAW devices that are supported.
	  Default is 256. Increase this number in case you need lots of
	  raw devices.

config DEVPORT
	bool "/dev/port character device"
	depends on ISA || PCI
	default y
	help
	  Say Y here if you want to support the /dev/port device. The /dev/port
	  device is similar to /dev/mem, but for I/O ports.

config HPET
	bool "HPET - High Precision Event Timer" if (X86 || IA64)
	default n
	depends on ACPI
	help
	  If you say Y here, you will have a miscdevice named "/dev/hpet/".  Each
	  open selects one of the timers supported by the HPET.  The timers are
	  non-periodic and/or periodic.

config HPET_MMAP
	bool "Allow mmap of HPET"
	default y
	depends on HPET
	help
	  If you say Y here, user applications will be able to mmap
	  the HPET registers.

config HPET_MMAP_DEFAULT
	bool "Enable HPET MMAP access by default"
	default y
	depends on HPET_MMAP
	help
	  In some hardware implementations, the page containing HPET
	  registers may also contain other things that shouldn't be
	  exposed to the user.  This option selects the default (if
	  kernel parameter hpet_mmap is not set) user access to the
	  registers for applications that require it.

config HANGCHECK_TIMER
	tristate "Hangcheck timer"
	depends on X86 || IA64 || PPC64 || S390
	help
	  The hangcheck-timer module detects when the system has gone
	  out to lunch past a certain margin.  It can reboot the system
	  or merely print a warning.

config UV_MMTIMER
	tristate "UV_MMTIMER Memory mapped RTC for SGI UV"
	depends on X86_UV
	default m
	help
	  The uv_mmtimer device allows direct userspace access to the
	  UV system timer.

source "drivers/char/tpm/Kconfig"

config TELCLOCK
	tristate "Telecom clock driver for ATCA SBC"
	depends on X86
	default n
	help
	  The telecom clock device is specific to the MPCBL0010 and MPCBL0050
	  ATCA computers and allows direct userspace access to the
	  configuration of the telecom clock configuration settings.  This
	  device is used for hardware synchronization across the ATCA backplane
	  fabric.  Upon loading, the driver exports a sysfs directory,
	  /sys/devices/platform/telco_clock, with a number of files for
	  controlling the behavior of this hardware.

source "drivers/s390/char/Kconfig"

source "drivers/char/xillybus/Kconfig"

config ADI
	tristate "SPARC Privileged ADI driver"
	depends on SPARC64
	default m
	help
	  SPARC M7 and newer processors utilize ADI (Application Data
	  Integrity) to version and protect memory.  This driver provides
	  read/write access to the ADI versions for privileged processes.
	  This feature is also known as MCD (Memory Corruption Detection)
	  and SSM (Silicon Secured Memory).  Intended consumers of this
	  driver include crash and makedumpfile.

endmenu

config RANDOM_TRUST_CPU
	bool "Trust the CPU manufacturer to initialize Linux's CRNG"
	depends on ARCH_RANDOM
	default n
	help
	Assume that CPU manufacturer (e.g., Intel or AMD for RDSEED or
	RDRAND, IBM for the S390 and Power PC architectures) is trustworthy
	for the purposes of initializing Linux's CRNG.  Since this is not
	something that can be independently audited, this amounts to trusting
	that CPU manufacturer (perhaps with the insistence or mandate
	of a Nation State's intelligence or law enforcement agencies)
	has not installed a hidden back door to compromise the CPU's
	random number generation facilities. This can also be configured
	at boot with "random.trust_cpu=on/off".

config RANDOM_TRUST_BOOTLOADER
	bool "Trust the bootloader to initialize Linux's CRNG"
	help
	Some bootloaders can provide entropy to increase the kernel's initial
	device randomness. Say Y here to assume the entropy provided by the
	booloader is trustworthy so it will be added to the kernel's entropy
	pool. Otherwise, say N here so it will be regarded as device input that
	only mixes the entropy pool.
