config MKISS
	tristate "Serial port KISS driver"
	depends on AX25
	---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
	---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.txt>.

	  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
	---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=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://cacofonix.nt.tuwien.ac.at/~oe1kib/Linux/>. 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/z8530drv.txt> 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/z8530drv.txt> 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
	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/baycom.txt>.

	  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
	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. 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 depreciated.  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/baycom.txt>.

	  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/baycom.txt>.

	  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/baycom.txt>.

	  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
	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.

