
menu "Passive cards"

config ISDN_DRV_HISAX
	tristate "HiSax SiemensChipSet driver support"
	select CRC_CCITT
	---help---
	  This is a driver supporting the Siemens chipset on various
	  ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles
	  S0-16.3, Teles S0-8, Teles/Creatix PnP, ITK micro ix1 and many
	  compatibles).

	  HiSax is just the name of this driver, not the name of any hardware.

	  If you have a card with such a chipset, you should say Y here and
	  also to the configuration option of the driver for your particular
	  card, below.

if ISDN_DRV_HISAX!=n

comment "D-channel protocol features"

config HISAX_EURO
	bool "HiSax Support for EURO/DSS1"
	help
	  Say Y or N according to the D-channel protocol which your local
	  telephone service company provides.

	  The call control protocol E-DSS1 is used in most European countries.
	  If unsure, say Y.

config DE_AOC
	bool "Support for german chargeinfo"
	depends on HISAX_EURO
	help
	  If you want that the HiSax hardware driver sends messages to the
	  upper level of the isdn code on each AOCD (Advice Of Charge, During
	  the call -- transmission of the fee information during a call) and
	  on each AOCE (Advice Of Charge, at the End of the call --
	  transmission of fee information at the end of the call), say Y here.
	  This works only in Germany.

config HISAX_NO_SENDCOMPLETE
	bool "Disable sending complete"
	depends on HISAX_EURO
	help
	  If you have trouble with some ugly exchanges or you live in
	  Australia select this option.

config HISAX_NO_LLC
	bool "Disable sending low layer compatibility"
	depends on HISAX_EURO
	help
	  If you have trouble with some ugly exchanges try to select this
	  option.

config HISAX_NO_KEYPAD
	bool "Disable keypad protocol option"
	depends on HISAX_EURO
	help
	  If you like to send special dial strings including * or # without
	  using the keypad protocol, select this option.

config HISAX_1TR6
	bool "HiSax Support for german 1TR6"
	help
	  Say Y or N according to the D-channel protocol which your local
	  telephone service company provides.

	  1TR6 is an old call control protocol which was used in Germany
	  before E-DSS1 was established. Nowadays, all new lines in Germany
	  use E-DSS1.

config HISAX_NI1
	bool "HiSax Support for US NI1"
	help
	  Enable this if you like to use ISDN in US on a NI1 basic rate
	  interface.

config HISAX_MAX_CARDS
	int "Maximum number of cards supported by HiSax"
	default "8"
	help
	  This option allows you to specify the maximum number of cards which
	  the HiSax driver will be able to handle.  

comment "HiSax supported cards"

config HISAX_16_0
	bool "Teles 16.0/8.0"
	depends on ISA
	help
	  This enables HiSax support for the Teles ISDN-cards S0-16.0, S0-8
	  and many compatibles.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port/shmem settings.

config HISAX_16_3
	bool "Teles 16.3 or PNP or PCMCIA"
	help
	  This enables HiSax support for the Teles ISDN-cards S0-16.3 the
	  Teles/Creatix PnP and the Teles PCMCIA.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_TELESPCI
	bool "Teles PCI"
	depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
	help
	  This enables HiSax support for the Teles PCI.
	  See <file:Documentation/isdn/README.HiSax> on how to configure it.

config HISAX_S0BOX
	bool "Teles S0Box"
	help
	  This enables HiSax support for the Teles/Creatix parallel port
	  S0BOX.  See <file:Documentation/isdn/README.HiSax> on how to
	  configure it.

config HISAX_AVM_A1
	bool "AVM A1 (Fritz)"
	depends on ISA
	help
	  This enables HiSax support for the AVM A1 (aka "Fritz").

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_FRITZPCI
	bool "AVM PnP/PCI (Fritz!PnP/PCI)"
	depends on BROKEN || !PPC64
	help
	  This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI".
	  See <file:Documentation/isdn/README.HiSax> on how to configure it.

config HISAX_AVM_A1_PCMCIA
	bool "AVM A1 PCMCIA (Fritz)"
	help
	  This enables HiSax support for the AVM A1 "Fritz!PCMCIA").
	  See <file:Documentation/isdn/README.HiSax> on how to configure it.

config HISAX_ELSA
	bool "Elsa cards"
	help
	  This enables HiSax support for the Elsa Mircolink ISA cards, for the
	  Elsa Quickstep series cards and Elsa PCMCIA.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_IX1MICROR2
	bool "ITK ix1-micro Revision 2"
	depends on ISA
	help
	  This enables HiSax support for the ITK ix1-micro Revision 2 card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_DIEHLDIVA
	bool "Eicon.Diehl Diva cards"
	help
	  This enables HiSax support for the Eicon.Diehl Diva none PRO
	  versions passive ISDN cards.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_ASUSCOM
	bool "ASUSCOM ISA cards"
	depends on ISA
	help
	  This enables HiSax support for the AsusCom and their OEM versions
	  passive ISDN ISA cards.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_TELEINT
	bool "TELEINT cards"
	depends on ISA
	help
	  This enables HiSax support for the TELEINT SA1 semiactiv ISDN card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_HFCS
	bool "HFC-S based cards"
	depends on ISA
	help
	  This enables HiSax support for the HFC-S 2BDS0 based cards, like
	  teles 16.3c.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_SEDLBAUER
	bool "Sedlbauer cards"
	help
	  This enables HiSax support for the Sedlbauer passive ISDN cards.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using the different cards, a different D-channel protocol, or
	  non-standard IRQ/port settings.

