menu "S/390 network device drivers"
	depends on NETDEVICES && S390

config LCS
	tristate "Lan Channel Station Interface"
	depends on NETDEVICES && (NET_ETHERNET || TR || FDDI)
	help
	   Select this option if you want to use LCS networking  on IBM S/390
  	   or zSeries. This device driver supports Token Ring (IEEE 802.5),
  	   FDDI (IEEE 802.7) and Ethernet. 
	   This option is also available as a module which will be
	   called lcs.ko. If you do not know what it is, it's safe to say "Y".

config CTC
	tristate "CTC device support"
	depends on NETDEVICES
	help
	  Select this option if you want to use channel-to-channel networking
	  on IBM S/390 or zSeries. This device driver supports real CTC
	  coupling using ESCON. It also supports virtual CTCs when running
	  under VM. It will use the channel device configuration if this is
	  available.  This option is also available as a module which will be
	  called ctc.ko.  If you do not know what it is, it's safe to say "Y".

config NETIUCV
	tristate "IUCV network device support (VM only)"
	depends on IUCV && NETDEVICES
	help
	  Select this option if you want to use inter-user communication
	  vehicle networking under VM or VIF. It enables a fast communication
	  link between VM guests. Using ifconfig a point-to-point connection
	  can be established to the Linux for zSeries and S7390 system
	  running on the other VM guest. This option is also available
	  as a module which will be called netiucv.ko. If unsure, say "Y".

config SMSGIUCV
	tristate "IUCV special message support (VM only)"
	depends on IUCV
	help
	  Select this option if you want to be able to receive SMSG messages
	  from other VM guest systems.

config CLAW
	tristate "CLAW device support"
	depends on NETDEVICES
	help
	  This driver supports channel attached CLAW devices.
	  CLAW is Common Link Access for Workstation.  Common devices
          that use CLAW are RS/6000s, Cisco Routers (CIP) and 3172 devices.
	  To compile as a module choose M here:  The module will be called
	  claw.ko to compile into the kernel choose Y

config QETH
	tristate "Gigabit Ethernet device support"
	depends on NETDEVICES && IP_MULTICAST && QDIO
	help
	  This driver supports the IBM S/390 and zSeries OSA Express adapters
	  in QDIO mode (all media types), HiperSockets interfaces and VM GuestLAN
	  interfaces in QDIO and HIPER mode.
	
	  For details please refer to the documentation provided by IBM at   
	  <http://www10.software.ibm.com/developerworks/opensource/linux390>

	  To compile this driver as a module, choose M here: the
	  module will be called qeth.ko.


comment "Gigabit Ethernet default settings"
	depends on QETH

config QETH_IPV6
	bool "IPv6 support for gigabit ethernet"
	depends on (QETH = IPV6) || (QETH && IPV6 = 'y')
	help
	  If CONFIG_QETH is switched on, this option will include IPv6
	  support in the qeth device driver.
	
config QETH_VLAN
	bool "VLAN support for gigabit ethernet"
	depends on (QETH = VLAN_8021Q) || (QETH && VLAN_8021Q = 'y')
	help
	  If CONFIG_QETH is switched on, this option will include IEEE
	  802.1q VLAN support in the qeth device driver.

config CCWGROUP
 	tristate
	default (LCS || CTC || QETH)

endmenu
