# $Id: config.in,v 1.158 2002/01/24 22:14:44 davem Exp $
# For a description of the syntax of this configuration file,
# see the Configure script.
#

mainmenu "Linux/UltraSPARC Kernel Configuration"

config SPARC
	bool
	default y

config SPARC64
	bool
	default y
	help
	  SPARC is a family of RISC microprocessors designed and marketed by
	  Sun Microsystems, incorporated.  This port covers the newer 64-bit
	  UltraSPARC.  The UltraLinux project maintains both the SPARC32 and
	  SPARC64 ports; its web page is available at
	  <http://www.ultralinux.org/>.

config 64BIT
	def_bool y

config MMU
	bool
	default y

config TIME_INTERPOLATION
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default y

choice
	prompt "Kernel page size"
	default SPARC64_PAGE_SIZE_8KB

config SPARC64_PAGE_SIZE_8KB
	bool "8KB"
	help
	  This lets you select the page size of the kernel.

	  8KB and 64KB work quite well, since Sparc ELF sections
	  provide for up to 64KB alignment.

	  Therefore, 512KB and 4MB are for expert hackers only.

	  If you don't know what to do, choose 8KB.

config SPARC64_PAGE_SIZE_64KB
	bool "64KB"

config SPARC64_PAGE_SIZE_512KB
	bool "512KB"

config SPARC64_PAGE_SIZE_4MB
	bool "4MB"

endchoice

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
	depends on PROC_FS
	default y
	help
	  This kernel feature is useful for number crunching applications
	  that may need to compute untrusted bytecode during their
	  execution. By using pipes or other transports made available to
	  the process as file descriptors supporting the read/write
	  syscalls, it's possible to isolate those applications in
	  their own address space using seccomp. Once seccomp is
	  enabled via /proc/<pid>/seccomp, it cannot be disabled
	  and the task is only allowed to execute a few safe syscalls
	  defined by each seccomp mode.

	  If unsure, say Y. Only embedded should say N here.

source kernel/Kconfig.hz

source "init/Kconfig"

config SYSVIPC_COMPAT
	bool
	depends on COMPAT && SYSVIPC
	default y

menu "General machine setup"

config SMP
	bool "Symmetric multi-processing support"
	---help---
	  This enables support for systems with more than one CPU. If you have
	  a system with only one CPU, say N. If you have a system with more than
	  one CPU, say Y.

	  If you say N here, the kernel will run on single and multiprocessor
	  machines, but will use only one CPU of a multiprocessor machine. If
	  you say Y here, the kernel will run on many, but not all,
	  singleprocessor machines. On a singleprocessor machine, the kernel
	  will run faster if you say N here.

	  People using multiprocessor machines who say Y here should also say
	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
	  Management" code will be disabled if you say Y here.

	  See also the <file:Documentation/smp.txt>,
	  <file:Documentation/nmi_watchdog.txt> and the SMP-HOWTO available at
	  <http://www.tldp.org/docs.html#howto>.

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

config PREEMPT
	bool "Preemptible Kernel"
	help
	  This option reduces the latency of the kernel when reacting to
	  real-time or interactive events by allowing a low priority process to
	  be preempted even if it is in kernel mode executing a system call.
	  This allows applications to run more reliably even when the system is
	  under load.

	  Say Y here if you are building a kernel for a desktop, embedded
	  or real-time system.  Say N if you are unsure.

config NR_CPUS
	int "Maximum number of CPUs (2-64)"
	range 2 64
	depends on SMP
	default "32"

source "drivers/cpufreq/Kconfig"

config US3_FREQ
	tristate "UltraSPARC-III CPU Frequency driver"
	depends on CPU_FREQ
	select CPU_FREQ_TABLE
	help
	  This adds the CPUFreq driver for UltraSPARC-III processors.

	  For details, take a look at <file:Documentation/cpu-freq>.

	  If in doubt, say N.

