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

mainmenu "uClinux/v850 (w/o MMU) Kernel Configuration"

config MMU
       	bool
	default n
config ZONE_DMA
	bool
	default y
config RWSEM_GENERIC_SPINLOCK
	bool
	default y
config RWSEM_XCHGADD_ALGORITHM
	bool
	default n
config GENERIC_FIND_NEXT_BIT
	bool
	default y
config GENERIC_HWEIGHT
	bool
	default y
config GENERIC_CALIBRATE_DELAY
	bool
	default y

config GENERIC_HARDIRQS
	bool
	default y

config GENERIC_IRQ_PROBE
	bool
	default y

config GENERIC_TIME
	bool
	default y

config TIME_LOW_RES
	bool
	default y

config ARCH_HAS_ILOG2_U32
	bool
	default n

config ARCH_HAS_ILOG2_U64
	bool
	default n

config ARCH_SUPPORTS_AOUT
	def_bool y

# Turn off some random 386 crap that can affect device config
config ISA
	bool
	default n
config ISAPNP
	bool
	default n
config EISA
	bool
	default n
config MCA
	bool
	default n


#############################################################################
#### v850-specific config

# Define the architecture
config V850
	bool
	default y
	select HAVE_IDE

menu "Processor type and features"

   choice
	  prompt "Platform"
	  default GDB
      config V850E_SIM
      	     bool "GDB"
      config RTE_CB_MA1
      	     bool "RTE-V850E/MA1-CB"
      config RTE_CB_NB85E
      	     bool "RTE-V850E/NB85E-CB"
      config RTE_CB_ME2
      	     bool "RTE-V850E/ME2-CB"
      config V850E_AS85EP1
      	     bool "AS85EP1"
      config V850E2_SIM85E2C
      	     bool "sim85e2c"
      config V850E2_SIM85E2S
      	     bool "sim85e2s"
      config V850E2_FPGA85E2C
      	     bool "NA85E2C-FPGA"
      config V850E2_ANNA
      	     bool "Anna"
   endchoice

   #### V850E processor-specific config

   # All CPUs currently supported use the v850e architecture
   config V850E
   	  bool
	  default y

   # The RTE-V850E/MA1-CB is the only type of V850E/MA1 platform we
   # currently support
   config V850E_MA1
   	  bool
	  depends on RTE_CB_MA1
	  default y
   # Similarly for the RTE-V850E/NB85E-CB - V850E/TEG
   config V850E_TEG
   	  bool
	  depends on RTE_CB_NB85E
	  default y
   # ... and the RTE-V850E/ME2-CB - V850E/ME2
   config V850E_ME2
   	  bool
	  depends on RTE_CB_ME2
	  default y


   #### sim85e2-specific config

   config V850E2_SIM85E2
   	  bool
	  depends on V850E2_SIM85E2C || V850E2_SIM85E2S
	  default y


   #### V850E2 processor-specific config

   # V850E2 processors
   config V850E2
   	  bool
	  depends on V850E2_SIM85E2 || V850E2_FPGA85E2C || V850E2_ANNA
	  default y


   #### RTE-CB platform-specific config

   # Boards in the RTE-x-CB series
   config RTE_CB
   	  bool
	  depends on RTE_CB_MA1 || RTE_CB_NB85E || RTE_CB_ME2
	  default y

   config RTE_CB_MULTI
   	  bool
	  # RTE_CB_NB85E can either have multi ROM support or not, but
	  # other platforms (currently only RTE_CB_MA1) require it.
	  prompt "Multi monitor ROM support" if RTE_CB_NB85E
	  depends on RTE_CB_MA1 || RTE_CB_NB85E
	  default y

   config RTE_CB_MULTI_DBTRAP
   	  bool "Pass illegal insn trap / dbtrap to kernel"
	  depends on RTE_CB_MULTI
	  default n

   config RTE_CB_MA1_KSRAM
   	  bool "Kernel in SRAM (limits size of kernel)"
	  depends on RTE_CB_MA1 && RTE_CB_MULTI
	  default n

   config RTE_MB_A_PCI
   	  bool "Mother-A PCI support"
	  depends on RTE_CB
	  default y

   # The GBUS is used to talk to the RTE-MOTHER-A board
   config RTE_GBUS_INT
   	  bool
	  depends on RTE_MB_A_PCI
	  default y

   # The only PCI bus we support is on the RTE-MOTHER-A board
   config PCI
   	  bool
	  default RTE_MB_A_PCI

   #### Some feature-specific configs

   # Everything except for the GDB simulator uses the same interrupt controller
   config V850E_INTC
   	  bool
	  default !V850E_SIM

   # Everything except for the various simulators uses the "Timer D" unit
   config V850E_TIMER_D
   	  bool
	  default !V850E_SIM && !V850E2_SIM85E2

   # Cache control used on some v850e1 processors
   config V850E_CACHE
          bool
	  default V850E_TEG || V850E_ME2

   # Cache control used on v850e2 processors; I think this should
   # actually apply to more, but currently only the SIM85E2S uses it
   config V850E2_CACHE
   	  bool
	  default V850E2_SIM85E2S

   config NO_CACHE
   	  bool
	  default !V850E_CACHE && !V850E2_CACHE

   # HZ depends on the platform
   config HZ
	  int
	  default 24  if V850E_SIM || V850E2_SIM85E2
	  default 122 if V850E2_FPGA85E2C
	  default 100

   #### Misc config

   config ROM_KERNEL
   	  bool "Kernel in ROM"
	  depends on V850E2_ANNA || V850E_AS85EP1 || RTE_CB_ME2

   # Some platforms pre-zero memory, in which case the kernel doesn't need to
   config ZERO_BSS
   	  bool
	  depends on !V850E2_SIM85E2C
	  default y

   # The crappy-ass zone allocator requires that the start of allocatable
   # memory be aligned to the largest possible allocation.
   config FORCE_MAX_ZONEORDER
   	  int
	  default 8 if V850E2_SIM85E2C || V850E2_FPGA85E2C

   config V850E_HIGHRES_TIMER
   	  bool "High resolution timer support"
	  depends on V850E_TIMER_D
   config TIME_BOOTUP
   	  bool "Time bootup"
	  depends on V850E_HIGHRES_TIMER

   config RESET_GUARD
   	  bool "Reset Guard"

