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

mainmenu "Linux Kernel Configuration"

config ARM
	bool
	default y

config ARM26
	bool
	default y

config MMU
	bool
	default y

config ARCH_ACORN
        bool
        default y

config CPU_26
        bool
        default y

config FIQ
        bool
        default y

# 9 = 512 pages 8 = 256 pages 7 = 128 pages
config FORCE_MAX_ZONEORDER
        int
        default 9

config RWSEM_GENERIC_SPINLOCK
	bool
	default y

config RWSEM_XCHGADD_ALGORITHM
	bool

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_BUST_SPINLOCK
	bool

config GENERIC_ISA_DMA
	bool

config ARCH_MAY_HAVE_PC_FDC
	bool

source "init/Kconfig"


menu "System Type"

choice
	prompt "Archimedes/A5000 Implementations"

config ARCH_ARC
        bool "Archimedes"
        help
          Say Y to support the Acorn Archimedes.

	  The Acorn Archimedes was an personal computer based on an 8MHz ARM2
          processor, released in 1987.  It supported up to 16MB of RAM in
	  later models and floppy, harddisc, ethernet etc.

config ARCH_A5K
        bool "A5000"
	select ARCH_MAY_HAVE_PC_FDC
        help
          Say Y here to support the Acorn A5000.

	  Linux can support the
          internal IDE disk and CD-ROM interface, serial and parallel port,
          and the floppy drive.  Note that on some A5000s the floppy is
          plugged into the wrong socket on the motherboard.

config PAGESIZE_16
        bool "2MB physical memory (broken)"
        help
          Say Y here if your Archimedes or A5000 system has only 2MB of
          memory, otherwise say N.  The resulting kernel will not run on a
          machine with 4MB of memory.
endchoice
endmenu

config ISA_DMA_API
	bool
	default y

menu "General setup"

# Compressed boot loader in ROM.  Yes, we really want to ask about
# TEXT and BSS so we preserve their values in the config files.
config ZBOOT_ROM
	bool "Compressed boot loader in ROM/flash"
	help
	  Say Y here if you intend to execute your compressed kernel image (zImage)
	  directly from ROM or flash.  If unsure, say N.

config ZBOOT_ROM_TEXT
	depends on ZBOOT_ROM
	hex "Compressed ROM boot loader base address"
	default "0"
	help
	  The base address for zImage.  Unless you have special requirements, you
	  should not change this value.

config ZBOOT_ROM_BSS
	depends on ZBOOT_ROM
	hex "Compressed ROM boot loader BSS address"
	default "0"
	help
	  The base address of 64KiB of read/write memory, which must be available
	  while the decompressor is running.  Unless you have special requirements,
	  you should not change this value.

config XIP_KERNEL
	bool "Execute In Place (XIP) kernel image"
	help
	  Select this option to create a kernel that can be programmed into
	  the OS ROMs.

comment "At least one math emulation must be selected"

config FPE_NWFPE
	tristate "NWFPE math emulation"
	---help---
	  Say Y to include the NWFPE floating point emulator in the kernel.
	  This is necessary to run most binaries. Linux does not currently
	  support floating point hardware so you need to say Y here even if
	  your machine has an FPA or floating point co-processor module.

	  It is also possible to say M to build the emulator as a module
	  (nwfpe) or indeed to leave it out altogether. However, unless you
	  know what you are doing this can easily render your machine
	  unbootable. Saying Y is the safe option.

	  You may say N here if you are going to load the Acorn FPEmulator
	  early in the bootup.

source "fs/Kconfig.binfmt"

config PREEMPT
	bool "Preemptible Kernel (EXPERIMENTAL)"
	depends on CPU_32 && EXPERIMENTAL
	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 ARTHUR
	tristate "RISC OS personality"
	depends on CPU_32
	help
	  Say Y here to include the kernel code necessary if you want to run
	  Acorn RISC OS/Arthur binaries under Linux. This code is still very
	  experimental; if this sounds frightening, say N and sleep in peace.
	  You can also say M here to compile this support as a module (which
	  will be called arthur).

config CMDLINE
	string "Default kernel command string"
	default ""
	help
	  On some architectures (EBSA110 and CATS), there is currently no way
	  for the boot loader to pass arguments to the kernel. For these
	  architectures, you should supply some command-line options at build
	  time by entering them here. As a minimum, you should specify the
	  memory size and the root device (e.g., mem=64M root=/dev/nfs).

source "mm/Kconfig"

endmenu

source "net/Kconfig"

source "drivers/base/Kconfig"

source "drivers/parport/Kconfig"

source "drivers/pnp/Kconfig"

source "drivers/block/Kconfig"

source "drivers/md/Kconfig"

source "drivers/net/Kconfig"

source "drivers/ide/Kconfig"

source "drivers/scsi/Kconfig"

source "drivers/isdn/Kconfig"

#
# input before char - char/joystick depends on it. As does USB.
#
source "drivers/input/Kconfig"

source "drivers/char/Kconfig"

source "drivers/media/Kconfig"

source "fs/Kconfig"

source "drivers/video/Kconfig"

if ARCH_ACORN

source "sound/Kconfig"

endif

source "drivers/misc/Kconfig"

source "drivers/usb/Kconfig"

source "arch/arm26/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"
