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

mainmenu "Linux/Xtensa Kernel Configuration"

config FRAME_POINTER
	bool
	default n

config ZONE_DMA
	bool
	default y

config XTENSA
	bool
	default y
	help
	  Xtensa processors are 32-bit RISC machines designed by Tensilica
	  primarily for embedded systems.  These processors are both
	  configurable and extensible.  The Linux port to the Xtensa
	  architecture supports all processor configurations and extensions,
	  with reasonable minimum requirements.  The Xtensa Linux project has
	  a home page at <http://xtensa.sourceforge.net/>.

config RWSEM_XCHGADD_ALGORITHM
	bool
	default y

config GENERIC_FIND_NEXT_BIT
	bool
	default y

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config NO_IOPORT
	def_bool y

source "init/Kconfig"

menu "Processor type and features"

choice
	prompt "Xtensa Processor Configuration"
	default XTENSA_VARIANT_FSF

config XTENSA_VARIANT_FSF
	bool "fsf"
endchoice

config MMU
	bool
	default y

config XTENSA_UNALIGNED_USER
	bool "Unaligned memory access in use space"
	---help---
	   The Xtensa architecture currently does not handle unaligned
	   memory accesses in hardware but through an exception handler.
	   Per default, unaligned memory accesses are disabled in user space.

	   Say Y here to enable unaligned memory access in user space.

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.
           Unfortunately the kernel code has some race conditions if both
           CONFIG_SMP and CONFIG_PREEMPT are enabled, so this option is
           currently disabled if you are building an SMP kernel.

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

config MATH_EMULATION
	bool "Math emulation"
	help
	Can we use information of configuration file?

config HIGHMEM
	bool "High memory support"

endmenu

menu "Platform options"

choice
	prompt "Xtensa System Type"
	default XTENSA_PLATFORM_ISS

config XTENSA_PLATFORM_ISS
	bool "ISS"
	help
	  ISS is an acronym for Tensilica's Instruction Set Simulator.

config XTENSA_PLATFORM_XT2000
	bool "XT2000"
	help
	  XT2000 is the name of Tensilica's feature-rich emulation platform.
	  This hardware is capable of running a full Linux distribution.

endchoice


config XTENSA_CALIBRATE_CCOUNT
	bool "Auto calibration of the CPU clock rate"
	---help---
	  On some platforms (XT2000, for example), the CPU clock rate can
	  vary.  The frequency can be determined, however, by measuring
	  against a well known, fixed frequency, such as an UART oscillator.

config XTENSA_CPU_CLOCK
	int "CPU clock rate [MHz]"
	depends on !XTENSA_CALIBRATE_CCOUNT
	default "16"

config GENERIC_CALIBRATE_DELAY
	bool "Auto calibration of the BogoMIPS value"
	---help---
	  The BogoMIPS value can easily be derived from the CPU frequency.

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyS0,38400 root=/dev/ram"
	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).

config SERIAL_CONSOLE
	bool
	depends on XTENSA_PLATFORM_ISS
	default y

config XTENSA_ISS_NETWORK
	bool
	depends on XTENSA_PLATFORM_ISS
	default y

source "mm/Kconfig"

endmenu

menu "Bus options"

config PCI
	bool "PCI support" if !XTENSA_PLATFORM_ISS
	depends on !XTENSA_PLATFORM_ISS
	default y
	help
	  Find out whether you have a PCI motherboard. PCI is the name of a
	  bus system, i.e. the way the CPU talks to the other stuff inside
	  your box. Other bus systems are ISA, EISA, MicroChannel (MCA) or
	  VESA. If you have PCI, say Y, otherwise N.

source "drivers/pci/Kconfig"

config HOTPLUG

	bool "Support for hot-pluggable devices"
	---help---
	Say Y here if you want to plug devices into your computer while
	the system is running, and be able to use them quickly.  In many
	cases, the devices can likewise be unplugged at any time too.

	One well known example of this is PCMCIA- or PC-cards, credit-card
	size devices such as network cards, modems or hard drives which are
	plugged into slots found on all modern laptop computers.  Another
	example, used on modern desktops as well as laptops, is USB.

	Enable HOTPLUG and KMOD, and build a modular kernel.  Get agent
	software (at <http://linux-hotplug.sourceforge.net/>) and install it.
	Then your kernel will automatically call out to a user mode "policy
	agent" (/sbin/hotplug) to load modules and set up software needed
	to use devices as you hotplug them.

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

# only elf supported
config KCORE_ELF
        bool
        depends on PROC_FS
        default y
        help
          If you enabled support for /proc file system then the file
          /proc/kcore will contain the kernel core image in ELF format. This
          can be used in gdb:

          $ cd /usr/src/linux ; gdb vmlinux /proc/kcore

          This is especially useful if you have compiled the kernel with the
          "-g" option to preserve debugging information. It is mainly used
	  for examining kernel data structures on the live kernel.

source "fs/Kconfig.binfmt"

endmenu

source "net/Kconfig"

source "drivers/Kconfig"

source "fs/Kconfig"

menu "Xtensa initrd options"
	depends on BLK_DEV_INITRD

	config EMBEDDED_RAMDISK
	bool "Embed root filesystem ramdisk into the kernel"

config EMBEDDED_RAMDISK_IMAGE
	string "Filename of gzipped ramdisk image"
	depends on EMBEDDED_RAMDISK
	default "ramdisk.gz"
	help
	  This is the filename of the ramdisk image to be built into the
	  kernel.  Relative pathnames are relative to arch/xtensa/boot/ramdisk/.
	  The ramdisk image is not part of the kernel distribution; you must
	  provide one yourself.
endmenu

source "kernel/Kconfig.instrumentation"

source "arch/xtensa/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"


