HiSax is a Linux hardware-level driver for passive ISDN cards with Siemens
chipset (ISAC_S 2085/2086/2186, HSCX SAB 82525). It is based on the Teles
driver from Jan den Ouden.
It is meant to be used with isdn4linux, an ISDN link-level module for Linux 
written by Fritz Elfert.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.


Supported cards
---------------

Teles 8.0/16.0/16.3 and compatible ones
Teles 16.3c
Teles S0/PCMCIA
Creatix PnP S0 
Compaq ISDN S0 ISA card
AVM A1 (Fritz, Teledat 150)
ELSA Microlink PCC-16, PCF, PCF-Pro, PCC-8
ELSA Quickstep 1000
ELSA Quickstep 1000PCI
ELSA Quickstep 3000 (same settings as QS1000)
ELSA PCMCIA
ITK ix1-micro Rev.2
Eicon.Diehl Diva 2.0 ISA and PCI (S0 and U interface, no PRO version)
Eicon.Diehl Diva Piccola
ASUSCOM NETWORK INC. ISDNLink 128K PC adapter (order code I-IN100-ST-D)
Dynalink IS64PH (OEM version of ASUSCOM NETWORK INC. ISDNLink 128K adapter)
HFC-2BS0 based cards (TeleInt SA1)
Sedlbauer Speed Card (Speed Win, Teledat 100)
Sedlbauer Speed Star (PCMCIA)
USR Sportster internal TA (compatible Stollmann tina-pp V3)
ith Kommunikationstechnik GmbH MIC 16 ISA card 
Traverse Technologie NETjet PCI S0 card
Dr. Neuhaus Niccy PnP/PCI

Note: PCF, PCF-Pro: up to now, only the ISDN part is supported
      PCC-8: not tested yet
      Teles PCMCIA is EXPERIMENTAL
      Teles 16.3c is EXPERIMENTAL
      Eicon.Diehl Diva U interface not tested

If you know other passive cards with the Siemens chipset, please let me know.
To use the PNP cards you need the isapnptools.
You can combine any card, if there is no conflict between the ressources
(io, mem, irq).


Configuring the driver
----------------------

The HiSax driver can either be built directly into the kernel or as a module.
It can be configured using the command line feature while loading the kernel
with LILO or LOADLIN or, if built as a module, using insmod/modprobe with
parameters.
There is also some config needed before you compile the kernel and/or
modules. It is included in the normal "make [menu]config" target at the
kernel. Don't forget it, especially to select the right D-channel protocol.

Please note: All PnP cards need to be configured with isapnp and will work
only with the HiSax driver used as a module.

a) when built as a module
-------------------------

insmod/modprobe  hisax.o \
  io=iobase irq=IRQ mem=membase type=card_type \
  protocol=D_channel_protocol id=idstring

or, if several cards are installed:

insmod/modprobe hisax.o \
  io=iobase1,iobase2,... irq=IRQ1,IRQ2,... mem=membase1,membase2,... \
  type=card_type1,card_type2,... \
  protocol=D_channel_protocol1,D_channel_protocol2,... \
  id=idstring1%idstring2 ...

where "iobaseN" represents the I/O base address of the Nth card, "membaseN"
the memory base address of the Nth card, etc.

The reason for the delimiter "%" being used in the idstrings is that ","
won't work with the current modules package.

The parameters may be specified in any order. For example, the "io"
parameter may precede the "irq" parameter, or vice versa. If several
cards are installed, the ordering within the comma separated parameter
lists must of course be consistent.

Only parameters applicable to the card type need to be specified. For
example, the Teles 16.3 card is not memory-mapped, so the "mem"
parameter may be omitted for this card. Sometimes it may be necessary
to specify a dummy parameter, however. This is the case when there is
a card of a different type later in the list that needs a parameter
which the preceding card does not. For instance, if a Teles 16.0 card
is listed after a Teles 16.3 card, a dummy memory base parameter of 0
must be specified for the 16.3. Instead of a dummy value, the parameter
can also be skipped by simply omitting the value. For example:
mem=,0xd0000. See example 6 below.

The parameter for the D-Channel protocol may be omitted if you selected the
correct one during kernel config. Valid values are "1" for German 1TR6,
"2" for EDSS1 (Euro ISDN) and "3" for leased lines (no D-Channel).

The Creatix/Teles PnP cards use io1= and io2= instead of io= for specifying 
the I/O addresses of the ISAC and HSCX chips, respectively.

