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

config LCS
	def_tristate m
	prompt "Lan Channel Station Interface"
	depends on CCW && NETDEVICES && (ETHERNET || FDDI)
	help
	   Select this option if you want to use LCS networking on IBM System z.
	   This device driver supports FDDI (IEEE 802.7) and Ethernet.
	   To compile as a module, choose M. The module name is lcs.
	   If you do not know what it is, it's safe to choose Y.

config CTCM
	def_tristate m
	prompt "CTC and MPC SNA device support"
	depends on CCW && NETDEVICES
	help
	  Select this option if you want to use channel-to-channel
	  point-to-point networking on IBM System z.
	  This device driver supports real CTC coupling using ESCON.
	  It also supports virtual CTCs when running under VM.
	  This driver also supports channel-to-channel MPC SNA devices.
	  MPC is an SNA protocol device used by Communication Server for Linux.
	  To compile as a module, choose M. The module name is ctcm.
	  To compile into the kernel, choose Y.
	  If you do not need any channel-to-channel connection, choose N.

config NETIUCV
	def_tristate m
	prompt "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 on IBM System z
	  running on the other VM guest. To compile as a module, choose M.
	  The module name is netiucv. If unsure, choose Y.

config SMSGIUCV
	def_tristate m
	prompt "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 SMSGIUCV_EVENT
	def_tristate m
	prompt "Deliver IUCV special messages as uevents (VM only)"
	depends on SMSGIUCV
	help
	  Select this option to deliver CP special messages (SMSGs) as
	  uevents.  The driver handles only those special messages that
	  start with "APP".

	  To compile as a module, choose M. The module name is "smsgiucv_app".

config QETH
	def_tristate y
	prompt "Gigabit Ethernet device support"
	depends on CCW && NETDEVICES && IP_MULTICAST && QDIO && ETHERNET
	help
	  This driver supports the IBM System z OSA Express adapters
	  in QDIO mode (all media types), HiperSockets interfaces and z/VM
	  virtual NICs for Guest LAN and VSWITCH.
	
	  For details please refer to the documentation provided by IBM at
	  <http://www.ibm.com/developerworks/linux/linux390>

	  To compile this driver as a module, choose M.
	  The module name is qeth.

config QETH_L2
	def_tristate y
	prompt "qeth layer 2 device support"
	depends on QETH
	help
	  Select this option to be able to run qeth devices in layer 2 mode.
	  To compile as a module, choose M. The module name is qeth_l2.
	  If unsure, choose y.

config QETH_L3
	def_tristate y
	prompt "qeth layer 3 device support"
	depends on QETH
	help
	  Select this option to be able to run qeth devices in layer 3 mode.
	  To compile as a module choose M. The module name is qeth_l3.
	  If unsure, choose Y.

config QETH_IPV6
	def_bool y if (QETH_L3 = IPV6) || (QETH_L3 && IPV6 = 'y')

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

endmenu
