# $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 STACKTRACE_SUPPORT
	bool
	default y

config LOCKDEP_SUPPORT
	bool
	default y

config TIME_INTERPOLATION
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default y

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config AUDIT_ARCH
	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

config GENERIC_HARDIRQS
	bool
	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_64KB
	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
	bool "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 KALLSYMS && 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"