Card types:

    Type                Required parameters (in addition to type and protocol)

    1   Teles 16.0               irq, mem, io
    2   Teles  8.0               irq, mem
    3   Teles 16.3 (non PnP)     irq, io
    4   Creatix/Teles PnP        irq, io0 (ISAC), io1 (HSCX)
    5   AVM A1 (Fritz)           irq, io
    6   ELSA PCC/PCF cards       io or nothing for autodetect (the iobase is
                                 required only if you have more than one ELSA
                                 card in your PC)
    7   ELSA Quickstep 1000      irq, io  (from isapnp setup)
    8   Teles 16.3 PCMCIA     	 irq, io
    9   ITK ix1-micro Rev.2      irq, io
   10   ELSA PCMCIA		 irq, io  (set with card manager)
   11   Eicon.Diehl Diva ISA PnP irq, io
   11   Eicon.Diehl Diva PCI     no parameter
   12   ASUS COM ISDNLink        irq, io  (from isapnp setup)
   13   HFC-2BS0 based cards     irq, io  
   14   Teles 16.3c PnP          irq, io
   15   Sedlbauer Speed Card     irq, io  
   16   USR Sportster internal   irq, io  
   17   MIC card                 irq, io  
   18   ELSA Quickstep 1000PCI   no parameter
   19   Compaq ISDN S0 ISA card  irq, io0, io1, io (from isapnp setup io=IO2)
   20   NETjet PCI card          no parameter
   22   Sedlbauer Speed Star (PCMCIA) irq, io (set with card manager)
   24   Dr. Neuhaus Niccy PnP    irq, io0, io1 (from isapnp setup)
   24   Dr. Neuhaus Niccy PCI    no parameter


        
At the moment IRQ sharing is not possible. Please make sure that your IRQ
is free and enabled for ISA use.
Note: For using the ELSA PCMCIA you need the cardmanager under MSDOS for
enabling at the moment, then boot linux with loadlin.


Examples for module loading

1. Teles 16.3, Euro ISDN, I/O base 280 hex, IRQ 10
   modprobe hisax type=3 protocol=2 io=0x280 irq=10

2. Teles 16.0, 1TR6 ISDN, I/O base d80 hex, IRQ 5, Memory d0000 hex
   modprobe hisax protocol=1 type=1 io=0xd80 mem=0xd0000 irq=5

3. Fritzcard, Euro ISDN, I/O base 340 hex, IRQ 10 and ELSA PCF, Euro ISDN
   modprobe hisax type=5,6 protocol=2,2 io=0x340 irq=10 id=Fritz%Elsa

4. Any ELSA PCC/PCF card, Euro ISDN
   modprobe hisax type=6 protocol=2

5. Teles 16.3 PnP, Euro ISDN, with isapnp configured 
   isapnp config:  (INT 0 (IRQ 10 (MODE +E)))
 		   (IO 0 (BASE 0x0580))
                   (IO 1 (BASE 0x0180))
   modprobe hisax type=4 protocol=2 irq=10 io0=0x580 io1=0x180

6. Teles 16.3, Euro ISDN, I/O base 280 hex, IRQ 12 and
   Teles 16.0, 1TR6, IRQ 5, Memory d0000 hex
   modprobe hisax type=3,1 protocol=2,1 io=0x280 mem=0,0xd0000

   Please note the dummy 0 memory address for the Teles 16.3, used as a
   placeholder as described above, in the last example.

7. Teles PCMCIA, Euro ISDN, I/O base 180 hex, IRQ 15 (default values)
   modprobe hisax type=8 protocol=2 io=0x180 irq=15


b) using LILO/LOADLIN, with the driver compiled directly into the kernel
------------------------------------------------------------------------

hisax=typ1,dp1,pa_1,pb_1,pc_1[,typ2,dp2,pa_2 ... \
      typn,dpn,pa_n,pb_n,pc_n][,idstring1[,idstring2,...,idstringn]]

