#
# 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

config SCHED_NO_NO_OMIT_FRAME_POINTER
	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_BPA
	bool "  Broadband Processor Architecture"
	depends on PPC_MULTIPLATFORM

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

config XICS
	depends on PPC_PSERIES
	bool
	default y

config MPIC
	depends on PPC_PSERIES || PPC_PMAC || PPC_MAPLE
	bool
	default y

config BPA_IIC
	depends on PPC_BPA
	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 KEXEC
	bool "kexec system call (EXPERIMENTAL)"
	depends on PPC_MULTIPLATFORM && EXPERIMENTAL
	help
	  kexec is a system call that implements the ability to shutdown your
	  current kernel, and to start another kernel.  It is like a reboot
	  but it is indepedent of the system firmware.  And like a reboot
	  you can start any kernel with it, not just Linux.

	  The name comes from the similiarity to the exec system call.

	  It is an ongoing process to be certain the hardware in a machine
	  is properly shutdown, so do not be surprised if this code does not
	  initially work for you.  It may help to enable device hotplugging
	  support.  As of this writing the exact hardware interface is
	  strongly in flux, so no good recommendation can be made.

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 ARCH_SELECT_MEMORY_MODEL
	def_bool y

config ARCH_FLATMEM_ENABLE
       def_bool y
       depends on !NUMA

config ARCH_DISCONTIGMEM_ENABLE
	def_bool y
	depends on SMP && PPC_PSERIES

config ARCH_DISCONTIGMEM_DEFAULT
	def_bool y
	depends on ARCH_DISCONTIGMEM_ENABLE

config ARCH_FLATMEM_ENABLE
	def_bool y

config ARCH_SPARSEMEM_ENABLE
	def_bool y
	depends on ARCH_DISCONTIGMEM_ENABLE

source "mm/Kconfig"

config HAVE_ARCH_EARLY_PFN_TO_NID
	def_bool y
	depends on NEED_MULTIPLE_NODES

# Some NUMA nodes have memory ranges that span
# other nodes.  Even though a pfn is valid and
# between a node's start and end pfns, it may not
# reside on that node.
#
# This is a relatively temporary hack that should
# be able to go away when sparsemem is fully in
# place
config NODES_SPAN_OTHER_NODES
	def_bool y
	depends on NEED_MULTIPLE_NODES

config NUMA
	bool "NUMA support"
	default y if DISCONTIGMEM || SPARSEMEM

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.

source "kernel/Kconfig.preempt"
source kernel/Kconfig.hz

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 || PPC_BPA
	default y

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

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

config ISA_DMA_API
	bool
	default y

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 "support for PCI devices" if (EMBEDDED && PPC_ISERIES)
	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 "net/Kconfig"

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"