config HISAX_SPORTSTER
	bool "USR Sportster internal TA"
	depends on ISA
	help
	  This enables HiSax support for the USR Sportster internal TA card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_MIC
	bool "MIC card"
	depends on ISA
	help
	  This enables HiSax support for the ITH MIC card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_NETJET
	bool "NETjet card"
	depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
	help
	  This enables HiSax support for the NetJet from Traverse
	  Technologies.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_NETJET_U
	bool "NETspider U card"
	depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
	help
	  This enables HiSax support for the Netspider U interface ISDN card
	  from Traverse Technologies.
	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_NICCY
	bool "Niccy PnP/PCI card"
	help
	  This enables HiSax support for the Dr. Neuhaus Niccy PnP or PCI.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_ISURF
	bool "Siemens I-Surf card"
	depends on ISA
	help
	  This enables HiSax support for the Siemens I-Talk/I-Surf card with
	  ISAR chip.
	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_HSTSAPHIR
	bool "HST Saphir card"
	depends on ISA
	help
	  This enables HiSax support for the HST Saphir card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_BKM_A4T
	bool "Telekom A4T card"
	depends on PCI && PCI_LEGACY
	help
	  This enables HiSax support for the Telekom A4T card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_SCT_QUADRO
	bool "Scitel Quadro card"
	depends on PCI && PCI_LEGACY
	help
	  This enables HiSax support for the Scitel Quadro card.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_GAZEL
	bool "Gazel cards"
	help
	  This enables HiSax support for the Gazel cards.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_HFC_PCI
	bool "HFC PCI-Bus cards"
	depends on PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
	help
	  This enables HiSax support for the HFC-S PCI 2BDS0 based cards.

	  For more information see under
	  <file:Documentation/isdn/README.hfc-pci>.

config HISAX_W6692
	bool "Winbond W6692 based cards"
	depends on PCI && PCI_LEGACY
	help
	  This enables HiSax support for Winbond W6692 based PCI ISDN cards.

	  See <file:Documentation/isdn/README.HiSax> on how to configure it
	  using a different D-channel protocol, or non-standard IRQ/port
	  settings.

config HISAX_HFC_SX
	bool "HFC-S+, HFC-SP, HFC-PCMCIA cards"
	help
	  This enables HiSax support for the HFC-S+, HFC-SP and HFC-PCMCIA
	  cards. This code is not finished yet.

config HISAX_ENTERNOW_PCI
	bool "Formula-n enter:now PCI card"
	depends on HISAX_NETJET && PCI && PCI_LEGACY && (BROKEN || !(SPARC || PPC || PARISC || M68K || (MIPS && !CPU_LITTLE_ENDIAN) || FRV))
	help
	  This enables HiSax support for the Formula-n enter:now PCI
	  ISDN card.

endif

if ISDN_DRV_HISAX

config HISAX_DEBUG
	bool "HiSax debugging"
	help
	  This enables debugging code in the new-style HiSax drivers, i.e.
	  the ST5481 USB driver currently. 
	  If in doubt, say yes.

comment "HiSax PCMCIA card service modules"

config HISAX_SEDLBAUER_CS
	tristate "Sedlbauer PCMCIA cards"
	depends on PCMCIA && HISAX_SEDLBAUER
	help
	  This enables the PCMCIA client driver for the Sedlbauer Speed Star
	  and Speed Star II cards.

config HISAX_ELSA_CS
	tristate "ELSA PCMCIA MicroLink cards"
	depends on PCMCIA && HISAX_ELSA
	help
	  This enables the PCMCIA client driver for the Elsa PCMCIA MicroLink
	  card.

config HISAX_AVM_A1_CS
	tristate "AVM A1 PCMCIA cards"
	depends on PCMCIA && ISDN_DRV_HISAX
	help
	  This enables the PCMCIA client driver for the AVM A1 / Fritz!Card
	  PCMCIA cards.

config HISAX_TELES_CS
	tristate "TELES PCMCIA cards"
	depends on PCMCIA && HISAX_16_3
	help
	  This enables the PCMCIA client driver for the Teles PCMCIA cards.

comment "HiSax sub driver modules"

config HISAX_ST5481
	tristate "ST5481 USB ISDN modem (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	select ISDN_HDLC
	select CRC_CCITT
	select BITREVERSE
	help
	  This enables the driver for ST5481 based USB ISDN adapters,
	  e.g. the BeWan Gazel 128 USB

config HISAX_HFCUSB
	tristate "HFC USB based ISDN modems (EXPERIMENTAL)"
	depends on USB && EXPERIMENTAL
	help
	  This enables the driver for HFC USB based ISDN modems.

config HISAX_HFC4S8S
	tristate "HFC-4S/8S based ISDN cards (EXPERIMENTAL)"
	depends on EXPERIMENTAL
	help
	  This enables the driver for HFC-4S/8S based ISDN cards.

config HISAX_FRITZ_PCIPNP
	tristate "AVM Fritz!Card PCI/PCIv2/PnP support (EXPERIMENTAL)"
	depends on PCI && PCI_LEGACY && EXPERIMENTAL
	help
	  This enables the driver for the AVM Fritz!Card PCI,
	  Fritz!Card PCI v2 and Fritz!Card PnP.
	  (the latter also needs you to select "ISA Plug and Play support"
	  from the menu "Plug and Play configuration")

config HISAX_AVM_A1_PCMCIA
	bool
	depends on HISAX_AVM_A1_CS
	default y

endif

endmenu