where
     typ1 = type of 1st card (default depends on kernel settings)
     dp1  = D-Channel protocol of 1st card. 1=1TR6, 2=EDSS1, 3=leased
     pa_1 = 1st parameter (depending on the type of the card)
     pb_1 = 2nd parameter (    "     "   "   "   "   "   "  )
     pc_1 = 3rd parameter (    "     "   "   "   "   "   "  )

     typ2,dp2,pa_2,pb_2,pc_2 = Parameters of the second card (defaults: none)
     typn,dpn,pa_n,pb_n,pc_n = Parameters of the n'th card (up to 16 cards are
                                                                     supported)

     idstring = Driver ID for accessing the particular card with utility
                programs and for identification when using a line monitor
                (default: "HiSax")

                Note: the ID string must start with an alphabetical character!

Card types:
       
  type  
    1 	Teles 16.0     	        pa=irq  pb=membase  pc=iobase
    2 	Teles  8.0              pa=irq  pb=membase
    3 	Teles 16.3              pa=irq  pb=iobase
    4 	Creatix/Teles PNP     	ONLY WORKS AS A MODULE !
    5 	AVM A1 (Fritz)          pa=irq  pb=iobase
    6 	ELSA PCC/PCF cards      pa=iobase or nothing for autodetect
    7   ELSA Quickstep 1000     ONLY WORKS AS A MODULE !
    8   Teles S0 PCMCIA         pa=irq  pb=iobase
    9   ITK ix1-micro Rev.2     pa=irq  pb=iobase
   10   ELSA PCMCIA             pa=irq, pb=io  (set with card manager)
   11   Eicon.Diehl Diva ISAPnP ONLY WORKS AS A MODULE !
   11   Eicon.Diehl Diva PCI    no parameter
   12   ASUS COM ISDNLink       ONLY WORKS AS A MODULE !
   13	HFC-2BS0 based cards    pa=irq  pb=io
   14   Teles 16.3c PnP         ONLY WORKS AS A MODULE !
   15	Sedlbauer Speed Card    pa=irq  pb=io (Speed Win only as module !)  
   16   USR Sportster internal  pa=irq  pb=io
   17   MIC card                pa=irq  pb=io
   18   ELSA Quickstep 1000PCI  no parameter
   19   Compaq ISDN S0 ISA card ONLY WORKS AS A MODULE !
   20   NETjet PCI card         no parameter
   21   Sedlbauer Speed Star (PCMCIA)  pa=irq, pb=io  (set with card manager)

Running the driver
------------------

When you insmod isdn.o and hisax.o (or with the in-kernel version, during 
boot time), a few lines should appear in your syslog. Look for something like:

Apr 13 21:01:59 kke01 kernel: HiSax: Driver for Siemens chip set ISDN cards
Apr 13 21:01:59 kke01 kernel: HiSax: Version 2.1
Apr 13 21:01:59 kke01 kernel: HiSax: Revisions 1.14/1.9/1.10/1.25/1.8
Apr 13 21:01:59 kke01 kernel: HiSax: Total 1 card defined
Apr 13 21:01:59 kke01 kernel: HiSax: Card 1 Protocol EDSS1 Id=HiSax1 (0)
Apr 13 21:01:59 kke01 kernel: HiSax: Elsa driver Rev. 1.13
...
Apr 13 21:01:59 kke01 kernel: Elsa: PCF-Pro found at 0x360 Rev.:C IRQ 10
Apr 13 21:01:59 kke01 kernel: Elsa: timer OK; resetting card
Apr 13 21:01:59 kke01 kernel: Elsa: HSCX version A: V2.1  B: V2.1
Apr 13 21:01:59 kke01 kernel: Elsa: ISAC 2086/2186 V1.1
...
Apr 13 21:01:59 kke01 kernel: HiSax: DSS1 Rev. 1.14
Apr 13 21:01:59 kke01 kernel: HiSax: 2 channels added

This means that the card is ready for use.
Cabling problems or line-downs are not detected, and only some ELSA cards can 
detect the S0 power.

Remember that, according to the new strategy for accessing low-level drivers
from within isdn4linux, you should also define a driver ID while doing
insmod: Simply append hisax_id=<SomeString> to the insmod command line. This
string MUST NOT start with a digit or a small 'x'!

At this point you can run a 'cat /dev/isdnctrl0' and view debugging 
messages. 

At the moment, debugging messages are enabled with the hisaxctrl tool:

    hisaxctrl <DriverId> DebugCmd <debugging_flags>

<DriverId> default is HiSax, if you didn't specify one.

DebugCmd is  1  for generic debugging
            11  for layer 1 development debugging
            13  for layer 3 development debugging

where <debugging_flags> is the integer sum of the following debugging
options you wish enabled:

With DebugCmd set to 1:

         1  Link-level <--> hardware-level communication
         2  Top state machine
         4  D-Channel Q.931 (call control messages)
         8  D-Channel Q.921
        16  B-Channel X.75
        32  D-Channel l2
        64  B-Channel l2
       128  D-Channel link state debugging
       256  B-Channel link state debugging
       512  TEI debug
      1024  LOCK debug in callc.c
      2048  More paranoid debug in callc.c (not for normal use)

With DebugCmd set to 11:

         1  Warnings (default: on)
         2  IRQ status
         4  ISAC
         8  ISAC FIFO
        16  HSCX
        32  HSCX FIFO (attention: full B-Channel output!)
        64  D-Channel LAPD frame types

With DebugCmd set to 13:

         1  Warnings (default: on)
         2  l3 protocol descriptor errors
         4  l3 state machine
         8  charge info debugging (1TR6)

For example, 'hisaxctrl HiSax 1 0x3ff' enables full generic debugging.

Because of some obscure problems with some switch equipment, the delay
between the CONNECT message and sending the first data on the B-channel is now
configurable with 

hisaxctrl <DriverId> 2 <delay>
<delay> in ms Value between 50 and 800 ms is recommended.


Warning
-------
HiSax is a work in progress and may crash your machine. It has not been
certified and therefore operation on your PTT's ISDN network is probably
illegal.


Limitations
-----------
At this time, HiSax only works on Euro ISDN lines and German 1TR6 lines.
For leased lines see appendix. 

Bugs 
----
If you find any, please let me know. 


Thanks
------
Special thanks to:

        Emil Stephan for the name HiSax which is a mix of HSCX and ISAC.

        Fritz Elfert, Jan den Ouden, Michael Hipp, Michael Wein,
        Andreas Kool, Pekka Sarnila, Sim Yskes, Johan Myrre'en,
	Klaus-Peter Nischke (ITK AG), Christof Petig, Werner Fehn (ELSA GmbH),
	Volker Schmidt
	Edgar Toernig and Marcus Niemann for the Sedlbauer driver
	Stephan von Krawczynski
	Juergen Quade for the Leased Line part
	Klaus Lichtenwalder (Klaus.Lichtenwalder@WebForum.DE), for ELSA PCMCIA support
        and more people who are hunting bugs. (If I forgot somebody, please
	send me a mail). 

        Firma ELSA GmbH
        Firma Eicon.Diehl GmbH
        Firma Dynalink NL
	Firma ASUSCOM NETWORK INC. Taiwan
	Firma S.u.S.E
	Firma ith Kommunikationstechnik GmbH
	Firma Traverse Technologie Australia
        
        My girl friend and partner in life Ute for her patience with me.


Enjoy,

Karsten Keil   
keil@temic-ech.spacenet.de


Appendix: Teles PCMCIA driver
-----------------------------

See 
   http://www.stud.uni-wuppertal.de/~ea0141/pcmcia.html
for instructions.

Appendix: Linux and ISDN-leased lines
-------------------------------------

Original from Juergen Quade, new version KKe.

Attention NEW VERSION, the old leased line syntax won't work !!!

You can use HiSax to connect your Linux-Box via an ISDN leased line
to e.g. the Internet:

1. Build a kernel which includes the HiSax driver either as a module
   or as part of the kernel.
     cd /usr/src/linux
     make menuconfig
     <ISDN subsystem - ISDN support -- HiSax>
     make clean; make dep; make zImage; make modules; make modules_install
2. Install the new kernel
     cp /usr/src/linux/arch/i386/boot/zImage /etc/kernel/linux.isdn
     vi /etc/lilo.conf
     <add new kernel in the bootable image section>
     lilo
3. in case the hisax driver is a "fixed" part of the kernel, configure
   the driver with lilo:
     vi /etc/lilo.conf
     <add HiSax driver parameter in the global section (see below)>
     lilo
   Your lilo.conf _might_ look like the following:

	# LILO configuration-file
	# global section
    # teles 16.0 on IRQ=5, MEM=0xd8000, PORT=0xd80
	append="hisax=1,3,5,0xd8000,0xd80,HiSax"
    # teles 16.3 (non pnp) on IRQ=15, PORT=0xd80
	# append="hisax=3,3,5,0xd8000,0xd80,HiSax"
	boot=/dev/sda
	compact        # faster, but won't work on all systems.
	linear
	read-only
	prompt
	timeout=100
	vga = normal    # force sane state
	# Linux bootable partition config begins
	image = /etc/kernel/linux.isdn
	root = /dev/sda1
	label = linux.isdn
	#
	image = /etc/kernel/linux-2.0.30
	root = /dev/sda1
	label = linux.secure

   In the line starting with "append" you have to adapt the parameters
   according to your card (see above in this file)

3. boot the new linux.isdn kernel
4. start the ISDN subsystem:
   a) load - if necessary - the modules (depends, whether you compiled
      the ISDN driver as module or not)
      According to the type of card you have to specify the necessary
      driver parameter (irq, io, mem, type, protocol).
      For the leased line the protocol is "3". See the table above for
      the parameters, which you have to specify depending on your card.
   b) configure i4l
      /sbin/isdnctrl addif isdn0
      # EAZ  1 -- B1 channel   2 --B2 channel
      /sbin/isdnctrl eaz isdn0 1
      /sbin/isdnctrl secure isdn0 on
      /sbin/isdnctrl huptimeout isdn0 0
      /sbin/isdnctrl l2_prot isdn0 hdlc
      # Attention you must not set an outgoing number !!! This won't work !!!
      # The incomming number is LEASED0 for the first card, LEASED1 for the
      # second and so on. 
      /sbin/isdnctrl addphone isdn0 in LEASED0
      # Here is no need to bind the channel.
   c) in case the remote partner is a CISCO:
      /sbin/isdnctrl encap isdn0 cisco-h
   d) configure the interface
      /sbin/ifconfig isdn0 ${LOCAL_IP} pointopoint ${REMOTE_IP}
   e) set the routes
      /sbin/route add -host ${REMOTE_IP} isdn0
      /sbin/route add default gw ${REMOTE_IP}
   f) switch the card into leased mode for each used B-channel 
      /sbin/hisaxctrl HiSax 5 1
 
