#
# Western Digital/SMC network device configuration
#

config NET_VENDOR_SMSC
	bool "SMC (SMSC)/Western Digital devices"
	default y
	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
		   ISA || M32R || MAC || MIPS || MN10300 || NIOS2 || PCI || \
		   PCMCIA || SUPERH || XTENSA || H8300
	---help---
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about SMC/Western Digital cards. If you say Y, you will
	  be asked for your specific card in the following questions.

if NET_VENDOR_SMSC

config SMC9194
	tristate "SMC 9194 support"
	depends on ISA
	select CRC32
	---help---
	  This is support for the SMC9xxx based Ethernet cards. Choose this
	  option if you have a DELL laptop with the docking station, or
	  another SMC9192/9194 based chipset.  Say Y if you want it compiled
	  into the kernel, and read the file
	  <file:Documentation/networking/smc9.txt>.

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

config SMC91X
	tristate "SMC 91C9x/91C1xxx support"
	select CRC32
	select MII
	depends on !OF || GPIOLIB
	depends on ARM || ARM64 || ATARI_ETHERNAT || BLACKFIN || COLDFIRE || \
		   M32R || MIPS || MN10300 || NIOS2 || SUPERH || XTENSA || H8300
	---help---
	  This is a driver for SMC's 91x series of Ethernet chipsets,
	  including the SMC91C94 and the SMC91C111. Say Y if you want it
	  compiled into the kernel, and read the file
	  <file:Documentation/networking/smc9.txt>.

	  This driver is also available as a module ( = code which can be
	  inserted in and removed from the running kernel whenever you want).
	  The module will be called smc91x.  If you want to compile it as a
	  module, say M here and read <file:Documentation/kbuild/modules.txt>.

config PCMCIA_SMC91C92
	tristate "SMC 91Cxx PCMCIA support"
	depends on PCMCIA
	select CRC32
	select MII
	---help---
	  Say Y here if you intend to attach an SMC 91Cxx compatible PCMCIA
	  (PC-card) Ethernet or Fast Ethernet card to your computer.

	  To compile this driver as a module, choose M here: the module will be
	  called smc91c92_cs.  If unsure, say N.

config EPIC100
	tristate "SMC EtherPower II"
	depends on PCI
	select CRC32
	select MII
	---help---
	  This driver is for the SMC EtherPower II 9432 PCI Ethernet NIC,
	  which is based on the SMC83c17x (EPIC/100).
	  More specific information and updates are available from
	  <http://www.scyld.com/network/epic100.html>.

config SMC911X
	tristate "SMSC LAN911[5678] support"
	select CRC32
	select MII
	depends on (ARM || SUPERH || MN10300)
	---help---
	  This is a driver for SMSC's LAN911x series of Ethernet chipsets
	  including the new LAN9115, LAN9116, LAN9117, and LAN9118.
	  Say Y here if you want it compiled into the kernel.

	  This driver is also available as a module. The module will be
	  called smc911x.  If you want to compile it as a module, say M
	  here and read <file:Documentation/kbuild/modules.txt>

config SMSC911X
	tristate "SMSC LAN911x/LAN921x families embedded ethernet support"
	depends on HAS_IOMEM
	select CRC32
	select MII
	select PHYLIB
	---help---
	  Say Y here if you want support for SMSC LAN911x and LAN921x families
	  of ethernet controllers.

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

config SMSC911X_ARCH_HOOKS
	def_bool n
	depends on SMSC911X
	---help---
	  If the arch enables this, it allows the arch to implement various
	  hooks for more comprehensive interrupt control and also to override
	  the source of the MAC address.

config SMSC9420
	tristate "SMSC LAN9420 PCI ethernet adapter support"
	depends on PCI
	select CRC32
	select PHYLIB
	select SMSC_PHY
	---help---
	  This is a driver for SMSC's LAN9420 PCI ethernet adapter.
	  Say Y here if you want it compiled into the kernel.

	  This driver is also available as a module. The module will be
	  called smsc9420.  If you want to compile it as a module, say M
	  here and read <file:Documentation/kbuild/modules.txt>

endif # NET_VENDOR_SMSC
