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

config LCS
	tristate "Lan Channel Station Interface"
	depends on CCW && NETDEVICES && (NET_ETHERNET || TR || FDDI)
	help
	   Select this option if you want to use LCS networking on IBM System z.
	   This device driver supports Token Ring (IEEE 802.5),
	   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
	tristate "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
	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 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
	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 SMSGIUCV_EVENT
	tristate "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 CLAW
	tristate "CLAW device support"
	depends on CCW && 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. The module name is claw.
	  To compile into the kernel, choose Y.

config QETH
	tristate "Gigabit Ethernet device support"
	depends on CCW && NETDEVICES && IP_MULTICAST && QDIO
	help
	  This driver supports the IBM System z 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://www.ibm.com/developerworks/linux/linux390>

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

config QETH_L2
        tristate "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
        tristate "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
        bool
        depends on (QETH_L3 = IPV6) || (QETH_L3 && IPV6 = 'y')
        default y

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

endmenu