Remarks:
a) If you have a CISCO don't forget to switch off the KEEP ALIVE option!

Here an example script:
#!/bin/sh
# Start/Stop ISDN lesaed line connection

I4L_AS_MODULE=yes
I4L_REMOTE_IS_CISCO=no
I4L_MODULE_PARAMS="type=16 io=0x268 irq=7 "
I4L_DEBUG=no
I4L_LEASED_128K=yes
LOCAL_IP=192.168.1.1
REMOTE_IP=192.168.2.1

case "$1" in
    start)
	echo "Starting ISDN ..."
        if [ ${I4L_AS_MODULE} = "yes" ]; then
		echo "loading modules..."
		/sbin/modprobe hisax ${I4L_MODULE_PARAMS}
	fi
	# configure interface
	/sbin/isdnctrl addif isdn0
	/sbin/isdnctrl secure isdn0 on
	if [ ${I4L_DEBUG} = "yes" ]; then
		/sbin/isdnctrl verbose 7
		/sbin/hisaxctrl HiSax 1 0xffff
		/sbin/hisaxctrl HiSax 11 0xff
		cat  /dev/isdnctrl >/tmp/lea.log &
	fi
	if [ ${I4L_REMOTE_IS_CISCO} = "yes" ]; then
		/sbin/isdnctrl encap isdn0 cisco-h
	fi
	/sbin/isdnctrl huptimeout isdn0 0
	# B-CHANNEL 1
	/sbin/isdnctrl eaz isdn0 1
	/sbin/isdnctrl l2_prot isdn0 hdlc
	# 1. card
	/sbin/isdnctrl addphone isdn0 in LEASED0
        if [ ${I4L_LEASED_128K} = "yes" ]; then
		/sbin/isdnctrl addslave isdn0 isdn0s
		/sbin/isdnctrl secure isdn0s on
		/sbin/isdnctrl huptimeout isdn0s 0
		# B-CHANNEL 2
		/sbin/isdnctrl eaz isdn0s 2
		/sbin/isdnctrl l2_prot isdn0s hdlc
		# 1. card
		/sbin/isdnctrl addphone isdn0s in LEASED0
		if [ ${I4L_REMOTE_IS_CISCO} = "yes" ]; then
			/sbin/isdnctrl encap isdn0s cisco-h
		fi
	fi
	# configure tcp/ip
	/sbin/ifconfig isdn0 ${LOCAL_IP} pointopoint ${REMOTE_IP}
	/sbin/route add -host ${REMOTE_IP} isdn0
	/sbin/route add default gw ${REMOTE_IP}
	# switch to leased mode
	# B-CHANNEL 1
	/sbin/hisaxctrl HiSax 5 1
        if [ ${I4L_LEASED_128K} = "yes" ]; then
		# B-CHANNEL 2
		/sbin/hisaxctrl HiSax 5 2
	fi
	;;
    stop)
	/sbin/ifconfig isdn0 down
	/sbin/isdnctrl delif isdn0
	if [ ${I4L_DEBUG} = "yes" ]; then
		killall cat
	fi
	if [ ${I4L_AS_MODULE} = "yes" ]; then
		/sbin/rmmod hisax
		/sbin/rmmod isdn
		/sbin/rmmod ppp
		/sbin/rmmod slhc
	fi
	;;
    *)
	echo "Usage: $0 {start|stop}"
	exit 1
esac
exit 0

