#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#

config 64BIT
	def_bool y

config MMU
	bool
	default y

config UID16
	bool

config RWSEM_GENERIC_SPINLOCK
	bool

config RWSEM_XCHGADD_ALGORITHM
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_ISA_DMA
	bool
	default y

config HAVE_DEC_LOCK
	bool
	default y

config EARLY_PRINTK
	bool
	default y

config COMPAT
	bool
	default y

# We optimistically allocate largepages from the VM, so make the limit
# large enough (16MB). This badly named config option is actually
# max order + 1
config FORCE_MAX_ZONEORDER
	int
	default "13"

source "init/Kconfig"

config SYSVIPC_COMPAT
	bool
	depends on COMPAT && SYSVIPC
	default y

menu "Platform support"

choice
	prompt "Platform Type"
	default PPC_MULTIPLATFORM

config PPC_ISERIES
	bool "IBM Legacy iSeries"

config PPC_MULTIPLATFORM
	bool "Generic"

endchoice

config PPC_PSERIES
	depends on PPC_MULTIPLATFORM
	bool "  IBM pSeries & new iSeries"
	default y

config PPC_PMAC
	depends on PPC_MULTIPLATFORM
	bool "  Apple G5 based machines"
	default y
	select U3_DART

config PPC_MAPLE
	depends on PPC_MULTIPLATFORM
	bool "  Maple 970FX Evaluation Board"
	select U3_DART
	select MPIC_BROKEN_U3
	default n
	help
          This option enables support for the Maple 970FX Evaluation Board.
	  For more informations, refer to <http://www.970eval.com>

config PPC
	bool
	default y

config PPC64
	bool
	default y

config PPC_OF
	depends on PPC_MULTIPLATFORM
	bool
	default y

# VMX is pSeries only for now until somebody writes the iSeries
# exception vectors for it
config ALTIVEC
	bool "Support for VMX (Altivec) vector unit"
	depends on PPC_MULTIPLATFORM
	default y

config PPC_SPLPAR
	depends on PPC_PSERIES
	bool "Support for shared-processor logical partitions"
	default n
	help
	  Enabling this option will make the kernel run more efficiently
	  on logically-partitioned pSeries systems which use shared
	  processors, that is, which share physical processors between
	  two or more partitions.

config IBMVIO
	depends on PPC_PSERIES || PPC_ISERIES
	bool
	default y

config U3_DART
	bool 
	depends on PPC_MULTIPLATFORM
	default n

config MPIC_BROKEN_U3
	bool
	depends on PPC_MAPLE
	default y

config PPC_PMAC64
	bool
	depends on PPC_PMAC
	default y

config BOOTX_TEXT
	bool "Support for early boot text console"
	depends PPC_OF
	help
	  Say Y here to see progress messages from the boot firmware in text
	  mode. Requires an Open Firmware compatible video card.

config POWER4_ONLY
	bool "Optimize for POWER4"
	default n
	---help---
	  Cause the compiler to optimize for POWER4 processors. The resulting
	  binary will not work on POWER3 or RS64 processors when compiled with
	  binutils 2.15 or later.

config IOMMU_VMERGE
	bool "Enable IOMMU virtual merging (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	default n
	help
	  Cause IO segments sent to a device for DMA to be merged virtually
	  by the IOMMU when they happen to have been allocated contiguously.
	  This doesn't add pressure to the IOMMU allocator. However, some
	  drivers don't support getting large merged segments coming back
	  from *_map_sg(). Say Y if you know the drivers you are using are
	  properly handling this case.

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 single-processor machines.
	  On a single-processor machine, the kernel will run faster if you say
	  N here.

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

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

config HMT
	bool "Hardware multithreading"
	depends on SMP && PPC_PSERIES && BROKEN
	help
	  This option enables hardware multithreading on RS64 cpus.
	  pSeries systems p620 and p660 have such a cpu type.

config DISCONTIGMEM
	bool "Discontiguous Memory Support"
	depends on SMP && PPC_PSERIES

config NUMA
	bool "NUMA support"
	depends on DISCONTIGMEM

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

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.

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

