# SPDX-License-Identifier: GPL-2.0
#
# PARIDE configuration
#
# PARIDE doesn't need PARPORT, but if PARPORT is configured as a module,
# PARIDE must also be a module.
# PARIDE only supports PC style parports. Tough for USB or other parports...

comment "Parallel IDE high-level drivers"
	depends on PARIDE

config PARIDE_PD
	tristate "Parallel port IDE disks"
	depends on PARIDE
	help
	  This option enables the high-level driver for IDE-type disk devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port IDE driver, otherwise you should answer M to build
	  it as a loadable module. The module will be called pd. You
	  must also have at least one parallel port protocol driver in your
	  system. Among the devices supported by this driver are the SyQuest
	  EZ-135, EZ-230 and SparQ drives, the Avatar Shark and the backpack
	  hard drives from MicroSolutions.

config PARIDE_PCD
	tristate "Parallel port ATAPI CD-ROMs"
	depends on PARIDE
	select BLK_SCSI_REQUEST # only for the generic cdrom code
	---help---
	  This option enables the high-level driver for ATAPI CD-ROM devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI CD-ROM driver, otherwise you should answer M to
	  build it as a loadable module. The module will be called pcd. You
	  must also have at least one parallel port protocol driver in your
	  system. Among the devices supported by this driver are the
	  MicroSolutions backpack CD-ROM drives and the Freecom Power CD. If
	  you have such a CD-ROM drive, you should also say Y or M to "ISO
	  9660 CD-ROM file system support" below, because that's the file
	  system used on CD-ROMs.

config PARIDE_PF
	tristate "Parallel port ATAPI disks"
	depends on PARIDE
	help
	  This option enables the high-level driver for ATAPI disk devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI disk driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called pf.
	  You must also have at least one parallel port protocol driver in
	  your system. Among the devices supported by this driver are the
	  MicroSolutions backpack PD/CD drive and the Imation Superdisk
	  LS-120 drive.

config PARIDE_PT
	tristate "Parallel port ATAPI tapes"
	depends on PARIDE
	help
	  This option enables the high-level driver for ATAPI tape devices
	  connected through a parallel port. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  parallel port ATAPI disk driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called pt.
	  You must also have at least one parallel port protocol driver in
	  your system. Among the devices supported by this driver is the
	  parallel port version of the HP 5GB drive.

config PARIDE_PG
	tristate "Parallel port generic ATAPI devices"
	depends on PARIDE
	---help---
	  This option enables a special high-level driver for generic ATAPI
	  devices connected through a parallel port. The driver allows user
	  programs, such as cdrtools, to send ATAPI commands directly to a
	  device.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the parallel port generic ATAPI driver,
	  otherwise you should answer M to build it as a loadable module. The
	  module will be called pg.

	  You must also have at least one parallel port protocol driver in
	  your system.

	  This driver implements an API loosely related to the generic SCSI
	  driver. See <file:include/linux/pg.h>. for details.

	  You can obtain the most recent version of cdrtools from
	  <ftp://ftp.berlios.de/pub/cdrecord/>. Versions 1.6.1a3 and
	  later fully support this driver.

comment "Parallel IDE protocol modules"
	depends on PARIDE

config PARIDE_ATEN
	tristate "ATEN EH-100 protocol"
	depends on PARIDE
	help
	  This option enables support for the ATEN EH-100 parallel port IDE
	  protocol. This protocol is used in some inexpensive low performance
	  parallel port kits made in Hong Kong. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called aten. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_BPCK
	tristate "MicroSolutions backpack (Series 5) protocol"
	depends on PARIDE
	---help---
	  This option enables support for the Micro Solutions BACKPACK
	  parallel port Series 5 IDE protocol.  (Most BACKPACK drives made
	  before 1999 were Series 5) Series 5 drives will NOT always have the
	  Series noted on the bottom of the drive. Series 6 drivers will.

	  In other words, if your BACKPACK drive doesn't say "Series 6" on the
	  bottom, enable this option.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the protocol driver, otherwise you should
	  answer M to build it as a loadable module.  The module will be
	  called bpck.  You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_BPCK6
	tristate "MicroSolutions backpack (Series 6) protocol"
	depends on PARIDE && !64BIT
	---help---
	  This option enables support for the Micro Solutions BACKPACK
	  parallel port Series 6 IDE protocol.  (Most BACKPACK drives made
	  after 1999 were Series 6) Series 6 drives will have the Series noted
	  on the bottom of the drive.  Series 5 drivers don't always have it
	  noted.

	  In other words, if your BACKPACK drive says "Series 6" on the
	  bottom, enable this option.

	  If you chose to build PARIDE support into your kernel, you may
	  answer Y here to build in the protocol driver, otherwise you should
	  answer M to build it as a loadable module.  The module will be
	  called bpck6.  You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_COMM
	tristate "DataStor Commuter protocol"
	depends on PARIDE
	help
	  This option enables support for the Commuter parallel port IDE
	  protocol from DataStor. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called comm. You must also have
	  a high-level driver for the type of device that you want to support.

