menu "Sonics Silicon Backplane"

config SSB_POSSIBLE
	bool
	depends on HAS_IOMEM
	default y

config SSB
	tristate "Sonics Silicon Backplane support"
	depends on SSB_POSSIBLE
	help
	  Support for the Sonics Silicon Backplane bus.
	  You only need to enable this option, if you are
	  configuring a kernel for an embedded system with
	  this bus.
	  It will be auto-selected if needed in other
	  environments.

	  The module will be called ssb.

	  If unsure, say N.

# Common SPROM support routines
config SSB_SPROM
	bool

config SSB_PCIHOST_POSSIBLE
	bool
	depends on SSB && (PCI = y || PCI = SSB)
	default y

config SSB_PCIHOST
	bool "Support for SSB on PCI-bus host"
	depends on SSB_PCIHOST_POSSIBLE
	select SSB_SPROM
	default y
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCI device.

	  If unsure, say Y

config SSB_B43_PCI_BRIDGE
	bool
	depends on SSB_PCIHOST
	default n

config SSB_PCMCIAHOST_POSSIBLE
	bool
	depends on SSB && (PCMCIA = y || PCMCIA = SSB) && EXPERIMENTAL
	default y

config SSB_PCMCIAHOST
	bool "Support for SSB on PCMCIA-bus host (EXPERIMENTAL)"
	depends on SSB_PCMCIAHOST_POSSIBLE
	select SSB_SPROM
	help
	  Support for a Sonics Silicon Backplane on top
	  of a PCMCIA device.

	  If unsure, say N

config SSB_SILENT
	bool "No SSB kernel messages"
	depends on SSB && EMBEDDED
	help
	  This option turns off all Sonics Silicon Backplane printks.
	  Note that you won't be able to identify problems, once
	  messages are turned off.
	  This might only be desired for production kernels on
	  embedded devices to reduce the kernel size.

	  Say N

config SSB_DEBUG
	bool "SSB debugging"
	depends on SSB && !SSB_SILENT
	help
	  This turns on additional runtime checks and debugging
	  messages. Turn this on for SSB troubleshooting.

	  If unsure, say N

config SSB_SERIAL
	bool
	depends on SSB
	# ChipCommon and ExtIf serial support routines.

config SSB_DRIVER_PCICORE_POSSIBLE
	bool
	depends on SSB_PCIHOST
	default y

config SSB_DRIVER_PCICORE
	bool "SSB PCI core driver"
	depends on SSB_DRIVER_PCICORE_POSSIBLE
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom PCI core.

	  If unsure, say Y

config SSB_PCICORE_HOSTMODE
	bool "Hostmode support for SSB PCI core (EXPERIMENTAL)"
	depends on SSB_DRIVER_PCICORE && SSB_DRIVER_MIPS && EXPERIMENTAL
	help
	  PCIcore hostmode operation (external PCI bus).

config SSB_DRIVER_MIPS
	bool "SSB Broadcom MIPS core driver (EXPERIMENTAL)"
	depends on SSB && MIPS && EXPERIMENTAL
	select SSB_SERIAL
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom MIPS core.

	  If unsure, say N

# Assumption: We are on embedded, if we compile the MIPS core.
config SSB_EMBEDDED
	bool
	depends on SSB_DRIVER_MIPS
	default y

config SSB_DRIVER_EXTIF
	bool "SSB Broadcom EXTIF core driver (EXPERIMENTAL)"
	depends on SSB_DRIVER_MIPS && EXPERIMENTAL
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom EXTIF core.

	  If unsure, say N

config SSB_DRIVER_GIGE
	bool "SSB Broadcom Gigabit Ethernet driver"
	depends on SSB_PCIHOST_POSSIBLE && SSB_EMBEDDED && MIPS
	help
	  Driver for the Sonics Silicon Backplane attached
	  Broadcom Gigabit Ethernet.

	  If unsure, say N

endmenu