config PREEMPT_BKL
	bool "Preempt The Big Kernel Lock"
	depends on PREEMPT
	default y
	help
	  This option reduces the latency of the kernel by making the
	  big kernel lock preemptible.

	  Say Y here if you are building a kernel for a desktop system.
	  Say N if you are unsure.

config EEH
	bool "PCI Extended Error Handling (EEH)" if EMBEDDED
	depends on PPC_PSERIES
	default y if !EMBEDDED

#
# Use the generic interrupt handling code in kernel/irq/:
#
config GENERIC_HARDIRQS
	bool
	default y

config MSCHUNKS
	bool
	depends on PPC_ISERIES
	default y


config PPC_RTAS
	bool
	depends on PPC_PSERIES
	default y

config RTAS_PROC
	bool "Proc interface to RTAS"
	depends on PPC_RTAS

config RTAS_FLASH
	tristate "Firmware flash interface"
	depends on RTAS_PROC

config SCANLOG
	tristate "Scanlog dump interface"
	depends on RTAS_PROC && PPC_PSERIES

config LPARCFG
	tristate "LPAR Configuration Data"
	depends on PPC_PSERIES || PPC_ISERIES
	help
	Provide system capacity information via human readable
	<key word>=<value> pairs through a /proc/ppc64/lparcfg interface.

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.

endmenu


menu "General setup"

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.  If you have an Apple machine, say N here; if you
	  have an IBM RS/6000 or pSeries machine or a PReP machine, say Y.  If
	  you have an embedded board, consult your board documentation.

config SBUS
	bool

config MCA
	bool

config EISA
	bool

config PCI
	bool
	default y
	help
	  Find out whether your system includes a PCI bus. PCI is the name of
	  a bus system, i.e. the way the CPU talks to the other stuff inside
	  your box.  If you say Y here, the kernel will include drivers and
	  infrastructure code to support PCI bus devices.

config PCI_DOMAINS
	bool
	default PCI

source "fs/Kconfig.binfmt"

source "drivers/pci/Kconfig"

config HOTPLUG_CPU
	bool "Support for hot-pluggable CPUs"
	depends on SMP && EXPERIMENTAL && (PPC_PSERIES || PPC_PMAC)
	select HOTPLUG
	---help---
	  Say Y here to be able to turn CPUs off and on.

	  Say N if you are unsure.

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

config PROC_DEVICETREE
	bool "Support for Open Firmware device tree in /proc"
	depends on !PPC_ISERIES
	help
	  This option adds a device-tree directory under /proc which contains
	  an image of the device tree that the kernel copies from Open
	  Firmware. If unsure, say Y here.

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"
	depends on !PPC_ISERIES

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyS0,9600 console=tty0 root=/dev/sda2"
	help
	  On some platforms, there is currently no way for the boot loader to
	  pass arguments to the kernel. For these platforms, you can supply
	  some command-line options at build time by entering them here.  In
	  most cases you will need to specify the root device here.

endmenu

source "drivers/Kconfig"

source "fs/Kconfig"

menu "iSeries device drivers"
	depends on PPC_ISERIES

config VIOCONS
	tristate "iSeries Virtual Console Support"

config VIODASD
	tristate "iSeries Virtual I/O disk support"
	help
	  If you are running on an iSeries system and you want to use
 	  virtual disks created and managed by OS/400, say Y.

config VIOCD
	tristate "iSeries Virtual I/O CD support"
	help
	  If you are running Linux on an IBM iSeries system and you want to
	  read a CD drive owned by OS/400, say Y here.

config VIOTAPE
	tristate "iSeries Virtual Tape Support"
	help
	  If you are running Linux on an iSeries system and you want Linux
	  to read and/or write a tape drive owned by OS/400, say Y here.

endmenu

config VIOPATH
	bool
	depends on VIOCONS || VIODASD || VIOCD || VIOTAPE || VETH
	default y

source "arch/ppc64/oprofile/Kconfig"

source "arch/ppc64/Kconfig.debug"

source "security/Kconfig"

config KEYS_COMPAT
	bool
	depends on COMPAT && KEYS
	default y

source "crypto/Kconfig"

source "lib/Kconfig"
