#
# Broadcom device configuration
#

config NET_VENDOR_BROADCOM
	bool "Broadcom devices"
	default y
	depends on (SSB_POSSIBLE && HAS_DMA) || PCI || BCM63XX || \
		   SIBYTE_SB1xxx_SOC
	---help---
	  If you have a network (Ethernet) chipset belonging to this class,
	  say Y.

	  Note that the answer to this question does not directly affect
	  the kernel: saying N will just case the configurator to skip all
	  the questions regarding AMD chipsets. If you say Y, you will be asked
	  for your specific chipset/driver in the following questions.

if NET_VENDOR_BROADCOM

config B44
	depends on !BACKPORT_KERNEL_2_6_28
	tristate "Broadcom 440x/47xx ethernet support"
	depends on m
	depends on SSB_POSSIBLE && HAS_DMA
	select SSB
	select BACKPORT_MII
	depends on PHYLIB
	---help---
	  If you have a network (Ethernet) controller of this type, say Y
	  or M and read the Ethernet-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  To compile this driver as a module, choose M here. The module
	  will be called b44.

# Auto-select SSB PCI-HOST support, if possible
config B44_PCI_AUTOSELECT
	bool
	depends on B44 && SSB_PCIHOST_POSSIBLE
	select SSB_PCIHOST
	default y

# Auto-select SSB PCICORE driver, if possible
config B44_PCICORE_AUTOSELECT
	bool
	depends on B44 && SSB_DRIVER_PCICORE_POSSIBLE
	select SSB_DRIVER_PCICORE
	default y

config B44_PCI
	bool
	depends on B44_PCI_AUTOSELECT && B44_PCICORE_AUTOSELECT
	default y

config BCM63XX_ENET
	depends on n
	tristate "Broadcom 63xx internal mac support"
	depends on m
	depends on BCM63XX
	select BACKPORT_MII
	depends on PHYLIB
	help
	  This driver supports the ethernet MACs in the Broadcom 63xx
	  MIPS chipset family (BCM63XX).

config BNX2
	depends on n
	tristate "Broadcom NetXtremeII support"
	depends on m
	depends on PCI
	depends on CRC32
	select BACKPORT_FW_LOADER
	---help---
	  This driver supports Broadcom NetXtremeII gigabit Ethernet cards.

	  To compile this driver as a module, choose M here: the module
	  will be called bnx2.  This is recommended.

config CNIC
	depends on n
	tristate "Broadcom CNIC support"
	depends on m
	depends on PCI
	select BNX2
	depends on UIO
	---help---
	  This driver supports offload features of Broadcom NetXtremeII
	  gigabit Ethernet cards.

	  To compile this driver as a module, choose M here: the module
	  will be called cnic.  This is recommended.

config SB1250_MAC
	depends on n
	tristate "SB1250 Gigabit Ethernet support"
	depends on m
	depends on SIBYTE_SB1xxx_SOC
	depends on PHYLIB
	---help---
	  This driver supports Gigabit Ethernet interfaces based on the
	  Broadcom SiByte family of System-On-a-Chip parts.  They include
	  the BCM1120, BCM1125, BCM1125H, BCM1250, BCM1255, BCM1280, BCM1455
	  and BCM1480 chips.

	  To compile this driver as a module, choose M here: the module
	  will be called sb1250-mac.

config TIGON3
	depends on n
	tristate "Broadcom Tigon3 support"
	depends on m
	depends on PCI
	depends on PHYLIB
	depends on HWMON
	depends on PTP_1588_CLOCK
	---help---
	  This driver supports Broadcom Tigon3 based gigabit Ethernet cards.

	  To compile this driver as a module, choose M here: the module
	  will be called tg3.  This is recommended.

config BNX2X
	depends on n
	tristate "Broadcom NetXtremeII 10Gb support"
	depends on m
	depends on PCI
	select BACKPORT_FW_LOADER
	depends on ZLIB_INFLATE
	depends on LIBCRC32C
	select MDIO
	---help---
	  This driver supports Broadcom NetXtremeII 10 gigabit Ethernet cards.
	  To compile this driver as a module, choose M here: the module
	  will be called bnx2x.  This is recommended.

config BNX2X_SRIOV
	bool "Broadcom 578xx and 57712 SR-IOV support"
	depends on BNX2X && PCI_IOV
	default y
	---help---
	  This configuration parameter enables Single Root Input Output
	  Virtualization support in the 578xx and 57712 products. This
	  allows for virtual function acceleration in virtual environments.

config BGMAC
	depends on n
	tristate "BCMA bus GBit core support"
	depends on m
	depends on BCMA_HOST_SOC && HAS_DMA && BCM47XX
	depends on PHYLIB
	---help---
	  This driver supports GBit MAC and BCM4706 GBit MAC cores on BCMA bus.
	  They can be found on BCM47xx SoCs and provide gigabit ethernet.
	  In case of using this driver on BCM4706 it's also requires to enable
	  BCMA_DRIVER_GMAC_CMN to make it work.

endif # NET_VENDOR_BROADCOM
