# SPDX-License-Identifier: GPL-2.0-only
#
# Arcnet configuration
#

menuconfig ARCNET
	depends on NETDEVICES && (ISA || PCI || PCMCIA)
	tristate "ARCnet support"
	---help---
	  If you have a network card of this type, say Y and check out the
	  (arguably) beautiful poetry in
	  <file:Documentation/networking/arcnet.txt>.

	  You need both this driver, and the driver for the particular ARCnet
	  chipset of your card. If you don't know, then it's probably a
	  COM90xx type card, so say Y (or M) to "ARCnet COM90xx chipset
	  support" below.

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

if ARCNET

config ARCNET_1201
	tristate "Enable standard ARCNet packet format (RFC 1201)"
	help
	  This allows you to use RFC1201 with your ARCnet card via the virtual
	  arc0 device.  You need to say Y here to communicate with
	  industry-standard RFC1201 implementations, like the arcether.com
	  packet driver or most DOS/Windows ODI drivers.  Please read the
	  ARCnet documentation in <file:Documentation/networking/arcnet.txt>
	  for more information about using arc0.

config ARCNET_1051
	tristate "Enable old ARCNet packet format (RFC 1051)"
	---help---
	  This allows you to use RFC1051 with your ARCnet card via the virtual
	  arc0s device. You only need arc0s if you want to talk to ARCnet
	  software complying with the "old" standard, specifically, the DOS
	  arcnet.com packet driver, Amigas running AmiTCP, and some variants
	  of NetBSD. You do not need to say Y here to communicate with
	  industry-standard RFC1201 implementations, like the arcether.com
	  packet driver or most DOS/Windows ODI drivers. RFC1201 is included
	  automatically as the arc0 device. Please read the ARCnet
	  documentation in <file:Documentation/networking/arcnet.txt> for more
	  information about using arc0e and arc0s.

config ARCNET_RAW
	tristate "Enable raw mode packet interface"
	help
	  ARCnet "raw mode" packet encapsulation, no soft headers.  Unlikely
	  to work unless talking to a copy of the same Linux arcnet driver,
	  but perhaps marginally faster in that case.

config ARCNET_CAP
	tristate "Enable CAP mode packet interface"
	help
	  ARCnet "cap mode" packet encapsulation. Used to get the hardware
          acknowledge back to userspace. After the initial protocol byte every
          packet is stuffed with an extra 4 byte "cookie" which doesn't
          actually appear on the network. After transmit the driver will send
          back a packet with protocol byte 0 containing the status of the
          transmission:
             0=no hardware acknowledge
             1=excessive nak
             2=transmission accepted by the receiver hardware

          Received packets are also stuffed with the extra 4 bytes but it will
          be random data.

          Cap only listens to protocol 1-8.

config ARCNET_COM90xx
	tristate "ARCnet COM90xx (normal) chipset driver"
	help
	  This is the chipset driver for the standard COM90xx cards. If you
	  have always used the old ARCnet driver without knowing what type of
	  card you had, this is probably the one for you.

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

config ARCNET_COM90xxIO
	tristate "ARCnet COM90xx (IO mapped) chipset driver"
	---help---
	  This is the chipset driver for the COM90xx cards, using them in
	  IO-mapped mode instead of memory-mapped mode. This is slower than
	  the normal driver. Only use it if your card doesn't support shared
	  memory.

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

config ARCNET_RIM_I
	tristate "ARCnet COM90xx (RIM I) chipset driver"
	---help---
	  This is yet another chipset driver for the COM90xx cards, but this
	  time only using memory-mapped mode, and no IO ports at all. This
	  driver is completely untested, so if you have one of these cards,
	  please mail <dwmw2@infradead.org>, especially if it works!

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

config ARCNET_COM20020
	tristate "ARCnet COM20020 chipset driver"
	depends on LEDS_CLASS
	help
	  This is the driver for the new COM20020 chipset. It supports such
	  things as promiscuous mode, so packet sniffing is possible, and
	  extra diagnostic information.

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

config ARCNET_COM20020_ISA
	tristate "Support for COM20020 on ISA"
	depends on ARCNET_COM20020 && ISA

config ARCNET_COM20020_PCI
	tristate "Support for COM20020 on PCI"
	depends on ARCNET_COM20020 && PCI

config ARCNET_COM20020_CS
	tristate "COM20020 ARCnet PCMCIA support"
	depends on ARCNET_COM20020 && PCMCIA
	help
	  Say Y here if you intend to attach this type of ARCnet PCMCIA card
	  to your computer.

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

endif # ARCNET