source "mm/Kconfig"

endmenu


#############################################################################

source init/Kconfig

#############################################################################

menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"

#    config PCI
# 	   bool "PCI support"
# 	   help
# 	     Support for PCI bus.

source "drivers/pci/Kconfig"

source "drivers/pcmcia/Kconfig"

source "drivers/pci/hotplug/Kconfig"

endmenu

menu "Executable file formats"

source "fs/Kconfig.binfmt"

endmenu

source "net/Kconfig"

#############################################################################

source "drivers/base/Kconfig"

source drivers/mtd/Kconfig

source drivers/parport/Kconfig

#source drivers/pnp/Kconfig

source drivers/block/Kconfig

#############################################################################

menu "Disk device support"

source "drivers/ide/Kconfig"

source "drivers/scsi/Kconfig"

endmenu

#############################################################################


source "drivers/md/Kconfig"

source "drivers/message/fusion/Kconfig"

source "drivers/ieee1394/Kconfig"

source "drivers/message/i2o/Kconfig"

source "drivers/net/Kconfig"

source "drivers/isdn/Kconfig"

#source "drivers/telephony/Kconfig"

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

source "drivers/char/Kconfig"

#source drivers/misc/Config.in
source "drivers/media/Kconfig"

source "fs/Kconfig"

source "drivers/video/Kconfig"

source "sound/Kconfig"

source "drivers/usb/Kconfig"

source "arch/v850/Kconfig.debug"

source "security/Kconfig"

source "crypto/Kconfig"

source "lib/Kconfig"

#############################################################################
