# SPDX-License-Identifier: GPL-2.0
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 IBM's OSA Express network adapters in QDIO mode,
	  HiperSockets interfaces and z/VM virtual NICs for Guest LAN and
	  VSWITCH.

	  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
	depends on BRIDGE || BRIDGE=n
	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_OSX
	def_bool !HAVE_MARCH_Z15_FEATURES
	prompt "qeth OSX device support"
	depends on QETH
	help
	  This enables the qeth driver to support devices in OSX mode.
	  If unsure, choose N.

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

config ISM
	tristate "Support for ISM vPCI Adapter"
	depends on PCI && SMC
	default n
	help
	  Select this option if you want to use the Internal Shared Memory
	  vPCI Adapter.

	  To compile as a module choose M. The module name is ism.
	  If unsure, choose N.
endmenu
