# 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

config HZ
	int
	default 100

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 "arch/xtensa/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"


