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

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