config US2E_FREQ
	tristate "UltraSPARC-IIe CPU Frequency driver"
	depends on CPU_FREQ
	select CPU_FREQ_TABLE
	help
	  This adds the CPUFreq driver for UltraSPARC-IIe processors.

	  For details, take a look at <file:Documentation/cpu-freq>.

	  If in doubt, say N.

# Global things across all Sun machines.
config RWSEM_GENERIC_SPINLOCK
	bool

config RWSEM_XCHGADD_ALGORITHM
	bool
	default y

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y if !ULTRA_HAS_POPULATION_COUNT

config GENERIC_CALIBRATE_DELAY
	bool
	default y

choice
	prompt "SPARC64 Huge TLB Page Size"
	depends on HUGETLB_PAGE
	default HUGETLB_PAGE_SIZE_4MB

config HUGETLB_PAGE_SIZE_4MB
	bool "4MB"

config HUGETLB_PAGE_SIZE_512K
	depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB
	bool "512K"

config HUGETLB_PAGE_SIZE_64K
	depends on !SPARC64_PAGE_SIZE_4MB && !SPARC64_PAGE_SIZE_512KB && !SPARC64_PAGE_SIZE_64K
	bool "64K"

endchoice

endmenu

config ARCH_SELECT_MEMORY_MODEL
	def_bool y

config ARCH_SPARSEMEM_ENABLE
	def_bool y

config ARCH_SPARSEMEM_DEFAULT
	def_bool y

config LARGE_ALLOCS
	def_bool y

source "mm/Kconfig"

config GENERIC_ISA_DMA
	bool
	default y

config ISA
	bool
	help
	  Find out whether you have ISA slots on your motherboard.  ISA is the
	  name of a bus system, i.e. the way the CPU talks to the other stuff
	  inside your box.  Other bus systems are PCI, EISA, MicroChannel
	  (MCA) or VESA.  ISA is an older system, now being displaced by PCI;
	  newer boards don't support it.  If you have ISA, say Y, otherwise N.

config ISAPNP
	bool
	help
	  Say Y here if you would like support for ISA Plug and Play devices.
	  Some information is in <file:Documentation/isapnp.txt>.

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

	  If unsure, say Y.

config EISA
	bool
	---help---
	  The Extended Industry Standard Architecture (EISA) bus was
	  developed as an open alternative to the IBM MicroChannel bus.

	  The EISA bus provided some of the features of the IBM MicroChannel
	  bus while maintaining backward compatibility with cards made for
	  the older ISA bus.  The EISA bus saw limited use between 1988 and
	  1995 when it was made obsolete by the PCI bus.

	  Say Y here if you are building a kernel for an EISA-based machine.

	  Otherwise, say N.

config MCA
	bool
	help
	  MicroChannel Architecture is found in some IBM PS/2 machines and
	  laptops.  It is a bus system similar to PCI or ISA. See
	  <file:Documentation/mca.txt> (and especially the web page given
	  there) before attempting to build an MCA bus kernel.

config PCMCIA
	tristate
	---help---
	  Say Y here if you want to attach PCMCIA- or PC-cards to your Linux
	  computer.  These are credit-card size devices such as network cards,
	  modems or hard drives often used with laptops computers.  There are
	  actually two varieties of these cards: the older 16 bit PCMCIA cards
	  and the newer 32 bit CardBus cards.  If you want to use CardBus
	  cards, you need to say Y here and also to "CardBus support" below.

	  To use your PC-cards, you will need supporting software from David
	  Hinds' pcmcia-cs package (see the file <file:Documentation/Changes>
	  for location).  Please also read the PCMCIA-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  To compile this driver as modules, choose M here: the
	  modules will be called pcmcia_core and ds.

config SBUS
	bool
	default y

config SBUSCHAR
	bool
	default y

config SUN_AUXIO
	bool
	default y

config SUN_IO
	bool
	default y