config PARIDE_DSTR
	tristate "DataStor EP-2000 protocol"
	depends on PARIDE
	help
	  This option enables support for the EP-2000 parallel port IDE
	  protocol from DataStor. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called dstr. You must also have
	  a high-level driver for the type of device that you want to support.

config PARIDE_FIT2
	tristate "FIT TD-2000 protocol"
	depends on PARIDE
	help
	  This option enables support for the TD-2000 parallel port IDE
	  protocol from Fidelity International Technology. This is a simple
	  (low speed) adapter that is used in some portable hard drives. If
	  you chose to build PARIDE support into your kernel, you may answer Y
	  here to build in the protocol driver, otherwise you should answer M
	  to build it as a loadable module. The module will be called ktti.
	  You must also have a high-level driver for the type of device that
	  you want to support.

config PARIDE_FIT3
	tristate "FIT TD-3000 protocol"
	depends on PARIDE
	help
	  This option enables support for the TD-3000 parallel port IDE
	  protocol from Fidelity International Technology. This protocol is
	  used in newer models of their portable disk, CD-ROM and PD/CD
	  devices. If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called fit3. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_EPAT
	tristate "Shuttle EPAT/EPEZ protocol"
	depends on PARIDE
	help
	  This option enables support for the EPAT parallel port IDE protocol.
	  EPAT is a parallel port IDE adapter manufactured by Shuttle
	  Technology and widely used in devices from major vendors such as
	  Hewlett-Packard, SyQuest, Imation and Avatar. If you chose to build
	  PARIDE support into your kernel, you may answer Y here to build in
	  the protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called epat. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_EPATC8
	bool "Support c7/c8 chips"
	depends on PARIDE_EPAT
	help
	  This option enables support for the newer Shuttle EP1284 (aka c7 and
	  c8) chip. You need this if you are using any recent Imation SuperDisk
	  (LS-120) drive.

config PARIDE_EPIA
	tristate "Shuttle EPIA protocol"
	depends on PARIDE
	help
	  This option enables support for the (obsolete) EPIA parallel port
	  IDE protocol from Shuttle Technology. This adapter can still be
	  found in some no-name kits. If you chose to build PARIDE support
	  into your kernel, you may answer Y here to build in the protocol
	  driver, otherwise you should answer M to build it as a loadable
	  module. The module will be called epia. You must also have a
	  high-level driver for the type of device that you want to support.

config PARIDE_FRIQ
	tristate "Freecom IQ ASIC-2 protocol"
	depends on PARIDE
	help
	  This option enables support for version 2 of the Freecom IQ parallel
	  port IDE adapter.  This adapter is used by the Maxell Superdisk
	  drive.  If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called friq. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_FRPW
	tristate "FreeCom power protocol"
	depends on PARIDE
	help
	  This option enables support for the Freecom power parallel port IDE
	  protocol. If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called frpw. You must also have a high-level driver for the type
	  of device that you want to support.

config PARIDE_KBIC
	tristate "KingByte KBIC-951A/971A protocols"
	depends on PARIDE
	help
	  This option enables support for the KBIC-951A and KBIC-971A parallel
	  port IDE protocols from KingByte Information Corp. KingByte's
	  adapters appear in many no-name portable disk and CD-ROM products,
	  especially in Europe. If you chose to build PARIDE support into your
	  kernel, you may answer Y here to build in the protocol driver,
	  otherwise you should answer M to build it as a loadable module. The
	  module will be called kbic. You must also have a high-level driver
	  for the type of device that you want to support.

config PARIDE_KTTI
	tristate "KT PHd protocol"
	depends on PARIDE
	help
	  This option enables support for the "PHd" parallel port IDE protocol
	  from KT Technology. This is a simple (low speed) adapter that is
	  used in some 2.5" portable hard drives. If you chose to build PARIDE
	  support into your kernel, you may answer Y here to build in the
	  protocol driver, otherwise you should answer M to build it as a
	  loadable module. The module will be called ktti. You must also
	  have a high-level driver for the type of device that you want to
	  support.

config PARIDE_ON20
	tristate "OnSpec 90c20 protocol"
	depends on PARIDE
	help
	  This option enables support for the (obsolete) 90c20 parallel port
	  IDE protocol from OnSpec (often marketed under the ValuStore brand
	  name). If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will
	  be called on20. You must also have a high-level driver for the
	  type of device that you want to support.

config PARIDE_ON26
	tristate "OnSpec 90c26 protocol"
	depends on PARIDE
	help
	  This option enables support for the 90c26 parallel port IDE protocol
	  from OnSpec Electronics (often marketed under the ValuStore brand
	  name). If you chose to build PARIDE support into your kernel, you
	  may answer Y here to build in the protocol driver, otherwise you
	  should answer M to build it as a loadable module. The module will be
	  called on26. You must also have a high-level driver for the type
	  of device that you want to support.

#
