# SPDX-License-Identifier: GPL-2.0-only
if ARCH_FOOTBRIDGE

menu "Footbridge Implementations"

config ARCH_CATS
	bool "CATS"
	depends on UNUSED_BOARD_FILES
	select CLKEVT_I8253
	select CLKSRC_I8253
	select FOOTBRIDGE_HOST
	select ISA
	select ISA_DMA
	select FORCE_PCI
	help
	  Say Y here if you intend to run this kernel on the CATS.

	  Saying N will reduce the size of the Footbridge kernel.

config ARCH_EBSA285_ADDIN
	bool "EBSA285 (addin mode)"
	select ARCH_EBSA285
	select FOOTBRIDGE_ADDIN
	help
	  Say Y here if you intend to run this kernel on the EBSA285 card
	  in addin mode.

	  Saying N will reduce the size of the Footbridge kernel.

config ARCH_EBSA285_HOST
	bool "EBSA285 (host mode)"
	select ARCH_EBSA285
	select FOOTBRIDGE_HOST
	select ISA
	select ISA_DMA
	select ARCH_MAY_HAVE_PC_FDC
	select FORCE_PCI
	help
	  Say Y here if you intend to run this kernel on the EBSA285 card
	  in host ("central function") mode.

	  Saying N will reduce the size of the Footbridge kernel.

config ARCH_NETWINDER
	bool "NetWinder"
	select CLKEVT_I8253
	select CLKSRC_I8253
	select FOOTBRIDGE_HOST
	select ISA
	select ISA_DMA
	select FORCE_PCI
	help
	  Say Y here if you intend to run this kernel on the Rebel.COM
	  NetWinder.  Information about this machine can be found at:

	  <http://www.netwinder.org/>

	  Saying N will reduce the size of the Footbridge kernel.

endmenu

# Footbridge support
config FOOTBRIDGE
	select ARCH_HAS_PHYS_TO_DMA
	bool

# Footbridge in host mode
config FOOTBRIDGE_HOST
	bool
	select ARCH_MIGHT_HAVE_PC_SERIO

# Footbridge in addin mode
config FOOTBRIDGE_ADDIN
	bool

# EBSA285 board in either host or addin mode
config ARCH_EBSA285
	bool

endif