config PCI
	bool "PCI support"
	help
	  Find out whether you have a PCI motherboard. PCI is the name of a
	  bus system, i.e. the way the CPU talks to the other stuff inside
	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
	  VESA. If you have PCI, say Y, otherwise N.

	  The PCI-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>, contains valuable
	  information about which PCI hardware does work under Linux and which
	  doesn't.

config PCI_DOMAINS
	bool
	default PCI

source "drivers/pci/Kconfig"

config SUN_OPENPROMFS
	tristate "Openprom tree appears in /proc/openprom"
	help
	  If you say Y, the OpenPROM device tree will be available as a
	  virtual file system, which you can mount to /proc/openprom by "mount
	  -t openpromfs none /proc/openprom".

	  To compile the /proc/openprom support as a module, choose M here: the
	  module will be called openpromfs.  If unsure, choose M.

config SPARC32_COMPAT
	bool "Kernel support for Linux/Sparc 32bit binary compatibility"
	help
	  This allows you to run 32-bit binaries on your Ultra.
	  Everybody wants this; say Y.

config COMPAT
	bool
	depends on SPARC32_COMPAT
	default y

config BINFMT_ELF32
	tristate "Kernel support for 32-bit ELF binaries"
	depends on SPARC32_COMPAT
	help
	  This allows you to run 32-bit Linux/ELF binaries on your Ultra.
	  Everybody wants this; say Y.

config BINFMT_AOUT32
	bool "Kernel support for 32-bit (ie. SunOS) a.out binaries"
	depends on SPARC32_COMPAT
	help
	  This allows you to run 32-bit a.out format binaries on your Ultra.
	  If you want to run SunOS binaries (see SunOS binary emulation below)
	  or other a.out binaries, say Y. If unsure, say N.

menu "Executable file formats"

source "fs/Kconfig.binfmt"

config SUNOS_EMUL
	bool "SunOS binary emulation"
	depends on BINFMT_AOUT32
	help
	  This allows you to run most SunOS binaries.  If you want to do this,
	  say Y here and place appropriate files in /usr/gnemul/sunos. See
	  <http://www.ultralinux.org/faq.html> for more information.  If you
	  want to run SunOS binaries on an Ultra you must also say Y to
	  "Kernel support for 32-bit a.out binaries" above.

config SOLARIS_EMUL
	tristate "Solaris binary emulation (EXPERIMENTAL)"
	depends on SPARC32_COMPAT && EXPERIMENTAL
	help
	  This is experimental code which will enable you to run (many)
	  Solaris binaries on your SPARC Linux machine.

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

endmenu

config SCHED_SMT
	bool "SMT (Hyperthreading) scheduler support"
	depends on SMP
	default y
	help
	  SMT scheduler support improves the CPU scheduler's decision making
	  when dealing with UltraSPARC cpus at a cost of slightly increased
	  overhead in some places. If unsure say N here.

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyS0,9600 root=/dev/sda1"
	help
	  Say Y here if you want to be able to pass default arguments to
	  the kernel. This will be overridden by the bootloader, if you
	  use one (such as SILO). This is most useful if you want to boot
	  a kernel from TFTP, and want default options to be available
	  with having them passed on the command line.

	  NOTE: This option WILL override the PROM bootargs setting!

source "net/Kconfig"

source "drivers/Kconfig"

source "drivers/sbus/char/Kconfig"

source "drivers/fc4/Kconfig"

source "fs/Kconfig"

menu "Instrumentation Support"
        depends on EXPERIMENTAL

source "arch/sparc64/oprofile/Kconfig"

config KPROBES
	bool "Kprobes (EXPERIMENTAL)"
	depends on EXPERIMENTAL && MODULES
	help
	  Kprobes allows you to trap at almost any kernel address and
	  execute a callback function.  register_kprobe() establishes
	  a probepoint and specifies the callback.  Kprobes is useful
	  for kernel debugging, non-intrusive instrumentation and testing.
	  If in doubt, say "N".
endmenu

source "arch/sparc64/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
