Text file for the Linux SysKonnect Token Ring ISA/PCI Adapter Driver.
	Text file by: Jay Schulist <jschlst@samba.org>

The Linux SysKonnect Token Ring driver works with the SysKonnect TR4/16(+) ISA,
SysKonnect TR4/16(+) PCI, SysKonnect TR4/16 PCI, and older revisions of the
SK NET TR4/16 ISA card.

Latest information on this driver can be obtained on the Linux-SNA WWW site.
Please point your browser to: 
http://www.linux-sna.org

Many thanks to Christoph Goos for his excellent work on this driver and
SysKonnect for donating the adapters to Linux-SNA for the testing and 
maintenance of this device driver.

Important information to be noted:
1. Adapters can be slow to open (~20 secs) and close (~5 secs), please be 
   patient.
2. This driver works very well when autoprobing for adapters. Why even 
   think about those nasty io/int/dma settings of modprobe when the driver 
   will do it all for you!

This driver is rather simple to use. Select Y to Token Ring adapter support
in the kernel configuration. A choice for SysKonnect Token Ring adapters will
appear. This drives supports all SysKonnect ISA and PCI adapters. Choose this
option. I personally recommend compiling the driver as a module (M), but if you
you would like to compile it statically answer Y instead.

This driver supports multiple adapters without the need to load multiple copies
of the driver. You should be able to load up to 7 adapters without any kernel
modifications, if you are in need of more please contact the maintainer of this
driver.

Load the driver either by lilo/loadlin or as a module. When a module using the
following command will suffice for most:

# modprobe sktr

This will produce output similar to the following: (Output is user specific)

sktr.c: v1.01 08/29/97 by Christoph Goos
tr0: SK NET TR 4/16 PCI found at 0x6100, using IRQ 17.
tr1: SK NET TR 4/16 PCI found at 0x6200, using IRQ 16.
tr2: SK NET TR 4/16 ISA found at 0xa20, using IRQ 10 and DMA 5.

Now just setup the device via ifconfig and set and routes you may have. After
this you are ready to start sending some tokens.

Errata:
For anyone wondering where to pick up the SysKonnect adapters please browse
to http://www.syskonnect.com

This driver is under the GNU General Public License. Its Firmware image is 
included as an initialized C-array and is licensed by SysKonnect to the Linux 
users of this driver. However no warranty about its fitness is expressed or 
implied by SysKonnect.

Below find attached the setting for the SK NET TR 4/16 ISA adapters
-------------------------------------------------------------------

                    ***************************
                    ***   C O N T E N T S   ***
                    ***************************

                1) Location of DIP-Switch W1
                2) Default settings
                3) DIP-Switch W1 description


  ==============================================================
  CHAPTER 1     LOCATION OF DIP-SWITCH
  ==============================================================

UÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
þUÄÄÄÄÄÄ¿                         UÄÄÄÄÄ¿            UÄÄÄ¿         þ
þAÄÄÄÄÄÄU                      W1 AÄÄÄÄÄU     UÄÄÄÄ¿ þ   þ         þ
þUÄÄÄÄÄÄ¿                                     þ    þ þ   þ      UÄÄÅ¿
þAÄÄÄÄÄÄU              UÄÄÄÄÄÄÄÄÄÄÄ¿          AÄÄÄÄU þ   þ      þ  þþ
þUÄÄÄÄÄÄ¿              þ           þ          UÄÄÄ¿  AÄÄÄU      AÄÄÅU
þAÄÄÄÄÄÄU              þ TMS380C26 þ          þ   þ                þ
þUÄÄÄÄÄÄ¿              þ           þ          AÄÄÄU                AÄ¿
þAÄÄÄÄÄÄU              þ           þ                               þ þ
þ                      AÄÄÄÄÄÄÄÄÄÄÄU                               þ þ
þ                                                                  þ þ
þ                                                                  AÄU
þ                                                                  þ
þ                                                                  þ
þ                                                                  þ
þ                                                                  þ
AÄÄÄÄÄÄÄÄÄÄÄÄAÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄAÄÄAÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄAÄÄÄÄÄÄÄÄÄU
             AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄU  AÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄU

  ==============================================================
  CHAPTER 2     DEFAULT SETTINGS
  ==============================================================

          W1    1  2  3  4  5  6  7  8
        +------------------------------+
        | ON    X                      |
        | OFF      X  X  X  X  X  X  X |
        +------------------------------+

        W1.1 = ON               Adapter drives address lines SA17..19
        W1.2 - 1.5 = OFF        BootROM disabled
        W1.6 - 1.8 = OFF        I/O address 0A20h

  ==============================================================
  CHAPTER 3     DIP SWITCH W1 DESCRIPTION
  ==============================================================

      UÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄ¿  ON
      þ 1 þ 2 þ 3 þ 4 þ 5 þ 6 þ 7 þ 8 þ
      AÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄAÄÄÄU  OFF
      |AD | BootROM Addr. |  I/O      |
      +-+-+-------+-------+-----+-----+
        |         |             |
        |         |             +------ 6     7     8
        |         |                     ON    ON    ON       1900h
        |         |                     ON    ON    OFF      0900h
        |         |                     ON    OFF   ON       1980h
        |         |                     ON    OFF   OFF      0980h
        |         |                     OFF   ON    ON       1b20h
        |         |                     OFF   ON    OFF      0b20h
        |         |                     OFF   OFF   ON       1a20h
        |         |                     OFF   OFF   OFF      0a20h    (+)
        |         |
        |         |
        |         +-------- 2     3     4     5
        |                   OFF   x     x     x       disabled  (+)
        |                   ON    ON    ON    ON      C0000
        |                   ON    ON    ON    OFF     C4000
        |                   ON    ON    OFF   ON      C8000
        |                   ON    ON    OFF   OFF     CC000
        |                   ON    OFF   ON    ON      D0000
        |                   ON    OFF   ON    OFF     D4000
        |                   ON    OFF   OFF   ON      D8000
        |                   ON    OFF   OFF   OFF     DC000
        |
        |
        +----- 1
               OFF    adapter does NOT drive SA<17..19>
               ON     adapter drives SA<17..19>  (+)


        (+) means default setting

                       ********************************
