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

config COMPAT
	bool
	default y

config SCHED_NO_NO_OMIT_FRAME_POINTER
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	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 NUMA
	bool "NUMA support"
	default y if DISCONTIGMEM || SPARSEMEM

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

source "fs/Kconfig.binfmt"

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.

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

config ISA_DMA_API
	bool
	default y

menu "Bus Options"

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 "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

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"
