# SPDX-License-Identifier: GPL-2.0-only
config MKISS
	tristate "Serial port KISS driver"
	depends on AX25 && TTY
	select CRC16
	help
	  KISS is a protocol used for the exchange of data between a computer
	  and a Terminal Node Controller (a small embedded system commonly
	  used for networking over AX.25 amateur radio connections; it
	  connects the computer's serial port with the radio's microphone
	  input and speaker output).

	  Although KISS is less advanced than the 6pack protocol, it has
	  the advantage that it is already supported by most modern TNCs
	  without the need for a firmware upgrade.

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

config 6PACK
	tristate "Serial port 6PACK driver"
	depends on AX25 && TTY
	help
	  6pack is a transmission protocol for the data exchange between your
	  PC and your TNC (the Terminal Node Controller acts as a kind of
	  modem connecting your computer's serial port to your radio's
	  microphone input and speaker output). This protocol can be used as
	  an alternative to KISS for networking over AX.25 amateur radio
	  connections, but it has some extended functionality.

	  Note that this driver is still experimental and might cause
	  problems. For details about the features and the usage of the
	  driver, read <file:Documentation/networking/6pack.rst>.

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

config BPQETHER
	tristate "BPQ Ethernet driver"
	depends on AX25
	help
	  AX.25 is the protocol used for computer communication over amateur
	  radio. If you say Y here, you will be able to send and receive AX.25
	  traffic over Ethernet (also called "BPQ AX.25"), which could be
	  useful if some other computer on your local network has a direct
	  amateur radio connection.

config DMASCC
	tristate "High-speed (DMA) SCC driver for AX.25"
	depends on ISA && AX25 && BROKEN_ON_SMP && ISA_DMA_API
	depends on VIRT_TO_BUS
	help
	  This is a driver for high-speed SCC boards, i.e. those supporting
	  DMA on one port. You usually use those boards to connect your
	  computer to an amateur radio modem (such as the WA4DSY 56kbps
	  modem), in order to send and receive AX.25 packet radio network
	  traffic.

	  Currently, this driver supports Ottawa PI/PI2, Paccomm/Gracilis
	  PackeTwin, and S5SCC/DMA boards. They are detected automatically.
	  If you have one of these cards, say Y here and read the AX25-HOWTO,
	  available from <http://www.tldp.org/docs.html#howto>.

	  This driver can operate multiple boards simultaneously. If you
	  compile it as a module (by saying M instead of Y), it will be called
	  dmascc. If you don't pass any parameter to the driver, all
	  possible I/O addresses are probed. This could irritate other devices
	  that are currently not in use. You may specify the list of addresses
	  to be probed by "dmascc.io=addr1,addr2,..." (when compiled into the
	  kernel image) or "io=addr1,addr2,..." (when loaded as a module). The
	  network interfaces will be called dmascc0 and dmascc1 for the board
	  detected first, dmascc2 and dmascc3 for the second one, and so on.

	  Before you configure each interface with ifconfig, you MUST set
	  certain parameters, such as channel access timing, clock mode, and
	  DMA channel. This is accomplished with a small utility program,
	  dmascc_cfg, available at
	  <http://www.linux-ax25.org/wiki/Ax25-tools>. Please be sure to
	  get at least version 1.27 of dmascc_cfg, as older versions will not
	  work with the current driver.

config SCC
	tristate "Z8530 SCC driver"
	depends on ISA && AX25 && ISA_DMA_API
	help
	  These cards are used to connect your Linux box to an amateur radio
	  in order to communicate with other computers. If you want to use
	  this, read
	  <file:Documentation/networking/device_drivers/hamradio/z8530drv.rst>
	  and the AX25-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. Also make sure to say Y
	  to "Amateur Radio AX.25 Level 2" support.

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

config SCC_DELAY
	bool "additional delay for PA0HZP OptoSCC compatible boards"
	depends on SCC
	help
	  Say Y here if you experience problems with the SCC driver not
	  working properly; please read
	  <file:Documentation/networking/device_drivers/hamradio/z8530drv.rst>
	  for details.

	  If unsure, say N.

config SCC_TRXECHO
	bool "support for TRX that feedback the tx signal to rx"
	depends on SCC
	help
	  Some transmitters feed the transmitted signal back to the receive
	  line.  Say Y here to foil this by explicitly disabling the receiver
	  during data transmission.

	  If in doubt, say Y.

config BAYCOM_SER_FDX
	tristate "BAYCOM ser12 fullduplex driver for AX.25"
	depends on AX25 && !S390
	select CRC_CCITT
	help
	  This is one of two drivers for Baycom style simple amateur radio
	  modems that connect to a serial interface. The driver supports the
	  ser12 design in full-duplex mode. In addition, it allows the
	  baudrate to be set between 300 and 4800 baud (however not all modems
	  support all baudrates). This is the preferred driver. The next
	  driver, "BAYCOM ser12 half-duplex driver for AX.25" is the old
	  driver and still provided in case this driver does not work with
	  your serial interface chip. To configure the driver, use the sethdlc
	  utility available in the standard ax25 utilities package. For
	  information on the modems, see <http://www.baycom.de/> and
	  <file:Documentation/networking/device_drivers/hamradio/baycom.rst>.

	  To compile this driver as a module, choose M here: the module
	  will be called baycom_ser_fdx.  This is recommended.

config BAYCOM_SER_HDX
	tristate "BAYCOM ser12 halfduplex driver for AX.25"
	depends on AX25 && !S390
	select CRC_CCITT
	help
	  This is one of two drivers for Baycom style simple amateur radio
	  modems that connect to a serial interface. The driver supports the
	  ser12 design in half-duplex mode. This is the old driver.  It is
	  still provided in case your serial interface chip does not work with
	  the full-duplex driver. This driver is deprecated.  To configure
	  the driver, use the sethdlc utility available in the standard ax25
	  utilities package. For information on the modems, see
	  <http://www.baycom.de/> and
	  <file:Documentation/networking/device_drivers/hamradio/baycom.rst>.

	  To compile this driver as a module, choose M here: the module
	  will be called baycom_ser_hdx.  This is recommended.

config BAYCOM_PAR
	tristate "BAYCOM picpar and par96 driver for AX.25"
	depends on PARPORT && AX25
	select CRC_CCITT
	help
	  This is a driver for Baycom style simple amateur radio modems that
	  connect to a parallel interface. The driver supports the picpar and
	  par96 designs. To configure the driver, use the sethdlc utility
	  available in the standard ax25 utilities package. For information on
	  the modems, see <http://www.baycom.de/> and the file
	  <file:Documentation/networking/device_drivers/hamradio/baycom.rst>.

	  To compile this driver as a module, choose M here: the module
	  will be called baycom_par.  This is recommended.

config BAYCOM_EPP
	tristate "BAYCOM epp driver for AX.25"
	depends on PARPORT && AX25 && !64BIT
	select CRC_CCITT
	help
	  This is a driver for Baycom style simple amateur radio modems that
	  connect to a parallel interface. The driver supports the EPP
	  designs. To configure the driver, use the sethdlc utility available
	  in the standard ax25 utilities package. For information on the
	  modems, see <http://www.baycom.de/> and the file
	  <file:Documentation/networking/device_drivers/hamradio/baycom.rst>.

	  To compile this driver as a module, choose M here: the module
	  will be called baycom_epp.  This is recommended.

config YAM
	tristate "YAM driver for AX.25"
	depends on AX25 && !S390
	help
	  The YAM is a modem for packet radio which connects to the serial
	  port and includes some of the functions of a Terminal Node
	  Controller. If you have one of those, say Y here.

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

 
